diff --git a/apps/language_server/lib/language_server/dialyzer/success_typings.ex b/apps/language_server/lib/language_server/dialyzer/success_typings.ex index 7e438e685..df7be58e2 100644 --- a/apps/language_server/lib/language_server/dialyzer/success_typings.ex +++ b/apps/language_server/lib/language_server/dialyzer/success_typings.ex @@ -3,23 +3,27 @@ defmodule ElixirLS.LanguageServer.Dialyzer.SuccessTypings do require Logger def suggest_contracts(plt, files) do - {us, results} = :timer.tc(fn -> - modules = - plt - |> :dialyzer_plt.all_modules() - |> :sets.to_list() + {us, results} = + :timer.tc(fn -> + modules = + plt + |> :dialyzer_plt.all_modules() + |> :sets.to_list() + + for mod <- modules, + file = source(mod), + file in files, + docs = ElixirSense.Core.Normalized.Code.get_docs(mod, :docs), + {{^mod, fun, arity} = mfa, success_typing} <- success_typings(plt, mod), + :dialyzer_plt.lookup_contract(plt, mfa) == :none, + {stripped_fun, stripped_arity} = SourceFile.strip_macro_prefix({fun, arity}), + line = SourceFile.function_line(mod, stripped_fun, stripped_arity, docs), + is_integer(line) and line > 0, + do: + {file, line, {mod, stripped_fun, stripped_arity}, success_typing, + stripped_fun != fun} + end) - for mod <- modules, - file = source(mod), - file in files, - docs = ElixirSense.Core.Normalized.Code.get_docs(mod, :docs), - {{^mod, fun, arity} = mfa, success_typing} <- success_typings(plt, mod), - :dialyzer_plt.lookup_contract(plt, mfa) == :none, - {stripped_fun, stripped_arity} = SourceFile.strip_macro_prefix({fun, arity}), - line = SourceFile.function_line(mod, stripped_fun, stripped_arity, docs), - is_integer(line) and line > 0, - do: {file, line, {mod, stripped_fun, stripped_arity}, success_typing, stripped_fun != fun} - end) Logger.info("Success typings computed in #{div(us, 1000)}ms") results end diff --git a/apps/language_server/lib/language_server/parser.ex b/apps/language_server/lib/language_server/parser.ex index 415372039..481e50414 100644 --- a/apps/language_server/lib/language_server/parser.ex +++ b/apps/language_server/lib/language_server/parser.ex @@ -97,6 +97,7 @@ defmodule ElixirLS.LanguageServer.Parser do _other -> ElixirLS.LanguageServer.Server.do_sanity_check() message = Exception.format_exit(reason) + JsonRpc.telemetry( "lsp_server_error", %{ @@ -152,7 +153,7 @@ defmodule ElixirLS.LanguageServer.Parser do when current_version > old_version -> %Context{old_file | source_file: source_file} - %Context{source_file: %SourceFile{version: old_version}} = old_file -> + %Context{} = old_file -> old_file end) diff --git a/apps/language_server/lib/language_server/providers/workspace_symbols.ex b/apps/language_server/lib/language_server/providers/workspace_symbols.ex index c8af97abb..1a7c2e2ec 100644 --- a/apps/language_server/lib/language_server/providers/workspace_symbols.ex +++ b/apps/language_server/lib/language_server/providers/workspace_symbols.ex @@ -421,7 +421,10 @@ defmodule ElixirLS.LanguageServer.Providers.WorkspaceSymbols do |> do_process_chunked(fn chunk -> for {module, path} <- chunk, Code.ensure_loaded?(module), - docs = if(not String.ends_with?(path, ".erl"), do: ElixirSense.Core.Normalized.Code.get_docs(module, :docs)), + docs = + if(not String.ends_with?(path, ".erl"), + do: ElixirSense.Core.Normalized.Code.get_docs(module, :docs) + ), {function, arity} <- module.module_info(:exports) do {function, arity} = SourceFile.strip_macro_prefix({function, arity}) location = find_function_location(module, function, arity, path, docs) @@ -473,7 +476,9 @@ defmodule ElixirLS.LanguageServer.Providers.WorkspaceSymbols do send(self, {:indexing_complete, key, results}) - Logger.info("[ElixirLS WorkspaceSymbols] #{length(results)} #{key} added to index in #{div(us, 1000)}ms") + Logger.info( + "[ElixirLS WorkspaceSymbols] #{length(results)} #{key} added to index in #{div(us, 1000)}ms" + ) end) :ok