Class: RBI::Node Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/rbi/model.rb,
lib/rbi/printer.rb,
lib/rbi/rbs_printer.rb,
lib/rbi/rewriters/merge_trees.rb,
lib/rbi/rewriters/filter_versions.rb

Overview

This class is abstract.

Direct Known Subclasses

Arg, Comment, NodeWithComments

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(loc: nil) ⇒ Node

: (?loc: Loc?) -> void



16
17
18
19
# File 'lib/rbi/model.rb', line 16

def initialize(loc: nil)
  @parent_tree = nil
  @loc = loc
end

Instance Attribute Details

#locObject

: Loc?



13
14
15
# File 'lib/rbi/model.rb', line 13

def loc
  @loc
end

#parent_treeObject

: Tree?



10
11
12
# File 'lib/rbi/model.rb', line 10

def parent_tree
  @parent_tree
end

Instance Method Details

#compatible_with?(_other) ⇒ Boolean

Can ‘self` and `_other` be merged into a single definition? : (Node _other) -> bool

Returns:

  • (Boolean)


289
290
291
# File 'lib/rbi/rewriters/merge_trees.rb', line 289

def compatible_with?(_other)
  true
end

#detachObject

: -> void



22
23
24
25
26
27
28
# File 'lib/rbi/model.rb', line 22

def detach
  tree = parent_tree
  return unless tree

  tree.nodes.delete(self)
  self.parent_tree = nil
end

#merge_with(other) ⇒ Object

Merge ‘self` and `other` into a single definition : (Node other) -> void



295
# File 'lib/rbi/rewriters/merge_trees.rb', line 295

def merge_with(other); end

#parent_conflict_treeObject

: -> ConflictTree?



298
299
300
301
302
303
304
305
306
# File 'lib/rbi/rewriters/merge_trees.rb', line 298

def parent_conflict_tree
  parent = parent_tree #: Node?
  while parent
    return parent if parent.is_a?(ConflictTree)

    parent = parent.parent_tree
  end
  nil
end

#parent_scopeObject

: -> Scope?



44
45
46
47
48
# File 'lib/rbi/model.rb', line 44

def parent_scope
  parent = parent_tree #: Tree?
  parent = parent.parent_tree until parent.is_a?(Scope) || parent.nil?
  parent
end

: (?out: (IO | StringIO), ?indent: Integer, ?print_locs: bool, ?max_line_length: Integer?) -> void



832
833
834
835
# File 'lib/rbi/printer.rb', line 832

def print(out: $stdout, indent: 0, print_locs: false, max_line_length: nil)
  p = Printer.new(out: out, indent: indent, print_locs: print_locs, max_line_length: max_line_length)
  p.visit(self)
end

#rbs_print(out: $stdout, indent: 0, print_locs: false, positional_names: true) ⇒ Object

: (?out: (IO | StringIO), ?indent: Integer, ?print_locs: bool, ?positional_names: bool) -> void



1225
1226
1227
1228
# File 'lib/rbi/rbs_printer.rb', line 1225

def rbs_print(out: $stdout, indent: 0, print_locs: false, positional_names: true)
  p = RBSPrinter.new(out: out, indent: indent, print_locs: print_locs, positional_names: positional_names)
  p.visit(self)
end

#rbs_string(indent: 0, print_locs: false, positional_names: true) ⇒ Object

: (?indent: Integer, ?print_locs: bool, ?positional_names: bool) -> String



1231
1232
1233
1234
1235
# File 'lib/rbi/rbs_printer.rb', line 1231

def rbs_string(indent: 0, print_locs: false, positional_names: true)
  out = StringIO.new
  rbs_print(out: out, indent: indent, print_locs: print_locs, positional_names: positional_names)
  out.string
end

#replace(node) ⇒ Object

: (Node node) -> void

Raises:



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/rbi/model.rb', line 31

def replace(node)
  tree = parent_tree
  raise ReplaceNodeError, "Can't replace #{self} without a parent tree" unless tree

  index = tree.nodes.index(self)
  raise ReplaceNodeError, "Can't find #{self} in #{tree} child nodes" unless index

  tree.nodes[index] = node
  node.parent_tree = tree
  self.parent_tree = nil
end

#satisfies_version?(version) ⇒ Boolean

: (Gem::Version version) -> bool

Returns:

  • (Boolean)


91
92
93
94
95
96
# File 'lib/rbi/rewriters/filter_versions.rb', line 91

def satisfies_version?(version)
  return true unless is_a?(NodeWithComments)

  requirements = version_requirements
  requirements.empty? || requirements.any? { |req| req.satisfied_by?(version) }
end

#string(indent: 0, print_locs: false, max_line_length: nil) ⇒ Object

: (?indent: Integer, ?print_locs: bool, ?max_line_length: Integer?) -> String



838
839
840
841
842
# File 'lib/rbi/printer.rb', line 838

def string(indent: 0, print_locs: false, max_line_length: nil)
  out = StringIO.new
  print(out: out, indent: indent, print_locs: print_locs, max_line_length: max_line_length)
  out.string
end