Class: PowerAssert::Parser::PrismParser
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Parser
|
|
|
Instance Chain:
self,
Parser
|
|
| Inherits: |
Parser
|
| Defined in: | lib/power_assert/parser.rb |
Instance Method Summary
- #idents
- #extract_idents(node) private
Instance Method Details
#extract_idents(node) (private)
[ GitHub ]# File 'lib/power_assert/parser.rb', line 208
def extract_idents(node) case node&.type when nil [] when :program_node if (statement = node.statements.body.first).is_a?(Prism::CallNode) && (statement.name == @assertion_method_name&.to_sym) && (block = statement.block).is_a?(Prism::BlockNode) && (body = block.body).is_a?(Prism::StatementsNode) extract_idents(body) else extract_idents(statement) end when :call_node = if (node.name == :[] && !node.call_operator_loc) Ident[:method, "[]", node.opening_loc.start_column] elsif ( = node.) Ident[:method, node.name.name, .start_column] else Ident[:method, "call", node.opening_loc.start_column] end if node. extract_idents(node.receiver) + [Branch[extract_idents(node.arguments) + [], []]] else extract_idents(node.receiver) + extract_idents(node.arguments) + [] end when :call_operator_write_node, :class_variable_operator_write_node, :constant_operator_write_node, :constant_path_operator_write_node, :global_variable_operator_write_node, :index_operator_write_node, :instance_variable_operator_write_node, :local_variable_operator_write_node binary_operator_loc = node.binary_operator_loc.chop extract_idents(node.value) + [Ident[:method, binary_operator_loc.slice, binary_operator_loc.start_column]] when :if_node extract_idents(node.predicate) + [Branch[extract_idents(node.statements), extract_idents(node.subsequent)]] when :unless_node extract_idents(node.predicate) + [Branch[extract_idents(node.statements), extract_idents(node.else_clause)]] when :and_node, :or_node extract_idents(node.left) + [Branch[extract_idents(node.right), []]] when :class_variable_read_node, :constant_read_node, :global_variable_read_node, :instance_variable_read_node, :local_variable_read_node, :self_node [Ident[:ref, node.slice, node.start_column]] else node.compact_child_nodes.flat_map { |child| extract_idents(child) } end end
#idents
[ GitHub ]# File 'lib/power_assert/parser.rb', line 197
def idents @idents ||= begin require 'prism' result = Prism.parse(@line_for_parsing, scopes: [@proc_local_variables.map(&:to_sym)]) result.success? ? extract_idents(result.value) : [] end end