Class: SyntaxTree::RegexpLiteral

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

Overview

RegexpLiteral represents a regular expression literal.

/.+/

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(beginning:, ending:, parts:, location:, comments: []) ⇒ RegexpLiteral

Returns a new instance of RegexpLiteral.



7483
7484
7485
7486
7487
7488
7489
# File 'lib/syntax_tree/node.rb', line 7483

def initialize(beginning:, ending:, parts:, location:, comments: [])
  @beginning = beginning
  @ending = ending
  @parts = parts
  @location = location
  @comments = comments
end

Instance Attribute Details

#beginningObject (readonly)

String

the beginning of the regular expression literal



7471
7472
7473
# File 'lib/syntax_tree/node.rb', line 7471

def beginning
  @beginning
end

#commentsObject (readonly)

Array[ Comment | EmbDoc ]

the comments attached to this node



7481
7482
7483
# File 'lib/syntax_tree/node.rb', line 7481

def comments
  @comments
end

#endingObject (readonly)

String

the ending of the regular expression literal



7474
7475
7476
# File 'lib/syntax_tree/node.rb', line 7474

def ending
  @ending
end

#partsObject (readonly)

Array[ StringEmbExpr | StringDVar | TStringContent ]

the parts of the

regular expression literal



7478
7479
7480
# File 'lib/syntax_tree/node.rb', line 7478

def parts
  @parts
end

Instance Method Details

#accept(visitor) ⇒ Object



7491
7492
7493
# File 'lib/syntax_tree/node.rb', line 7491

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

#child_nodesObject Also known as: deconstruct



7495
7496
7497
# File 'lib/syntax_tree/node.rb', line 7495

def child_nodes
  parts
end

#deconstruct_keys(_keys) ⇒ Object



7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
# File 'lib/syntax_tree/node.rb', line 7501

def deconstruct_keys(_keys)
  {
    beginning: beginning,
    ending: ending,
    options: options,
    parts: parts,
    location: location,
    comments: comments
  }
end

#format(q) ⇒ Object



7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
# File 'lib/syntax_tree/node.rb', line 7512

def format(q)
  braces = ambiguous?(q) || include?(%r{/})

  if braces && include?(/[{}]/)
    q.group do
      q.text(beginning)
      q.format_each(parts)
      q.text(ending)
    end
  elsif braces
    q.group do
      q.text("%r{")

      if beginning == "/"
        # If we're changing from a forward slash to a %r{, then we can
        # replace any escaped forward slashes with regular forward slashes.
        parts.each do |part|
          if part.is_a?(TStringContent)
            q.text(part.value.gsub("\\/", "/"))
          else
            q.format(part)
          end
        end
      else
        q.format_each(parts)
      end

      q.text("}")
      q.text(options)
    end
  else
    q.group do
      q.text("/")
      q.format_each(parts)
      q.text("/")
      q.text(options)
    end
  end
end

#optionsObject



7552
7553
7554
# File 'lib/syntax_tree/node.rb', line 7552

def options
  ending[1..]
end