Class: GraphQL::Modernize::CLI

Inherits:
Object
  • Object
show all
Defined in:
lib/graphql/modernize/cli.rb

Constant Summary collapse

COMMANDS =
%w[run list explain doctor version].freeze
PACKAGE_ROOT =
File.expand_path("../../..", __dir__)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(arguments, out:, err:) ⇒ CLI

Returns a new instance of CLI.



16
17
18
19
20
# File 'lib/graphql/modernize/cli.rb', line 16

def initialize(arguments, out:, err:)
  @arguments = arguments
  @out = out
  @err = err
end

Class Method Details

.start(arguments = ARGV, out: $stdout, err: $stderr) ⇒ Object



12
13
14
# File 'lib/graphql/modernize/cli.rb', line 12

def self.start(arguments = ARGV, out: $stdout, err: $stderr)
  new(arguments.dup, out: out, err: err).start
end

Instance Method Details

#doctorObject



81
82
83
84
85
86
87
88
89
90
91
# File 'lib/graphql/modernize/cli.rb', line 81

def doctor
  parse_no_options("doctor")
  config = Config.load(root: Dir.pwd)
  files = FileFinder.new(config).find
  @out.puts("configuration: ok")
  @out.puts("ruby: #{RUBY_VERSION}")
  @out.puts("astel: #{Astel::VERSION}")
  @out.puts("graphql: #{config.from_version || 'unknown'} -> #{config.target_version || 'unknown'}")
  @out.puts("files: #{files.length}")
  0
end

#explainObject

Raises:



66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/graphql/modernize/cli.rb', line 66

def explain
  parser = OptionParser.new { |opts| opts.banner = "Usage: graphql-modernize explain RULE_ID" }
  parser.parse!(@arguments)
  raise Error, "Specify exactly one RULE_ID" unless @arguments.one?

   = RuleRegistry.fetch(@arguments.first).
  @out.puts("#{.id}: #{.summary}")
  @out.puts("safety: #{.safety}")
  @out.puts("since: #{.since}") if .since
  @out.puts("removed_in: #{.removed_in}") if .removed_in
  docs = .docs && File.expand_path(.docs, PACKAGE_ROOT)
  @out.puts("\n#{File.read(docs)}") if docs && File.file?(docs)
  0
end

#listObject



57
58
59
60
61
62
63
64
# File 'lib/graphql/modernize/cli.rb', line 57

def list
  parse_no_options("list")
  RuleRegistry.all.each do |rule|
     = rule.
    @out.puts("#{.id}\t#{.safety}\t#{.summary}")
  end
  0
end

#runObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/graphql/modernize/cli.rb', line 30

def run
  options = { diff: true, format: "text", jobs: Etc.nprocessors, force: false, strict: false }
  parser = run_parser(options)
  paths = catch(:help) { parser.parse(@arguments) }
  return 0 if paths == :help

  config = Config.load(root: Dir.pwd, overrides: config_overrides(options))
  rules = selected_rules(options, config)
  application = Application.new(config: config, rules: rules, jobs: options[:jobs],
                                explicit_rule_ids: options[:only] || [])
  application.ensure_write_safe!(paths: paths, force: options[:force]) if options[:write]
  result = application.run(paths)
  warn_parse_errors(result) unless %w[text json].include?(options[:format])
  output = Reporter.render(options[:format], result, diff: options[:diff])
  if options[:out]
    ensure_output_is_not_source!(options[:out], result)
    File.write(options[:out], output)
  else
    @out.write(output)
  end
  strict_failure = options[:strict] && result.parse_errors.any?
  application.write(result) if options[:write] && !strict_failure
  return 2 if strict_failure

  unresolved?(result, options[:fail_level]) ? 1 : 0
end

#startObject



22
23
24
25
26
27
28
# File 'lib/graphql/modernize/cli.rb', line 22

def start
  command = COMMANDS.include?(@arguments.first) ? @arguments.shift : "run"
  public_send(command)
rescue StandardError => e
  @err.puts("graphql-modernize: #{e.message}")
  2
end

#versionObject



93
94
95
96
97
# File 'lib/graphql/modernize/cli.rb', line 93

def version
  parse_no_options("version")
  @out.puts(GraphQL::Modernize::VERSION)
  0
end