xref: /llvm-project/clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.h (revision 4718da506091a37ca4863d979bc541e359b79b10)
108936e47SAlexander Kornienko //===--- UseNoexceptCheck.h - clang-tidy-------------------------*- C++ -*-===//
208936e47SAlexander Kornienko //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
608936e47SAlexander Kornienko //
708936e47SAlexander Kornienko //===----------------------------------------------------------------------===//
808936e47SAlexander Kornienko 
908936e47SAlexander Kornienko #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_USE_NOEXCEPT_H
1008936e47SAlexander Kornienko #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_USE_NOEXCEPT_H
1108936e47SAlexander Kornienko 
12478fc5c8SAlexander Kornienko #include "../ClangTidyCheck.h"
1308936e47SAlexander Kornienko 
14*4718da50SCarlos Galvez namespace clang::tidy::modernize {
1508936e47SAlexander Kornienko 
16282dc72cSDmitri Gribenko /// Replace dynamic exception specifications, with
1708936e47SAlexander Kornienko /// `noexcept` (or user-defined macro) or `noexcept(false)`.
1808936e47SAlexander Kornienko /// \code
1908936e47SAlexander Kornienko ///   void foo() throw();
2008936e47SAlexander Kornienko ///   void bar() throw(int);
2108936e47SAlexander Kornienko /// \endcode
2208936e47SAlexander Kornienko /// Is converted to:
2308936e47SAlexander Kornienko /// \code
2408936e47SAlexander Kornienko ///   void foo() ;
2514964682SSimon Pilgrim ///   void bar() noexcept(false);
2608936e47SAlexander Kornienko /// \endcode
2708936e47SAlexander Kornienko ///
2808936e47SAlexander Kornienko /// For the user-facing documentation see:
296e566bc5SRichard /// http://clang.llvm.org/extra/clang-tidy/checks/modernize/use-noexcept.html
3008936e47SAlexander Kornienko class UseNoexceptCheck : public ClangTidyCheck {
3108936e47SAlexander Kornienko public:
3208936e47SAlexander Kornienko   UseNoexceptCheck(StringRef Name, ClangTidyContext *Context);
isLanguageVersionSupported(const LangOptions & LangOpts)33e40a742aSNathan James   bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
34e40a742aSNathan James     return LangOpts.CPlusPlus11;
35e40a742aSNathan James   }
3608936e47SAlexander Kornienko   void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
3708936e47SAlexander Kornienko   void registerMatchers(ast_matchers::MatchFinder *Finder) override;
3808936e47SAlexander Kornienko   void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
3908936e47SAlexander Kornienko 
4008936e47SAlexander Kornienko private:
4112cb5405SNathan James   const StringRef NoexceptMacro;
424c5818ddSNathan James   const bool UseNoexceptFalse;
4308936e47SAlexander Kornienko };
4408936e47SAlexander Kornienko 
45*4718da50SCarlos Galvez } // namespace clang::tidy::modernize
4608936e47SAlexander Kornienko 
4708936e47SAlexander Kornienko #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_USE_NOEXCEPT_H
48