@@ -9,52 +9,62 @@ defmodule NextLS.ASTHelpers.Variables do
9
9
@ spec get_variable_definition ( String . t ( ) , { integer ( ) , integer ( ) } ) :: { atom ( ) , { Range . t ( ) , Range . t ( ) } } | nil
10
10
def get_variable_definition ( file , position ) do
11
11
file = File . read! ( file )
12
- ast = Code . string_to_quoted! ( file , columns: true )
13
-
14
- { _ast , % { vars: vars } } =
15
- Macro . traverse (
16
- ast ,
17
- % { vars: [ ] , symbols: % { } , sym_ranges: [ ] , scope: [ ] } ,
18
- & prewalk / 2 ,
19
- & postwalk / 2
20
- )
21
-
22
- Enum . find_value ( vars , fn % { name: name , sym_range: range , ref_range: ref_range } ->
23
- if position_in_range? ( position , ref_range ) , do: { name , range } , else: nil
24
- end )
12
+
13
+ case Code . string_to_quoted ( file , columns: true ) do
14
+ { :ok , ast } ->
15
+ { _ast , % { vars: vars } } =
16
+ Macro . traverse (
17
+ ast ,
18
+ % { vars: [ ] , symbols: % { } , sym_ranges: [ ] , scope: [ ] } ,
19
+ & prewalk / 2 ,
20
+ & postwalk / 2
21
+ )
22
+
23
+ Enum . find_value ( vars , fn % { name: name , sym_range: range , ref_range: ref_range } ->
24
+ if position_in_range? ( position , ref_range ) , do: { name , range } , else: nil
25
+ end )
26
+
27
+ _error ->
28
+ nil
29
+ end
25
30
end
26
31
27
32
@ spec list_variable_references ( String . t ( ) , { integer ( ) , integer ( ) } ) :: [ { atom ( ) , { Range . t ( ) , Range . t ( ) } } ]
28
33
def list_variable_references ( file , position ) do
29
34
file = File . read! ( file )
30
- ast = Code . string_to_quoted! ( file , columns: true )
31
-
32
- { _ast , % { vars: vars } } =
33
- Macro . traverse (
34
- ast ,
35
- % { vars: [ ] , symbols: % { } , sym_ranges: [ ] , scope: [ ] } ,
36
- & prewalk / 2 ,
37
- & postwalk / 2
38
- )
39
-
40
- symbol =
41
- Enum . find_value ( vars , fn % { name: name , sym_range: range , ref_range: ref_range } ->
42
- if position_in_range? ( position , ref_range ) , do: { name , range } , else: nil
43
- end )
44
-
45
- position =
46
- case symbol do
47
- nil -> position
48
- { _ , { line .. _ , column .. _ } } -> { line , column }
49
- end
50
-
51
- Enum . reduce ( vars , [ ] , fn val , acc ->
52
- if position_in_range? ( position , val . sym_range ) do
53
- [ { val . name , val . ref_range } | acc ]
54
- else
55
- acc
56
- end
57
- end )
35
+
36
+ case Code . string_to_quoted ( file , columns: true ) do
37
+ { :ok , ast } ->
38
+ { _ast , % { vars: vars } } =
39
+ Macro . traverse (
40
+ ast ,
41
+ % { vars: [ ] , symbols: % { } , sym_ranges: [ ] , scope: [ ] } ,
42
+ & prewalk / 2 ,
43
+ & postwalk / 2
44
+ )
45
+
46
+ symbol =
47
+ Enum . find_value ( vars , fn % { name: name , sym_range: range , ref_range: ref_range } ->
48
+ if position_in_range? ( position , ref_range ) , do: { name , range } , else: nil
49
+ end )
50
+
51
+ position =
52
+ case symbol do
53
+ nil -> position
54
+ { _ , { line .. _ , column .. _ } } -> { line , column }
55
+ end
56
+
57
+ Enum . reduce ( vars , [ ] , fn val , acc ->
58
+ if position_in_range? ( position , val . sym_range ) do
59
+ [ { val . name , val . ref_range } | acc ]
60
+ else
61
+ acc
62
+ end
63
+ end )
64
+
65
+ _error ->
66
+ [ ]
67
+ end
58
68
end
59
69
60
70
# search symbols in function and macro definition args and increase scope
0 commit comments