aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaojian Wu <hokein@google.com>2017-10-26 08:23:20 +0000
committerHaojian Wu <hokein@google.com>2017-10-26 08:23:20 +0000
commit2310743d9c29baefb4ef92be3ef1acac8900ce83 (patch)
tree1807e663a5f57f0abc793a0cdf3d0463c67e5d6a
parentdb993457ec958b29537790327b9ca78b2f90e5b8 (diff)
[clang-tidy ObjC] [1/3] New module `objc` for Objective-C checks
Summary: This is part 1 of 3 of a series of changes to improve Objective-C linting in clang-tidy. This introduces a new clang-tidy module, `objc`, specifically for Objective-C / Objective-C++ checks. The module is currently empty; D39142 adds the first check. Test Plan: `ninja check-clang-tools` Patch by Ben Hamilton! Reviewers: hokein, alexfh Reviewed By: hokein Subscribers: Wizard, mgorny Differential Revision: https://reviews.llvm.org/D39188 git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/trunk@316643 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--clang-tidy/CMakeLists.txt1
-rw-r--r--clang-tidy/objc/CMakeLists.txt13
-rw-r--r--clang-tidy/objc/ObjCTidyModule.cpp39
-rw-r--r--clang-tidy/plugin/CMakeLists.txt1
-rw-r--r--clang-tidy/plugin/ClangTidyPlugin.cpp5
-rw-r--r--clang-tidy/tool/CMakeLists.txt1
-rw-r--r--clang-tidy/tool/ClangTidyMain.cpp5
-rw-r--r--docs/ReleaseNotes.rst2
-rw-r--r--docs/clang-tidy/index.rst7
-rw-r--r--unittests/clang-tidy/CMakeLists.txt2
-rw-r--r--unittests/clang-tidy/ObjCModuleTest.cpp21
11 files changed, 97 insertions, 0 deletions
diff --git a/clang-tidy/CMakeLists.txt b/clang-tidy/CMakeLists.txt
index 9d6fc7f0..0a3de852 100644
--- a/clang-tidy/CMakeLists.txt
+++ b/clang-tidy/CMakeLists.txt
@@ -37,6 +37,7 @@ add_subdirectory(llvm)
add_subdirectory(misc)
add_subdirectory(modernize)
add_subdirectory(mpi)
+add_subdirectory(objc)
add_subdirectory(performance)
add_subdirectory(plugin)
add_subdirectory(readability)
diff --git a/clang-tidy/objc/CMakeLists.txt b/clang-tidy/objc/CMakeLists.txt
new file mode 100644
index 00000000..85682b5c
--- /dev/null
+++ b/clang-tidy/objc/CMakeLists.txt
@@ -0,0 +1,13 @@
+set(LLVM_LINK_COMPONENTS support)
+
+add_clang_library(clangTidyObjCModule
+ ObjCTidyModule.cpp
+
+ LINK_LIBS
+ clangAST
+ clangASTMatchers
+ clangBasic
+ clangLex
+ clangTidy
+ clangTidyUtils
+ )
diff --git a/clang-tidy/objc/ObjCTidyModule.cpp b/clang-tidy/objc/ObjCTidyModule.cpp
new file mode 100644
index 00000000..46ff21f5
--- /dev/null
+++ b/clang-tidy/objc/ObjCTidyModule.cpp
@@ -0,0 +1,39 @@
+//===--- ObjCTidyModule.cpp - clang-tidy --------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "../ClangTidy.h"
+#include "../ClangTidyModule.h"
+#include "../ClangTidyModuleRegistry.h"
+
+using namespace clang::ast_matchers;
+
+namespace clang {
+namespace tidy {
+namespace objc {
+
+class ObjCModule : public ClangTidyModule {
+public:
+ void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override {
+ // TODO(D39142): Add checks here.
+ }
+};
+
+// Register the ObjCTidyModule using this statically initialized variable.
+static ClangTidyModuleRegistry::Add<ObjCModule> X(
+ "objc-module",
+ "Adds Objective-C lint checks.");
+
+} // namespace objc
+
+// This anchor is used to force the linker to link in the generated object file
+// and thus register the ObjCModule.
+volatile int ObjCModuleAnchorSource = 0;
+
+} // namespace tidy
+} // namespace clang
diff --git a/clang-tidy/plugin/CMakeLists.txt b/clang-tidy/plugin/CMakeLists.txt
index 5c888327..995c0865 100644
--- a/clang-tidy/plugin/CMakeLists.txt
+++ b/clang-tidy/plugin/CMakeLists.txt
@@ -17,6 +17,7 @@ add_clang_library(clangTidyPlugin
clangTidyMiscModule
clangTidyModernizeModule
clangTidyMPIModule
+ clangTidyObjCModule
clangTidyPerformanceModule
clangTidyReadabilityModule
clangTooling
diff --git a/clang-tidy/plugin/ClangTidyPlugin.cpp b/clang-tidy/plugin/ClangTidyPlugin.cpp
index 1e6346c2..25c13c76 100644
--- a/clang-tidy/plugin/ClangTidyPlugin.cpp
+++ b/clang-tidy/plugin/ClangTidyPlugin.cpp
@@ -123,5 +123,10 @@ extern volatile int ReadabilityModuleAnchorSource;
static int LLVM_ATTRIBUTE_UNUSED ReadabilityModuleAnchorDestination =
ReadabilityModuleAnchorSource;
+// This anchor is used to force the linker to link the ObjCModule.
+extern volatile int ObjCModuleAnchorSource;
+static int LLVM_ATTRIBUTE_UNUSED ObjCModuleAnchorDestination =
+ ObjCModuleAnchorSource;
+
} // namespace tidy
} // namespace clang
diff --git a/clang-tidy/tool/CMakeLists.txt b/clang-tidy/tool/CMakeLists.txt
index 994ee90a..61b70b5e 100644
--- a/clang-tidy/tool/CMakeLists.txt
+++ b/clang-tidy/tool/CMakeLists.txt
@@ -27,6 +27,7 @@ target_link_libraries(clang-tidy
clangTidyMiscModule
clangTidyModernizeModule
clangTidyMPIModule
+ clangTidyObjCModule
clangTidyPerformanceModule
clangTidyReadabilityModule
clangTooling
diff --git a/clang-tidy/tool/ClangTidyMain.cpp b/clang-tidy/tool/ClangTidyMain.cpp
index 79c0d0b3..6f1718f5 100644
--- a/clang-tidy/tool/ClangTidyMain.cpp
+++ b/clang-tidy/tool/ClangTidyMain.cpp
@@ -517,6 +517,11 @@ extern volatile int ReadabilityModuleAnchorSource;
static int LLVM_ATTRIBUTE_UNUSED ReadabilityModuleAnchorDestination =
ReadabilityModuleAnchorSource;
+// This anchor is used to force the linker to link the ObjCModule.
+extern volatile int ObjCModuleAnchorSource;
+static int LLVM_ATTRIBUTE_UNUSED ObjCModuleAnchorDestination =
+ ObjCModuleAnchorSource;
+
// This anchor is used to force the linker to link the HICPPModule.
extern volatile int HICPPModuleAnchorSource;
static int LLVM_ATTRIBUTE_UNUSED HICPPModuleAnchorDestination =
diff --git a/docs/ReleaseNotes.rst b/docs/ReleaseNotes.rst
index 71e00ba4..4dc34834 100644
--- a/docs/ReleaseNotes.rst
+++ b/docs/ReleaseNotes.rst
@@ -57,6 +57,8 @@ The improvements are...
Improvements to clang-tidy
--------------------------
+- New module `objc` for Objective-C style checks.
+
- Renamed checks to use correct term "implicit conversion" instead of "implicit
cast" and modified messages and option names accordingly:
diff --git a/docs/clang-tidy/index.rst b/docs/clang-tidy/index.rst
index 69136e6e..e1e33414 100644
--- a/docs/clang-tidy/index.rst
+++ b/docs/clang-tidy/index.rst
@@ -68,6 +68,7 @@ Name prefix Description
``modernize-`` Checks that advocate usage of modern (currently "modern"
means "C++11") language constructs.
``mpi-`` Checks related to MPI (Message Passing Interface).
+``objc-`` Checks related to Objective-C coding conventions.
``performance-`` Checks that target performance-related issues.
``readability-`` Checks that target readability-related issues that don't
relate to any particular coding style.
@@ -341,6 +342,11 @@ The Directory Structure
|-- LLVMTidyModule.cpp
|-- LLVMTidyModule.h
...
+ |-- objc/ # Objective-C clang-tidy module.
+ |-+
+ |-- ObjCTidyModule.cpp
+ |-- ObjCTidyModule.h
+ ...
|-- tool/ # Sources of the clang-tidy binary.
...
test/clang-tidy/ # Integration tests.
@@ -349,6 +355,7 @@ The Directory Structure
|-- ClangTidyTest.h
|-- GoogleModuleTest.cpp
|-- LLVMModuleTest.cpp
+ |-- ObjCModuleTest.cpp
...
diff --git a/unittests/clang-tidy/CMakeLists.txt b/unittests/clang-tidy/CMakeLists.txt
index 0d9ab7ce..0973ee1c 100644
--- a/unittests/clang-tidy/CMakeLists.txt
+++ b/unittests/clang-tidy/CMakeLists.txt
@@ -14,6 +14,7 @@ add_extra_unittest(ClangTidyTests
LLVMModuleTest.cpp
MiscModuleTest.cpp
NamespaceAliaserTest.cpp
+ ObjCModuleTest.cpp
OverlappingReplacementsTest.cpp
UsingInserterTest.cpp
ReadabilityModuleTest.cpp)
@@ -29,6 +30,7 @@ target_link_libraries(ClangTidyTests
clangTidyGoogleModule
clangTidyLLVMModule
clangTidyMiscModule
+ clangTidyObjCModule
clangTidyReadabilityModule
clangTidyUtils
clangTooling
diff --git a/unittests/clang-tidy/ObjCModuleTest.cpp b/unittests/clang-tidy/ObjCModuleTest.cpp
new file mode 100644
index 00000000..c50480a6
--- /dev/null
+++ b/unittests/clang-tidy/ObjCModuleTest.cpp
@@ -0,0 +1,21 @@
+//===---- ObjCModuleTest.cpp - clang-tidy ---------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ClangTidyTest.h"
+#include "gtest/gtest.h"
+
+namespace clang {
+namespace tidy {
+namespace test {
+
+// TODO(D39142) Add unit tests for the ObjC module here once a check lands.
+
+} // namespace test
+} // namespace tidy
+} // namespace clang