Skip to content

Commit b8c9d7c

Browse files
committed
fix completions crash when hint would generate invalid regex
1 parent ccbac09 commit b8c9d7c

File tree

1 file changed

+15
-1
lines changed
  • apps/language_server/lib/language_server/providers/plugins

1 file changed

+15
-1
lines changed

apps/language_server/lib/language_server/providers/plugins/ecto.ex

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ defmodule ElixirLS.LanguageServer.Plugins.Ecto do
66
alias ElixirLS.LanguageServer.Plugins.Ecto.Query
77
alias ElixirLS.LanguageServer.Plugins.Ecto.Schema
88
alias ElixirLS.LanguageServer.Plugins.Ecto.Types
9+
require Logger
910

1011
@behaviour ElixirLS.LanguageServer.Plugin
1112
use ElixirLS.LanguageServer.Providers.Completion.GenericReducer
@@ -131,6 +132,19 @@ defmodule ElixirLS.LanguageServer.Plugins.Ecto do
131132
end
132133

133134
defp after_in?(hint, text_before) do
134-
Regex.match?(~r/\s+in\s+#{Regex.escape(hint)}$/u, text_before)
135+
try do
136+
Regex.match?(~r/\s+in\s+#{Regex.escape(hint)}$/u, text_before)
137+
rescue
138+
e in ErlangError ->
139+
# Generating regex from client code is generally unsafe. One way it can fail is
140+
# (ErlangError) Erlang error: :internal_error
141+
# unexpected response code from PCRE engine
142+
143+
Logger.warning(
144+
"Unable to determine if cursor is after `in` in #{inspect(hint)}: #{Exception.format(:error, e, __STACKTRACE__)}"
145+
)
146+
147+
false
148+
end
135149
end
136150
end

0 commit comments

Comments
 (0)