Skip to content
Closed
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 32 additions & 24 deletions scripts/code_style.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,27 +88,30 @@ def get_src_files(since: Optional[str]) -> List[str]:
filename in generated_files)]
return src_files

def get_uncrustify_version() -> str:
def get_uncrustify_version(uncrustify_exe: str) -> str:
"""
Get the version string from Uncrustify
"""
result = subprocess.run([UNCRUSTIFY_EXE, "--version"],
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
check=False)
if result.returncode != 0:
print_err("Could not get Uncrustify version:", str(result.stderr, "utf-8"))
return ""
else:
return str(result.stdout, "utf-8")
Get the version string from Uncrustify.

def check_style_is_correct(src_file_list: List[str]) -> bool:
Return an empty string if Uncrustify is not found.
"""
try:
output = subprocess.check_output([uncrustify_exe, "--version"],
stderr=subprocess.PIPE)
return str(output, "utf-8").strip()
except FileNotFoundError:
sys.stderr.write('Fatal: command {} not found in PATH.\n'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a very nice practise.

.format(uncrustify_exe))
return ''

def check_style_is_correct(uncrustify_exe: str,
src_file_list: List[str]) -> bool:
"""
Check the code style and output a diff for each file whose style is
incorrect.
"""
style_correct = True
for src_file in src_file_list:
uncrustify_cmd = [UNCRUSTIFY_EXE] + UNCRUSTIFY_ARGS + [src_file]
uncrustify_cmd = [uncrustify_exe] + UNCRUSTIFY_ARGS + [src_file]
result = subprocess.run(uncrustify_cmd, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, check=False)
if result.returncode != 0:
Expand Down Expand Up @@ -149,7 +152,7 @@ def fix_style_single_pass(src_file_list: List[str]) -> bool:
return False
return True

def fix_style(src_file_list: List[str]) -> int:
def fix_style(uncrustify_exe: str, src_file_list: List[str]) -> int:
"""
Fix the code style. This takes 2 passes of Uncrustify.
"""
Expand All @@ -160,7 +163,7 @@ def fix_style(src_file_list: List[str]) -> int:

# Guard against future changes that cause the codebase to require
# more passes.
if not check_style_is_correct(src_file_list):
if not check_style_is_correct(uncrustify_exe, src_file_list):
print_err("Code style still incorrect after second run of Uncrustify.")
return 1
else:
Expand All @@ -170,13 +173,6 @@ def main() -> int:
"""
Main with command line arguments.
"""
uncrustify_version = get_uncrustify_version().strip()
if UNCRUSTIFY_SUPPORTED_VERSION not in uncrustify_version:
print("Warning: Using unsupported Uncrustify version '" +
uncrustify_version + "'")
print("Note: The only supported version is " +
UNCRUSTIFY_SUPPORTED_VERSION)

parser = argparse.ArgumentParser()
parser.add_argument('-f', '--fix', action='store_true',
help=('modify source files to fix the code style '
Expand All @@ -192,11 +188,23 @@ def main() -> int:
# way to restyle a possibly empty set of files.
parser.add_argument('--subset', action='store_true',
help='only check the specified files (default with non-option arguments)')
parser.add_argument('--uncrustify',
default='uncrustify',
help='uncrustify command to run (default: uncrustify)')
parser.add_argument('operands', nargs='*', metavar='FILE',
help='files to check (files MUST be known to git, if none: check all)')

args = parser.parse_args()

uncrustify_version = get_uncrustify_version(args.uncrustify)
if UNCRUSTIFY_SUPPORTED_VERSION not in uncrustify_version:
if uncrustify_version != '':
sys.stderr.write('Fatal: wrong uncrustify version ({}).\n'
.format(uncrustify_version))
sys.stderr.write('You need uncrustify {} for correct results.\n'
.format(UNCRUSTIFY_SUPPORTED_VERSION))
return 2

covered = frozenset(get_src_files(args.since))
# We only check files that are known to git
if args.subset or args.operands:
Expand All @@ -209,10 +217,10 @@ def main() -> int:

if args.fix:
# Fix mode
return fix_style(src_files)
return fix_style(args.uncrustify, src_files)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The default for args.uncrustify could be set to be to UNCRUSTIFY_EXE set at at line17.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UNCRUSTIFY_EXE shouldn't exist anymore... But I missed an occurrence. I'll fix that.

else:
# Check mode
if check_style_is_correct(src_files):
if check_style_is_correct(args.uncrustify, src_files):
print("Checked {} files, style ok.".format(len(src_files)))
return 0
else:
Expand Down
2 changes: 1 addition & 1 deletion tests/scripts/all.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5689,7 +5689,7 @@ component_check_code_style () {
}

support_check_code_style() {
case $(uncrustify --version) in
case $(uncrustify --version 2>/dev/null) in
*0.75.1*) true;;
*) false;;
esac
Expand Down