import os
import re
import stat
from pathlib import Path
CURRENT_DIR = Path(__file__).resolve().parent
PROJECT_ROOT = CURRENT_DIR.parent.parent.parent
log_keywords = [
'LOG_C', 'LOG_E', 'LOG_W', 'LOG_I', 'LOG_D', 'LOG_P', 'LOG_M',
'DIGS_LOG_ERROR', 'DIGS_LOG_WARNING', 'DIGS_LOG_INFO', 'DIGS_LOG_DEBUG'
]
exclude_keywords = ['open_source', 'build', 'output', 'hsec', '3rdparty']
def should_exclude(file_path):
"""检查文件路径是否包含排除关键字"""
return any(keyword in file_path for keyword in exclude_keywords)
def process_file(file_path):
"""处理单个文件,添加注释"""
with open(file_path, 'r', encoding='utf-8') as file:
lines = file.readlines()
modified_lines = []
for line in lines:
if any(keyword in line for keyword in log_keywords):
stripped_line = line.rstrip()
new_line = f'{stripped_line} // LCOV_EXCL_BR_LINE\n'
modified_lines.append(new_line)
else:
modified_lines.append(line)
if lines != modified_lines:
flags = os.O_WRONLY | os.O_CREAT
modes = stat.S_IWUSR | stat.S_IRUSR
with os.fdopen(os.open(file_path, flags, modes), 'w') as fout:
fout.writelines(modified_lines)
def walk_directory(directory):
"""递归遍历目录并处理文件"""
for root, _, files in os.walk(directory):
for name in files:
if name.endswith('.cpp'):
file_path = os.path.join(root, name)
if not should_exclude(file_path):
process_file(file_path)
ms_path = PROJECT_ROOT / 'mindie_motor/src'
util_path = PROJECT_ROOT / 'utils'
walk_directory(ms_path)
walk_directory(util_path)