[ruby/prism] Add full_name to ConstantPathNode and ConstantPathTargetNode
https://github.com/ruby/prism/commit/b390553028
This commit is contained in:
parent
58fc45325f
commit
69b024d7cc
@ -52,4 +52,48 @@ module Prism
|
|||||||
o
|
o
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class ConstantReadNode < Node
|
||||||
|
# Returns the list of parts for the full name of this constant. For example: [:Foo]
|
||||||
|
def full_name_parts
|
||||||
|
[name]
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns the full name of this constant. For example: "Foo"
|
||||||
|
def full_name
|
||||||
|
name.name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class ConstantPathNode < Node
|
||||||
|
# Returns the list of parts for the full name of this constant path. For example: [:Foo, :Bar]
|
||||||
|
def full_name_parts
|
||||||
|
parts = [child.name]
|
||||||
|
current = parent
|
||||||
|
|
||||||
|
while current.is_a?(ConstantPathNode)
|
||||||
|
parts.unshift(current.child.name)
|
||||||
|
current = current.parent
|
||||||
|
end
|
||||||
|
|
||||||
|
parts.unshift(current&.name || :"")
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns the full name of this constant path. For example: "Foo::Bar"
|
||||||
|
def full_name
|
||||||
|
full_name_parts.join("::")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class ConstantPathTargetNode < Node
|
||||||
|
# Returns the list of parts for the full name of this constant path. For example: [:Foo, :Bar]
|
||||||
|
def full_name_parts
|
||||||
|
(parent&.full_name_parts || [:""]).push(child.name)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns the full name of this constant path. For example: "Foo::Bar"
|
||||||
|
def full_name
|
||||||
|
full_name_parts.join("::")
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
30
test/prism/constant_path_node_test.rb
Normal file
30
test/prism/constant_path_node_test.rb
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require_relative "test_helper"
|
||||||
|
|
||||||
|
module Prism
|
||||||
|
class ConstantPathNodeTest < TestCase
|
||||||
|
def test_full_name_for_constant_path
|
||||||
|
source = <<~RUBY
|
||||||
|
Foo:: # comment
|
||||||
|
Bar::Baz::
|
||||||
|
Qux
|
||||||
|
RUBY
|
||||||
|
|
||||||
|
constant_path = Prism.parse(source).value.statements.body.first
|
||||||
|
assert_equal("Foo::Bar::Baz::Qux", constant_path.full_name)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_full_name_for_constant_path_target
|
||||||
|
source = <<~RUBY
|
||||||
|
Foo:: # comment
|
||||||
|
Bar::Baz::
|
||||||
|
Qux, Something = [1, 2]
|
||||||
|
RUBY
|
||||||
|
|
||||||
|
node = Prism.parse(source).value.statements.body.first
|
||||||
|
target = node.targets.first
|
||||||
|
assert_equal("Foo::Bar::Baz::Qux", target.full_name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
x
Reference in New Issue
Block a user