Class: SyntaxTree::Heredoc
Overview
Heredoc represents a heredoc string literal.
"contents\n"
Constant Summary collapse
- SEPARATOR =
This is a very specific behavior where you want to force a newline, but don’t want to force the break parent.
PrettierPrint::Breakable.new(" ", 1, indent: false, force: true).freeze
Instance Attribute Summary collapse
-
#beginning ⇒ Object
readonly
- HeredocBeg
-
the opening of the heredoc.
-
#comments ⇒ Object
readonly
- Array[ Comment | EmbDoc ]
-
the comments attached to this node.
-
#dedent ⇒ Object
readonly
- Integer
-
how far to dedent the heredoc.
-
#ending ⇒ Object
readonly
- HeredocEnd
-
the ending of the heredoc.
-
#parts ⇒ Object
readonly
- Array[ StringEmbExpr | StringDVar | TStringContent ]
-
the parts of the heredoc string literal.
Attributes inherited from Node
Instance Method Summary collapse
- #===(other) ⇒ Object
- #accept(visitor) ⇒ Object
- #child_nodes ⇒ Object (also: #deconstruct)
- #copy(beginning: nil, location: nil, ending: nil, parts: nil) ⇒ Object
- #deconstruct_keys(_keys) ⇒ Object
- #format(q) ⇒ Object
-
#initialize(beginning:, ending: nil, dedent: 0, parts: [], location:) ⇒ Heredoc
constructor
A new instance of Heredoc.
Methods inherited from Node
#construct_keys, #pretty_print, #to_json
Constructor Details
#initialize(beginning:, ending: nil, dedent: 0, parts: [], location:) ⇒ Heredoc
Returns a new instance of Heredoc.
5692 5693 5694 5695 5696 5697 5698 5699 |
# File 'lib/syntax_tree/node.rb', line 5692 def initialize(beginning:, ending: nil, dedent: 0, parts: [], location:) @beginning = beginning @ending = ending @dedent = dedent @parts = parts @location = location @comments = [] end |
Instance Attribute Details
#beginning ⇒ Object (readonly)
- HeredocBeg
-
the opening of the heredoc
5677 5678 5679 |
# File 'lib/syntax_tree/node.rb', line 5677 def beginning @beginning end |
#comments ⇒ Object (readonly)
- Array[ Comment | EmbDoc ]
-
the comments attached to this node
5690 5691 5692 |
# File 'lib/syntax_tree/node.rb', line 5690 def comments @comments end |
#dedent ⇒ Object (readonly)
- Integer
-
how far to dedent the heredoc
5683 5684 5685 |
# File 'lib/syntax_tree/node.rb', line 5683 def dedent @dedent end |
#ending ⇒ Object (readonly)
- HeredocEnd
-
the ending of the heredoc
5680 5681 5682 |
# File 'lib/syntax_tree/node.rb', line 5680 def ending @ending end |
#parts ⇒ Object (readonly)
- Array[ StringEmbExpr | StringDVar | TStringContent ]
-
the parts of the
heredoc string literal
5687 5688 5689 |
# File 'lib/syntax_tree/node.rb', line 5687 def parts @parts end |
Instance Method Details
#===(other) ⇒ Object
5774 5775 5776 5777 |
# File 'lib/syntax_tree/node.rb', line 5774 def ===(other) other.is_a?(Heredoc) && beginning === other.beginning && ending === other.ending && ArrayMatch.call(parts, other.parts) end |
#accept(visitor) ⇒ Object
5701 5702 5703 |
# File 'lib/syntax_tree/node.rb', line 5701 def accept(visitor) visitor.visit_heredoc(self) end |
#child_nodes ⇒ Object Also known as: deconstruct
5705 5706 5707 |
# File 'lib/syntax_tree/node.rb', line 5705 def child_nodes [beginning, *parts, ending] end |
#copy(beginning: nil, location: nil, ending: nil, parts: nil) ⇒ Object
5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 |
# File 'lib/syntax_tree/node.rb', line 5709 def copy(beginning: nil, location: nil, ending: nil, parts: nil) node = Heredoc.new( beginning: beginning || self.beginning, location: location || self.location, ending: ending || self.ending, parts: parts || self.parts ) node.comments.concat(comments.map(&:copy)) node end |
#deconstruct_keys(_keys) ⇒ Object
5724 5725 5726 5727 5728 5729 5730 5731 5732 |
# File 'lib/syntax_tree/node.rb', line 5724 def deconstruct_keys(_keys) { beginning: beginning, location: location, ending: ending, parts: parts, comments: comments } end |
#format(q) ⇒ Object
5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 |
# File 'lib/syntax_tree/node.rb', line 5739 def format(q) q.group do q.format(beginning) q.line_suffix(priority: Formatter::HEREDOC_PRIORITY) do q.group do q.target << SEPARATOR parts.each do |part| if part.is_a?(TStringContent) value = part.value first = true value.each_line(chomp: true) do |line| if first first = false else q.target << SEPARATOR end q.text(line) end q.target << SEPARATOR if value.end_with?("\n") else q.format(part) end end q.format(ending) end end end end |