unparser 0.4.9 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/unparser +1 -1
- data/lib/unparser.rb +98 -61
- data/lib/unparser/ast.rb +0 -1
- data/lib/unparser/ast/local_variable_scope.rb +6 -76
- data/lib/unparser/buffer.rb +19 -16
- data/lib/unparser/cli.rb +26 -39
- data/lib/unparser/color.rb +0 -3
- data/lib/unparser/comments.rb +0 -26
- data/lib/unparser/constants.rb +4 -53
- data/lib/unparser/diff.rb +0 -17
- data/lib/unparser/dsl.rb +0 -32
- data/lib/unparser/emitter.rb +23 -425
- data/lib/unparser/emitter/alias.rb +2 -8
- data/lib/unparser/emitter/args.rb +45 -0
- data/lib/unparser/emitter/argument.rb +8 -166
- data/lib/unparser/emitter/array.rb +27 -0
- data/lib/unparser/emitter/array_pattern.rb +29 -0
- data/lib/unparser/emitter/assignment.rb +36 -127
- data/lib/unparser/emitter/begin.rb +9 -84
- data/lib/unparser/emitter/binary.rb +7 -20
- data/lib/unparser/emitter/block.rb +57 -41
- data/lib/unparser/emitter/case.rb +6 -48
- data/lib/unparser/emitter/case_guard.rb +27 -0
- data/lib/unparser/emitter/case_match.rb +40 -0
- data/lib/unparser/emitter/cbase.rb +1 -3
- data/lib/unparser/emitter/class.rb +6 -26
- data/lib/unparser/emitter/const_pattern.rb +24 -0
- data/lib/unparser/emitter/def.rb +7 -51
- data/lib/unparser/emitter/defined.rb +2 -12
- data/lib/unparser/emitter/dstr.rb +22 -0
- data/lib/unparser/emitter/dsym.rb +41 -0
- data/lib/unparser/emitter/flipflop.rb +11 -10
- data/lib/unparser/emitter/float.rb +29 -0
- data/lib/unparser/emitter/flow_modifier.rb +8 -55
- data/lib/unparser/emitter/for.rb +5 -19
- data/lib/unparser/emitter/hash.rb +74 -0
- data/lib/unparser/emitter/hash_pattern.rb +67 -0
- data/lib/unparser/emitter/hookexe.rb +5 -11
- data/lib/unparser/emitter/if.rb +9 -73
- data/lib/unparser/emitter/in_match.rb +21 -0
- data/lib/unparser/emitter/in_pattern.rb +34 -0
- data/lib/unparser/emitter/index.rb +21 -88
- data/lib/unparser/emitter/kwbegin.rb +31 -0
- data/lib/unparser/emitter/lambda.rb +0 -8
- data/lib/unparser/emitter/masgn.rb +20 -0
- data/lib/unparser/emitter/match.rb +3 -17
- data/lib/unparser/emitter/match_alt.rb +23 -0
- data/lib/unparser/emitter/match_as.rb +21 -0
- data/lib/unparser/emitter/match_rest.rb +26 -0
- data/lib/unparser/emitter/match_var.rb +19 -0
- data/lib/unparser/emitter/mlhs.rb +40 -0
- data/lib/unparser/emitter/module.rb +3 -9
- data/lib/unparser/emitter/op_assign.rb +12 -27
- data/lib/unparser/emitter/pin.rb +19 -0
- data/lib/unparser/emitter/primitive.rb +93 -0
- data/lib/unparser/emitter/range.rb +35 -0
- data/lib/unparser/emitter/regexp.rb +35 -0
- data/lib/unparser/emitter/repetition.rb +17 -57
- data/lib/unparser/emitter/rescue.rb +1 -97
- data/lib/unparser/emitter/root.rb +17 -1
- data/lib/unparser/emitter/send.rb +10 -219
- data/lib/unparser/emitter/simple.rb +33 -0
- data/lib/unparser/emitter/splat.rb +2 -18
- data/lib/unparser/emitter/super.rb +1 -29
- data/lib/unparser/emitter/undef.rb +1 -9
- data/lib/unparser/emitter/variable.rb +1 -31
- data/lib/unparser/emitter/xstr.rb +72 -0
- data/lib/unparser/emitter/yield.rb +1 -9
- data/lib/unparser/generation.rb +250 -0
- data/lib/unparser/node_details.rb +21 -0
- data/lib/unparser/node_details/send.rb +62 -0
- data/lib/unparser/node_helpers.rb +45 -6
- data/lib/unparser/validation.rb +37 -35
- data/lib/unparser/writer.rb +15 -0
- data/lib/unparser/writer/binary.rb +99 -0
- data/lib/unparser/writer/dynamic_string.rb +229 -0
- data/lib/unparser/writer/resbody.rb +40 -0
- data/lib/unparser/writer/rescue.rb +39 -0
- data/lib/unparser/writer/send.rb +124 -0
- data/lib/unparser/{emitter → writer}/send/attribute_assignment.rb +11 -26
- data/lib/unparser/writer/send/binary.rb +27 -0
- data/lib/unparser/writer/send/conditional.rb +25 -0
- data/lib/unparser/writer/send/regular.rb +33 -0
- data/lib/unparser/{emitter → writer}/send/unary.rb +10 -17
- metadata +63 -31
- data/lib/unparser/emitter/empty.rb +0 -23
- data/lib/unparser/emitter/ensure.rb +0 -37
- data/lib/unparser/emitter/literal.rb +0 -10
- data/lib/unparser/emitter/literal/array.rb +0 -29
- data/lib/unparser/emitter/literal/dynamic.rb +0 -53
- data/lib/unparser/emitter/literal/dynamic_body.rb +0 -132
- data/lib/unparser/emitter/literal/execute_string.rb +0 -38
- data/lib/unparser/emitter/literal/hash.rb +0 -156
- data/lib/unparser/emitter/literal/primitive.rb +0 -145
- data/lib/unparser/emitter/literal/range.rb +0 -36
- data/lib/unparser/emitter/literal/regexp.rb +0 -114
- data/lib/unparser/emitter/literal/singleton.rb +0 -26
- data/lib/unparser/emitter/meta.rb +0 -16
- data/lib/unparser/emitter/redo.rb +0 -25
- data/lib/unparser/emitter/resbody.rb +0 -76
- data/lib/unparser/emitter/retry.rb +0 -25
- data/lib/unparser/emitter/send/binary.rb +0 -57
- data/lib/unparser/emitter/send/conditional.rb +0 -40
- data/lib/unparser/emitter/send/regular.rb +0 -40
- data/lib/unparser/preprocessor.rb +0 -159
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c326e601dd3bcfdc7363e456e07d1b15ef323ae095e39026e094205de5206119
|
4
|
+
data.tar.gz: a839f69163fab291b893a7e0702771848fc4632161414dff4b4528ad12568573
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b6821013d903d32988111efbea734cc1daaeb02d5fc4b3073c215365f365fd86d52a40c4b495175610d30c30a467670ea2c37357acbb8191623940673119cfae
|
7
|
+
data.tar.gz: 924afece12fe65ab3c4783420ca6ce200db08249830eb0a0cdd16b69ddb05f7377dc0900e832abd0957c97b0d4fe259eaa0c320c67e714d9daeed033575bd235
|
data/bin/unparser
CHANGED
data/lib/unparser.rb
CHANGED
@@ -6,6 +6,7 @@ require 'concord'
|
|
6
6
|
require 'diff/lcs'
|
7
7
|
require 'diff/lcs/hunk'
|
8
8
|
require 'mprelude'
|
9
|
+
require 'optparse'
|
9
10
|
require 'parser/current'
|
10
11
|
require 'procto'
|
11
12
|
require 'set'
|
@@ -15,6 +16,12 @@ module Unparser
|
|
15
16
|
# Unparser specific AST builder defaulting to modern AST format
|
16
17
|
class Builder < Parser::Builders::Default
|
17
18
|
modernize
|
19
|
+
|
20
|
+
def initialize
|
21
|
+
super
|
22
|
+
|
23
|
+
self.emit_file_line_as_literals = false
|
24
|
+
end
|
18
25
|
end
|
19
26
|
|
20
27
|
EMPTY_STRING = ''.freeze
|
@@ -32,12 +39,27 @@ module Unparser
|
|
32
39
|
# @api private
|
33
40
|
#
|
34
41
|
def self.unparse(node, comment_array = [])
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
42
|
+
return '' if node.nil?
|
43
|
+
|
44
|
+
Buffer.new.tap do |buffer|
|
45
|
+
Emitter::Root.new(
|
46
|
+
buffer,
|
47
|
+
node,
|
48
|
+
Comments.new(comment_array)
|
49
|
+
).write_to_buffer
|
50
|
+
end.content
|
51
|
+
end
|
52
|
+
|
53
|
+
# Unparse capturing errors
|
54
|
+
#
|
55
|
+
# This is mostly useful for writing testing tools against unparser.
|
56
|
+
#
|
57
|
+
# @param [Parser::AST::Node, nil] node
|
58
|
+
#
|
59
|
+
# @return [Either<Exception, String>]
|
60
|
+
def self.unparse_either(node)
|
61
|
+
MPrelude::Either
|
62
|
+
.wrap_error(Exception) { unparse(node) }
|
41
63
|
end
|
42
64
|
|
43
65
|
# Parse string into AST
|
@@ -74,8 +96,6 @@ module Unparser
|
|
74
96
|
# @return [Parser::Base]
|
75
97
|
#
|
76
98
|
# @api private
|
77
|
-
#
|
78
|
-
# ignore :reek:NestedIterators
|
79
99
|
def self.parser
|
80
100
|
Parser::CurrentRuby.new(Builder.new).tap do |parser|
|
81
101
|
parser.diagnostics.tap do |diagnostics|
|
@@ -100,75 +120,92 @@ module Unparser
|
|
100
120
|
# @param [String] source
|
101
121
|
#
|
102
122
|
# @return [Parser::Source::Buffer]
|
103
|
-
def self.buffer(source)
|
104
|
-
Parser::Source::Buffer.new(
|
105
|
-
buffer.source = source
|
106
|
-
end
|
123
|
+
def self.buffer(source, identification = '(string)')
|
124
|
+
Parser::Source::Buffer.new(identification, source: source)
|
107
125
|
end
|
108
126
|
end # Unparser
|
109
127
|
|
110
|
-
require 'unparser/buffer'
|
111
128
|
require 'unparser/node_helpers'
|
112
|
-
require 'unparser/preprocessor'
|
113
|
-
require 'unparser/comments'
|
114
|
-
require 'unparser/constants'
|
115
|
-
require 'unparser/dsl'
|
116
129
|
require 'unparser/ast'
|
117
130
|
require 'unparser/ast/local_variable_scope'
|
118
|
-
require 'unparser/
|
131
|
+
require 'unparser/buffer'
|
132
|
+
require 'unparser/generation'
|
119
133
|
require 'unparser/color'
|
134
|
+
require 'unparser/comments'
|
135
|
+
require 'unparser/constants'
|
136
|
+
require 'unparser/diff'
|
137
|
+
require 'unparser/dsl'
|
120
138
|
require 'unparser/emitter'
|
121
|
-
require 'unparser/emitter/
|
122
|
-
require 'unparser/emitter/
|
123
|
-
require 'unparser/emitter/literal/singleton'
|
124
|
-
require 'unparser/emitter/literal/dynamic'
|
125
|
-
require 'unparser/emitter/literal/regexp'
|
126
|
-
require 'unparser/emitter/literal/array'
|
127
|
-
require 'unparser/emitter/literal/hash'
|
128
|
-
require 'unparser/emitter/literal/range'
|
129
|
-
require 'unparser/emitter/literal/dynamic_body'
|
130
|
-
require 'unparser/emitter/literal/execute_string'
|
131
|
-
require 'unparser/emitter/meta'
|
132
|
-
require 'unparser/emitter/send'
|
133
|
-
require 'unparser/emitter/send/unary'
|
134
|
-
require 'unparser/emitter/send/binary'
|
135
|
-
require 'unparser/emitter/send/regular'
|
136
|
-
require 'unparser/emitter/send/conditional'
|
137
|
-
require 'unparser/emitter/send/attribute_assignment'
|
138
|
-
require 'unparser/emitter/block'
|
139
|
-
require 'unparser/emitter/assignment'
|
140
|
-
require 'unparser/emitter/variable'
|
141
|
-
require 'unparser/emitter/splat'
|
142
|
-
require 'unparser/emitter/cbase'
|
139
|
+
require 'unparser/emitter/alias'
|
140
|
+
require 'unparser/emitter/args'
|
143
141
|
require 'unparser/emitter/argument'
|
142
|
+
require 'unparser/emitter/array'
|
143
|
+
require 'unparser/emitter/array_pattern'
|
144
|
+
require 'unparser/emitter/assignment'
|
144
145
|
require 'unparser/emitter/begin'
|
145
|
-
require 'unparser/emitter/
|
146
|
-
require 'unparser/emitter/
|
147
|
-
require 'unparser/emitter/
|
146
|
+
require 'unparser/emitter/binary'
|
147
|
+
require 'unparser/emitter/block'
|
148
|
+
require 'unparser/emitter/case'
|
149
|
+
require 'unparser/emitter/case_guard'
|
150
|
+
require 'unparser/emitter/case_match'
|
151
|
+
require 'unparser/emitter/cbase'
|
148
152
|
require 'unparser/emitter/class'
|
149
|
-
require 'unparser/emitter/
|
150
|
-
require 'unparser/emitter/
|
153
|
+
require 'unparser/emitter/const_pattern'
|
154
|
+
require 'unparser/emitter/def'
|
151
155
|
require 'unparser/emitter/defined'
|
156
|
+
require 'unparser/emitter/dstr'
|
157
|
+
require 'unparser/emitter/dsym'
|
158
|
+
require 'unparser/emitter/flipflop'
|
159
|
+
require 'unparser/emitter/float'
|
160
|
+
require 'unparser/emitter/flow_modifier'
|
161
|
+
require 'unparser/emitter/for'
|
162
|
+
require 'unparser/emitter/hash'
|
163
|
+
require 'unparser/emitter/hash_pattern'
|
152
164
|
require 'unparser/emitter/hookexe'
|
153
|
-
require 'unparser/emitter/super'
|
154
|
-
require 'unparser/emitter/retry'
|
155
|
-
require 'unparser/emitter/redo'
|
156
165
|
require 'unparser/emitter/if'
|
157
|
-
require 'unparser/emitter/
|
158
|
-
require 'unparser/emitter/
|
159
|
-
require 'unparser/emitter/binary'
|
160
|
-
require 'unparser/emitter/case'
|
161
|
-
require 'unparser/emitter/for'
|
162
|
-
require 'unparser/emitter/repetition'
|
163
|
-
require 'unparser/emitter/root'
|
164
|
-
require 'unparser/emitter/match'
|
165
|
-
require 'unparser/emitter/empty'
|
166
|
-
require 'unparser/emitter/flipflop'
|
167
|
-
require 'unparser/emitter/rescue'
|
168
|
-
require 'unparser/emitter/resbody'
|
169
|
-
require 'unparser/emitter/ensure'
|
166
|
+
require 'unparser/emitter/in_match'
|
167
|
+
require 'unparser/emitter/in_pattern'
|
170
168
|
require 'unparser/emitter/index'
|
169
|
+
require 'unparser/emitter/kwbegin'
|
171
170
|
require 'unparser/emitter/lambda'
|
171
|
+
require 'unparser/emitter/masgn'
|
172
|
+
require 'unparser/emitter/match'
|
173
|
+
require 'unparser/emitter/match_alt'
|
174
|
+
require 'unparser/emitter/match_as'
|
175
|
+
require 'unparser/emitter/match_rest'
|
176
|
+
require 'unparser/emitter/match_var'
|
177
|
+
require 'unparser/emitter/mlhs'
|
178
|
+
require 'unparser/emitter/module'
|
179
|
+
require 'unparser/emitter/op_assign'
|
180
|
+
require 'unparser/emitter/pin'
|
181
|
+
require 'unparser/emitter/primitive'
|
182
|
+
require 'unparser/emitter/range'
|
183
|
+
require 'unparser/emitter/regexp'
|
184
|
+
require 'unparser/emitter/repetition'
|
185
|
+
require 'unparser/emitter/rescue'
|
186
|
+
require 'unparser/emitter/root'
|
187
|
+
require 'unparser/emitter/send'
|
188
|
+
require 'unparser/emitter/simple'
|
189
|
+
require 'unparser/emitter/splat'
|
190
|
+
require 'unparser/emitter/super'
|
191
|
+
require 'unparser/emitter/undef'
|
192
|
+
require 'unparser/emitter/variable'
|
193
|
+
require 'unparser/emitter/xstr'
|
194
|
+
require 'unparser/emitter/yield'
|
195
|
+
require 'unparser/writer'
|
196
|
+
require 'unparser/writer/binary'
|
197
|
+
require 'unparser/writer/dynamic_string'
|
198
|
+
require 'unparser/writer/resbody'
|
199
|
+
require 'unparser/writer/rescue'
|
200
|
+
require 'unparser/writer/send'
|
201
|
+
require 'unparser/writer/send/attribute_assignment'
|
202
|
+
require 'unparser/writer/send/binary'
|
203
|
+
require 'unparser/writer/send/regular'
|
204
|
+
require 'unparser/writer/send/unary'
|
205
|
+
require 'unparser/node_details'
|
206
|
+
require 'unparser/node_details/send'
|
207
|
+
require 'unparser/cli'
|
208
|
+
|
172
209
|
require 'unparser/validation'
|
173
210
|
# make it easy for zombie
|
174
211
|
require 'unparser/finalize'
|
data/lib/unparser/ast.rb
CHANGED
@@ -61,35 +61,22 @@ module Unparser
|
|
61
61
|
#
|
62
62
|
# @api private
|
63
63
|
#
|
64
|
-
def
|
65
|
-
condition_reads = AST.local_variable_reads(
|
64
|
+
def first_assignment_in?(left, right)
|
65
|
+
condition_reads = AST.local_variable_reads(right)
|
66
66
|
|
67
|
-
candidates = AST.local_variable_assignments(
|
68
|
-
|
69
|
-
condition_reads.include?(name)
|
67
|
+
candidates = AST.local_variable_assignments(left).select do |node|
|
68
|
+
condition_reads.include?(node.children.first)
|
70
69
|
end
|
71
70
|
|
72
|
-
candidates.any?
|
73
|
-
first_assignment?(node)
|
74
|
-
end
|
71
|
+
candidates.any?(&public_method(:first_assignment?))
|
75
72
|
end
|
76
73
|
|
77
74
|
private
|
78
75
|
|
79
|
-
# Match node
|
80
|
-
#
|
81
|
-
# @param [Parser::AST::Node] needle
|
82
|
-
# if block given
|
83
|
-
#
|
84
|
-
# @return [Boolean]
|
85
|
-
#
|
86
|
-
# @api private
|
87
|
-
#
|
88
76
|
def match(needle)
|
89
77
|
@items.each do |node, current, before|
|
90
78
|
return yield(current, before) if node.equal?(needle)
|
91
79
|
end
|
92
|
-
false
|
93
80
|
end
|
94
81
|
|
95
82
|
end # LocalVariableScope
|
@@ -137,25 +124,10 @@ module Unparser
|
|
137
124
|
|
138
125
|
private
|
139
126
|
|
140
|
-
# Return current set of local variables
|
141
|
-
#
|
142
|
-
# @return [Set<Symbol>]
|
143
|
-
#
|
144
|
-
# @api private
|
145
|
-
#
|
146
127
|
def current
|
147
128
|
@stack.last
|
148
129
|
end
|
149
130
|
|
150
|
-
# Visit node and record local variable state
|
151
|
-
#
|
152
|
-
# @param [Parser::AST::Node] node
|
153
|
-
#
|
154
|
-
# @return [undefined]
|
155
|
-
#
|
156
|
-
# @api private
|
157
|
-
#
|
158
|
-
# ignore :reek:LongYieldList
|
159
131
|
def visit(node, &block)
|
160
132
|
before = current.dup
|
161
133
|
enter(node)
|
@@ -166,75 +138,33 @@ module Unparser
|
|
166
138
|
leave(node)
|
167
139
|
end
|
168
140
|
|
169
|
-
# Record local variable state
|
170
|
-
#
|
171
|
-
# @param [Parser::AST::Node] node
|
172
|
-
#
|
173
|
-
# @return [undefined]
|
174
|
-
#
|
175
|
-
# @api private
|
176
|
-
#
|
177
141
|
def enter(node)
|
178
142
|
case node.type
|
179
143
|
when *RESET_NODES
|
180
144
|
push_reset
|
181
|
-
when
|
145
|
+
when ASSIGN_NODES
|
182
146
|
define(node.children.first)
|
183
147
|
when *INHERIT_NODES
|
184
148
|
push_inherit
|
185
149
|
end
|
186
150
|
end
|
187
151
|
|
188
|
-
# Pop from local variable state
|
189
|
-
#
|
190
|
-
# @param [Parser::AST::Node] node
|
191
|
-
#
|
192
|
-
# @return [undefined]
|
193
|
-
#
|
194
|
-
# @api private
|
195
|
-
#
|
196
152
|
def leave(node)
|
197
153
|
pop if CLOSE_NODES.include?(node.type)
|
198
154
|
end
|
199
155
|
|
200
|
-
# Define a local variable on current stack
|
201
|
-
#
|
202
|
-
# @param [Symbol] name
|
203
|
-
#
|
204
|
-
# @return [undefined]
|
205
|
-
#
|
206
|
-
# @api private
|
207
|
-
#
|
208
156
|
def define(name)
|
209
157
|
current << name
|
210
158
|
end
|
211
159
|
|
212
|
-
# Push reset scope on stack
|
213
|
-
#
|
214
|
-
# @return [undefined]
|
215
|
-
#
|
216
|
-
# @api private
|
217
|
-
#
|
218
160
|
def push_reset
|
219
161
|
@stack << Set.new
|
220
162
|
end
|
221
163
|
|
222
|
-
# Push inherited lvar scope on stack
|
223
|
-
#
|
224
|
-
# @return [undefined]
|
225
|
-
#
|
226
|
-
# @api private
|
227
|
-
#
|
228
164
|
def push_inherit
|
229
165
|
@stack << current.dup
|
230
166
|
end
|
231
167
|
|
232
|
-
# Pop lvar scope from stack
|
233
|
-
#
|
234
|
-
# @return [undefined]
|
235
|
-
#
|
236
|
-
# @api private
|
237
|
-
#
|
238
168
|
def pop
|
239
169
|
@stack.pop
|
240
170
|
end
|
data/lib/unparser/buffer.rb
CHANGED
@@ -3,8 +3,6 @@
|
|
3
3
|
module Unparser
|
4
4
|
|
5
5
|
# Buffer used to emit into
|
6
|
-
#
|
7
|
-
# ignore :reek:TooManyMethods
|
8
6
|
class Buffer
|
9
7
|
|
10
8
|
NL = "\n".freeze
|
@@ -82,6 +80,13 @@ module Unparser
|
|
82
80
|
self
|
83
81
|
end
|
84
82
|
|
83
|
+
def root_indent
|
84
|
+
before = @indent
|
85
|
+
@indent = 0
|
86
|
+
yield
|
87
|
+
@indent = before
|
88
|
+
end
|
89
|
+
|
85
90
|
# Test for a fresh line
|
86
91
|
#
|
87
92
|
# @return [Boolean]
|
@@ -114,26 +119,24 @@ module Unparser
|
|
114
119
|
@content[size_before..-1]
|
115
120
|
end
|
116
121
|
|
117
|
-
|
118
|
-
|
119
|
-
INDENT_SPACE = ' '.freeze
|
120
|
-
|
121
|
-
# Write prefix
|
122
|
-
#
|
123
|
-
# @return [String]
|
122
|
+
# Write raw fragment to buffer
|
124
123
|
#
|
125
|
-
#
|
126
|
-
#
|
127
|
-
def prefix
|
128
|
-
write(INDENT_SPACE * @indent)
|
129
|
-
end
|
130
|
-
|
131
|
-
# Write to content buffer
|
124
|
+
# Does not do indentation logic.
|
132
125
|
#
|
133
126
|
# @param [String] fragment
|
134
127
|
#
|
128
|
+
# @return [self]
|
135
129
|
def write(fragment)
|
136
130
|
@content << fragment
|
131
|
+
self
|
132
|
+
end
|
133
|
+
|
134
|
+
private
|
135
|
+
|
136
|
+
INDENT_SPACE = ' '.freeze
|
137
|
+
|
138
|
+
def prefix
|
139
|
+
write(INDENT_SPACE * @indent)
|
137
140
|
end
|
138
141
|
|
139
142
|
end # Buffer
|
data/lib/unparser/cli.rb
CHANGED
@@ -1,13 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'unparser'
|
4
|
-
require 'optparse'
|
5
|
-
|
6
3
|
module Unparser
|
7
4
|
# Unparser CLI implementation
|
8
|
-
#
|
9
|
-
# :reek:InstanceVariableAssumption
|
10
|
-
# :reek:TooManyInstanceVariables
|
11
5
|
class CLI
|
12
6
|
|
13
7
|
EXIT_SUCCESS = 0
|
@@ -26,6 +20,13 @@ module Unparser
|
|
26
20
|
def validation
|
27
21
|
Validation.from_path(path)
|
28
22
|
end
|
23
|
+
|
24
|
+
# Literal for this target
|
25
|
+
#
|
26
|
+
# @return [Validation]
|
27
|
+
def literal_validation
|
28
|
+
Validation::Literal.from_path(path)
|
29
|
+
end
|
29
30
|
end
|
30
31
|
|
31
32
|
# String target
|
@@ -38,6 +39,13 @@ module Unparser
|
|
38
39
|
def validation
|
39
40
|
Validation.from_string(string)
|
40
41
|
end
|
42
|
+
|
43
|
+
# Literal for this target
|
44
|
+
#
|
45
|
+
# @return [Validation]
|
46
|
+
def literal_validation
|
47
|
+
Validation::Literal.from_string(path)
|
48
|
+
end
|
41
49
|
end # String
|
42
50
|
end # Target
|
43
51
|
|
@@ -47,7 +55,7 @@ module Unparser
|
|
47
55
|
#
|
48
56
|
# @param [Array<String>] arguments
|
49
57
|
#
|
50
|
-
# @return [
|
58
|
+
# @return [Integer]
|
51
59
|
# the exit status
|
52
60
|
#
|
53
61
|
# @api private
|
@@ -63,15 +71,14 @@ module Unparser
|
|
63
71
|
# @return [undefined]
|
64
72
|
#
|
65
73
|
# @api private
|
66
|
-
#
|
67
|
-
# ignore :reek:TooManyStatements
|
68
74
|
def initialize(arguments)
|
69
75
|
@ignore = Set.new
|
70
76
|
@targets = []
|
71
77
|
|
72
|
-
@
|
73
|
-
@
|
74
|
-
@
|
78
|
+
@fail_fast = false
|
79
|
+
@success = true
|
80
|
+
@validation = :validation
|
81
|
+
@verbose = false
|
75
82
|
|
76
83
|
opts = OptionParser.new do |builder|
|
77
84
|
add_options(builder)
|
@@ -90,7 +97,7 @@ module Unparser
|
|
90
97
|
#
|
91
98
|
# @api private
|
92
99
|
#
|
93
|
-
#
|
100
|
+
# rubocop:disable Metrics/MethodLength
|
94
101
|
def add_options(builder)
|
95
102
|
builder.banner = 'usage: unparse [options] FILE [FILE]'
|
96
103
|
builder.separator('')
|
@@ -103,6 +110,9 @@ module Unparser
|
|
103
110
|
builder.on('-v', '--verbose') do
|
104
111
|
@verbose = true
|
105
112
|
end
|
113
|
+
builder.on('-l', '--literal') do
|
114
|
+
@validation = :literal_validation
|
115
|
+
end
|
106
116
|
builder.on('--ignore FILE') do |file|
|
107
117
|
@ignore.merge(targets(file))
|
108
118
|
end
|
@@ -110,10 +120,11 @@ module Unparser
|
|
110
120
|
@fail_fast = true
|
111
121
|
end
|
112
122
|
end
|
123
|
+
# rubocop:enable Metrics/MethodLength
|
113
124
|
|
114
125
|
# Return exit status
|
115
126
|
#
|
116
|
-
# @return [
|
127
|
+
# @return [Integer]
|
117
128
|
#
|
118
129
|
# @api private
|
119
130
|
#
|
@@ -128,16 +139,8 @@ module Unparser
|
|
128
139
|
|
129
140
|
private
|
130
141
|
|
131
|
-
# Process target
|
132
|
-
#
|
133
|
-
# @param [Target] target
|
134
|
-
#
|
135
|
-
# @return [undefined]
|
136
|
-
#
|
137
|
-
# @api private
|
138
|
-
#
|
139
142
|
def process_target(target)
|
140
|
-
validation = target.validation
|
143
|
+
validation = target.public_send(@validation)
|
141
144
|
if validation.success?
|
142
145
|
puts validation.report if @verbose
|
143
146
|
puts "Success: #{validation.identification}"
|
@@ -148,12 +151,6 @@ module Unparser
|
|
148
151
|
end
|
149
152
|
end
|
150
153
|
|
151
|
-
# Return effective targets
|
152
|
-
#
|
153
|
-
# @return [Enumerable<Target>]
|
154
|
-
#
|
155
|
-
# @api private
|
156
|
-
#
|
157
154
|
def effective_targets
|
158
155
|
if @start_with
|
159
156
|
reject = true
|
@@ -169,15 +166,6 @@ module Unparser
|
|
169
166
|
end.reject(&@ignore.method(:include?))
|
170
167
|
end
|
171
168
|
|
172
|
-
# Return targets for file name
|
173
|
-
#
|
174
|
-
# @param [String] file_name
|
175
|
-
#
|
176
|
-
# @return [Enumerable<Target>]
|
177
|
-
#
|
178
|
-
# @api private
|
179
|
-
#
|
180
|
-
# ignore :reek:UtilityFunction
|
181
169
|
def targets(file_name)
|
182
170
|
if File.directory?(file_name)
|
183
171
|
Dir.glob(File.join(file_name, '**/*.rb')).sort
|
@@ -187,6 +175,5 @@ module Unparser
|
|
187
175
|
Dir.glob(file_name).sort
|
188
176
|
end.map { |file| Target::Path.new(Pathname.new(file)) }
|
189
177
|
end
|
190
|
-
|
191
178
|
end # CLI
|
192
179
|
end # Unparser
|