code-ruby 1.6.2 → 1.6.4

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: af47589cc6afaaec99b2aba7ed43af665f20de7bba2b5d3bc377eab281094cd6
4
- data.tar.gz: 9203c5dbd24e58a1111ddc9505d429065c9a31210cd9e71e5e7d7fc9f49ef467
3
+ metadata.gz: af2adf985d8e7594595b500b4d52fbd5ef08e820a2e89945e6d33f1bd391151b
4
+ data.tar.gz: 1e885e11f105955981527e7b672e79e2dd7570dd6139a2edd5839ff2c768d63d
5
5
  SHA512:
6
- metadata.gz: b44776a7dc3bd70b03ae61fe921101b00ecd6ed084dfb674d403cf3fc55fc1d4d7890b0d9ef4147d970936716ceb568e8c91cd25adb08460c785c3b5b076ba94
7
- data.tar.gz: f0331a5566bb8232444a02136612e1ad72ec47cbe588440d2d6bcfe42e8bc00649c4bfe3590f71c34d1f802055bd50a5e8b289c827cadc47ff46ea12a737106f
6
+ metadata.gz: dc692c54367d6745f0ac183885d879f47ebecce1c527a5b42ff6c960b2a98a6cfe19961d3ac4075e4dc0d1e94cdbaf8d51ab195b6bb48dc3130e69d46d7ebfc0
7
+ data.tar.gz: e214de6ae389e3e37a0337c8d8bf33e8df7d8a74f64a5a4f2a2a124f81029c9e89f91a1a5514b445a6bc49d97567f676ed89e286e1c5f1e41653135a7d24722b
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- code-ruby (1.6.2)
4
+ code-ruby (1.6.4)
5
5
  activesupport
6
6
  base64
7
7
  bigdecimal
@@ -35,9 +35,9 @@ GEM
35
35
  addressable (2.8.7)
36
36
  public_suffix (>= 2.0.2, < 7.0)
37
37
  ast (2.4.3)
38
- base64 (0.2.0)
39
- benchmark (0.4.0)
40
- bigdecimal (3.1.9)
38
+ base64 (0.3.0)
39
+ benchmark (0.4.1)
40
+ bigdecimal (3.2.2)
41
41
  bundler-audit (0.9.2)
42
42
  bundler (>= 1.2.0, < 3)
43
43
  thor (~> 1.0)
@@ -47,7 +47,7 @@ GEM
47
47
  crack (1.0.0)
48
48
  bigdecimal
49
49
  rexml
50
- csv (3.3.4)
50
+ csv (3.3.5)
51
51
  date (3.4.1)
52
52
  did-you-mean (0.1.1)
53
53
  levenshtein (>= 0.2.0)
@@ -77,18 +77,18 @@ GEM
77
77
  dorian-progress (1.1.2)
78
78
  ruby-progressbar
79
79
  dorian-to_struct (2.0.2)
80
- drb (2.2.1)
80
+ drb (2.2.3)
81
81
  geom2d (0.4.1)
82
- git (3.0.2)
82
+ git (4.0.4)
83
83
  activesupport (>= 5.0)
84
84
  addressable (~> 2.8)
85
- process_executer (~> 1.3)
85
+ process_executer (~> 4.0)
86
86
  rchardet (~> 1.9)
87
87
  haml (6.3.0)
88
88
  temple (>= 0.8.2)
89
89
  thor
90
90
  tilt
91
- hashdiff (1.1.2)
91
+ hashdiff (1.2.0)
92
92
  hexapdf (1.3.0)
93
93
  cmdparse (~> 3.0, >= 3.0.3)
94
94
  geom2d (~> 0.4, >= 0.4.1)
@@ -96,15 +96,14 @@ GEM
96
96
  strscan (>= 3.1.2)
97
97
  i18n (1.14.7)
98
98
  concurrent-ruby (~> 1.0)
99
- json (2.12.0)
99
+ json (2.12.2)
100
100
  language-ruby (1.2.0)
101
101
  dorian-arguments
102
102
  zeitwerk
103
103
  language_server-protocol (3.17.0.5)
104
104
  levenshtein (0.2.2)
105
- libv8-node (23.6.1.0)
106
- libv8-node (23.6.1.0-arm64-darwin)
107
- libv8-node (23.6.1.0-x86_64-linux)
105
+ libv8-node (24.1.0.0-arm64-darwin)
106
+ libv8-node (24.1.0.0-x86_64-linux)
108
107
  lint_roller (1.1.0)
109
108
  logger (1.7.0)
110
109
  mail (2.8.1)
@@ -113,14 +112,14 @@ GEM
113
112
  net-pop
114
113
  net-smtp
115
114
  mini_mime (1.1.5)
116
- mini_racer (0.18.1)
117
- libv8-node (~> 23.6.1.0)
115
+ mini_racer (0.19.0)
116
+ libv8-node (~> 24.1.0.0)
118
117
  minitest (5.25.5)
119
118
  mustermann (3.0.3)
120
119
  ruby2_keywords (~> 0.0.1)
121
120
  net-http (0.6.0)
122
121
  uri
123
- net-imap (0.5.8)
122
+ net-imap (0.5.9)
124
123
  date
125
124
  net-protocol
126
125
  net-pop (0.1.2)
@@ -134,17 +133,18 @@ GEM
134
133
  nokogiri (1.18.8-x86_64-linux-gnu)
135
134
  racc (~> 1.4)
136
135
  openssl (3.3.0)
137
- ostruct (0.6.1)
136
+ ostruct (0.6.2)
138
137
  parallel (1.27.0)
139
138
  parser (3.3.8.0)
140
139
  ast (~> 2.4.1)
141
140
  racc
142
141
  prettier_print (1.2.1)
143
142
  prism (1.4.0)
144
- process_executer (1.3.0)
143
+ process_executer (4.0.0)
144
+ track_open_instances (~> 0.1)
145
145
  public_suffix (6.0.2)
146
146
  racc (1.8.1)
147
- rack (3.1.14)
147
+ rack (3.1.16)
148
148
  rack-protection (4.1.1)
149
149
  base64 (>= 0.1.0)
150
150
  logger (>= 1.6.0)
@@ -153,24 +153,24 @@ GEM
153
153
  base64 (>= 0.1.0)
154
154
  rack (>= 3.0.0)
155
155
  rainbow (3.1.1)
156
- rake (13.2.1)
156
+ rake (13.3.0)
157
157
  rchardet (1.9.0)
158
158
  regexp_parser (2.10.0)
159
159
  rexml (3.4.1)
160
- rspec (3.13.0)
160
+ rspec (3.13.1)
161
161
  rspec-core (~> 3.13.0)
162
162
  rspec-expectations (~> 3.13.0)
163
163
  rspec-mocks (~> 3.13.0)
164
- rspec-core (3.13.3)
164
+ rspec-core (3.13.5)
165
165
  rspec-support (~> 3.13.0)
166
- rspec-expectations (3.13.4)
166
+ rspec-expectations (3.13.5)
167
167
  diff-lcs (>= 1.2.0, < 2.0)
168
168
  rspec-support (~> 3.13.0)
169
- rspec-mocks (3.13.4)
169
+ rspec-mocks (3.13.5)
170
170
  diff-lcs (>= 1.2.0, < 2.0)
171
171
  rspec-support (~> 3.13.0)
172
- rspec-support (3.13.3)
173
- rubocop (1.75.6)
172
+ rspec-support (3.13.4)
173
+ rubocop (1.78.0)
174
174
  json (~> 2.3)
175
175
  language_server-protocol (~> 3.17.0.2)
176
176
  lint_roller (~> 1.1.0)
@@ -178,10 +178,10 @@ GEM
178
178
  parser (>= 3.3.0.2)
179
179
  rainbow (>= 2.2.2, < 4.0)
180
180
  regexp_parser (>= 2.9.3, < 3.0)
181
- rubocop-ast (>= 1.44.0, < 2.0)
181
+ rubocop-ast (>= 1.45.1, < 2.0)
182
182
  ruby-progressbar (~> 1.7)
183
183
  unicode-display_width (>= 2.4.0, < 4.0)
184
- rubocop-ast (1.44.1)
184
+ rubocop-ast (1.45.1)
185
185
  parser (>= 3.3.7.2)
186
186
  prism (~> 1.4)
187
187
  rubocop-capybara (2.22.1)
@@ -194,12 +194,12 @@ GEM
194
194
  lint_roller (~> 1.1)
195
195
  rubocop (>= 1.75.0, < 2.0)
196
196
  rubocop-ast (>= 1.38.0, < 2.0)
197
- rubocop-rails (2.31.0)
197
+ rubocop-rails (2.32.0)
198
198
  activesupport (>= 4.2.0)
199
199
  lint_roller (~> 1.1)
200
200
  rack (>= 1.1)
201
201
  rubocop (>= 1.75.0, < 2.0)
202
- rubocop-ast (>= 1.38.0, < 2.0)
202
+ rubocop-ast (>= 1.44.0, < 2.0)
203
203
  rubocop-rake (0.7.1)
204
204
  lint_roller (~> 1.1)
205
205
  rubocop (>= 1.72.1)
@@ -210,7 +210,8 @@ GEM
210
210
  lint_roller (~> 1.1)
211
211
  rubocop (~> 1.72, >= 1.72.1)
212
212
  rubocop-rspec (~> 3.5)
213
- ruby-prof (1.7.1)
213
+ ruby-prof (1.7.2)
214
+ base64
214
215
  ruby-progressbar (1.13.0)
215
216
  ruby2_keywords (0.0.5)
216
217
  securerandom (0.4.1)
@@ -235,8 +236,9 @@ GEM
235
236
  terminal-table (4.0.0)
236
237
  unicode-display_width (>= 1.1.1, < 4)
237
238
  thor (1.3.2)
238
- tilt (2.6.0)
239
+ tilt (2.6.1)
239
240
  timeout (0.4.3)
241
+ track_open_instances (0.1.15)
240
242
  tzinfo (2.0.6)
241
243
  concurrent-ruby (~> 1.0)
242
244
  unicode-display_width (3.1.4)
@@ -251,7 +253,7 @@ GEM
251
253
  crack (>= 0.3.2)
252
254
  hashdiff (>= 0.4.0, < 2.0.0)
253
255
  yaml (0.4.0)
254
- zeitwerk (2.7.2)
256
+ zeitwerk (2.7.3)
255
257
 
256
258
  PLATFORMS
257
259
  arm64-darwin-23
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.6.2
1
+ 1.6.4
data/bin/code CHANGED
@@ -46,7 +46,11 @@ RubyProf.start if profile
46
46
  input = 'loop { print("> ") puts(evaluate(read)) }' if input.blank?
47
47
 
48
48
  if parsed.options.parse
49
- pp Code::Parser.parse(input).to_raw
49
+ begin
50
+ pp Code::Parser.parse(input).to_raw
51
+ rescue Exception => e
52
+ warn e.message
53
+ end
50
54
  else
51
55
  begin
52
56
  print(
@@ -58,7 +62,7 @@ else
58
62
  timeout: parsed.options.timeout
59
63
  )
60
64
  )
61
- rescue Code::Error => e
65
+ rescue Exception => e
62
66
  warn e.message
63
67
  end
64
68
  end
@@ -8,10 +8,15 @@ class Code
8
8
  def initialize(parsed)
9
9
  return if parsed.blank?
10
10
 
11
- @name = parsed.delete(:name).presence
11
+ @name =
12
+ parsed.delete(:name).presence || parsed[:regular_splat].presence ||
13
+ parsed[:keyword_splat].presence || parsed[:spread].presence ||
14
+ parsed[:block].presence
12
15
  @keyword = parsed.delete(:keyword).present?
13
16
  @regular_splat = parsed.delete(:regular_splat).present?
14
17
  @keyword_splat = parsed.delete(:keyword_splat).present?
18
+ @spread = parsed.delete(:spread).present?
19
+ @block = parsed.delete(:block).present?
15
20
  @default = Code.new(parsed.delete(:default)) if parsed.key?(:default)
16
21
  end
17
22
 
@@ -35,6 +40,14 @@ class Code
35
40
  !!@keyword_splat
36
41
  end
37
42
 
43
+ def spread?
44
+ !!@spread
45
+ end
46
+
47
+ def block?
48
+ !!@block
49
+ end
50
+
38
51
  def to_h
39
52
  {
40
53
  name: name,
@@ -42,6 +55,8 @@ class Code
42
55
  keyword?: keyword?,
43
56
  regular_splat?: regular_splat?,
44
57
  keyword_splat?: keyword_splat?,
58
+ spread?: spread?,
59
+ block?: block?,
45
60
  default: default
46
61
  }
47
62
  end
@@ -38,12 +38,19 @@ class Code
38
38
 
39
39
  code_parameters.raw.each.with_index do |code_parameter, index|
40
40
  code_argument =
41
- if code_parameter.regular_splat?
41
+ if code_parameter.spread?
42
+ code_arguments
43
+ elsif code_parameter.regular_splat?
42
44
  code_arguments
43
45
  elsif code_parameter.keyword_splat?
44
46
  code_arguments.raw.detect do |code_argument|
45
47
  code_argument.is_a?(Dictionary)
46
48
  end || Dictionary.new
49
+ elsif code_parameter.block?
50
+ code_arguments
51
+ .raw
52
+ .detect { |code_argument| code_argument.is_a?(Function) }
53
+ .to_code
47
54
  elsif code_parameter.keyword?
48
55
  code_arguments
49
56
  .raw
@@ -71,7 +78,11 @@ class Code
71
78
  code_parameters
72
79
  .raw
73
80
  .inject([]) do |signature, code_parameter|
74
- if code_parameter.keyword_splat?
81
+ if code_parameter.spread?
82
+ signature + [Object.repeat]
83
+ elsif code_parameter.block?
84
+ signature + [Function]
85
+ elsif code_parameter.keyword_splat?
75
86
  signature + [Dictionary.maybe]
76
87
  elsif code_parameter.regular_splat?
77
88
  signature + [Object.repeat]
@@ -23,6 +23,14 @@ class Code
23
23
  Boolean.new(code_get(:keyword_splat?))
24
24
  end
25
25
 
26
+ def code_block?
27
+ Boolean.new(code_get(:block?))
28
+ end
29
+
30
+ def code_spread?
31
+ Boolean.new(code_get(:spread?))
32
+ end
33
+
26
34
  def code_required?
27
35
  code_default.code_falsy?
28
36
  end
@@ -62,6 +70,14 @@ class Code
62
70
  def keyword_splat?
63
71
  code_keyword_splat?.truthy?
64
72
  end
73
+
74
+ def spread?
75
+ code_spread?.truthy?
76
+ end
77
+
78
+ def block?
79
+ code_block?.truthy?
80
+ end
65
81
  end
66
82
  end
67
83
  end
@@ -67,6 +67,18 @@ class Code
67
67
  str("end")
68
68
  end
69
69
 
70
+ def asterisk
71
+ str("*")
72
+ end
73
+
74
+ def ampersand
75
+ str("&")
76
+ end
77
+
78
+ def spread_operator
79
+ str("...") | str("..") | str(".")
80
+ end
81
+
70
82
  def keyword_argument
71
83
  name.aka(:name) << whitespace? << colon << code.aka(:value)
72
84
  end
@@ -87,13 +99,19 @@ class Code
87
99
  ).repeat << whitespace? << closing_parenthesis.ignore.maybe
88
100
  end
89
101
 
102
+ def prefix
103
+ (asterisk << asterisk).aka(:keyword_splat) |
104
+ asterisk.aka(:regular_splat) | ampersand.aka(:block) |
105
+ spread_operator.aka(:spread)
106
+ end
107
+
90
108
  def keyword_parameter
91
109
  name.aka(:name) << whitespace? << colon.aka(:keyword) <<
92
110
  code_present.aka(:default).maybe
93
111
  end
94
112
 
95
113
  def regular_parameter
96
- name.aka(:name) << whitespace? <<
114
+ ((prefix.maybe << name.aka(:name)) | prefix) << whitespace? <<
97
115
  (equal << whitespace? << code_present.aka(:default)).maybe
98
116
  end
99
117
 
@@ -35,6 +35,10 @@ class Code
35
35
  str("end")
36
36
  end
37
37
 
38
+ def spread_operator
39
+ str("...") | str("..") | str(".")
40
+ end
41
+
38
42
  def opening_parenthesis
39
43
  str("(")
40
44
  end
@@ -77,7 +81,8 @@ class Code
77
81
 
78
82
  def prefix
79
83
  (asterisk << asterisk).aka(:keyword_splat) |
80
- asterisk.aka(:regular_splat) | ampersand.aka(:block)
84
+ asterisk.aka(:regular_splat) | ampersand.aka(:block) |
85
+ spread_operator.aka(:spread)
81
86
  end
82
87
 
83
88
  def keyword_parameter
@@ -86,7 +91,7 @@ class Code
86
91
  end
87
92
 
88
93
  def regular_parameter
89
- prefix.maybe << name.aka(:name) << whitespace? <<
94
+ ((prefix.maybe << name.aka(:name)) | prefix) << whitespace? <<
90
95
  (equal << whitespace? << code_present.aka(:default)).maybe
91
96
  end
92
97
 
@@ -139,6 +139,10 @@ class Code
139
139
  str("?")
140
140
  end
141
141
 
142
+ def special_name
143
+ str("...") | str("..") | str(".") | str("**") | str("*") | str("&")
144
+ end
145
+
142
146
  def reserved_character
143
147
  ampersand | equal | pipe | dot | colon | comma | space | newline |
144
148
  opening_curly_bracket | closing_curly_bracket | opening_parenthesis |
@@ -167,8 +171,13 @@ class Code
167
171
  end
168
172
 
169
173
  def root
170
- (keyword << separator).absent << special_characters.absent <<
171
- character.repeat(1)
174
+ (
175
+ (special_name << separator.ignore) |
176
+ (
177
+ (keyword << separator).absent << special_characters.absent <<
178
+ character.repeat(1)
179
+ )
180
+ )
172
181
  end
173
182
  end
174
183
  end
data/spec/code_spec.rb CHANGED
@@ -13,6 +13,8 @@ RSpec.describe Code do
13
13
  "Object.new !== Object.new"
14
14
  ] +
15
15
  %w[
16
+ 1..3
17
+ 1...3
16
18
  :abc.size
17
19
  Date.new.change
18
20
  {}.zero?
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-06-21 00:00:00.000000000 Z
10
+ date: 2025-07-15 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: activesupport