Problem with 'use' Macro in VSCode + ElixirLS

I use Visual Studio Code with the ElixirLS Fork extension.

I am trying out Elixir/Phoenix and when i call the ‘use’ Macro for something like

defmodule TestWeb.MyController
    use TestWeb :controller
...

or

defmodule Test.mySchema
    use Ecto.Schema
...

there is no Autocomplete or Documentation available from the Modules that are imported or aliased in the __using__/1 macro. The Code does work and there are no Errors or Warnings from ElixirLS or Dialyzer.

Importing/Aliasing the needed Modules directly, like

defmodule TestWeb.MyController
    use TestWeb :controller

    import Phoenix.Controller
    import Plug.Conn
    import TestWeb.Gettext
    alias TestWeb.Router.Helpers, as: Routes
...

does provide autocomplete and Documentation in VSCode.
So is ElixirLS not evaluating the __using__ macro for autocomplete? Or is maybe something wrong with my Setup?
And is there a way to make autocomplete work without importing/aliasing the Modules directly?

I have never realized an issue with that, as modules are compiled to get their “context”.

Could you please tell us what version of the LS is used?

Recent version of the LS do print this information in the ElixirLS ouptut pane.

It prints language_server 0.3.2 in the output pane.

And on startup it also prints the Elixir/Erlang version if that helps

Started ElixirLS Fork v0.3.2
Elixir version: "1.10.2 (compiled with Erlang/OTP 21)"
Erlang version: "22"

@axelson do you know about any problems like this?

Well that isn’t expected. Are you getting any errors in the ElixirLS Fork output? Also can you try with elixir 1.10.2-otp22 (instead of elixir 1.10.2-otp21).

After installing Elixir 1.10.2-otp22 the log looks like this:

Started ElixirLS Fork v0.3.2
Elixir version: "1.10.2 (compiled with Erlang/OTP 22)"
Erlang version: "22"

but this also doesn’t work.
And i don’t see any errors in the ElixirLS Output.
I also tried a clean install of VSCode, with default Settings and ElixirLS Fork as the only plugin, but with no success.

Have you already tried removing the .elixir_ls directory and restarting your editor? Also what operating system are you on and are you using docker?

Yes, I tried removing the folder and restarting the Editor. I’m on Ubuntu 18.04 LTS, but I also tried it on Windows 10 with the same result.
No, I do not use Docker.

Hmm, ok. Can you post or create a project that suffers from the issue? I haven’t been able to reproduce it on my projects.

I do not have autocompletion/Documentation on any imports/alias from ‘use’ macros.
I noticed it while trying out Phoenix, after creating a new Phoenix (1.4.16) Project with mix phx.new ..
I also made a simple example, created with mix new ., with only 2 .ex files in /lib and without any dependencies here: https://github.com/JanKneiphof/autocomplete_problem

1 Like

Thanks for the reproduction. I’m able to reproduce on my machines. Now just need to dig in.

2 Likes

FYI, we’re tracking this in #193:

Unfortunately I’m not sure there is an easy fix.

1 Like

Nice, thank you for looking into it.
So now i tried it out with Elixir 1.9.4 and it does work.