Skip to content

2025-10-13

Choose a tag to compare

@robertoaloi robertoaloi released this 13 Oct 15:01
· 516 commits to main since this release

Highlights

Include dynamic calls when finding references

When using features such as find references, rename or call hierarchy, now common dynamic calls such as rpc:call/X or erlang:spawn/Xare also included. The list of supported dynamic calls is specified here.

Allow extract variable inside a macro call

You can now use the variable extraction function inside macro calls.

Reload project if a buck2 generated input changes

When using buck2 as a build tool, certain files could be dynamically generated. If an input used to generate files is modified, the project is reloaded, ensuring more accurate go to definition and other IDE features.

Allow excluding exclusion list for undefined_function linter via config

In certain cases (e.g. in presence of parse transformation) certain functions may incorrectly be recognized as *undefined& by the language server. It's now possible to exclude functions from the check via config. This allows keeping the signal enabled, while avoiding unnecessary noise. You can exclude entire modules or sets of functions by specifying in the .elp_lint.toml file:

[linters.undefined_function]
exclude = [
    # All functions from the module
    {type = "M", module = "my_module"},
    # All functions named `my_function` in module `my_module`, independently from arity
    {type = "MF", module = "my_module", function = "my_function"},
    # The `my_module:my_function/3` function only
    {type = "MFA", mfa = "my_module:my_function/3"},
]

Add new option to mark Erlang Service warnings as errors

If you want compiler warnings to be treated as errors in the IDE, you can now enable this behaviour via the .elp_lint.toml config file:

[erlang_service]
warnings_as_errors = true

Other improvements

  • Add support for --report-system-stats to lint and parse-elp commands
  • Only register dynamic capabilities once
  • Bump tree-sitter-erlang version to 0.15
  • Various bug fixes and performance improvements

Full Changelog

5937388 fix: including based on an application path requires include_lib (#118) (Tristan Sloughter)
0a1f82c Introduce simple_snapshot_output_contains helper, fix failing testcase (Roberto Aloi)
55a4aa6 Fix OSS compilation warnings (Roberto Aloi)
2b658e2 Extend memory analysis to lint command (Roberto Aloi)
747af17 Bump OSS VS Code extension for release (0.41.0 -> 0.42.0) (Roberto Aloi)
bba1512 Point Cargo.toml to tree-sitter-erlang crate (Roberto Aloi)
5471c71 Include per-query memory info when using --report-system-stats (Roberto Aloi)
bde2492 server: only register dynamic capabilities once (Alan Zimmerman)
e9c2cd4 Refactor extraction of exdoc links (Roberto Aloi)
aabdad4 Remove warnings due to ShipIt (Roberto Aloi)
4b44e20 Allow extract variable inside a macro call (Alan Zimmerman)
66612ad Remove obsolete Haskell E2E tests for the Erlang extension (Roberto Aloi)
293a2ac Update loader progress on percent change only (Alan Zimmerman)
98bba7a Fixed name of EQWALIZER_DIR variable (Roberto Aloi)
312319b Remove old arc diagnostics logic (Victor Lanvin)
5e1154d Cleanup references (Roberto Aloi)
47e7759 Fix some issues in WhatsApp ELP Glean (Yongchao Lyu)
1bbfa6c Improve linters documentation (Roberto Aloi)
742281a Bump tree-sitter-erlang version to 0.15 (Alan Zimmerman)
31e798f send explicit telemetry to track the time from the server starting to operational (Alan Zimmerman)
8ddb16f Add testcase showcasing the issue with dynamic calls from macros (Roberto Aloi)
3e25ccb Add a fact about the module info (Yongchao Lyu)
84ee71d Include dynamic calls when finding references (Roberto Aloi)
cb9f719 Use a FxHashMap to store the patterns of interest for dynamic calls and a macro to reduce verbosity (Roberto Aloi)
64fb3fb Include the most common 'erpc' functions when searching for dynamic calls (Roberto Aloi)
95dfeb4 Include some of the 'erlang' functions when searching for dynamic calls (Roberto Aloi)
3177337 Find references for rpc dynamic calls (Roberto Aloi)
bb49a57 Generalize lookup for dynamic calls (Roberto Aloi)
8805345 BE: Add oncalls metadata to elp_development LLMs rules (Alan Zimmerman)
1eb41cc Add support for docPath (Roberto Aloi)
57f6788 Pin 2022 version for Windows (Roberto Aloi)
dac0ab0 Fix broken VSCodeErlangOpenDocs E2E test (Roberto Aloi)
06fa2d0 Explicitly include rustfmt during setup (Roberto Aloi)
7bb16e4 Fix flaky tests using buck cell info (Alan Zimmerman)
06fc13b Add build-oss script (Roberto Aloi)
b4e24a8 Avoid compilation warning (Roberto Aloi)
ec97959 3/n: Reload project if a buck2 generated input changes (Alan Zimmerman)
f8c8cc5 2/n: Include watches for buck2 generated inputs (Alan Zimmerman)
6afb92e 1/n: Add field to track generation source file inputs for buck2 generated targets (Alan Zimmerman)
e27ffab Use buck2 cell info to resolve target directories (Alan Zimmerman)
14ae7af Add --report-system-stats to parse-elp command (Roberto Aloi)
3bff340 Convert wid_tuple linter to use trait (Roberto Aloi)
853d37f Do not attempt to import MetaOnly resources in OSS build (Roberto Aloi)
9323230 Add telemetry for textDocument/reference timing (Alan Zimmerman)
d9f02ee Split token identification and documentation extraction (Roberto Aloi)
e6b0c60 Track destination in telemetry for go-to-definition (Roberto Aloi)
03c28b4 Convert unused_macro linter to use new GenericLinter trait (Roberto Aloi)
63a2804 BE: Include a formatted start and end time stamp in telemetry (Alan Zimmerman)
91b432f BE: Provide explicit state change telemetry (Alan Zimmerman)
7f67904 BE: Use a vec for load telemetry (Alan Zimmerman)
f7e9bf9 Use local def_map in unused_macro linter (Roberto Aloi)
b32bd85 Convert cross_node_eval linter to use trait (Roberto Aloi)
ea45ecf BE: always check stderr in elp lint fix tests (Alan Zimmerman)
686d42f Add new option to mark Erlang Service warnings as errors (Roberto Aloi)
a849eaf buck2: Remove BuckTargetOrigin::Prelude (Alan Zimmerman)
cedda28 buck2: do not provide deps_targets to elp.bxl (Alan Zimmerman)
ee88849 Only show hover link to docs if the function has docs (Roberto Aloi)
1185d99 Specify exclusion list for undefined_function linter via config (Roberto Aloi)
314dbd6 Allow excluding function call matches via config (Roberto Aloi)
8d82b30 Allow function call linters to specify a list of matches to exclude from processing (Roberto Aloi)
a42d118 Convert undefined_function linter to use trait (Roberto Aloi)
545452c Provide an example of a poor translation from catch to try ... catch (Roberto Aloi)
679ed1f Return a &'static str for descriptions (Roberto Aloi)
39da159 Avoid passing sema and file_id since they are already part of the context (Roberto Aloi)
2e30b64 Rename is_match_valid into check_match (Roberto Aloi)
0f39e52 Convert no_forgets_api linter to use the Linter trait (Roberto Aloi)
92a009d Make tasks.json work for internal and OSS usage (Alan Zimmerman)%