Class: RubyLsp::NodeContext
- Inherits:
-
Object
- Object
- RubyLsp::NodeContext
- Defined in:
- lib/ruby_lsp/node_context.rb
Overview
This class allows listeners to access contextual information about a node in the AST, such as its parent, its namespace nesting, and the surrounding CallNode (e.g. a method call).
Instance Attribute Summary collapse
-
#call_node ⇒ Object
readonly
: Prism::CallNode?.
-
#nesting ⇒ Object
readonly
: Array.
-
#node ⇒ Object
readonly
: Prism::Node?.
-
#parent ⇒ Object
readonly
: Prism::Node?.
-
#surrounding_method ⇒ Object
readonly
: String?.
Instance Method Summary collapse
-
#fully_qualified_name ⇒ Object
: -> String.
-
#initialize(node, parent, nesting_nodes, call_node) ⇒ NodeContext
constructor
: (Prism::Node? node, Prism::Node? parent, Array[(Prism::ClassNode | Prism::ModuleNode | Prism::SingletonClassNode | Prism::DefNode | Prism::BlockNode | Prism::LambdaNode | Prism::ProgramNode)] nesting_nodes, Prism::CallNode? call_node) -> void.
-
#locals_for_scope ⇒ Object
: -> Array.
Constructor Details
#initialize(node, parent, nesting_nodes, call_node) ⇒ NodeContext
: (Prism::Node? node, Prism::Node? parent, Array[(Prism::ClassNode | Prism::ModuleNode | Prism::SingletonClassNode | Prism::DefNode | Prism::BlockNode | Prism::LambdaNode | Prism::ProgramNode)] nesting_nodes, Prism::CallNode? call_node) -> void
21 22 23 24 25 26 27 28 29 30 |
# File 'lib/ruby_lsp/node_context.rb', line 21 def initialize(node, parent, nesting_nodes, call_node) @node = node @parent = parent @nesting_nodes = nesting_nodes @call_node = call_node nesting, surrounding_method = handle_nesting_nodes(nesting_nodes) @nesting = nesting #: Array[String] @surrounding_method = surrounding_method #: String? end |
Instance Attribute Details
#call_node ⇒ Object (readonly)
: Prism::CallNode?
15 16 17 |
# File 'lib/ruby_lsp/node_context.rb', line 15 def call_node @call_node end |
#nesting ⇒ Object (readonly)
: Array
12 13 14 |
# File 'lib/ruby_lsp/node_context.rb', line 12 def nesting @nesting end |
#node ⇒ Object (readonly)
: Prism::Node?
9 10 11 |
# File 'lib/ruby_lsp/node_context.rb', line 9 def node @node end |
#parent ⇒ Object (readonly)
: Prism::Node?
9 10 11 |
# File 'lib/ruby_lsp/node_context.rb', line 9 def parent @parent end |
#surrounding_method ⇒ Object (readonly)
: String?
18 19 20 |
# File 'lib/ruby_lsp/node_context.rb', line 18 def surrounding_method @surrounding_method end |
Instance Method Details
#fully_qualified_name ⇒ Object
: -> String
33 34 35 |
# File 'lib/ruby_lsp/node_context.rb', line 33 def fully_qualified_name @fully_qualified_name ||= @nesting.join("::") #: String? end |
#locals_for_scope ⇒ Object
: -> Array
38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/ruby_lsp/node_context.rb', line 38 def locals_for_scope locals = [] @nesting_nodes.each do |node| if node.is_a?(Prism::ClassNode) || node.is_a?(Prism::ModuleNode) || node.is_a?(Prism::SingletonClassNode) || node.is_a?(Prism::DefNode) locals.clear end locals.concat(node.locals) end locals end |