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.



2861
2862
2863
2864
2865
2866
2867
# File 'lib/syntax_tree/node.rb', line 2861

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



2856
2857
2858
# File 'lib/syntax_tree/node.rb', line 2856

def bodystmt
  @bodystmt
end

#commentsObject (readonly)

Array[ Comment | EmbDoc ]

the comments attached to this node



2859
2860
2861
# File 'lib/syntax_tree/node.rb', line 2859

def comments
  @comments
end

#constantObject (readonly)

ConstPathRef | ConstRef | TopConstRef

the name of the class being

defined



2850
2851
2852
# File 'lib/syntax_tree/node.rb', line 2850

def constant
  @constant
end

#superclassObject (readonly)

nil | untyped

the optional superclass declaration



2853
2854
2855
# File 'lib/syntax_tree/node.rb', line 2853

def superclass
  @superclass
end

Instance Method Details

#accept(visitor) ⇒ Object



2869
2870
2871
# File 'lib/syntax_tree/node.rb', line 2869

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

#child_nodesObject Also known as: deconstruct



2873
2874
2875
# File 'lib/syntax_tree/node.rb', line 2873

def child_nodes
  [constant, superclass, bodystmt]
end

#deconstruct_keys(_keys) ⇒ Object



2879
2880
2881
2882
2883
2884
2885
2886
2887
# File 'lib/syntax_tree/node.rb', line 2879

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

#format(q) ⇒ Object



2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
# File 'lib/syntax_tree/node.rb', line 2889

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