mirror of
https://gitea.invidious.io/iv-org/shard-ameba.git
synced 2024-08-15 00:53:29 +00:00
Use square brackets for %w
and %i
array literals
This commit is contained in:
parent
06dc201344
commit
10b577d23a
27 changed files with 101 additions and 99 deletions
|
@ -164,7 +164,7 @@ Generate new file by running `ameba --gen-config`.
|
||||||
**List of sources to run Ameba on can be configured globally via:**
|
**List of sources to run Ameba on can be configured globally via:**
|
||||||
|
|
||||||
- `Globs` section - an array of wildcards (or paths) to include to the
|
- `Globs` section - an array of wildcards (or paths) to include to the
|
||||||
inspection. Defaults to `%w(**/*.cr !lib)`, meaning it includes all project
|
inspection. Defaults to `%w[**/*.cr !lib]`, meaning it includes all project
|
||||||
files with `*.cr` extension except those which exist in `lib` folder.
|
files with `*.cr` extension except those which exist in `lib` folder.
|
||||||
- `Excluded` section - an array of wildcards (or paths) to exclude from the
|
- `Excluded` section - an array of wildcards (or paths) to exclude from the
|
||||||
source list defined by `Globs`. Defaults to an empty array.
|
source list defined by `Globs`. Defaults to an empty array.
|
||||||
|
|
|
@ -10,7 +10,7 @@ module Ameba::Rule
|
||||||
end
|
end
|
||||||
|
|
||||||
it "contains rules across all the available groups" do
|
it "contains rules across all the available groups" do
|
||||||
Rule.rules.map(&.group_name).uniq!.reject!(&.empty?).sort.should eq %w(
|
Rule.rules.map(&.group_name).uniq!.reject!(&.empty?).sort.should eq %w[
|
||||||
Ameba
|
Ameba
|
||||||
Documentation
|
Documentation
|
||||||
Layout
|
Layout
|
||||||
|
@ -19,7 +19,7 @@ module Ameba::Rule
|
||||||
Naming
|
Naming
|
||||||
Performance
|
Performance
|
||||||
Style
|
Style
|
||||||
)
|
]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -50,25 +50,25 @@ module Ameba::Rule
|
||||||
|
|
||||||
it "returns false if source is not excluded from this rule" do
|
it "returns false if source is not excluded from this rule" do
|
||||||
rule = DummyRule.new
|
rule = DummyRule.new
|
||||||
rule.excluded = %w(some_source.cr)
|
rule.excluded = %w[some_source.cr]
|
||||||
rule.excluded?(Source.new "", "another_source.cr").should_not be_true
|
rule.excluded?(Source.new "", "another_source.cr").should_not be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns true if source is excluded from this rule" do
|
it "returns true if source is excluded from this rule" do
|
||||||
rule = DummyRule.new
|
rule = DummyRule.new
|
||||||
rule.excluded = %w(source.cr)
|
rule.excluded = %w[source.cr]
|
||||||
rule.excluded?(Source.new "", "source.cr").should be_true
|
rule.excluded?(Source.new "", "source.cr").should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns true if source matches the wildcard" do
|
it "returns true if source matches the wildcard" do
|
||||||
rule = DummyRule.new
|
rule = DummyRule.new
|
||||||
rule.excluded = %w(**/*.cr)
|
rule.excluded = %w[**/*.cr]
|
||||||
rule.excluded?(Source.new "", __FILE__).should be_true
|
rule.excluded?(Source.new "", __FILE__).should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns false if source does not match the wildcard" do
|
it "returns false if source does not match the wildcard" do
|
||||||
rule = DummyRule.new
|
rule = DummyRule.new
|
||||||
rule.excluded = %w(*_spec.cr)
|
rule.excluded = %w[*_spec.cr]
|
||||||
rule.excluded?(Source.new "", "source.cr").should be_false
|
rule.excluded?(Source.new "", "source.cr").should be_false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,27 +5,27 @@ module Ameba::Cli
|
||||||
describe "Cmd" do
|
describe "Cmd" do
|
||||||
describe ".run" do
|
describe ".run" do
|
||||||
it "runs ameba" do
|
it "runs ameba" do
|
||||||
r = Cli.run %w(-f silent -c spec/fixtures/config.yml spec/fixtures/source.cr)
|
r = Cli.run %w[-f silent -c spec/fixtures/config.yml spec/fixtures/source.cr]
|
||||||
r.should be_nil
|
r.should be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe ".parse_args" do
|
describe ".parse_args" do
|
||||||
%w(-s --silent).each do |flag|
|
%w[-s --silent].each do |flag|
|
||||||
it "accepts #{flag} flag" do
|
it "accepts #{flag} flag" do
|
||||||
c = Cli.parse_args [flag]
|
c = Cli.parse_args [flag]
|
||||||
c.formatter.should eq :silent
|
c.formatter.should eq :silent
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
%w(-c --config).each do |flag|
|
%w[-c --config].each do |flag|
|
||||||
it "accepts #{flag} flag" do
|
it "accepts #{flag} flag" do
|
||||||
c = Cli.parse_args [flag, "config.yml"]
|
c = Cli.parse_args [flag, "config.yml"]
|
||||||
c.config.should eq Path["config.yml"]
|
c.config.should eq Path["config.yml"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
%w(-f --format).each do |flag|
|
%w[-f --format].each do |flag|
|
||||||
it "accepts #{flag} flag" do
|
it "accepts #{flag} flag" do
|
||||||
c = Cli.parse_args [flag, "my-formatter"]
|
c = Cli.parse_args [flag, "my-formatter"]
|
||||||
c.formatter.should eq "my-formatter"
|
c.formatter.should eq "my-formatter"
|
||||||
|
@ -34,68 +34,68 @@ module Ameba::Cli
|
||||||
|
|
||||||
it "accepts --only flag" do
|
it "accepts --only flag" do
|
||||||
c = Cli.parse_args ["--only", "RULE1,RULE2"]
|
c = Cli.parse_args ["--only", "RULE1,RULE2"]
|
||||||
c.only.should eq %w(RULE1 RULE2)
|
c.only.should eq %w[RULE1 RULE2]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "accepts --except flag" do
|
it "accepts --except flag" do
|
||||||
c = Cli.parse_args ["--except", "RULE1,RULE2"]
|
c = Cli.parse_args ["--except", "RULE1,RULE2"]
|
||||||
c.except.should eq %w(RULE1 RULE2)
|
c.except.should eq %w[RULE1 RULE2]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "defaults rules? flag to false" do
|
it "defaults rules? flag to false" do
|
||||||
c = Cli.parse_args %w(spec/fixtures/source.cr)
|
c = Cli.parse_args %w[spec/fixtures/source.cr]
|
||||||
c.rules?.should be_false
|
c.rules?.should be_false
|
||||||
end
|
end
|
||||||
|
|
||||||
it "defaults skip_reading_config? flag to false" do
|
it "defaults skip_reading_config? flag to false" do
|
||||||
c = Cli.parse_args %w(spec/fixtures/source.cr)
|
c = Cli.parse_args %w[spec/fixtures/source.cr]
|
||||||
c.skip_reading_config?.should be_false
|
c.skip_reading_config?.should be_false
|
||||||
end
|
end
|
||||||
|
|
||||||
it "accepts --rules flag" do
|
it "accepts --rules flag" do
|
||||||
c = Cli.parse_args %w(--rules)
|
c = Cli.parse_args %w[--rules]
|
||||||
c.rules?.should eq true
|
c.rules?.should eq true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "defaults all? flag to false" do
|
it "defaults all? flag to false" do
|
||||||
c = Cli.parse_args %w(spec/fixtures/source.cr)
|
c = Cli.parse_args %w[spec/fixtures/source.cr]
|
||||||
c.all?.should be_false
|
c.all?.should be_false
|
||||||
end
|
end
|
||||||
|
|
||||||
it "accepts --all flag" do
|
it "accepts --all flag" do
|
||||||
c = Cli.parse_args %w(--all)
|
c = Cli.parse_args %w[--all]
|
||||||
c.all?.should eq true
|
c.all?.should eq true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "accepts --gen-config flag" do
|
it "accepts --gen-config flag" do
|
||||||
c = Cli.parse_args %w(--gen-config)
|
c = Cli.parse_args %w[--gen-config]
|
||||||
c.formatter.should eq :todo
|
c.formatter.should eq :todo
|
||||||
end
|
end
|
||||||
|
|
||||||
it "accepts --no-color flag" do
|
it "accepts --no-color flag" do
|
||||||
c = Cli.parse_args %w(--no-color)
|
c = Cli.parse_args %w[--no-color]
|
||||||
c.colors?.should be_false
|
c.colors?.should be_false
|
||||||
end
|
end
|
||||||
|
|
||||||
it "accepts --without-affected-code flag" do
|
it "accepts --without-affected-code flag" do
|
||||||
c = Cli.parse_args %w(--without-affected-code)
|
c = Cli.parse_args %w[--without-affected-code]
|
||||||
c.without_affected_code?.should be_true
|
c.without_affected_code?.should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't disable colors by default" do
|
it "doesn't disable colors by default" do
|
||||||
c = Cli.parse_args %w(--all)
|
c = Cli.parse_args %w[--all]
|
||||||
c.colors?.should be_true
|
c.colors?.should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "ignores --config if --gen-config flag passed" do
|
it "ignores --config if --gen-config flag passed" do
|
||||||
c = Cli.parse_args %w(--gen-config --config my_config.yml)
|
c = Cli.parse_args %w[--gen-config --config my_config.yml]
|
||||||
c.formatter.should eq :todo
|
c.formatter.should eq :todo
|
||||||
c.skip_reading_config?.should be_true
|
c.skip_reading_config?.should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "-e/--explain" do
|
describe "-e/--explain" do
|
||||||
it "configures file/line/column" do
|
it "configures file/line/column" do
|
||||||
c = Cli.parse_args %w(--explain spec/fixtures/source.cr:3:5)
|
c = Cli.parse_args %w[--explain spec/fixtures/source.cr:3:5]
|
||||||
|
|
||||||
location_to_explain = c.location_to_explain.should_not be_nil
|
location_to_explain = c.location_to_explain.should_not be_nil
|
||||||
location_to_explain[:file].should eq "spec/fixtures/source.cr"
|
location_to_explain[:file].should eq "spec/fixtures/source.cr"
|
||||||
|
@ -105,59 +105,59 @@ module Ameba::Cli
|
||||||
|
|
||||||
it "raises an error if location is not valid" do
|
it "raises an error if location is not valid" do
|
||||||
expect_raises(Exception, "location should have PATH:line:column") do
|
expect_raises(Exception, "location should have PATH:line:column") do
|
||||||
Cli.parse_args %w(--explain spec/fixtures/source.cr:3)
|
Cli.parse_args %w[--explain spec/fixtures/source.cr:3]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises an error if line number is not valid" do
|
it "raises an error if line number is not valid" do
|
||||||
expect_raises(Exception, "location should have PATH:line:column") do
|
expect_raises(Exception, "location should have PATH:line:column") do
|
||||||
Cli.parse_args %w(--explain spec/fixtures/source.cr:a:3)
|
Cli.parse_args %w[--explain spec/fixtures/source.cr:a:3]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises an error if column number is not valid" do
|
it "raises an error if column number is not valid" do
|
||||||
expect_raises(Exception, "location should have PATH:line:column") do
|
expect_raises(Exception, "location should have PATH:line:column") do
|
||||||
Cli.parse_args %w(--explain spec/fixtures/source.cr:3:&)
|
Cli.parse_args %w[--explain spec/fixtures/source.cr:3:&]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises an error if line/column are missing" do
|
it "raises an error if line/column are missing" do
|
||||||
expect_raises(Exception, "location should have PATH:line:column") do
|
expect_raises(Exception, "location should have PATH:line:column") do
|
||||||
Cli.parse_args %w(--explain spec/fixtures/source.cr)
|
Cli.parse_args %w[--explain spec/fixtures/source.cr]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "--fail-level" do
|
context "--fail-level" do
|
||||||
it "configures fail level Convention" do
|
it "configures fail level Convention" do
|
||||||
c = Cli.parse_args %w(--fail-level convention)
|
c = Cli.parse_args %w[--fail-level convention]
|
||||||
c.fail_level.should eq Severity::Convention
|
c.fail_level.should eq Severity::Convention
|
||||||
end
|
end
|
||||||
|
|
||||||
it "configures fail level Warning" do
|
it "configures fail level Warning" do
|
||||||
c = Cli.parse_args %w(--fail-level Warning)
|
c = Cli.parse_args %w[--fail-level Warning]
|
||||||
c.fail_level.should eq Severity::Warning
|
c.fail_level.should eq Severity::Warning
|
||||||
end
|
end
|
||||||
|
|
||||||
it "configures fail level Error" do
|
it "configures fail level Error" do
|
||||||
c = Cli.parse_args %w(--fail-level error)
|
c = Cli.parse_args %w[--fail-level error]
|
||||||
c.fail_level.should eq Severity::Error
|
c.fail_level.should eq Severity::Error
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises if fail level is incorrect" do
|
it "raises if fail level is incorrect" do
|
||||||
expect_raises(Exception, "Incorrect severity name JohnDoe") do
|
expect_raises(Exception, "Incorrect severity name JohnDoe") do
|
||||||
Cli.parse_args %w(--fail-level JohnDoe)
|
Cli.parse_args %w[--fail-level JohnDoe]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "accepts unknown args as globs" do
|
it "accepts unknown args as globs" do
|
||||||
c = Cli.parse_args %w(source1.cr source2.cr)
|
c = Cli.parse_args %w[source1.cr source2.cr]
|
||||||
c.globs.should eq %w(source1.cr source2.cr)
|
c.globs.should eq %w[source1.cr source2.cr]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "accepts one unknown arg as explain location if it has correct format" do
|
it "accepts one unknown arg as explain location if it has correct format" do
|
||||||
c = Cli.parse_args %w(source.cr:3:22)
|
c = Cli.parse_args %w[source.cr:3:22]
|
||||||
|
|
||||||
location_to_explain = c.location_to_explain.should_not be_nil
|
location_to_explain = c.location_to_explain.should_not be_nil
|
||||||
location_to_explain[:file].should eq "source.cr"
|
location_to_explain[:file].should eq "source.cr"
|
||||||
|
|
|
@ -32,7 +32,7 @@ module Ameba
|
||||||
Globs: src/*.cr
|
Globs: src/*.cr
|
||||||
CONFIG
|
CONFIG
|
||||||
config = Config.new(yml)
|
config = Config.new(yml)
|
||||||
config.globs.should eq %w(src/*.cr)
|
config.globs.should eq %w[src/*.cr]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "initializes globs as array" do
|
it "initializes globs as array" do
|
||||||
|
@ -43,7 +43,7 @@ module Ameba
|
||||||
- "!spec"
|
- "!spec"
|
||||||
CONFIG
|
CONFIG
|
||||||
config = Config.new(yml)
|
config = Config.new(yml)
|
||||||
config.globs.should eq %w(src/*.cr !spec)
|
config.globs.should eq %w[src/*.cr !spec]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises if Globs has a wrong type" do
|
it "raises if Globs has a wrong type" do
|
||||||
|
@ -62,7 +62,7 @@ module Ameba
|
||||||
Excluded: spec
|
Excluded: spec
|
||||||
CONFIG
|
CONFIG
|
||||||
config = Config.new(yml)
|
config = Config.new(yml)
|
||||||
config.excluded.should eq %w(spec)
|
config.excluded.should eq %w[spec]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "initializes excluded as array" do
|
it "initializes excluded as array" do
|
||||||
|
@ -73,7 +73,7 @@ module Ameba
|
||||||
- lib/*.cr
|
- lib/*.cr
|
||||||
CONFIG
|
CONFIG
|
||||||
config = Config.new(yml)
|
config = Config.new(yml)
|
||||||
config.excluded.should eq %w(spec lib/*.cr)
|
config.excluded.should eq %w[spec lib/*.cr]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises if Excluded has a wrong type" do
|
it "raises if Excluded has a wrong type" do
|
||||||
|
@ -145,12 +145,12 @@ module Ameba
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns a list of sources matching globs" do
|
it "returns a list of sources matching globs" do
|
||||||
config.globs = %w(**/config_spec.cr)
|
config.globs = %w[**/config_spec.cr]
|
||||||
config.sources.size.should eq(1)
|
config.sources.size.should eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns a list of sources excluding 'Excluded'" do
|
it "returns a list of sources excluding 'Excluded'" do
|
||||||
config.excluded = %w(**/config_spec.cr)
|
config.excluded = %w[**/config_spec.cr]
|
||||||
config.sources.any?(&.fullpath.==(__FILE__)).should be_false
|
config.sources.any?(&.fullpath.==(__FILE__)).should be_false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -192,7 +192,7 @@ module Ameba
|
||||||
|
|
||||||
it "updates excluded property" do
|
it "updates excluded property" do
|
||||||
name = DummyRule.rule_name
|
name = DummyRule.rule_name
|
||||||
excluded = %w(spec/source.cr)
|
excluded = %w[spec/source.cr]
|
||||||
config.update_rule name, excluded: excluded
|
config.update_rule name, excluded: excluded
|
||||||
rule = config.rules.find!(&.name.== name)
|
rule = config.rules.find!(&.name.== name)
|
||||||
rule.excluded.should eq excluded
|
rule.excluded.should eq excluded
|
||||||
|
@ -211,7 +211,7 @@ module Ameba
|
||||||
|
|
||||||
it "updates multiple rules by excluded property" do
|
it "updates multiple rules by excluded property" do
|
||||||
name = DummyRule.rule_name
|
name = DummyRule.rule_name
|
||||||
excluded = %w(spec/source.cr)
|
excluded = %w[spec/source.cr]
|
||||||
config.update_rules [name], excluded: excluded
|
config.update_rules [name], excluded: excluded
|
||||||
rule = config.rules.find!(&.name.== name)
|
rule = config.rules.find!(&.name.== name)
|
||||||
rule.excluded.should eq excluded
|
rule.excluded.should eq excluded
|
||||||
|
@ -226,7 +226,7 @@ module Ameba
|
||||||
|
|
||||||
it "updates a group by excluded property" do
|
it "updates a group by excluded property" do
|
||||||
name = DummyRule.group_name
|
name = DummyRule.group_name
|
||||||
excluded = %w(spec/source.cr)
|
excluded = %w[spec/source.cr]
|
||||||
config.update_rules [name], excluded: excluded
|
config.update_rules [name], excluded: excluded
|
||||||
rule = config.rules.find!(&.name.== DummyRule.rule_name)
|
rule = config.rules.find!(&.name.== DummyRule.rule_name)
|
||||||
rule.excluded.should eq excluded
|
rule.excluded.should eq excluded
|
||||||
|
|
|
@ -6,41 +6,41 @@ module Ameba::Rule::Lint
|
||||||
|
|
||||||
it "passes if percent arrays are written correctly" do
|
it "passes if percent arrays are written correctly" do
|
||||||
s = Source.new %q(
|
s = Source.new %q(
|
||||||
%i(one two three)
|
%i[one two three]
|
||||||
%w(one two three)
|
%w[one two three]
|
||||||
|
|
||||||
%i(1 2 3)
|
%i[1 2 3]
|
||||||
%w(1 2 3)
|
%w[1 2 3]
|
||||||
|
|
||||||
%i()
|
%i[]
|
||||||
%w()
|
%w[]
|
||||||
)
|
)
|
||||||
subject.catch(s).should be_valid
|
subject.catch(s).should be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it "fails if string percent array has commas" do
|
it "fails if string percent array has commas" do
|
||||||
s = Source.new %( %w(one, two) )
|
s = Source.new %( %w[one, two] )
|
||||||
subject.catch(s).should_not be_valid
|
subject.catch(s).should_not be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it "fails if string percent array has quotes" do
|
it "fails if string percent array has quotes" do
|
||||||
s = Source.new %( %w("one" "two") )
|
s = Source.new %( %w["one" "two"] )
|
||||||
subject.catch(s).should_not be_valid
|
subject.catch(s).should_not be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it "fails if symbols percent array has commas" do
|
it "fails if symbols percent array has commas" do
|
||||||
s = Source.new %( %i(one, two) )
|
s = Source.new %( %i[one, two] )
|
||||||
subject.catch(s).should_not be_valid
|
subject.catch(s).should_not be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it "fails if symbols percent array has a colon" do
|
it "fails if symbols percent array has a colon" do
|
||||||
s = Source.new %( %i(:one :two) )
|
s = Source.new %( %i[:one :two] )
|
||||||
subject.catch(s).should_not be_valid
|
subject.catch(s).should_not be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it "reports rule, location and message for %i" do
|
it "reports rule, location and message for %i" do
|
||||||
s = Source.new %(
|
s = Source.new %(
|
||||||
%i(:one)
|
%i[:one]
|
||||||
), "source.cr"
|
), "source.cr"
|
||||||
|
|
||||||
subject.catch(s).should_not be_valid
|
subject.catch(s).should_not be_valid
|
||||||
|
@ -54,7 +54,7 @@ module Ameba::Rule::Lint
|
||||||
|
|
||||||
it "reports rule, location and message for %w" do
|
it "reports rule, location and message for %w" do
|
||||||
s = Source.new %(
|
s = Source.new %(
|
||||||
%w("one")
|
%w["one"]
|
||||||
), "source.cr"
|
), "source.cr"
|
||||||
|
|
||||||
subject.catch(s).should_not be_valid
|
subject.catch(s).should_not be_valid
|
||||||
|
@ -71,14 +71,14 @@ module Ameba::Rule::Lint
|
||||||
it "#string_array_unwanted_symbols" do
|
it "#string_array_unwanted_symbols" do
|
||||||
rule = PercentArrays.new
|
rule = PercentArrays.new
|
||||||
rule.string_array_unwanted_symbols = ","
|
rule.string_array_unwanted_symbols = ","
|
||||||
s = Source.new %( %w("one") )
|
s = Source.new %( %w["one"] )
|
||||||
rule.catch(s).should be_valid
|
rule.catch(s).should be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it "#symbol_array_unwanted_symbols" do
|
it "#symbol_array_unwanted_symbols" do
|
||||||
rule = PercentArrays.new
|
rule = PercentArrays.new
|
||||||
rule.symbol_array_unwanted_symbols = ","
|
rule.symbol_array_unwanted_symbols = ","
|
||||||
s = Source.new %( %i(:one) )
|
s = Source.new %( %i[:one] )
|
||||||
rule.catch(s).should be_valid
|
rule.catch(s).should be_valid
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -977,7 +977,7 @@ module Ameba::Rule::Lint
|
||||||
s = Source.new %(
|
s = Source.new %(
|
||||||
foo = 22
|
foo = 22
|
||||||
|
|
||||||
{% for x in %w(foo) %}
|
{% for x in %w[foo] %}
|
||||||
add({{ x.id }})
|
add({{ x.id }})
|
||||||
{% end %}
|
{% end %}
|
||||||
)
|
)
|
||||||
|
@ -988,7 +988,7 @@ module Ameba::Rule::Lint
|
||||||
s = Source.new %(
|
s = Source.new %(
|
||||||
foo = 22
|
foo = 22
|
||||||
|
|
||||||
{% for x in %w(bar) %}
|
{% for x in %w[bar] %}
|
||||||
puts {{ "foo".id }}
|
puts {{ "foo".id }}
|
||||||
{% end %}
|
{% end %}
|
||||||
)
|
)
|
||||||
|
|
|
@ -48,7 +48,7 @@ module Ameba::Rule::Performance
|
||||||
context "properties" do
|
context "properties" do
|
||||||
it "#filter_names" do
|
it "#filter_names" do
|
||||||
rule = AnyAfterFilter.new
|
rule = AnyAfterFilter.new
|
||||||
rule.filter_names = %w(select)
|
rule.filter_names = %w[select]
|
||||||
|
|
||||||
expect_no_issues rule, <<-CRYSTAL
|
expect_no_issues rule, <<-CRYSTAL
|
||||||
[1, 2, 3].reject { |e| e > 2 }.any?
|
[1, 2, 3].reject { |e| e > 2 }.any?
|
||||||
|
|
|
@ -46,7 +46,7 @@ module Ameba::Rule::Performance
|
||||||
context "properties" do
|
context "properties" do
|
||||||
it "#call_names" do
|
it "#call_names" do
|
||||||
rule = ChainedCallWithNoBang.new
|
rule = ChainedCallWithNoBang.new
|
||||||
rule.call_names = %w(uniq)
|
rule.call_names = %w[uniq]
|
||||||
|
|
||||||
expect_no_issues rule, <<-CRYSTAL
|
expect_no_issues rule, <<-CRYSTAL
|
||||||
[1, 2, 3].select { |e| e > 2 }.reverse
|
[1, 2, 3].select { |e| e > 2 }.reverse
|
||||||
|
|
|
@ -64,7 +64,7 @@ module Ameba::Rule::Performance
|
||||||
context "properties" do
|
context "properties" do
|
||||||
it "#filter_names" do
|
it "#filter_names" do
|
||||||
rule = FirstLastAfterFilter.new
|
rule = FirstLastAfterFilter.new
|
||||||
rule.filter_names = %w(reject)
|
rule.filter_names = %w[reject]
|
||||||
|
|
||||||
expect_no_issues rule, <<-CRYSTAL
|
expect_no_issues rule, <<-CRYSTAL
|
||||||
[1, 2, 3].select { |e| e > 2 }.first
|
[1, 2, 3].select { |e| e > 2 }.first
|
||||||
|
|
|
@ -46,7 +46,7 @@ module Ameba::Rule::Performance
|
||||||
context "properties" do
|
context "properties" do
|
||||||
it "#filter_names" do
|
it "#filter_names" do
|
||||||
rule = SizeAfterFilter.new
|
rule = SizeAfterFilter.new
|
||||||
rule.filter_names = %w(select)
|
rule.filter_names = %w[select]
|
||||||
|
|
||||||
expect_no_issues rule, <<-CRYSTAL
|
expect_no_issues rule, <<-CRYSTAL
|
||||||
[1, 2, 3].reject(&.empty?).size
|
[1, 2, 3].reject(&.empty?).size
|
||||||
|
|
|
@ -44,7 +44,7 @@ module Ameba::Rule::Style
|
||||||
context "properties" do
|
context "properties" do
|
||||||
it "#filter_names" do
|
it "#filter_names" do
|
||||||
rule = IsAFilter.new
|
rule = IsAFilter.new
|
||||||
rule.filter_names = %w(select)
|
rule.filter_names = %w[select]
|
||||||
|
|
||||||
expect_no_issues rule, <<-CRYSTAL
|
expect_no_issues rule, <<-CRYSTAL
|
||||||
[1, 2, nil].reject(&.nil?)
|
[1, 2, nil].reject(&.nil?)
|
||||||
|
|
|
@ -4,7 +4,7 @@ module Ameba::Rule::Style
|
||||||
subject = ParenthesesAroundCondition.new
|
subject = ParenthesesAroundCondition.new
|
||||||
|
|
||||||
describe ParenthesesAroundCondition do
|
describe ParenthesesAroundCondition do
|
||||||
{% for keyword in %w(if unless while until) %}
|
{% for keyword in %w[if unless while until] %}
|
||||||
context "{{ keyword.id }}" do
|
context "{{ keyword.id }}" do
|
||||||
it "reports if redundant parentheses are found" do
|
it "reports if redundant parentheses are found" do
|
||||||
source = expect_issue subject, <<-CRYSTAL, keyword: {{ keyword }}
|
source = expect_issue subject, <<-CRYSTAL, keyword: {{ keyword }}
|
||||||
|
|
|
@ -22,11 +22,11 @@ module Ameba
|
||||||
DELIMITER_START STRING INTERPOLATION_START NUMBER } DELIMITER_END EOF
|
DELIMITER_START STRING INTERPOLATION_START NUMBER } DELIMITER_END EOF
|
||||||
)
|
)
|
||||||
|
|
||||||
it_tokenizes %(%w(1 2)),
|
it_tokenizes %(%w[1 2]),
|
||||||
%w(STRING_ARRAY_START STRING STRING STRING_ARRAY_END EOF)
|
%w[STRING_ARRAY_START STRING STRING STRING_ARRAY_END EOF]
|
||||||
|
|
||||||
it_tokenizes %(%i(one two)),
|
it_tokenizes %(%i[one two]),
|
||||||
%w(SYMBOL_ARRAY_START STRING STRING STRING_ARRAY_END EOF)
|
%w[SYMBOL_ARRAY_START STRING STRING STRING_ARRAY_END EOF]
|
||||||
|
|
||||||
it_tokenizes %(
|
it_tokenizes %(
|
||||||
class A
|
class A
|
||||||
|
@ -34,11 +34,11 @@ module Ameba
|
||||||
puts "hello"
|
puts "hello"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
), %w(
|
), %w[
|
||||||
NEWLINE SPACE IDENT SPACE CONST NEWLINE SPACE IDENT SPACE IDENT
|
NEWLINE SPACE IDENT SPACE CONST NEWLINE SPACE IDENT SPACE IDENT
|
||||||
NEWLINE SPACE IDENT SPACE DELIMITER_START STRING DELIMITER_END
|
NEWLINE SPACE IDENT SPACE DELIMITER_START STRING DELIMITER_END
|
||||||
NEWLINE SPACE IDENT NEWLINE SPACE IDENT NEWLINE SPACE EOF
|
NEWLINE SPACE IDENT NEWLINE SPACE IDENT NEWLINE SPACE EOF
|
||||||
)
|
]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,7 +24,7 @@ module Ameba::AST
|
||||||
# Uses the same logic than rubocop. See
|
# Uses the same logic than rubocop. See
|
||||||
# https://github.com/rubocop-hq/rubocop/blob/master/lib/rubocop/cop/metrics/cyclomatic_complexity.rb#L21
|
# https://github.com/rubocop-hq/rubocop/blob/master/lib/rubocop/cop/metrics/cyclomatic_complexity.rb#L21
|
||||||
# Except "for", because crystal doesn't have a "for" loop.
|
# Except "for", because crystal doesn't have a "for" loop.
|
||||||
{% for node in %i(if while until rescue or and) %}
|
{% for node in %i[if while until rescue or and] %}
|
||||||
# :nodoc:
|
# :nodoc:
|
||||||
def visit(node : Crystal::{{ node.id.capitalize }})
|
def visit(node : Crystal::{{ node.id.capitalize }})
|
||||||
@complexity += 1 unless macro_condition?
|
@complexity += 1 unless macro_condition?
|
||||||
|
|
|
@ -200,13 +200,13 @@ class Ameba::Config
|
||||||
#
|
#
|
||||||
# ```
|
# ```
|
||||||
# config = Ameba::Config.load
|
# config = Ameba::Config.load
|
||||||
# config.update_rules %w(Rule1 Rule2), enabled: true
|
# config.update_rules %w[Rule1 Rule2], enabled: true
|
||||||
# ```
|
# ```
|
||||||
#
|
#
|
||||||
# also it allows to update groups of rules:
|
# also it allows to update groups of rules:
|
||||||
#
|
#
|
||||||
# ```
|
# ```
|
||||||
# config.update_rules %w(Group1 Group2), enabled: true
|
# config.update_rules %w[Group1 Group2], enabled: true
|
||||||
# ```
|
# ```
|
||||||
def update_rules(names, enabled = true, excluded = nil)
|
def update_rules(names, enabled = true, excluded = nil)
|
||||||
names.try &.each do |name|
|
names.try &.each do |name|
|
||||||
|
|
|
@ -28,7 +28,7 @@ module Ameba::Rule::Lint
|
||||||
end
|
end
|
||||||
|
|
||||||
MSG = "Comparison to a boolean is pointless"
|
MSG = "Comparison to a boolean is pointless"
|
||||||
OP_NAMES = %w(== != ===)
|
OP_NAMES = %w[== != ===]
|
||||||
|
|
||||||
def test(source, node : Crystal::Call)
|
def test(source, node : Crystal::Call)
|
||||||
return unless node.name.in?(OP_NAMES)
|
return unless node.name.in?(OP_NAMES)
|
||||||
|
|
|
@ -18,7 +18,7 @@ module Ameba::Rule::Lint
|
||||||
class DebugCalls < Base
|
class DebugCalls < Base
|
||||||
properties do
|
properties do
|
||||||
description "Disallows debug-related calls"
|
description "Disallows debug-related calls"
|
||||||
method_names %w(p p! pp pp!)
|
method_names %w[p p! pp pp!]
|
||||||
end
|
end
|
||||||
|
|
||||||
MSG = "Possibly forgotten debug-related `%s` call detected"
|
MSG = "Possibly forgotten debug-related `%s` call detected"
|
||||||
|
|
|
@ -23,7 +23,7 @@ module Ameba::Rule::Lint
|
||||||
description "Identifies comparisons between literals"
|
description "Identifies comparisons between literals"
|
||||||
end
|
end
|
||||||
|
|
||||||
OP_NAMES = %w(=== == !=)
|
OP_NAMES = %w[=== == !=]
|
||||||
|
|
||||||
MSG = "Comparison always evaluates to %s"
|
MSG = "Comparison always evaluates to %s"
|
||||||
MSG_LIKELY = "Comparison most likely evaluates to %s"
|
MSG_LIKELY = "Comparison most likely evaluates to %s"
|
||||||
|
|
|
@ -29,8 +29,8 @@ module Ameba::Rule::Lint
|
||||||
|
|
||||||
MSG = "Use `%s! {...}` instead of `%s {...}.not_nil!`"
|
MSG = "Use `%s! {...}` instead of `%s {...}.not_nil!`"
|
||||||
|
|
||||||
BLOCK_CALL_NAMES = %w(index rindex find)
|
BLOCK_CALL_NAMES = %w[index rindex find]
|
||||||
CALL_NAMES = %w(index rindex match)
|
CALL_NAMES = %w[index rindex match]
|
||||||
|
|
||||||
def test(source)
|
def test(source)
|
||||||
AST::NodeVisitor.new self, source, skip: :macro
|
AST::NodeVisitor.new self, source, skip: :macro
|
||||||
|
|
|
@ -4,15 +4,15 @@ module Ameba::Rule::Lint
|
||||||
# For example, this is usually written by mistake:
|
# For example, this is usually written by mistake:
|
||||||
#
|
#
|
||||||
# ```
|
# ```
|
||||||
# %i(:one, :two)
|
# %i[:one, :two]
|
||||||
# %w("one", "two")
|
# %w["one", "two"]
|
||||||
# ```
|
# ```
|
||||||
#
|
#
|
||||||
# And the expected example is:
|
# And the expected example is:
|
||||||
#
|
#
|
||||||
# ```
|
# ```
|
||||||
# %i(one two)
|
# %i[one two]
|
||||||
# %w(one two)
|
# %w[one two]
|
||||||
# ```
|
# ```
|
||||||
#
|
#
|
||||||
# YAML configuration example:
|
# YAML configuration example:
|
||||||
|
|
|
@ -50,7 +50,8 @@ module Ameba::Rule::Lint
|
||||||
end
|
end
|
||||||
|
|
||||||
MSG = "Focused spec item detected"
|
MSG = "Focused spec item detected"
|
||||||
SPEC_ITEM_NAMES = %w(describe context it pending)
|
|
||||||
|
SPEC_ITEM_NAMES = %w[describe context it pending]
|
||||||
|
|
||||||
def test(source)
|
def test(source)
|
||||||
return unless source.spec?
|
return unless source.spec?
|
||||||
|
|
|
@ -31,7 +31,7 @@ module Ameba::Rule::Performance
|
||||||
|
|
||||||
properties do
|
properties do
|
||||||
description "Identifies usage of `any?` calls that follow filters"
|
description "Identifies usage of `any?` calls that follow filters"
|
||||||
filter_names %w(select reject)
|
filter_names %w[select reject]
|
||||||
end
|
end
|
||||||
|
|
||||||
MSG = "Use `any? {...}` instead of `%s {...}.any?`"
|
MSG = "Use `any? {...}` instead of `%s {...}.any?`"
|
||||||
|
|
|
@ -45,18 +45,18 @@ module Ameba::Rule::Performance
|
||||||
# All of those have bang method variants returning `self`
|
# All of those have bang method variants returning `self`
|
||||||
# and are not modifying the receiver type (like `compact` does),
|
# and are not modifying the receiver type (like `compact` does),
|
||||||
# thus are safe to switch to the bang variant.
|
# thus are safe to switch to the bang variant.
|
||||||
call_names %w(uniq sort sort_by shuffle reverse)
|
call_names %w[uniq sort sort_by shuffle reverse]
|
||||||
end
|
end
|
||||||
|
|
||||||
MSG = "Use bang method variant `%s!` after chained `%s` call"
|
MSG = "Use bang method variant `%s!` after chained `%s` call"
|
||||||
|
|
||||||
# All these methods allocate a new object
|
# All these methods allocate a new object
|
||||||
ALLOCATING_METHOD_NAMES = %w(
|
ALLOCATING_METHOD_NAMES = %w[
|
||||||
keys values values_at map map_with_index flat_map compact_map
|
keys values values_at map map_with_index flat_map compact_map
|
||||||
flatten compact select reject sample group_by chunks tally merge
|
flatten compact select reject sample group_by chunks tally merge
|
||||||
combinations repeated_combinations permutations repeated_permutations
|
combinations repeated_combinations permutations repeated_permutations
|
||||||
transpose invert chars captures named_captures clone
|
transpose invert chars captures named_captures clone
|
||||||
)
|
]
|
||||||
|
|
||||||
def test(source)
|
def test(source)
|
||||||
AST::NodeVisitor.new self, source, skip: :macro
|
AST::NodeVisitor.new self, source, skip: :macro
|
||||||
|
|
|
@ -30,13 +30,14 @@ module Ameba::Rule::Performance
|
||||||
|
|
||||||
properties do
|
properties do
|
||||||
description "Identifies usage of `first/last/first?/last?` calls that follow filters"
|
description "Identifies usage of `first/last/first?/last?` calls that follow filters"
|
||||||
filter_names %w(select)
|
filter_names %w[select]
|
||||||
end
|
end
|
||||||
|
|
||||||
CALL_NAMES = %w(first last first? last?)
|
|
||||||
MSG = "Use `find {...}` instead of `%s {...}.%s`"
|
MSG = "Use `find {...}` instead of `%s {...}.%s`"
|
||||||
MSG_REVERSE = "Use `reverse_each.find {...}` instead of `%s {...}.%s`"
|
MSG_REVERSE = "Use `reverse_each.find {...}` instead of `%s {...}.%s`"
|
||||||
|
|
||||||
|
CALL_NAMES = %w[first last first? last?]
|
||||||
|
|
||||||
def test(source)
|
def test(source)
|
||||||
AST::NodeVisitor.new self, source, skip: :macro
|
AST::NodeVisitor.new self, source, skip: :macro
|
||||||
end
|
end
|
||||||
|
|
|
@ -31,7 +31,7 @@ module Ameba::Rule::Performance
|
||||||
|
|
||||||
MSG = "Use `%s {...}` instead of `map {...}.%s`"
|
MSG = "Use `%s {...}` instead of `map {...}.%s`"
|
||||||
|
|
||||||
CALL_NAMES = %w(sum product)
|
CALL_NAMES = %w[sum product]
|
||||||
|
|
||||||
def test(source)
|
def test(source)
|
||||||
AST::NodeVisitor.new self, source, skip: :macro
|
AST::NodeVisitor.new self, source, skip: :macro
|
||||||
|
|
|
@ -37,7 +37,7 @@ module Ameba::Rule::Performance
|
||||||
|
|
||||||
properties do
|
properties do
|
||||||
description "Identifies usage of `size` calls that follow filter"
|
description "Identifies usage of `size` calls that follow filter"
|
||||||
filter_names %w(select reject)
|
filter_names %w[select reject]
|
||||||
end
|
end
|
||||||
|
|
||||||
MSG = "Use `count {...}` instead of `%s {...}.size`."
|
MSG = "Use `count {...}` instead of `%s {...}.size`."
|
||||||
|
|
|
@ -43,7 +43,7 @@ module Ameba::Rule::Style
|
||||||
|
|
||||||
properties do
|
properties do
|
||||||
description "Identifies usage of `is_a?/nil?` calls within filters"
|
description "Identifies usage of `is_a?/nil?` calls within filters"
|
||||||
filter_names %w(select reject any? all? none? one?)
|
filter_names %w[select reject any? all? none? one?]
|
||||||
end
|
end
|
||||||
|
|
||||||
MSG = "Use `%s` instead of `%s`"
|
MSG = "Use `%s` instead of `%s`"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue