Module: Docscribe::Infer::Names

Defined in:
lib/docscribe/infer/names.rb

Overview

Constant-name helpers for turning AST nodes into fully qualified names.

Class Method Summary collapse

Class Method Details

.const_full_name(n) ⇒ String?

Note:

module_function: when included, also defines #const_full_name (instance visibility: private)

Convert a ‘:const` / `:cbase` AST node into a fully qualified constant name.

Examples:

  • ‘Foo` => `“Foo”`

  • ‘Foo::Bar` => `“Foo::Bar”`

  • ‘::Foo::Bar` => `“::Foo::Bar”`

Returns nil for unsupported nodes.

Parameters:

  • n (Parser::AST::Node, nil)

    constant-like AST node

Returns:

  • (String, nil)


21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/docscribe/infer/names.rb', line 21

def const_full_name(n)
  return nil unless n.is_a?(Parser::AST::Node)

  case n.type
  when :const
    scope, name = *n
    scope_name = const_full_name(scope)

    if scope_name && !scope_name.empty?
      "#{scope_name}::#{name}"
    elsif scope_name == '' # leading ::
      "::#{name}"
    else
      name.to_s
    end

  when :cbase
    '' # represents leading :: scope
  end
end