clang-tools 23.0.0git
clang::tidy::utils::lexer Namespace Reference

Classes

struct  CommentToken

Functions

std::pair< std::optional< Token >, SourceLocation > getPreviousTokenAndStart (SourceLocation Location, const SourceManager &SM, const LangOptions &LangOpts, bool SkipComments)
std::optional< Token > getPreviousToken (SourceLocation Location, const SourceManager &SM, const LangOptions &LangOpts, bool SkipComments=true)
 Returns previous token or std::nullopt if not found.
SourceLocation findPreviousTokenStart (SourceLocation Start, const SourceManager &SM, const LangOptions &LangOpts)
SourceLocation findPreviousTokenKind (SourceLocation Start, const SourceManager &SM, const LangOptions &LangOpts, tok::TokenKind TK)
SourceLocation findNextTerminator (SourceLocation Start, const SourceManager &SM, const LangOptions &LangOpts)
bool rangeContainsExpansionsOrDirectives (SourceRange Range, const SourceManager &SM, const LangOptions &LangOpts)
 Re-lex the provide Range and return false if either a macro spans multiple tokens, a pre-processor directive or failure to retrieve the next token is found, otherwise true.
static std::vector< CommentTokencollectCommentsInRange (CharSourceRange Range, const SourceManager &SM, const LangOptions &LangOpts, CommentCollectionMode Mode)
std::vector< CommentTokengetCommentsInRange (CharSourceRange Range, const SourceManager &SM, const LangOptions &LangOpts)
 Returns all comment tokens found in the given range.
std::vector< CommentTokengetTrailingCommentsInRange (CharSourceRange Range, const SourceManager &SM, const LangOptions &LangOpts)
 Returns comment tokens found in the given range. If a non-comment token is encountered, clears previously collected comments and continues.
CharSourceRange findTokenTextInRange (CharSourceRange Range, const SourceManager &SM, const LangOptions &LangOpts, llvm::function_ref< bool(const Token &)> Pred)
 Returns source range of the first token in Range matching Pred. The returned char range starts at the matched token and ends at the start of the next token. Returns invalid range if no token matches.
std::optional< Token > getQualifyingToken (tok::TokenKind TK, CharSourceRange Range, const ASTContext &Context, const SourceManager &SM)
 Assuming that Range spans a CVR-qualified type, returns the token in Range that is responsible for the qualification. Range must be valid with respect to SM. Returns std::nullopt if no.
static bool breakAndReturnEnd (const Stmt &S)
static bool breakAndReturnEndPlus1Token (const Stmt &S)
static SourceLocation getSemicolonAfterStmtEndLoc (const SourceLocation &EndLoc, const SourceManager &SM, const LangOptions &LangOpts)
SourceLocation getUnifiedEndLoc (const Stmt &S, const SourceManager &SM, const LangOptions &LangOpts)
 Stmt->getEndLoc does not always behave the same way depending on Token type.
SourceLocation getLocationForNoexceptSpecifier (const FunctionDecl *FuncDecl, const SourceManager &SM)
 For a given FunctionDecl returns the location where you would need to place the noexcept specifier.
template<typename TokenKind, typename... TokenKinds>
SourceLocation findPreviousAnyTokenKind (SourceLocation Start, const SourceManager &SM, const LangOptions &LangOpts, TokenKind TK, TokenKinds... TKs)
template<typename TokenKind, typename... TokenKinds>
SourceLocation findNextAnyTokenKind (SourceLocation Start, const SourceManager &SM, const LangOptions &LangOpts, TokenKind TK, TokenKinds... TKs)
std::optional< Token > findNextTokenIncludingComments (SourceLocation Start, const SourceManager &SM, const LangOptions &LangOpts)
std::optional< Token > findNextTokenSkippingComments (SourceLocation Start, const SourceManager &SM, const LangOptions &LangOpts)

Function Documentation

◆ breakAndReturnEnd()

bool clang::tidy::utils::lexer::breakAndReturnEnd ( const Stmt & S)
static

Definition at line 276 of file LexerUtils.cpp.

Referenced by getUnifiedEndLoc().

◆ breakAndReturnEndPlus1Token()

bool clang::tidy::utils::lexer::breakAndReturnEndPlus1Token ( const Stmt & S)
static

Definition at line 280 of file LexerUtils.cpp.

Referenced by getUnifiedEndLoc().

◆ collectCommentsInRange()

std::vector< CommentToken > clang::tidy::utils::lexer::collectCommentsInRange ( CharSourceRange Range,
const SourceManager & SM,
const LangOptions & LangOpts,
CommentCollectionMode Mode )
static

Definition at line 108 of file LexerUtils.cpp.

Referenced by getCommentsInRange(), and getTrailingCommentsInRange().

◆ findNextAnyTokenKind()

template<typename TokenKind, typename... TokenKinds>
SourceLocation clang::tidy::utils::lexer::findNextAnyTokenKind ( SourceLocation Start,
const SourceManager & SM,
const LangOptions & LangOpts,
TokenKind TK,
TokenKinds... TKs )

◆ findNextTerminator()

◆ findNextTokenIncludingComments()

std::optional< Token > clang::tidy::utils::lexer::findNextTokenIncludingComments ( SourceLocation Start,
const SourceManager & SM,
const LangOptions & LangOpts )
inline

◆ findNextTokenSkippingComments()

◆ findPreviousAnyTokenKind()

template<typename TokenKind, typename... TokenKinds>
SourceLocation clang::tidy::utils::lexer::findPreviousAnyTokenKind ( SourceLocation Start,
const SourceManager & SM,
const LangOptions & LangOpts,
TokenKind TK,
TokenKinds... TKs )

◆ findPreviousTokenKind()

SourceLocation clang::tidy::utils::lexer::findPreviousTokenKind ( SourceLocation Start,
const SourceManager & SM,
const LangOptions & LangOpts,
tok::TokenKind TK )

◆ findPreviousTokenStart()

SourceLocation clang::tidy::utils::lexer::findPreviousTokenStart ( SourceLocation Start,
const SourceManager & SM,
const LangOptions & LangOpts )

◆ findTokenTextInRange()

CharSourceRange clang::tidy::utils::lexer::findTokenTextInRange ( CharSourceRange Range,
const SourceManager & SM,
const LangOptions & LangOpts,
llvm::function_ref< bool(const Token &)> Pred )

Returns source range of the first token in Range matching Pred. The returned char range starts at the matched token and ends at the start of the next token. Returns invalid range if no token matches.

Definition at line 183 of file LexerUtils.cpp.

Referenced by clang::tidy::google::ExplicitConstructorCheck::check(), and clang::tidy::readability::RedundantQualifiedAliasCheck::check().

◆ getCommentsInRange()

std::vector< CommentToken > clang::tidy::utils::lexer::getCommentsInRange ( CharSourceRange Range,
const SourceManager & SM,
const LangOptions & LangOpts )

Returns all comment tokens found in the given range.

Definition at line 168 of file LexerUtils.cpp.

References collectCommentsInRange().

◆ getLocationForNoexceptSpecifier()

SourceLocation clang::tidy::utils::lexer::getLocationForNoexceptSpecifier ( const FunctionDecl * FuncDecl,
const SourceManager & SM )

For a given FunctionDecl returns the location where you would need to place the noexcept specifier.

Definition at line 338 of file LexerUtils.cpp.

References FuncDecl.

Referenced by clang::tidy::performance::NoexceptFunctionBaseCheck::check().

◆ getPreviousToken()

◆ getPreviousTokenAndStart()

std::pair< std::optional< Token >, SourceLocation > clang::tidy::utils::lexer::getPreviousTokenAndStart ( SourceLocation Location,
const SourceManager & SM,
const LangOptions & LangOpts,
bool SkipComments )

◆ getQualifyingToken()

std::optional< Token > clang::tidy::utils::lexer::getQualifyingToken ( tok::TokenKind TK,
CharSourceRange Range,
const ASTContext & Context,
const SourceManager & SM )

Assuming that Range spans a CVR-qualified type, returns the token in Range that is responsible for the qualification. Range must be valid with respect to SM. Returns std::nullopt if no.

qualifying tokens are found.

Note
: doesn't support member function qualifiers.

Definition at line 236 of file LexerUtils.cpp.

Referenced by clang::tidy::readability::findConstToRemove(), clang::tidy::readability::findConstToRemove(), and clang::tidy::readability::findQualToken().

◆ getSemicolonAfterStmtEndLoc()

SourceLocation clang::tidy::utils::lexer::getSemicolonAfterStmtEndLoc ( const SourceLocation & EndLoc,
const SourceManager & SM,
const LangOptions & LangOpts )
static

Definition at line 287 of file LexerUtils.cpp.

References findNextTokenSkippingComments().

Referenced by getUnifiedEndLoc().

◆ getTrailingCommentsInRange()

std::vector< CommentToken > clang::tidy::utils::lexer::getTrailingCommentsInRange ( CharSourceRange Range,
const SourceManager & SM,
const LangOptions & LangOpts )

Returns comment tokens found in the given range. If a non-comment token is encountered, clears previously collected comments and continues.

Definition at line 176 of file LexerUtils.cpp.

References collectCommentsInRange().

◆ getUnifiedEndLoc()

SourceLocation clang::tidy::utils::lexer::getUnifiedEndLoc ( const Stmt & S,
const SourceManager & SM,
const LangOptions & LangOpts )

Stmt->getEndLoc does not always behave the same way depending on Token type.

See implementation for exceptions.

Definition at line 323 of file LexerUtils.cpp.

References breakAndReturnEnd(), breakAndReturnEndPlus1Token(), and getSemicolonAfterStmtEndLoc().

Referenced by clang::tidy::modernize::UseEqualsDefaultCheck::check(), and clang::tidy::utils::findEndLocation().

◆ rangeContainsExpansionsOrDirectives()

bool clang::tidy::utils::lexer::rangeContainsExpansionsOrDirectives ( SourceRange Range,
const SourceManager & SM,
const LangOptions & LangOpts )

Re-lex the provide Range and return false if either a macro spans multiple tokens, a pre-processor directive or failure to retrieve the next token is found, otherwise true.

Definition at line 79 of file LexerUtils.cpp.

References findNextTokenSkippingComments().

Referenced by clang::tidy::modernize::UseEqualsDefaultCheck::check(), clang::tidy::readability::declRanges(), and clang::tidy::readability::hasMacroInRange().