code-ruby 1.6.2 → 1.6.3
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/Gemfile.lock +1 -1
- data/VERSION +1 -1
- data/bin/code +6 -2
- data/lib/code/node/function_parameter.rb +16 -1
- data/lib/code/object/context.rb +1 -0
- data/lib/code/object/function.rb +13 -2
- data/lib/code/object/parameter.rb +16 -0
- data/lib/code/parser/call.rb +19 -1
- data/lib/code/parser/function.rb +7 -2
- data/lib/code/parser/name.rb +11 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 31de900f45b607432af42419aedea361f2a751aa6d635caaa01edced89a2a591
|
4
|
+
data.tar.gz: 121236f92f037d3ba10b45a8d92dabd08972241262c588cfbe370ff60822f642
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3774304c7976b6295f49c6da4a9ccd473151cb0097f8e3848a58941498a8b3502c477f6095c148811d72b43bbbbbdf869848c4ceeac87515b47fc596a55d1aa
|
7
|
+
data.tar.gz: edb7ff295ed91f0b555f2e8e8bab351a2002ff80db28aaaab037d4d7c22b42d55b3a41712e73a64855c872ad8d7579dee9d4dbe23119a37211c902c870adc165
|
data/Gemfile.lock
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.6.
|
1
|
+
1.6.3
|
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
|
-
|
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
|
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 =
|
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
|
data/lib/code/object/context.rb
CHANGED
data/lib/code/object/function.rb
CHANGED
@@ -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.
|
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.
|
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
|
data/lib/code/parser/call.rb
CHANGED
@@ -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
|
|
data/lib/code/parser/function.rb
CHANGED
@@ -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
|
|
data/lib/code/parser/name.rb
CHANGED
@@ -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
|
-
(
|
171
|
-
|
174
|
+
(
|
175
|
+
special_name |
|
176
|
+
(
|
177
|
+
(keyword << separator).absent << special_characters.absent <<
|
178
|
+
character.repeat(1)
|
179
|
+
)
|
180
|
+
)
|
172
181
|
end
|
173
182
|
end
|
174
183
|
end
|
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.
|
4
|
+
version: 1.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dorian Marié
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-06-
|
10
|
+
date: 2025-06-25 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: activesupport
|