def run(self) -> List[nodes.Node]: """Generate a node tree in place of the directive.""" self.env.note_reread() # rebuild the current RST doc unconditionally default_rules = RulesCollection([DEFAULT_RULESDIR]) rst_rules_table = rules_as_rst(default_rules) return _nodes_from_rst(state=self.state, rst_source=rst_rules_table)
def main() -> int: """Linter CLI entry point.""" cwd = pathlib.Path.cwd() options = cli.get_config(sys.argv[1:]) initialize_logger(options.verbosity) _logger.debug("Options: %s", options) formatter_factory: Any = formatters.Formatter if options.quiet: formatter_factory = formatters.QuietFormatter if options.parseable: formatter_factory = formatters.ParseableFormatter if options.parseable_severity: formatter_factory = formatters.ParseableSeverityFormatter formatter = formatter_factory(cwd, options.display_relative_path) if options.use_default_rules: rulesdirs = options.rulesdir + [DEFAULT_RULESDIR] else: rulesdirs = options.rulesdir or [DEFAULT_RULESDIR] rules = RulesCollection(rulesdirs) if options.listrules: formatted_rules = rules if options.format == 'plain' else rules_as_rst(rules) print(formatted_rules) return 0 if options.listtags: print(rules.listtags()) return 0 if isinstance(options.tags, str): options.tags = options.tags.split(',') skip = set() for s in options.skip_list: skip.update(str(s).split(',')) options.skip_list = frozenset(skip) if not options.playbook: # no args triggers auto-detection mode playbooks = get_playbooks_and_roles(options=options) else: playbooks = sorted(set(options.playbook)) matches = list() checked_files: Set[Any] = set() for playbook in playbooks: runner = Runner(rules, playbook, options.tags, options.skip_list, options.exclude_paths, options.verbosity, checked_files) matches.extend(runner.run()) for match in sorted(matches): print(formatter.format(match, options.colored)) if matches: return 2 else: return 0
def main() -> int: """Linter CLI entry point.""" cwd = pathlib.Path.cwd() options = cli.get_config(sys.argv[1:]) initialize_logger(options.verbosity) _logger.debug("Options: %s", options) formatter_factory: Any = formatters.Formatter if options.quiet: formatter_factory = formatters.QuietFormatter if options.parseable: formatter_factory = formatters.ParseableFormatter if options.parseable_severity: formatter_factory = formatters.ParseableSeverityFormatter formatter = formatter_factory(cwd, options.display_relative_path) if options.use_default_rules: rulesdirs = options.rulesdir + [DEFAULT_RULESDIR] else: rulesdirs = options.rulesdir or [DEFAULT_RULESDIR] rules = RulesCollection(rulesdirs) if options.listrules: formatted_rules = rules if options.format == 'plain' else rules_as_rst( rules) print(formatted_rules) return 0 if options.listtags: print(rules.listtags()) return 0 if isinstance(options.tags, str): options.tags = options.tags.split(',') skip = set() for s in options.skip_list: skip.update(str(s).split(',')) options.skip_list = frozenset(skip) if not options.playbook: # no args triggers auto-detection mode playbooks = get_playbooks_and_roles(options=options) else: playbooks = sorted(set(options.playbook)) matches = list() checked_files: Set[str] = set() for playbook in playbooks: runner = Runner(rules, playbook, options.tags, options.skip_list, options.exclude_paths, options.verbosity, checked_files) matches.extend(runner.run()) # Assure we do not print duplicates and the order is consistent matches = sorted(set(matches)) for match in matches: print(formatter.format(match, options.colored)) # If run under GitHub Actions we also want to emit output recognized by it. if os.getenv('GITHUB_ACTIONS') == 'true' and os.getenv('GITHUB_WORKFLOW'): formatter = formatters.AnnotationsFormatter(cwd, True) for match in matches: print(formatter.format(match)) if matches: return 2 else: return 0
def _generate_default_rules(app: Sphinx) -> None: """Generate the default rules table RST file.""" default_rules = RulesCollection([DEFAULT_RULESDIR]) rst_rules_table = rules_as_rst(default_rules) DEFAULT_RULES_RST.write_text(rst_rules_table)