77 lines · c
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_REDUNDANTVOIDARGCHECK_H10#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_REDUNDANTVOIDARGCHECK_H11 12#include "../ClangTidyCheck.h"13#include "clang/Lex/Token.h"14 15#include <string>16 17namespace clang::tidy::modernize {18 19/// Find and remove redundant void argument lists.20///21/// Examples:22/// `int f(void);` becomes `int f();`23/// `int (*f(void))(void);` becomes `int (*f())();`24/// `typedef int (*f_t(void))(void);` becomes `typedef int (*f_t())();`25/// `void (C::*p)(void);` becomes `void (C::*p)();`26/// `C::C(void) {}` becomes `C::C() {}`27/// `C::~C(void) {}` becomes `C::~C() {}`28///29class RedundantVoidArgCheck : public ClangTidyCheck {30public:31 RedundantVoidArgCheck(StringRef Name, ClangTidyContext *Context)32 : ClangTidyCheck(Name, Context) {}33 34 bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {35 return LangOpts.CPlusPlus;36 }37 38 void registerMatchers(ast_matchers::MatchFinder *Finder) override;39 40 void check(const ast_matchers::MatchFinder::MatchResult &Result) override;41 42private:43 void processFunctionDecl(const ast_matchers::MatchFinder::MatchResult &Result,44 const FunctionDecl *Function);45 46 void47 processTypedefNameDecl(const ast_matchers::MatchFinder::MatchResult &Result,48 const TypedefNameDecl *Typedef);49 50 void processFieldDecl(const ast_matchers::MatchFinder::MatchResult &Result,51 const FieldDecl *Member);52 53 void processVarDecl(const ast_matchers::MatchFinder::MatchResult &Result,54 const VarDecl *Var);55 56 void57 processNamedCastExpr(const ast_matchers::MatchFinder::MatchResult &Result,58 const CXXNamedCastExpr *NamedCast);59 60 void61 processExplicitCastExpr(const ast_matchers::MatchFinder::MatchResult &Result,62 const ExplicitCastExpr *ExplicitCast);63 64 void processLambdaExpr(const ast_matchers::MatchFinder::MatchResult &Result,65 const LambdaExpr *Lambda);66 67 void68 removeVoidArgumentTokens(const ast_matchers::MatchFinder::MatchResult &Result,69 SourceRange Range, StringRef GrammarLocation);70 71 void removeVoidToken(Token VoidToken, StringRef Diagnostic);72};73 74} // namespace clang::tidy::modernize75 76#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_REDUNDANTVOIDARGCHECK_H77