Add rule namespaces: style, lint, layout (#63)

This commit is contained in:
V. Elenhaupt 2018-06-16 14:50:59 +03:00 committed by GitHub
parent d9f04af057
commit 4cb5328513
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
71 changed files with 128 additions and 128 deletions

View File

@ -35,10 +35,10 @@ Inspecting 107 files.
...............F.....................F....................................................................
src/ameba/rule/unneeded_disable_directive.cr:29:7
UselessAssign: Useless assignment to variable `s`
Lint/UselessAssign: Useless assignment to variable `s`
src/ameba/formatter/flycheck_formatter.cr:5:21
UnusedArgument: Unused argument `location`
Lint/UnusedArgument: Unused argument `location`
Finished in 248.9 milliseconds
@ -102,10 +102,10 @@ Generate new file by running `ameba --gen-config`.
One or more rules can be disabled using inline directives:
```crystal
# ameba:disable LargeNumbers
# ameba:disable Style/LargeNumbers
time = Time.epoch(1483859302)
time = Time.epoch(1483859302) # ameba:disable LargeNumbers
time = Time.epoch(1483859302) # ameba:disable Style/LargeNumbers
```
## Editor integration

View File

@ -21,8 +21,8 @@ module Ameba::Formatter
end
subject.finished [s]
log = output.to_s
log.should contain "#{path}:1 #{ErrorRule.name}"
log.should contain "#{path}:2 #{NamedRule.name}"
log.should contain "#{path}:1 #{ErrorRule.rule_name}"
log.should contain "#{path}:2 #{NamedRule.rule_name}"
ensure
output.clear
Colorize.enabled = true
@ -35,7 +35,7 @@ module Ameba::Formatter
message: "NamedRule", status: :disabled)
end
subject.finished [s]
output.to_s.should_not contain ErrorRule.name
output.to_s.should_not contain ErrorRule.rule_name
end
end
end

View File

@ -22,7 +22,7 @@ module Ameba::Formatter
subject = flycheck
subject.source_finished s
subject.output.to_s.should eq(
"source.cr:1:2: E: [#{DummyRule.name}] message\n"
"source.cr:1:2: E: [#{DummyRule.rule_name}] message\n"
)
end
@ -32,7 +32,7 @@ module Ameba::Formatter
subject = flycheck
subject.source_finished s
subject.output.to_s.should eq(
"source.cr:1:2: E: [#{DummyRule.name}] multi line\n"
"source.cr:1:2: E: [#{DummyRule.rule_name}] multi line\n"
)
end

View File

@ -34,7 +34,7 @@ module Ameba
s.add_issue DummyRule.new, {1, 2}, "message1"
result = get_result [s]
result["sources"][0]["issues"][0]["rule_name"].should eq DummyRule.name
result["sources"][0]["issues"][0]["rule_name"].should eq DummyRule.rule_name
end
it "shows a message" do

View File

@ -57,7 +57,7 @@ module Ameba
formatter = Formatter::TODOFormatter.new IO::Memory.new, file
s = Source.new "def invalid_syntax"
s.add_issue Rule::Syntax.new, {1, 2}, "message"
s.add_issue Rule::Lint::Syntax.new, {1, 2}, "message"
formatter.finished [s]
content = file.to_s

View File

@ -11,7 +11,7 @@ module Ameba
describe "#name" do
it "returns name of the rule" do
DummyRule.new.name.should eq "Ameba::DummyRule"
DummyRule.new.name.should eq "Ameba/DummyRule"
end
end
end

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Layout
subject = LineLength.new
long_line = "*" * 81

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Layout
subject = TrailingBlankLines.new
describe TrailingBlankLines do

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Layout
subject = TrailingWhitespace.new
describe TrailingWhitespace do

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Lint
subject = ComparisonToBoolean.new
describe ComparisonToBoolean do

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Lint
subject = DebuggerStatement.new
describe DebuggerStatement do

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Lint
describe EmptyEnsure do
subject = EmptyEnsure.new

View File

@ -1,17 +1,17 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba
subject = Rule::EmptyExpression.new
subject = Rule::Lint::EmptyExpression.new
def it_detects_empty_expression(code)
it "detects empty expression" do
s = Source.new code
rule = Rule::EmptyExpression.new
rule = Rule::Lint::EmptyExpression.new
rule.catch(s).should_not be_valid
end
end
describe Rule::EmptyExpression do
describe Rule::Lint::EmptyExpression do
it "passes if there is no empty expression" do
s = Source.new %(
def method()

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Lint
describe HashDuplicatedKey do
subject = HashDuplicatedKey.new

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Lint
subject = LiteralInCondition.new
describe LiteralInCondition do

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Lint
subject = LiteralInInterpolation.new
describe LiteralInInterpolation do

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Lint
describe PercentArrays do
subject = PercentArrays.new

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Lint
describe RandZero do
subject = RandZero.new

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Lint
describe ShadowedArgument do
subject = ShadowedArgument.new

View File

@ -1,12 +1,12 @@
require "../../spec_helper"
require "../../../spec_helper"
private def check_shadowed(source, exceptions)
s = Ameba::Source.new source
Ameba::Rule::ShadowedException.new.catch(s).should_not be_valid
Ameba::Rule::Lint::ShadowedException.new.catch(s).should_not be_valid
s.issues.first.message.should contain exceptions.join(", ")
end
module Ameba::Rule
module Ameba::Rule::Lint
describe ShadowedException do
subject = ShadowedException.new

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Lint
describe ShadowingOuterLocalVar do
subject = ShadowingOuterLocalVar.new

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Lint
describe Syntax do
subject = Syntax.new

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Lint
describe UnneededDisableDirective do
subject = UnneededDisableDirective.new

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Lint
subject = UnusedArgument.new
subject.ignore_defs = false

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Lint
describe UselessAssign do
subject = UselessAssign.new

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Lint
subject = UselessConditionInWhen.new
describe UselessConditionInWhen do

View File

@ -1,17 +1,17 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba
subject = Rule::ConstantNames.new
subject = Rule::Style::ConstantNames.new
private def it_reports_constant(code, expected)
it "reports constant name #{expected}" do
s = Source.new code
Rule::ConstantNames.new.catch(s).should_not be_valid
Rule::Style::ConstantNames.new.catch(s).should_not be_valid
s.issues.first.message.should contain expected
end
end
describe Rule::ConstantNames do
describe Rule::Style::ConstantNames do
it "passes if type names are screaming-cased" do
s = Source.new %(
LUCKY_NUMBERS = [3, 7, 11]

View File

@ -1,17 +1,17 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba
subject = Rule::LargeNumbers.new
subject = Rule::Style::LargeNumbers.new
private def it_transforms(number, expected)
it "transforms large number #{number}" do
s = Source.new number
Rule::LargeNumbers.new.catch(s).should_not be_valid
Rule::Style::LargeNumbers.new.catch(s).should_not be_valid
s.issues.first.message.should contain expected
end
end
describe Rule::LargeNumbers do
describe Rule::Style::LargeNumbers do
it "passes if large number does not require underscore" do
s = Source.new %q(
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@ -124,7 +124,7 @@ module Ameba
context "properties" do
it "allows to configure integer min digits" do
s = Source.new %q(1200000)
rule = Rule::LargeNumbers.new
rule = Rule::Style::LargeNumbers.new
rule.int_min_digits = 10
rule.catch(s).should be_valid
end

View File

@ -1,17 +1,17 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba
subject = Rule::MethodNames.new
subject = Rule::Style::MethodNames.new
private def it_reports_method_name(code, expected)
it "reports method name #{expected}" do
s = Source.new code
Rule::MethodNames.new.catch(s).should_not be_valid
Rule::Style::MethodNames.new.catch(s).should_not be_valid
s.issues.first.message.should contain expected
end
end
describe Rule::MethodNames do
describe Rule::Style::MethodNames do
it "passes if method names are underscore-cased" do
s = Source.new %(
class Person

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Style
subject = NegatedConditionsInUnless.new
describe NegatedConditionsInUnless do

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Style
subject = PredicateName.new
describe PredicateName do

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Style
describe RedundantBegin do
subject = RedundantBegin.new

View File

@ -1,17 +1,17 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba
subject = Rule::TypeNames.new
subject = Rule::Style::TypeNames.new
private def it_reports_name(code, expected)
it "reports type name #{expected}" do
s = Source.new code
Rule::TypeNames.new.catch(s).should_not be_valid
Rule::Style::TypeNames.new.catch(s).should_not be_valid
s.issues.first.message.should contain expected
end
end
describe Rule::TypeNames do
describe Rule::Style::TypeNames do
it "passes if type names are camelcased" do
s = Source.new %(
class ParseError < Exception

View File

@ -1,6 +1,6 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba::Rule
module Ameba::Rule::Style
subject = UnlessElse.new
describe UnlessElse do

View File

@ -1,17 +1,17 @@
require "../../spec_helper"
require "../../../spec_helper"
module Ameba
subject = Rule::VariableNames.new
subject = Rule::Style::VariableNames.new
private def it_reports_var_name(code, expected)
it "reports method name #{expected}" do
s = Source.new code
Rule::VariableNames.new.catch(s).should_not be_valid
Rule::Style::VariableNames.new.catch(s).should_not be_valid
s.issues.first.message.should contain expected
end
end
describe Rule::VariableNames do
describe Rule::Style::VariableNames do
it "passes if var names are underscore-cased" do
s = Source.new %(
class Greeting

View File

@ -1,4 +1,4 @@
require "../../spec_helper"
require "../../../spec_helper"
valid_source = <<-EOF
a = 1
@ -16,7 +16,7 @@ while true
end
EOF
module Ameba::Rule
module Ameba::Rule::Style
subject = WhileTrue.new
describe WhileTrue do

View File

@ -54,16 +54,16 @@ module Ameba
context "invalid syntax" do
it "reports a syntax error" do
rules = [Rule::Syntax.new] of Rule::Base
rules = [Rule::Lint::Syntax.new] of Rule::Base
source = Source.new "def bad_syntax"
Runner.new(rules, [source], formatter).run
source.should_not be_valid
source.issues.first.rule.name.should eq Rule::Syntax.rule_name
source.issues.first.rule.name.should eq Rule::Lint::Syntax.rule_name
end
it "does not run other rules" do
rules = [Rule::Syntax.new, Rule::ConstantNames.new] of Rule::Base
rules = [Rule::Lint::Syntax.new, Rule::Style::ConstantNames.new] of Rule::Base
source = Source.new %q(
MyBadConstant = 1
@ -78,14 +78,14 @@ module Ameba
context "unneeded disables" do
it "reports an issue if such disable exists" do
rules = [Rule::UnneededDisableDirective.new] of Rule::Base
rules = [Rule::Lint::UnneededDisableDirective.new] of Rule::Base
source = Source.new %(
a = 1 # ameba:disable LineLength
)
Runner.new(rules, [source], formatter).run
source.should_not be_valid
source.issues.first.rule.name.should eq Rule::UnneededDisableDirective.rule_name
source.issues.first.rule.name.should eq Rule::Lint::UnneededDisableDirective.rule_name
end
end
end

View File

@ -1,6 +1,6 @@
require "./ameba/*"
require "./ameba/ast/**"
require "./ameba/rule/*"
require "./ameba/rule/**"
require "./ameba/formatter/*"
require "./ameba/support/*"

View File

@ -31,7 +31,7 @@ module Ameba::Formatter
private def rule_issues_map(issues)
Hash(Rule::Base, Array(Issue)).new.tap do |h|
issues.each do |issue|
next if issue.disabled? || issue.rule.is_a? Rule::Syntax
next if issue.disabled? || issue.rule.is_a? Rule::Lint::Syntax
h[issue.rule] ||= Array(Issue).new
h[issue.rule] << issue
end

View File

@ -2,8 +2,8 @@ module Ameba::Rule
# List of names of the special rules, which
# behave differently than usual rules.
SPECIAL = [
Syntax.rule_name,
UnneededDisableDirective.rule_name,
Lint::Syntax.rule_name,
Lint::UnneededDisableDirective.rule_name,
]
# Represents a base of all rules. In other words, all rules
@ -96,7 +96,7 @@ module Ameba::Rule
end
protected def self.rule_name
name.gsub("Ameba::Rule::", "")
name.gsub("Ameba::Rule::", "").gsub("::", "/")
end
protected def self.subclasses

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Layout
# A rule that disallows lines longer than `max_length` number of symbols.
#
# YAML configuration example:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Layout
# A rule that disallows trailing blank lines at the end of the source file.
#
# YAML configuration example:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Layout
# A rule that disallows trailing whitespaces.
#
# YAML configuration example:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that disallows comparison to booleans.
#
# For example, these are considered invalid:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that disallows calls to debugger.
#
# This is because we don't want debugger breakpoints accidentally being

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that disallows empty ensure statement.
#
# For example, this is considered invalid:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that disallows empty expressions.
#
# This is considered invalid:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that disallows duplicated keys in hash literals.
#
# This is considered invalid:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that disallows useless conditional statements that contain a literal
# in place of a variable or predicate function.
#

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that disallows useless string interpolations
# that contain a literal value instead of a variable or function.
#

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that disallows some unwanted symbols in percent array literals.
#
# For example, this is usually written by mistake:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that disallows `rand(0)` and `rand(1)` calls.
# Such calls always return `0`.
#

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that disallows shadowed arguments.
#
# For example, this is considered invalid:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that disallows a rescued exception that get shadowed by a
# less specific exception being rescued before a more specific
# exception is rescued.

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that disallows the usage of the same name as outer local variables
# for block or proc arguments.
#

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that reports invalid Crystal syntax.
#
# For example, this syntax is invalid:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that reports unneeded disable directives.
# For example, this is considered invalid:
#

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that reports unused arguments.
# For example, this is considered invalid:
#

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that disallows useless assignments.
#
# For example, this is considered invalid:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Lint
# A rule that disallows useless conditions in when clause
# where it is guaranteed to always return the same result.
#

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Style
# A rule that enforces constant names to be in screaming case.
#
# For example, these constant names are considered valid:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Style
# A rule that disallows usage of large numbers without underscore.
# These do not affect the value of the number, but can help read
# large numbers more easily.

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Style
# A rule that enforces method names to be in underscored case.
#
# For example, these are considered valid:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Style
# A rule that disallows negated conditions in unless.
#
# For example, this is considered invalid:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Style
# A rule that disallows tautological predicate names, meaning those that
# start with the prefix `has_` or the prefix `is_`. Ignores if the alternative isn't valid Crystal code (e.g. `is_404?`).
#

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Style
# A rule that disallows redundant begin blocks.
#
# Currently it is able to detect:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Style
# A rule that enforces type names in camelcase manner.
#
# For example, these are considered valid:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Style
# A rule that disallows the use of an `else` block with the `unless`.
#
# For example, the rule considers these valid:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Style
# A rule that enforces variable names to be in underscored case.
#
# For example, these variable names are considered valid:

View File

@ -1,4 +1,4 @@
module Ameba::Rule
module Ameba::Rule::Style
# A rule that disallows the use of `while true` instead of using the idiomatic `loop`
#
# For example, this is considered invalid:

View File

@ -21,7 +21,7 @@ module Ameba
@formatter : Formatter::BaseFormatter
# A syntax rule which always inspects a source first
@syntax_rule = Rule::Syntax.new
@syntax_rule = Rule::Lint::Syntax.new
# Checks for unneeded disable directives. Always inspects a source last
@unneeded_disable_directive_rule : Rule::Base?
@ -43,7 +43,7 @@ module Ameba
@unneeded_disable_directive_rule =
config.rules
.find &.name.==(Rule::UnneededDisableDirective.rule_name)
.find &.name.==(Rule::Lint::UnneededDisableDirective.rule_name)
end
# :nodoc: