| import os |
| |
| import checksymbolslib.br as br |
| |
| |
| def all_symbols_from(line): |
| clean_line = br.re_comments.sub('', line) |
| symbols = br.re_kconfig_symbol.findall(clean_line) |
| return symbols |
| |
| |
| def handle_definition(db, filename, lineno, line, legacy): |
| for symbol in all_symbols_from(line): |
| if legacy: |
| db.add_symbol_legacy_definition(symbol, filename, lineno) |
| else: |
| db.add_symbol_definition(symbol, filename, lineno) |
| |
| |
| def handle_usage(db, filename, lineno, line, legacy): |
| for symbol in all_symbols_from(line): |
| if legacy: |
| db.add_symbol_usage_in_legacy(symbol, filename, lineno) |
| else: |
| db.add_symbol_usage(symbol, filename, lineno) |
| |
| |
| def handle_default(db, filename, lineno, line, legacy): |
| if legacy: |
| handle_usage(db, filename, lineno, line, legacy) |
| return |
| if not br.re_kconfig_default_legacy_comment.search(line): |
| handle_usage(db, filename, lineno, line, legacy) |
| return |
| after = br.re_kconfig_default_before_conditional.sub('', line) |
| for symbol in all_symbols_from(after): |
| db.add_symbol_legacy_usage(symbol, filename, lineno) |
| |
| |
| def handle_select(db, filename, lineno, line, legacy): |
| handle_usage(db, filename, lineno, line, legacy) |
| before = br.re_kconfig_select_conditional.sub('', line) |
| for symbol in all_symbols_from(before): |
| db.add_symbol_select(symbol, filename, lineno) |
| |
| |
| line_type_handlers = { |
| br.re_kconfig_config: handle_definition, |
| br.re_kconfig_default: handle_default, |
| br.re_kconfig_depends: handle_usage, |
| br.re_kconfig_if: handle_usage, |
| br.re_kconfig_select: handle_select, |
| br.re_kconfig_source: handle_usage, |
| } |
| |
| |
| def handle_line(db, filename, lineno, line, legacy): |
| if not br.re_kconfig_symbol.search(line): |
| return |
| |
| for regexp, line_type_handler in line_type_handlers.items(): |
| if regexp.search(line): |
| line_type_handler(db, filename, lineno, line, legacy) |
| |
| |
| def handle_config_helper(db, filename, file_content): |
| symbol = None |
| lineno = None |
| state = 'none' |
| for cur_lineno, line in file_content: |
| if state == 'none': |
| m = br.re_kconfig_config.search(line) |
| if m is not None: |
| symbol = m.group(2) |
| lineno = cur_lineno |
| state = 'config' |
| continue |
| if state == 'config': |
| if br.re_kconfig_select.search(line): |
| db.add_symbol_helper(symbol, filename, lineno) |
| state = 'none' |
| continue |
| m = br.re_kconfig_config.search(line) |
| if m is not None: |
| symbol = m.group(2) |
| lineno = cur_lineno |
| continue |
| |
| |
| def handle_config_choice(db, filename, file_content): |
| state = 'none' |
| for lineno, line in file_content: |
| if state == 'none': |
| if br.re_kconfig_choice.search(line): |
| state = 'choice' |
| continue |
| if state == 'choice': |
| if br.re_kconfig_endchoice.search(line): |
| state = 'none' |
| continue |
| m = br.re_kconfig_config.search(line) |
| if m is not None: |
| symbol = m.group(2) |
| db.add_symbol_choice(symbol, filename, lineno) |
| continue |
| |
| |
| def handle_note(db, filename, file_content): |
| state = 'none' |
| for lineno, line in file_content: |
| if state == 'none': |
| if br.re_menu.search(line): |
| state = 'menu' |
| continue |
| if state == 'menu': |
| if br.re_endmenu.search(line): |
| state = 'none' |
| continue |
| m = br.re_legacy_special_comment.search(line) |
| if m is not None: |
| symbol = m.group(1) |
| db.add_symbol_legacy_note(symbol, filename, lineno) |
| continue |
| |
| |
| def populate_db(db, filename, file_content): |
| legacy = filename.endswith('.legacy') |
| for lineno, line in file_content: |
| handle_line(db, filename, lineno, line, legacy) |
| handle_config_helper(db, filename, file_content) |
| handle_config_choice(db, filename, file_content) |
| if legacy: |
| handle_note(db, filename, file_content) |
| |
| |
| def check_filename(filename): |
| if os.path.basename(filename).startswith('Config.'): |
| return True |
| return False |