Module: Rigor::Source::ConstantPath
- Defined in:
- lib/rigor/source/constant_path.rb
Overview
Flattens a Prism constant-reference node (ConstantReadNode / ConstantPathNode) to its
source-qualified "A::B::C" string.
Two nil policies for the one edge case that distinguishes the call sites — a constant path rooted in a
dynamic base (expr::Bar, where the left side is a runtime expression rather than a constant):
- ConstantPath.qualified_name / ConstantPath.render are LENIENT — they drop the dynamic segment and render the trailing
constant names (
expr::Bar=> "Bar"). The scope indexer and statement evaluator feed only genuine class/module path nodes and want a best-effort name. - ConstantPath.qualified_name_or_nil is STRICT — a dynamic base anywhere in the chain yields
nil, so a caller that statically names constants can treat the path as opaque rather than guessing.
A leading :: (absolute root, ::Foo) renders as "Foo" under both policies. A node that is neither
a ConstantReadNode nor a ConstantPathNode yields nil under both.
Class Method Summary collapse
-
.qualified_name(node) ⇒ Object
Lenient dispatch over a constant-reference node.
-
.qualified_name_or_nil(node) ⇒ Object
Strict dispatch: a dynamic base anywhere in the path yields nil.
-
.render(node) ⇒ Object
Lenient render of a
ConstantPathNode; never nil for a path node.
Class Method Details
.qualified_name(node) ⇒ Object
Lenient dispatch over a constant-reference node.
23 24 25 26 27 28 |
# File 'lib/rigor/source/constant_path.rb', line 23 def qualified_name(node) case node when Prism::ConstantReadNode then node.name.to_s when Prism::ConstantPathNode then render(node) end end |
.qualified_name_or_nil(node) ⇒ Object
Strict dispatch: a dynamic base anywhere in the path yields nil.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/rigor/source/constant_path.rb', line 42 def qualified_name_or_nil(node) case node when Prism::ConstantReadNode node.name.to_s when Prism::ConstantPathNode parent = node.parent return node.name.to_s if parent.nil? parent_name = qualified_name_or_nil(parent) return nil if parent_name.nil? "#{parent_name}::#{node.name}" end end |
.render(node) ⇒ Object
Lenient render of a ConstantPathNode; never nil for a path node.
31 32 33 34 35 36 37 38 39 |
# File 'lib/rigor/source/constant_path.rb', line 31 def render(node) prefix = case node.parent when Prism::ConstantReadNode then "#{node.parent.name}::" when Prism::ConstantPathNode then "#{render(node.parent)}::" else "" end "#{prefix}#{node.name}" end |