69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/calltally/cli.rb', line 69
def run_scan(argv)
base_dir = "."
cli_opts = {}
config_override = nil
opts = OptionParser.new do |opt|
opt.on("--profile PROFILE") { |v| cli_opts["profile"] = v }
opt.on("-d x,y", "--dirs x,y", Array) { |v| cli_opts["dirs"] = v }
opt.on("-x x,y", "--exclude x,y", Array) { |v| cli_opts["exclude"] = v }
opt.on("-n N", "--top N", Integer) { |v| cli_opts["top"] = v }
opt.on("-v", "--verbose") { cli_opts["verbose"] = true }
opt.on("--mode MODE", [:pairs, :methods, :receivers]) { |v| cli_opts["mode"] = v.to_s }
opt.on("--receivers x,y", Array) { |v| cli_opts["receivers"] = v }
opt.on("--methods x,y", Array) { |v| cli_opts["methods"] = v }
opt.on("--include-nil-receiver") { cli_opts["include_nil_receiver"] = true }
opt.on("--split-variables") { cli_opts["split_variables"] = true }
opt.on("--only-locals") { (cli_opts["receiver_types"] ||= []) << "locals" }
opt.on("--only-ivars") { (cli_opts["receiver_types"] ||= []) << "ivars" }
opt.on("--only-cvars") { (cli_opts["receiver_types"] ||= []) << "cvars" }
opt.on("--only-gvars") { (cli_opts["receiver_types"] ||= []) << "gvars" }
opt.on("--only-constants") { (cli_opts["receiver_types"] ||= []) << "constants" }
opt.on("--only-results") { (cli_opts["receiver_types"] ||= []) << "results" }
opt.on("--[no-]skip-operators") { |v| cli_opts["skip_operators"] = v }
opt.on("--plugins x,y", Array) { |v| cli_opts["plugins"] = v }
opt.on("--format F", [:table, :json, :csv]) { |v| cli_opts["format"] = v.to_s }
opt.on("-o PATH", "--output PATH") { |v| cli_opts["output"] = v }
opt.on("--config PATH") { |v| config_override = v }
opt.on("-h", "--help") { puts opt; exit }
end
if argv.first && !argv.first.start_with?("-")
base_dir = argv.shift
end
opts.parse!(argv)
if config_override && File.file?(config_override)
yaml = YAML.load_file(config_override) || {}
yaml.each { |k, v| cli_opts[k.to_s] = v unless cli_opts.key?(k.to_s) }
end
config = Calltally::Config.load(base_dir: base_dir, cli_opts: cli_opts)
mode, rows = Calltally::Scanner.new(base_dir: base_dir, config: config).scan
out = config["output"] ? File.open(config["output"], "w") : $stdout
begin
case config["format"]
when "json" then Calltally::Formatter.print_json(mode: mode, data: rows, io: out)
when "csv" then Calltally::Formatter.print_csv(mode: mode, data: rows, io: out)
else Calltally::Formatter.print_table(mode: mode, data: rows, io: out)
end
ensure
out.close if out.is_a?(File)
end
end
|