code-ruby 0.3.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (206) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/CHANGELOG.md +5 -0
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +28 -55
  6. data/TODO +17 -0
  7. data/bin/code +56 -31
  8. data/bin/format +3 -0
  9. data/bin/template +62 -20
  10. data/bin/test +17 -0
  11. data/code-ruby.gemspec +1 -6
  12. data/docs/class.code +9 -0
  13. data/docs/euler/1.template +1 -5
  14. data/docs/euler/5.template +0 -1
  15. data/docs/meetup.code +12 -0
  16. data/docs/precedence.template +6 -39
  17. data/docs/rain.code +22 -0
  18. data/docs/slack.code +17 -0
  19. data/docs/stripe.code +7 -0
  20. data/docs/twitter.code +9 -0
  21. data/language-ruby.gemspec +18 -0
  22. data/lib/code/error.rb +3 -0
  23. data/lib/code/node/base_10.rb +29 -0
  24. data/lib/code/node/base_16.rb +13 -0
  25. data/lib/code/node/base_2.rb +13 -0
  26. data/lib/code/node/base_8.rb +13 -0
  27. data/lib/code/node/boolean.rb +7 -7
  28. data/lib/code/node/call.rb +32 -37
  29. data/lib/code/node/call_argument.rb +11 -27
  30. data/lib/code/node/chained_call.rb +10 -25
  31. data/lib/code/node/code.rb +4 -6
  32. data/lib/code/node/decimal.rb +26 -0
  33. data/lib/code/node/dictionnary.rb +20 -9
  34. data/lib/code/node/equal.rb +18 -20
  35. data/lib/code/node/function.rb +10 -7
  36. data/lib/code/node/function_parameter.rb +31 -0
  37. data/lib/code/node/if.rb +36 -32
  38. data/lib/code/node/if_modifier.rb +35 -36
  39. data/lib/code/node/list.rb +6 -9
  40. data/lib/code/node/negation.rb +5 -23
  41. data/lib/code/node/not.rb +15 -0
  42. data/lib/code/node/nothing.rb +1 -1
  43. data/lib/code/node/number.rb +14 -12
  44. data/lib/code/node/operation.rb +21 -16
  45. data/lib/code/node/power.rb +10 -6
  46. data/lib/code/node/rescue.rb +4 -3
  47. data/lib/code/node/splat.rb +15 -0
  48. data/lib/code/node/statement.rb +47 -69
  49. data/lib/code/node/string.rb +41 -10
  50. data/lib/code/node/ternary.rb +7 -9
  51. data/lib/code/node/unary_minus.rb +5 -12
  52. data/lib/code/node/while.rb +17 -24
  53. data/lib/code/node.rb +7 -8
  54. data/lib/code/object/argument.rb +3 -12
  55. data/lib/code/object/decimal.rb +114 -27
  56. data/lib/code/object/dictionnary.rb +29 -12
  57. data/lib/code/object/function.rb +23 -24
  58. data/lib/code/object/global.rb +42 -0
  59. data/lib/code/object/integer.rb +142 -35
  60. data/lib/code/object/list.rb +74 -95
  61. data/lib/code/object/range.rb +38 -50
  62. data/lib/code/object/ruby_function.rb +31 -0
  63. data/lib/code/object/string.rb +36 -16
  64. data/lib/code/object.rb +114 -54
  65. data/lib/code/parser/addition.rb +12 -20
  66. data/lib/code/parser/and_operator.rb +9 -20
  67. data/lib/code/parser/bitwise_and.rb +9 -20
  68. data/lib/code/parser/bitwise_or.rb +12 -20
  69. data/lib/code/parser/boolean.rb +10 -7
  70. data/lib/code/parser/call.rb +92 -60
  71. data/lib/code/parser/chained_call.rb +47 -0
  72. data/lib/code/parser/class.rb +45 -0
  73. data/lib/code/parser/code.rb +17 -10
  74. data/lib/code/parser/dictionnary.rb +56 -30
  75. data/lib/code/parser/equal.rb +87 -35
  76. data/lib/code/parser/equality.rb +23 -24
  77. data/lib/code/parser/equality_lower.rb +9 -0
  78. data/lib/code/parser/function.rb +67 -40
  79. data/lib/code/parser/greater.rb +25 -0
  80. data/lib/code/parser/group.rb +13 -8
  81. data/lib/code/parser/if.rb +51 -21
  82. data/lib/code/parser/if_modifier.rb +43 -16
  83. data/lib/code/parser/list.rb +32 -19
  84. data/lib/code/parser/multiplication.rb +15 -20
  85. data/lib/code/parser/name.rb +96 -84
  86. data/lib/code/parser/negation.rb +20 -9
  87. data/lib/code/parser/not_keyword.rb +14 -12
  88. data/lib/code/parser/nothing.rb +13 -8
  89. data/lib/code/parser/number.rb +124 -68
  90. data/lib/code/parser/operation.rb +35 -0
  91. data/lib/code/parser/or_keyword.rb +12 -20
  92. data/lib/code/parser/or_operator.rb +9 -20
  93. data/lib/code/parser/power.rb +32 -14
  94. data/lib/code/parser/range.rb +9 -17
  95. data/lib/code/parser/rescue.rb +29 -13
  96. data/lib/code/parser/shift.rb +11 -21
  97. data/lib/code/parser/splat.rb +31 -0
  98. data/lib/code/parser/statement.rb +4 -3
  99. data/lib/code/parser/string.rb +53 -62
  100. data/lib/code/parser/ternary.rb +36 -15
  101. data/lib/code/parser/unary_minus.rb +23 -5
  102. data/lib/code/parser/while.rb +26 -15
  103. data/lib/code/parser/whitespace.rb +49 -0
  104. data/lib/code/parser.rb +15 -0
  105. data/lib/code/ruby.rb +162 -0
  106. data/lib/code-ruby.rb +2 -5
  107. data/lib/code.rb +24 -7
  108. data/lib/language/atom.rb +343 -0
  109. data/lib/language/output.rb +130 -0
  110. data/lib/language/parser/absent/present.rb +8 -0
  111. data/lib/language/parser/absent.rb +6 -0
  112. data/lib/language/parser/end_of_input.rb +6 -0
  113. data/lib/language/parser/interuption.rb +38 -0
  114. data/lib/language/parser/not_end_of_input.rb +6 -0
  115. data/lib/language/parser/str/not_found.rb +16 -0
  116. data/lib/language/parser/str.rb +6 -0
  117. data/lib/language/parser.rb +53 -0
  118. data/lib/language-ruby.rb +10 -0
  119. data/lib/language.rb +80 -0
  120. data/lib/template/node/code_part.rb +1 -1
  121. data/lib/template/node/part.rb +1 -1
  122. data/lib/template/node/template.rb +1 -1
  123. data/lib/template/node/text_part.rb +1 -1
  124. data/lib/template/node.rb +1 -1
  125. data/lib/template/parser/template.rb +26 -17
  126. data/lib/template/parser.rb +15 -0
  127. data/lib/template/version.rb +1 -1
  128. data/lib/template-ruby.rb +2 -5
  129. data/lib/template.rb +23 -13
  130. data/spec/code/addition_spec.rb +13 -0
  131. data/spec/code/and_operator_spec.rb +13 -0
  132. data/spec/code/bitwise_and_spec.rb +13 -0
  133. data/spec/code/bitwise_or_spec.rb +13 -0
  134. data/spec/code/boolean_spec.rb +13 -0
  135. data/spec/code/call_spec.rb +21 -0
  136. data/spec/code/chained_call_spec.rb +16 -0
  137. data/spec/code/dictionnary_spec.rb +17 -0
  138. data/spec/code/equal_spec.rb +26 -0
  139. data/spec/code/equality_spec.rb +13 -0
  140. data/spec/code/function_spec.rb +18 -0
  141. data/spec/code/greater_spec.rb +18 -0
  142. data/spec/code/group_spec.rb +12 -0
  143. data/spec/code/if_modifier_spec.rb +20 -0
  144. data/spec/code/if_spec.rb +25 -0
  145. data/spec/code/list_spec.rb +17 -0
  146. data/spec/code/multiplication_spec.rb +18 -0
  147. data/spec/code/negation_spec.rb +20 -0
  148. data/spec/code/not_keyword_spec.rb +13 -0
  149. data/spec/code/nothing_spec.rb +17 -0
  150. data/spec/code/number_spec.rb +22 -0
  151. data/spec/code/or_keyword_spec.rb +17 -0
  152. data/spec/code/or_operator_spec.rb +16 -0
  153. data/spec/code/parser/boolean_spec.rb +5 -7
  154. data/spec/code/parser/call_spec.rb +16 -56
  155. data/spec/code/parser/chained_call.rb +17 -0
  156. data/spec/code/parser/dictionnary_spec.rb +8 -9
  157. data/spec/code/parser/function_spec.rb +5 -21
  158. data/spec/code/parser/group_spec.rb +18 -0
  159. data/spec/code/parser/list_spec.rb +9 -20
  160. data/spec/code/parser/number_spec.rb +4 -109
  161. data/spec/code/parser/string_spec.rb +9 -17
  162. data/spec/code/parser_spec.rb +23 -0
  163. data/spec/code/power_spec.rb +13 -0
  164. data/spec/code/range_spec.rb +16 -0
  165. data/spec/code/rescue_spec.rb +13 -0
  166. data/spec/code/shift_spec.rb +13 -0
  167. data/spec/code/splat_spec.rb +13 -0
  168. data/spec/code/string_spec.rb +25 -0
  169. data/spec/code/ternary_spec.rb +18 -0
  170. data/spec/code/unary_minus_spec.rb +13 -0
  171. data/spec/code/while_spec.rb +18 -0
  172. data/spec/spec_helper.rb +4 -1
  173. data/template-ruby.gemspec +2 -7
  174. metadata +113 -99
  175. data/lib/code/node/base_10_decimal.rb +0 -32
  176. data/lib/code/node/base_10_integer.rb +0 -32
  177. data/lib/code/node/base_10_number.rb +0 -19
  178. data/lib/code/node/base_16_number.rb +0 -19
  179. data/lib/code/node/base_2_number.rb +0 -19
  180. data/lib/code/node/base_8_number.rb +0 -19
  181. data/lib/code/node/block.rb +0 -17
  182. data/lib/code/node/defined.rb +0 -19
  183. data/lib/code/node/dictionnary_key_value.rb +0 -23
  184. data/lib/code/node/function_argument.rb +0 -45
  185. data/lib/code/node/group.rb +0 -13
  186. data/lib/code/node/keyword_call_argument.rb +0 -30
  187. data/lib/code/node/keyword_function_argument.rb +0 -33
  188. data/lib/code/node/name.rb +0 -55
  189. data/lib/code/node/not_keyword.rb +0 -13
  190. data/lib/code/node/or_keyword.rb +0 -34
  191. data/lib/code/node/range.rb +0 -31
  192. data/lib/code/node/regular_call_argument.rb +0 -34
  193. data/lib/code/node/regular_function_argument.rb +0 -36
  194. data/lib/code/node/string_characters.rb +0 -13
  195. data/lib/code/node/string_component.rb +0 -23
  196. data/lib/code/node/string_interpolation.rb +0 -13
  197. data/lib/code/parser/defined.rb +0 -20
  198. data/lib/code/parser/greater_than.rb +0 -33
  199. data/spec/call_spec.rb +0 -22
  200. data/spec/code/error/type_error_spec.rb +0 -63
  201. data/spec/code/parser/name_spec.rb +0 -15
  202. data/spec/code/parser/nothing_spec.rb +0 -19
  203. data/spec/code_spec.rb +0 -120
  204. data/spec/function_spec.rb +0 -26
  205. data/spec/template/parser/template_spec.rb +0 -19
  206. data/spec/template_spec.rb +0 -33
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "string" do
4
+ let(:timeout) { 0 }
5
+ subject { Code.evaluate(input, timeout: timeout).to_s }
6
+
7
+ [["[1, 2].map(&:to_string)", '["1", "2"]']].each do |input, output|
8
+ context input do
9
+ let(:input) { input }
10
+ it { expect(subject).to eq(output) }
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "string" do
4
+ let(:timeout) { 0 }
5
+ subject { Code.evaluate(input, timeout: timeout).to_s }
6
+
7
+ [
8
+ ["''", ""],
9
+ ['""', ""],
10
+ %w[:hello hello],
11
+ %w[:admin? admin?],
12
+ %w[:update! update!],
13
+ ["'Hello Dorian'", "Hello Dorian"],
14
+ ['"Hello Dorian"', "Hello Dorian"],
15
+ ["'Hello \\{name}'", "Hello {name}"],
16
+ ['"Hello \\{name}"', "Hello {name}"],
17
+ ["'Hello {1}'", "Hello 1"],
18
+ ['"Hello {1}"', "Hello 1"]
19
+ ].each do |input, output|
20
+ context input do
21
+ let(:input) { input }
22
+ it { expect(subject).to eq(output) }
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,18 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "ternary" do
4
+ let(:timeout) { 0 }
5
+ subject { Code.evaluate(input, timeout: timeout).to_s }
6
+
7
+ [
8
+ ["true ? 1", "1"],
9
+ ["false ? 1", ""],
10
+ ["true ? 1 : 2", "1"],
11
+ ["false ? 1 : 2", "2"]
12
+ ].each do |input, output|
13
+ context input do
14
+ let(:input) { input }
15
+ it { expect(subject).to eq(output) }
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "function" do
4
+ let(:timeout) { 0 }
5
+ subject { Code.evaluate(input, timeout: timeout).to_s }
6
+
7
+ [%w[-1 -1], %w[--1 1], %w[-1.0 -1.0], %w[--1.0 1.0]].each do |input, output|
8
+ context input do
9
+ let(:input) { input }
10
+ it { expect(subject).to eq(output) }
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,18 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "while" do
4
+ let(:timeout) { 0 }
5
+ subject { Code.evaluate(input, timeout: timeout).to_s }
6
+
7
+ [
8
+ ["while false", ""],
9
+ ["a = 0\nwhile a < 10 a += 1 end a", "10"],
10
+ ["until true", ""],
11
+ ["a = 0\nuntil a > 10 a += 1 end a", "11"]
12
+ ].each do |input, output|
13
+ context input do
14
+ let(:input) { input }
15
+ it { expect(subject).to eq(output) }
16
+ end
17
+ end
18
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,6 @@
1
1
  require_relative "../lib/template-ruby"
2
+ require "json"
2
3
 
3
- RSpec.configure { |c| c.example_status_persistence_file_path = "examples.txt" }
4
+ RSpec.configure do |c|
5
+ c.example_status_persistence_file_path = "tmp/examples.txt"
6
+ end
@@ -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,10 +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"
21
-
22
- s.add_development_dependency "prettier", "~> 3"
23
- s.add_development_dependency "rspec", "~> 3"
18
+ s.add_dependency "zeitwerk", "~> 2"
24
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.3.1
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-13 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,48 +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
- - !ruby/object:Gem::Dependency
56
- name: prettier
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '3'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '3'
69
- - !ruby/object:Gem::Dependency
70
- name: rspec
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '3'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '3'
83
27
  description: 'A programming language, like Code.evaluate("1 + 1") # => 2'
84
28
  email: dorian@dorianmarie.fr
85
29
  executables: []
@@ -96,61 +40,57 @@ files:
96
40
  - Gemfile.lock
97
41
  - LICENSE
98
42
  - README.md
43
+ - TODO
99
44
  - bin/code
45
+ - bin/format
100
46
  - bin/template
47
+ - bin/test
101
48
  - code-ruby.gemspec
49
+ - docs/class.code
102
50
  - docs/euler/1.template
103
51
  - docs/euler/2.template
104
52
  - docs/euler/3.template
105
53
  - docs/euler/4.template
106
54
  - docs/euler/5.template
107
55
  - docs/fibonnaci.template
56
+ - docs/meetup.code
108
57
  - docs/precedence.template
58
+ - docs/rain.code
59
+ - docs/slack.code
60
+ - docs/stripe.code
61
+ - docs/twitter.code
62
+ - language-ruby.gemspec
109
63
  - lib/code-ruby.rb
110
64
  - lib/code.rb
111
65
  - lib/code/error.rb
112
66
  - lib/code/node.rb
113
- - lib/code/node/base_10_decimal.rb
114
- - lib/code/node/base_10_integer.rb
115
- - lib/code/node/base_10_number.rb
116
- - lib/code/node/base_16_number.rb
117
- - lib/code/node/base_2_number.rb
118
- - lib/code/node/base_8_number.rb
119
- - 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
120
71
  - lib/code/node/boolean.rb
121
72
  - lib/code/node/call.rb
122
73
  - lib/code/node/call_argument.rb
123
74
  - lib/code/node/chained_call.rb
124
75
  - lib/code/node/code.rb
125
- - lib/code/node/defined.rb
76
+ - lib/code/node/decimal.rb
126
77
  - lib/code/node/dictionnary.rb
127
- - lib/code/node/dictionnary_key_value.rb
128
78
  - lib/code/node/equal.rb
129
79
  - lib/code/node/function.rb
130
- - lib/code/node/function_argument.rb
131
- - lib/code/node/group.rb
80
+ - lib/code/node/function_parameter.rb
132
81
  - lib/code/node/if.rb
133
82
  - lib/code/node/if_modifier.rb
134
- - lib/code/node/keyword_call_argument.rb
135
- - lib/code/node/keyword_function_argument.rb
136
83
  - lib/code/node/list.rb
137
- - lib/code/node/name.rb
138
84
  - lib/code/node/negation.rb
139
- - lib/code/node/not_keyword.rb
85
+ - lib/code/node/not.rb
140
86
  - lib/code/node/nothing.rb
141
87
  - lib/code/node/number.rb
142
88
  - lib/code/node/operation.rb
143
- - lib/code/node/or_keyword.rb
144
89
  - lib/code/node/power.rb
145
- - lib/code/node/range.rb
146
- - lib/code/node/regular_call_argument.rb
147
- - lib/code/node/regular_function_argument.rb
148
90
  - lib/code/node/rescue.rb
91
+ - lib/code/node/splat.rb
149
92
  - lib/code/node/statement.rb
150
93
  - lib/code/node/string.rb
151
- - lib/code/node/string_characters.rb
152
- - lib/code/node/string_component.rb
153
- - lib/code/node/string_interpolation.rb
154
94
  - lib/code/node/ternary.rb
155
95
  - lib/code/node/unary_minus.rb
156
96
  - lib/code/node/while.rb
@@ -160,11 +100,13 @@ files:
160
100
  - lib/code/object/decimal.rb
161
101
  - lib/code/object/dictionnary.rb
162
102
  - lib/code/object/function.rb
103
+ - lib/code/object/global.rb
163
104
  - lib/code/object/integer.rb
164
105
  - lib/code/object/list.rb
165
106
  - lib/code/object/nothing.rb
166
107
  - lib/code/object/number.rb
167
108
  - lib/code/object/range.rb
109
+ - lib/code/object/ruby_function.rb
168
110
  - lib/code/object/string.rb
169
111
  - lib/code/parser.rb
170
112
  - lib/code/parser/addition.rb
@@ -173,13 +115,15 @@ files:
173
115
  - lib/code/parser/bitwise_or.rb
174
116
  - lib/code/parser/boolean.rb
175
117
  - lib/code/parser/call.rb
118
+ - lib/code/parser/chained_call.rb
119
+ - lib/code/parser/class.rb
176
120
  - lib/code/parser/code.rb
177
- - lib/code/parser/defined.rb
178
121
  - lib/code/parser/dictionnary.rb
179
122
  - lib/code/parser/equal.rb
180
123
  - lib/code/parser/equality.rb
124
+ - lib/code/parser/equality_lower.rb
181
125
  - lib/code/parser/function.rb
182
- - lib/code/parser/greater_than.rb
126
+ - lib/code/parser/greater.rb
183
127
  - lib/code/parser/group.rb
184
128
  - lib/code/parser/if.rb
185
129
  - lib/code/parser/if_modifier.rb
@@ -190,17 +134,33 @@ files:
190
134
  - lib/code/parser/not_keyword.rb
191
135
  - lib/code/parser/nothing.rb
192
136
  - lib/code/parser/number.rb
137
+ - lib/code/parser/operation.rb
193
138
  - lib/code/parser/or_keyword.rb
194
139
  - lib/code/parser/or_operator.rb
195
140
  - lib/code/parser/power.rb
196
141
  - lib/code/parser/range.rb
197
142
  - lib/code/parser/rescue.rb
198
143
  - lib/code/parser/shift.rb
144
+ - lib/code/parser/splat.rb
199
145
  - lib/code/parser/statement.rb
200
146
  - lib/code/parser/string.rb
201
147
  - lib/code/parser/ternary.rb
202
148
  - lib/code/parser/unary_minus.rb
203
149
  - lib/code/parser/while.rb
150
+ - lib/code/parser/whitespace.rb
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
204
164
  - lib/template-ruby.rb
205
165
  - lib/template.rb
206
166
  - lib/template/node.rb
@@ -211,22 +171,49 @@ files:
211
171
  - lib/template/parser.rb
212
172
  - lib/template/parser/template.rb
213
173
  - lib/template/version.rb
214
- - spec/call_spec.rb
215
- - 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
216
197
  - spec/code/parser/boolean_spec.rb
217
198
  - spec/code/parser/call_spec.rb
199
+ - spec/code/parser/chained_call.rb
218
200
  - spec/code/parser/dictionnary_spec.rb
219
201
  - spec/code/parser/function_spec.rb
202
+ - spec/code/parser/group_spec.rb
220
203
  - spec/code/parser/list_spec.rb
221
- - spec/code/parser/name_spec.rb
222
- - spec/code/parser/nothing_spec.rb
223
204
  - spec/code/parser/number_spec.rb
224
205
  - spec/code/parser/string_spec.rb
225
- - spec/code_spec.rb
226
- - 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
227
216
  - spec/spec_helper.rb
228
- - spec/template/parser/template_spec.rb
229
- - spec/template_spec.rb
230
217
  - template-ruby.gemspec
231
218
  homepage: https://github.com/dorianmariefr/template-ruby
232
219
  licenses:
@@ -252,19 +239,46 @@ signing_key:
252
239
  specification_version: 4
253
240
  summary: A programming language
254
241
  test_files:
255
- - spec/call_spec.rb
256
- - 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
257
265
  - spec/code/parser/boolean_spec.rb
258
266
  - spec/code/parser/call_spec.rb
267
+ - spec/code/parser/chained_call.rb
259
268
  - spec/code/parser/dictionnary_spec.rb
260
269
  - spec/code/parser/function_spec.rb
270
+ - spec/code/parser/group_spec.rb
261
271
  - spec/code/parser/list_spec.rb
262
- - spec/code/parser/name_spec.rb
263
- - spec/code/parser/nothing_spec.rb
264
272
  - spec/code/parser/number_spec.rb
265
273
  - spec/code/parser/string_spec.rb
266
- - spec/code_spec.rb
267
- - 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
268
284
  - spec/spec_helper.rb
269
- - spec/template/parser/template_spec.rb
270
- - 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