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
endEnforces 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::Documentation::Documentation
- Ameba::Rule::Documentation::DocumentationAdmonition
- 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::Formatting
- Ameba::Rule::Lint::HashDuplicatedKey
- Ameba::Rule::Lint::LiteralAssignmentsInExpressions
- Ameba::Rule::Lint::LiteralInCondition
- Ameba::Rule::Lint::LiteralInInterpolation
- Ameba::Rule::Lint::LiteralsComparison
- Ameba::Rule::Lint::MissingBlockArgument
- Ameba::Rule::Lint::NotNil
- Ameba::Rule::Lint::NotNilAfterNoBang
- 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::SpecFilename
- Ameba::Rule::Lint::SpecFocus
- Ameba::Rule::Lint::Syntax
- Ameba::Rule::Lint::Typos
- Ameba::Rule::Lint::UnneededDisableDirective
- Ameba::Rule::Lint::UnreachableCode
- Ameba::Rule::Lint::UnusedArgument
- Ameba::Rule::Lint::UnusedBlockArgument
- Ameba::Rule::Lint::UselessAssign
- Ameba::Rule::Lint::UselessConditionInWhen
- Ameba::Rule::Metrics::CyclomaticComplexity
- Ameba::Rule::Naming::AccessorMethodName
- Ameba::Rule::Naming::AsciiIdentifiers
- Ameba::Rule::Naming::BinaryOperatorParameterName
- Ameba::Rule::Naming::BlockParameterName
- Ameba::Rule::Naming::ConstantNames
- Ameba::Rule::Naming::Filename
- Ameba::Rule::Naming::MethodNames
- Ameba::Rule::Naming::PredicateName
- Ameba::Rule::Naming::QueryBoolMethods
- Ameba::Rule::Naming::RescuedExceptionsVariableName
- Ameba::Rule::Naming::TypeNames
- Ameba::Rule::Naming::VariableNames
- Ameba::Rule::Performance::Base
- Ameba::Rule::Style::GuardClause
- Ameba::Rule::Style::IsAFilter
- Ameba::Rule::Style::IsANil
- Ameba::Rule::Style::LargeNumbers
- Ameba::Rule::Style::NegatedConditionsInUnless
- Ameba::Rule::Style::ParenthesesAroundCondition
- Ameba::Rule::Style::RedundantBegin
- Ameba::Rule::Style::RedundantNext
- Ameba::Rule::Style::RedundantReturn
- Ameba::Rule::Style::UnlessElse
- Ameba::Rule::Style::VerboseBlock
- Ameba::Rule::Style::WhileTrue
Defined in:
ameba/rule/base.crConstant Summary
- 
        GROUP_SEVERITY = {Documentation: Ameba::Severity::Warning, Lint: Ameba::Severity::Warning, Metrics: Ameba::Severity::Warning, Performance: Ameba::Severity::Warning}
Class Method Summary
Macro Summary
- 
        issue_for(*args, **kwargs, &block)
        
          Adds an issue to the source 
Instance Method Summary
- 
        #==(other)
        
          Returns false(other can only be aValuehere).
- 
        #catch(source : Source)
        
          A convenient addition to #testmethod that does the same but returns a passed insourceas an addition.
- 
        #excluded?(source)
        
          Checks whether the source is excluded from this rule. 
- 
        #group
        
          Returns a group this rule belong to. 
- 
        #hash
        
          Generates an UInt64hash value for this object.
- 
        #name
        
          Returns a name of this rule, which is basically a class name. 
- 
        #special?
        
          Returns trueif this rule is special and behaves differently than usual rules.
- 
        #test(source : Source, node : Crystal::ASTNode, *opts)
        
          NOTE Can't be abstract 
- 
        #test(source : Source)
        
          This method is designed to test the source passed in. 
Macros inherited from module Ameba::Config::RuleConfig
  
  
    
      properties(&block)
    properties
    
  
  
    
    
    
    
  
    
    
    
    
  
Class Method Detail
Macro Detail
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 falseReturns 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 falseThis method is designed to test the source passed in. If source has issues that are tested by this rule, it should add an issue.
By default it uses a node visitor to traverse all the nodes in the source.
NOTE Must be overridden for other type of rules.