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, #end_char, #pretty_print, #start_char, #to_json, #to_mermaid
Constructor Details
#initialize(beginning:, ending: nil, dedent: 0, parts: [], location:) ⇒ Heredoc
Returns a new instance of Heredoc.
5738 5739 5740 5741 5742 5743 5744 5745 |
# File 'lib/syntax_tree/node.rb', line 5738 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
5723 5724 5725 |
# File 'lib/syntax_tree/node.rb', line 5723 def beginning @beginning end |
#comments ⇒ Object (readonly)
- Array[ Comment | EmbDoc ]
-
the comments attached to this node
5736 5737 5738 |
# File 'lib/syntax_tree/node.rb', line 5736 def comments @comments end |
#dedent ⇒ Object (readonly)
- Integer
-
how far to dedent the heredoc
5729 5730 5731 |
# File 'lib/syntax_tree/node.rb', line 5729 def dedent @dedent end |
#ending ⇒ Object (readonly)
- HeredocEnd
-
the ending of the heredoc
5726 5727 5728 |
# File 'lib/syntax_tree/node.rb', line 5726 def ending @ending end |
#parts ⇒ Object (readonly)
- Array[ StringEmbExpr | StringDVar | TStringContent ]
-
the parts of the
heredoc string literal
5733 5734 5735 |
# File 'lib/syntax_tree/node.rb', line 5733 def parts @parts end |
Instance Method Details
#===(other) ⇒ Object
5820 5821 5822 5823 |
# File 'lib/syntax_tree/node.rb', line 5820 def ===(other) other.is_a?(Heredoc) && beginning === other.beginning && ending === other.ending && ArrayMatch.call(parts, other.parts) end |
#accept(visitor) ⇒ Object
5747 5748 5749 |
# File 'lib/syntax_tree/node.rb', line 5747 def accept(visitor) visitor.visit_heredoc(self) end |
#child_nodes ⇒ Object Also known as: deconstruct
5751 5752 5753 |
# File 'lib/syntax_tree/node.rb', line 5751 def child_nodes [beginning, *parts, ending] end |
#copy(beginning: nil, location: nil, ending: nil, parts: nil) ⇒ Object
5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 |
# File 'lib/syntax_tree/node.rb', line 5755 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
5770 5771 5772 5773 5774 5775 5776 5777 5778 |
# File 'lib/syntax_tree/node.rb', line 5770 def deconstruct_keys(_keys) { beginning: beginning, location: location, ending: ending, parts: parts, comments: comments } end |
#format(q) ⇒ Object
5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 |
# File 'lib/syntax_tree/node.rb', line 5785 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 |