123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- 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
|