class Standard::MergesSettings
def call(argv, standard_yaml)
def call(argv, standard_yaml) standard_argv, rubocop_argv = separate_argv(argv) standard_cli_flags = parse_standard_argv(standard_argv) rubocop_cli_flags, lint_paths = RuboCop::Options.new.parse(rubocop_argv) Settings.new( determine_command(standard_argv), merge(standard_yaml, standard_cli_flags, without_banned(rubocop_cli_flags)), lint_paths ) end
def determine_command(argv)
def determine_command(argv) if (argv & ["--help", "-h"]).any? :help elsif (argv & ["--version", "-v"]).any? :version elsif (argv & ["--verbose-version", "-V"]).any? :verbose_version elsif (argv & ["--generate-todo"]).any? :genignore elsif (argv & ["--lsp"]).any? :lsp else :rubocop end end
def merge(standard_yaml, standard_cli_flags, rubocop_cli_flags)
def merge(standard_yaml, standard_cli_flags, rubocop_cli_flags) { autocorrect: standard_yaml[:fix], safe_autocorrect: true, formatters: [[standard_yaml[:format] || "Standard::Formatter", nil]], parallel: standard_yaml[:parallel], todo_file: standard_yaml[:todo_file], todo_ignore_files: standard_yaml[:todo_ignore_files] }.merge(standard_cli_flags).merge(rubocop_cli_flags) end
def parse_standard_argv(argv)
def parse_standard_argv(argv) argv.each_with_object({}) do |arg, cli_flags| if arg == "--fix" cli_flags[:autocorrect] = true cli_flags[:safe_autocorrect] = true elsif arg == "--fix-unsafely" cli_flags[:autocorrect] = true cli_flags[:safe_autocorrect] = false elsif arg == "--no-fix" cli_flags[:autocorrect] = false cli_flags[:safe_autocorrect] = false end end end
def separate_argv(argv)
def separate_argv(argv) argv.partition do |flag| ["--generate-todo", "--fix", "--fix-unsafely", "--no-fix", "--version", "-v", "--verbose-version", "-V", "--help", "-h", "--lsp"].include?(flag) end end
def without_banned(rubocop_cli_flags)
def without_banned(rubocop_cli_flags) rubocop_cli_flags.tap do |flags| flags.delete(:config) end end