def run
parse_options!
workspace_path = File.expand_path(argv.shift || Dir.pwd)
abort_with_usage("unexpected argument: #{argv.first}") unless argv.empty?
abort_with_usage("workspace is not a directory: #{workspace_path}") unless File.directory?(workspace_path)
require "rubydex/linter"
rules = load_linter_rules(workspace_path)
abort("No Rubydex::Linter::Rule subclasses were loaded") if rules.empty?
config = Rubydex::Config.load(workspace_path)
warn_unknown_rules(config.linter, rules)
graph = build_graph($stderr, workspace_path:, config:, fail_on_index_errors: true)
result = Rubydex::Linter::Runner.new(graph, rules:, config: config.linter).run
if result.diagnostics.empty?
print_summary(graph.documents.count, result.diagnostics)
return
end
print_offenses(result.diagnostics, graph)
exit(1) unless result.success?
end