Skip to content

Commit 7b3344c

Browse files
oo6lukaszsamson
andauthored
Remove redundant whitespace from symbol name (#1052)
* Remove redundant whitespace from symbol name * Apply suggestions from code review make regexes unicode aware --------- Co-authored-by: Łukasz Samson <lukaszsamson@gmail.com>
1 parent e86c4de commit 7b3344c

File tree

2 files changed

+79
-7
lines changed

2 files changed

+79
-7
lines changed

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

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,10 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbols do
187187

188188
type_name =
189189
type_name
190-
|> String.replace("\n", "")
190+
|> String.replace(~r/,*\n\s*/u, fn
191+
"," <> _ -> ", "
192+
_ -> ""
193+
end)
191194

192195
type = if type_kind in [:type, :typep, :opaque], do: :class, else: :event
193196

@@ -220,7 +223,12 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbols do
220223
{defname, location, [{:when, _, [{_, head_location, _} = fn_head, _]} | _]}
221224
)
222225
when defname in @defs do
223-
name = Macro.to_string(fn_head) |> String.replace("\n", "")
226+
name =
227+
Macro.to_string(fn_head)
228+
|> String.replace(~r/,*\n\s*/u, fn
229+
"," <> _ -> ", "
230+
_ -> ""
231+
end)
224232

225233
%Info{
226234
type: if(defname in @macro_defs, do: :constant, else: :function),
@@ -235,7 +243,12 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbols do
235243
# Function, macro, delegate
236244
defp extract_symbol(_current_module, {defname, location, [{_, head_location, _} = fn_head | _]})
237245
when defname in @defs do
238-
name = Macro.to_string(fn_head) |> String.replace("\n", "")
246+
name =
247+
Macro.to_string(fn_head)
248+
|> String.replace(~r/,*\n\s*/u, fn
249+
"," <> _ -> ", "
250+
_ -> ""
251+
end)
239252

240253
%Info{
241254
type: if(defname in @macro_defs, do: :constant, else: :function),

apps/language_server/test/providers/document_symbols_test.exs

Lines changed: 63 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,17 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbolsTest do
4141
def fun_multiple_when(_other) do
4242
:something_else
4343
end
44+
def fun_multiline_args(
45+
foo,
46+
bar
47+
)
48+
when is_atom(foo),
49+
do: foo
50+
def fun_multiline_args(
51+
foo,
52+
bar
53+
),
54+
do: bar
4455
end
4556
]
4657

@@ -196,12 +207,22 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbolsTest do
196207
"end" => %{"character" => 37, "line" => 31},
197208
"start" => %{"character" => 12, "line" => 31}
198209
}
210+
},
211+
%Protocol.DocumentSymbol{
212+
children: [],
213+
kind: 12,
214+
name: "def fun_multiline_args(foo, bar)"
215+
},
216+
%Protocol.DocumentSymbol{
217+
children: [],
218+
kind: 12,
219+
name: "def fun_multiline_args(foo, bar)"
199220
}
200221
],
201222
kind: 2,
202223
name: "MyModule",
203224
range: %{
204-
"end" => %{"character" => 9, "line" => 34},
225+
"end" => %{"character" => 9, "line" => 45},
205226
"start" => %{"character" => 6, "line" => 1}
206227
},
207228
selectionRange: %{
@@ -238,6 +259,17 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbolsTest do
238259
after
239260
:ok
240261
end
262+
def fun_multiline_args(
263+
foo,
264+
bar
265+
)
266+
when is_atom(foo),
267+
do: foo
268+
def fun_multiline_args(
269+
foo,
270+
bar
271+
),
272+
do: bar
241273
end
242274
]
243275

@@ -250,7 +282,7 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbolsTest do
250282
kind: 2,
251283
location: %{
252284
range: %{
253-
"end" => %{"character" => 9, "line" => 24},
285+
"end" => %{"character" => 9, "line" => 35},
254286
"start" => %{"character" => 6, "line" => 1}
255287
}
256288
}
@@ -344,6 +376,16 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbolsTest do
344376
}
345377
},
346378
containerName: "MyModule"
379+
},
380+
%Protocol.SymbolInformation{
381+
kind: 12,
382+
name: "def fun_multiline_args(foo, bar)",
383+
containerName: "MyModule"
384+
},
385+
%Protocol.SymbolInformation{
386+
kind: 12,
387+
name: "def fun_multiline_args(foo, bar)",
388+
containerName: "MyModule"
347389
}
348390
]} = DocumentSymbols.symbols(uri, parser_context, false)
349391
end
@@ -1215,6 +1257,10 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbolsTest do
12151257
@type my_with_args_when(key, value) :: [{key, value}] when value: integer
12161258
@type abc
12171259
@type
1260+
@type my_with_multiline_args(
1261+
key,
1262+
value
1263+
) :: [{key, value}]
12181264
end
12191265
"""
12201266

@@ -1271,6 +1317,11 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbolsTest do
12711317
children: [],
12721318
kind: 22,
12731319
name: "@type"
1320+
},
1321+
%Protocol.DocumentSymbol{
1322+
children: [],
1323+
kind: 5,
1324+
name: "@type my_with_multiline_args(key, value)"
12741325
}
12751326
],
12761327
kind: 2,
@@ -1292,6 +1343,10 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbolsTest do
12921343
@type my_with_args_when(key, value) :: [{key, value}] when value: integer
12931344
@type abc
12941345
@type
1346+
@type my_with_multiline_args(
1347+
key,
1348+
value
1349+
) :: [{key, value}]
12951350
end
12961351
"""
12971352

@@ -1348,6 +1403,11 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbolsTest do
13481403
kind: 22,
13491404
name: "@type",
13501405
containerName: "MyModule"
1406+
},
1407+
%Protocol.SymbolInformation{
1408+
kind: 5,
1409+
name: "@type my_with_multiline_args(key, value)",
1410+
containerName: "MyModule"
13511411
}
13521412
]} = DocumentSymbols.symbols(uri, parser_context, false)
13531413
end
@@ -2556,8 +2616,7 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbolsTest do
25562616

25572617
parser_context = ParserContextBuilder.from_string(text)
25582618

2559-
assert {:ok, []} =
2560-
DocumentSymbols.symbols(uri, parser_context, true)
2619+
assert {:ok, []} = DocumentSymbols.symbols(uri, parser_context, true)
25612620
end
25622621

25632622
test "returns def and defp as a prefix" do

0 commit comments

Comments
 (0)