diff options
Diffstat (limited to 'clang-tools-extra/clang-tidy/modernize/UseAutoCheck.cpp')
| -rw-r--r-- | clang-tools-extra/clang-tidy/modernize/UseAutoCheck.cpp | 55 | 
1 files changed, 27 insertions, 28 deletions
diff --git a/clang-tools-extra/clang-tidy/modernize/UseAutoCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseAutoCheck.cpp index 01796a6..084349b 100644 --- a/clang-tools-extra/clang-tidy/modernize/UseAutoCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/UseAutoCheck.cpp @@ -20,14 +20,13 @@ using namespace clang::ast_matchers;  using namespace clang::ast_matchers::internal;  namespace clang::tidy::modernize { -namespace { -const char IteratorDeclStmtId[] = "iterator_decl"; -const char DeclWithNewId[] = "decl_new"; -const char DeclWithCastId[] = "decl_cast"; -const char DeclWithTemplateCastId[] = "decl_template"; +static const char IteratorDeclStmtId[] = "iterator_decl"; +static const char DeclWithNewId[] = "decl_new"; +static const char DeclWithCastId[] = "decl_cast"; +static const char DeclWithTemplateCastId[] = "decl_template"; -size_t getTypeNameLength(bool RemoveStars, StringRef Text) { +static size_t getTypeNameLength(bool RemoveStars, StringRef Text) {    enum CharType { Space, Alpha, Punctuation };    CharType LastChar = Space, BeforeSpace = Punctuation;    size_t NumChars = 0; @@ -54,6 +53,7 @@ size_t getTypeNameLength(bool RemoveStars, StringRef Text) {    return NumChars;  } +namespace {  /// Matches variable declarations that have explicit initializers that  /// are not initializer lists.  /// @@ -65,7 +65,7 @@ size_t getTypeNameLength(bool RemoveStars, StringRef Text) {  ///   MyType C;  /// \endcode  /// -/// varDecl(hasWrittenNonListInitializer()) maches \c I and \c A but not \c B +/// varDecl(hasWrittenNonListInitializer()) matches \c I and \c A but not \c B  /// or \c C.  AST_MATCHER(VarDecl, hasWrittenNonListInitializer) {    const Expr *Init = Node.getAnyInitializer(); @@ -108,6 +108,15 @@ AST_MATCHER_P(QualType, isSugarFor, Matcher<QualType>, SugarMatcher) {    }  } +/// Matches declaration reference or member expressions with explicit template +/// arguments. +AST_POLYMORPHIC_MATCHER(hasExplicitTemplateArgs, +                        AST_POLYMORPHIC_SUPPORTED_TYPES(DeclRefExpr, +                                                        MemberExpr)) { +  return Node.hasExplicitTemplateArgs(); +} +} // namespace +  /// Matches named declarations that have one of the standard iterator  /// names: iterator, reverse_iterator, const_iterator, const_reverse_iterator.  /// @@ -118,7 +127,7 @@ AST_MATCHER_P(QualType, isSugarFor, Matcher<QualType>, SugarMatcher) {  /// \endcode  ///  /// namedDecl(hasStdIteratorName()) matches \c I and \c CI. -Matcher<NamedDecl> hasStdIteratorName() { +static Matcher<NamedDecl> hasStdIteratorName() {    static const StringRef IteratorNames[] = {"iterator", "reverse_iterator",                                              "const_iterator",                                              "const_reverse_iterator"}; @@ -137,7 +146,7 @@ Matcher<NamedDecl> hasStdIteratorName() {  ///  /// recordDecl(hasStdContainerName()) matches \c vector and \c forward_list  /// but not \c my_vec. -Matcher<NamedDecl> hasStdContainerName() { +static Matcher<NamedDecl> hasStdContainerName() {    static StringRef ContainerNames[] = {"array",         "deque",                                         "forward_list",  "list",                                         "vector", @@ -154,17 +163,9 @@ Matcher<NamedDecl> hasStdContainerName() {    return hasAnyName(ContainerNames);  } -/// Matches declaration reference or member expressions with explicit template -/// arguments. -AST_POLYMORPHIC_MATCHER(hasExplicitTemplateArgs, -                        AST_POLYMORPHIC_SUPPORTED_TYPES(DeclRefExpr, -                                                        MemberExpr)) { -  return Node.hasExplicitTemplateArgs(); -} -  /// Returns a DeclarationMatcher that matches standard iterators nested  /// inside records with a standard container name. -DeclarationMatcher standardIterator() { +static DeclarationMatcher standardIterator() {    return decl(        namedDecl(hasStdIteratorName()),        hasDeclContext(recordDecl(hasStdContainerName(), isInStdNamespace()))); @@ -172,19 +173,19 @@ DeclarationMatcher standardIterator() {  /// Returns a TypeMatcher that matches typedefs for standard iterators  /// inside records with a standard container name. -TypeMatcher typedefIterator() { +static TypeMatcher typedefIterator() {    return typedefType(hasDeclaration(standardIterator()));  }  /// Returns a TypeMatcher that matches records named for standard  /// iterators nested inside records named for standard containers. -TypeMatcher nestedIterator() { +static TypeMatcher nestedIterator() {    return recordType(hasDeclaration(standardIterator()));  }  /// Returns a TypeMatcher that matches types declared with using  /// declarations and which name standard iterators for standard containers. -TypeMatcher iteratorFromUsingDeclaration() { +static TypeMatcher iteratorFromUsingDeclaration() {    auto HasIteratorDecl = hasDeclaration(namedDecl(hasStdIteratorName()));    // Unwrap the nested name specifier to test for one of the standard    // containers. @@ -198,7 +199,7 @@ TypeMatcher iteratorFromUsingDeclaration() {  /// This matcher returns declaration statements that contain variable  /// declarations with written non-list initializer for standard iterators. -StatementMatcher makeIteratorDeclMatcher() { +static StatementMatcher makeIteratorDeclMatcher() {    return declStmt(unless(has(                        varDecl(anyOf(unless(hasWrittenNonListInitializer()),                                      unless(hasType(isSugarFor(anyOf( @@ -207,7 +208,7 @@ StatementMatcher makeIteratorDeclMatcher() {        .bind(IteratorDeclStmtId);  } -StatementMatcher makeDeclWithNewMatcher() { +static StatementMatcher makeDeclWithNewMatcher() {    return declStmt(               unless(has(varDecl(anyOf(                   unless(hasInitializer(ignoringParenImpCasts(cxxNewExpr()))), @@ -225,13 +226,13 @@ StatementMatcher makeDeclWithNewMatcher() {        .bind(DeclWithNewId);  } -StatementMatcher makeDeclWithCastMatcher() { +static StatementMatcher makeDeclWithCastMatcher() {    return declStmt(               unless(has(varDecl(unless(hasInitializer(explicitCastExpr()))))))        .bind(DeclWithCastId);  } -StatementMatcher makeDeclWithTemplateCastMatcher() { +static StatementMatcher makeDeclWithTemplateCastMatcher() {    auto ST =        substTemplateTypeParmType(hasReplacementType(equalsBoundNode("arg"))); @@ -252,7 +253,7 @@ StatementMatcher makeDeclWithTemplateCastMatcher() {        .bind(DeclWithTemplateCastId);  } -StatementMatcher makeCombinedMatcher() { +static StatementMatcher makeCombinedMatcher() {    return declStmt(        // At least one varDecl should be a child of the declStmt to ensure        // it's a declaration list and avoid matching other declarations, @@ -265,8 +266,6 @@ StatementMatcher makeCombinedMatcher() {              makeDeclWithCastMatcher(), makeDeclWithTemplateCastMatcher()));  } -} // namespace -  UseAutoCheck::UseAutoCheck(StringRef Name, ClangTidyContext *Context)      : ClangTidyCheck(Name, Context),        MinTypeNameLength(Options.get("MinTypeNameLength", 5)),  | 
