code-ruby 0.4.0 → 0.5.0

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.
Files changed (204) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/Gemfile +2 -1
  4. data/Gemfile.lock +27 -54
  5. data/TODO +17 -0
  6. data/bin/code +56 -31
  7. data/bin/format +3 -0
  8. data/bin/template +62 -20
  9. data/bin/test +17 -0
  10. data/code-ruby.gemspec +1 -3
  11. data/docs/class.code +9 -0
  12. data/docs/euler/1.template +1 -5
  13. data/docs/euler/5.template +0 -1
  14. data/docs/meetup.code +12 -0
  15. data/docs/precedence.template +6 -39
  16. data/docs/rain.code +22 -0
  17. data/docs/slack.code +17 -0
  18. data/docs/stripe.code +7 -0
  19. data/docs/twitter.code +9 -0
  20. data/language-ruby.gemspec +18 -0
  21. data/lib/code/node/base_10.rb +29 -0
  22. data/lib/code/node/base_16.rb +13 -0
  23. data/lib/code/node/base_2.rb +13 -0
  24. data/lib/code/node/base_8.rb +13 -0
  25. data/lib/code/node/boolean.rb +7 -7
  26. data/lib/code/node/call.rb +32 -38
  27. data/lib/code/node/call_argument.rb +11 -27
  28. data/lib/code/node/chained_call.rb +10 -27
  29. data/lib/code/node/code.rb +4 -6
  30. data/lib/code/node/decimal.rb +26 -0
  31. data/lib/code/node/dictionnary.rb +20 -9
  32. data/lib/code/node/equal.rb +18 -20
  33. data/lib/code/node/function.rb +10 -7
  34. data/lib/code/node/function_parameter.rb +31 -0
  35. data/lib/code/node/if.rb +36 -32
  36. data/lib/code/node/if_modifier.rb +35 -36
  37. data/lib/code/node/list.rb +6 -8
  38. data/lib/code/node/negation.rb +5 -23
  39. data/lib/code/node/not.rb +15 -0
  40. data/lib/code/node/nothing.rb +1 -1
  41. data/lib/code/node/number.rb +14 -12
  42. data/lib/code/node/operation.rb +21 -16
  43. data/lib/code/node/power.rb +10 -6
  44. data/lib/code/node/rescue.rb +4 -3
  45. data/lib/code/node/splat.rb +15 -0
  46. data/lib/code/node/statement.rb +48 -70
  47. data/lib/code/node/string.rb +42 -16
  48. data/lib/code/node/ternary.rb +7 -9
  49. data/lib/code/node/unary_minus.rb +5 -12
  50. data/lib/code/node/while.rb +17 -24
  51. data/lib/code/node.rb +7 -8
  52. data/lib/code/object/argument.rb +2 -11
  53. data/lib/code/object/decimal.rb +45 -30
  54. data/lib/code/object/dictionnary.rb +6 -5
  55. data/lib/code/object/function.rb +20 -23
  56. data/lib/code/object/global.rb +11 -6
  57. data/lib/code/object/integer.rb +73 -30
  58. data/lib/code/object/list.rb +40 -34
  59. data/lib/code/object/range.rb +18 -17
  60. data/lib/code/object/ruby_function.rb +12 -6
  61. data/lib/code/object/string.rb +22 -12
  62. data/lib/code/object.rb +82 -24
  63. data/lib/code/parser/addition.rb +12 -20
  64. data/lib/code/parser/and_operator.rb +9 -20
  65. data/lib/code/parser/bitwise_and.rb +9 -20
  66. data/lib/code/parser/bitwise_or.rb +12 -20
  67. data/lib/code/parser/boolean.rb +10 -7
  68. data/lib/code/parser/call.rb +92 -60
  69. data/lib/code/parser/chained_call.rb +47 -0
  70. data/lib/code/parser/class.rb +45 -0
  71. data/lib/code/parser/code.rb +17 -10
  72. data/lib/code/parser/dictionnary.rb +56 -30
  73. data/lib/code/parser/equal.rb +87 -35
  74. data/lib/code/parser/equality.rb +23 -24
  75. data/lib/code/parser/equality_lower.rb +9 -0
  76. data/lib/code/parser/function.rb +67 -42
  77. data/lib/code/parser/greater.rb +25 -0
  78. data/lib/code/parser/group.rb +13 -8
  79. data/lib/code/parser/if.rb +51 -21
  80. data/lib/code/parser/if_modifier.rb +43 -16
  81. data/lib/code/parser/list.rb +32 -19
  82. data/lib/code/parser/multiplication.rb +15 -20
  83. data/lib/code/parser/name.rb +96 -84
  84. data/lib/code/parser/negation.rb +20 -9
  85. data/lib/code/parser/not_keyword.rb +14 -12
  86. data/lib/code/parser/nothing.rb +13 -8
  87. data/lib/code/parser/number.rb +124 -68
  88. data/lib/code/parser/operation.rb +35 -0
  89. data/lib/code/parser/or_keyword.rb +12 -20
  90. data/lib/code/parser/or_operator.rb +9 -20
  91. data/lib/code/parser/power.rb +32 -14
  92. data/lib/code/parser/range.rb +9 -17
  93. data/lib/code/parser/rescue.rb +29 -13
  94. data/lib/code/parser/shift.rb +11 -21
  95. data/lib/code/parser/splat.rb +31 -0
  96. data/lib/code/parser/statement.rb +4 -3
  97. data/lib/code/parser/string.rb +53 -62
  98. data/lib/code/parser/ternary.rb +36 -15
  99. data/lib/code/parser/unary_minus.rb +23 -5
  100. data/lib/code/parser/while.rb +26 -15
  101. data/lib/code/parser/whitespace.rb +49 -0
  102. data/lib/code/parser.rb +15 -0
  103. data/lib/code/ruby.rb +13 -12
  104. data/lib/code-ruby.rb +2 -11
  105. data/lib/code.rb +16 -13
  106. data/lib/language/atom.rb +343 -0
  107. data/lib/language/output.rb +130 -0
  108. data/lib/language/parser/absent/present.rb +8 -0
  109. data/lib/language/parser/absent.rb +6 -0
  110. data/lib/language/parser/end_of_input.rb +6 -0
  111. data/lib/language/parser/interuption.rb +38 -0
  112. data/lib/language/parser/not_end_of_input.rb +6 -0
  113. data/lib/language/parser/str/not_found.rb +16 -0
  114. data/lib/language/parser/str.rb +6 -0
  115. data/lib/language/parser.rb +53 -0
  116. data/lib/language-ruby.rb +10 -0
  117. data/lib/language.rb +80 -0
  118. data/lib/template/node/code_part.rb +1 -1
  119. data/lib/template/node/part.rb +1 -1
  120. data/lib/template/node/template.rb +1 -1
  121. data/lib/template/node/text_part.rb +1 -1
  122. data/lib/template/node.rb +1 -1
  123. data/lib/template/parser/template.rb +26 -17
  124. data/lib/template/parser.rb +15 -0
  125. data/lib/template/version.rb +1 -1
  126. data/lib/template-ruby.rb +2 -11
  127. data/lib/template.rb +6 -11
  128. data/spec/code/addition_spec.rb +13 -0
  129. data/spec/code/and_operator_spec.rb +13 -0
  130. data/spec/code/bitwise_and_spec.rb +13 -0
  131. data/spec/code/bitwise_or_spec.rb +13 -0
  132. data/spec/code/boolean_spec.rb +13 -0
  133. data/spec/code/call_spec.rb +21 -0
  134. data/spec/code/chained_call_spec.rb +16 -0
  135. data/spec/code/dictionnary_spec.rb +17 -0
  136. data/spec/code/equal_spec.rb +26 -0
  137. data/spec/code/equality_spec.rb +13 -0
  138. data/spec/code/function_spec.rb +18 -0
  139. data/spec/code/greater_spec.rb +18 -0
  140. data/spec/code/group_spec.rb +12 -0
  141. data/spec/code/if_modifier_spec.rb +20 -0
  142. data/spec/code/if_spec.rb +25 -0
  143. data/spec/code/list_spec.rb +17 -0
  144. data/spec/code/multiplication_spec.rb +18 -0
  145. data/spec/code/negation_spec.rb +20 -0
  146. data/spec/code/not_keyword_spec.rb +13 -0
  147. data/spec/code/nothing_spec.rb +17 -0
  148. data/spec/code/number_spec.rb +22 -0
  149. data/spec/code/or_keyword_spec.rb +17 -0
  150. data/spec/code/or_operator_spec.rb +16 -0
  151. data/spec/code/parser/boolean_spec.rb +5 -7
  152. data/spec/code/parser/call_spec.rb +16 -56
  153. data/spec/code/parser/chained_call.rb +17 -0
  154. data/spec/code/parser/dictionnary_spec.rb +8 -9
  155. data/spec/code/parser/function_spec.rb +5 -21
  156. data/spec/code/parser/group_spec.rb +18 -0
  157. data/spec/code/parser/list_spec.rb +9 -20
  158. data/spec/code/parser/number_spec.rb +4 -109
  159. data/spec/code/parser/string_spec.rb +9 -17
  160. data/spec/code/parser_spec.rb +23 -0
  161. data/spec/code/power_spec.rb +13 -0
  162. data/spec/code/range_spec.rb +16 -0
  163. data/spec/code/rescue_spec.rb +13 -0
  164. data/spec/code/shift_spec.rb +13 -0
  165. data/spec/code/splat_spec.rb +13 -0
  166. data/spec/code/string_spec.rb +25 -0
  167. data/spec/code/ternary_spec.rb +18 -0
  168. data/spec/code/unary_minus_spec.rb +13 -0
  169. data/spec/code/while_spec.rb +18 -0
  170. data/spec/spec_helper.rb +4 -1
  171. data/template-ruby.gemspec +2 -4
  172. metadata +110 -71
  173. data/lib/code/node/base_10_decimal.rb +0 -32
  174. data/lib/code/node/base_10_integer.rb +0 -32
  175. data/lib/code/node/base_10_number.rb +0 -19
  176. data/lib/code/node/base_16_number.rb +0 -19
  177. data/lib/code/node/base_2_number.rb +0 -19
  178. data/lib/code/node/base_8_number.rb +0 -19
  179. data/lib/code/node/block.rb +0 -17
  180. data/lib/code/node/defined.rb +0 -19
  181. data/lib/code/node/dictionnary_key_value.rb +0 -23
  182. data/lib/code/node/function_argument.rb +0 -45
  183. data/lib/code/node/group.rb +0 -13
  184. data/lib/code/node/keyword_call_argument.rb +0 -30
  185. data/lib/code/node/keyword_function_argument.rb +0 -33
  186. data/lib/code/node/name.rb +0 -28
  187. data/lib/code/node/not_keyword.rb +0 -13
  188. data/lib/code/node/or_keyword.rb +0 -34
  189. data/lib/code/node/range.rb +0 -31
  190. data/lib/code/node/regular_call_argument.rb +0 -34
  191. data/lib/code/node/regular_function_argument.rb +0 -36
  192. data/lib/code/node/string_characters.rb +0 -13
  193. data/lib/code/node/string_component.rb +0 -23
  194. data/lib/code/node/string_interpolation.rb +0 -13
  195. data/lib/code/parser/defined.rb +0 -20
  196. data/lib/code/parser/greater_than.rb +0 -33
  197. data/spec/call_spec.rb +0 -22
  198. data/spec/code/error/type_error_spec.rb +0 -63
  199. data/spec/code/parser/name_spec.rb +0 -15
  200. data/spec/code/parser/nothing_spec.rb +0 -19
  201. data/spec/code_spec.rb +0 -182
  202. data/spec/function_spec.rb +0 -26
  203. data/spec/template/parser/template_spec.rb +0 -19
  204. data/spec/template_spec.rb +0 -52
@@ -5,7 +5,7 @@ Gem::Specification.new do |s|
5
5
  s.version = ::Template::Version
6
6
  s.summary = "A templating programming language"
7
7
  s.description =
8
- 'Like "Hello {name}" with {name: "Dorian"} gives "Hello Dorian"'
8
+ 'A templating programming language, like "Hello {name}" with {name: "Dorian"} gives "Hello Dorian"'
9
9
  s.authors = ["Dorian Marié"]
10
10
  s.email = "dorian@dorianmarie.fr"
11
11
  s.files = `git ls-files`.split($/)
@@ -15,7 +15,5 @@ Gem::Specification.new do |s|
15
15
  s.license = "MIT"
16
16
  s.executables = "template"
17
17
 
18
- s.add_dependency "activesupport", "~> 7"
19
- s.add_dependency "parslet", "~> 2"
20
- s.add_dependency "zeitwerk", "~> 2.6"
18
+ s.add_dependency "zeitwerk", "~> 2"
21
19
  end
metadata CHANGED
@@ -1,31 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-21 00:00:00.000000000 Z
11
+ date: 2022-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activesupport
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '7'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '7'
27
- - !ruby/object:Gem::Dependency
28
- name: parslet
14
+ name: zeitwerk
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - "~>"
@@ -38,20 +24,6 @@ dependencies:
38
24
  - - "~>"
39
25
  - !ruby/object:Gem::Version
40
26
  version: '2'
41
- - !ruby/object:Gem::Dependency
42
- name: zeitwerk
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '2.6'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '2.6'
55
27
  description: 'A programming language, like Code.evaluate("1 + 1") # => 2'
56
28
  email: dorian@dorianmarie.fr
57
29
  executables: []
@@ -68,61 +40,57 @@ files:
68
40
  - Gemfile.lock
69
41
  - LICENSE
70
42
  - README.md
43
+ - TODO
71
44
  - bin/code
45
+ - bin/format
72
46
  - bin/template
47
+ - bin/test
73
48
  - code-ruby.gemspec
49
+ - docs/class.code
74
50
  - docs/euler/1.template
75
51
  - docs/euler/2.template
76
52
  - docs/euler/3.template
77
53
  - docs/euler/4.template
78
54
  - docs/euler/5.template
79
55
  - docs/fibonnaci.template
56
+ - docs/meetup.code
80
57
  - docs/precedence.template
58
+ - docs/rain.code
59
+ - docs/slack.code
60
+ - docs/stripe.code
61
+ - docs/twitter.code
62
+ - language-ruby.gemspec
81
63
  - lib/code-ruby.rb
82
64
  - lib/code.rb
83
65
  - lib/code/error.rb
84
66
  - lib/code/node.rb
85
- - lib/code/node/base_10_decimal.rb
86
- - lib/code/node/base_10_integer.rb
87
- - lib/code/node/base_10_number.rb
88
- - lib/code/node/base_16_number.rb
89
- - lib/code/node/base_2_number.rb
90
- - lib/code/node/base_8_number.rb
91
- - lib/code/node/block.rb
67
+ - lib/code/node/base_10.rb
68
+ - lib/code/node/base_16.rb
69
+ - lib/code/node/base_2.rb
70
+ - lib/code/node/base_8.rb
92
71
  - lib/code/node/boolean.rb
93
72
  - lib/code/node/call.rb
94
73
  - lib/code/node/call_argument.rb
95
74
  - lib/code/node/chained_call.rb
96
75
  - lib/code/node/code.rb
97
- - lib/code/node/defined.rb
76
+ - lib/code/node/decimal.rb
98
77
  - lib/code/node/dictionnary.rb
99
- - lib/code/node/dictionnary_key_value.rb
100
78
  - lib/code/node/equal.rb
101
79
  - lib/code/node/function.rb
102
- - lib/code/node/function_argument.rb
103
- - lib/code/node/group.rb
80
+ - lib/code/node/function_parameter.rb
104
81
  - lib/code/node/if.rb
105
82
  - lib/code/node/if_modifier.rb
106
- - lib/code/node/keyword_call_argument.rb
107
- - lib/code/node/keyword_function_argument.rb
108
83
  - lib/code/node/list.rb
109
- - lib/code/node/name.rb
110
84
  - lib/code/node/negation.rb
111
- - lib/code/node/not_keyword.rb
85
+ - lib/code/node/not.rb
112
86
  - lib/code/node/nothing.rb
113
87
  - lib/code/node/number.rb
114
88
  - lib/code/node/operation.rb
115
- - lib/code/node/or_keyword.rb
116
89
  - lib/code/node/power.rb
117
- - lib/code/node/range.rb
118
- - lib/code/node/regular_call_argument.rb
119
- - lib/code/node/regular_function_argument.rb
120
90
  - lib/code/node/rescue.rb
91
+ - lib/code/node/splat.rb
121
92
  - lib/code/node/statement.rb
122
93
  - lib/code/node/string.rb
123
- - lib/code/node/string_characters.rb
124
- - lib/code/node/string_component.rb
125
- - lib/code/node/string_interpolation.rb
126
94
  - lib/code/node/ternary.rb
127
95
  - lib/code/node/unary_minus.rb
128
96
  - lib/code/node/while.rb
@@ -147,13 +115,15 @@ files:
147
115
  - lib/code/parser/bitwise_or.rb
148
116
  - lib/code/parser/boolean.rb
149
117
  - lib/code/parser/call.rb
118
+ - lib/code/parser/chained_call.rb
119
+ - lib/code/parser/class.rb
150
120
  - lib/code/parser/code.rb
151
- - lib/code/parser/defined.rb
152
121
  - lib/code/parser/dictionnary.rb
153
122
  - lib/code/parser/equal.rb
154
123
  - lib/code/parser/equality.rb
124
+ - lib/code/parser/equality_lower.rb
155
125
  - lib/code/parser/function.rb
156
- - lib/code/parser/greater_than.rb
126
+ - lib/code/parser/greater.rb
157
127
  - lib/code/parser/group.rb
158
128
  - lib/code/parser/if.rb
159
129
  - lib/code/parser/if_modifier.rb
@@ -164,18 +134,33 @@ files:
164
134
  - lib/code/parser/not_keyword.rb
165
135
  - lib/code/parser/nothing.rb
166
136
  - lib/code/parser/number.rb
137
+ - lib/code/parser/operation.rb
167
138
  - lib/code/parser/or_keyword.rb
168
139
  - lib/code/parser/or_operator.rb
169
140
  - lib/code/parser/power.rb
170
141
  - lib/code/parser/range.rb
171
142
  - lib/code/parser/rescue.rb
172
143
  - lib/code/parser/shift.rb
144
+ - lib/code/parser/splat.rb
173
145
  - lib/code/parser/statement.rb
174
146
  - lib/code/parser/string.rb
175
147
  - lib/code/parser/ternary.rb
176
148
  - lib/code/parser/unary_minus.rb
177
149
  - lib/code/parser/while.rb
150
+ - lib/code/parser/whitespace.rb
178
151
  - lib/code/ruby.rb
152
+ - lib/language-ruby.rb
153
+ - lib/language.rb
154
+ - lib/language/atom.rb
155
+ - lib/language/output.rb
156
+ - lib/language/parser.rb
157
+ - lib/language/parser/absent.rb
158
+ - lib/language/parser/absent/present.rb
159
+ - lib/language/parser/end_of_input.rb
160
+ - lib/language/parser/interuption.rb
161
+ - lib/language/parser/not_end_of_input.rb
162
+ - lib/language/parser/str.rb
163
+ - lib/language/parser/str/not_found.rb
179
164
  - lib/template-ruby.rb
180
165
  - lib/template.rb
181
166
  - lib/template/node.rb
@@ -186,22 +171,49 @@ files:
186
171
  - lib/template/parser.rb
187
172
  - lib/template/parser/template.rb
188
173
  - lib/template/version.rb
189
- - spec/call_spec.rb
190
- - spec/code/error/type_error_spec.rb
174
+ - spec/code/addition_spec.rb
175
+ - spec/code/and_operator_spec.rb
176
+ - spec/code/bitwise_and_spec.rb
177
+ - spec/code/bitwise_or_spec.rb
178
+ - spec/code/boolean_spec.rb
179
+ - spec/code/call_spec.rb
180
+ - spec/code/chained_call_spec.rb
181
+ - spec/code/dictionnary_spec.rb
182
+ - spec/code/equal_spec.rb
183
+ - spec/code/equality_spec.rb
184
+ - spec/code/function_spec.rb
185
+ - spec/code/greater_spec.rb
186
+ - spec/code/group_spec.rb
187
+ - spec/code/if_modifier_spec.rb
188
+ - spec/code/if_spec.rb
189
+ - spec/code/list_spec.rb
190
+ - spec/code/multiplication_spec.rb
191
+ - spec/code/negation_spec.rb
192
+ - spec/code/not_keyword_spec.rb
193
+ - spec/code/nothing_spec.rb
194
+ - spec/code/number_spec.rb
195
+ - spec/code/or_keyword_spec.rb
196
+ - spec/code/or_operator_spec.rb
191
197
  - spec/code/parser/boolean_spec.rb
192
198
  - spec/code/parser/call_spec.rb
199
+ - spec/code/parser/chained_call.rb
193
200
  - spec/code/parser/dictionnary_spec.rb
194
201
  - spec/code/parser/function_spec.rb
202
+ - spec/code/parser/group_spec.rb
195
203
  - spec/code/parser/list_spec.rb
196
- - spec/code/parser/name_spec.rb
197
- - spec/code/parser/nothing_spec.rb
198
204
  - spec/code/parser/number_spec.rb
199
205
  - spec/code/parser/string_spec.rb
200
- - spec/code_spec.rb
201
- - spec/function_spec.rb
206
+ - spec/code/parser_spec.rb
207
+ - spec/code/power_spec.rb
208
+ - spec/code/range_spec.rb
209
+ - spec/code/rescue_spec.rb
210
+ - spec/code/shift_spec.rb
211
+ - spec/code/splat_spec.rb
212
+ - spec/code/string_spec.rb
213
+ - spec/code/ternary_spec.rb
214
+ - spec/code/unary_minus_spec.rb
215
+ - spec/code/while_spec.rb
202
216
  - spec/spec_helper.rb
203
- - spec/template/parser/template_spec.rb
204
- - spec/template_spec.rb
205
217
  - template-ruby.gemspec
206
218
  homepage: https://github.com/dorianmariefr/template-ruby
207
219
  licenses:
@@ -227,19 +239,46 @@ signing_key:
227
239
  specification_version: 4
228
240
  summary: A programming language
229
241
  test_files:
230
- - spec/call_spec.rb
231
- - spec/code/error/type_error_spec.rb
242
+ - spec/code/addition_spec.rb
243
+ - spec/code/and_operator_spec.rb
244
+ - spec/code/bitwise_and_spec.rb
245
+ - spec/code/bitwise_or_spec.rb
246
+ - spec/code/boolean_spec.rb
247
+ - spec/code/call_spec.rb
248
+ - spec/code/chained_call_spec.rb
249
+ - spec/code/dictionnary_spec.rb
250
+ - spec/code/equal_spec.rb
251
+ - spec/code/equality_spec.rb
252
+ - spec/code/function_spec.rb
253
+ - spec/code/greater_spec.rb
254
+ - spec/code/group_spec.rb
255
+ - spec/code/if_modifier_spec.rb
256
+ - spec/code/if_spec.rb
257
+ - spec/code/list_spec.rb
258
+ - spec/code/multiplication_spec.rb
259
+ - spec/code/negation_spec.rb
260
+ - spec/code/not_keyword_spec.rb
261
+ - spec/code/nothing_spec.rb
262
+ - spec/code/number_spec.rb
263
+ - spec/code/or_keyword_spec.rb
264
+ - spec/code/or_operator_spec.rb
232
265
  - spec/code/parser/boolean_spec.rb
233
266
  - spec/code/parser/call_spec.rb
267
+ - spec/code/parser/chained_call.rb
234
268
  - spec/code/parser/dictionnary_spec.rb
235
269
  - spec/code/parser/function_spec.rb
270
+ - spec/code/parser/group_spec.rb
236
271
  - spec/code/parser/list_spec.rb
237
- - spec/code/parser/name_spec.rb
238
- - spec/code/parser/nothing_spec.rb
239
272
  - spec/code/parser/number_spec.rb
240
273
  - spec/code/parser/string_spec.rb
241
- - spec/code_spec.rb
242
- - spec/function_spec.rb
274
+ - spec/code/parser_spec.rb
275
+ - spec/code/power_spec.rb
276
+ - spec/code/range_spec.rb
277
+ - spec/code/rescue_spec.rb
278
+ - spec/code/shift_spec.rb
279
+ - spec/code/splat_spec.rb
280
+ - spec/code/string_spec.rb
281
+ - spec/code/ternary_spec.rb
282
+ - spec/code/unary_minus_spec.rb
283
+ - spec/code/while_spec.rb
243
284
  - spec/spec_helper.rb
244
- - spec/template/parser/template_spec.rb
245
- - spec/template_spec.rb
@@ -1,32 +0,0 @@
1
- class Code
2
- class Node
3
- class Base10Decimal < Node
4
- def initialize(number)
5
- @sign = number[:sign]
6
- @whole = number.fetch(:whole)
7
- @decimal = number.fetch(:decimal)
8
-
9
- if number.key?(:exponent)
10
- @exponent = ::Code::Node::Base10Number.new(number[:exponent])
11
- end
12
- end
13
-
14
- def evaluate(**args)
15
- if @exponent
16
- exponent = @exponent.evaluate(**args)
17
-
18
- ::Code::Object::Decimal.new(
19
- "#{sign}#{whole}.#{decimal}",
20
- exponent: exponent,
21
- )
22
- else
23
- ::Code::Object::Decimal.new("#{sign}#{whole}.#{decimal}")
24
- end
25
- end
26
-
27
- private
28
-
29
- attr_reader :sign, :whole, :decimal
30
- end
31
- end
32
- end
@@ -1,32 +0,0 @@
1
- class Code
2
- class Node
3
- class Base10Integer < Node
4
- def initialize(number)
5
- @sign = number[:sign]
6
- @whole = number.fetch(:whole)
7
-
8
- if number.key?(:exponent)
9
- @exponent = ::Code::Node::Base10Number.new(number[:exponent])
10
- end
11
- end
12
-
13
- def evaluate(**args)
14
- if @exponent
15
- exponent = @exponent.evaluate(**args)
16
-
17
- if exponent.is_a?(::Code::Object::Decimal)
18
- ::Code::Object::Decimal.new("#{sign}#{whole}", exponent: exponent)
19
- else
20
- ::Code::Object::Integer.new("#{sign}#{whole}", exponent: exponent)
21
- end
22
- else
23
- ::Code::Object::Integer.new("#{sign}#{whole}")
24
- end
25
- end
26
-
27
- private
28
-
29
- attr_reader :sign, :whole
30
- end
31
- end
32
- end
@@ -1,19 +0,0 @@
1
- class Code
2
- class Node
3
- class Base10Number < Node
4
- def initialize(number)
5
- if number.key?(:integer)
6
- @number = ::Code::Node::Base10Integer.new(number[:integer])
7
- elsif number.key?(:decimal)
8
- @number = ::Code::Node::Base10Decimal.new(number[:decimal])
9
- else
10
- raise NotImplementedErorr.new(number.inspect)
11
- end
12
- end
13
-
14
- def evaluate(**args)
15
- @number.evaluate(**args)
16
- end
17
- end
18
- end
19
- end
@@ -1,19 +0,0 @@
1
- class Code
2
- class Node
3
- class Base16Number < Node
4
- def initialize(number)
5
- @number = number
6
- end
7
-
8
- def evaluate(**args)
9
- ::Code::Object::Integer.new(number)
10
- end
11
-
12
- private
13
-
14
- def number
15
- @number.to_s.to_i(16)
16
- end
17
- end
18
- end
19
- end
@@ -1,19 +0,0 @@
1
- class Code
2
- class Node
3
- class Base2Number < Node
4
- def initialize(number)
5
- @number = number
6
- end
7
-
8
- def evaluate(**args)
9
- ::Code::Object::Integer.new(number)
10
- end
11
-
12
- private
13
-
14
- def number
15
- @number.to_s.to_i(2)
16
- end
17
- end
18
- end
19
- end
@@ -1,19 +0,0 @@
1
- class Code
2
- class Node
3
- class Base8Number < Node
4
- def initialize(number)
5
- @number = number
6
- end
7
-
8
- def evaluate(**args)
9
- ::Code::Object::Integer.new(number)
10
- end
11
-
12
- private
13
-
14
- def number
15
- @number.to_s.to_i(8)
16
- end
17
- end
18
- end
19
- end
@@ -1,17 +0,0 @@
1
- class Code
2
- class Node
3
- class Block < Node
4
- def initialize(block)
5
- @body = ::Code::Node::Code.new(block.fetch(:body))
6
- @arguments = block.fetch(:arguments, [])
7
- @arguments.map! do |argument|
8
- ::Code::Node::FunctionArgument.new(argument)
9
- end
10
- end
11
-
12
- def evaluate(**args)
13
- ::Code::Object::Function.new(arguments: @arguments, body: @body)
14
- end
15
- end
16
- end
17
- end
@@ -1,19 +0,0 @@
1
- class Code
2
- class Node
3
- class Defined < Node
4
- def initialize(defined)
5
- @name = defined.fetch(:name)
6
- end
7
-
8
- def evaluate(**args)
9
- ::Code::Object::Boolean.new(args.fetch(:context).key?(name))
10
- end
11
-
12
- private
13
-
14
- def name
15
- ::Code::Object::String.new(@name.to_s)
16
- end
17
- end
18
- end
19
- end
@@ -1,23 +0,0 @@
1
- class Code
2
- class Node
3
- class DictionnaryKeyValue < Node
4
- def initialize(key_value)
5
- @key = key_value.fetch(:key)
6
-
7
- if @key.is_a?(Array)
8
- @key = ::Code::Node::Code.new(@key)
9
- elsif @key.key?(:name)
10
- @key = ::Code::Node::String.new(@key[:name])
11
- else
12
- @key = ::Code::Node::Statement.new(@key)
13
- end
14
-
15
- @value = ::Code::Node::Code.new(key_value.fetch(:value))
16
- end
17
-
18
- def evaluate(**args)
19
- [@key.evaluate(**args), @value.evaluate(**args)]
20
- end
21
- end
22
- end
23
- end
@@ -1,45 +0,0 @@
1
- class Code
2
- class Node
3
- class FunctionArgument < Node
4
- def initialize(argument)
5
- if argument.key?(:regular)
6
- @argument =
7
- ::Code::Node::RegularFunctionArgument.new(argument.fetch(:regular))
8
- elsif argument.key?(:keyword)
9
- @argument =
10
- ::Code::Node::KeywordFunctionArgument.new(argument.fetch(:keyword))
11
- else
12
- raise NotImplementedError.new(argument.inspect)
13
- end
14
- end
15
-
16
- def evaluate(**args)
17
- @argument.evaluate(**args)
18
- end
19
-
20
- def splat?
21
- @argument.splat?
22
- end
23
-
24
- def keyword_splat?
25
- @argument.keyword_splat?
26
- end
27
-
28
- def name
29
- @argument.name
30
- end
31
-
32
- def block?
33
- @argument.block?
34
- end
35
-
36
- def regular?
37
- @argument.is_a?(::Code::Node::RegularFunctionArgument)
38
- end
39
-
40
- def keyword?
41
- @argument.is_a?(::Code::Node::KeywordFunctionArgument)
42
- end
43
- end
44
- end
45
- end
@@ -1,13 +0,0 @@
1
- class Code
2
- class Node
3
- class Group < Node
4
- def initialize(group)
5
- @code = ::Code::Node::Code.new(group)
6
- end
7
-
8
- def evaluate(**args)
9
- @code.evaluate(**args)
10
- end
11
- end
12
- end
13
- end
@@ -1,30 +0,0 @@
1
- class Code
2
- class Node
3
- class KeywordCallArgument < Node
4
- def initialize(argument)
5
- @name = argument.fetch(:name)
6
- @value = ::Code::Node::Code.new(argument.fetch(:value))
7
- end
8
-
9
- def evaluate(**args)
10
- @value.evaluate(**args)
11
- end
12
-
13
- def name
14
- ::Code::Object::String.new(@name.to_s)
15
- end
16
-
17
- def block?
18
- false
19
- end
20
-
21
- def splat?
22
- false
23
- end
24
-
25
- def keyword_splat?
26
- false
27
- end
28
- end
29
- end
30
- end
@@ -1,33 +0,0 @@
1
- class Code
2
- class Node
3
- class KeywordFunctionArgument < Node
4
- def initialize(argument)
5
- @name = argument.fetch(:name)
6
-
7
- if argument.key?(:default)
8
- @default = ::Code::Node::Code.new(argument.fetch(:default))
9
- end
10
- end
11
-
12
- def evaluate(**args)
13
- @default ? @default.evaluate(**args) : ::Code::Object::Nothing.new
14
- end
15
-
16
- def name
17
- ::Code::Object::String.new(@name.to_s)
18
- end
19
-
20
- def splat?
21
- false
22
- end
23
-
24
- def keyword_splat?
25
- false
26
- end
27
-
28
- def block?
29
- false
30
- end
31
- end
32
- end
33
- end
@@ -1,28 +0,0 @@
1
- class Code
2
- class Node
3
- class Name < Node
4
- def initialize(name)
5
- @name = name
6
- end
7
-
8
- def evaluate(**args)
9
- context = args.fetch(:context)
10
- arguments = args.fetch(:arguments, [])
11
- object = args.fetch(:object)
12
- globals = args.multi_fetch(*::Code::GLOBALS)
13
-
14
- object.call(
15
- operator: name,
16
- arguments: arguments,
17
- **globals
18
- )
19
- end
20
-
21
- private
22
-
23
- def name
24
- ::Code::Object::String.new(@name.to_s)
25
- end
26
- end
27
- end
28
- end
@@ -1,13 +0,0 @@
1
- class Code
2
- class Node
3
- class NotKeyword < Node
4
- def initialize(not_keyword)
5
- @statement = ::Code::Node::Statement.new(not_keyword)
6
- end
7
-
8
- def evaluate(**args)
9
- ::Code::Object::Boolean.new(!@statement.evaluate(**args).truthy?)
10
- end
11
- end
12
- end
13
- end