From 149ad3ae1cd2a5f5df7f4f6a78ab0246715a910c Mon Sep 17 00:00:00 2001 From: OMGeeky Date: Mon, 28 Jul 2025 21:57:29 +0200 Subject: [PATCH] Differentiate between missing and extra format specifiers Missing format specifiers in translated strings are now reported as warnings, while extra format specifiers are reported as errors. This change allows the script to pass if only warnings (missing specifiers) are present, but still fail if there are errors (extra specifiers). The summary now also includes counts for both errors and warnings per file. --- AndorsTrail/tools/check_format_specifiers.py | 43 +++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/AndorsTrail/tools/check_format_specifiers.py b/AndorsTrail/tools/check_format_specifiers.py index 72a75b7b1..8d3a0cc34 100644 --- a/AndorsTrail/tools/check_format_specifiers.py +++ b/AndorsTrail/tools/check_format_specifiers.py @@ -182,6 +182,7 @@ def main(): total_issues_found = 0 file_error_counts = {} + file_warning_counts = {} for key_name in keys_to_check: base_value, base_specifiers = get_string_value_and_specifiers(base_file_path, key_name) @@ -197,6 +198,7 @@ def main(): continue error_count = 0 + warning_count = 0 non_escaped_percent_indices = find_non_escaped_percent(current_value) if non_escaped_percent_indices: @@ -209,30 +211,41 @@ def main(): print("-" * 20) if current_specifiers != base_specifiers: - error_count += 1 - print(f"--- Language: {lang_code} (ISSUE FOUND) ---") - print(f"Key: {key_name}") - print(f"File: {file_path}") - print(f"Value: \"{current_value}\"") - print(f"Specifiers: {sorted(list(current_specifiers)) if current_specifiers else 'None'}") - print(f"Expected specifiers (from base): {sorted(list(base_specifiers)) if base_specifiers else 'None'}") - missing_in_current = base_specifiers - current_specifiers extra_in_current = current_specifiers - base_specifiers - if missing_in_current: - print(f" MISSING in '{lang_code}': {sorted(list(missing_in_current))}") if extra_in_current: + error_count += 1 + print(f"--- Language: {lang_code} (ISSUE FOUND) ---") + print(f"Key: {key_name}") + print(f"File: {file_path}") + print(f"Value: \"{current_value}\"") + print(f"Specifiers: {sorted(list(current_specifiers)) if current_specifiers else 'None'}") + print(f"Expected specifiers (from base): {sorted(list(base_specifiers)) if base_specifiers else 'None'}") print(f" EXTRA in '{lang_code}': {sorted(list(extra_in_current))}") - print("-" * 20) + print("-" * 20) + if missing_in_current: + warning_count += 1 + print(f"--- Language: {lang_code} (WARNING: MISSING SPECIFIERS) ---") + print(f"Key: {key_name}") + print(f"File: {file_path}") + print(f"Value: \"{current_value}\"") + print(f"Specifiers: {sorted(list(current_specifiers)) if current_specifiers else 'None'}") + print(f"Expected specifiers (from base): {sorted(list(base_specifiers)) if base_specifiers else 'None'}") + print(f" MISSING in '{lang_code}': {sorted(list(missing_in_current))}") + print("-" * 20) if error_count: file_error_counts[file_path] = file_error_counts.get(file_path, 0) + error_count + if warning_count: + file_warning_counts[file_path] = file_warning_counts.get(file_path, 0) + warning_count - if file_error_counts: - print("\nSummary of errors per file:") - for file_path, count in file_error_counts.items(): - print(f"{file_path}: {count} error(s)") + if file_error_counts or file_warning_counts: + print("\nSummary of errors and warnings per file:") + for file_path in set(list(file_error_counts.keys()) + list(file_warning_counts.keys())): + error_str = f"{file_error_counts.get(file_path, 0)} error(s)" + warning_str = f"{file_warning_counts.get(file_path, 0)} warning(s)" + print(f"{file_path}:\t {error_str:>5}, {warning_str:>5}") if file_error_counts: exit(1)