Class: Solargraph::Convention::StructDefinition::StructDefintionNode

Inherits:
Object
  • Object
show all
Defined in:
lib/solargraph/convention/struct_definition/struct_definition_node.rb

Overview

A node wrapper for a Struct definition via inheritance.

Examples:

class MyStruct < Struct.new(:bar, :baz)
  def foo
  end
end

Direct Known Subclasses

StructAssignmentNode

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(node) ⇒ Parser::AST::Node



50
51
52
# File 'lib/solargraph/convention/struct_definition/struct_definition_node.rb', line 50

def initialize(node)
  @node = node
end

Class Method Details

.valid?(node) ⇒ Boolean

Examples:

s(:class,
  s(:const, nil, :Foo),
  s(:send,
    s(:const, nil, :Struct), :new,
    s(:sym, :bar),
    s(:sym, :baz)),
    s(:hash,
      s(:pair,
        s(:sym, :keyword_init),
        s(:true)))),
  s(:def, :foo,
    s(:args),
    s(:send, nil, :bar)))

Returns:

  • (Boolean)


28
29
30
31
32
# File 'lib/solargraph/convention/struct_definition/struct_definition_node.rb', line 28

def valid?(node)
  return false unless node&.type == :class

  struct_definition_node?(node.children[1])
end

Instance Method Details

#attributesArray<Array(Parser::AST::Node, String)>

Returns:

  • (Array<Array(Parser::AST::Node, String)>)


60
61
62
63
64
65
# File 'lib/solargraph/convention/struct_definition/struct_definition_node.rb', line 60

def attributes
  struct_attribute_nodes.map do |struct_def_param|
    next unless struct_def_param.type == :sym
    [struct_def_param, struct_def_param.children[0].to_s]
  end.compact
end

#body_nodeParser::AST::Node

Returns:

  • (Parser::AST::Node)


79
80
81
# File 'lib/solargraph/convention/struct_definition/struct_definition_node.rb', line 79

def body_node
  node.children[2]
end

#class_nameString

Returns:

  • (String)


55
56
57
# File 'lib/solargraph/convention/struct_definition/struct_definition_node.rb', line 55

def class_name
  Parser::NodeMethods.unpack_name(node)
end

#keyword_init?Boolean

Returns:

  • (Boolean)


67
68
69
70
71
72
73
74
75
76
# File 'lib/solargraph/convention/struct_definition/struct_definition_node.rb', line 67

def keyword_init?
  keyword_init_param = struct_attribute_nodes.find do |struct_def_param|
    struct_def_param.type == :hash && struct_def_param.children[0].type == :pair &&
      struct_def_param.children[0].children[0].children[0] == :keyword_init
  end

  return false if keyword_init_param.nil?

  keyword_init_param.children[0].children[1].type == :true
end