t-rasmud created this revision. t-rasmud added reviewers: NoQ, usama54321. Herald added subscribers: carlosgalvezp, mgorny. Herald added a project: All. t-rasmud requested review of this revision. Herald added projects: clang, clang-tools-extra. Herald added a subscriber: cfe-commits.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D128103 Files: clang-tools-extra/clang-tidy/misc/CMakeLists.txt clang-tools-extra/clang-tidy/misc/MatchObjcStringLiteralCheck.cpp clang-tools-extra/clang-tidy/misc/MatchObjcStringLiteralCheck.h clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/docs/clang-tidy/checks/misc/match-objc-string-literal.rst clang-tools-extra/test/clang-tidy/checkers/misc-match-objc-string-literal.m clang/include/clang/ASTMatchers/ASTMatchers.h clang/lib/ASTMatchers/ASTMatchersInternal.cpp clang/lib/ASTMatchers/Dynamic/Registry.cpp
Index: clang/lib/ASTMatchers/Dynamic/Registry.cpp =================================================================== --- clang/lib/ASTMatchers/Dynamic/Registry.cpp +++ clang/lib/ASTMatchers/Dynamic/Registry.cpp @@ -548,6 +548,7 @@ REGISTER_MATCHER(stmt); REGISTER_MATCHER(stmtExpr); REGISTER_MATCHER(stringLiteral); + REGISTER_MATCHER(objCStringLiteral); REGISTER_MATCHER(substNonTypeTemplateParmExpr); REGISTER_MATCHER(substTemplateTypeParmType); REGISTER_MATCHER(switchCase); Index: clang/lib/ASTMatchers/ASTMatchersInternal.cpp =================================================================== --- clang/lib/ASTMatchers/ASTMatchersInternal.cpp +++ clang/lib/ASTMatchers/ASTMatchersInternal.cpp @@ -917,6 +917,7 @@ const internal::VariadicDynCastAllOfMatcher<Stmt, CXXBoolLiteralExpr> cxxBoolLiteral; const internal::VariadicDynCastAllOfMatcher<Stmt, StringLiteral> stringLiteral; +const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCStringLiteral> objCStringLiteral; const internal::VariadicDynCastAllOfMatcher<Stmt, CharacterLiteral> characterLiteral; const internal::VariadicDynCastAllOfMatcher<Stmt, IntegerLiteral> Index: clang/include/clang/ASTMatchers/ASTMatchers.h =================================================================== --- clang/include/clang/ASTMatchers/ASTMatchers.h +++ clang/include/clang/ASTMatchers/ASTMatchers.h @@ -1515,6 +1515,9 @@ extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCMessageExpr> objcMessageExpr; +extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCStringLiteral> + objCStringLiteral; + /// Matches Objective-C interface declarations. /// /// Example matches Foo Index: clang-tools-extra/test/clang-tidy/checkers/misc-match-objc-string-literal.m =================================================================== --- /dev/null +++ clang-tools-extra/test/clang-tidy/checkers/misc-match-objc-string-literal.m @@ -0,0 +1,19 @@ +// RUN: %check_clang_tidy %s misc-match-objc-string-literal %t +@interface NSObject +@end + +@interface NSString +@end + +@interface Test : NSObject ++ (void)someFunction:(NSString *)Desc; +@end + +@implementation Test ++ (void)someFunction:(NSString *)Desc { + return; +} +- (void) foo { + [Test someFunction:@"Ola!"]; +} +@end Index: clang-tools-extra/docs/clang-tidy/checks/misc/match-objc-string-literal.rst =================================================================== --- /dev/null +++ clang-tools-extra/docs/clang-tidy/checks/misc/match-objc-string-literal.rst @@ -0,0 +1,6 @@ +.. title:: clang-tidy - misc-match-objc-string-literal + +misc-match-objc-string-literal +============================== + +FIXME: Matches all ObjCStringLiteral types. Index: clang-tools-extra/docs/ReleaseNotes.rst =================================================================== --- clang-tools-extra/docs/ReleaseNotes.rst +++ clang-tools-extra/docs/ReleaseNotes.rst @@ -123,6 +123,11 @@ Warns when the code is unwrapping a `std::optional<T>`, `absl::optional<T>`, or `base::Optional<T>` object without assuring that it contains a value. +- New :doc:`misc-match-objc-string-literal + <clang-tidy/checks/misc/match-objc-string-literal>` check. + + Matches ObjCStringLiteral type. + - New :doc:`modernize-macro-to-enum <clang-tidy/checks/modernize/macro-to-enum>` check. Index: clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp =================================================================== --- clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp +++ clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp @@ -10,6 +10,7 @@ #include "../ClangTidyModule.h" #include "../ClangTidyModuleRegistry.h" #include "DefinitionsInHeadersCheck.h" +#include "MatchObjcStringLiteralCheck.h" #include "MisleadingBidirectional.h" #include "MisleadingIdentifier.h" #include "MisplacedConstCheck.h" @@ -35,6 +36,8 @@ void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override { CheckFactories.registerCheck<DefinitionsInHeadersCheck>( "misc-definitions-in-headers"); + CheckFactories.registerCheck<MatchObjcStringLiteralCheck>( + "misc-match-objc-string-literal"); CheckFactories.registerCheck<MisleadingBidirectionalCheck>( "misc-misleading-bidirectional"); CheckFactories.registerCheck<MisleadingIdentifierCheck>( Index: clang-tools-extra/clang-tidy/misc/MatchObjcStringLiteralCheck.h =================================================================== --- /dev/null +++ clang-tools-extra/clang-tidy/misc/MatchObjcStringLiteralCheck.h @@ -0,0 +1,37 @@ +//===--- MatchObjcStringLiteralCheck.h - clang-tidy -------------*- C++ -*-===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_MATCHOBJCSTRINGLITERALCHECK_H +#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_MATCHOBJCSTRINGLITERALCHECK_H + +#include "../ClangTidyCheck.h" + +namespace clang { +namespace tidy { +namespace misc { + +/// Matches all ObjCStringLiteral types. +/// +/// For the user-facing documentation see: +/// http://clang.llvm.org/extra/clang-tidy/checks/misc/match-objc-string-literal.html +class MatchObjcStringLiteralCheck : public ClangTidyCheck { +public: + MatchObjcStringLiteralCheck(StringRef Name, ClangTidyContext *Context) + : ClangTidyCheck(Name, Context) {} + bool isLanguageVersionSupported(const LangOptions &LangOpts) const override { + return LangOpts.ObjC; + } + void registerMatchers(ast_matchers::MatchFinder *Finder) override; + void check(const ast_matchers::MatchFinder::MatchResult &Result) override; +}; + +} // namespace misc +} // namespace tidy +} // namespace clang + +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_MATCHOBJCSTRINGLITERALCHECK_H Index: clang-tools-extra/clang-tidy/misc/MatchObjcStringLiteralCheck.cpp =================================================================== --- /dev/null +++ clang-tools-extra/clang-tidy/misc/MatchObjcStringLiteralCheck.cpp @@ -0,0 +1,32 @@ +//===--- MatchObjcStringLiteralCheck.cpp - clang-tidy ----------------------------===// +// +// 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 "MatchObjcStringLiteralCheck.h" +#include "clang/AST/ASTContext.h" +#include "clang/ASTMatchers/ASTMatchFinder.h" + +using namespace clang::ast_matchers; + +namespace clang { +namespace tidy { +namespace misc { + +void MatchObjcStringLiteralCheck::registerMatchers(MatchFinder *Finder) { + // Adding matchers. + Finder->addMatcher(objCStringLiteral().bind("str_lit"), this); +} + +void MatchObjcStringLiteralCheck::check(const MatchFinder::MatchResult &Result) { + const auto *StrExpr = Result.Nodes.getNodeAs<ObjCStringLiteral>("str_lit"); + const StringLiteral* SL = cast<ObjCStringLiteral>(StrExpr)->getString(); + diag(StrExpr->getExprLoc(), "Matched ObjC StringLiteral: %0") << SL->getString(); +} + +} +} +} Index: clang-tools-extra/clang-tidy/misc/CMakeLists.txt =================================================================== --- clang-tools-extra/clang-tidy/misc/CMakeLists.txt +++ clang-tools-extra/clang-tidy/misc/CMakeLists.txt @@ -5,6 +5,7 @@ add_clang_library(clangTidyMiscModule DefinitionsInHeadersCheck.cpp + MatchObjcStringLiteralCheck.cpp MiscTidyModule.cpp MisleadingBidirectional.cpp MisleadingIdentifier.cpp
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits