mirror of
https://gitea.invidious.io/iv-org/shard-ameba.git
synced 2024-08-15 00:53:29 +00:00
Add --describe
CLI switch
This commit is contained in:
parent
f1f21ac94d
commit
8ff621ba66
1 changed files with 58 additions and 0 deletions
|
@ -34,6 +34,10 @@ module Ameba::Cli
|
||||||
print_rules(config)
|
print_rules(config)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if describe_rule = opts.describe
|
||||||
|
print_rule_description(describe_rule, config)
|
||||||
|
end
|
||||||
|
|
||||||
runner = Ameba.run(config)
|
runner = Ameba.run(config)
|
||||||
|
|
||||||
if location_to_explain
|
if location_to_explain
|
||||||
|
@ -52,6 +56,7 @@ module Ameba::Cli
|
||||||
property globs : Array(String)?
|
property globs : Array(String)?
|
||||||
property only : Array(String)?
|
property only : Array(String)?
|
||||||
property except : Array(String)?
|
property except : Array(String)?
|
||||||
|
property describe : String?
|
||||||
property location_to_explain : NamedTuple(file: String, line: Int32, column: Int32)?
|
property location_to_explain : NamedTuple(file: String, line: Int32, column: Int32)?
|
||||||
property fail_level : Severity?
|
property fail_level : Severity?
|
||||||
property? skip_reading_config = false
|
property? skip_reading_config = false
|
||||||
|
@ -122,6 +127,11 @@ module Ameba::Cli
|
||||||
configure_explain_opts(loc, opts)
|
configure_explain_opts(loc, opts)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
parser.on("-d", "--describe Category/Rule",
|
||||||
|
"Describe a rule with specified name") do |rule_name|
|
||||||
|
configure_describe_opts(rule_name, opts)
|
||||||
|
end
|
||||||
|
|
||||||
parser.on("--without-affected-code",
|
parser.on("--without-affected-code",
|
||||||
"Stop showing affected code while using a default formatter") do
|
"Stop showing affected code while using a default formatter") do
|
||||||
opts.without_affected_code = true
|
opts.without_affected_code = true
|
||||||
|
@ -155,6 +165,11 @@ module Ameba::Cli
|
||||||
opts.without_affected_code?
|
opts.without_affected_code?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private def configure_describe_opts(rule_name, opts)
|
||||||
|
opts.describe = rule_name.presence
|
||||||
|
opts.formatter = :silent
|
||||||
|
end
|
||||||
|
|
||||||
private def configure_explain_opts(loc, opts)
|
private def configure_explain_opts(loc, opts)
|
||||||
location_to_explain = parse_explain_location(loc)
|
location_to_explain = parse_explain_location(loc)
|
||||||
opts.location_to_explain = location_to_explain
|
opts.location_to_explain = location_to_explain
|
||||||
|
@ -217,4 +232,47 @@ module Ameba::Cli
|
||||||
}
|
}
|
||||||
exit 0
|
exit 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private def print_rule_description(rule_name, config)
|
||||||
|
rule = config.rules.find(&.name.== rule_name)
|
||||||
|
raise "Unknown rule" unless rule
|
||||||
|
|
||||||
|
puts
|
||||||
|
output_title "Rule info"
|
||||||
|
output_paragraph "%s of a %s severity [enabled: %s]" % {
|
||||||
|
rule.name.colorize(:magenta),
|
||||||
|
rule.severity.to_s.colorize(rule.severity.color),
|
||||||
|
rule.enabled? ? ENABLED_MARK : DISABLED_MARK,
|
||||||
|
}
|
||||||
|
output_paragraph rule.description
|
||||||
|
|
||||||
|
if rule_doc = colorize_code_fences(rule.class.parsed_doc)
|
||||||
|
output_title "Detailed description"
|
||||||
|
output_paragraph rule_doc
|
||||||
|
end
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
end
|
||||||
|
|
||||||
|
private def output_title(title)
|
||||||
|
print "### %s\n\n" % title.upcase.colorize(:yellow)
|
||||||
|
end
|
||||||
|
|
||||||
|
private def output_paragraph(paragraph : String)
|
||||||
|
output_paragraph(paragraph.lines)
|
||||||
|
end
|
||||||
|
|
||||||
|
private def output_paragraph(paragraph : Array)
|
||||||
|
paragraph.each do |line|
|
||||||
|
puts " #{line}"
|
||||||
|
end
|
||||||
|
puts
|
||||||
|
end
|
||||||
|
|
||||||
|
private def colorize_code_fences(string)
|
||||||
|
return unless string
|
||||||
|
string
|
||||||
|
.gsub(/```(.+?)```/m, &.colorize(:dark_gray))
|
||||||
|
.gsub(/`(?!`)(.+?)`/, &.colorize(:dark_gray))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue