class

Ameba::Rule::Base

Inherits Ameba::Config::RuleConfig < Reference < Object

Represents a base of all rules. In other words, all rules inherit from this class:

class Ameba::Rule::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.

Constants

GROUP_SEVERITY = { Lint: Ameba::Severity::Warning, Metrics: Ameba::Severity::Warning, Performance: Ameba::Severity::Warning, }

Class methods

default_severity
group_name

Returns the group name for this rule.

Ameba::Rule::Lint::Syntax.group_name # => "Lint"
Source
rule_name

Returns the name for this rule.

Ameba::Rule::Lint::Syntax.rule_name # => "Lint/Syntax"
Source

Instance methods

==(other : self)

Returns true if this reference is the same as other. Invokes same?.

catch(source : Source)

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?
Source
excluded?(source, root = Dir.current)

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
Source
group

Returns a group this rule belongs to.

module Ameba
  class Rule::MyGroup::MyRule < Rule::Base
    # ...
  end
end

Ameba::Rule::MyGroup::MyRule.new.group # => "MyGroup"
Source
hash(hasher)

See Object#hash(hasher)

name

Returns a name of this rule, which is basically a class name.

module Ameba
  class Rule::MyRule < Rule::Base
    def test(source)
    end
  end
end

Ameba::Rule::MyRule.new.name # => "MyRule"
Source
special?

Returns true if this rule is special and behaves differently than usual rules.

my_rule.special? # => true or false
Source
test(source : Source, node : Crystal::ASTNode, *opts)

NOTE: Can't be abstract

Source
test(source : Source)

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.

By default it uses a node visitor to traverse all the nodes in the source.

NOTE: Must be overridden for other type of rules.

Source

Macros

issue_for(*args, **kwargs, &block)

Adds an issue to the source

Source