Class: SyntaxTree::ClassDeclaration

Inherits:
Node
  • Object
show all
Defined in:
lib/syntax_tree/node.rb

Overview

Class represents defining a class using the class keyword.

class Container
end

Classes can have path names as their class name in case it’s being nested under a namespace, as in:

class Namespace::Container
end

Classes can also be defined as a top-level path, in the case that it’s already in a namespace but you want to define it at the top-level instead, as in:

module OtherNamespace
  class ::Namespace::Container
  end
end

All of these declarations can also have an optional superclass reference, as in:

class Child < Parent
end

That superclass can actually be any Ruby expression, it doesn’t necessarily need to be a constant, as in:

class Child < method
end

Instance Attribute Summary collapse

Attributes inherited from Node

#location

Instance Method Summary collapse

Methods inherited from Node

#construct_keys, #pretty_print, #to_json

Constructor Details

#initialize(constant:, superclass:, bodystmt:, location:, comments: []) ⇒ ClassDeclaration

Returns a new instance of ClassDeclaration.



2814
2815
2816
2817
2818
2819
2820
# File 'lib/syntax_tree/node.rb', line 2814

def initialize(constant:, superclass:, bodystmt:, location:, comments: [])
  @constant = constant
  @superclass = superclass
  @bodystmt = bodystmt
  @location = location
  @comments = comments
end

Instance Attribute Details

#bodystmtObject (readonly)

BodyStmt

the expressions to execute within the context of the class



2809
2810
2811
# File 'lib/syntax_tree/node.rb', line 2809

def bodystmt
  @bodystmt
end

#commentsObject (readonly)

Array[ Comment | EmbDoc ]

the comments attached to this node



2812
2813
2814
# File 'lib/syntax_tree/node.rb', line 2812

def comments
  @comments
end

#constantObject (readonly)

ConstPathRef | ConstRef | TopConstRef

the name of the class being

defined



2803
2804
2805
# File 'lib/syntax_tree/node.rb', line 2803

def constant
  @constant
end

#superclassObject (readonly)

nil | untyped

the optional superclass declaration



2806
2807
2808
# File 'lib/syntax_tree/node.rb', line 2806

def superclass
  @superclass
end

Instance Method Details

#accept(visitor) ⇒ Object



2822
2823
2824
# File 'lib/syntax_tree/node.rb', line 2822

def accept(visitor)
  visitor.visit_class(self)
end

#child_nodesObject Also known as: deconstruct



2826
2827
2828
# File 'lib/syntax_tree/node.rb', line 2826

def child_nodes
  [constant, superclass, bodystmt]
end

#deconstruct_keys(_keys) ⇒ Object



2832
2833
2834
2835
2836
2837
2838
2839
2840
# File 'lib/syntax_tree/node.rb', line 2832

def deconstruct_keys(_keys)
  {
    constant: constant,
    superclass: superclass,
    bodystmt: bodystmt,
    location: location,
    comments: comments
  }
end

#format(q) ⇒ Object



2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
# File 'lib/syntax_tree/node.rb', line 2842

def format(q)
  declaration = -> do
    q.group do
      q.text("class ")
      q.format(constant)

      if superclass
        q.text(" < ")
        q.format(superclass)
      end
    end
  end

  if bodystmt.empty?
    q.group do
      declaration.call
      q.breakable(force: true)
      q.text("end")
    end
  else
    q.group do
      declaration.call

      q.indent do
        q.breakable(force: true)
        q.format(bodystmt)
      end

      q.breakable(force: true)
      q.text("end")
    end
  end
end