Browse Source

Prettier

master
Dylan Baker 5 years ago
parent
commit
9b28b56a3a

+ 1
- 3
lib/ahem/ast/hash.rb View File

12
   def execute(env)
12
   def execute(env)
13
     result = Hash.new
13
     result = Hash.new
14
 
14
 
15
-    @data.each do |k, v|
16
-      result[k] = v.execute(env)
17
-    end
15
+    @data.each { |k, v| result[k] = v.execute(env) }
18
 
16
 
19
     result
17
     result
20
   end
18
   end

+ 1
- 5
lib/ahem/ast/identifier.rb View File

12
   def execute(env)
12
   def execute(env)
13
     value = env.get(@name)
13
     value = env.get(@name)
14
 
14
 
15
-    if value.respond_to?(:execute)
16
-      value.execute(env)
17
-    else
18
-      value
19
-    end
15
+    value.respond_to?(:execute) ? value.execute(env) : value
20
   end
16
   end
21
 end
17
 end

+ 3
- 3
lib/ahem/ast/index.rb View File

19
         if key.to_i == key && object.size > key
19
         if key.to_i == key && object.size > key
20
           object[key]
20
           object[key]
21
         elsif key.to_i != key
21
         elsif key.to_i != key
22
-          raise "Array index requires integer key"
22
+          raise 'Array index requires integer key'
23
         elsif object.size <= key
23
         elsif object.size <= key
24
-          raise "Array index out of bounds"
24
+          raise 'Array index out of bounds'
25
         end
25
         end
26
       else
26
       else
27
-        raise "Array index requires integer key"
27
+        raise 'Array index requires integer key'
28
       end
28
       end
29
     elsif object.is_a?(Hash)
29
     elsif object.is_a?(Hash)
30
       if object.has_key?(key)
30
       if object.has_key?(key)

+ 2
- 2
lib/ahem/core.rb View File

1
 CORE = {
1
 CORE = {
2
-  :print => -> *args do
2
+  print: lambda do |*args|
3
     args.each do |arg|
3
     args.each do |arg|
4
       if arg.is_a?(Array)
4
       if arg.is_a?(Array)
5
         puts "[#{arg.join(', ')}]"
5
         puts "[#{arg.join(', ')}]"
7
         puts arg
7
         puts arg
8
       end
8
       end
9
     end
9
     end
10
-  end,
10
+  end
11
 }
11
 }

+ 2
- 8
lib/ahem/environment.rb View File

4
   def initialize(parent = nil)
4
   def initialize(parent = nil)
5
     @data = Hash.new
5
     @data = Hash.new
6
 
6
 
7
-    CORE.each do |k, v|
8
-      @data[k.to_s] = v
9
-    end
7
+    CORE.each { |k, v| @data[k.to_s] = v }
10
 
8
 
11
-    unless parent.nil?
12
-      parent.data.each do |k, v|
13
-        @data[k] = v
14
-      end
15
-    end
9
+    parent.data.each { |k, v| @data[k] = v } unless parent.nil?
16
   end
10
   end
17
 
11
 
18
   def get(name)
12
   def get(name)

+ 1
- 3
lib/ahem/interpreter.rb View File

5
   end
5
   end
6
 
6
 
7
   def interpret
7
   def interpret
8
-    @tree.each do |node|
9
-      node.execute(@env)
10
-    end
8
+    @tree.each { |node| node.execute(@env) }
11
   end
9
   end
12
 end
10
 end

+ 32
- 31
lib/ahem/parser.rb View File

204
 
204
 
205
   def unary
205
   def unary
206
     if @current_token.type == TokenKinds::OPERATOR &&
206
     if @current_token.type == TokenKinds::OPERATOR &&
207
-        %i[- !].include?(@current_token.value)
207
+       %i[- !].include?(@current_token.value)
208
       operator = eat(TokenKinds::OPERATOR).value
208
       operator = eat(TokenKinds::OPERATOR).value
209
       expr = primary
209
       expr = primary
210
       AST::Unary.new(operator, expr)
210
       AST::Unary.new(operator, expr)
215
 
215
 
216
   def primary
216
   def primary
217
     token = @current_token
217
     token = @current_token
218
-    expr = case token.type
219
-    when TokenKinds::NULL
220
-      advance
221
-      AST::Null.new
222
-    when TokenKinds::BOOLEAN
223
-      advance
224
-      AST::Boolean.new(token.value)
225
-    when TokenKinds::NUMBER
226
-      advance
227
-      AST::Number.new(token.value)
228
-    when TokenKinds::STRING
229
-      advance
230
-      AST::String.new(token.value)
231
-    when TokenKinds::ATOM
232
-      advance
233
-      AST::Atom.new(token.value)
234
-    when TokenKinds::IDENTIFIER
235
-      identifier
236
-    when TokenKinds::LBRACKET
237
-      array
238
-    when TokenKinds::LBRACE
239
-      hash
240
-    when TokenKinds::LPAREN
241
-      eat(TokenKinds::LPAREN)
242
-      e = expression
243
-      eat(TokenKinds::RPAREN)
244
-      e
245
-    else
246
-      raise "Unexpected token #{token.type}"
247
-    end
218
+    expr =
219
+      case token.type
220
+      when TokenKinds::NULL
221
+        advance
222
+        AST::Null.new
223
+      when TokenKinds::BOOLEAN
224
+        advance
225
+        AST::Boolean.new(token.value)
226
+      when TokenKinds::NUMBER
227
+        advance
228
+        AST::Number.new(token.value)
229
+      when TokenKinds::STRING
230
+        advance
231
+        AST::String.new(token.value)
232
+      when TokenKinds::ATOM
233
+        advance
234
+        AST::Atom.new(token.value)
235
+      when TokenKinds::IDENTIFIER
236
+        identifier
237
+      when TokenKinds::LBRACKET
238
+        array
239
+      when TokenKinds::LBRACE
240
+        hash
241
+      when TokenKinds::LPAREN
242
+        eat(TokenKinds::LPAREN)
243
+        e = expression
244
+        eat(TokenKinds::RPAREN)
245
+        e
246
+      else
247
+        raise "Unexpected token #{token.type}"
248
+      end
248
 
249
 
249
     if @current_token.type == TokenKinds::LPAREN
250
     if @current_token.type == TokenKinds::LPAREN
250
       args = arguments
251
       args = arguments

+ 11
- 29
spec/parser_spec.rb View File

310
   it 'gives function calls higher precedence than binary operations' do
310
   it 'gives function calls higher precedence than binary operations' do
311
     expect(parse('x + func(y);')).to eq(
311
     expect(parse('x + func(y);')).to eq(
312
       [
312
       [
313
-          AST::Binary.new(
314
-            AST::Operators::ADD,
315
-            AST::Identifier.new('x'),
316
-            AST::FunctionCall.new(
317
-              AST::Identifier.new('func'),
318
-              [
319
-                AST::Identifier.new('y'),
320
-              ]
321
-            )
313
+        AST::Binary.new(
314
+          AST::Operators::ADD,
315
+          AST::Identifier.new('x'),
316
+          AST::FunctionCall.new(
317
+            AST::Identifier.new('func'),
318
+            [AST::Identifier.new('y')]
322
           )
319
           )
320
+        )
323
       ]
321
       ]
324
     )
322
     )
325
   end
323
   end
326
 
324
 
327
   it 'parses hashes' do
325
   it 'parses hashes' do
328
     expect(parse('{ :a => 1, :b => 2 };')).to eq(
326
     expect(parse('{ :a => 1, :b => 2 };')).to eq(
329
-      [
330
-        AST::Hash.new(
331
-          {
332
-            :a => AST::Number.new(1.0),
333
-            :b => AST::Number.new(2.0),
334
-          }
335
-        )
336
-      ]
327
+      [AST::Hash.new({ a: AST::Number.new(1.0), b: AST::Number.new(2.0) })]
337
     )
328
     )
338
   end
329
   end
339
 
330
 
340
   it 'parses bracket indexing' do
331
   it 'parses bracket indexing' do
341
     expect(parse('array[0];')).to eq(
332
     expect(parse('array[0];')).to eq(
342
-      [
343
-        AST::Index.new(
344
-          AST::Identifier.new('array'),
345
-          AST::Number.new(0),
346
-        )
347
-      ]
333
+      [AST::Index.new(AST::Identifier.new('array'), AST::Number.new(0))]
348
     )
334
     )
349
   end
335
   end
350
 
336
 
351
   it 'parses atoms' do
337
   it 'parses atoms' do
352
-    expect(parse(':atom;')).to eq(
353
-      [
354
-        AST::Atom.new(:atom)
355
-      ]
356
-    )
338
+    expect(parse(':atom;')).to eq([AST::Atom.new(:atom)])
357
   end
339
   end
358
 
340
 
359
   it 'parses unary expressions' do
341
   it 'parses unary expressions' do
371
             AST::Number.new(1.0),
353
             AST::Number.new(1.0),
372
             AST::Number.new(2.0)
354
             AST::Number.new(2.0)
373
           ),
355
           ),
374
-          AST::Number.new(3.0),
356
+          AST::Number.new(3.0)
375
         )
357
         )
376
       ]
358
       ]
377
     )
359
     )

Loading…
Cancel
Save