On Thu 25-07-24 03:58:30, Julian Sun wrote: > Reduce false positives in the macro_checker > in the following scenarios: > 1. Conditional compilation > 2. Macro definitions with only a single character > 3. Macro definitions as (0) and (1) > > Before this patch: > sjc@sjc:linux$ ./scripts/macro_checker.py fs | wc -l > 99 > > After this patch: > sjc@sjc:linux$ ./scripts/macro_checker.py fs | wc -l > 11 > > Most of the current warnings are valid now. > > Signed-off-by: Julian Sun <sunjunchao2870@xxxxxxxxx> ... > def file_check_macro(file_path, report): > + # number of conditional compiling > + cond_compile = 0 > # only check .c and .h file > if not file_path.endswith(".c") and not file_path.endswith(".h"): > return > @@ -57,7 +72,14 @@ def file_check_macro(file_path, report): > while True: > line = f.readline() > if not line: > - return > + break > + line = line.strip() > + if line.startswith(cond_compile_mark): > + cond_compile += 1 > + continue > + if line.startswith(cond_compile_end): > + cond_compile -= 1 > + continue > > macro = re.match(macro_pattern, line) > if macro: > @@ -67,6 +89,11 @@ def file_check_macro(file_path, report): > macro = macro.strip() > macro += f.readline() > macro = macro_strip(macro) > + if file_path.endswith(".c") and cond_compile != 0: > + continue > + # 1 is for #ifdef xxx at the beginning of the header file > + if file_path.endswith(".h") and cond_compile != 1: > + continue > check_macro(macro, report) > > def get_correct_macros(path): So I don't think this is right. As far as I understand this skips any macros that are conditionally defined? Why? There is a lot of them and checking them is beneficial... The patterns you have added should be dealing with most of the conditional defines anyway. Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR