From 518a7cafd50821c63eed4167a7852c7b2f30058f Mon Sep 17 00:00:00 2001 From: David Leal Date: Tue, 18 Jul 2023 21:00:14 -0600 Subject: [PATCH] chore: add the linter to a separate Python script (#1272) * updating DIRECTORY.md * chore: add the linter to a separate Python script --------- Co-authored-by: github-actions[bot] --- .github/workflows/awesome_workflow.yml | 44 ++------------------------ .gitignore | 1 + scripts/file_linter.py | 40 +++++++++++++++++++++++ 3 files changed, 43 insertions(+), 42 deletions(-) create mode 100644 scripts/file_linter.py diff --git a/.github/workflows/awesome_workflow.yml b/.github/workflows/awesome_workflow.yml index 968aff2d..dc3c8532 100644 --- a/.github/workflows/awesome_workflow.yml +++ b/.github/workflows/awesome_workflow.yml @@ -42,48 +42,8 @@ jobs: # be able to catch any errors for other platforms. run: cmake -B build -S . -DCMAKE_EXPORT_COMPILE_COMMANDS=ON - name: Lint modified files - shell: python - run: | - import os - import subprocess - import sys - - print("Python {}.{}.{}".format(*sys.version_info)) # Python 3.8 - with open("git_diff.txt") as in_file: - modified_files = sorted(in_file.read().splitlines()) - print("{} files were modified.".format(len(modified_files))) - - cpp_exts = tuple(".c .c++ .cc .cpp .cu .cuh .cxx .h .h++ .hh .hpp .hxx".split()) - cpp_files = [file for file in modified_files if file.lower().endswith(cpp_exts)] - print(f"{len(cpp_files)} C++ files were modified.") - if not cpp_files: - sys.exit(0) - subprocess.run(["clang-tidy", "-p=build", "--fix", *cpp_files, "--"], - check=True, text=True, stderr=subprocess.STDOUT) - subprocess.run(["clang-format", "-i", *cpp_files], - check=True, text=True, stderr=subprocess.STDOUT) - - upper_files = [file for file in cpp_files if file != file.lower()] - if upper_files: - print(f"{len(upper_files)} files contain uppercase characters:") - print("\n".join(upper_files) + "\n") - - space_files = [file for file in cpp_files if " " in file or "-" in file] - if space_files: - print(f"{len(space_files)} files contain space or dash characters:") - print("\n".join(space_files) + "\n") - - nodir_files = [file for file in cpp_files if file.count(os.sep) != 1 and "project_euler" not in file and "data_structure" not in file] - if len(nodir_files) > 1: - nodir_file_bad_files = len(nodir_files) - 1 - print(f"{len(nodir_files)} files are not in one and only one directory:") - print("\n".join(nodir_files) + "\n") - else: - nodir_file_bad_files = 0 - - bad_files = nodir_file_bad_files + len(upper_files + space_files) - if bad_files: - sys.exit(bad_files) + shell: bash + run: python3 scripts/file_linter.py - name: Commit and push changes run: | git diff DIRECTORY.md diff --git a/.gitignore b/.gitignore index 59f569ad..8b6b444d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ *.out .vscode/ build/ +git_diff.txt diff --git a/scripts/file_linter.py b/scripts/file_linter.py new file mode 100644 index 00000000..bce3ad86 --- /dev/null +++ b/scripts/file_linter.py @@ -0,0 +1,40 @@ +import os +import subprocess +import sys + +print("Python {}.{}.{}".format(*sys.version_info)) # Python 3.8 +with open("git_diff.txt") as in_file: + modified_files = sorted(in_file.read().splitlines()) + print("{} files were modified.".format(len(modified_files))) + + cpp_exts = tuple(".c .c++ .cc .cpp .cu .cuh .cxx .h .h++ .hh .hpp .hxx".split()) + cpp_files = [file for file in modified_files if file.lower().endswith(cpp_exts)] + print(f"{len(cpp_files)} C++ files were modified.") + if not cpp_files: + sys.exit(0) + subprocess.run(["clang-tidy", "-p=build", "--fix", *cpp_files, "--"], + check=True, text=True, stderr=subprocess.STDOUT) + subprocess.run(["clang-format", "-i", *cpp_files], + check=True, text=True, stderr=subprocess.STDOUT) + + upper_files = [file for file in cpp_files if file != file.lower()] + if upper_files: + print(f"{len(upper_files)} files contain uppercase characters:") + print("\n".join(upper_files) + "\n") + + space_files = [file for file in cpp_files if " " in file or "-" in file] + if space_files: + print(f"{len(space_files)} files contain space or dash characters:") + print("\n".join(space_files) + "\n") + + nodir_files = [file for file in cpp_files if file.count(os.sep) != 1 and "project_euler" not in file and "data_structure" not in file] + if len(nodir_files) > 1: + nodir_file_bad_files = len(nodir_files) - 1 + print(f"{len(nodir_files)} files are not in one and only one directory:") + print("\n".join(nodir_files) + "\n") + else: + nodir_file_bad_files = 0 + bad_files = nodir_file_bad_files + len(upper_files + space_files) + + if bad_files: + sys.exit(bad_files)