prettier 1.2.3 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +349 -358
- data/README.md +21 -93
- data/node_modules/prettier/index.js +54 -54
- data/package.json +1 -2
- data/rubocop.yml +26 -0
- data/src/haml/embed.js +87 -0
- data/src/haml/nodes/comment.js +27 -0
- data/src/haml/nodes/doctype.js +34 -0
- data/src/haml/nodes/filter.js +16 -0
- data/src/haml/nodes/hamlComment.js +21 -0
- data/src/haml/nodes/plain.js +6 -0
- data/src/haml/nodes/root.js +8 -0
- data/src/haml/nodes/script.js +33 -0
- data/src/haml/nodes/silentScript.js +59 -0
- data/src/haml/nodes/tag.js +193 -0
- data/src/haml/parser.js +22 -0
- data/src/haml/parser.rb +138 -0
- data/src/haml/printer.js +28 -0
- data/src/parser/getLang.js +32 -0
- data/src/parser/getNetcat.js +50 -0
- data/src/parser/netcat.js +15 -0
- data/src/parser/parseSync.js +33 -0
- data/src/parser/requestParse.js +74 -0
- data/src/parser/server.rb +61 -0
- data/src/plugin.js +26 -4
- data/src/prettier.js +1 -0
- data/src/rbs/parser.js +39 -0
- data/src/rbs/parser.rb +94 -0
- data/src/rbs/printer.js +605 -0
- data/src/ruby/embed.js +58 -8
- data/src/ruby/nodes/args.js +20 -6
- data/src/ruby/nodes/blocks.js +64 -59
- data/src/ruby/nodes/calls.js +12 -43
- data/src/ruby/nodes/class.js +17 -27
- data/src/ruby/nodes/commands.js +7 -2
- data/src/ruby/nodes/conditionals.js +1 -1
- data/src/ruby/nodes/hashes.js +28 -14
- data/src/ruby/nodes/hooks.js +9 -19
- data/src/ruby/nodes/loops.js +4 -10
- data/src/ruby/nodes/methods.js +8 -17
- data/src/ruby/nodes/params.js +22 -14
- data/src/ruby/nodes/patterns.js +9 -5
- data/src/ruby/nodes/rescue.js +32 -25
- data/src/ruby/nodes/return.js +0 -4
- data/src/ruby/nodes/statements.js +11 -13
- data/src/ruby/nodes/strings.js +27 -35
- data/src/ruby/parser.js +2 -49
- data/src/ruby/parser.rb +256 -232
- data/src/ruby/printer.js +0 -2
- data/src/ruby/toProc.js +4 -8
- data/src/utils.js +1 -0
- data/src/utils/isEmptyBodyStmt.js +7 -0
- data/src/utils/isEmptyStmts.js +9 -5
- data/src/utils/makeCall.js +3 -0
- data/src/utils/noIndent.js +1 -0
- data/src/utils/printEmptyCollection.js +9 -2
- metadata +26 -2
data/src/ruby/nodes/strings.js
CHANGED
@@ -4,6 +4,7 @@ const {
|
|
4
4
|
hardline,
|
5
5
|
indent,
|
6
6
|
literalline,
|
7
|
+
removeLines,
|
7
8
|
softline,
|
8
9
|
join
|
9
10
|
} = require("../../prettier");
|
@@ -31,17 +32,10 @@ function isSingleQuotable(node) {
|
|
31
32
|
|
32
33
|
const quotePattern = new RegExp("\\\\([\\s\\S])|(['\"])", "g");
|
33
34
|
|
34
|
-
function normalizeQuotes(content, enclosingQuote
|
35
|
-
const replaceOther = originalQuote === '"';
|
36
|
-
const otherQuote = enclosingQuote === '"' ? "'" : '"';
|
37
|
-
|
35
|
+
function normalizeQuotes(content, enclosingQuote) {
|
38
36
|
// Escape and unescape single and double quotes as needed to be able to
|
39
37
|
// enclose `content` with `enclosingQuote`.
|
40
38
|
return content.replace(quotePattern, (match, escaped, quote) => {
|
41
|
-
if (replaceOther && escaped === otherQuote) {
|
42
|
-
return escaped;
|
43
|
-
}
|
44
|
-
|
45
39
|
if (quote === enclosingQuote) {
|
46
40
|
return `\\${quote}`;
|
47
41
|
}
|
@@ -97,12 +91,34 @@ function printDynaSymbol(path, opts, print) {
|
|
97
91
|
return concat([":", quote].concat(path.map(print, "body")).concat(quote));
|
98
92
|
}
|
99
93
|
|
94
|
+
function printStringConcat(path, opts, print) {
|
95
|
+
const [leftDoc, rightDoc] = path.map(print, "body");
|
96
|
+
|
97
|
+
return group(concat([leftDoc, " \\", indent(concat([hardline, rightDoc]))]));
|
98
|
+
}
|
99
|
+
|
100
100
|
// Prints out an interpolated variable in the string by converting it into an
|
101
101
|
// embedded expression.
|
102
102
|
function printStringDVar(path, opts, print) {
|
103
103
|
return concat(["#{", path.call(print, "body", 0), "}"]);
|
104
104
|
}
|
105
105
|
|
106
|
+
function printStringEmbExpr(path, opts, print) {
|
107
|
+
const node = path.getValue();
|
108
|
+
const parts = path.call(print, "body", 0);
|
109
|
+
|
110
|
+
// If the contents of this embedded expression were originally on the same
|
111
|
+
// line in the source, then we're going to leave them in place and assume
|
112
|
+
// that's the way the developer wanted this expression represented.
|
113
|
+
if (node.sl === node.el) {
|
114
|
+
return concat(["#{", removeLines(parts), "}"]);
|
115
|
+
}
|
116
|
+
|
117
|
+
return group(
|
118
|
+
concat(["#{", indent(concat([softline, parts])), concat([softline, "}"])])
|
119
|
+
);
|
120
|
+
}
|
121
|
+
|
106
122
|
// Prints out a literal string. This function does its best to respect the
|
107
123
|
// wishes of the user with regards to single versus double quotes, but if the
|
108
124
|
// string contains any escape expressions then it will just keep the original
|
@@ -131,10 +147,7 @@ function printStringLiteral(path, { rubySingleQuote }, print) {
|
|
131
147
|
}
|
132
148
|
|
133
149
|
// In this case, the part of the string is just regular string content
|
134
|
-
return join(
|
135
|
-
literalline,
|
136
|
-
normalizeQuotes(part.body, quote, node.quote).split("\n")
|
137
|
-
);
|
150
|
+
return join(literalline, normalizeQuotes(part.body, quote).split("\n"));
|
138
151
|
});
|
139
152
|
|
140
153
|
return concat([quote].concat(parts).concat(getClosingQuote(quote)));
|
@@ -155,30 +168,9 @@ function printXStringLiteral(path, opts, print) {
|
|
155
168
|
module.exports = {
|
156
169
|
"@CHAR": printChar,
|
157
170
|
dyna_symbol: printDynaSymbol,
|
158
|
-
string_concat:
|
159
|
-
group(
|
160
|
-
concat([
|
161
|
-
path.call(print, "body", 0),
|
162
|
-
" \\",
|
163
|
-
indent(concat([hardline, path.call(print, "body", 1)]))
|
164
|
-
])
|
165
|
-
),
|
171
|
+
string_concat: printStringConcat,
|
166
172
|
string_dvar: printStringDVar,
|
167
|
-
string_embexpr:
|
168
|
-
const parts = path.call(print, "body", 0);
|
169
|
-
|
170
|
-
// If the interpolated expression is inside of a heredoc or an xstring
|
171
|
-
// literal (a string that gets sent to the command line) then we don't want
|
172
|
-
// to automatically indent, as this can lead to some very odd looking
|
173
|
-
// expressions
|
174
|
-
if (["heredoc", "xstring_literal"].includes(path.getParentNode().type)) {
|
175
|
-
return concat(["#{", parts, "}"]);
|
176
|
-
}
|
177
|
-
|
178
|
-
return group(
|
179
|
-
concat(["#{", indent(concat([softline, parts])), concat([softline, "}"])])
|
180
|
-
);
|
181
|
-
},
|
173
|
+
string_embexpr: printStringEmbExpr,
|
182
174
|
string_literal: printStringLiteral,
|
183
175
|
symbol_literal: printSymbolLiteral,
|
184
176
|
xstring_literal: printXStringLiteral
|
data/src/ruby/parser.js
CHANGED
@@ -1,58 +1,11 @@
|
|
1
|
-
const
|
2
|
-
const path = require("path");
|
3
|
-
|
4
|
-
// In order to properly parse ruby code, we need to tell the ruby process to
|
5
|
-
// parse using UTF-8. Unfortunately, the way that you accomplish this looks
|
6
|
-
// differently depending on your platform.
|
7
|
-
const LANG = (() => {
|
8
|
-
const { env, platform } = process;
|
9
|
-
const envValue = env.LC_ALL || env.LC_CTYPE || env.LANG;
|
10
|
-
|
11
|
-
// If an env var is set for the locale that already includes UTF-8 in the
|
12
|
-
// name, then assume we can go with that.
|
13
|
-
if (envValue && envValue.includes("UTF-8")) {
|
14
|
-
return envValue;
|
15
|
-
}
|
16
|
-
|
17
|
-
// Otherwise, we're going to guess which encoding to use based on the system.
|
18
|
-
// This is probably not the best approach in the world, as you could be on
|
19
|
-
// linux and not have C.UTF-8, but in that case you're probably passing an env
|
20
|
-
// var for it. This object below represents all of the possible values of
|
21
|
-
// process.platform per:
|
22
|
-
// https://nodejs.org/api/process.html#process_process_platform
|
23
|
-
return {
|
24
|
-
aix: "C.UTF-8",
|
25
|
-
darwin: "en_US.UTF-8",
|
26
|
-
freebsd: "C.UTF-8",
|
27
|
-
linux: "C.UTF-8",
|
28
|
-
openbsd: "C.UTF-8",
|
29
|
-
sunos: "C.UTF-8",
|
30
|
-
win32: ".UTF-8"
|
31
|
-
}[platform];
|
32
|
-
})();
|
1
|
+
const parseSync = require("../parser/parseSync");
|
33
2
|
|
34
3
|
// This function is responsible for taking an input string of text and returning
|
35
4
|
// to prettier a JavaScript object that is the equivalent AST that represents
|
36
5
|
// the code stored in that string. We accomplish this by spawning a new Ruby
|
37
6
|
// process of parser.rb and reading JSON off STDOUT.
|
38
7
|
function parse(text, _parsers, _opts) {
|
39
|
-
|
40
|
-
"ruby",
|
41
|
-
["--disable-gems", path.join(__dirname, "./parser.rb")],
|
42
|
-
{
|
43
|
-
env: Object.assign({}, process.env, { LANG }),
|
44
|
-
input: text,
|
45
|
-
maxBuffer: 10 * 1024 * 1024 // 10MB
|
46
|
-
}
|
47
|
-
);
|
48
|
-
|
49
|
-
const error = child.stderr.toString();
|
50
|
-
if (error) {
|
51
|
-
throw new Error(error);
|
52
|
-
}
|
53
|
-
|
54
|
-
const response = child.stdout.toString();
|
55
|
-
return JSON.parse(response);
|
8
|
+
return parseSync("ruby", text);
|
56
9
|
}
|
57
10
|
|
58
11
|
const pragmaPattern = /#\s*@(prettier|format)/;
|
data/src/ruby/parser.rb
CHANGED
@@ -14,14 +14,19 @@ if (RUBY_MAJOR < 2) || ((RUBY_MAJOR == 2) && (RUBY_MINOR < 5))
|
|
14
14
|
end
|
15
15
|
|
16
16
|
require 'delegate'
|
17
|
-
require 'json'
|
17
|
+
require 'json'
|
18
18
|
require 'ripper'
|
19
19
|
|
20
|
-
module Prettier
|
20
|
+
module Prettier
|
21
|
+
end
|
21
22
|
|
22
23
|
class Prettier::Parser < Ripper
|
23
24
|
attr_reader :source, :lines, :scanner_events, :line_counts
|
24
25
|
|
26
|
+
# This is an attr_accessor so Stmts objects can grab comments out of this
|
27
|
+
# array and attach them to themselves.
|
28
|
+
attr_accessor :comments
|
29
|
+
|
25
30
|
def initialize(source, *args)
|
26
31
|
super(source, *args)
|
27
32
|
|
@@ -40,6 +45,13 @@ class Prettier::Parser < Ripper
|
|
40
45
|
@source.lines.each { |line| @line_counts << @line_counts.last + line.size }
|
41
46
|
end
|
42
47
|
|
48
|
+
def self.parse(source)
|
49
|
+
builder = new(source)
|
50
|
+
|
51
|
+
response = builder.parse
|
52
|
+
response unless builder.error?
|
53
|
+
end
|
54
|
+
|
43
55
|
private
|
44
56
|
|
45
57
|
# This represents the current place in the source string that we've gotten to
|
@@ -93,8 +105,8 @@ class Prettier::Parser < Ripper
|
|
93
105
|
node = {
|
94
106
|
type: :"@#{event}",
|
95
107
|
body: value,
|
96
|
-
|
97
|
-
|
108
|
+
sl: lineno,
|
109
|
+
el: lineno,
|
98
110
|
sc: char_pos,
|
99
111
|
ec: ec
|
100
112
|
}
|
@@ -118,8 +130,9 @@ class Prettier::Parser < Ripper
|
|
118
130
|
@comments << {
|
119
131
|
type: :@comment,
|
120
132
|
value: value[1..-1].chomp.force_encoding('UTF-8'),
|
121
|
-
|
122
|
-
|
133
|
+
inline: value.strip != lines[lineno - 1],
|
134
|
+
sl: lineno,
|
135
|
+
el: lineno,
|
123
136
|
sc: char_pos,
|
124
137
|
ec: char_pos + value.length - 1
|
125
138
|
}
|
@@ -138,8 +151,8 @@ class Prettier::Parser < Ripper
|
|
138
151
|
{
|
139
152
|
type: :ignored_nl,
|
140
153
|
body: nil,
|
141
|
-
|
142
|
-
|
154
|
+
sl: lineno,
|
155
|
+
el: lineno,
|
143
156
|
sc: char_pos,
|
144
157
|
ec: char_pos
|
145
158
|
}
|
@@ -191,7 +204,7 @@ class Prettier::Parser < Ripper
|
|
191
204
|
find_scanner_event(:@kw, 'BEGIN').merge!(
|
192
205
|
type: :BEGIN,
|
193
206
|
body: [beging, stmts],
|
194
|
-
|
207
|
+
el: ending[:el],
|
195
208
|
ec: ending[:ec]
|
196
209
|
)
|
197
210
|
end
|
@@ -215,7 +228,7 @@ class Prettier::Parser < Ripper
|
|
215
228
|
find_scanner_event(:@kw, 'END').merge!(
|
216
229
|
type: :END,
|
217
230
|
body: [beging, stmts],
|
218
|
-
|
231
|
+
el: ending[:el],
|
219
232
|
ec: ending[:ec]
|
220
233
|
)
|
221
234
|
end
|
@@ -234,9 +247,9 @@ class Prettier::Parser < Ripper
|
|
234
247
|
{
|
235
248
|
type: :alias,
|
236
249
|
body: [left, right],
|
237
|
-
|
250
|
+
sl: beging[:sl],
|
238
251
|
sc: beging[:sc],
|
239
|
-
|
252
|
+
el: ending[:el],
|
240
253
|
ec: ending[:ec]
|
241
254
|
}
|
242
255
|
end
|
@@ -262,9 +275,9 @@ class Prettier::Parser < Ripper
|
|
262
275
|
{
|
263
276
|
type: :aref,
|
264
277
|
body: [collection, index],
|
265
|
-
|
278
|
+
sl: collection[:sl],
|
266
279
|
sc: collection[:sc],
|
267
|
-
|
280
|
+
el: ending[:el],
|
268
281
|
ec: ending[:ec]
|
269
282
|
}
|
270
283
|
end
|
@@ -278,9 +291,9 @@ class Prettier::Parser < Ripper
|
|
278
291
|
{
|
279
292
|
type: :aref_field,
|
280
293
|
body: [collection, index],
|
281
|
-
|
294
|
+
sl: collection[:sl],
|
282
295
|
sc: collection[:sc],
|
283
|
-
|
296
|
+
el: ending[:el],
|
284
297
|
ec: ending[:ec]
|
285
298
|
}
|
286
299
|
end
|
@@ -292,9 +305,9 @@ class Prettier::Parser < Ripper
|
|
292
305
|
{
|
293
306
|
type: :args,
|
294
307
|
body: [],
|
295
|
-
|
308
|
+
sl: lineno,
|
296
309
|
sc: char_pos,
|
297
|
-
|
310
|
+
el: lineno,
|
298
311
|
ec: char_pos
|
299
312
|
}
|
300
313
|
end
|
@@ -307,7 +320,7 @@ class Prettier::Parser < Ripper
|
|
307
320
|
if args[:body].empty?
|
308
321
|
arg.merge(type: :args, body: [arg])
|
309
322
|
else
|
310
|
-
args.merge!(body: args[:body] << arg,
|
323
|
+
args.merge!(body: args[:body] << arg, el: arg[:el], ec: arg[:ec])
|
311
324
|
end
|
312
325
|
end
|
313
326
|
|
@@ -320,7 +333,7 @@ class Prettier::Parser < Ripper
|
|
320
333
|
args.merge(
|
321
334
|
type: :args_add_block,
|
322
335
|
body: [args, block],
|
323
|
-
|
336
|
+
el: ending[:el],
|
324
337
|
ec: ending[:ec]
|
325
338
|
)
|
326
339
|
end
|
@@ -335,9 +348,9 @@ class Prettier::Parser < Ripper
|
|
335
348
|
{
|
336
349
|
type: :args_add_star,
|
337
350
|
body: [args, part],
|
338
|
-
|
351
|
+
sl: beging[:sl],
|
339
352
|
sc: beging[:sc],
|
340
|
-
|
353
|
+
el: ending[:el],
|
341
354
|
ec: ending[:ec]
|
342
355
|
}
|
343
356
|
end
|
@@ -357,14 +370,14 @@ class Prettier::Parser < Ripper
|
|
357
370
|
# If the arguments exceed the ending of the parentheses, then we know we
|
358
371
|
# have a heredoc in the arguments, and we need to use the bounds of the
|
359
372
|
# arguments to determine how large the arg_paren is.
|
360
|
-
ending = (args && args[:
|
373
|
+
ending = (args && args[:el] > rparen[:el]) ? args : rparen
|
361
374
|
|
362
375
|
{
|
363
376
|
type: :arg_paren,
|
364
377
|
body: [args],
|
365
|
-
|
378
|
+
sl: beging[:sl],
|
366
379
|
sc: beging[:sc],
|
367
|
-
|
380
|
+
el: ending[:el],
|
368
381
|
ec: ending[:ec]
|
369
382
|
}
|
370
383
|
end
|
@@ -381,9 +394,9 @@ class Prettier::Parser < Ripper
|
|
381
394
|
{
|
382
395
|
type: :array,
|
383
396
|
body: [contents],
|
384
|
-
|
397
|
+
sl: beging[:sl],
|
385
398
|
sc: beging[:sc],
|
386
|
-
|
399
|
+
el: ending[:el],
|
387
400
|
ec: ending[:ec]
|
388
401
|
}
|
389
402
|
else
|
@@ -393,7 +406,7 @@ class Prettier::Parser < Ripper
|
|
393
406
|
ending.merge!(
|
394
407
|
type: :array,
|
395
408
|
body: [contents],
|
396
|
-
|
409
|
+
sl: contents[:sl],
|
397
410
|
sc: contents[:sc]
|
398
411
|
)
|
399
412
|
end
|
@@ -407,9 +420,9 @@ class Prettier::Parser < Ripper
|
|
407
420
|
{
|
408
421
|
type: :aryptn,
|
409
422
|
body: [const, preargs, splatarg, postargs],
|
410
|
-
|
423
|
+
sl: pieces[0][:sl],
|
411
424
|
sc: pieces[0][:sc],
|
412
|
-
|
425
|
+
el: pieces[-1][:el],
|
413
426
|
ec: pieces[-1][:ec]
|
414
427
|
}
|
415
428
|
end
|
@@ -421,7 +434,7 @@ class Prettier::Parser < Ripper
|
|
421
434
|
left.merge(
|
422
435
|
type: :assign,
|
423
436
|
body: [left, right],
|
424
|
-
|
437
|
+
el: right[:el],
|
425
438
|
ec: right[:ec]
|
426
439
|
)
|
427
440
|
end
|
@@ -433,9 +446,9 @@ class Prettier::Parser < Ripper
|
|
433
446
|
{
|
434
447
|
type: :assoc_new,
|
435
448
|
body: [key, value],
|
436
|
-
|
449
|
+
sl: key[:sl],
|
437
450
|
sc: key[:sc],
|
438
|
-
|
451
|
+
el: value[:el],
|
439
452
|
ec: value[:ec]
|
440
453
|
}
|
441
454
|
end
|
@@ -446,7 +459,7 @@ class Prettier::Parser < Ripper
|
|
446
459
|
find_scanner_event(:@op, '**').merge!(
|
447
460
|
type: :assoc_splat,
|
448
461
|
body: [contents],
|
449
|
-
|
462
|
+
el: contents[:el],
|
450
463
|
ec: contents[:ec]
|
451
464
|
)
|
452
465
|
end
|
@@ -459,9 +472,9 @@ class Prettier::Parser < Ripper
|
|
459
472
|
{
|
460
473
|
type: :assoclist_from_args,
|
461
474
|
body: assocs,
|
462
|
-
|
475
|
+
sl: assocs[0][:sl],
|
463
476
|
sc: assocs[0][:sc],
|
464
|
-
|
477
|
+
el: assocs[-1][:el],
|
465
478
|
ec: assocs[-1][:ec]
|
466
479
|
}
|
467
480
|
end
|
@@ -474,9 +487,9 @@ class Prettier::Parser < Ripper
|
|
474
487
|
{
|
475
488
|
type: :bare_assoc_hash,
|
476
489
|
body: assoc_news,
|
477
|
-
|
490
|
+
sl: assoc_news[0][:sl],
|
478
491
|
sc: assoc_news[0][:sc],
|
479
|
-
|
492
|
+
el: assoc_news[-1][:el],
|
480
493
|
ec: assoc_news[-1][:ec]
|
481
494
|
}
|
482
495
|
end
|
@@ -497,7 +510,7 @@ class Prettier::Parser < Ripper
|
|
497
510
|
beging.merge!(
|
498
511
|
type: :begin,
|
499
512
|
body: [bodystmt],
|
500
|
-
|
513
|
+
el: bodystmt[:el],
|
501
514
|
ec: bodystmt[:ec]
|
502
515
|
)
|
503
516
|
end
|
@@ -508,9 +521,9 @@ class Prettier::Parser < Ripper
|
|
508
521
|
{
|
509
522
|
type: :binary,
|
510
523
|
body: [left, oper, right],
|
511
|
-
|
524
|
+
sl: left[:sl],
|
512
525
|
sc: left[:sc],
|
513
|
-
|
526
|
+
el: right[:el],
|
514
527
|
ec: right[:ec]
|
515
528
|
}
|
516
529
|
end
|
@@ -530,9 +543,9 @@ class Prettier::Parser < Ripper
|
|
530
543
|
{
|
531
544
|
type: :block_var,
|
532
545
|
body: [params, locals],
|
533
|
-
|
546
|
+
sl: beging[:sl],
|
534
547
|
sc: beging[:sc],
|
535
|
-
|
548
|
+
el: ending[:el],
|
536
549
|
ec: ending[:ec]
|
537
550
|
}
|
538
551
|
end
|
@@ -543,7 +556,7 @@ class Prettier::Parser < Ripper
|
|
543
556
|
find_scanner_event(:@op, '&').merge!(
|
544
557
|
type: :blockarg,
|
545
558
|
body: [ident],
|
546
|
-
|
559
|
+
el: ident[:el],
|
547
560
|
ec: ident[:ec]
|
548
561
|
)
|
549
562
|
end
|
@@ -574,9 +587,9 @@ class Prettier::Parser < Ripper
|
|
574
587
|
BodyStmt.new(
|
575
588
|
type: :bodystmt,
|
576
589
|
body: [stmts, rescued, ensured, elsed],
|
577
|
-
|
590
|
+
sl: lineno,
|
578
591
|
sc: char_pos,
|
579
|
-
|
592
|
+
el: lineno,
|
580
593
|
ec: char_pos
|
581
594
|
)
|
582
595
|
end
|
@@ -594,9 +607,9 @@ class Prettier::Parser < Ripper
|
|
594
607
|
{
|
595
608
|
type: :brace_block,
|
596
609
|
body: [block_var, stmts],
|
597
|
-
|
610
|
+
sl: beging[:sl],
|
598
611
|
sc: beging[:sc],
|
599
|
-
|
612
|
+
el: ending[:el],
|
600
613
|
ec: ending[:ec]
|
601
614
|
}
|
602
615
|
end
|
@@ -617,7 +630,7 @@ class Prettier::Parser < Ripper
|
|
617
630
|
beging.merge!(
|
618
631
|
type: :break,
|
619
632
|
body: [args_add_block],
|
620
|
-
|
633
|
+
el: args_add_block[:el],
|
621
634
|
ec: args_add_block[:ec]
|
622
635
|
)
|
623
636
|
end
|
@@ -634,10 +647,6 @@ class Prettier::Parser < Ripper
|
|
634
647
|
# foo.(1, 2, 3)
|
635
648
|
#
|
636
649
|
def on_call(receiver, oper, sending)
|
637
|
-
# Make sure we take the operator out of the scanner events so that it
|
638
|
-
# doesn't get confused for a unary operator later.
|
639
|
-
scanner_events.delete(oper)
|
640
|
-
|
641
650
|
ending = sending
|
642
651
|
|
643
652
|
if sending == :call
|
@@ -651,9 +660,9 @@ class Prettier::Parser < Ripper
|
|
651
660
|
{
|
652
661
|
type: :call,
|
653
662
|
body: [receiver, oper, sending],
|
654
|
-
|
663
|
+
sl: receiver[:sl],
|
655
664
|
sc: receiver[:sc],
|
656
|
-
|
665
|
+
el: ending[:el],
|
657
666
|
ec: ending[:ec]
|
658
667
|
}
|
659
668
|
end
|
@@ -672,7 +681,7 @@ class Prettier::Parser < Ripper
|
|
672
681
|
|
673
682
|
beging.merge!(
|
674
683
|
body: [switch, consequent],
|
675
|
-
|
684
|
+
el: consequent[:el],
|
676
685
|
ec: consequent[:ec]
|
677
686
|
)
|
678
687
|
end
|
@@ -714,9 +723,9 @@ class Prettier::Parser < Ripper
|
|
714
723
|
{
|
715
724
|
type: :class,
|
716
725
|
body: [const, superclass, bodystmt],
|
717
|
-
|
726
|
+
sl: beging[:sl],
|
718
727
|
sc: beging[:sc],
|
719
|
-
|
728
|
+
el: ending[:el],
|
720
729
|
ec: ending[:ec]
|
721
730
|
}
|
722
731
|
end
|
@@ -728,9 +737,9 @@ class Prettier::Parser < Ripper
|
|
728
737
|
{
|
729
738
|
type: :command,
|
730
739
|
body: [ident, args],
|
731
|
-
|
740
|
+
sl: ident[:sl],
|
732
741
|
sc: ident[:sc],
|
733
|
-
|
742
|
+
el: args[:el],
|
734
743
|
ec: args[:ec]
|
735
744
|
}
|
736
745
|
end
|
@@ -740,19 +749,14 @@ class Prettier::Parser < Ripper
|
|
740
749
|
# of the method, the operator being used to send the method, the name of
|
741
750
|
# the method, and the arguments being passed to the method.
|
742
751
|
def on_command_call(receiver, oper, ident, args)
|
743
|
-
# Make sure we take the operator out of the scanner events so that it
|
744
|
-
# doesn't get confused for a unary operator later.
|
745
|
-
scanner_events.delete(oper)
|
746
|
-
|
747
|
-
# Grab the ending from either the arguments or the method being sent
|
748
752
|
ending = args || ident
|
749
753
|
|
750
754
|
{
|
751
755
|
type: :command_call,
|
752
756
|
body: [receiver, oper, ident, args],
|
753
|
-
|
757
|
+
sl: receiver[:sl],
|
754
758
|
sc: receiver[:sc],
|
755
|
-
|
759
|
+
el: ending[:el],
|
756
760
|
ec: ending[:ec]
|
757
761
|
}
|
758
762
|
end
|
@@ -767,9 +771,9 @@ class Prettier::Parser < Ripper
|
|
767
771
|
{
|
768
772
|
type: :const_path_field,
|
769
773
|
body: [left, const],
|
770
|
-
|
774
|
+
sl: left[:sl],
|
771
775
|
sc: left[:sc],
|
772
|
-
|
776
|
+
el: const[:el],
|
773
777
|
ec: const[:ec]
|
774
778
|
}
|
775
779
|
end
|
@@ -784,9 +788,9 @@ class Prettier::Parser < Ripper
|
|
784
788
|
{
|
785
789
|
type: :const_path_ref,
|
786
790
|
body: [left, const],
|
787
|
-
|
791
|
+
sl: left[:sl],
|
788
792
|
sc: left[:sc],
|
789
|
-
|
793
|
+
el: const[:el],
|
790
794
|
ec: const[:ec]
|
791
795
|
}
|
792
796
|
end
|
@@ -837,9 +841,9 @@ class Prettier::Parser < Ripper
|
|
837
841
|
{
|
838
842
|
type: :defsl,
|
839
843
|
body: [ident, params, bodystmt],
|
840
|
-
|
844
|
+
sl: beging[:sl],
|
841
845
|
sc: beging[:sc],
|
842
|
-
|
846
|
+
el: bodystmt[:el],
|
843
847
|
ec: bodystmt[:ec]
|
844
848
|
}
|
845
849
|
)
|
@@ -857,9 +861,9 @@ class Prettier::Parser < Ripper
|
|
857
861
|
{
|
858
862
|
type: :def,
|
859
863
|
body: [ident, params, bodystmt],
|
860
|
-
|
864
|
+
sl: beging[:sl],
|
861
865
|
sc: beging[:sc],
|
862
|
-
|
866
|
+
el: ending[:el],
|
863
867
|
ec: ending[:ec]
|
864
868
|
}
|
865
869
|
end
|
@@ -897,9 +901,9 @@ class Prettier::Parser < Ripper
|
|
897
901
|
{
|
898
902
|
type: :defs,
|
899
903
|
body: [target, oper, ident, params, bodystmt],
|
900
|
-
|
904
|
+
sl: beging[:sl],
|
901
905
|
sc: beging[:sc],
|
902
|
-
|
906
|
+
el: ending[:el],
|
903
907
|
ec: ending[:ec]
|
904
908
|
}
|
905
909
|
end
|
@@ -917,7 +921,7 @@ class Prettier::Parser < Ripper
|
|
917
921
|
beging.merge!(
|
918
922
|
type: :defined,
|
919
923
|
body: [value],
|
920
|
-
|
924
|
+
el: ending[:el],
|
921
925
|
ec: ending[:ec]
|
922
926
|
)
|
923
927
|
end
|
@@ -935,9 +939,9 @@ class Prettier::Parser < Ripper
|
|
935
939
|
{
|
936
940
|
type: :do_block,
|
937
941
|
body: [block_var, bodystmt],
|
938
|
-
|
942
|
+
sl: beging[:sl],
|
939
943
|
sc: beging[:sc],
|
940
|
-
|
944
|
+
el: ending[:el],
|
941
945
|
ec: ending[:ec]
|
942
946
|
}
|
943
947
|
end
|
@@ -954,9 +958,9 @@ class Prettier::Parser < Ripper
|
|
954
958
|
{
|
955
959
|
type: :dot2,
|
956
960
|
body: [left, right],
|
957
|
-
|
961
|
+
sl: beging[:sl],
|
958
962
|
sc: beging[:sc],
|
959
|
-
|
963
|
+
el: ending[:el],
|
960
964
|
ec: ending[:ec]
|
961
965
|
}
|
962
966
|
end
|
@@ -973,9 +977,9 @@ class Prettier::Parser < Ripper
|
|
973
977
|
{
|
974
978
|
type: :dot3,
|
975
979
|
body: [left, right],
|
976
|
-
|
980
|
+
sl: beging[:sl],
|
977
981
|
sc: beging[:sc],
|
978
|
-
|
982
|
+
el: ending[:el],
|
979
983
|
ec: ending[:ec]
|
980
984
|
}
|
981
985
|
end
|
@@ -1008,7 +1012,7 @@ class Prettier::Parser < Ripper
|
|
1008
1012
|
type: :dyna_symbol,
|
1009
1013
|
quote: beging[:body][1],
|
1010
1014
|
body: string[:body],
|
1011
|
-
|
1015
|
+
el: ending[:el],
|
1012
1016
|
ec: ending[:ec]
|
1013
1017
|
)
|
1014
1018
|
else
|
@@ -1019,9 +1023,9 @@ class Prettier::Parser < Ripper
|
|
1019
1023
|
string.merge!(
|
1020
1024
|
type: :dyna_symbol,
|
1021
1025
|
quote: ending[:body][0],
|
1022
|
-
|
1026
|
+
sl: beging[:sl],
|
1023
1027
|
sc: beging[:sc],
|
1024
|
-
|
1028
|
+
el: ending[:el],
|
1025
1029
|
ec: ending[:ec]
|
1026
1030
|
)
|
1027
1031
|
end
|
@@ -1052,9 +1056,9 @@ class Prettier::Parser < Ripper
|
|
1052
1056
|
{
|
1053
1057
|
type: :else,
|
1054
1058
|
body: [stmts],
|
1055
|
-
|
1059
|
+
sl: beging[:sl],
|
1056
1060
|
sc: beging[:sc],
|
1057
|
-
|
1061
|
+
el: ending[:el],
|
1058
1062
|
ec: ending[:ec]
|
1059
1063
|
}
|
1060
1064
|
end
|
@@ -1072,9 +1076,9 @@ class Prettier::Parser < Ripper
|
|
1072
1076
|
{
|
1073
1077
|
type: :elsif,
|
1074
1078
|
body: [predicate, stmts, consequent],
|
1075
|
-
|
1079
|
+
sl: beging[:sl],
|
1076
1080
|
sc: beging[:sc],
|
1077
|
-
|
1081
|
+
el: ending[:el],
|
1078
1082
|
ec: ending[:ec]
|
1079
1083
|
}
|
1080
1084
|
end
|
@@ -1085,7 +1089,7 @@ class Prettier::Parser < Ripper
|
|
1085
1089
|
# and add to it as we get content. It always starts with this scanner
|
1086
1090
|
# event, so here we'll initialize the current embdoc.
|
1087
1091
|
def on_embdoc_beg(value)
|
1088
|
-
@embdoc = { type: :@embdoc, value: value,
|
1092
|
+
@embdoc = { type: :@embdoc, value: value, sl: lineno, sc: char_pos }
|
1089
1093
|
end
|
1090
1094
|
|
1091
1095
|
# This is a scanner event that gets hit when we're inside an embdoc and
|
@@ -1104,7 +1108,7 @@ class Prettier::Parser < Ripper
|
|
1104
1108
|
@comments <<
|
1105
1109
|
@embdoc.merge!(
|
1106
1110
|
value: @embdoc[:value] << value.chomp,
|
1107
|
-
|
1111
|
+
el: lineno,
|
1108
1112
|
ec: char_pos + value.length - 1
|
1109
1113
|
)
|
1110
1114
|
|
@@ -1129,9 +1133,9 @@ class Prettier::Parser < Ripper
|
|
1129
1133
|
{
|
1130
1134
|
type: :ensure,
|
1131
1135
|
body: [beging, stmts],
|
1132
|
-
|
1136
|
+
sl: beging[:sl],
|
1133
1137
|
sc: beging[:sc],
|
1134
|
-
|
1138
|
+
el: ending[:el],
|
1135
1139
|
ec: ending[:ec]
|
1136
1140
|
}
|
1137
1141
|
end
|
@@ -1160,9 +1164,9 @@ class Prettier::Parser < Ripper
|
|
1160
1164
|
{
|
1161
1165
|
type: :field,
|
1162
1166
|
body: [left, oper, right],
|
1163
|
-
|
1167
|
+
sl: left[:sl],
|
1164
1168
|
sc: left[:sc],
|
1165
|
-
|
1169
|
+
el: right[:el],
|
1166
1170
|
ec: right[:ec]
|
1167
1171
|
}
|
1168
1172
|
end
|
@@ -1176,9 +1180,9 @@ class Prettier::Parser < Ripper
|
|
1176
1180
|
{
|
1177
1181
|
type: :fndptn,
|
1178
1182
|
body: [const, presplat, args, postsplat],
|
1179
|
-
|
1183
|
+
sl: beging[:sl],
|
1180
1184
|
sc: beging[:sc],
|
1181
|
-
|
1185
|
+
el: ending[:el],
|
1182
1186
|
ec: ending[:ec]
|
1183
1187
|
}
|
1184
1188
|
end
|
@@ -1196,9 +1200,9 @@ class Prettier::Parser < Ripper
|
|
1196
1200
|
{
|
1197
1201
|
type: :for,
|
1198
1202
|
body: [ident, enumerable, stmts],
|
1199
|
-
|
1203
|
+
sl: beging[:sl],
|
1200
1204
|
sc: beging[:sc],
|
1201
|
-
|
1205
|
+
el: ending[:el],
|
1202
1206
|
ec: ending[:ec]
|
1203
1207
|
}
|
1204
1208
|
end
|
@@ -1219,9 +1223,9 @@ class Prettier::Parser < Ripper
|
|
1219
1223
|
{
|
1220
1224
|
type: :hash,
|
1221
1225
|
body: [assoclist_from_args],
|
1222
|
-
|
1226
|
+
sl: beging[:sl],
|
1223
1227
|
sc: beging[:sc],
|
1224
|
-
|
1228
|
+
el: ending[:el],
|
1225
1229
|
ec: ending[:ec]
|
1226
1230
|
}
|
1227
1231
|
end
|
@@ -1234,8 +1238,8 @@ class Prettier::Parser < Ripper
|
|
1234
1238
|
# printer through our embed function.
|
1235
1239
|
def on_heredoc_beg(beging)
|
1236
1240
|
location = {
|
1237
|
-
|
1238
|
-
|
1241
|
+
sl: lineno,
|
1242
|
+
el: lineno,
|
1239
1243
|
sc: char_pos,
|
1240
1244
|
ec: char_pos + beging.length + 1
|
1241
1245
|
}
|
@@ -1259,7 +1263,7 @@ class Prettier::Parser < Ripper
|
|
1259
1263
|
|
1260
1264
|
# This is a scanner event that represents the end of the heredoc.
|
1261
1265
|
def on_heredoc_end(ending)
|
1262
|
-
@heredocs[-1].merge!(ending: ending.chomp,
|
1266
|
+
@heredocs[-1].merge!(ending: ending.chomp, el: lineno, ec: char_pos)
|
1263
1267
|
end
|
1264
1268
|
|
1265
1269
|
# hshptn is a parser event that represents matching against a hash pattern
|
@@ -1270,9 +1274,9 @@ class Prettier::Parser < Ripper
|
|
1270
1274
|
{
|
1271
1275
|
type: :hshptn,
|
1272
1276
|
body: [const, kw, kwrest],
|
1273
|
-
|
1277
|
+
sl: pieces[0][:sl],
|
1274
1278
|
sc: pieces[0][:sc],
|
1275
|
-
|
1279
|
+
el: pieces[-1][:el],
|
1276
1280
|
ec: pieces[-1][:ec]
|
1277
1281
|
}
|
1278
1282
|
end
|
@@ -1289,9 +1293,9 @@ class Prettier::Parser < Ripper
|
|
1289
1293
|
{
|
1290
1294
|
type: :if,
|
1291
1295
|
body: [predicate, stmts, consequent],
|
1292
|
-
|
1296
|
+
sl: beging[:sl],
|
1293
1297
|
sc: beging[:sc],
|
1294
|
-
|
1298
|
+
el: ending[:el],
|
1295
1299
|
ec: ending[:ec]
|
1296
1300
|
}
|
1297
1301
|
end
|
@@ -1303,7 +1307,7 @@ class Prettier::Parser < Ripper
|
|
1303
1307
|
predicate.merge(
|
1304
1308
|
type: :ifop,
|
1305
1309
|
body: [predicate, truthy, falsy],
|
1306
|
-
|
1310
|
+
el: falsy[:el],
|
1307
1311
|
ec: falsy[:ec]
|
1308
1312
|
)
|
1309
1313
|
end
|
@@ -1317,9 +1321,9 @@ class Prettier::Parser < Ripper
|
|
1317
1321
|
{
|
1318
1322
|
type: :if_mod,
|
1319
1323
|
body: [predicate, statement],
|
1320
|
-
|
1324
|
+
sl: statement[:sl],
|
1321
1325
|
sc: statement[:sc],
|
1322
|
-
|
1326
|
+
el: predicate[:el],
|
1323
1327
|
ec: predicate[:ec]
|
1324
1328
|
}
|
1325
1329
|
end
|
@@ -1339,7 +1343,7 @@ class Prettier::Parser < Ripper
|
|
1339
1343
|
beging.merge!(
|
1340
1344
|
type: :in,
|
1341
1345
|
body: [pattern, stmts, consequent],
|
1342
|
-
|
1346
|
+
el: ending[:el],
|
1343
1347
|
ec: ending[:ec]
|
1344
1348
|
)
|
1345
1349
|
end
|
@@ -1353,7 +1357,7 @@ class Prettier::Parser < Ripper
|
|
1353
1357
|
oper.merge!(
|
1354
1358
|
type: :kwrest_param,
|
1355
1359
|
body: [ident],
|
1356
|
-
|
1360
|
+
el: ident[:el],
|
1357
1361
|
ec: ident[:ec]
|
1358
1362
|
)
|
1359
1363
|
end
|
@@ -1381,9 +1385,9 @@ class Prettier::Parser < Ripper
|
|
1381
1385
|
{
|
1382
1386
|
type: :lambda,
|
1383
1387
|
body: [params, stmts],
|
1384
|
-
|
1388
|
+
sl: beging[:sl],
|
1385
1389
|
sc: beging[:sc],
|
1386
|
-
|
1390
|
+
el: closing[:el],
|
1387
1391
|
ec: closing[:ec]
|
1388
1392
|
}
|
1389
1393
|
end
|
@@ -1411,9 +1415,9 @@ class Prettier::Parser < Ripper
|
|
1411
1415
|
{
|
1412
1416
|
type: :massign,
|
1413
1417
|
body: [left, right],
|
1414
|
-
|
1418
|
+
sl: left[:sl],
|
1415
1419
|
sc: left[:sc],
|
1416
|
-
|
1420
|
+
el: right[:el],
|
1417
1421
|
ec: right[:ec]
|
1418
1422
|
}
|
1419
1423
|
end
|
@@ -1433,9 +1437,9 @@ class Prettier::Parser < Ripper
|
|
1433
1437
|
{
|
1434
1438
|
type: :method_add_arg,
|
1435
1439
|
body: [fcall, arg_paren],
|
1436
|
-
|
1440
|
+
sl: fcall[:sl],
|
1437
1441
|
sc: fcall[:sc],
|
1438
|
-
|
1442
|
+
el: arg_paren[:el],
|
1439
1443
|
ec: arg_paren[:ec]
|
1440
1444
|
}
|
1441
1445
|
end
|
@@ -1447,9 +1451,9 @@ class Prettier::Parser < Ripper
|
|
1447
1451
|
{
|
1448
1452
|
type: :method_add_block,
|
1449
1453
|
body: [method_add_arg, block],
|
1450
|
-
|
1454
|
+
sl: method_add_arg[:sl],
|
1451
1455
|
sc: method_add_arg[:sc],
|
1452
|
-
|
1456
|
+
el: block[:el],
|
1453
1457
|
ec: block[:ec]
|
1454
1458
|
}
|
1455
1459
|
end
|
@@ -1461,9 +1465,9 @@ class Prettier::Parser < Ripper
|
|
1461
1465
|
{
|
1462
1466
|
type: :mlhs,
|
1463
1467
|
body: [],
|
1464
|
-
|
1468
|
+
sl: lineno,
|
1465
1469
|
sc: char_pos,
|
1466
|
-
|
1470
|
+
el: lineno,
|
1467
1471
|
ec: char_pos
|
1468
1472
|
}
|
1469
1473
|
end
|
@@ -1475,7 +1479,7 @@ class Prettier::Parser < Ripper
|
|
1475
1479
|
if mlhs[:body].empty?
|
1476
1480
|
part.merge(type: :mlhs, body: [part])
|
1477
1481
|
else
|
1478
|
-
mlhs.merge!(body: mlhs[:body] << part,
|
1482
|
+
mlhs.merge!(body: mlhs[:body] << part, el: part[:el], ec: part[:ec])
|
1479
1483
|
end
|
1480
1484
|
end
|
1481
1485
|
|
@@ -1488,7 +1492,7 @@ class Prettier::Parser < Ripper
|
|
1488
1492
|
mlhs_add_star.merge(
|
1489
1493
|
type: :mlhs_add_post,
|
1490
1494
|
body: [mlhs_add_star, mlhs],
|
1491
|
-
|
1495
|
+
el: mlhs[:el],
|
1492
1496
|
ec: mlhs[:ec]
|
1493
1497
|
)
|
1494
1498
|
end
|
@@ -1504,9 +1508,9 @@ class Prettier::Parser < Ripper
|
|
1504
1508
|
{
|
1505
1509
|
type: :mlhs_add_star,
|
1506
1510
|
body: [mlhs, part],
|
1507
|
-
|
1511
|
+
sl: beging[:sl],
|
1508
1512
|
sc: beging[:sc],
|
1509
|
-
|
1513
|
+
el: ending[:el],
|
1510
1514
|
ec: ending[:ec]
|
1511
1515
|
}
|
1512
1516
|
end
|
@@ -1526,9 +1530,9 @@ class Prettier::Parser < Ripper
|
|
1526
1530
|
{
|
1527
1531
|
type: :mlhs_paren,
|
1528
1532
|
body: [contents],
|
1529
|
-
|
1533
|
+
sl: beging[:sl],
|
1530
1534
|
sc: beging[:sc],
|
1531
|
-
|
1535
|
+
el: ending[:el],
|
1532
1536
|
ec: ending[:ec]
|
1533
1537
|
}
|
1534
1538
|
end
|
@@ -1545,9 +1549,9 @@ class Prettier::Parser < Ripper
|
|
1545
1549
|
{
|
1546
1550
|
type: :module,
|
1547
1551
|
body: [const, bodystmt],
|
1548
|
-
|
1552
|
+
sl: beging[:sl],
|
1549
1553
|
sc: beging[:sc],
|
1550
|
-
|
1554
|
+
el: ending[:el],
|
1551
1555
|
ec: ending[:ec]
|
1552
1556
|
}
|
1553
1557
|
end
|
@@ -1560,9 +1564,9 @@ class Prettier::Parser < Ripper
|
|
1560
1564
|
{
|
1561
1565
|
type: :mrhs,
|
1562
1566
|
body: [],
|
1563
|
-
|
1567
|
+
sl: lineno,
|
1564
1568
|
sc: char_pos,
|
1565
|
-
|
1569
|
+
el: lineno,
|
1566
1570
|
ec: char_pos
|
1567
1571
|
}
|
1568
1572
|
end
|
@@ -1573,7 +1577,7 @@ class Prettier::Parser < Ripper
|
|
1573
1577
|
if mrhs[:body].empty?
|
1574
1578
|
part.merge(type: :mrhs, body: [part])
|
1575
1579
|
else
|
1576
|
-
mrhs.merge!(body: mrhs[:body] << part,
|
1580
|
+
mrhs.merge!(body: mrhs[:body] << part, el: part[:el], ec: part[:ec])
|
1577
1581
|
end
|
1578
1582
|
end
|
1579
1583
|
|
@@ -1587,9 +1591,9 @@ class Prettier::Parser < Ripper
|
|
1587
1591
|
{
|
1588
1592
|
type: :mrhs_add_star,
|
1589
1593
|
body: [mrhs, part],
|
1590
|
-
|
1594
|
+
sl: beging[:sl],
|
1591
1595
|
sc: beging[:sc],
|
1592
|
-
|
1596
|
+
el: ending[:el],
|
1593
1597
|
ec: ending[:ec]
|
1594
1598
|
}
|
1595
1599
|
end
|
@@ -1613,7 +1617,7 @@ class Prettier::Parser < Ripper
|
|
1613
1617
|
find_scanner_event(:@kw, 'next').merge!(
|
1614
1618
|
type: :next,
|
1615
1619
|
body: [args_add_block],
|
1616
|
-
|
1620
|
+
el: args_add_block[:el],
|
1617
1621
|
ec: args_add_block[:ec]
|
1618
1622
|
)
|
1619
1623
|
end
|
@@ -1626,7 +1630,7 @@ class Prettier::Parser < Ripper
|
|
1626
1630
|
left.merge(
|
1627
1631
|
type: :opassign,
|
1628
1632
|
body: [left, oper, right],
|
1629
|
-
|
1633
|
+
el: right[:el],
|
1630
1634
|
ec: right[:ec]
|
1631
1635
|
)
|
1632
1636
|
end
|
@@ -1641,13 +1645,13 @@ class Prettier::Parser < Ripper
|
|
1641
1645
|
location =
|
1642
1646
|
if flattened.any?
|
1643
1647
|
{
|
1644
|
-
|
1648
|
+
sl: flattened[0][:sl],
|
1645
1649
|
sc: flattened[0][:sc],
|
1646
|
-
|
1650
|
+
el: flattened[-1][:el],
|
1647
1651
|
ec: flattened[-1][:ec]
|
1648
1652
|
}
|
1649
1653
|
else
|
1650
|
-
{
|
1654
|
+
{ sl: lineno, sc: char_pos, el: lineno, ec: char_pos }
|
1651
1655
|
end
|
1652
1656
|
|
1653
1657
|
location.merge!(type: :params, body: types)
|
@@ -1657,12 +1661,17 @@ class Prettier::Parser < Ripper
|
|
1657
1661
|
# anywhere in a Ruby program. It accepts as arguments the contents, which
|
1658
1662
|
# can be either params or statements.
|
1659
1663
|
def on_paren(contents)
|
1664
|
+
beging = find_scanner_event(:@lparen)
|
1660
1665
|
ending = find_scanner_event(:@rparen)
|
1661
1666
|
|
1662
|
-
|
1667
|
+
if contents && contents[:type] == :params
|
1668
|
+
contents.merge!(sc: beging[:ec], ec: ending[:sc])
|
1669
|
+
end
|
1670
|
+
|
1671
|
+
beging.merge!(
|
1663
1672
|
type: :paren,
|
1664
1673
|
body: [contents],
|
1665
|
-
|
1674
|
+
el: ending[:el],
|
1666
1675
|
ec: ending[:ec]
|
1667
1676
|
)
|
1668
1677
|
end
|
@@ -1672,7 +1681,7 @@ class Prettier::Parser < Ripper
|
|
1672
1681
|
# source string. We'll also attach on the __END__ content if there was
|
1673
1682
|
# some found at the end of the source string.
|
1674
1683
|
def on_program(stmts)
|
1675
|
-
range = {
|
1684
|
+
range = { sl: 1, el: lines.length, sc: 0, ec: source.length }
|
1676
1685
|
|
1677
1686
|
stmts[:body] << @__end__ if @__end__
|
1678
1687
|
stmts.bind(0, source.length)
|
@@ -1694,7 +1703,7 @@ class Prettier::Parser < Ripper
|
|
1694
1703
|
def on_qsymbols_add(qsymbols, tstring_content)
|
1695
1704
|
qsymbols.merge!(
|
1696
1705
|
body: qsymbols[:body] << tstring_content,
|
1697
|
-
|
1706
|
+
el: tstring_content[:el],
|
1698
1707
|
ec: tstring_content[:ec]
|
1699
1708
|
)
|
1700
1709
|
end
|
@@ -1713,7 +1722,7 @@ class Prettier::Parser < Ripper
|
|
1713
1722
|
def on_qwords_add(qwords, tstring_content)
|
1714
1723
|
qwords.merge!(
|
1715
1724
|
body: qwords[:body] << tstring_content,
|
1716
|
-
|
1725
|
+
el: tstring_content[:el],
|
1717
1726
|
ec: tstring_content[:ec]
|
1718
1727
|
)
|
1719
1728
|
end
|
@@ -1739,7 +1748,7 @@ class Prettier::Parser < Ripper
|
|
1739
1748
|
def on_regexp_add(regexp, piece)
|
1740
1749
|
regexp.merge!(
|
1741
1750
|
body: regexp[:body] << piece,
|
1742
|
-
|
1751
|
+
el: regexp[:el],
|
1743
1752
|
ec: regexp[:ec]
|
1744
1753
|
)
|
1745
1754
|
end
|
@@ -1752,7 +1761,7 @@ class Prettier::Parser < Ripper
|
|
1752
1761
|
regexp.merge!(
|
1753
1762
|
type: :regexp_literal,
|
1754
1763
|
ending: ending[:body],
|
1755
|
-
|
1764
|
+
el: ending[:el],
|
1756
1765
|
ec: ending[:ec]
|
1757
1766
|
)
|
1758
1767
|
end
|
@@ -1765,8 +1774,8 @@ class Prettier::Parser < Ripper
|
|
1765
1774
|
def bind_end(ec)
|
1766
1775
|
merge!(ec: ec)
|
1767
1776
|
|
1768
|
-
stmts = self[:body][
|
1769
|
-
consequent = self[:body][
|
1777
|
+
stmts = self[:body][1]
|
1778
|
+
consequent = self[:body][2]
|
1770
1779
|
|
1771
1780
|
if consequent
|
1772
1781
|
consequent.bind_end(ec)
|
@@ -1781,17 +1790,31 @@ class Prettier::Parser < Ripper
|
|
1781
1790
|
# inside of a bodystmt.
|
1782
1791
|
def on_rescue(exceptions, variable, stmts, consequent)
|
1783
1792
|
beging = find_scanner_event(:@kw, 'rescue')
|
1793
|
+
exceptions = exceptions[0] if exceptions.is_a?(Array)
|
1784
1794
|
|
1785
|
-
|
1786
|
-
last_node = variable || last_exception || beging
|
1787
|
-
|
1795
|
+
last_node = variable || exceptions || beging
|
1788
1796
|
stmts.bind(find_next_statement_start(last_node[:ec]), char_pos)
|
1789
1797
|
|
1798
|
+
# We add an additional inner node here that ripper doesn't provide so that
|
1799
|
+
# we have a nice place to attach inline comment. But we only need it if we
|
1800
|
+
# have an exception or a variable that we're rescuing.
|
1801
|
+
rescue_ex =
|
1802
|
+
if exceptions || variable
|
1803
|
+
{
|
1804
|
+
type: :rescue_ex,
|
1805
|
+
body: [exceptions, variable],
|
1806
|
+
sl: beging[:sl],
|
1807
|
+
sc: beging[:ec] + 1,
|
1808
|
+
el: last_node[:el],
|
1809
|
+
ec: last_node[:ec]
|
1810
|
+
}
|
1811
|
+
end
|
1812
|
+
|
1790
1813
|
Rescue.new(
|
1791
1814
|
beging.merge!(
|
1792
1815
|
type: :rescue,
|
1793
|
-
body: [
|
1794
|
-
|
1816
|
+
body: [rescue_ex, stmts, consequent],
|
1817
|
+
el: lineno,
|
1795
1818
|
ec: char_pos
|
1796
1819
|
)
|
1797
1820
|
)
|
@@ -1806,9 +1829,9 @@ class Prettier::Parser < Ripper
|
|
1806
1829
|
{
|
1807
1830
|
type: :rescue_mod,
|
1808
1831
|
body: [statement, rescued],
|
1809
|
-
|
1832
|
+
sl: statement[:sl],
|
1810
1833
|
sc: statement[:sc],
|
1811
|
-
|
1834
|
+
el: rescued[:el],
|
1812
1835
|
ec: rescued[:ec]
|
1813
1836
|
}
|
1814
1837
|
end
|
@@ -1824,7 +1847,7 @@ class Prettier::Parser < Ripper
|
|
1824
1847
|
oper.merge!(
|
1825
1848
|
type: :rest_param,
|
1826
1849
|
body: [ident],
|
1827
|
-
|
1850
|
+
el: ident[:el],
|
1828
1851
|
ec: ident[:ec]
|
1829
1852
|
)
|
1830
1853
|
end
|
@@ -1842,7 +1865,7 @@ class Prettier::Parser < Ripper
|
|
1842
1865
|
find_scanner_event(:@kw, 'return').merge!(
|
1843
1866
|
type: :return,
|
1844
1867
|
body: [args_add_block],
|
1845
|
-
|
1868
|
+
el: args_add_block[:el],
|
1846
1869
|
ec: args_add_block[:ec]
|
1847
1870
|
)
|
1848
1871
|
end
|
@@ -1874,9 +1897,9 @@ class Prettier::Parser < Ripper
|
|
1874
1897
|
{
|
1875
1898
|
type: :sclass,
|
1876
1899
|
body: [target, bodystmt],
|
1877
|
-
|
1900
|
+
sl: beging[:sl],
|
1878
1901
|
sc: beging[:sc],
|
1879
|
-
|
1902
|
+
el: ending[:el],
|
1880
1903
|
ec: ending[:ec]
|
1881
1904
|
}
|
1882
1905
|
end
|
@@ -1889,12 +1912,21 @@ class Prettier::Parser < Ripper
|
|
1889
1912
|
# propagate that onto void_stmt nodes inside the stmts in order to make sure
|
1890
1913
|
# all comments get printed appropriately.
|
1891
1914
|
class Stmts < SimpleDelegator
|
1915
|
+
attr_reader :parser
|
1916
|
+
|
1917
|
+
def initialize(parser, values)
|
1918
|
+
@parser = parser
|
1919
|
+
__setobj__(values)
|
1920
|
+
end
|
1921
|
+
|
1892
1922
|
def bind(sc, ec)
|
1893
1923
|
merge!(sc: sc, ec: ec)
|
1894
1924
|
|
1895
1925
|
if self[:body][0][:type] == :void_stmt
|
1896
1926
|
self[:body][0].merge!(sc: sc, ec: sc)
|
1897
1927
|
end
|
1928
|
+
|
1929
|
+
attach_comments(sc, ec)
|
1898
1930
|
end
|
1899
1931
|
|
1900
1932
|
def bind_end(ec)
|
@@ -1903,14 +1935,30 @@ class Prettier::Parser < Ripper
|
|
1903
1935
|
|
1904
1936
|
def <<(statement)
|
1905
1937
|
if self[:body].any?
|
1906
|
-
merge!(statement.slice(:
|
1938
|
+
merge!(statement.slice(:el, :ec))
|
1907
1939
|
else
|
1908
|
-
merge!(statement.slice(:
|
1940
|
+
merge!(statement.slice(:sl, :el, :sc, :ec))
|
1909
1941
|
end
|
1910
1942
|
|
1911
1943
|
self[:body] << statement
|
1912
1944
|
self
|
1913
1945
|
end
|
1946
|
+
|
1947
|
+
private
|
1948
|
+
|
1949
|
+
def attach_comments(sc, ec)
|
1950
|
+
attachable =
|
1951
|
+
parser.comments.select do |comment|
|
1952
|
+
comment[:type] == :@comment && !comment[:inline] &&
|
1953
|
+
sc <= comment[:sc] && ec >= comment[:ec] &&
|
1954
|
+
!comment[:value].include?('prettier-ignore')
|
1955
|
+
end
|
1956
|
+
|
1957
|
+
return if attachable.empty?
|
1958
|
+
|
1959
|
+
parser.comments -= attachable
|
1960
|
+
self[:body] = (self[:body] + attachable).sort_by! { |node| node[:sc] }
|
1961
|
+
end
|
1914
1962
|
end
|
1915
1963
|
|
1916
1964
|
# stmts_new is a parser event that represents the beginning of a list of
|
@@ -1918,10 +1966,11 @@ class Prettier::Parser < Ripper
|
|
1918
1966
|
# stmts_add events, which we'll append onto an array body.
|
1919
1967
|
def on_stmts_new
|
1920
1968
|
Stmts.new(
|
1969
|
+
self,
|
1921
1970
|
type: :stmts,
|
1922
1971
|
body: [],
|
1923
|
-
|
1924
|
-
|
1972
|
+
sl: lineno,
|
1973
|
+
el: lineno,
|
1925
1974
|
sc: char_pos,
|
1926
1975
|
ec: char_pos
|
1927
1976
|
)
|
@@ -1945,9 +1994,9 @@ class Prettier::Parser < Ripper
|
|
1945
1994
|
{
|
1946
1995
|
type: :string_concat,
|
1947
1996
|
body: [left, right],
|
1948
|
-
|
1997
|
+
sl: left[:sl],
|
1949
1998
|
sc: left[:sc],
|
1950
|
-
|
1999
|
+
el: right[:el],
|
1951
2000
|
ec: right[:ec]
|
1952
2001
|
}
|
1953
2002
|
end
|
@@ -1961,8 +2010,8 @@ class Prettier::Parser < Ripper
|
|
1961
2010
|
{
|
1962
2011
|
type: :string,
|
1963
2012
|
body: [],
|
1964
|
-
|
1965
|
-
|
2013
|
+
sl: lineno,
|
2014
|
+
el: lineno,
|
1966
2015
|
sc: char_pos,
|
1967
2016
|
ec: char_pos
|
1968
2017
|
}
|
@@ -1973,11 +2022,7 @@ class Prettier::Parser < Ripper
|
|
1973
2022
|
# It accepts as arguments the parent string node as well as the additional
|
1974
2023
|
# piece of the string.
|
1975
2024
|
def on_string_add(string, piece)
|
1976
|
-
string.merge!(
|
1977
|
-
body: string[:body] << piece,
|
1978
|
-
end: piece[:end],
|
1979
|
-
ec: piece[:ec]
|
1980
|
-
)
|
2025
|
+
string.merge!(body: string[:body] << piece, el: piece[:el], ec: piece[:ec])
|
1981
2026
|
end
|
1982
2027
|
|
1983
2028
|
# string_dvar is a parser event that represents a very special kind of
|
@@ -1989,7 +2034,7 @@ class Prettier::Parser < Ripper
|
|
1989
2034
|
find_scanner_event(:@embvar).merge!(
|
1990
2035
|
type: :string_dvar,
|
1991
2036
|
body: [var_ref],
|
1992
|
-
|
2037
|
+
el: var_ref[:el],
|
1993
2038
|
ec: var_ref[:ec]
|
1994
2039
|
)
|
1995
2040
|
end
|
@@ -2007,9 +2052,9 @@ class Prettier::Parser < Ripper
|
|
2007
2052
|
{
|
2008
2053
|
type: :string_embexpr,
|
2009
2054
|
body: [stmts],
|
2010
|
-
|
2055
|
+
sl: beging[:sl],
|
2011
2056
|
sc: beging[:sc],
|
2012
|
-
|
2057
|
+
el: ending[:el],
|
2013
2058
|
ec: ending[:ec]
|
2014
2059
|
}
|
2015
2060
|
end
|
@@ -2029,9 +2074,9 @@ class Prettier::Parser < Ripper
|
|
2029
2074
|
type: :string_literal,
|
2030
2075
|
body: string[:body],
|
2031
2076
|
quote: beging[:body],
|
2032
|
-
|
2077
|
+
sl: beging[:sl],
|
2033
2078
|
sc: beging[:sc],
|
2034
|
-
|
2079
|
+
el: ending[:el],
|
2035
2080
|
ec: ending[:ec]
|
2036
2081
|
}
|
2037
2082
|
end
|
@@ -2045,7 +2090,7 @@ class Prettier::Parser < Ripper
|
|
2045
2090
|
find_scanner_event(:@kw, 'super').merge!(
|
2046
2091
|
type: :super,
|
2047
2092
|
body: [contents],
|
2048
|
-
|
2093
|
+
el: contents[:el],
|
2049
2094
|
ec: contents[:ec]
|
2050
2095
|
)
|
2051
2096
|
end
|
@@ -2096,7 +2141,7 @@ class Prettier::Parser < Ripper
|
|
2096
2141
|
def on_symbols_add(symbols, word_add)
|
2097
2142
|
symbols.merge!(
|
2098
2143
|
body: symbols[:body] << word_add,
|
2099
|
-
|
2144
|
+
el: word_add[:el],
|
2100
2145
|
ec: word_add[:ec]
|
2101
2146
|
)
|
2102
2147
|
end
|
@@ -2125,7 +2170,7 @@ class Prettier::Parser < Ripper
|
|
2125
2170
|
const.merge(
|
2126
2171
|
type: :top_const_field,
|
2127
2172
|
body: [const],
|
2128
|
-
|
2173
|
+
sl: beging[:sl],
|
2129
2174
|
sc: beging[:sc]
|
2130
2175
|
)
|
2131
2176
|
end
|
@@ -2141,7 +2186,7 @@ class Prettier::Parser < Ripper
|
|
2141
2186
|
const.merge(
|
2142
2187
|
type: :top_const_ref,
|
2143
2188
|
body: [const],
|
2144
|
-
|
2189
|
+
sl: beging[:sl],
|
2145
2190
|
sc: beging[:sc]
|
2146
2191
|
)
|
2147
2192
|
end
|
@@ -2161,7 +2206,7 @@ class Prettier::Parser < Ripper
|
|
2161
2206
|
type: :unary,
|
2162
2207
|
oper: oper,
|
2163
2208
|
body: [value],
|
2164
|
-
|
2209
|
+
el: ending[:el],
|
2165
2210
|
ec: ending[:ec],
|
2166
2211
|
paren: paren
|
2167
2212
|
)
|
@@ -2172,7 +2217,7 @@ class Prettier::Parser < Ripper
|
|
2172
2217
|
# stack. So we need to explicitly disallow those operators.
|
2173
2218
|
index =
|
2174
2219
|
scanner_events.rindex do |scanner_event|
|
2175
|
-
scanner_event[:type] == :@op &&
|
2220
|
+
scanner_event[:type] == :@op && scanner_event[:sc] < value[:sc] &&
|
2176
2221
|
!%w[.. ...].include?(scanner_event[:body])
|
2177
2222
|
end
|
2178
2223
|
|
@@ -2181,7 +2226,7 @@ class Prettier::Parser < Ripper
|
|
2181
2226
|
type: :unary,
|
2182
2227
|
oper: oper[0],
|
2183
2228
|
body: [value],
|
2184
|
-
|
2229
|
+
el: value[:el],
|
2185
2230
|
ec: value[:ec]
|
2186
2231
|
)
|
2187
2232
|
end
|
@@ -2197,7 +2242,7 @@ class Prettier::Parser < Ripper
|
|
2197
2242
|
find_scanner_event(:@kw, 'undef').merge!(
|
2198
2243
|
type: :undef,
|
2199
2244
|
body: symbol_literals,
|
2200
|
-
|
2245
|
+
el: last[:el],
|
2201
2246
|
ec: last[:ec]
|
2202
2247
|
)
|
2203
2248
|
end
|
@@ -2215,9 +2260,9 @@ class Prettier::Parser < Ripper
|
|
2215
2260
|
{
|
2216
2261
|
type: :unless,
|
2217
2262
|
body: [predicate, stmts, consequent],
|
2218
|
-
|
2263
|
+
sl: beging[:sl],
|
2219
2264
|
sc: beging[:sc],
|
2220
|
-
|
2265
|
+
el: ending[:el],
|
2221
2266
|
ec: ending[:ec]
|
2222
2267
|
}
|
2223
2268
|
end
|
@@ -2231,9 +2276,9 @@ class Prettier::Parser < Ripper
|
|
2231
2276
|
{
|
2232
2277
|
type: :unless_mod,
|
2233
2278
|
body: [predicate, statement],
|
2234
|
-
|
2279
|
+
sl: statement[:sl],
|
2235
2280
|
sc: statement[:sc],
|
2236
|
-
|
2281
|
+
el: predicate[:el],
|
2237
2282
|
ec: predicate[:ec]
|
2238
2283
|
}
|
2239
2284
|
end
|
@@ -2257,9 +2302,9 @@ class Prettier::Parser < Ripper
|
|
2257
2302
|
{
|
2258
2303
|
type: :until,
|
2259
2304
|
body: [predicate, stmts],
|
2260
|
-
|
2305
|
+
sl: beging[:sl],
|
2261
2306
|
sc: beging[:sc],
|
2262
|
-
|
2307
|
+
el: ending[:el],
|
2263
2308
|
ec: ending[:ec]
|
2264
2309
|
}
|
2265
2310
|
end
|
@@ -2273,9 +2318,9 @@ class Prettier::Parser < Ripper
|
|
2273
2318
|
{
|
2274
2319
|
type: :until_mod,
|
2275
2320
|
body: [predicate, statement],
|
2276
|
-
|
2321
|
+
sl: statement[:sl],
|
2277
2322
|
sc: statement[:sc],
|
2278
|
-
|
2323
|
+
el: predicate[:el],
|
2279
2324
|
ec: predicate[:ec]
|
2280
2325
|
}
|
2281
2326
|
end
|
@@ -2293,9 +2338,9 @@ class Prettier::Parser < Ripper
|
|
2293
2338
|
{
|
2294
2339
|
type: :var_alias,
|
2295
2340
|
body: [left, right],
|
2296
|
-
|
2341
|
+
sl: beging[:sl],
|
2297
2342
|
sc: beging[:sc],
|
2298
|
-
|
2343
|
+
el: ending[:el],
|
2299
2344
|
ec: ending[:ec]
|
2300
2345
|
}
|
2301
2346
|
end
|
@@ -2348,7 +2393,7 @@ class Prettier::Parser < Ripper
|
|
2348
2393
|
# block of code. It often will have comments attached to it, so it requires
|
2349
2394
|
# some special handling.
|
2350
2395
|
def on_void_stmt
|
2351
|
-
{ type: :void_stmt,
|
2396
|
+
{ type: :void_stmt, sl: lineno, el: lineno, sc: char_pos, ec: char_pos }
|
2352
2397
|
end
|
2353
2398
|
|
2354
2399
|
# when is a parser event that represents another clause in a case chain.
|
@@ -2364,9 +2409,9 @@ class Prettier::Parser < Ripper
|
|
2364
2409
|
{
|
2365
2410
|
type: :when,
|
2366
2411
|
body: [predicate, stmts, consequent],
|
2367
|
-
|
2412
|
+
sl: beging[:sl],
|
2368
2413
|
sc: beging[:sc],
|
2369
|
-
|
2414
|
+
el: ending[:el],
|
2370
2415
|
ec: ending[:ec]
|
2371
2416
|
}
|
2372
2417
|
end
|
@@ -2390,9 +2435,9 @@ class Prettier::Parser < Ripper
|
|
2390
2435
|
{
|
2391
2436
|
type: :while,
|
2392
2437
|
body: [predicate, stmts],
|
2393
|
-
|
2438
|
+
sl: beging[:sl],
|
2394
2439
|
sc: beging[:sc],
|
2395
|
-
|
2440
|
+
el: ending[:el],
|
2396
2441
|
ec: ending[:ec]
|
2397
2442
|
}
|
2398
2443
|
end
|
@@ -2406,9 +2451,9 @@ class Prettier::Parser < Ripper
|
|
2406
2451
|
{
|
2407
2452
|
type: :while_mod,
|
2408
2453
|
body: [predicate, statement],
|
2409
|
-
|
2454
|
+
sl: statement[:sl],
|
2410
2455
|
sc: statement[:sc],
|
2411
|
-
|
2456
|
+
el: predicate[:el],
|
2412
2457
|
ec: predicate[:ec]
|
2413
2458
|
}
|
2414
2459
|
end
|
@@ -2439,7 +2484,7 @@ class Prettier::Parser < Ripper
|
|
2439
2484
|
# location information from the first piece.
|
2440
2485
|
piece.merge(type: :word, body: [piece])
|
2441
2486
|
else
|
2442
|
-
word.merge!(body: word[:body] << piece,
|
2487
|
+
word.merge!(body: word[:body] << piece, el: piece[:el], ec: piece[:ec])
|
2443
2488
|
end
|
2444
2489
|
end
|
2445
2490
|
|
@@ -2458,7 +2503,7 @@ class Prettier::Parser < Ripper
|
|
2458
2503
|
def on_words_add(words, word_add)
|
2459
2504
|
words.merge!(
|
2460
2505
|
body: words[:body] << word_add,
|
2461
|
-
|
2506
|
+
el: word_add[:el],
|
2462
2507
|
ec: word_add[:ec]
|
2463
2508
|
)
|
2464
2509
|
end
|
@@ -2492,7 +2537,7 @@ class Prettier::Parser < Ripper
|
|
2492
2537
|
def on_xstring_add(xstring, piece)
|
2493
2538
|
xstring.merge!(
|
2494
2539
|
body: xstring[:body] << piece,
|
2495
|
-
|
2540
|
+
el: piece[:el],
|
2496
2541
|
ec: piece[:ec]
|
2497
2542
|
)
|
2498
2543
|
end
|
@@ -2518,7 +2563,7 @@ class Prettier::Parser < Ripper
|
|
2518
2563
|
heredoc.merge!(body: xstring[:body])
|
2519
2564
|
else
|
2520
2565
|
ending = find_scanner_event(:@tstring_end)
|
2521
|
-
xstring.merge!(type: :xstring_literal,
|
2566
|
+
xstring.merge!(type: :xstring_literal, el: ending[:el], ec: ending[:ec])
|
2522
2567
|
end
|
2523
2568
|
end
|
2524
2569
|
|
@@ -2529,7 +2574,7 @@ class Prettier::Parser < Ripper
|
|
2529
2574
|
find_scanner_event(:@kw, 'yield').merge!(
|
2530
2575
|
type: :yield,
|
2531
2576
|
body: [args_add_block],
|
2532
|
-
|
2577
|
+
el: args_add_block[:el],
|
2533
2578
|
ec: args_add_block[:ec]
|
2534
2579
|
)
|
2535
2580
|
end
|
@@ -2550,24 +2595,3 @@ class Prettier::Parser < Ripper
|
|
2550
2595
|
find_scanner_event(:@kw, 'super').merge!(type: :zsuper)
|
2551
2596
|
end
|
2552
2597
|
end
|
2553
|
-
|
2554
|
-
# If this is the main file we're executing, then most likely this is being
|
2555
|
-
# executed from the parser.js spawn. In that case, read the ruby source from
|
2556
|
-
# stdin and report back the AST over stdout.
|
2557
|
-
|
2558
|
-
if $0 == __FILE__
|
2559
|
-
builder = Prettier::Parser.new($stdin.read)
|
2560
|
-
response = builder.parse
|
2561
|
-
|
2562
|
-
if !response || builder.error?
|
2563
|
-
warn(
|
2564
|
-
'@prettier/plugin-ruby encountered an error when attempting to parse ' \
|
2565
|
-
'the ruby source. This usually means there was a syntax error in the ' \
|
2566
|
-
'file in question. You can verify by running `ruby -i [path/to/file]`.'
|
2567
|
-
)
|
2568
|
-
|
2569
|
-
exit 1
|
2570
|
-
end
|
2571
|
-
|
2572
|
-
puts JSON.fast_generate(response)
|
2573
|
-
end
|