Skip to content

Commit 4a7c099

Browse files
Fix multiple cases of invalid windows line endings handling (#305)
* Fix multiple cases of invalid windows line endings handling * Update apps/language_server/lib/language_server/providers/formatting.ex Co-authored-by: Jason Axelson <axelson@users.noreply.github.com> * Update apps/language_server/lib/language_server/diagnostics.ex Co-authored-by: Jason Axelson <axelson@users.noreply.github.com> * Update apps/language_server/lib/language_server/providers/execute_command.ex Co-authored-by: Jason Axelson <axelson@users.noreply.github.com> * add alias Co-authored-by: Jason Axelson <axelson@users.noreply.github.com>
1 parent e7f7c88 commit 4a7c099

File tree

8 files changed

+14
-8
lines changed

8 files changed

+14
-8
lines changed

apps/elixir_ls_utils/test/support/test_utils.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ defmodule ElixirLS.Utils.TestUtils do
33

44
def assert_has_cursor_char(text, line, character) do
55
char =
6-
String.split(text, "\n")
6+
String.split(text, ["\r\n", "\r", "\n"])
77
|> Enum.at(line + 1)
88
|> String.graphemes()
99
|> Enum.at(character)

apps/language_server/lib/language_server/diagnostics.ex

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
defmodule ElixirLS.LanguageServer.Diagnostics do
2+
alias ElixirLS.LanguageServer.SourceFile
3+
24
def normalize(diagnostics, root_path) do
35
for diagnostic <- diagnostics do
46
{type, file, line, description, stacktrace} =
@@ -21,7 +23,7 @@ defmodule ElixirLS.LanguageServer.Diagnostics do
2123
{reversed_stacktrace, reversed_description} =
2224
diagnostic_message
2325
|> String.trim_trailing()
24-
|> String.split("\n")
26+
|> SourceFile.lines()
2527
|> Enum.reverse()
2628
|> Enum.split_while(&is_stack?/1)
2729

apps/language_server/lib/language_server/dialyzer/manifest.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ defmodule ElixirLS.LanguageServer.Dialyzer.Manifest do
152152

153153
try do
154154
{:ok, contents} = File.read(vsn_file)
155-
String.split(contents, "\n", trim: true)
155+
String.split(contents, ["\r\n", "\r", "\n"], trim: true)
156156
else
157157
[full] ->
158158
full

apps/language_server/lib/language_server/erlang_source_file.ex

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
defmodule ElixirLS.LanguageServer.ErlangSourceFile do
2+
alias ElixirLS.LanguageServer.SourceFile
3+
24
def get_beam_file(module, :preloaded) do
35
case :code.get_object_code(module) do
46
{_module, _binary, beam_file} -> beam_file
@@ -35,7 +37,7 @@ defmodule ElixirLS.LanguageServer.ErlangSourceFile do
3537
index =
3638
file
3739
|> File.read!()
38-
|> String.split(["\n", "\r\n"])
40+
|> SourceFile.lines()
3941
|> Enum.find_index(&String.match?(&1, regex))
4042

4143
case index do

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ defmodule ElixirLS.LanguageServer.Providers.ExecuteCommand do
5555

5656
Code.format_string!("@spec #{spec}", line_length: target_line_length)
5757
|> IO.iodata_to_binary()
58-
|> String.split("\n")
58+
|> SourceFile.lines()
5959
|> Enum.map(&(indentation <> &1))
6060
|> Enum.join("\n")
6161
|> Kernel.<>("\n")

apps/language_server/lib/language_server/providers/formatting.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ defmodule ElixirLS.LanguageServer.Providers.Formatting do
7171

7272
defp advance_pos({line, col}, str) do
7373
Enum.reduce(String.split(str, "", trim: true), {line, col}, fn char, {line, col} ->
74-
if char == "\n" do
74+
if char in ["\n", "\r"] do
7575
{line + 1, 0}
7676
else
7777
# LSP contentChanges positions are based on UTF-16 string representation

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
defmodule ElixirLS.LanguageServer.Providers.Hover do
2+
alias ElixirLS.LanguageServer.SourceFile
3+
24
@moduledoc """
35
Hover provider utilizing Elixir Sense
46
"""
@@ -10,7 +12,7 @@ defmodule ElixirLS.LanguageServer.Providers.Hover do
1012
nil
1113

1214
%{subject: subject, docs: docs} ->
13-
line_text = Enum.at(String.split(text, "\n"), line)
15+
line_text = Enum.at(SourceFile.lines(text), line)
1416
range = highlight_range(line_text, line, character, subject)
1517

1618
%{"contents" => contents(docs), "range" => range}

mix.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
%{
22
"dialyxir": {:hex, :dialyxir, "1.0.0", "6a1fa629f7881a9f5aaf3a78f094b2a51a0357c843871b8bc98824e7342d00a5", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "aeb06588145fac14ca08d8061a142d52753dbc2cf7f0d00fc1013f53f8654654"},
33
"docsh": {:hex, :docsh, "0.7.2", "f893d5317a0e14269dd7fe79cf95fb6b9ba23513da0480ec6e77c73221cae4f2", [:rebar3], [{:providers, "1.8.1", [hex: :providers, repo: "hexpm", optional: false]}], "hexpm", "4e7db461bb07540d2bc3d366b8513f0197712d0495bb85744f367d3815076134"},
4-
"elixir_sense": {:git, "https://github.com/elixir-lsp/elixir_sense.git", "68dd83576af3ed67c1bc4536ff1673247496f01a", []},
4+
"elixir_sense": {:git, "https://github.com/elixir-lsp/elixir_sense.git", "b307c0024178fbd1842100f23f81cae15e7e1fb1", []},
55
"erl2ex": {:git, "https://github.com/dazuma/erl2ex.git", "244c2d9ed5805ef4855a491d8616b8842fef7ca4", []},
66
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
77
"forms": {:hex, :forms, "0.0.1", "45f3b10b6f859f95f2c2c1a1de244d63855296d55ed8e93eb0dd116b3e86c4a6", [:rebar3], [], "hexpm", "530f63ed8ed5a171f744fc75bd69cb2e36496899d19dbef48101b4636b795868"},

0 commit comments

Comments
 (0)