forked from OSchip/llvm-project
42 lines
1.3 KiB
C++
42 lines
1.3 KiB
C++
//===--- LexerUtils.cpp - clang-tidy---------------------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "LexerUtils.h"
|
|
|
|
namespace clang {
|
|
namespace tidy {
|
|
namespace utils {
|
|
namespace lexer {
|
|
|
|
Token getPreviousToken(const ASTContext &Context, SourceLocation Location,
|
|
bool SkipComments) {
|
|
const auto &SourceManager = Context.getSourceManager();
|
|
Token Token;
|
|
Token.setKind(tok::unknown);
|
|
Location = Location.getLocWithOffset(-1);
|
|
auto StartOfFile =
|
|
SourceManager.getLocForStartOfFile(SourceManager.getFileID(Location));
|
|
while (Location != StartOfFile) {
|
|
Location = Lexer::GetBeginningOfToken(Location, SourceManager,
|
|
Context.getLangOpts());
|
|
if (!Lexer::getRawToken(Location, Token, SourceManager,
|
|
Context.getLangOpts()) &&
|
|
(!SkipComments || !Token.is(tok::comment))) {
|
|
break;
|
|
}
|
|
Location = Location.getLocWithOffset(-1);
|
|
}
|
|
return Token;
|
|
}
|
|
|
|
} // namespace lexer
|
|
} // namespace utils
|
|
} // namespace tidy
|
|
} // namespace clang
|