xref: /llvm-project/clang-tools-extra/clang-tidy/modernize/UseStdNumbersCheck.h (revision 0eb7d53cfc48f2e9287bb116415620618ca850b7)
1*0eb7d53cSJulian Schmidt //===--- UseStdNumbersCheck.h - clang-tidy ----------------------*- C++ -*-===//
2*0eb7d53cSJulian Schmidt //
3*0eb7d53cSJulian Schmidt // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0eb7d53cSJulian Schmidt // See https://llvm.org/LICENSE.txt for license information.
5*0eb7d53cSJulian Schmidt // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0eb7d53cSJulian Schmidt //
7*0eb7d53cSJulian Schmidt //===----------------------------------------------------------------------===//
8*0eb7d53cSJulian Schmidt 
9*0eb7d53cSJulian Schmidt #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_USESTDNUMBERSCHECK_H
10*0eb7d53cSJulian Schmidt #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_USESTDNUMBERSCHECK_H
11*0eb7d53cSJulian Schmidt 
12*0eb7d53cSJulian Schmidt #include "../ClangTidyCheck.h"
13*0eb7d53cSJulian Schmidt #include "../utils/IncludeInserter.h"
14*0eb7d53cSJulian Schmidt 
15*0eb7d53cSJulian Schmidt namespace clang::tidy::modernize {
16*0eb7d53cSJulian Schmidt 
17*0eb7d53cSJulian Schmidt /// Finds constants and function calls to math functions that can be replaced
18*0eb7d53cSJulian Schmidt /// with c++20's mathematical constants from the ``numbers`` header and
19*0eb7d53cSJulian Schmidt /// offers fix-it hints.
20*0eb7d53cSJulian Schmidt /// Does not match the use of variables with that value, and instead,
21*0eb7d53cSJulian Schmidt /// offers a replacement at the definition of those variables.
22*0eb7d53cSJulian Schmidt ///
23*0eb7d53cSJulian Schmidt /// For the user-facing documentation see:
24*0eb7d53cSJulian Schmidt /// http://clang.llvm.org/extra/clang-tidy/checks/modernize/use-std-numbers.html
25*0eb7d53cSJulian Schmidt class UseStdNumbersCheck : public ClangTidyCheck {
26*0eb7d53cSJulian Schmidt public:
27*0eb7d53cSJulian Schmidt   UseStdNumbersCheck(StringRef Name, ClangTidyContext *Context);
28*0eb7d53cSJulian Schmidt 
isLanguageVersionSupported(const LangOptions & LangOpts)29*0eb7d53cSJulian Schmidt   bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
30*0eb7d53cSJulian Schmidt     return LangOpts.CPlusPlus20;
31*0eb7d53cSJulian Schmidt   }
32*0eb7d53cSJulian Schmidt   void registerMatchers(ast_matchers::MatchFinder *Finder) override;
33*0eb7d53cSJulian Schmidt   void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
34*0eb7d53cSJulian Schmidt   void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP,
35*0eb7d53cSJulian Schmidt                            Preprocessor *ModuleExpanderPP) override;
36*0eb7d53cSJulian Schmidt   void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
getCheckTraversalKind()37*0eb7d53cSJulian Schmidt   std::optional<TraversalKind> getCheckTraversalKind() const override {
38*0eb7d53cSJulian Schmidt     return TK_IgnoreUnlessSpelledInSource;
39*0eb7d53cSJulian Schmidt   }
40*0eb7d53cSJulian Schmidt 
41*0eb7d53cSJulian Schmidt private:
42*0eb7d53cSJulian Schmidt   utils::IncludeInserter IncludeInserter;
43*0eb7d53cSJulian Schmidt   StringRef DiffThresholdString;
44*0eb7d53cSJulian Schmidt   double DiffThreshold;
45*0eb7d53cSJulian Schmidt };
46*0eb7d53cSJulian Schmidt 
47*0eb7d53cSJulian Schmidt } // namespace clang::tidy::modernize
48*0eb7d53cSJulian Schmidt 
49*0eb7d53cSJulian Schmidt #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_USESTDNUMBERSCHECK_H
50