ash-project / spark

Tooling for building DSLs in Elixir
MIT License
127 stars 25 forks source link

Suggestion broken with latest ElixirSense #54

Closed moissela closed 1 year ago

moissela commented 1 year ago

Describe the bug Spark autocomplete suggestion is broken with the latest ElixirSense release.

Expected behavior Inside a resource action, when I type change all worked fine but when I go on with change m expecting manage_relationship suggestion, I've got this error inside the ElixirLS output tab:

** (UndefinedFunctionError) function ElixirSense.Providers.Suggestion.Complete.Env.__struct__/0 is undefined (module ElixirSense.Providers.Suggestion.Complete.Env is not available)
    ElixirSense.Providers.Suggestion.Complete.Env.__struct__()
    (spark 1.1.22) lib/spark/elixir_sense/entity.ex:30: Spark.ElixirSense.Entity.find_spark_behaviour_impls/4
    (spark 1.1.22) lib/spark/elixir_sense/plugin.ex:114: Spark.ElixirSense.Plugin.get_suggestions/4
    (elixir_sense 2.0.0) lib/elixir_sense/providers/suggestion/generic_reducer.ex:41: ElixirSense.Providers.Suggestion.GenericReducer.reduce/6
    (elixir 1.15.4) lib/enum.ex:4830: Enumerable.List.reduce/3
    (elixir 1.15.4) lib/enum.ex:2564: Enum.reduce_while/3
    (elixir_sense 2.0.0) lib/elixir_sense/providers/suggestion.ex:137: ElixirSense.Providers.Suggestion.find/6
    (language_server 0.16.0) lib/language_server/providers/completion.ex:159: ElixirLS.LanguageServer.Providers.Completion.completion/4

First try to fix, here, changing mix.exs to use that commit of my fork's branch and restarting vscode, in the same conditions I get a new error:

** (UndefinedFunctionError) function ElixirSense.Providers.Suggestion.Complete.complete/2 is undefined or private
    (elixir_sense 2.0.0) ElixirSense.Providers.Suggestion.Complete.complete("Ash.Resource.Change.Builtins.m", %ElixirSense.Core.State.Env{imports: [], requires: [], aliases: [], module: nil, module_variants: [], protocol: nil, protocol_variants: nil, vars: [], attributes: [], behaviours: [], scope: nil, scope_id: nil})
    (spark 1.1.23) lib/spark/elixir_sense/entity.ex:29: Spark.ElixirSense.Entity.find_spark_behaviour_impls/4
    (spark 1.1.23) lib/spark/elixir_sense/plugin.ex:114: Spark.ElixirSense.Plugin.get_suggestions/4
    (elixir_sense 2.0.0) lib/elixir_sense/providers/suggestion/generic_reducer.ex:41: ElixirSense.Providers.Suggestion.GenericReducer.reduce/6
    (elixir 1.15.4) lib/enum.ex:4830: Enumerable.List.reduce/3
    (elixir 1.15.4) lib/enum.ex:2564: Enum.reduce_while/3
    (elixir_sense 2.0.0) lib/elixir_sense/providers/suggestion.ex:137: ElixirSense.Providers.Suggestion.find/6
    (language_server 0.16.0) lib/language_server/providers/completion.ex:159: ElixirLS.LanguageServer.Providers.Completion.completion/4

Second round seems to work fine but I'm not sure about passing "fake" values as third and fourth arguments (metadata and cursor_position) of the ElixirSense.Providers.Suggestion.Complete.complete/5.

Runtime