ruby2js 4.1.1 → 4.1.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6b96695d82101133b8d791e19d0f04fa5c6c56c16bb6504b447cf26e0e1291db
4
- data.tar.gz: 9a7711f281076e14e354bcab9fd8f96de5b884153360a9b5fdb57b6fa9c5a792
3
+ metadata.gz: 412d541e9884847f722555edd11a71ead4c2358632976bf32f530ca270eb539b
4
+ data.tar.gz: f32b8d14177ee0f08466abfbb4a96017e6dc8a4e5a2226476c77f26affa7f81d
5
5
  SHA512:
6
- metadata.gz: f64daa6dad4b3ed8d475654e588a8f921782fc11aceecb01886b8c039139bdc716f863eb25f57c119410da1a180273cbf9f66992da0555ce66b1131c31deab44
7
- data.tar.gz: f5ffccf5acc15710797fc566ba89730f34d5884492892d4972fa9d4ad6ef785e1875bd4e3ffb25a9cb0148d77c4501aed8ea21e3f1171c55c5ca13104c274f56
6
+ metadata.gz: c4be8efc1eb9ec2f1de81f5c0236b6ea3c868522043e305cb0dfcac80e61b1e57e5639f77ad2a0a6aa44b7b5eb87842db5a7072f42ab25ad625474904d88e4b8
7
+ data.tar.gz: 6f8c9c91f1ca05f4363023ee588e356226dbafcf09235d5ab25c5ffaef564109a4c653673bbf8a6da1c0b3a231f84231f25089fdd0c0207e7ddd6c8d25dfd7d7
@@ -359,6 +359,7 @@ require 'ruby2js/converter/kwbegin'
359
359
  require 'ruby2js/converter/literal'
360
360
  require 'ruby2js/converter/logical'
361
361
  require 'ruby2js/converter/masgn'
362
+ require 'ruby2js/converter/match'
362
363
  require 'ruby2js/converter/module'
363
364
  require 'ruby2js/converter/next'
364
365
  require 'ruby2js/converter/nil'
@@ -169,7 +169,9 @@ module Ruby2JS
169
169
  put 'function'
170
170
  end
171
171
 
172
- put '('; parse args; put ") {#{nl}"
172
+ put '('
173
+ parse s(:args, *args.children.select {|arg| arg.type != :shadowarg})
174
+ put ") {#{nl}"
173
175
 
174
176
  next_token, @next_token = @next_token, :return
175
177
  @block_depth += 1 if @block_depth
@@ -69,7 +69,7 @@ module Ruby2JS
69
69
  left = rewrite(*left.children)
70
70
  end
71
71
 
72
- if right.type != :send
72
+ if right.type != :send or OPERATORS.flatten.include? right.children[1]
73
73
  s(:and, left, right)
74
74
  elsif conditionally_equals(left, right.children.first)
75
75
  # a && a.b => a&.b
@@ -0,0 +1,7 @@
1
+ module Ruby2JS
2
+ class Converter
3
+ handle :match_pattern do |value, name|
4
+ parse @ast.updated(:lvasgn, [name.children.first, value]), @state
5
+ end
6
+ end
7
+ end
@@ -323,13 +323,13 @@ module Ruby2JS
323
323
  put 'typeof '; parse args.first
324
324
 
325
325
  elsif ast.children[1] == :is_a? and receiver and args.length == 1
326
- parse receiver; put ' instanceof '; parse args.first
326
+ put '('; parse receiver; put ' instanceof '; parse args.first; put ')'
327
327
 
328
328
  elsif ast.children[1] == :kind_of? and receiver and args.length == 1
329
- parse receiver; put ' instanceof '; parse args.first
329
+ put '('; parse receiver; put ' instanceof '; parse args.first; put ')'
330
330
 
331
331
  elsif ast.children[1] == :instance_of? and receiver and args.length == 1
332
- parse s(:send, s(:attr, receiver, :constructor), :==, args.first)
332
+ put '('; parse s(:send, s(:attr, receiver, :constructor), :==, args.first); put ')'
333
333
 
334
334
  else
335
335
  if method == :bind and receiver&.type == :send
@@ -7,7 +7,6 @@ module Ruby2JS
7
7
 
8
8
  def on_send(node)
9
9
  target, method, *args = node.children
10
- return super unless args.empty?
11
10
 
12
11
  if es2015 and method == :blank?
13
12
  create_or_update_import("blank$")
@@ -18,6 +17,15 @@ module Ruby2JS
18
17
  elsif es2015 and method == :presence
19
18
  create_or_update_import("presence$")
20
19
  process node.updated :send, [nil, "presence$", target]
20
+ elsif es2015 and method == :chomp
21
+ create_or_update_import("chomp$")
22
+ process node.updated :send, [nil, "chomp$", target, *args]
23
+ elsif es2015 and method == :delete_prefix
24
+ create_or_update_import("deletePrefix$")
25
+ process node.updated :send, [nil, "deletePrefix$", target, *args]
26
+ elsif es2015 and method == :delete_suffix
27
+ create_or_update_import("deleteSuffix$")
28
+ process node.updated :send, [nil, "deleteSuffix$", target, *args]
21
29
  else
22
30
  super
23
31
  end
@@ -14,6 +14,9 @@ module Ruby2JS
14
14
  attr_reader
15
15
  attr_writer
16
16
  method_missing
17
+ is_a?
18
+ kind_of?
19
+ instance_of?
17
20
  }
18
21
 
19
22
  CAPS_EXCEPTIONS = {
@@ -28,6 +31,8 @@ module Ruby2JS
28
31
  }
29
32
 
30
33
  def camelCase(symbol)
34
+ return symbol if ALLOWLIST.include?(symbol.to_s)
35
+
31
36
  should_symbolize = symbol.is_a?(Symbol)
32
37
  symbol = symbol
33
38
  .to_s
@@ -64,7 +69,7 @@ module Ruby2JS
64
69
  def handle_generic_node(node, node_type)
65
70
  return node if node.type != node_type
66
71
 
67
- if node.children[0] =~ /_.*\w$/ and !ALLOWLIST.include?(node.children[0].to_s)
72
+ if node.children[0] =~ /_.*[?!\w]$/ and !ALLOWLIST.include?(node.children[0].to_s)
68
73
  S(node_type , camelCase(node.children[0]), *node.children[1..-1])
69
74
  else
70
75
  node
@@ -99,6 +104,10 @@ module Ruby2JS
99
104
  handle_generic_node(super, :arg)
100
105
  end
101
106
 
107
+ def on_kwarg(node)
108
+ handle_generic_node(super, :kwarg)
109
+ end
110
+
102
111
  def on_lvasgn(node)
103
112
  handle_generic_node(super, :lvasgn)
104
113
  end
@@ -111,6 +120,14 @@ module Ruby2JS
111
120
  handle_generic_node(super, :cvasgn)
112
121
  end
113
122
 
123
+ def on_match_pattern(node)
124
+ handle_generic_node(super, :match_pattern)
125
+ end
126
+
127
+ def on_match_var(node)
128
+ handle_generic_node(super, :match_var)
129
+ end
130
+
114
131
  def on_sym(node)
115
132
  handle_generic_node(super, :sym)
116
133
  end
@@ -119,7 +136,7 @@ module Ruby2JS
119
136
  node = super
120
137
  return node if node.type != :defs
121
138
 
122
- if node.children[1] =~ /_.*\w$/
139
+ if node.children[1] =~ /_.*[?!\w]$/
123
140
  S(:defs , node.children[0],
124
141
  camelCase(node.children[1]), *node.children[2..-1])
125
142
  else
@@ -341,7 +341,11 @@ module Ruby2JS
341
341
 
342
342
  elsif method == :last
343
343
  if node.children.length == 2
344
- process on_send S(:send, target, :[], s(:int, -1))
344
+ if es2022
345
+ process S(:send, target, :at, s(:int, -1))
346
+ else
347
+ process on_send S(:send, target, :[], s(:int, -1))
348
+ end
345
349
  elsif node.children.length == 3
346
350
  process S(:send, target, :slice,
347
351
  s(:send, s(:attr, target, :length), :-, node.children[2]),
@@ -358,8 +362,12 @@ module Ruby2JS
358
362
  # resolve negative literal indexes
359
363
  i = proc do |index|
360
364
  if index.type == :int and index.children.first < 0
361
- process S(:send, S(:attr, target, :length), :-,
362
- s(:int, -index.children.first))
365
+ if es2022
366
+ return process S(:send, target, :at, index)
367
+ else
368
+ process S(:send, S(:attr, target, :length), :-,
369
+ s(:int, -index.children.first))
370
+ end
363
371
  else
364
372
  index
365
373
  end
@@ -36,7 +36,7 @@ module Ruby2JS
36
36
  end
37
37
 
38
38
  def on_class(node)
39
- cname, inheritance, *body = node.children
39
+ _, inheritance, *body = node.children
40
40
  return super unless inheritance == s(:const, nil, :LitElement)
41
41
 
42
42
  @le_props = {}
@@ -1492,7 +1492,13 @@ module Ruby2JS
1492
1492
  source = Ruby2JS.jsx2_rb(source)
1493
1493
  ast = Ruby2JS.parse(source).first
1494
1494
  ast = s(:block, s(:send, nil, :_), s(:args), ast) if ast.type == :begin
1495
- process ast
1495
+
1496
+ begin
1497
+ react, @react = @react, @react || :react
1498
+ process ast
1499
+ ensure
1500
+ @react = react
1501
+ end
1496
1502
  end
1497
1503
  end
1498
1504
 
@@ -300,22 +300,29 @@ module Ruby2JS
300
300
  BASE64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
301
301
 
302
302
  # https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit
303
+ # http://sokra.github.io/source-map-visualization/
303
304
  def vlq(*mark)
304
- if @mark[0] == mark[0]
305
- return if @mark[-3..-1] == mark[-3..-1]
306
- @mappings += ',' unless @mappings == ''
305
+ if !@mark
306
+ diffs = mark
307
+ @mark = [0, 0, 0, 0, 0, 0]
308
+ else
309
+ if @mark[0] == mark[0]
310
+ return if @mark[4] == mark[4] and @mark[3] == mark[3]
311
+ @mappings += ',' unless @mappings == ''
312
+ end
313
+
314
+ diffs = mark.zip(@mark).map {|a,b| a-b}
307
315
  end
308
316
 
309
317
  while @mark[0] < mark[0]
310
318
  @mappings += ';'
311
319
  @mark[0] += 1
312
- @mark[1] = 0
320
+ diffs[1] = mark[1]
313
321
  end
314
322
 
315
- diffs = mark.zip(@mark).map {|a,b| a-b}
316
- @mark = mark
323
+ @mark[0...mark.length] = mark
317
324
 
318
- diffs[1..4].each do |diff|
325
+ diffs[1..-1].each do |diff|
319
326
  if diff < 0
320
327
  data = (-diff << 1) + 1
321
328
  else
@@ -345,7 +352,8 @@ module Ruby2JS
345
352
 
346
353
  @mappings = ''
347
354
  sources = []
348
- @mark = [0, 0, 0, 0, 0]
355
+ names = []
356
+ @mark = nil
349
357
 
350
358
  @lines.each_with_index do |line, row|
351
359
  col = line.indent
@@ -361,8 +369,30 @@ module Ruby2JS
361
369
  sources << buffer
362
370
  end
363
371
 
364
- split = buffer.source[0...pos].split("\n")
365
- vlq row, col, source_index, [split.length - 1, 0].max, split.last.to_s.length
372
+ line = buffer.line_for_position(pos) - 1
373
+ column = buffer.column_for_position(pos)
374
+
375
+ name = nil
376
+ if %i{lvasgn lvar}.include? token.ast.type
377
+ name = token.ast.children.first
378
+ elsif %i{casgn const}.include? token.ast.type
379
+ if token.ast.children.first == nil
380
+ name = token.ast.children[1]
381
+ end
382
+ end
383
+
384
+ if name
385
+ index = names.find_index(name)
386
+
387
+ unless index
388
+ index = names.length
389
+ names << name
390
+ end
391
+
392
+ vlq row, col, source_index, line, column, index
393
+ else
394
+ vlq row, col, source_index, line, column
395
+ end
366
396
  end
367
397
  col += token.length
368
398
  end
@@ -372,6 +402,7 @@ module Ruby2JS
372
402
  version: 3,
373
403
  file: @file_name,
374
404
  sources: sources.map(&:name),
405
+ names: names.map(&:to_s),
375
406
  mappings: @mappings
376
407
  }
377
408
  end
@@ -2,7 +2,7 @@ module Ruby2JS
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 4
4
4
  MINOR = 1
5
- TINY = 1
5
+ TINY = 5
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby2js
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.1
4
+ version: 4.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Ruby
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-03-26 00:00:00.000000000 Z
12
+ date: 2021-08-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: parser
@@ -85,6 +85,7 @@ files:
85
85
  - lib/ruby2js/converter/literal.rb
86
86
  - lib/ruby2js/converter/logical.rb
87
87
  - lib/ruby2js/converter/masgn.rb
88
+ - lib/ruby2js/converter/match.rb
88
89
  - lib/ruby2js/converter/module.rb
89
90
  - lib/ruby2js/converter/next.rb
90
91
  - lib/ruby2js/converter/nil.rb