laerad 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cc4aba5b10777aeac869643bacc35c67a718111bbf3fba0f9565adaf9ae7feda
4
- data.tar.gz: 07f3e5a2e2bc0ce751b983ced23cd3f800e1b5b5faed771ab89eaf8cb1fd8f41
3
+ metadata.gz: 35856e816ed1ba8b9ae913335e1e28b9b5a5181d4714064e0529d04c4ddbe98c
4
+ data.tar.gz: 2396959e613c2f8261f8519c47aa7743d0be291f51fb2134d83f5f037928a43b
5
5
  SHA512:
6
- metadata.gz: 37fbe81640c7637723514412ba77b4a1e5179f33f8e632ff2d137c98177a7793731d8e4b7b4da629f2e1579e7a75c922cf417d40493c5cff5709af17a18b174c
7
- data.tar.gz: b39c39ef6759a111cc777a649341cce2c30ab61d59aae267c310a08be76b3f055b96ff95ebb230acd0a8cc51f1387e3c699591c75f8f406b5541b2024be69c45
6
+ metadata.gz: 5ef2b09e75348487b63511d4eca7b00400a00ae20dac624cb1eb224d45e641f4af9d647d7c740f7f892b679ec32aa2c09f6ab650014be8f190cb2dba9cb50531
7
+ data.tar.gz: ad16630f69bd3504cce35015bd529886164d83173c32fa3ba854377212ab518bc4571c5c3e73741c5c52a1a4153e0afec1398d39c0840a0dbf0de2d394295035
@@ -41,6 +41,10 @@ module Laerad
41
41
  scope
42
42
  end
43
43
 
44
+ def find_defining_scope(name)
45
+ @scope_stack.reverse.find { |s| s.variable_defined?(name) }
46
+ end
47
+
44
48
  def finalize_scope(scope)
45
49
  scope.single_use_variables.each do |name|
46
50
  line = scope.variable_definition_line(name)
@@ -71,14 +75,26 @@ module Laerad
71
75
 
72
76
  when SyntaxTree::VarRef
73
77
  name = extract_var_name(node)
74
- current_scope.register_variable_ref(name) if name
78
+ if name
79
+ scope = find_defining_scope(name) || current_scope
80
+ scope.register_variable_ref(name)
81
+ end
75
82
 
76
83
  when SyntaxTree::Assign
77
84
  visit(node.target)
78
85
  visit(node.value)
79
86
 
80
87
  when SyntaxTree::OpAssign
81
- visit(node.target)
88
+ if node.target.is_a?(SyntaxTree::VarField) && node.target.value.is_a?(SyntaxTree::Ident)
89
+ name = node.target.value.value
90
+ if (defining_scope = find_defining_scope(name))
91
+ defining_scope.register_variable_ref(name)
92
+ else
93
+ visit(node.target)
94
+ end
95
+ else
96
+ visit(node.target)
97
+ end
82
98
  visit(node.value)
83
99
 
84
100
  when SyntaxTree::DefNode
@@ -333,7 +349,7 @@ module Laerad
333
349
  param.value
334
350
  when SyntaxTree::RestParam
335
351
  param.name&.value
336
- when SyntaxTree::KeywordRestParam
352
+ when SyntaxTree::KwRestParam
337
353
  param.name&.value
338
354
  when SyntaxTree::BlockArg
339
355
  param.name&.value
@@ -353,10 +369,7 @@ module Laerad
353
369
  end
354
370
 
355
371
  def extract_var_name(node)
356
- case node.value
357
- when SyntaxTree::Ident
358
- node.value.value
359
- end
372
+ node.value.value if node.value.is_a?(SyntaxTree::Ident)
360
373
  end
361
374
  end
362
375
  end
data/lib/laerad/result.rb CHANGED
@@ -46,7 +46,7 @@ module Laerad
46
46
  end
47
47
 
48
48
  table = Terminal::Table.new(
49
- headings: ["File", "Line", "Variable", "Uses"],
49
+ headings: ["File", "Line", "Variable", "Appearances"],
50
50
  rows: rows
51
51
  )
52
52
 
data/lib/laerad/scope.rb CHANGED
@@ -29,5 +29,9 @@ module Laerad
29
29
  def variable_count(name)
30
30
  @variables[name]
31
31
  end
32
+
33
+ def variable_defined?(name)
34
+ @variable_def_lines.key?(name)
35
+ end
32
36
  end
33
37
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Laerad
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.5"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: laerad
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Giles Bowkett