forked from mbj/unparser
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathunparser.rb
More file actions
95 lines (89 loc) · 2.83 KB
/
unparser.rb
File metadata and controls
95 lines (89 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
require 'set'
require 'abstract_type'
require 'procto'
require 'concord'
require 'parser/current'
# Library namespace
module Unparser
EMPTY_STRING = ''.freeze
EMPTY_ARRAY = [].freeze
# Unparse an AST (and, optionally, comments) into a string
#
# @param [Parser::AST::Node, nil] node
# @param [Array] comment_array
#
# @return [String]
#
# @api private
#
def self.unparse(node, comment_array = [])
node = Preprocessor.run(node)
buffer = Buffer.new
comments = Comments.new(comment_array)
root = Emitter::Root.new(Parser::AST::Node.new(:root, [node]), buffer, comments)
Emitter.emitter(node, root).write_to_buffer
buffer.content
end
end # Unparser
require 'unparser/buffer'
require 'unparser/node_helpers'
require 'unparser/preprocessor'
require 'unparser/comments'
require 'unparser/constants'
require 'unparser/dsl'
require 'unparser/ast'
require 'unparser/ast/local_variable_scope'
require 'unparser/emitter'
require 'unparser/emitter/literal'
require 'unparser/emitter/literal/primitive'
require 'unparser/emitter/literal/singleton'
require 'unparser/emitter/literal/dynamic'
require 'unparser/emitter/literal/regexp'
require 'unparser/emitter/literal/array'
require 'unparser/emitter/literal/hash'
require 'unparser/emitter/literal/range'
require 'unparser/emitter/literal/dynamic_body'
require 'unparser/emitter/literal/execute_string'
require 'unparser/emitter/meta'
require 'unparser/emitter/send'
require 'unparser/emitter/send/unary'
require 'unparser/emitter/send/binary'
require 'unparser/emitter/send/index'
require 'unparser/emitter/send/regular'
require 'unparser/emitter/send/conditional'
require 'unparser/emitter/send/arguments'
require 'unparser/emitter/send/attribute_assignment'
require 'unparser/emitter/block'
require 'unparser/emitter/assignment'
require 'unparser/emitter/variable'
require 'unparser/emitter/splat'
require 'unparser/emitter/cbase'
require 'unparser/emitter/argument'
require 'unparser/emitter/begin'
require 'unparser/emitter/flow_modifier'
require 'unparser/emitter/undef'
require 'unparser/emitter/def'
require 'unparser/emitter/class'
require 'unparser/emitter/module'
require 'unparser/emitter/op_assign'
require 'unparser/emitter/defined'
require 'unparser/emitter/hookexe'
require 'unparser/emitter/super'
require 'unparser/emitter/retry'
require 'unparser/emitter/redo'
require 'unparser/emitter/if'
require 'unparser/emitter/alias'
require 'unparser/emitter/yield'
require 'unparser/emitter/binary'
require 'unparser/emitter/case'
require 'unparser/emitter/for'
require 'unparser/emitter/repetition'
require 'unparser/emitter/root'
require 'unparser/emitter/match'
require 'unparser/emitter/empty'
require 'unparser/emitter/flipflop'
require 'unparser/emitter/rescue'
require 'unparser/emitter/resbody'
require 'unparser/emitter/ensure'
# make it easy for zombie
require 'unparser/finalize'