How to find function clause column information?

@josevalim currently I am able to acquire the line for a function clause definition using the :on_module tracer event, similar to the following code

  def trace({:on_module, bytecode, _}, env) do
    defs = Module.definitions_in(env.module)

    defs =
      for {name, arity} = _def <- defs do
        {name, Module.get_definition(env.module, {name, arity})}
      end
  
    :ok
  end

When I eventually loop through each function and its clauses, I get a structure that looks like this:

{[line: 943], ["defmodule"], [],
 {{:., [line: 943, column: 80], [GenLSP.Enumerations.SymbolKind, :module]},
  [closing: [line: 943, column: 88], line: 943, column: 81], []}}

which corresponds to the following code snippet:

  defp elixir_kind_to_lsp_kind("defmodule"), do: GenLSP.Enumerations.SymbolKind.module()

As you can see here, the metadata includes the line [line: 943], but not the column. I currently use columns: true for the compiler options, but the column doesn’t seem to show up here.

Would you know if I’m doing something wrong here?

Please open up an issue!

Done! Column info in Module.get_definition/2 · Issue #13029 · elixir-lang/elixir · GitHub