================ @@ -0,0 +1,77 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "UseToUnderlyingCheck.h" +#include "clang/AST/ASTContext.h" +#include "clang/ASTMatchers/ASTMatchFinder.h" +#include "clang/ASTMatchers/ASTMatchers.h" +#include "clang/Lex/Lexer.h" + +using namespace clang::ast_matchers; + +namespace clang::tidy::modernize { + +UseToUnderlyingCheck::UseToUnderlyingCheck(StringRef Name, + ClangTidyContext *Context) + : ClangTidyCheck(Name, Context), + Inserter(Options.getLocalOrGlobal("IncludeStyle", + utils::IncludeSorter::IS_LLVM), + areDiagsSelfContained()) {} +// +void UseToUnderlyingCheck::registerPPCallbacks(const SourceManager &SM, + Preprocessor *PP, + Preprocessor *ModuleExpanderPP) { + Inserter.registerPreprocessor(PP); +} + +void UseToUnderlyingCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) { + Options.store(Opts, "IncludeStyle", Inserter.getStyle()); +} + +bool UseToUnderlyingCheck::isLanguageVersionSupported( + const LangOptions &LangOpts) const { + return LangOpts.CPlusPlus23; +} + +void UseToUnderlyingCheck::registerMatchers(MatchFinder *Finder) { + // FIXME: Add matchers. + Finder->addMatcher( + cxxStaticCastExpr( // C++ cast + hasDestinationType( + isInteger()), // casting to any type of integer (int,long,etc) + hasSourceExpression( // is an enum class + expr(hasType(enumType(hasDeclaration(enumDecl(isScoped()))))) + .bind("enumExpr"))) // giving the name enumExpr + .bind("castExpr"), // giving the name castExpr + this); +} + +void UseToUnderlyingCheck::check(const MatchFinder::MatchResult &Result) { + // Acquiring the enumExpr and castExpr using getNodeAS + const auto *Enum = Result.Nodes.getNodeAs<Expr>("enumExpr"); + const auto *Cast = Result.Nodes.getNodeAs<CXXStaticCastExpr>("castExpr"); + + // getting contents of that node using getsourcetext + StringRef EnumExprText = Lexer::getSourceText( ---------------- EugeneZelenko wrote:
```suggestion const StringRef EnumExprText = Lexer::getSourceText( ``` https://github.com/llvm/llvm-project/pull/167212 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
