diff --git a/src/ameba/cli/cmd.cr b/src/ameba/cli/cmd.cr index 42238e30..e5dcdc6b 100644 --- a/src/ameba/cli/cmd.cr +++ b/src/ameba/cli/cmd.cr @@ -27,7 +27,7 @@ module Ameba::Cli runner = Ameba.run(config) if location = opts.location_to_explain - runner.explain(location) + runner.explain(location, autocorrect: opts.autocorrect?) else exit 1 unless runner.success? end diff --git a/src/ameba/formatter/explain_formatter.cr b/src/ameba/formatter/explain_formatter.cr index 33c8b7d5..e5f7598a 100644 --- a/src/ameba/formatter/explain_formatter.cr +++ b/src/ameba/formatter/explain_formatter.cr @@ -11,6 +11,7 @@ module Ameba::Formatter getter output : IO::FileDescriptor | IO::Memory getter location : Crystal::Location + getter? autocorrect : Bool # Creates a new instance of ExplainFormatter. # Accepts *output* which indicates the io where the explanation will be wrtitten to. @@ -20,7 +21,7 @@ module Ameba::Formatter # ExplainFormatter.new output, # {file: path, line: line_number, column: column_number} # ``` - def initialize(@output, location) + def initialize(@output, location, @autocorrect = false) @location = Crystal::Location.new(location[:file], location[:line], location[:column]) end @@ -40,12 +41,22 @@ module Ameba::Formatter return unless (location = issue.location) - output_title "ISSUE INFO" - output_paragraph [ + issue_info = [ issue.message.colorize(:red).to_s, location.to_s.colorize(:cyan).to_s, ] + if issue.correctable? + if autocorrect? + issue_info << "Corrected".colorize(:green).to_s + else + issue_info << "Correctable".colorize(:yellow).to_s + end + end + + output_title "ISSUE INFO" + output_paragraph issue_info + if affected_code = affected_code(issue, context_lines: 3) output_title "AFFECTED CODE" output_paragraph affected_code diff --git a/src/ameba/runner.cr b/src/ameba/runner.cr index 3cccff4d..dd2ca2f7 100644 --- a/src/ameba/runner.cr +++ b/src/ameba/runner.cr @@ -161,8 +161,8 @@ module Ameba # runner.run # runner.explain({file: file, line: l, column: c}) # ``` - def explain(location, output = STDOUT) - Formatter::ExplainFormatter.new(output, location).finished @sources + def explain(location, output = STDOUT, autocorrect = false) + Formatter::ExplainFormatter.new(output, location, autocorrect).finished @sources end # Indicates whether the last inspection successful or not.