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

Reply via email to