self.opts = opts
if not self.opts:
sys.exit('[!] ERROR: empty {} check'.format(self.__class__.__name__))
+ if len(self.opts) == 1:
+ sys.exit('[!] ERROR: useless {} check'.format(self.__class__.__name__))
if not isinstance(opts[0], KconfigCheck):
sys.exit('[!] ERROR: invalid {} check: {}'.format(self.__class__.__name__, opts))
self.result = None
def print_unknown_options(checklist, parsed_options):
known_options = []
- for opt in checklist:
- if hasattr(opt, 'opts'):
- for o in opt.opts:
- if hasattr(o, 'name'):
- known_options.append(o.name)
- else:
- known_options.append(opt.name)
+
+ for o1 in checklist:
+ if not hasattr(o1, 'opts'):
+ known_options.append(o1.name)
+ continue
+ for o2 in o1.opts:
+ if not hasattr(o2, 'opts'):
+ if hasattr(o2, 'name'):
+ known_options.append(o2.name)
+ continue
+ for o3 in o2.opts:
+ if hasattr(o3, 'opts'):
+ sys.exit('[!] ERROR: unexpected ComplexOptCheck inside {}'.format(o2.name))
+ if hasattr(o3, 'name'):
+ known_options.append(o3.name)
+
for option, value in parsed_options.items():
if option not in known_options:
- print('[?] No rule for option {} ({})'.format(option, value))
+ print('[?] No check for option {} ({})'.format(option, value))
def print_checklist(mode, checklist, with_results):