mirror of
https://gitea.invidious.io/iv-org/shard-ameba.git
synced 2024-08-15 00:53:29 +00:00
Ability to configure globs
This commit is contained in:
parent
4638f4cdf1
commit
bffc46c545
3 changed files with 86 additions and 42 deletions
|
@ -8,6 +8,42 @@ module Ameba
|
||||||
Config::AVAILABLE_FORMATTERS.should_not be_nil
|
Config::AVAILABLE_FORMATTERS.should_not be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe ".new" do
|
||||||
|
it "loads default globs when config is empty" do
|
||||||
|
yml = YAML.parse "{}"
|
||||||
|
config = Config.new(yml)
|
||||||
|
config.globs.should eq Config::DEFAULT_GLOBS
|
||||||
|
end
|
||||||
|
|
||||||
|
it "initializes globs as string" do
|
||||||
|
yml = YAML.parse <<-CONFIG
|
||||||
|
---
|
||||||
|
Globs: src/*.cr
|
||||||
|
CONFIG
|
||||||
|
config = Config.new(yml)
|
||||||
|
config.globs.should eq %w(src/*.cr)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "initializes globs as array" do
|
||||||
|
yml = YAML.parse <<-CONFIG
|
||||||
|
---
|
||||||
|
Globs:
|
||||||
|
- "src/*.cr"
|
||||||
|
- "!spec"
|
||||||
|
CONFIG
|
||||||
|
config = Config.new(yml)
|
||||||
|
config.globs.should eq %w(src/*.cr !spec)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "raises if Globs has a wrong type" do
|
||||||
|
yml = YAML.parse <<-CONFIG
|
||||||
|
---
|
||||||
|
Globs: 100
|
||||||
|
CONFIG
|
||||||
|
expect_raises(Exception, "incorrect 'Globs' section in a config file") { Config.new(yml) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe ".load" do
|
describe ".load" do
|
||||||
it "loads custom config" do
|
it "loads custom config" do
|
||||||
config = Config.load config_sample
|
config = Config.load config_sample
|
||||||
|
@ -28,7 +64,7 @@ module Ameba
|
||||||
config = Config.load config_sample
|
config = Config.load config_sample
|
||||||
|
|
||||||
it "holds source globs" do
|
it "holds source globs" do
|
||||||
config.globs.should contain "spec/ameba/config_spec.cr"
|
config.globs.should eq Config::DEFAULT_GLOBS
|
||||||
end
|
end
|
||||||
|
|
||||||
it "allows to set globs" do
|
it "allows to set globs" do
|
||||||
|
|
|
@ -8,7 +8,7 @@ module Ameba::Cli
|
||||||
def run(args = ARGV)
|
def run(args = ARGV)
|
||||||
opts = parse_args args
|
opts = parse_args args
|
||||||
config = Config.load opts.config, opts.colors?
|
config = Config.load opts.config, opts.colors?
|
||||||
config.globs = opts.globs
|
config.globs = opts.globs.not_nil! if opts.globs
|
||||||
config.severity = opts.fail_level.not_nil! if opts.fail_level
|
config.severity = opts.fail_level.not_nil! if opts.fail_level
|
||||||
|
|
||||||
configure_formatter(config, opts)
|
configure_formatter(config, opts)
|
||||||
|
|
|
@ -25,43 +25,16 @@ class Ameba::Config
|
||||||
}
|
}
|
||||||
|
|
||||||
PATH = ".ameba.yml"
|
PATH = ".ameba.yml"
|
||||||
|
|
||||||
|
DEFAULT_GLOBS = %w(
|
||||||
|
**/*.cr
|
||||||
|
!lib
|
||||||
|
)
|
||||||
|
|
||||||
setter formatter : Formatter::BaseFormatter?
|
setter formatter : Formatter::BaseFormatter?
|
||||||
setter globs : Array(String)?
|
|
||||||
getter rules : Array(Rule::Base)
|
getter rules : Array(Rule::Base)
|
||||||
property severity = Severity::Convention
|
property severity = Severity::Convention
|
||||||
|
|
||||||
@rule_groups : Hash(String, Array(Rule::Base))
|
|
||||||
|
|
||||||
# Creates a new instance of `Ameba::Config` based on YAML parameters.
|
|
||||||
#
|
|
||||||
# `Config.load` uses this constructor to instantiate new config by YAML file.
|
|
||||||
protected def initialize(@config : YAML::Any)
|
|
||||||
@rules = Rule.rules.map &.new(config).as(Rule::Base)
|
|
||||||
@rule_groups = @rules.group_by &.group
|
|
||||||
|
|
||||||
if @config.as_h? && (name = @config["Formatter"]?.try &.["Name"]?)
|
|
||||||
self.formatter = name.to_s
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Loads YAML configuration file by `path`.
|
|
||||||
#
|
|
||||||
# ```
|
|
||||||
# config = Ameba::Config.load
|
|
||||||
# ```
|
|
||||||
#
|
|
||||||
def self.load(path = PATH, colors = true)
|
|
||||||
Colorize.enabled = colors
|
|
||||||
content = File.exists?(path) ? File.read path : ""
|
|
||||||
Config.new YAML.parse(content)
|
|
||||||
rescue e
|
|
||||||
raise "Config file is invalid: #{e.message}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.formatter_names
|
|
||||||
AVAILABLE_FORMATTERS.keys.join("|")
|
|
||||||
end
|
|
||||||
|
|
||||||
# Returns a list of paths (with wildcards) to files.
|
# Returns a list of paths (with wildcards) to files.
|
||||||
# Represents a list of sources to be inspected.
|
# Represents a list of sources to be inspected.
|
||||||
# If globs are not set, it will return default list of files.
|
# If globs are not set, it will return default list of files.
|
||||||
|
@ -71,9 +44,37 @@ class Ameba::Config
|
||||||
# config.globs = ["**/*.cr"]
|
# config.globs = ["**/*.cr"]
|
||||||
# config.globs
|
# config.globs
|
||||||
# ```
|
# ```
|
||||||
|
property globs : Array(String)
|
||||||
|
|
||||||
|
@rule_groups : Hash(String, Array(Rule::Base))
|
||||||
|
|
||||||
|
# Creates a new instance of `Ameba::Config` based on YAML parameters.
|
||||||
#
|
#
|
||||||
def globs
|
# `Config.load` uses this constructor to instantiate new config by YAML file.
|
||||||
@globs ||= default_files
|
protected def initialize(config : YAML::Any)
|
||||||
|
@rules = Rule.rules.map &.new(config).as(Rule::Base)
|
||||||
|
@rule_groups = @rules.group_by &.group
|
||||||
|
@globs = load_globs(config)
|
||||||
|
|
||||||
|
self.formatter = load_formatter_name(config)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Loads YAML configuration file by `path`.
|
||||||
|
#
|
||||||
|
# ```
|
||||||
|
# config = Ameba::Config.load
|
||||||
|
# ```
|
||||||
|
#
|
||||||
|
def self.load(path = PATH, colors = true)
|
||||||
|
Colorize.enabled = colors
|
||||||
|
content = File.exists?(path) ? File.read path : "{}"
|
||||||
|
Config.new YAML.parse(content)
|
||||||
|
rescue e
|
||||||
|
raise "Config file is invalid: #{e.message}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.formatter_names
|
||||||
|
AVAILABLE_FORMATTERS.keys.join("|")
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns a list of sources.
|
# Returns a list of sources.
|
||||||
|
@ -100,7 +101,7 @@ class Ameba::Config
|
||||||
# ```
|
# ```
|
||||||
#
|
#
|
||||||
def formatter
|
def formatter
|
||||||
@formatter ||= default_formatter
|
@formatter ||= Formatter::DotFormatter.new
|
||||||
end
|
end
|
||||||
|
|
||||||
# Sets formatter by name.
|
# Sets formatter by name.
|
||||||
|
@ -158,12 +159,19 @@ class Ameba::Config
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private def default_files
|
private def load_formatter_name(config)
|
||||||
Dir["**/*.cr"].reject(&.starts_with? "lib/")
|
name = config["Formatter"]?.try &.["Name"]?
|
||||||
|
name ? name.to_s : nil
|
||||||
end
|
end
|
||||||
|
|
||||||
private def default_formatter
|
private def load_globs(config)
|
||||||
Formatter::DotFormatter.new
|
case globs = config["Globs"]?
|
||||||
|
when .nil? then DEFAULT_GLOBS
|
||||||
|
when .as_s? then [globs.as_s]
|
||||||
|
when .as_a? then globs.as_a.map(&.as_s)
|
||||||
|
else
|
||||||
|
raise "incorrect 'Globs' section in a config file"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# :nodoc:
|
# :nodoc:
|
||||||
|
|
Loading…
Reference in a new issue