From c6bf8b8592431a4e39aeb20cc185b8fae0d52e43 Mon Sep 17 00:00:00 2001 From: Matt Beardsley Date: Sat, 11 Sep 2021 09:52:47 +0200 Subject: [PATCH] Fix python 2-vs-3 issues in add_new_check.py and rename_check.py As of this commit: https://github.com/llvm/llvm-project/commit/307b1fdd If either of those scripts are invoked with python 2, neither works due to: "TypeError: write() argument 1 must be unicode, not str" And if rename_check.py is invoked with python 3: "ValueError: binary mode doesn't take an encoding argument" (referring to `with io.open(filename, 'wb', encoding='utf8') as f:`), and Another issue in rename_check.py in python 2: "TypeError: list object is not an iterator" (referring to `next(filter( ... os.listdir(old_module_path)))`) (so, rename_check doesn't work with either 2 or 3, and add_new_check doesn't work with 2, but does work with 3) I ran these steps to test both python versions: (manually - appears to be the "status quo" for these files) python3 clang-tools-extra/clang-tidy/add_new_check.py readability ggggg python3 clang-tools-extra/clang-tidy/rename_check.py readability-ggggg readability-hhhhh git checkout HEAD -- clang-tools-extra/clang-tidy/readability/CMakeLists.txt clang-tools-extra/clang-tidy/readability/ReadabilityTidyModule.cpp clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/docs/clang-tidy/checks/list.rst rm -f clang-tools-extra/clang-tidy/readability/GggggCheck.cpp clang-tools-extra/clang-tidy/readability/GggggCheck.h clang-tools-extra/docs/clang-tidy/checks/readability-ggggg.rst clang-tools-extra/test/clang-tidy/checkers/readability-ggggg.cpp clang-tools-extra/clang-tidy/readability/HhhhhCheck.cpp clang-tools-extra/clang-tidy/readability/HhhhhCheck.h clang-tools-extra/docs/clang-tidy/checks/readability-hhhhh.rst python2 clang-tools-extra/clang-tidy/add_new_check.py readability ggggg python2 clang-tools-extra/clang-tidy/rename_check.py readability-ggggg readability-hhhhh git checkout HEAD -- clang-tools-extra/clang-tidy/readability/CMakeLists.txt clang-tools-extra/clang-tidy/readability/ReadabilityTidyModule.cpp clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/docs/clang-tidy/checks/list.rst rm -f clang-tools-extra/clang-tidy/readability/GggggCheck.cpp clang-tools-extra/clang-tidy/readability/GggggCheck.h clang-tools-extra/docs/clang-tidy/checks/readability-ggggg.rst clang-tools-extra/test/clang-tidy/checkers/readability-ggggg.cpp clang-tools-extra/clang-tidy/readability/HhhhhCheck.cpp clang-tools-extra/clang-tidy/readability/HhhhhCheck.h clang-tools-extra/docs/clang-tidy/checks/readability-hhhhh.rst Reviewed By: kbobyrev Differential Revision: https://reviews.llvm.org/D109127 --- clang-tools-extra/clang-tidy/add_new_check.py | 1 + clang-tools-extra/clang-tidy/rename_check.py | 40 +++++++++++++++------------ 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/clang-tools-extra/clang-tidy/add_new_check.py b/clang-tools-extra/clang-tidy/add_new_check.py index 9239ca5..0312c04 100755 --- a/clang-tools-extra/clang-tidy/add_new_check.py +++ b/clang-tools-extra/clang-tidy/add_new_check.py @@ -9,6 +9,7 @@ #===-----------------------------------------------------------------------===# from __future__ import print_function +from __future__ import unicode_literals import argparse import io diff --git a/clang-tools-extra/clang-tidy/rename_check.py b/clang-tools-extra/clang-tidy/rename_check.py index 0c48634..9c20217 100755 --- a/clang-tools-extra/clang-tidy/rename_check.py +++ b/clang-tools-extra/clang-tidy/rename_check.py @@ -8,6 +8,8 @@ # #===-----------------------------------------------------------------------===# +from __future__ import unicode_literals + import argparse import glob import io @@ -117,7 +119,7 @@ def adapt_cmake(module_path, check_name_camel): return False print('Updating %s...' % filename) - with io.open(filename, 'wb', encoding='utf8') as f: + with io.open(filename, 'w', encoding='utf8') as f: cpp_found = False file_added = False for line in lines: @@ -125,21 +127,23 @@ def adapt_cmake(module_path, check_name_camel): if (not file_added) and (cpp_line or cpp_found): cpp_found = True if (line.strip() > cpp_file) or (not cpp_line): - f.write((' ' + cpp_file + '\n').encode()) + f.write(' ' + cpp_file + '\n') file_added = True - f.write(line.encode()) + f.write(line) return True # Modifies the module to include the new check. def adapt_module(module_path, module, check_name, check_name_camel): - modulecpp = next(filter(lambda p: p.lower() == module.lower() + 'tidymodule.cpp', os.listdir(module_path))) + modulecpp = next(iter(filter( + lambda p: p.lower() == module.lower() + 'tidymodule.cpp', + os.listdir(module_path)))) filename = os.path.join(module_path, modulecpp) with io.open(filename, 'r', encoding='utf8') as f: lines = f.readlines() print('Updating %s...' % filename) - with io.open(filename, 'wb', encoding='utf8') as f: + with io.open(filename, 'w', encoding='utf8') as f: header_added = False header_found = False check_added = False @@ -153,21 +157,21 @@ def adapt_module(module_path, module, check_name, check_name_camel): header_found = True if match.group(1) > check_name_camel: header_added = True - f.write(('#include "' + check_name_camel + '.h"\n').encode()) + f.write('#include "' + check_name_camel + '.h"\n') elif header_found: header_added = True - f.write(('#include "' + check_name_camel + '.h"\n').encode()) + f.write('#include "' + check_name_camel + '.h"\n') if not check_added: if line.strip() == '}': check_added = True - f.write(check_decl.encode()) + f.write(check_decl) else: match = re.search('registerCheck<(.*)>', line) if match and match.group(1) > check_name_camel: check_added = True - f.write(check_decl.encode()) - f.write(line.encode()) + f.write(check_decl) + f.write(line) # Adds a release notes entry. @@ -182,7 +186,7 @@ def add_release_notes(clang_tidy_path, old_check_name, new_check_name): checkMatcher = re.compile('- The \'(.*)') print('Updating %s...' % filename) - with io.open(filename, 'wb', encoding='utf8') as f: + with io.open(filename, 'w', encoding='utf8') as f: note_added = False header_found = False add_note_here = False @@ -202,22 +206,22 @@ def add_release_notes(clang_tidy_path, old_check_name, new_check_name): if match: header_found = True - f.write(line.encode()) + f.write(line) continue if line.startswith('^^^^'): - f.write(line.encode()) + f.write(line) continue if header_found and add_note_here: if not line.startswith('^^^^'): - f.write(("""- The '%s' check was renamed to :doc:`%s + f.write("""- The '%s' check was renamed to :doc:`%s ` -""" % (old_check_name, new_check_name, new_check_name)).encode()) +""" % (old_check_name, new_check_name, new_check_name)) note_added = True - f.write(line.encode()) + f.write(line) def main(): parser = argparse.ArgumentParser(description='Rename clang-tidy check.') @@ -263,9 +267,9 @@ def main(): (check_name_camel, cmake_lists)) return 1 - modulecpp = next(filter( + modulecpp = next(iter(filter( lambda p: p.lower() == old_module.lower() + 'tidymodule.cpp', - os.listdir(old_module_path))) + os.listdir(old_module_path)))) deleteMatchingLines(os.path.join(old_module_path, modulecpp), '\\b' + check_name_camel + '|\\b' + args.old_check_name) -- 2.7.4