module Unparser::Generation
rubocop:disable Metrics/ModuleLength
Constants
- EXTRA_NL
Public Instance Methods
emit_heredoc_reminders()
click to toggle source
# File lib/unparser/generation.rb, line 10 def emit_heredoc_reminders; end
symbol_name()
click to toggle source
# File lib/unparser/generation.rb, line 12 def symbol_name; end
write_to_buffer()
click to toggle source
# File lib/unparser/generation.rb, line 14 def write_to_buffer with_comments { dispatch } self end
Private Instance Methods
children()
click to toggle source
# File lib/unparser/generation.rb, line 247 def children node.children end
conditional_parentheses(flag, &block)
click to toggle source
# File lib/unparser/generation.rb, line 239 def conditional_parentheses(flag, &block) if flag parentheses(&block) else block.call end end
delimited(nodes, delimiter = ', ', &block)
click to toggle source
# File lib/unparser/generation.rb, line 21 def delimited(nodes, delimiter = ', ', &block) return if nodes.empty? emit_join(nodes, block || method(:visit), -> { write(delimiter) }) end
emit_body(node, indent: true)
click to toggle source
# File lib/unparser/generation.rb, line 123 def emit_body(node, indent: true) if indent buffer.indent nl end if n_begin?(node) if node.children.one? visit_deep(node) else emit_body_inner(node) end else visit_deep(node) end if indent buffer.unindent nl end end
emit_body_ensure_rescue(node)
click to toggle source
# File lib/unparser/generation.rb, line 196 def emit_body_ensure_rescue(node) if n_ensure?(node) emit_ensure(node) elsif n_rescue?(node) emit_rescue_regular(node) else emit_body(node) end end
emit_body_inner(node)
click to toggle source
# File lib/unparser/generation.rb, line 145 def emit_body_inner(node) head, *tail = node.children emit_body_member(head) tail.each do |child| nl nl if EXTRA_NL.include?(child.type) emit_body_member(child) end end
emit_body_member(node)
click to toggle source
# File lib/unparser/generation.rb, line 158 def emit_body_member(node) if n_rescue?(node) emit_rescue_postcontrol(node) else visit_deep(node) end end
emit_body_rescue(node)
click to toggle source
# File lib/unparser/generation.rb, line 180 def emit_body_rescue(node) if n_rescue?(node) emit_rescue_regular(node) else emit_body(node) end end
emit_comments(comments)
click to toggle source
# File lib/unparser/generation.rb, line 77 def emit_comments(comments) max = comments.size - 1 comments.each_with_index do |comment, index| if comment.type.equal?(:document) buffer.append_without_prefix(comment.text.chomp) else write(comment.text) end buffer.nl if index < max end end
emit_comments_before(source_part = :expression)
click to toggle source
# File lib/unparser/generation.rb, line 69 def emit_comments_before(source_part = :expression) comments_before = comments.take_before(node, source_part) return if comments_before.empty? emit_comments(comments_before) buffer.nl end
emit_ensure(node)
click to toggle source
# File lib/unparser/generation.rb, line 166 def emit_ensure(node) body, ensure_body = node.children if body emit_body_rescue(body) else nl end write('ensure') emit_optional_body(ensure_body) end
emit_eof_comments()
click to toggle source
# File lib/unparser/generation.rb, line 60 def emit_eof_comments emit_eol_comments comments_left = comments.take_all return if comments_left.empty? buffer.nl emit_comments(comments_left) end
emit_eol_comments()
click to toggle source
# File lib/unparser/generation.rb, line 54 def emit_eol_comments comments.take_eol_comments.each do |comment| write(' ', comment.text) end end
emit_join(nodes, emit_node, emit_delimiter)
click to toggle source
# File lib/unparser/generation.rb, line 27 def emit_join(nodes, emit_node, emit_delimiter) return if nodes.empty? head, *tail = nodes emit_node.call(head) tail.each do |node| emit_delimiter.call emit_node.call(node) end end
emit_optional_body(node, indent: true)
click to toggle source
# File lib/unparser/generation.rb, line 115 def emit_optional_body(node, indent: true) if node emit_body(node, indent: indent) else nl end end
emit_optional_body_ensure_rescue(node)
click to toggle source
# File lib/unparser/generation.rb, line 188 def emit_optional_body_ensure_rescue(node) if node emit_body_ensure_rescue(node) else nl end end
emit_rescue_postcontrol(node)
click to toggle source
# File lib/unparser/generation.rb, line 206 def emit_rescue_postcontrol(node) writer = writer_with(Writer::Rescue, node) writer.emit_postcontrol writer.emit_heredoc_reminders end
emit_rescue_regular(node)
click to toggle source
# File lib/unparser/generation.rb, line 212 def emit_rescue_regular(node) writer_with(Writer::Rescue, node).emit_regular end
emitter(node)
click to toggle source
# File lib/unparser/generation.rb, line 220 def emitter(node) Emitter.emitter(**to_h.merge(node: node)) end
first_child()
click to toggle source
# File lib/unparser/generation.rb, line 235 def first_child children.first end
indented() { || ... }
click to toggle source
# File lib/unparser/generation.rb, line 106 def indented buffer = buffer() buffer.indent nl yield nl buffer.unindent end
k_end()
click to toggle source
# File lib/unparser/generation.rb, line 93 def k_end buffer.indent emit_comments_before(:end) buffer.unindent write('end') end
nl()
click to toggle source
# File lib/unparser/generation.rb, line 39 def nl emit_eol_comments buffer.nl end
parentheses(open = '(', close = ')') { || ... }
click to toggle source
# File lib/unparser/generation.rb, line 100 def parentheses(open = '(', close = ')') write(open) yield write(close) end
visit(node)
click to toggle source
# File lib/unparser/generation.rb, line 224 def visit(node) emitter(node).write_to_buffer end
visit_deep(node)
click to toggle source
# File lib/unparser/generation.rb, line 228 def visit_deep(node) emitter(node).tap do |emitter| emitter.write_to_buffer emitter.emit_heredoc_reminders end end
with_comments() { || ... }
click to toggle source
# File lib/unparser/generation.rb, line 44 def with_comments emit_comments_before if buffer.fresh_line? yield comments.consume(node) end
write(*strings)
click to toggle source
# File lib/unparser/generation.rb, line 89 def write(*strings) strings.each(&buffer.method(:append)) end
writer_with(klass, node)
click to toggle source
# File lib/unparser/generation.rb, line 216 def writer_with(klass, node) klass.new(to_h.merge(node: node)) end
ws()
click to toggle source
# File lib/unparser/generation.rb, line 50 def ws write(' ') end