[clang] 7cebfa4 - [analyzer] SATestUtils.py: Refactor and add type annotations
Valeriy Savchenko via cfe-commits
cfe-commits at lists.llvm.org
Fri May 22 03:52:16 PDT 2020
Author: Valeriy Savchenko
Date: 2020-05-22T13:51:58+03:00
New Revision: 7cebfa4e069265a146186e90bfa0a36135bf8aba
URL: https://github.com/llvm/llvm-project/commit/7cebfa4e069265a146186e90bfa0a36135bf8aba
DIFF: https://github.com/llvm/llvm-project/commit/7cebfa4e069265a146186e90bfa0a36135bf8aba.diff
LOG: [analyzer] SATestUtils.py: Refactor and add type annotations
Differential Revision: https://reviews.llvm.org/D80424
Added:
Modified:
clang/utils/analyzer/SATestBuild.py
clang/utils/analyzer/SATestUtils.py
Removed:
################################################################################
diff --git a/clang/utils/analyzer/SATestBuild.py b/clang/utils/analyzer/SATestBuild.py
index 09f2bc14c8bc..39fa7ece4362 100755
--- a/clang/utils/analyzer/SATestBuild.py
+++ b/clang/utils/analyzer/SATestBuild.py
@@ -60,8 +60,8 @@
from queue import Queue
from subprocess import CalledProcessError, check_call
-from typing import (cast, Dict, Iterable, IO, List, NamedTuple, Tuple,
- TYPE_CHECKING)
+from typing import (cast, Dict, Iterable, IO, List, NamedTuple, Optional,
+ Tuple, TYPE_CHECKING)
###############################################################################
@@ -93,13 +93,15 @@ def stdout(message: str):
# Find Clang for static analysis.
if 'CC' in os.environ:
- CLANG = os.environ['CC']
+ cc_candidate: Optional[str] = os.environ['CC']
else:
- CLANG = SATestUtils.which("clang", os.environ['PATH'])
-if not CLANG:
+ cc_candidate = SATestUtils.which("clang", os.environ['PATH'])
+if not cc_candidate:
stderr("Error: cannot find 'clang' in PATH")
sys.exit(1)
+CLANG = cc_candidate
+
# Number of jobs.
MAX_JOBS = int(math.ceil(multiprocessing.cpu_count() * 0.75))
@@ -204,8 +206,9 @@ def run_cleanup_script(directory: str, build_log_file: IO):
cwd = os.path.join(directory, PATCHED_SOURCE_DIR_NAME)
script_path = os.path.join(directory, CLEANUP_SCRIPT)
- SATestUtils.runScript(script_path, build_log_file, cwd,
- Stdout=LOCAL.stdout, Stderr=LOCAL.stderr)
+ SATestUtils.run_script(script_path, build_log_file, cwd,
+ out=LOCAL.stdout, err=LOCAL.stderr,
+ verbose=VERBOSE)
def download_and_patch(directory: str, build_log_file: IO):
@@ -238,8 +241,9 @@ def download(directory: str, build_log_file: IO):
Run the script to download the project, if it exists.
"""
script_path = os.path.join(directory, DOWNLOAD_SCRIPT)
- SATestUtils.runScript(script_path, build_log_file, directory,
- Stdout=LOCAL.stdout, Stderr=LOCAL.stderr)
+ SATestUtils.run_script(script_path, build_log_file, directory,
+ out=LOCAL.stdout, err=LOCAL.stderr,
+ verbose=VERBOSE)
def apply_patch(directory: str, build_log_file: IO):
@@ -557,9 +561,9 @@ def analyze_preprocessed(self, directory: str, output_dir: str):
failed = False
# Only run the analyzes on supported files.
- if SATestUtils.hasNoExtension(file_name):
+ if SATestUtils.has_no_extension(file_name):
continue
- if not SATestUtils.isValidSingleInputFile(file_name):
+ if not SATestUtils.is_valid_single_input_file(file_name):
stderr(f"Error: Invalid single input file {full_file_name}.\n")
raise Exception()
@@ -859,7 +863,7 @@ def get_projects(map_file: IO) -> Iterable[Tuple[str, str]]:
map_file.seek(0)
# TODO: csv format is not very readable, change it to JSON
for project_info in csv.reader(map_file):
- if (SATestUtils.isCommentCSVLine(project_info)):
+ if SATestUtils.is_comment_csv_line(project_info):
continue
# suppress mypy error
yield cast(Tuple[str, str], project_info)
diff --git a/clang/utils/analyzer/SATestUtils.py b/clang/utils/analyzer/SATestUtils.py
index 079b06a4cbb7..4e126e66b869 100644
--- a/clang/utils/analyzer/SATestUtils.py
+++ b/clang/utils/analyzer/SATestUtils.py
@@ -1,12 +1,11 @@
import os
-from subprocess import check_call
import sys
+from subprocess import CalledProcessError, check_call
+from typing import List, IO, Optional
-Verbose = 1
-
-def which(command, paths=None):
+def which(command: str, paths: Optional[str] = None) -> Optional[str]:
"""which(command, [paths]) - Look up the given command in the paths string
(or the PATH environment variable, if unspecified)."""
@@ -38,41 +37,44 @@ def which(command, paths=None):
return None
-def hasNoExtension(FileName):
- (Root, Ext) = os.path.splitext(FileName)
- return (Ext == "")
+def has_no_extension(file_name: str) -> bool:
+ root, ext = os.path.splitext(file_name)
+ return ext == ""
-def isValidSingleInputFile(FileName):
- (Root, Ext) = os.path.splitext(FileName)
- return Ext in (".i", ".ii", ".c", ".cpp", ".m", "")
+def is_valid_single_input_file(file_name: str) -> bool:
+ root, ext = os.path.splitext(file_name)
+ return ext in (".i", ".ii", ".c", ".cpp", ".m", "")
-def runScript(ScriptPath, PBuildLogFile, Cwd, Stdout=sys.stdout,
- Stderr=sys.stderr):
+def run_script(script_path: str, build_log_file: IO, cwd: str,
+ out=sys.stdout, err=sys.stderr, verbose: int = 0):
"""
Run the provided script if it exists.
"""
- if os.path.exists(ScriptPath):
+ if os.path.exists(script_path):
try:
- if Verbose == 1:
- Stdout.write(" Executing: %s\n" % (ScriptPath,))
- check_call("chmod +x '%s'" % ScriptPath, cwd=Cwd,
- stderr=PBuildLogFile,
- stdout=PBuildLogFile,
+ if verbose == 1:
+ out.write(f" Executing: {script_path}\n")
+
+ check_call(f"chmod +x '{script_path}'", cwd=cwd,
+ stderr=build_log_file,
+ stdout=build_log_file,
shell=True)
- check_call("'%s'" % ScriptPath, cwd=Cwd,
- stderr=PBuildLogFile,
- stdout=PBuildLogFile,
+
+ check_call(f"'{script_path}'", cwd=cwd,
+ stderr=build_log_file,
+ stdout=build_log_file,
shell=True)
- except:
- Stderr.write("Error: Running %s failed. See %s for details.\n" % (
- ScriptPath, PBuildLogFile.name))
+
+ except CalledProcessError:
+ err.write(f"Error: Running {script_path} failed. "
+ f"See {build_log_file.name} for details.\n")
sys.exit(-1)
-def isCommentCSVLine(Entries):
+def is_comment_csv_line(entries: List[str]) -> bool:
"""
Treat CSV lines starting with a '#' as a comment.
"""
- return len(Entries) > 0 and Entries[0].startswith("#")
+ return len(entries) > 0 and entries[0].startswith("#")
More information about the cfe-commits
mailing list