/
dieoska
/
ddnet
Обзор
Документация
Войти
/
dieoska
/
ddnet
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
scripts/check_config_variables.py
67 строк
2 KB
heinrich5991
Run `ruff check --fix`
17 дек 2025, 17:07
17 дек 2025, 17:07
48f1361
Код
Авторство
О чём код?
#!/usr/bin/env python3 import os import re import sys def read_all_lines(filename): with open(filename, "r", encoding="utf-8") as file: return file.readlines() def parse_config_variables(lines): pattern = r"^MACRO_CONFIG_[A-Z]+\((.*?), (.*?),.*" matches = {} for line in lines: match = re.match(pattern, line) if match: matches[match.group(1)] = match.group(2) return matches def generate_regex(variable_code): return rf"(g_Config\.m_{variable_code}\b|Config\(\)->m_{variable_code}\b|m_pConfig->m_{variable_code}\b)" def find_config_variables(config_variables): """Returns the config variables which were not found.""" # Set of variables that have yet to be found. variables_not_found = set(config_variables) # Precompile regex for every config variable (~1.6x speedup). regex_cache = {} for variable_code in variables_not_found.copy(): regex_cache[variable_code] = re.compile(generate_regex(variable_code)) for root, _, files in os.walk("src"): if not variables_not_found: break for file in files: if not variables_not_found: break if file.endswith((".cpp", ".h")) and "external" not in root: filepath = os.path.join(root, file) with open(filepath, "r", encoding="utf-8") as f: content = f.read() # Only variables not yet found are searched in the remaining files (~3.6x speedup). # Copy set to remove elements while iterating, which is slightly faster than collecting # the elements to remove in another set and removing them after the loop. for variable_code in variables_not_found.copy(): if regex_cache[variable_code].search(content): variables_not_found.remove(variable_code) return variables_not_found def main(): lines = read_all_lines("src/engine/shared/config_variables.h") config_variables = parse_config_variables(lines) config_variables_not_found = find_config_variables(config_variables) for variable_code in config_variables_not_found: print(f"The config variable '{config_variables[variable_code]}' is unused.") if config_variables_not_found: print("Error: Unused config variables found.") return 1 print("Success: No unused config variables found.") return 0 if __name__ == "__main__": sys.exit(main())