Class: SyntaxTree::Heredoc
Overview
Heredoc represents a heredoc string literal.
<<~DOC
contents
DOC
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:, location:, ending: nil, dedent: 0, parts: []) ⇒ 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:, location:, ending: nil, dedent: 0, parts: []) ⇒ Heredoc
Returns a new instance of Heredoc.
5806 5807 5808 5809 5810 5811 5812 5813 |
# File 'lib/syntax_tree/node.rb', line 5806 def initialize(beginning:, location:, ending: nil, dedent: 0, parts: []) @beginning = beginning @ending = ending @dedent = dedent @parts = parts @location = location @comments = [] end |
Instance Attribute Details
#beginning ⇒ Object (readonly)
- HeredocBeg
-
the opening of the heredoc
5791 5792 5793 |
# File 'lib/syntax_tree/node.rb', line 5791 def beginning @beginning end |
#comments ⇒ Object (readonly)
- Array[ Comment | EmbDoc ]
-
the comments attached to this node
5804 5805 5806 |
# File 'lib/syntax_tree/node.rb', line 5804 def comments @comments end |
#dedent ⇒ Object (readonly)
- Integer
-
how far to dedent the heredoc
5797 5798 5799 |
# File 'lib/syntax_tree/node.rb', line 5797 def dedent @dedent end |
#ending ⇒ Object (readonly)
- HeredocEnd
-
the ending of the heredoc
5794 5795 5796 |
# File 'lib/syntax_tree/node.rb', line 5794 def ending @ending end |
#parts ⇒ Object (readonly)
- Array[ StringEmbExpr | StringDVar | TStringContent ]
-
the parts of the
heredoc string literal
5801 5802 5803 |
# File 'lib/syntax_tree/node.rb', line 5801 def parts @parts end |
Instance Method Details
#===(other) ⇒ Object
5888 5889 5890 5891 |
# File 'lib/syntax_tree/node.rb', line 5888 def ===(other) other.is_a?(Heredoc) && beginning === other.beginning && ending === other.ending && ArrayMatch.call(parts, other.parts) end |
#accept(visitor) ⇒ Object
5815 5816 5817 |
# File 'lib/syntax_tree/node.rb', line 5815 def accept(visitor) visitor.visit_heredoc(self) end |
#child_nodes ⇒ Object Also known as: deconstruct
5819 5820 5821 |
# File 'lib/syntax_tree/node.rb', line 5819 def child_nodes [beginning, *parts, ending] end |
#copy(beginning: nil, location: nil, ending: nil, parts: nil) ⇒ Object
5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 |
# File 'lib/syntax_tree/node.rb', line 5823 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
5838 5839 5840 5841 5842 5843 5844 5845 5846 |
# File 'lib/syntax_tree/node.rb', line 5838 def deconstruct_keys(_keys) { beginning: beginning, location: location, ending: ending, parts: parts, comments: comments } end |
#format(q) ⇒ Object
5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 |
# File 'lib/syntax_tree/node.rb', line 5853 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 |