81 files = glob.glob(os.path.join(clang_tidy_path,
"**"), recursive=
True)
83 os.path.normpath(os.path.join(clang_tidy_path,
"../docs/ReleaseNotes.rst"))
86 os.path.join(clang_tidy_path,
"..",
"test",
"clang-tidy",
"checkers",
"**"),
90 os.path.join(clang_tidy_path,
"..",
"docs",
"clang-tidy",
"checks",
"*.rst")
94 clang_tidy_path,
"..",
"docs",
"clang-tidy",
"checks",
"*",
"*.rst"
98 return [filename
for filename
in files
if os.path.isfile(filename)]
186 clang_tidy_path: str, old_check_name: str, new_check_name: str
188 filename = os.path.normpath(
189 os.path.join(clang_tidy_path,
"../docs/ReleaseNotes.rst")
191 with io.open(filename,
"r", encoding=
"utf8")
as f:
192 lines = f.readlines()
194 lineMatcher = re.compile(
"Renamed checks")
195 nextSectionMatcher = re.compile(
"Improvements to include-fixer")
196 checkMatcher = re.compile(
"- The '(.*)")
198 print(
"Updating %s..." % filename)
199 with io.open(filename,
"w", encoding=
"utf8")
as f:
202 add_note_here =
False
206 match = lineMatcher.match(line)
207 match_next = nextSectionMatcher.match(line)
208 match_check = checkMatcher.match(line)
210 last_check = match_check.group(1)
211 if last_check > old_check_name:
222 if line.startswith(
"^^^^"):
226 if header_found
and add_note_here:
227 if not line.startswith(
"^^^^"):
229 """- The '%s' check was renamed to :doc:`%s
230 <clang-tidy/checks/%s/%s>`
236 new_check_name.split(
"-", 1)[0],
237 "-".join(new_check_name.split(
"-")[1:]),
246 parser = argparse.ArgumentParser(description=
"Rename clang-tidy check.")
247 parser.add_argument(
"old_check_name", type=str, help=
"Old check name.")
248 parser.add_argument(
"new_check_name", type=str, help=
"New check name.")
250 "--check_class_name",
252 help=
"Old name of the class implementing the check.",
254 args = parser.parse_args()
256 old_module = args.old_check_name.split(
"-")[0]
257 new_module = args.new_check_name.split(
"-")[0]
258 old_name =
"-".join(args.old_check_name.split(
"-")[1:])
259 new_name =
"-".join(args.new_check_name.split(
"-")[1:])
261 if args.check_class_name:
262 check_name_camel = args.check_class_name
265 "".join(map(
lambda elem: elem.capitalize(), old_name.split(
"-"))) +
"Check"
268 new_check_name_camel = (
269 "".join(map(
lambda elem: elem.capitalize(), new_name.split(
"-"))) +
"Check"
272 clang_tidy_path = os.path.dirname(__file__)
274 header_guard_variants = [
275 (args.old_check_name.replace(
"-",
"_")).upper() +
"_CHECK",
276 (old_module +
"_" + check_name_camel).upper(),
277 (old_module +
"_" + new_check_name_camel).upper(),
278 args.old_check_name.replace(
"-",
"_").upper(),
280 header_guard_new = (new_module +
"_" + new_check_name_camel).upper()
282 old_module_path = os.path.join(clang_tidy_path, old_module)
283 new_module_path = os.path.join(clang_tidy_path, new_module)
285 if old_module != new_module:
287 cmake_lists = os.path.join(old_module_path,
"CMakeLists.txt")
291 "Check name '%s' not found in %s. Exiting."
292 % (check_name_camel, cmake_lists)
299 lambda p: p.lower() == old_module.lower() +
"tidymodule.cpp",
300 os.listdir(old_module_path),
305 os.path.join(old_module_path, modulecpp),
306 "\\b" + check_name_camel +
"|\\b" + args.old_check_name,
310 originalName = filename
312 filename, old_module +
"/" + old_name, new_module +
"/" + new_name
314 filename =
fileRename(filename, args.old_check_name, args.new_check_name)
315 filename =
fileRename(filename, check_name_camel, new_check_name_camel)
316 for header_guard
in header_guard_variants:
319 if new_module +
"/" + new_name +
".rst" in filename:
322 args.old_check_name +
"\n" +
"=" * len(args.old_check_name) +
"\n",
323 args.new_check_name +
"\n" +
"=" * len(args.new_check_name) +
"\n",
326 replaceInFile(filename, args.old_check_name, args.new_check_name)
329 old_module +
"::" + check_name_camel,
330 new_module +
"::" + new_check_name_camel,
334 old_module +
"/" + check_name_camel,
335 new_module +
"/" + new_check_name_camel,
338 filename, old_module +
"/" + old_name, new_module +
"/" + new_name
340 replaceInFile(filename, check_name_camel, new_check_name_camel)
342 if old_module != new_module
or new_module ==
"llvm":
343 if new_module ==
"llvm":
344 new_namespace = new_module +
"_check"
346 new_namespace = new_module
347 check_implementation_files = glob.glob(
348 os.path.join(old_module_path, new_check_name_camel +
"*")
350 for filename
in check_implementation_files:
352 filename =
fileRename(filename, old_module_path, new_module_path)
355 "namespace clang::tidy::" + old_module +
"[^ \n]*",
356 "namespace clang::tidy::" + new_namespace,
359 if old_module != new_module:
364 new_module_path, new_module, args.new_check_name, new_check_name_camel
367 os.system(os.path.join(clang_tidy_path,
"add_new_check.py") +
" --update-docs")