Skip to content

Commit

Permalink
[clang-tidy] Change the namespace for llvm checkers from 'llvm' to 'l…
Browse files Browse the repository at this point in the history
…lvm_check'

Summary:
Change the namespace for llvm checkers from 'llvm' to
'llvm_check', and modify add_new_check.py and rename_check.py to
support the new namespace. Checker, file, and directory names remain
unchanged.

Used new version of rename_check.py to make the change in existing
llvm checkers, but had to fix LLVMTidyModule.cpp and
LLVMModuleTest.cpp by hand.

The changes made by rename_check.py are idempotent, so if accidentally
run multiple times, it won't do anything.

Reviewed By: aaron.ballman

Tags: #clang, #clang-tools-extra

Differential Revision: https://reviews.llvm.org/D60629

llvm-svn: 360450
  • Loading branch information
donhinton committed May 10, 2019
1 parent 0c55985 commit b75e7ea
Show file tree
Hide file tree
Showing 12 changed files with 85 additions and 54 deletions.
29 changes: 19 additions & 10 deletions clang-tools-extra/clang-tidy/add_new_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def adapt_cmake(module_path, check_name_camel):


# Adds a header for the new check.
def write_header(module_path, module, check_name, check_name_camel):
def write_header(module_path, module, namespace, check_name, check_name_camel):
check_name_dashes = module + '-' + check_name
filename = os.path.join(module_path, check_name_camel) + '.h'
print('Creating %s...' % filename)
Expand All @@ -73,7 +73,7 @@ def write_header(module_path, module, check_name, check_name_camel):
namespace clang {
namespace tidy {
namespace %(module)s {
namespace %(namespace)s {
/// FIXME: Write a short description.
///
Expand All @@ -87,19 +87,20 @@ class %(check_name)s : public ClangTidyCheck {
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
};
} // namespace %(module)s
} // namespace %(namespace)s
} // namespace tidy
} // namespace clang
#endif // %(header_guard)s
""" % {'header_guard': header_guard,
'check_name': check_name_camel,
'check_name_dashes': check_name_dashes,
'module': module})
'module': module,
'namespace': namespace})


# Adds the implementation of the new check.
def write_implementation(module_path, module, check_name_camel):
def write_implementation(module_path, module, namespace, check_name_camel):
filename = os.path.join(module_path, check_name_camel) + '.cpp'
print('Creating %s...' % filename)
with open(filename, 'w') as f:
Expand All @@ -124,7 +125,7 @@ def write_implementation(module_path, module, check_name_camel):
namespace clang {
namespace tidy {
namespace %(module)s {
namespace %(namespace)s {
void %(check_name)s::registerMatchers(MatchFinder *Finder) {
// FIXME: Add matchers.
Expand All @@ -142,11 +143,12 @@ def write_implementation(module_path, module, check_name_camel):
<< FixItHint::CreateInsertion(MatchedDecl->getLocation(), "awesome_");
}
} // namespace %(module)s
} // namespace %(namespace)s
} // namespace tidy
} // namespace clang
""" % {'check_name': check_name_camel,
'module': module})
'module': module,
'namespace': namespace})


# Modifies the module to include the new check.
Expand Down Expand Up @@ -375,8 +377,15 @@ def main():

if not adapt_cmake(module_path, check_name_camel):
return
write_header(module_path, module, check_name, check_name_camel)
write_implementation(module_path, module, check_name_camel)

# Map module names to namespace names that don't conflict with widely used top-level namespaces.
if module == 'llvm':
namespace = module + '_check'
else:
namespace = module

write_header(module_path, module, namespace, check_name, check_name_camel)
write_implementation(module_path, module, namespace, check_name_camel)
adapt_module(module_path, module, check_name, check_name_camel)
add_release_notes(module_path, module, check_name)
test_extension = language_to_extension.get(args.language)
Expand Down
4 changes: 2 additions & 2 deletions clang-tools-extra/clang-tidy/llvm/HeaderGuardCheck.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

namespace clang {
namespace tidy {
namespace llvm {
namespace llvm_check {

LLVMHeaderGuardCheck::LLVMHeaderGuardCheck(StringRef Name,
ClangTidyContext *Context)
Expand Down Expand Up @@ -49,6 +49,6 @@ std::string LLVMHeaderGuardCheck::getHeaderGuard(StringRef Filename,
return StringRef(Guard).upper();
}

} // namespace llvm
} // namespace llvm_check
} // namespace tidy
} // namespace clang
10 changes: 5 additions & 5 deletions clang-tools-extra/clang-tidy/llvm/HeaderGuardCheck.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_HEADER_GUARD_CHECK_H
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_HEADER_GUARD_CHECK_H
#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_HEADERGUARDCHECK_H
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_HEADERGUARDCHECK_H

#include "../utils/HeaderGuard.h"

namespace clang {
namespace tidy {
namespace llvm {
namespace llvm_check {

/// Finds and fixes header guards that do not adhere to LLVM style.
/// For the user-facing documentation see:
Expand All @@ -32,8 +32,8 @@ class LLVMHeaderGuardCheck : public utils::HeaderGuardCheck {
std::string getHeaderGuard(StringRef Filename, StringRef OldGuard) override;
};

} // namespace llvm
} // namespace llvm_check
} // namespace tidy
} // namespace clang

#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_HEADER_GUARD_CHECK_H
#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_HEADERGUARDCHECK_H
4 changes: 2 additions & 2 deletions clang-tools-extra/clang-tidy/llvm/IncludeOrderCheck.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

namespace clang {
namespace tidy {
namespace llvm {
namespace llvm_check {

namespace {
class IncludeOrderPPCallbacks : public PPCallbacks {
Expand Down Expand Up @@ -176,6 +176,6 @@ void IncludeOrderPPCallbacks::EndOfMainFile() {
IncludeDirectives.clear();
}

} // namespace llvm
} // namespace llvm_check
} // namespace tidy
} // namespace clang
10 changes: 5 additions & 5 deletions clang-tools-extra/clang-tidy/llvm/IncludeOrderCheck.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_INCLUDE_ORDER_CHECK_H
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_INCLUDE_ORDER_CHECK_H
#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_INCLUDEORDERCHECK_H
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_INCLUDEORDERCHECK_H

#include "../ClangTidyCheck.h"

namespace clang {
namespace tidy {
namespace llvm {
namespace llvm_check {

/// Checks the correct order of `#includes`.
///
Expand All @@ -26,8 +26,8 @@ class IncludeOrderCheck : public ClangTidyCheck {
Preprocessor *ModuleExpanderPP) override;
};

} // namespace llvm
} // namespace llvm_check
} // namespace tidy
} // namespace clang

#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_INCLUDE_ORDER_CHECK_H
#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_INCLUDEORDERCHECK_H
4 changes: 2 additions & 2 deletions clang-tools-extra/clang-tidy/llvm/LLVMTidyModule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

namespace clang {
namespace tidy {
namespace llvm {
namespace llvm_check {

class LLVMModule : public ClangTidyModule {
public:
Expand All @@ -36,7 +36,7 @@ class LLVMModule : public ClangTidyModule {
static ClangTidyModuleRegistry::Add<LLVMModule> X("llvm-module",
"Adds LLVM lint checks.");

} // namespace llvm
} // namespace llvm_check

// This anchor is used to force the linker to link in the generated object file
// and thus register the LLVMModule.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ AST_MATCHER(Expr, isMacroID) { return Node.getExprLoc().isMacroID(); }
} // namespace ast_matchers

namespace tidy {
namespace llvm {
namespace llvm_check {

void PreferIsaOrDynCastInConditionalsCheck::registerMatchers(
MatchFinder *Finder) {
Expand Down Expand Up @@ -130,6 +130,6 @@ void PreferIsaOrDynCastInConditionalsCheck::check(
}
}

} // namespace llvm
} // namespace llvm_check
} // namespace tidy
} // namespace clang
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_AVOIDCASTINCONDITIONALCHECK_H
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_AVOIDCASTINCONDITIONALCHECK_H
#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_PREFERISAORDYNCASTINCONDITIONALSCHECK_H
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_PREFERISAORDYNCASTINCONDITIONALSCHECK_H

#include "../ClangTidyCheck.h"

namespace clang {
namespace tidy {
namespace llvm {
namespace llvm_check {

/// \brief Looks at conditionals and finds and replaces cases of ``cast<>``, which will
/// assert rather than return a null pointer, and ``dyn_cast<>`` where
Expand Down Expand Up @@ -57,8 +57,8 @@ class PreferIsaOrDynCastInConditionalsCheck : public ClangTidyCheck {
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
};

} // namespace llvm
} // namespace llvm_check
} // namespace tidy
} // namespace clang

#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_AVOIDCASTINCONDITIONALCHECK_H
#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_PREFERISAORDYNCASTINCONDITIONALSCHECK_H
4 changes: 2 additions & 2 deletions clang-tools-extra/clang-tidy/llvm/TwineLocalCheck.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ using namespace clang::ast_matchers;

namespace clang {
namespace tidy {
namespace llvm {
namespace llvm_check {

void TwineLocalCheck::registerMatchers(MatchFinder *Finder) {
auto TwineType =
Expand Down Expand Up @@ -60,6 +60,6 @@ void TwineLocalCheck::check(const MatchFinder::MatchResult &Result) {
}
}

} // namespace llvm
} // namespace llvm_check
} // namespace tidy
} // namespace clang
10 changes: 5 additions & 5 deletions clang-tools-extra/clang-tidy/llvm/TwineLocalCheck.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_TWINE_LOCAL_CHECK_H
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_TWINE_LOCAL_CHECK_H
#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_TWINELOCALCHECK_H
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_TWINELOCALCHECK_H

#include "../ClangTidyCheck.h"

namespace clang {
namespace tidy {
namespace llvm {
namespace llvm_check {

/// Looks for local `Twine` variables which are prone to use after frees and
/// should be generally avoided.
Expand All @@ -25,8 +25,8 @@ class TwineLocalCheck : public ClangTidyCheck {
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
};

} // namespace llvm
} // namespace llvm_check
} // namespace tidy
} // namespace clang

#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_TWINE_LOCAL_CHECK_H
#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_TWINELOCALCHECK_H
48 changes: 35 additions & 13 deletions clang-tools-extra/clang-tidy/rename_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,18 @@
import re


def replaceInFileRegex(fileName, sFrom, sTo):
if sFrom == sTo:
return
txt = None
with open(fileName, "r") as f:
txt = f.read()

txt = re.sub(sFrom, sTo, txt)
print("Replacing '%s' -> '%s' in '%s'..." % (sFrom, sTo, fileName))
with open(fileName, "w") as f:
f.write(txt)

def replaceInFile(fileName, sFrom, sTo):
if sFrom == sTo:
return
Expand Down Expand Up @@ -203,25 +215,28 @@ def main():
clang_tidy_path = os.path.dirname(__file__)

header_guard_variants = [
(args.old_check_name.replace('-', '_')).upper() + '_CHECK',
(old_module + '_' + check_name_camel).upper(),
(old_module + '_' + new_check_name_camel).upper(),
args.old_check_name.replace('-', '_').upper()]
header_guard_new = (new_module + '_' + new_check_name_camel).upper()

old_module_path = os.path.join(clang_tidy_path, old_module)
new_module_path = os.path.join(clang_tidy_path, new_module)

# Remove the check from the old module.
cmake_lists = os.path.join(old_module_path, 'CMakeLists.txt')
check_found = deleteMatchingLines(cmake_lists, '\\b' + check_name_camel)
if not check_found:
print("Check name '%s' not found in %s. Exiting." %
if (args.old_check_name != args.new_check_name):
# Remove the check from the old module.
cmake_lists = os.path.join(old_module_path, 'CMakeLists.txt')
check_found = deleteMatchingLines(cmake_lists, '\\b' + check_name_camel)
if not check_found:
print("Check name '%s' not found in %s. Exiting." %
(check_name_camel, cmake_lists))
return 1
return 1

modulecpp = filter(
lambda p: p.lower() == old_module.lower() + 'tidymodule.cpp',
os.listdir(old_module_path))[0]
deleteMatchingLines(os.path.join(old_module_path, modulecpp),
modulecpp = filter(
lambda p: p.lower() == old_module.lower() + 'tidymodule.cpp',
os.listdir(old_module_path))[0]
deleteMatchingLines(os.path.join(old_module_path, modulecpp),
'\\b' + check_name_camel + '|\\b' + args.old_check_name)

for filename in getListOfFiles(clang_tidy_path):
Expand Down Expand Up @@ -249,14 +264,21 @@ def main():
new_module + '/' + new_check_name_camel)
replaceInFile(filename, check_name_camel, new_check_name_camel)

if old_module != new_module:
if old_module != new_module or new_module == 'llvm':
if new_module == 'llvm':
new_namespace = new_module + '_check'
else:
new_namespace = new_module
check_implementation_files = glob.glob(
os.path.join(old_module_path, new_check_name_camel + '*'))
for filename in check_implementation_files:
# Move check implementation to the directory of the new module.
filename = fileRename(filename, old_module_path, new_module_path)
replaceInFile(filename, 'namespace ' + old_module,
'namespace ' + new_module)
replaceInFileRegex(filename, 'namespace ' + old_module + '[^ \n]*',
'namespace ' + new_namespace)

if (args.old_check_name == args.new_check_name):
return

# Add check to the new module.
adapt_cmake(new_module_path, new_check_name_camel)
Expand Down
2 changes: 1 addition & 1 deletion clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#include "llvm/IncludeOrderCheck.h"
#include "gtest/gtest.h"

using namespace clang::tidy::llvm;
using namespace clang::tidy::llvm_check;

namespace clang {
namespace tidy {
Expand Down

0 comments on commit b75e7ea

Please sign in to comment.