//===--- 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