Class: RBS::Trace::CLI::Inline

Inherits:
Object
  • Object
show all
Defined in:
lib/rbs/trace/cli/inline.rb

Constant Summary collapse

"Usage: rbs-trace inline --sig-dir=DIR --rb-dir=DIR --comment-format=FORMAT\n\nInsert RBS inline comments from RBS files.\n\nExamples:\n  # Insert inline comments to `app/**/*.rb`.\n  $ rbs-trace inline --sig-dir=sig --rb-dir=app\n\nOptions:\n  --comment-format FORMAT: Format for comments (`rbs_keyword` or `rbs_colon`, default: `rbs_keyword`)\n"

Instance Method Summary collapse

Instance Method Details

#run(args) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/rbs/trace/cli/inline.rb', line 21

def run(args) # rubocop:disable Metrics
  sig_dir = Pathname.pwd.join("sig").to_s
  rb_dirs = [] #: Array[String]
  comment_format = :rbs_keyword

  opts = OptionParser.new(BANNER)
  opts.on("--sig-dir DIR") { |dir| sig_dir = dir }
  opts.on("--rb-dir DIR") { |dir| rb_dirs << dir }
  opts.on("--comment-format FORMAT") { |format| comment_format = format.to_sym }
  opts.parse!(args)

  if rb_dirs.empty?
    puts opts.help
  else
    env = load_env(sig_dir) # steep:ignore ArgumentTypeMismatch
    decls = env.class_decls.transform_values { |v| v.primary.decl }

    rb_files = rb_dirs.flat_map { |rb_dir| Dir.glob("#{rb_dir}/**/*.rb") }
    rb_files.each do |path|
      file = File.new(path, decls)
      file.rewrite(comment_format)
    end
  end
end