code-ruby 0.5.6 → 0.6.1

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 (218) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -3
  3. data/Gemfile.lock +11 -21
  4. data/README.md +2 -102
  5. data/bin/code +34 -16
  6. data/code-ruby.gemspec +5 -3
  7. data/lib/code/error.rb +16 -5
  8. data/lib/code/node/base_10.rb +4 -2
  9. data/lib/code/node/base_16.rb +3 -1
  10. data/lib/code/node/base_2.rb +3 -1
  11. data/lib/code/node/base_8.rb +3 -1
  12. data/lib/code/node/boolean.rb +4 -2
  13. data/lib/code/node/call.rb +35 -12
  14. data/lib/code/node/call_argument.rb +16 -5
  15. data/lib/code/node/code.rb +5 -4
  16. data/lib/code/node/decimal.rb +2 -0
  17. data/lib/code/node/{dictionnary.rb → dictionary.rb} +14 -5
  18. data/lib/code/node/function.rb +7 -4
  19. data/lib/code/node/function_parameter.rb +3 -1
  20. data/lib/code/node/if.rb +5 -3
  21. data/lib/code/node/left_operation.rb +63 -0
  22. data/lib/code/node/list.rb +2 -0
  23. data/lib/code/node/negation.rb +2 -0
  24. data/lib/code/node/not.rb +2 -0
  25. data/lib/code/node/nothing.rb +3 -1
  26. data/lib/code/node/number.rb +2 -0
  27. data/lib/code/node/right_operation.rb +70 -0
  28. data/lib/code/node/splat.rb +2 -0
  29. data/lib/code/node/square_bracket.rb +37 -0
  30. data/lib/code/node/statement.rb +13 -5
  31. data/lib/code/node/string.rb +3 -1
  32. data/lib/code/node/ternary.rb +5 -3
  33. data/lib/code/node/unary_minus.rb +2 -0
  34. data/lib/code/node/while.rb +6 -4
  35. data/lib/code/node.rb +11 -5
  36. data/lib/code/object/argument.rb +13 -7
  37. data/lib/code/object/boolean.rb +43 -5
  38. data/lib/code/object/class.rb +17 -0
  39. data/lib/code/object/context.rb +36 -0
  40. data/lib/code/object/decimal.rb +252 -100
  41. data/lib/code/object/dictionary.rb +641 -0
  42. data/lib/code/object/function.rb +54 -27
  43. data/lib/code/object/global.rb +65 -19
  44. data/lib/code/object/identifier_list.rb +47 -0
  45. data/lib/code/object/integer.rb +320 -137
  46. data/lib/code/object/list.rb +140 -138
  47. data/lib/code/object/nothing.rb +10 -4
  48. data/lib/code/object/number.rb +6 -1
  49. data/lib/code/object/range.rb +85 -88
  50. data/lib/code/object/ruby_function.rb +11 -6
  51. data/lib/code/object/string.rb +51 -48
  52. data/lib/code/object.rb +117 -139
  53. data/lib/code/parser/addition.rb +4 -2
  54. data/lib/code/parser/and_operator.rb +4 -2
  55. data/lib/code/parser/bitwise_and.rb +4 -2
  56. data/lib/code/parser/bitwise_or.rb +4 -2
  57. data/lib/code/parser/boolean.rb +3 -1
  58. data/lib/code/parser/call.rb +17 -11
  59. data/lib/code/parser/chained_call.rb +10 -22
  60. data/lib/code/parser/class.rb +9 -6
  61. data/lib/code/parser/code.rb +6 -4
  62. data/lib/code/parser/{dictionnary.rb → dictionary.rb} +16 -13
  63. data/lib/code/parser/equal.rb +9 -36
  64. data/lib/code/parser/equality.rb +4 -2
  65. data/lib/code/parser/function.rb +24 -9
  66. data/lib/code/parser/greater.rb +6 -3
  67. data/lib/code/parser/group.rb +4 -2
  68. data/lib/code/parser/if.rb +6 -4
  69. data/lib/code/parser/if_modifier.rb +5 -25
  70. data/lib/code/parser/left_operation.rb +40 -0
  71. data/lib/code/parser/list.rb +6 -5
  72. data/lib/code/parser/multiplication.rb +4 -2
  73. data/lib/code/parser/name.rb +19 -4
  74. data/lib/code/parser/negation.rb +4 -2
  75. data/lib/code/parser/not_keyword.rb +5 -3
  76. data/lib/code/parser/nothing.rb +3 -10
  77. data/lib/code/parser/number.rb +4 -2
  78. data/lib/code/parser/or_keyword.rb +4 -2
  79. data/lib/code/parser/or_operator.rb +4 -2
  80. data/lib/code/parser/power.rb +4 -28
  81. data/lib/code/parser/range.rb +4 -2
  82. data/lib/code/parser/rescue.rb +6 -26
  83. data/lib/code/parser/right_operation.rb +40 -0
  84. data/lib/code/parser/shift.rb +4 -2
  85. data/lib/code/parser/splat.rb +5 -3
  86. data/lib/code/parser/square_bracket.rb +48 -0
  87. data/lib/code/parser/statement.rb +3 -1
  88. data/lib/code/parser/string.rb +12 -10
  89. data/lib/code/parser/ternary.rb +10 -11
  90. data/lib/code/parser/unary_minus.rb +5 -3
  91. data/lib/code/parser/while.rb +5 -3
  92. data/lib/code/parser/whitespace.rb +2 -0
  93. data/lib/code/parser.rb +10 -3
  94. data/lib/code/ruby.rb +4 -2
  95. data/lib/code/type/hash.rb +38 -0
  96. data/lib/code/type/maybe.rb +29 -0
  97. data/lib/code/type/or.rb +38 -0
  98. data/lib/code/type/repeat.rb +38 -0
  99. data/lib/code/type/sig.rb +130 -0
  100. data/lib/code/type.rb +25 -0
  101. data/lib/code/version.rb +3 -0
  102. data/lib/code-ruby.rb +1 -2
  103. data/lib/code.rb +15 -16
  104. data/spec/code/node/call_spec.rb +39 -0
  105. data/spec/code/object/boolean_spec.rb +18 -0
  106. data/spec/code/object/decimal_spec.rb +51 -0
  107. data/spec/code/object/dictionary_spec.rb +98 -0
  108. data/spec/code/object/function_spec.rb +42 -0
  109. data/spec/code/object/integer_spec.rb +43 -0
  110. data/spec/code/object/nothing_spec.rb +14 -0
  111. data/spec/code/object/range_spec.rb +23 -0
  112. data/spec/code/parser/boolean_spec.rb +5 -10
  113. data/spec/code/parser/chained_call.rb +4 -5
  114. data/spec/code/parser/{dictionnary_spec.rb → dictionary_spec.rb} +5 -6
  115. data/spec/code/parser/function_spec.rb +4 -5
  116. data/spec/code/parser/group_spec.rb +5 -12
  117. data/spec/code/parser/if_modifier_spec.rb +18 -0
  118. data/spec/code/parser/list_spec.rb +4 -5
  119. data/spec/code/parser/number_spec.rb +4 -5
  120. data/spec/code/parser/string_spec.rb +4 -5
  121. data/spec/code/parser_spec.rb +22 -16
  122. data/spec/code/type_spec.rb +21 -0
  123. data/spec/code_spec.rb +171 -0
  124. data/spec/spec_helper.rb +1 -6
  125. metadata +63 -136
  126. data/.cherry.js +0 -21
  127. data/.editorconfig +0 -9
  128. data/.github/workflows/rspec.yml +0 -14
  129. data/.gitignore +0 -2
  130. data/.prettierrc +0 -3
  131. data/.tool-versions +0 -1
  132. data/CHANGELOG.md +0 -55
  133. data/LICENSE +0 -7
  134. data/TODO +0 -17
  135. data/bin/format +0 -3
  136. data/bin/publish +0 -19
  137. data/bin/template +0 -85
  138. data/bin/test +0 -17
  139. data/docs/class.code +0 -9
  140. data/docs/euler/1.template +0 -10
  141. data/docs/euler/2.template +0 -16
  142. data/docs/euler/3.template +0 -16
  143. data/docs/euler/4.template +0 -10
  144. data/docs/euler/5.template +0 -13
  145. data/docs/fibonnaci.template +0 -14
  146. data/docs/meetup.code +0 -12
  147. data/docs/precedence.template +0 -36
  148. data/docs/rain.code +0 -22
  149. data/docs/slack.code +0 -17
  150. data/docs/stripe.code +0 -7
  151. data/docs/twitter.code +0 -9
  152. data/language-ruby.gemspec +0 -17
  153. data/lib/code/node/chained_call.rb +0 -23
  154. data/lib/code/node/equal.rb +0 -34
  155. data/lib/code/node/if_modifier.rb +0 -47
  156. data/lib/code/node/operation.rb +0 -38
  157. data/lib/code/node/power.rb +0 -20
  158. data/lib/code/node/rescue.rb +0 -17
  159. data/lib/code/object/dictionnary.rb +0 -96
  160. data/lib/code/parser/equality_lower.rb +0 -9
  161. data/lib/code/parser/operation.rb +0 -35
  162. data/lib/language/atom.rb +0 -342
  163. data/lib/language/output.rb +0 -130
  164. data/lib/language/parser/absent/present.rb +0 -8
  165. data/lib/language/parser/absent.rb +0 -6
  166. data/lib/language/parser/end_of_input.rb +0 -6
  167. data/lib/language/parser/interuption.rb +0 -38
  168. data/lib/language/parser/not_end_of_input.rb +0 -6
  169. data/lib/language/parser/str/not_found.rb +0 -16
  170. data/lib/language/parser/str.rb +0 -6
  171. data/lib/language/parser.rb +0 -53
  172. data/lib/language-ruby.rb +0 -10
  173. data/lib/language.rb +0 -80
  174. data/lib/template/node/code_part.rb +0 -13
  175. data/lib/template/node/part.rb +0 -19
  176. data/lib/template/node/template.rb +0 -15
  177. data/lib/template/node/text_part.rb +0 -13
  178. data/lib/template/node.rb +0 -4
  179. data/lib/template/parser/template.rb +0 -39
  180. data/lib/template/parser.rb +0 -19
  181. data/lib/template/version.rb +0 -3
  182. data/lib/template-ruby.rb +0 -10
  183. data/lib/template.rb +0 -50
  184. data/spec/code/addition_spec.rb +0 -13
  185. data/spec/code/and_operator_spec.rb +0 -13
  186. data/spec/code/bitwise_and_spec.rb +0 -13
  187. data/spec/code/bitwise_or_spec.rb +0 -13
  188. data/spec/code/boolean_spec.rb +0 -13
  189. data/spec/code/call_spec.rb +0 -21
  190. data/spec/code/chained_call_spec.rb +0 -16
  191. data/spec/code/code_spec.rb +0 -29
  192. data/spec/code/dictionnary_spec.rb +0 -17
  193. data/spec/code/equal_spec.rb +0 -26
  194. data/spec/code/equality_spec.rb +0 -13
  195. data/spec/code/function_spec.rb +0 -18
  196. data/spec/code/greater_spec.rb +0 -18
  197. data/spec/code/group_spec.rb +0 -12
  198. data/spec/code/if_modifier_spec.rb +0 -20
  199. data/spec/code/if_spec.rb +0 -25
  200. data/spec/code/list_spec.rb +0 -19
  201. data/spec/code/multiplication_spec.rb +0 -18
  202. data/spec/code/negation_spec.rb +0 -20
  203. data/spec/code/not_keyword_spec.rb +0 -13
  204. data/spec/code/nothing_spec.rb +0 -17
  205. data/spec/code/number_spec.rb +0 -22
  206. data/spec/code/or_keyword_spec.rb +0 -17
  207. data/spec/code/or_operator_spec.rb +0 -16
  208. data/spec/code/parser/call_spec.rb +0 -26
  209. data/spec/code/power_spec.rb +0 -13
  210. data/spec/code/range_spec.rb +0 -16
  211. data/spec/code/rescue_spec.rb +0 -13
  212. data/spec/code/shift_spec.rb +0 -13
  213. data/spec/code/splat_spec.rb +0 -13
  214. data/spec/code/string_spec.rb +0 -27
  215. data/spec/code/ternary_spec.rb +0 -18
  216. data/spec/code/unary_minus_spec.rb +0 -13
  217. data/spec/code/while_spec.rb +0 -18
  218. data/template-ruby.gemspec +0 -19
@@ -1,23 +1,29 @@
1
- require "spec_helper"
1
+ # frozen_string_literal: true
2
2
 
3
- RSpec.describe "Code::Parser" do
4
- subject { Code::Parser.parse(input) }
3
+ require "spec_helper"
5
4
 
5
+ RSpec.describe Code::Parser do
6
6
  [
7
- ["", []],
8
- [" ", []],
9
- ["\n", []],
10
- ["nothing", [{ nothing: "nothing" }]],
11
- [" nothing ", [{ nothing: "nothing" }]],
12
- [
13
- "nothing null nil",
14
- [{ nothing: "nothing" }, { nothing: "null" }, { nothing: "nil" }]
15
- ]
16
- ].each do |input, output|
17
- context input.inspect do
18
- let(:input) { input }
7
+ "",
8
+ " ",
9
+ "\n",
10
+ "# comment",
11
+ "/* comment",
12
+ "/* comment */",
13
+ "// comment",
14
+ "/* first comment */ # second comment",
15
+ "nothing",
16
+ " nothing ",
17
+ "nothing nothing nothing"
18
+ ].each do |input, _output|
19
+ it input.inspect do
20
+ Code::Parser.parse(input)
21
+ end
22
+ end
19
23
 
20
- it { expect(subject).to eq(output) }
24
+ Dir["spec/fixtures/code/parser/**/*.code"].each do |filename|
25
+ it "parses #{filename}" do
26
+ Code::Parser.parse(File.read(filename))
21
27
  end
22
28
  end
23
29
  end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ RSpec.describe Code::Type do
6
+ describe "valid" do
7
+ ["1 + 2", "2 * 3.4"].each do |input|
8
+ it input do
9
+ expect { Code.evaluate(input) }.to_not raise_error
10
+ end
11
+ end
12
+ end
13
+
14
+ describe "invalid" do
15
+ ["1 - :a", "2 * true"].each do |input|
16
+ it input do
17
+ expect { Code.evaluate(input) }.to raise_error(Code::Error::TypeError)
18
+ end
19
+ end
20
+ end
21
+ end
data/spec/code_spec.rb ADDED
@@ -0,0 +1,171 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ RSpec.describe Code do
6
+ [
7
+ ["1 + 1", "2"],
8
+ ["a = 1", "1"],
9
+ ["a = 1 b = 2 c = a + b c", "3"],
10
+ ["a = 1 a += 1 a", "2"],
11
+ ["a = b = c = 1 a + b + c", "3"],
12
+ ["3.times {}", "3"],
13
+ ["a = 1 3.times { a += 1 } a", "4"],
14
+ ['user = {} user[:name] = "Dorian" user[:name]', ":Dorian"],
15
+ ['user = {} user.name = "Dorian" user.name', ":Dorian"],
16
+ [
17
+ "user = { name: :Dorian, age: 31 } user.delete_if(String) user.keys",
18
+ '["age"]'
19
+ ],
20
+ [
21
+ "(user = { name: :Dorian, age: 31 }).transform_values { user.name }.age",
22
+ ":Dorian"
23
+ ],
24
+ ["1 & 1", "1"],
25
+ ["true && false", "false"],
26
+ ["true && true", "true"],
27
+ ["1 | 2", "3"],
28
+ ["1 ^ 2", "3"],
29
+ %w[true true],
30
+ %w[false false],
31
+ ["[1, 2, 3].select { |n| n.even? }", "[2]"],
32
+ ["[1, 2, 3].select { |n| n.even? }.select { |n| n.odd? }", "[]"],
33
+ %w[{} {}],
34
+ ["{ a: 1, b: 2, c: 3 }", '{"a" => 1, "b" => 2, "c" => 3}'],
35
+ ['{ "first_name": "Dorian" }', '{"first_name" => "Dorian"}'],
36
+ ["a = 1 a", "1"],
37
+ ["a = 1 a += 1 a", "2"],
38
+ ["a = 1 a -= 1 a", "0"],
39
+ ["a = 1 a *= 2 a", "2"],
40
+ ["a = 1 a /= 2 a", "0.5"],
41
+ ["a = 10 a %= 2 a", "0"],
42
+ ["a = 1 a >>= 1 a", "0"],
43
+ ["a = 1 a <<= 1 a", "2"],
44
+ ["a = 1 a |= 2 a", "3"],
45
+ ["a = 1 a ^= 2 a", "3"],
46
+ ["a = false a ||= true a", "true"],
47
+ ["a = false a &&= true a", "false"],
48
+ ["1 == 1", "true"],
49
+ ["1 == 1 and 2 == 2", "true"],
50
+ ["1 > 2", "false"],
51
+ ["1 < 2", "true"],
52
+ ["1 <= 1", "true"],
53
+ ["1 >= 1", "true"],
54
+ ["(true false)", "false"],
55
+ ["if true 1", "1"],
56
+ ["unless false 1", "1"],
57
+ ["if false 1", "nothing"],
58
+ ["unless true 1", "nothing"],
59
+ ["if false 1 else 2", "2"],
60
+ ["if false 1 elsif true 2", "2"],
61
+ ["if false 1 elsif false 2", "nothing"],
62
+ ["if false 1 else if true 2", "2"],
63
+ ["if false 1 else if false 2", "nothing"],
64
+ ["if false 1 else unless false 2", "2"],
65
+ ["if false 1 else unless true 2", "nothing"],
66
+ ["[]", "[]"],
67
+ ["[1, 2, 3]", "[1, 2, 3]"],
68
+ ["[1, 2, 3].include?(2)", "true"],
69
+ ["[1, 2, 3].include?(4)", "false"],
70
+ ["[[true]]", "[[true]]"],
71
+ ["2 * 3", "6"],
72
+ ["2 * 3 + 2", "8"],
73
+ ["2 + 2 * 3", "8"],
74
+ ["2 / 4", "0.5"],
75
+ ["4 % 3", "1"],
76
+ %w[!false true],
77
+ %w[!!true true],
78
+ %w[!!1 true],
79
+ %w[+1 1],
80
+ %w[+1.0 1.0],
81
+ %w[+true true],
82
+ ["not true", "false"],
83
+ ["not not false", "false"],
84
+ %w[0 0],
85
+ %w[1.1 1.1],
86
+ %w[0x10 16],
87
+ %w[0o10 8],
88
+ %w[0b10 2],
89
+ %w[1e1 10],
90
+ %w[1.0e1 10.0],
91
+ %w[10e1.0 100.0],
92
+ ["true or false", "true"],
93
+ ["true and false", "false"],
94
+ ["random = 1 random", "1"],
95
+ ["true || false", "true"],
96
+ ["false || false", "false"],
97
+ ["2 ** 3", "8"],
98
+ ["2 ** 3 ** 2", "512"],
99
+ ["a rescue :oops", ":oops"],
100
+ ["[1, 2].map(&:to_string)", "[:1, :2]"],
101
+ %w['' ""],
102
+ %w["" ''],
103
+ %w[:hello :hello],
104
+ %w[:admin? :admin?],
105
+ %w[:update!.to_string :update!],
106
+ ["'Hello Dorian'", '"Hello Dorian"'],
107
+ ['"Hello Dorian"', '"Hello Dorian"'],
108
+ ["'Hello \\{name}'", ':Hello + " \\{name}"'],
109
+ ['"Hello \\{name}"', '"Hello \\{" + "name}"'],
110
+ ["'Hello {1}'", '"Hello 1"'],
111
+ ['"Hello {1}"', '"Hello 1"'],
112
+ %w["Hello".include?("H") true],
113
+ %w["Hello".downcase :hello],
114
+ ["true ? 1", "1"],
115
+ ["false ? 1", ""],
116
+ ["true ? 1 : 2", "1"],
117
+ ["false ? 1 : 2", "2"],
118
+ %w[-1 -1],
119
+ %w[--1 1],
120
+ %w[-1.0 -1.0],
121
+ %w[--1.0 1.0],
122
+ ["while false", "nothing"],
123
+ ["a = 0\nwhile a < 10 a += 1 end a", "10"],
124
+ ["until true", "nothing"],
125
+ ["a = 0\nuntil a > 10 a += 1 end a", "11"],
126
+ ["1 >> 1", "0"],
127
+ ["1 << 1", "2"],
128
+ ["[1, 2].map(&:to_string)", '["1", "2"]']
129
+ ].each do |input, expected|
130
+ it "#{input} == #{expected}" do
131
+ expect(Code.evaluate(input)).to eq(Code.evaluate(expected))
132
+ end
133
+ end
134
+
135
+ [["puts(true)", "true\n"], %w[print(false) false]].each do |input, expected|
136
+ it "#{input} prints #{expected}" do
137
+ io = StringIO.new
138
+ Code.evaluate(input, io:)
139
+ expect(io.string).to eq(expected)
140
+ end
141
+ end
142
+
143
+ it "converts nil" do
144
+ ruby = Code::Ruby.from_code(Code.evaluate("a", ruby: { a: nil }))
145
+
146
+ expect(ruby).to eq(nil)
147
+ end
148
+
149
+ it "works with downcase" do
150
+ expect(Code.evaluate("downcase", "{ downcase: 1 }")).to eq(
151
+ Code.evaluate("1")
152
+ )
153
+ end
154
+
155
+ it "works with nested objects" do
156
+ expect(
157
+ Code.evaluate("items.first.title", ruby: { items: [{ title: "Hello" }] })
158
+ ).to eq(Code.evaluate(":Hello"))
159
+ end
160
+
161
+ it "works with arrays" do
162
+ expect(
163
+ Code.evaluate(
164
+ "items.map { |item| item.title }",
165
+ ruby: {
166
+ items: [{ title: "Hello" }]
167
+ }
168
+ )
169
+ ).to eq(Code.evaluate("[:Hello]"))
170
+ end
171
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1 @@
1
- require_relative "../lib/template-ruby"
2
- require "json"
3
-
4
- RSpec.configure do |c|
5
- c.example_status_persistence_file_path = "tmp/examples.txt"
6
- end
1
+ require_relative "../lib/code-ruby"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.6
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-18 00:00:00.000000000 Z
11
+ date: 2023-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: zeitwerk
@@ -24,45 +24,33 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: language-ruby
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  description: 'A programming language, like Code.evaluate("1 + 1") # => 2'
28
42
  email: dorian@dorianmarie.fr
29
- executables: []
43
+ executables:
44
+ - code
30
45
  extensions: []
31
46
  extra_rdoc_files: []
32
47
  files:
33
- - ".cherry.js"
34
- - ".editorconfig"
35
- - ".github/workflows/rspec.yml"
36
- - ".gitignore"
37
- - ".prettierrc"
38
48
  - ".rspec"
39
- - ".tool-versions"
40
- - CHANGELOG.md
41
49
  - Gemfile
42
50
  - Gemfile.lock
43
- - LICENSE
44
51
  - README.md
45
- - TODO
46
52
  - bin/code
47
- - bin/format
48
- - bin/publish
49
- - bin/template
50
- - bin/test
51
53
  - code-ruby.gemspec
52
- - docs/class.code
53
- - docs/euler/1.template
54
- - docs/euler/2.template
55
- - docs/euler/3.template
56
- - docs/euler/4.template
57
- - docs/euler/5.template
58
- - docs/fibonnaci.template
59
- - docs/meetup.code
60
- - docs/precedence.template
61
- - docs/rain.code
62
- - docs/slack.code
63
- - docs/stripe.code
64
- - docs/twitter.code
65
- - language-ruby.gemspec
66
54
  - lib/code-ruby.rb
67
55
  - lib/code.rb
68
56
  - lib/code/error.rb
@@ -74,24 +62,21 @@ files:
74
62
  - lib/code/node/boolean.rb
75
63
  - lib/code/node/call.rb
76
64
  - lib/code/node/call_argument.rb
77
- - lib/code/node/chained_call.rb
78
65
  - lib/code/node/code.rb
79
66
  - lib/code/node/decimal.rb
80
- - lib/code/node/dictionnary.rb
81
- - lib/code/node/equal.rb
67
+ - lib/code/node/dictionary.rb
82
68
  - lib/code/node/function.rb
83
69
  - lib/code/node/function_parameter.rb
84
70
  - lib/code/node/if.rb
85
- - lib/code/node/if_modifier.rb
71
+ - lib/code/node/left_operation.rb
86
72
  - lib/code/node/list.rb
87
73
  - lib/code/node/negation.rb
88
74
  - lib/code/node/not.rb
89
75
  - lib/code/node/nothing.rb
90
76
  - lib/code/node/number.rb
91
- - lib/code/node/operation.rb
92
- - lib/code/node/power.rb
93
- - lib/code/node/rescue.rb
77
+ - lib/code/node/right_operation.rb
94
78
  - lib/code/node/splat.rb
79
+ - lib/code/node/square_bracket.rb
95
80
  - lib/code/node/statement.rb
96
81
  - lib/code/node/string.rb
97
82
  - lib/code/node/ternary.rb
@@ -100,10 +85,13 @@ files:
100
85
  - lib/code/object.rb
101
86
  - lib/code/object/argument.rb
102
87
  - lib/code/object/boolean.rb
88
+ - lib/code/object/class.rb
89
+ - lib/code/object/context.rb
103
90
  - lib/code/object/decimal.rb
104
- - lib/code/object/dictionnary.rb
91
+ - lib/code/object/dictionary.rb
105
92
  - lib/code/object/function.rb
106
93
  - lib/code/object/global.rb
94
+ - lib/code/object/identifier_list.rb
107
95
  - lib/code/object/integer.rb
108
96
  - lib/code/object/list.rb
109
97
  - lib/code/object/nothing.rb
@@ -121,15 +109,15 @@ files:
121
109
  - lib/code/parser/chained_call.rb
122
110
  - lib/code/parser/class.rb
123
111
  - lib/code/parser/code.rb
124
- - lib/code/parser/dictionnary.rb
112
+ - lib/code/parser/dictionary.rb
125
113
  - lib/code/parser/equal.rb
126
114
  - lib/code/parser/equality.rb
127
- - lib/code/parser/equality_lower.rb
128
115
  - lib/code/parser/function.rb
129
116
  - lib/code/parser/greater.rb
130
117
  - lib/code/parser/group.rb
131
118
  - lib/code/parser/if.rb
132
119
  - lib/code/parser/if_modifier.rb
120
+ - lib/code/parser/left_operation.rb
133
121
  - lib/code/parser/list.rb
134
122
  - lib/code/parser/multiplication.rb
135
123
  - lib/code/parser/name.rb
@@ -137,14 +125,15 @@ files:
137
125
  - lib/code/parser/not_keyword.rb
138
126
  - lib/code/parser/nothing.rb
139
127
  - lib/code/parser/number.rb
140
- - lib/code/parser/operation.rb
141
128
  - lib/code/parser/or_keyword.rb
142
129
  - lib/code/parser/or_operator.rb
143
130
  - lib/code/parser/power.rb
144
131
  - lib/code/parser/range.rb
145
132
  - lib/code/parser/rescue.rb
133
+ - lib/code/parser/right_operation.rb
146
134
  - lib/code/parser/shift.rb
147
135
  - lib/code/parser/splat.rb
136
+ - lib/code/parser/square_bracket.rb
148
137
  - lib/code/parser/statement.rb
149
138
  - lib/code/parser/string.rb
150
139
  - lib/code/parser/ternary.rb
@@ -152,74 +141,35 @@ files:
152
141
  - lib/code/parser/while.rb
153
142
  - lib/code/parser/whitespace.rb
154
143
  - lib/code/ruby.rb
155
- - lib/language-ruby.rb
156
- - lib/language.rb
157
- - lib/language/atom.rb
158
- - lib/language/output.rb
159
- - lib/language/parser.rb
160
- - lib/language/parser/absent.rb
161
- - lib/language/parser/absent/present.rb
162
- - lib/language/parser/end_of_input.rb
163
- - lib/language/parser/interuption.rb
164
- - lib/language/parser/not_end_of_input.rb
165
- - lib/language/parser/str.rb
166
- - lib/language/parser/str/not_found.rb
167
- - lib/template-ruby.rb
168
- - lib/template.rb
169
- - lib/template/node.rb
170
- - lib/template/node/code_part.rb
171
- - lib/template/node/part.rb
172
- - lib/template/node/template.rb
173
- - lib/template/node/text_part.rb
174
- - lib/template/parser.rb
175
- - lib/template/parser/template.rb
176
- - lib/template/version.rb
177
- - spec/code/addition_spec.rb
178
- - spec/code/and_operator_spec.rb
179
- - spec/code/bitwise_and_spec.rb
180
- - spec/code/bitwise_or_spec.rb
181
- - spec/code/boolean_spec.rb
182
- - spec/code/call_spec.rb
183
- - spec/code/chained_call_spec.rb
184
- - spec/code/code_spec.rb
185
- - spec/code/dictionnary_spec.rb
186
- - spec/code/equal_spec.rb
187
- - spec/code/equality_spec.rb
188
- - spec/code/function_spec.rb
189
- - spec/code/greater_spec.rb
190
- - spec/code/group_spec.rb
191
- - spec/code/if_modifier_spec.rb
192
- - spec/code/if_spec.rb
193
- - spec/code/list_spec.rb
194
- - spec/code/multiplication_spec.rb
195
- - spec/code/negation_spec.rb
196
- - spec/code/not_keyword_spec.rb
197
- - spec/code/nothing_spec.rb
198
- - spec/code/number_spec.rb
199
- - spec/code/or_keyword_spec.rb
200
- - spec/code/or_operator_spec.rb
144
+ - lib/code/type.rb
145
+ - lib/code/type/hash.rb
146
+ - lib/code/type/maybe.rb
147
+ - lib/code/type/or.rb
148
+ - lib/code/type/repeat.rb
149
+ - lib/code/type/sig.rb
150
+ - lib/code/version.rb
151
+ - spec/code/node/call_spec.rb
152
+ - spec/code/object/boolean_spec.rb
153
+ - spec/code/object/decimal_spec.rb
154
+ - spec/code/object/dictionary_spec.rb
155
+ - spec/code/object/function_spec.rb
156
+ - spec/code/object/integer_spec.rb
157
+ - spec/code/object/nothing_spec.rb
158
+ - spec/code/object/range_spec.rb
201
159
  - spec/code/parser/boolean_spec.rb
202
- - spec/code/parser/call_spec.rb
203
160
  - spec/code/parser/chained_call.rb
204
- - spec/code/parser/dictionnary_spec.rb
161
+ - spec/code/parser/dictionary_spec.rb
205
162
  - spec/code/parser/function_spec.rb
206
163
  - spec/code/parser/group_spec.rb
164
+ - spec/code/parser/if_modifier_spec.rb
207
165
  - spec/code/parser/list_spec.rb
208
166
  - spec/code/parser/number_spec.rb
209
167
  - spec/code/parser/string_spec.rb
210
168
  - spec/code/parser_spec.rb
211
- - spec/code/power_spec.rb
212
- - spec/code/range_spec.rb
213
- - spec/code/rescue_spec.rb
214
- - spec/code/shift_spec.rb
215
- - spec/code/splat_spec.rb
216
- - spec/code/string_spec.rb
217
- - spec/code/ternary_spec.rb
218
- - spec/code/unary_minus_spec.rb
219
- - spec/code/while_spec.rb
169
+ - spec/code/type_spec.rb
170
+ - spec/code_spec.rb
220
171
  - spec/spec_helper.rb
221
- - template-ruby.gemspec
222
- homepage: https://github.com/dorianmariefr/template-ruby
172
+ homepage: https://github.com/dorianmariefr/code-ruby
223
173
  licenses:
224
174
  - MIT
225
175
  metadata: {}
@@ -238,52 +188,29 @@ required_rubygems_version: !ruby/object:Gem::Requirement
238
188
  - !ruby/object:Gem::Version
239
189
  version: '0'
240
190
  requirements: []
241
- rubygems_version: 3.3.26
191
+ rubygems_version: 3.4.22
242
192
  signing_key:
243
193
  specification_version: 4
244
194
  summary: A programming language
245
195
  test_files:
246
- - spec/code/addition_spec.rb
247
- - spec/code/and_operator_spec.rb
248
- - spec/code/bitwise_and_spec.rb
249
- - spec/code/bitwise_or_spec.rb
250
- - spec/code/boolean_spec.rb
251
- - spec/code/call_spec.rb
252
- - spec/code/chained_call_spec.rb
253
- - spec/code/code_spec.rb
254
- - spec/code/dictionnary_spec.rb
255
- - spec/code/equal_spec.rb
256
- - spec/code/equality_spec.rb
257
- - spec/code/function_spec.rb
258
- - spec/code/greater_spec.rb
259
- - spec/code/group_spec.rb
260
- - spec/code/if_modifier_spec.rb
261
- - spec/code/if_spec.rb
262
- - spec/code/list_spec.rb
263
- - spec/code/multiplication_spec.rb
264
- - spec/code/negation_spec.rb
265
- - spec/code/not_keyword_spec.rb
266
- - spec/code/nothing_spec.rb
267
- - spec/code/number_spec.rb
268
- - spec/code/or_keyword_spec.rb
269
- - spec/code/or_operator_spec.rb
196
+ - spec/code/node/call_spec.rb
197
+ - spec/code/object/boolean_spec.rb
198
+ - spec/code/object/decimal_spec.rb
199
+ - spec/code/object/dictionary_spec.rb
200
+ - spec/code/object/function_spec.rb
201
+ - spec/code/object/integer_spec.rb
202
+ - spec/code/object/nothing_spec.rb
203
+ - spec/code/object/range_spec.rb
270
204
  - spec/code/parser/boolean_spec.rb
271
- - spec/code/parser/call_spec.rb
272
205
  - spec/code/parser/chained_call.rb
273
- - spec/code/parser/dictionnary_spec.rb
206
+ - spec/code/parser/dictionary_spec.rb
274
207
  - spec/code/parser/function_spec.rb
275
208
  - spec/code/parser/group_spec.rb
209
+ - spec/code/parser/if_modifier_spec.rb
276
210
  - spec/code/parser/list_spec.rb
277
211
  - spec/code/parser/number_spec.rb
278
212
  - spec/code/parser/string_spec.rb
279
213
  - spec/code/parser_spec.rb
280
- - spec/code/power_spec.rb
281
- - spec/code/range_spec.rb
282
- - spec/code/rescue_spec.rb
283
- - spec/code/shift_spec.rb
284
- - spec/code/splat_spec.rb
285
- - spec/code/string_spec.rb
286
- - spec/code/ternary_spec.rb
287
- - spec/code/unary_minus_spec.rb
288
- - spec/code/while_spec.rb
214
+ - spec/code/type_spec.rb
215
+ - spec/code_spec.rb
289
216
  - spec/spec_helper.rb
data/.cherry.js DELETED
@@ -1,21 +0,0 @@
1
- module.exports = {
2
- project_name: 'dorianmariefr/template-ruby',
3
- metrics: [
4
- {
5
- name: 'todo',
6
- pattern: /TODO:/i,
7
- },
8
- {
9
- name: 'fixme',
10
- pattern: /FIXME:/i,
11
- },
12
- {
13
- name: 'rubocop',
14
- pattern: /rubocop:disable/,
15
- },
16
- {
17
- name: 'eslint',
18
- pattern: /eslint-disable/,
19
- },
20
- ],
21
- }
data/.editorconfig DELETED
@@ -1,9 +0,0 @@
1
- root = true
2
-
3
- [*]
4
- charset = utf-8
5
- end_of_line = lf
6
- insert_final_newline = true
7
- indent_style = space
8
- indent_size = 2
9
- trim_trailing_whitespace = true
@@ -1,14 +0,0 @@
1
- name: RSpec
2
-
3
- on: [push, pull_request]
4
-
5
- jobs:
6
- build:
7
- name: RSpec
8
- runs-on: ubuntu-latest
9
-
10
- steps:
11
- - uses: actions/checkout@v1
12
- - uses: actions/setup-ruby@v1
13
- - run: bundle install
14
- - run: bundle exec rspec
data/.gitignore DELETED
@@ -1,2 +0,0 @@
1
- *.gem
2
- tmp/
data/.prettierrc DELETED
@@ -1,3 +0,0 @@
1
- {
2
- "rubyPlugins": "plugin/trailing_comma"
3
- }
data/.tool-versions DELETED
@@ -1 +0,0 @@
1
- ruby 3.1.3
data/CHANGELOG.md DELETED
@@ -1,55 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to this project will be documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
-
8
- ## 0.4.0 / 2022-10-21
9
-
10
- - Rewrite of how functions are called internally (no more `public_send`)
11
- - Call ruby functions from template/code
12
-
13
- ## 0.3.1 / 2022-10-13
14
-
15
- - Fix Zeitwerk auto-loading issue
16
-
17
- ## 0.3.0 / 2022-10-10
18
-
19
- - `bin/template` accepts `--timeout` (or `-t`) parameter
20
- - Adds `bin/code` with same options as `bin/template`
21
- - Prevent loose syntax like `{ a: }`, `[1,,,]` and `()`
22
- - Change precedence of defined? (to allow `defined?(name) ? name : nothing`)
23
- - Updates parsers to allow `while false end == nothing`
24
- - String interpolations like `"1 + 1 = {1 + 1}"`
25
- - `context(:name)` to get a function without calling it for instance
26
- - `.to_string` on all objects
27
- - `1 + "a"` and `"a" + 1.0` for instance now convert to strings
28
- - `Dictionnary#each` e.g. `{ a: 1 }.each { |k, v| print(k) }`
29
- - Fix context duplication issue that was preventing implementation of recursive
30
- functions like Fibonacci
31
-
32
- ## 0.2.4 / 2022-08-02
33
-
34
- - Add method `String#*`, e.g. `{"Dorian " \* 2}" -> "Dorian Dorian "
35
- - Add executable to gem, e.g. `template --help`
36
-
37
- ## 0.2.3 / 2022-08-31
38
-
39
- - Add default timeout for code and template parsing and evaluation
40
-
41
- ## 0.2.2 / 2022-08-31
42
-
43
- - Fix parsing error when the template is empty, e.g. ""
44
-
45
- ## 0.2.1 / 2022-08-31
46
-
47
- - Fix parsing error on empty code like `Hello {`
48
-
49
- ## 0.2.0 / 2022-08-30
50
-
51
- - Programming language capable of solving the first 5 Project Euler problems
52
-
53
- ## 0.1.0 / 2022-07-28
54
-
55
- - Initial version with interpolation