Skip to content

Commit dd572f4

Browse files
committed
simplify var location
1 parent b1df447 commit dd572f4

File tree

6 files changed

+11
-80
lines changed

6 files changed

+11
-80
lines changed

apps/language_server/lib/language_server/providers/completion/suggestion.ex

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ defmodule ElixirLS.LanguageServer.Providers.Completion.Suggestion do
5353
alias ElixirSense.Core.Parser
5454
alias ElixirSense.Core.Source
5555
alias ElixirLS.LanguageServer.Providers.Completion.Reducers
56-
alias ElixirSense.Core.Normalized.Code, as: NormalizedCode
5756

5857
@type generic :: %{
5958
type: :generic,

apps/language_server/lib/language_server/providers/definition/locator.ex

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ defmodule ElixirLS.LanguageServer.Providers.Definition.Locator do
1818
alias ElixirSense.Core.State
1919
alias ElixirSense.Core.State.ModFunInfo
2020
alias ElixirSense.Core.State.TypeInfo
21-
alias ElixirSense.Core.State.VarInfo
2221
alias ElixirSense.Core.Source
2322
alias ElixirSense.Core.SurroundContext
2423
alias ElixirLS.LanguageServer.Location
@@ -42,8 +41,7 @@ defmodule ElixirLS.LanguageServer.Providers.Definition.Locator do
4241

4342
find(
4443
context,
45-
env
46-
|> Metadata.add_scope_vars(metadata, {line, column}),
44+
env,
4745
metadata
4846
)
4947
end
@@ -61,7 +59,6 @@ defmodule ElixirLS.LanguageServer.Providers.Definition.Locator do
6159
context,
6260
%State.Env{
6361
module: module,
64-
vars: vars,
6562
attributes: attributes
6663
} = env,
6764
metadata
@@ -78,13 +75,7 @@ defmodule ElixirLS.LanguageServer.Providers.Definition.Locator do
7875
nil
7976

8077
{:variable, variable, version} ->
81-
var_info =
82-
vars
83-
|> Enum.find(fn
84-
%VarInfo{} = info ->
85-
info.name == variable and (info.version == version or version == :any) and
86-
context.begin in info.positions
87-
end)
78+
var_info = Metadata.find_var(metadata, variable, version, context.begin)
8879

8980
if var_info != nil do
9081
{definition_line, definition_column} = Enum.min(var_info.positions)

apps/language_server/lib/language_server/providers/document_symbols.ex

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbols do
88
alias ElixirLS.LanguageServer.Providers.SymbolUtils
99
alias ElixirLS.LanguageServer.{SourceFile, Parser}
1010
require ElixirLS.LanguageServer.Protocol, as: Protocol
11-
alias ElixirSense.Core.Normalized.Module, as: NormalizedModule
1211

1312
defmodule Info do
1413
defstruct [:type, :name, :detail, :location, :children, :selection_location, :symbol]
@@ -173,13 +172,13 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbols do
173172
not is_nil(type_expression) do
174173
type_name_location =
175174
case type_expression do
176-
[{:"::", _, [{name, type_head_location, args} = type_head | _]}] ->
175+
[{:"::", _, [{name, type_head_location, args} = _type_head | _]}] ->
177176
{{name, args}, type_head_location}
178177

179-
[{:when, _, [{:"::", _, [{name, type_head_location, args} = type_head, _]}, _]}] ->
178+
[{:when, _, [{:"::", _, [{name, type_head_location, args} = _type_head, _]}, _]}] ->
180179
{{name, args}, type_head_location}
181180

182-
[{name, type_head_location, args} = type_head | _] ->
181+
[{name, type_head_location, args} = _type_head | _] ->
183182
{{name, args}, type_head_location}
184183

185184
_ ->
@@ -218,16 +217,9 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbols do
218217
# Function, macro, guard with when
219218
defp extract_symbol(
220219
_current_module,
221-
{defname, location, [{:when, _, [{name, head_location, args} = fn_head, _]} | _]}
220+
{defname, location, [{:when, _, [{name, head_location, args} = _fn_head, _]} | _]}
222221
)
223222
when defname in @defs do
224-
head =
225-
Macro.to_string(fn_head)
226-
|> String.replace(~r/,*\n\s*/u, fn
227-
"," <> _ -> ", "
228-
_ -> ""
229-
end)
230-
231223
%Info{
232224
type: if(defname in @macro_defs, do: :constant, else: :function),
233225
symbol: to_string(name),
@@ -242,16 +234,9 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbols do
242234
# Function, macro, delegate
243235
defp extract_symbol(
244236
_current_module,
245-
{defname, location, [{name, head_location, args} = fn_head | _]}
237+
{defname, location, [{name, head_location, args} = _fn_head | _]}
246238
)
247239
when defname in @defs do
248-
head =
249-
Macro.to_string(fn_head)
250-
|> String.replace(~r/,*\n\s*/u, fn
251-
"," <> _ -> ", "
252-
_ -> ""
253-
end)
254-
255240
%Info{
256241
type: if(defname in @macro_defs, do: :constant, else: :function),
257242
symbol: to_string(name),

apps/language_server/lib/language_server/providers/execute_command/expand_macro.ex

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ defmodule ElixirLS.LanguageServer.Providers.ExecuteCommand.ExpandMacro do
55
"""
66

77
alias ElixirLS.LanguageServer.Server
8-
alias ElixirSense.Core.Ast
98
alias ElixirSense.Core.State
109
alias ElixirSense.Core.Parser
1110
alias ElixirSense.Core.Metadata

apps/language_server/lib/language_server/providers/hover/docs.ex

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ defmodule ElixirLS.LanguageServer.Providers.Hover.Docs do
1717
alias ElixirSense.Core.State
1818
alias ElixirSense.Core.SurroundContext
1919
alias ElixirSense.Core.State.ModFunInfo
20-
alias ElixirSense.Core.State.VarInfo
2120
alias ElixirSense.Core.TypeInfo
2221
alias ElixirSense.Core.Parser
2322

@@ -83,7 +82,6 @@ defmodule ElixirLS.LanguageServer.Providers.Hover.Docs do
8382

8483
env =
8584
Metadata.get_cursor_env(metadata, {line, column}, {begin_pos, end_pos})
86-
|> Metadata.add_scope_vars(metadata, {line, column})
8785

8886
case all(context, env, metadata) do
8987
[] ->
@@ -104,8 +102,7 @@ defmodule ElixirLS.LanguageServer.Providers.Hover.Docs do
104102
defp all(
105103
context,
106104
%State.Env{
107-
module: module,
108-
vars: vars
105+
module: module
109106
} = env,
110107
metadata
111108
) do
@@ -136,15 +133,7 @@ defmodule ElixirLS.LanguageServer.Providers.Hover.Docs do
136133
}
137134

138135
{:variable, variable, version} ->
139-
{line, column} = context.begin
140-
141-
var_info =
142-
vars
143-
|> Enum.find(fn
144-
%VarInfo{} = info ->
145-
info.name == variable and (info.version == version or version == :any) and
146-
{line, column} in info.positions
147-
end)
136+
var_info = Metadata.find_var(metadata, variable, version, context.begin)
148137

149138
if var_info != nil do
150139
%{

apps/language_server/lib/language_server/providers/references/locator.ex

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@ defmodule ElixirLS.LanguageServer.Providers.References.Locator do
2424
:none ->
2525
[]
2626

27-
%{
28-
begin: {begin_line, begin_col}
29-
} = context ->
27+
context ->
3028
metadata =
3129
Keyword.get_lazy(options, :metadata, fn ->
3230
Parser.parse_string(code, true, true, {line, column})
@@ -40,34 +38,13 @@ defmodule ElixirLS.LanguageServer.Providers.References.Locator do
4038
module: module
4139
} =
4240
Metadata.get_cursor_env(metadata, {line, column}, {context.begin, context.end})
43-
|> Metadata.add_scope_vars(metadata, {line, column})
4441

4542
# find last env of current module
4643
attributes = get_attributes(metadata, module)
4744

48-
# one line can contain variables from many scopes
49-
# if the cursor is over variable take variables from the scope as it will
50-
# be more correct than the env scope
51-
vars =
52-
case Enum.find(env.vars, fn %VarInfo{positions: positions} ->
53-
{begin_line, begin_col} in positions
54-
end) do
55-
%VarInfo{scope_id: scope_id} ->
56-
# in (h|l)?eex templates vars_info_per_scope_id[scope_id] is nil
57-
if metadata.vars_info_per_scope_id[scope_id] do
58-
metadata.vars_info_per_scope_id[scope_id]
59-
else
60-
[]
61-
end
62-
63-
nil ->
64-
[]
65-
end
66-
6745
find(
6846
context,
6947
env,
70-
vars,
7148
attributes,
7249
metadata,
7350
trace
@@ -101,7 +78,6 @@ defmodule ElixirLS.LanguageServer.Providers.References.Locator do
10178
aliases: aliases,
10279
module: module
10380
} = env,
104-
vars,
10581
attributes,
10682
%Metadata{
10783
mods_funs_to_positions: mods_funs,
@@ -196,15 +172,7 @@ defmodule ElixirLS.LanguageServer.Providers.References.Locator do
196172
[]
197173

198174
{:variable, variable, version} ->
199-
{line, column} = context.begin
200-
201-
var_info =
202-
Enum.find_value(vars, fn {{_name, _version}, %VarInfo{} = info} ->
203-
if info.name == variable and (info.version == version or version == :any) and
204-
{line, column} in info.positions do
205-
info
206-
end
207-
end)
175+
var_info = Metadata.find_var(metadata, variable, version, context.begin)
208176

209177
if var_info != nil do
210178
%VarInfo{positions: positions} = var_info

0 commit comments

Comments
 (0)