abstract class Ameba::Rule::Base
- Ameba::Rule::Base
- Reference
- Object
Overview
Represents a base of all rules. In other words, all rules inherits from this struct:
class MyRule < Ameba::Rule::Base
def test(source)
if invalid?(source)
issue_for line, column, "Something wrong."
end
end
private def invalid?(source)
# ...
end
end
Enforces rules to implement an abstract #test
method which
is designed to test the source passed in. If source has issues
that are tested by this rule, it should add an issue.
Included Modules
- Ameba::Config::RuleConfig
Direct Known Subclasses
- Ameba::Rule::Layout::LineLength
- Ameba::Rule::Layout::TrailingBlankLines
- Ameba::Rule::Layout::TrailingWhitespace
- Ameba::Rule::Lint::AmbiguousAssignment
- Ameba::Rule::Lint::BadDirective
- Ameba::Rule::Lint::ComparisonToBoolean
- Ameba::Rule::Lint::DebugCalls
- Ameba::Rule::Lint::DebuggerStatement
- Ameba::Rule::Lint::DuplicatedRequire
- Ameba::Rule::Lint::EmptyEnsure
- Ameba::Rule::Lint::EmptyExpression
- Ameba::Rule::Lint::EmptyLoop
- Ameba::Rule::Lint::HashDuplicatedKey
- Ameba::Rule::Lint::LiteralInCondition
- Ameba::Rule::Lint::LiteralInInterpolation
- Ameba::Rule::Lint::PercentArrays
- Ameba::Rule::Lint::RandZero
- Ameba::Rule::Lint::RedundantStringCoercion
- Ameba::Rule::Lint::RedundantWithIndex
- Ameba::Rule::Lint::RedundantWithObject
- Ameba::Rule::Lint::ShadowedArgument
- Ameba::Rule::Lint::ShadowedException
- Ameba::Rule::Lint::ShadowingOuterLocalVar
- Ameba::Rule::Lint::SharedVarInFiber
- Ameba::Rule::Lint::SpecFocus
- Ameba::Rule::Lint::Syntax
- Ameba::Rule::Lint::UnneededDisableDirective
- Ameba::Rule::Lint::UnreachableCode
- Ameba::Rule::Lint::UnusedArgument
- Ameba::Rule::Lint::UselessAssign
- Ameba::Rule::Lint::UselessConditionInWhen
- Ameba::Rule::Metrics::CyclomaticComplexity
- Ameba::Rule::Performance::Base
- Ameba::Rule::Style::ConstantNames
- Ameba::Rule::Style::GuardClause
- Ameba::Rule::Style::IsAFilter
- Ameba::Rule::Style::IsANil
- Ameba::Rule::Style::LargeNumbers
- Ameba::Rule::Style::MethodNames
- Ameba::Rule::Style::NegatedConditionsInUnless
- Ameba::Rule::Style::PredicateName
- Ameba::Rule::Style::RedundantBegin
- Ameba::Rule::Style::RedundantNext
- Ameba::Rule::Style::RedundantReturn
- Ameba::Rule::Style::TypeNames
- Ameba::Rule::Style::UnlessElse
- Ameba::Rule::Style::VariableNames
- Ameba::Rule::Style::VerboseBlock
- Ameba::Rule::Style::WhileTrue
Defined in:
ameba/rule/base.crClass Method Summary
-
.parsed_doc
Returns documentation for this rule if any.
Instance Method Summary
-
#==(other)
Returns
false
(other can only be aValue
here). -
#catch(source : Source)
A convenient addition to
#test
method that does the same but returns a passed insource
as an addition. -
#excluded?(source)
Checks whether the source is excluded from this rule.
-
#group
Returns a group this rule belong to.
-
#hash
Generates an
UInt64
hash value for this object. -
#name
Returns a name of this rule, which is basically a class name.
-
#special?
Returns true if this rule is special and behaves differently than usual rules.
- #test(source : Source, node : Crystal::ASTNode, *opts)
-
#test(source : Source)
This method is designed to test the source passed in.
Macro Summary
Class Method Detail
Returns documentation for this rule if any.
module Ameba
# This is a test rule.
# Does nothing.
class MyRule < Ameba::Rule::Base
def test(source)
end
end
end
MyRule.parsed_doc # => "This is a test rule.\nDoes nothing."
Instance Method Detail
Returns false
(other can only be a Value
here).
A convenient addition to #test
method that does the same
but returns a passed in source
as an addition.
source = MyRule.new.catch(source)
source.valid?
Checks whether the source is excluded from this rule.
It searches for a path in excluded
property which matches
the one of the given source.
my_rule.excluded?(source) # => true or false
Returns a group this rule belong to.
class MyGroup::MyRule < Ameba::Rule::Base
# ...
end
MyGroup::MyRule.new.group # => "MyGroup"
Generates an UInt64
hash value for this object.
This method must have the property that a == b
implies a.hash == b.hash
.
The hash value is used along with #==
by the Hash
class to determine if two objects
reference the same hash key.
Subclasses must not override this method. Instead, they must define hash(hasher)
,
though usually the macro def_hash
can be used to generate this method.
Returns a name of this rule, which is basically a class name.
class MyRule < Ameba::Rule::Base
def test(source)
end
end
MyRule.new.name # => "MyRule"
Returns true if this rule is special and behaves differently than usual rules.
my_rule.special? # => true or false
This method is designed to test the source passed in. If source has issues that are tested by this rule, it should add an issue.
Be default it uses a node visitor to traverse all the nodes in the source. Must be overriten for other type of rules.