Skip to content

Commit

Permalink
[clang-tidy ObjC] [1/3] New module objc for Objective-C checks
Browse files Browse the repository at this point in the history
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

llvm-svn: 316643
  • Loading branch information
hokein committed Oct 26, 2017
1 parent 37d57da commit abcd64c
Show file tree
Hide file tree
Showing 11 changed files with 97 additions and 0 deletions.
1 change: 1 addition & 0 deletions clang-tools-extra/clang-tidy/CMakeLists.txt
Expand Up @@ -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)
Expand Down
13 changes: 13 additions & 0 deletions clang-tools-extra/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
)
39 changes: 39 additions & 0 deletions clang-tools-extra/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
1 change: 1 addition & 0 deletions clang-tools-extra/clang-tidy/plugin/CMakeLists.txt
Expand Up @@ -17,6 +17,7 @@ add_clang_library(clangTidyPlugin
clangTidyMiscModule
clangTidyModernizeModule
clangTidyMPIModule
clangTidyObjCModule
clangTidyPerformanceModule
clangTidyReadabilityModule
clangTooling
Expand Down
5 changes: 5 additions & 0 deletions clang-tools-extra/clang-tidy/plugin/ClangTidyPlugin.cpp
Expand Up @@ -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
1 change: 1 addition & 0 deletions clang-tools-extra/clang-tidy/tool/CMakeLists.txt
Expand Up @@ -27,6 +27,7 @@ target_link_libraries(clang-tidy
clangTidyMiscModule
clangTidyModernizeModule
clangTidyMPIModule
clangTidyObjCModule
clangTidyPerformanceModule
clangTidyReadabilityModule
clangTooling
Expand Down
5 changes: 5 additions & 0 deletions clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
Expand Up @@ -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 =
Expand Down
2 changes: 2 additions & 0 deletions clang-tools-extra/docs/ReleaseNotes.rst
Expand Up @@ -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:

Expand Down
7 changes: 7 additions & 0 deletions clang-tools-extra/docs/clang-tidy/index.rst
Expand Up @@ -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.
Expand Down Expand Up @@ -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.
Expand All @@ -349,6 +355,7 @@ The Directory Structure
|-- ClangTidyTest.h
|-- GoogleModuleTest.cpp
|-- LLVMModuleTest.cpp
|-- ObjCModuleTest.cpp
...


Expand Down
2 changes: 2 additions & 0 deletions clang-tools-extra/unittests/clang-tidy/CMakeLists.txt
Expand Up @@ -14,6 +14,7 @@ add_extra_unittest(ClangTidyTests
LLVMModuleTest.cpp
MiscModuleTest.cpp
NamespaceAliaserTest.cpp
ObjCModuleTest.cpp
OverlappingReplacementsTest.cpp
UsingInserterTest.cpp
ReadabilityModuleTest.cpp)
Expand All @@ -29,6 +30,7 @@ target_link_libraries(ClangTidyTests
clangTidyGoogleModule
clangTidyLLVMModule
clangTidyMiscModule
clangTidyObjCModule
clangTidyReadabilityModule
clangTidyUtils
clangTooling
Expand Down
21 changes: 21 additions & 0 deletions clang-tools-extra/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

0 comments on commit abcd64c

Please sign in to comment.