ruby2js 3.0.13 → 3.0.14

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cdc199c50043c6bf4873bb097b7e92856023ff48baf112aa4c7e9487b749f89b
4
- data.tar.gz: 3c374a3ca6f1591c61dbc36bf602507c5526aadbf8fbd17c3c6efe7a6e3ca0db
3
+ metadata.gz: 977a5000855a15e2bb92f1c4c8c1ccea4fdf5ab3e7191119822baef7eae542c6
4
+ data.tar.gz: d37e1f93e78f0fb2ea11bb507764df75fc24e16146b173a5c9bf93819277911e
5
5
  SHA512:
6
- metadata.gz: '02917c6c3e994817a8bbf67aede8dbfa16dbe4d6ee48b7503f763795ddb22ed57b07427179ead407b8036e7c4e36d4fa6848edef7a4951bf39e183f4547e4666'
7
- data.tar.gz: 496ad88241844101e583205e33f0d7604296801100e1a8870ec2b2f971110f873048d33ed4e7fac4f347bf05d8c545e64867b1b0ff5100dda96c97a98d7f51d6
6
+ metadata.gz: daf2acb19662ed955b502f226fdf9f36226968926a3a6e17a2b4d180a8d89edbfc451464ee4ce24139c1f960de348521958147701cfa99248d1a80e6c5f51be6
7
+ data.tar.gz: 61d107547afd6f57ed4a98277c78e9edb86253bc61d6036520f22cd208d213f5c3a7ac010a738c94848bbdb649f608322379953a9892c92f4275f3d29181c068
data/README.md CHANGED
@@ -556,6 +556,7 @@ When option `eslevel: 2016` is provided, the following additional
556
556
  conversion is made:
557
557
 
558
558
  * `a ** b` becomes `a ** b`
559
+ * `.include?` becomes `.includes`
559
560
 
560
561
  ES2017 support
561
562
  ---
@@ -34,6 +34,16 @@ module Ruby2JS
34
34
  class_parent, @class_parent = @class_parent, inheritance
35
35
  @rbstack.push({})
36
36
 
37
+ # capture method names for automatic self referencing
38
+ body.each_with_index do |m, index|
39
+ if m.type == :def
40
+ prop = m.children.first
41
+ unless prop == :initialize or prop.to_s.end_with? '='
42
+ @rbstack.last[prop] = s(:self)
43
+ end
44
+ end
45
+ end
46
+
37
47
  post = []
38
48
  skipped = false
39
49
  body.each_with_index do |m, index|
@@ -59,20 +69,16 @@ module Ruby2JS
59
69
  @prop = :constructor
60
70
  m = m.updated(m.type, [@prop, *m.children[1..2]])
61
71
  elsif not m.is_method?
62
- @rbstack.last[@prop] = s(:self)
63
72
  @prop = "get #{@prop}"
64
73
  m = m.updated(m.type, [*m.children[0..1],
65
74
  s(:autoreturn, m.children[2])])
66
75
  elsif @prop.to_s.end_with? '='
67
76
  @prop = @prop.to_s.sub('=', '').to_sym
68
- @rbstack.last[@prop] = s(:self)
69
77
  m = m.updated(m.type, [@prop, *m.children[1..2]])
70
78
  @prop = "set #{@prop}"
71
79
  elsif @prop.to_s.end_with? '!'
72
80
  @prop = @prop.to_s.sub('!', '')
73
81
  m = m.updated(m.type, [@prop, *m.children[1..2]])
74
- else
75
- @rbstack.last[@prop] = s(:self)
76
82
  end
77
83
 
78
84
  begin
@@ -27,6 +27,12 @@ module Ruby2JS
27
27
  end
28
28
  end
29
29
 
30
+ if parts.first.type == :str and parts.first.children[0].start_with?('^')
31
+ opts = opts + [:m] unless opts.include? :m
32
+ elsif parts.last.type == :str and parts.last.children[0].end_with?('$')
33
+ opts = opts + [:m] unless opts.include? :m
34
+ end
35
+
30
36
  # use slash syntax if there are few embedded slashes in the regexp
31
37
  if parts.all? {|part| part.type == :str}
32
38
  str = parts.map {|part| part.children.first}.join
@@ -111,6 +111,9 @@ module Ruby2JS
111
111
  if receiver.type == :int and !OPERATORS.flatten.include?(method)
112
112
  group_receiver = true
113
113
  end
114
+ if not receiver.is_method? and receiver.children.last == :new
115
+ group_receiver = true
116
+ end
114
117
  end
115
118
 
116
119
  if target
@@ -221,7 +224,7 @@ module Ruby2JS
221
224
  end
222
225
  end
223
226
 
224
- put "new "; parse receiver
227
+ put "new "; (group_receiver ? group(receiver) : parse(receiver))
225
228
  if ast.is_method?
226
229
  put '('; parse_all(*args, join: ', '); put ')'
227
230
  end
@@ -29,7 +29,7 @@ module Ruby2JS
29
29
  *args)
30
30
 
31
31
  elsif method == :call and target and target.type == :cvar
32
- process S(:send, s(:attr, s(:self), :constructor),
32
+ process S(:send, s(:attr, s(:self), :constructor),
33
33
  "_#{target.children.first.to_s[2..-1]}", *args)
34
34
 
35
35
  elsif method == :keys and args.length == 0 and node.is_method?
@@ -73,7 +73,7 @@ module Ruby2JS
73
73
  if es2015
74
74
  process S(:send, s(:const, nil, :Array), :from, *args)
75
75
  else
76
- process S(:send, s(:attr, s(:attr, s(:const, nil, :Array),
76
+ process S(:send, s(:attr, s(:attr, s(:const, nil, :Array),
77
77
  :prototype), :slice), :call, *args)
78
78
  end
79
79
 
@@ -84,19 +84,22 @@ module Ruby2JS
84
84
  process node.updated :send, [nil, :parseFloat, target, *args]
85
85
 
86
86
  elsif method == :sub and args.length == 2
87
+ if args[1].type == :str
88
+ args[1] = s(:str, args[1].children.first.gsub(/\\(\d)/, "$\\1"))
89
+ end
87
90
  process node.updated nil, [target, :replace, *args]
88
91
 
89
92
  elsif [:sub!, :gsub!].include? method
90
93
  method = :"#{method.to_s[0..-2]}"
91
94
  if VAR_TO_ASSIGN.keys.include? target.type
92
- process S(VAR_TO_ASSIGN[target.type], target.children[0],
95
+ process S(VAR_TO_ASSIGN[target.type], target.children[0],
93
96
  S(:send, target, method, *node.children[2..-1]))
94
97
  elsif target.type == :send
95
98
  if target.children[0] == nil
96
99
  process S(:lvasgn, target.children[1], S(:send,
97
100
  S(:lvar, target.children[1]), method, *node.children[2..-1]))
98
101
  else
99
- process S(:send, target.children[0], :"#{target.children[1]}=",
102
+ process S(:send, target.children[0], :"#{target.children[1]}=",
100
103
  S(:send, target, method, *node.children[2..-1]))
101
104
  end
102
105
  else
@@ -119,7 +122,7 @@ module Ruby2JS
119
122
  else
120
123
  super
121
124
  end
122
-
125
+
123
126
  if pattern.include? '('
124
127
  s(:block, s(:send,
125
128
  s(:send, process(target), :match, gpattern), :map),
@@ -139,6 +142,9 @@ module Ruby2JS
139
142
  before = before.updated(:regexp,
140
143
  [s(:str, Regexp.escape(before.children.first)), s(:regopt, :g)])
141
144
  end
145
+ if after.type == :str
146
+ after = s(:str, after.children.first.gsub(/\\(\d)/, "$\\1"))
147
+ end
142
148
  process node.updated nil, [target, :replace, before, after]
143
149
 
144
150
  elsif method == :ord and args.length == 0
@@ -176,10 +182,10 @@ module Ruby2JS
176
182
  end
177
183
 
178
184
  if method == :start_with?
179
- process S(:send, S(:send, target, :substring, s(:int, 0),
185
+ process S(:send, S(:send, target, :substring, s(:int, 0),
180
186
  length), :==, *args)
181
187
  else
182
- process S(:send, S(:send, target, :slice,
188
+ process S(:send, S(:send, target, :slice,
183
189
  S(:send, length, :-@)), :==, *args)
184
190
  end
185
191
  end
@@ -203,8 +209,12 @@ module Ruby2JS
203
209
  S(:and, s(:send, args.first, :>=, target.children.first),
204
210
  s(:send, args.first, :<, target.children.last))
205
211
  else
206
- process S(:send, S(:send, target, :indexOf, args.first), :!=,
207
- s(:int, -1))
212
+ if es2016
213
+ process S(:send, target, :includes, args.first)
214
+ else
215
+ process S(:send, S(:send, target, :indexOf, args.first), :!=,
216
+ s(:int, -1))
217
+ end
208
218
  end
209
219
 
210
220
  elsif method == :respond_to? and args.length == 1
@@ -220,7 +230,7 @@ module Ruby2JS
220
230
  process S(:send, target, :toUpperCase)
221
231
 
222
232
  elsif method == :strip and args.length == 0
223
- process S(:send, target, :trim)
233
+ process s(:send, target, :trim)
224
234
 
225
235
  elsif node.children[0..1] == [nil, :puts]
226
236
  process S(:send, s(:attr, nil, :console), :log, *args)
@@ -251,7 +261,7 @@ module Ruby2JS
251
261
  # resolve negative literal indexes
252
262
  i = proc do |index|
253
263
  if index.type == :int and index.children.first < 0
254
- process S(:send, S(:attr, target, :length), :-,
264
+ process S(:send, S(:attr, target, :length), :-,
255
265
  s(:int, -index.children.first))
256
266
  else
257
267
  index
@@ -264,7 +274,7 @@ module Ruby2JS
264
274
  super
265
275
 
266
276
  elsif index.type == :regexp
267
- process S(:send,
277
+ process S(:send,
268
278
  s(:or, S(:send, process(target), :match, index), s(:array)),
269
279
  :[], args[1] || s(:int, 0))
270
280
 
@@ -302,11 +312,11 @@ module Ruby2JS
302
312
  super
303
313
  end
304
314
 
305
- elsif method == :reverse! and node.is_method?
315
+ elsif method == :reverse! and node.is_method?
306
316
  # input: a.reverse!
307
317
  # output: a.splice(0, a.length, *a.reverse)
308
- process S(:send, target, :splice, s(:int, 0),
309
- s(:attr, target, :length), s(:splat, S(:send, target,
318
+ process S(:send, target, :splice, s(:int, 0),
319
+ s(:attr, target, :length), s(:splat, S(:send, target,
310
320
  :reverse, *node.children[2..-1])))
311
321
 
312
322
  elsif method == :each_with_index
@@ -331,7 +341,7 @@ module Ruby2JS
331
341
  S(:send, s(:const, nil, :Array), :isArray, target)
332
342
  elsif [:Arguments, :Boolean, :Date, :Error, :Function, :Number,
333
343
  :Object, :RegExp, :String].include? parent
334
- S(:send, s(:send, s(:attr, s(:attr, s(:const, nil, Object),
344
+ S(:send, s(:send, s(:attr, s(:attr, s(:const, nil, Object),
335
345
  :prototype), :toString), :call, target), :===,
336
346
  s(:str, "[object #{parent.to_s}]"))
337
347
  else
@@ -415,7 +425,7 @@ module Ruby2JS
415
425
  # output: a.splice(0, a.length, *a.map {expression})
416
426
  method = (method == :map! ? :map : :select)
417
427
  target = call.children.first
418
- process call.updated(:send, [target, :splice, s(:splat, s(:send,
428
+ process call.updated(:send, [target, :splice, s(:splat, s(:send,
419
429
  s(:array, s(:int, 0), s(:attr, target, :length)), :concat,
420
430
  s(:block, s(:send, target, method, *call.children[2..-1]),
421
431
  *node.children[1..-1])))])
@@ -432,11 +442,11 @@ module Ruby2JS
432
442
  if result.children[0].type == :undef
433
443
  call = result.children[0].children[0]
434
444
  if call.type == :attr
435
- call = call.updated(:send,
445
+ call = call.updated(:send,
436
446
  [call.children[0], :delete, s(:str, call.children[1])])
437
447
  result = result.updated(nil, [call, *result.children[1..-1]])
438
448
  else
439
- call = call.updated(nil,
449
+ call = call.updated(nil,
440
450
  [call.children[0], :delete, *call.children[2..-1]])
441
451
  result = result.updated(nil, [call, *result.children[1..-1]])
442
452
  end
@@ -454,19 +464,19 @@ module Ruby2JS
454
464
  call = call.updated(nil, [s(:begin, range), :step, s(:int, 1)])
455
465
  process node.updated(nil, [call, *node.children[1..-1]])
456
466
 
457
- elsif
467
+ elsif
458
468
  method == :each and call.children[0].type == :send and
459
469
  call.children[0].children[1] == :step
460
470
  then
461
471
  # i.step(j, n).each {|v| ...}
462
472
  range = call.children[0]
463
473
  step = range.children[3] || s(:int, 1)
464
- call = call.updated(nil, [s(:begin,
474
+ call = call.updated(nil, [s(:begin,
465
475
  s(:irange, range.children[0], range.children[2])),
466
476
  :step, step])
467
477
  process node.updated(nil, [call, *node.children[1..-1]])
468
478
 
469
- elsif
479
+ elsif
470
480
  # (a..b).each {|v| ...}
471
481
  method == :each and
472
482
  call.children[0].type == :begin and
@@ -474,28 +484,28 @@ module Ruby2JS
474
484
  [:irange, :erange].include? call.children[0].children[0].type and
475
485
  node.children[1].children.length == 1
476
486
  then
477
- s(:for, s(:lvasgn, node.children[1].children[0].children[0]),
487
+ s(:for, s(:lvasgn, node.children[1].children[0].children[0]),
478
488
  call.children[0].children[0], node.children[2])
479
489
 
480
- elsif
481
- [:each, :each_value].include? method and
490
+ elsif
491
+ [:each, :each_value].include? method and
482
492
  node.children[1].children.length == 1
483
493
  then
484
494
  if es2015
485
- process node.updated(:for_of,
495
+ process node.updated(:for_of,
486
496
  [s(:lvasgn, node.children[1].children[0].children[0]),
487
497
  node.children[0].children[0], node.children[2]])
488
498
  else
489
- process node.updated(nil, [s(:send, call.children[0],
499
+ process node.updated(nil, [s(:send, call.children[0],
490
500
  :forEach), *node.children[1..2]])
491
501
  end
492
502
 
493
- elsif
494
- method == :each_key and
495
- [:each, :each_key].include? method and
503
+ elsif
504
+ method == :each_key and
505
+ [:each, :each_key].include? method and
496
506
  node.children[1].children.length == 1
497
507
  then
498
- process node.updated(:for,
508
+ process node.updated(:for,
499
509
  [s(:lvasgn, node.children[1].children[0].children[0]),
500
510
  node.children[0].children[0], node.children[2]])
501
511
 
@@ -519,7 +529,7 @@ module Ruby2JS
519
529
  body.compact!
520
530
 
521
531
  if inheritance == s(:const, nil, :Exception)
522
- unless
532
+ unless
523
533
  body.any? {|statement| statement.type == :def and
524
534
  statement.children.first == :initialize}
525
535
  then
@@ -2,7 +2,7 @@ module Ruby2JS
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
4
  MINOR = 0
5
- TINY = 13
5
+ TINY = 14
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby2js
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.13
4
+ version: 3.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Ruby
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-26 00:00:00.000000000 Z
11
+ date: 2019-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser