mirror of
https://gitea.invidious.io/iv-org/shard-ameba.git
synced 2024-08-15 00:53:29 +00:00
Add custom NodeVisitor
subclass for Style/VariableNames
This commit is contained in:
parent
bd1a1a1fd4
commit
c9ba487373
2 changed files with 18 additions and 12 deletions
|
@ -38,7 +38,6 @@ module Ameba
|
|||
class Greeting
|
||||
def initialize(@badNamed = nil)
|
||||
# ^ error: Var name should be underscore-cased: @bad_named, not @badNamed
|
||||
# ^ error: Var name should be underscore-cased: bad_named, not badNamed
|
||||
end
|
||||
end
|
||||
CRYSTAL
|
||||
|
|
|
@ -35,17 +35,9 @@ module Ameba::Rule::Style
|
|||
issue_for node, MSG % {expected, node.name}
|
||||
end
|
||||
|
||||
# TODO: Handle special case where instance variable is method parameter.
|
||||
# For example, this:
|
||||
#
|
||||
# def initialize(@foo)
|
||||
# end
|
||||
#
|
||||
# is represented in the AST as:
|
||||
#
|
||||
# def initialize(foo)
|
||||
# @foo = foo
|
||||
# end
|
||||
def test(source : Source)
|
||||
VarVisitor.new self, source
|
||||
end
|
||||
|
||||
def test(source, node : Crystal::Var)
|
||||
check_node source, node
|
||||
|
@ -58,5 +50,20 @@ module Ameba::Rule::Style
|
|||
def test(source, node : Crystal::ClassVar)
|
||||
check_node source, node
|
||||
end
|
||||
|
||||
private class VarVisitor < AST::NodeVisitor
|
||||
private getter var_locations = [] of Crystal::Location
|
||||
|
||||
def visit(node : Crystal::Var)
|
||||
!var_locations.includes?(node.location) && super
|
||||
end
|
||||
|
||||
def visit(node : Crystal::InstanceVar | Crystal::ClassVar)
|
||||
if (location = node.location)
|
||||
var_locations << location
|
||||
end
|
||||
super
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue