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.



7472
7473
7474
7475
7476
7477
7478
# File 'lib/syntax_tree/node.rb', line 7472

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

Instance Attribute Details

#beginning ⇒ Object (readonly)

[String] the beginning of the regular expression literal



7460
7461
7462
# File 'lib/syntax_tree/node.rb', line 7460

def beginning
  @beginning
end

#comments ⇒ Object (readonly)

[Array[ Comment | EmbDoc ]] the comments attached to this node



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

def comments
  @comments
end

#ending ⇒ Object (readonly)

[String] the ending of the regular expression literal



7463
7464
7465
# File 'lib/syntax_tree/node.rb', line 7463

def ending
  @ending
end

#parts ⇒ Object (readonly)

[Array[ StringEmbExpr | StringDVar | TStringContent ]] the parts of the regular expression literal



7467
7468
7469
# File 'lib/syntax_tree/node.rb', line 7467

def parts
  @parts
end

Instance Method Details

#accept(visitor) ⇒ Object



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

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

#child_nodes ⇒ Object Also known as: deconstruct



7484
7485
7486
# File 'lib/syntax_tree/node.rb', line 7484

def child_nodes
  parts
end

#deconstruct_keys(_keys) ⇒ Object



7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
# File 'lib/syntax_tree/node.rb', line 7490

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

#format(q) ⇒ Object



7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
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
# File 'lib/syntax_tree/node.rb', line 7501

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

#options ⇒ Object



7541
7542
7543
# File 'lib/syntax_tree/node.rb', line 7541

def options
  ending[1..]
end