Skip to content

2024-11-07

Compare
Choose a tag to compare
@robertoaloi robertoaloi released this 07 Nov 15:33
· 203 commits to main since this release

πŸš€ Highlights

[BREAKING CHANGE] Native rebar3 Support

ELP does not rely any longer on the build_info rebar3 plugin, whose functionality has been integrated in rebar3 directly. This means that, to auto-discover rebar3 projects, ELP now requires rebar3 3.24.0 version or higher. For more information please refer to the docs.

Support for EEP 59 Documentation Attributes

ELP now understands Erlang documentation in Markdown format. The documentation will be automatically available on hover and during auto-completion for both OTP libraries and project files.

Improved Unused Record Field Name Linter

The linter was very noisy when defining new records. We now restrict the warning to the record field name and not to the whole definition (i.e. its eventual type and default value). We also silent the linter if the record as a whole is unused.

Quick-fix: export a private function

You can now export a private function with a single click (or via a keyboard shortcut).

Linter: Tuple-matching on records

Matching on the internal, tuple, representation of a record is usually a bad smell. A new linter can now detect those occurrences and raise a warning. See W0027 for more details and examples.

Linter: Fully Qualified Calls to Un-exported Functions

Ever tried to call a non-exported function from a different module? ELP can detect these instances natively, so you don't have to rely on the slower XRef. It can even auto-fix it for you. See W0026 for details.

New, improved eqWAlizer

The extension includes a new version of eqWAlizer which, in addition to various fixes and improvements, enables additional type-checking of overloaded specs.

Semantic highlight for dynamic() variables

When type information are available, highlights variables with EqWAlizer dynamic() type in bold, for easier identification. The feature is disabled by default and can be enabled via a setting.

New Tree Sitter Version

  • Bump tree-sitter to 0.23.0
  • Bump tree-sitter-erlang to 0.9.0

𝌑 Full Changelog

4742b63 Bump VS Code extension to 0.31.0 (Roberto Aloi)
b3fa428 clean up: overloadedSpecDomainCheck is always on (Ilya Klyuchnikov)
8e57923 fix test config (Ilya Klyuchnikov)
a593f94 Do not report unused_record_field warnings if whole record is unused (Roberto Aloi)
a085eb0 Restrict range of unused_record_field diagnostic to name only (Roberto Aloi)
f8ed5c5 Add support for EEP 059 documentation (OTP 27) (Roberto Aloi)
1b2ce16 Better map update with union of keys (Victor Lanvin)
62c4832 a test case for maps (Ilya Klyuchnikov)
84fb28a maps:put/3 <-> #M{K => V} (Ilya Klyuchnikov)
a098b9d a test for maps:put/3 (Ilya Klyuchnikov)
86b4f7a Back out "BE: Switch to using a struct for eqwalizer include generated" (Alan Zimmerman)
0001512 Back out "Add include_tests to the EqwalizerIncludes struct" (Alan Zimmerman)
6e21099 Back out "Turn on eqwalizer in the IDE for tests" (Alan Zimmerman)
eb8f59b Turn on eqwalizer in the IDE for tests (Alan Zimmerman)
71b5864 Add include_tests to the EqwalizerIncludes struct (Alan Zimmerman)
11b5d28 BE: Switch to using a struct for eqwalizer include generated (Alan Zimmerman)
82b2224 make invalid record dynamic instead of removing it from stub (Ilya Klyuchnikov)
cd137e0 tricky test (Ilya Klyuchnikov)
7b46e09 Enable type diagnostics for generated files in the IDE (Alan Zimmerman)
a18260c Enable types on hover for generated files (Alan Zimmerman)
9b7cc8c BE: Introduce IncludeGenerated enum instead of bool for eqwalizer calls (Alan Zimmerman)
19ae4df Fix broken CI (Alan Zimmerman)
4409040 Add a GK to control the semantic highlighting of dynamic() (Alan Zimmerman)
db7145c Clarify map type approximation in errors (Victor Lanvin)
ff72ccb Add expression simplification for constant boolean values (Alan Zimmerman)
07de467 6/n semantic token types: Bring in 'type_dynamic' semantic token tag (Alan Zimmerman)
a914e07 5/n semantic token types: refresh semantic tokens when they change (Alan Zimmerman)
2435b45 4/n semantic token types: Use eqwalizer types for highlighting (Alan Zimmerman)
3dd2dcf 3/n semantic token types: Put eqwalizer types into server snapshot (Alan Zimmerman)
249c688 2/n semantic token types: initial POC highlighting dynamic type (Alan Zimmerman)
060a381 1/n semantic token types: Add eqwalizer type info function (Alan Zimmerman)
bb7a8ed BE: check annotations for reported diagnostic when checking a specific fix (Alan Zimmerman)
e8df6ce ElabApplyCustom and type collection (Ilya Klyuchnikov)
73ff3c9 a flag to report dynamic lambdas (Ilya Klyuchnikov)
d6e55d2 eqwalizer_tests: options - run with fault tolerance (Ilya Klyuchnikov)
d14ad96 Provide db.file_app_data(FileId) (Alan Zimmerman)
6941c1a Add IncludeFileIndex for resolving includes from paths (Alan Zimmerman)
410091a Bump mermaid and http-proxy-middleware dependencies (Roberto Aloi)
192b2c7 2/2 Remove redundant wid:make/1 call (Alan Zimmerman)
bcde430 1/2: Basic parameter rename WHO -> WID (Alan Zimmerman)
53dda0f BE: create ide_assists::helpers::extend_delete_range (Alan Zimmerman)
c331ee2 BE: fold: introduce ParentId::TopLevel (Alan Zimmerman)
e97e11a BE: Move fold_function_clause_body onto FunctionClauseBody::fold() (Alan Zimmerman)
f7cf6ea BE: add FunctionDefId to SpecDef (Alan Zimmerman)
b07bce7 BE: introduce fold ctx in_arg() (Alan Zimmerman)
97c0632 Update rebar3 integration docs (Roberto Aloi)
6f9f23c Check minimum rebar3 version (Roberto Aloi)
74063b7 BE: rename API call for hir::Var (Alan Zimmerman)
8e452fe BE: improve internal rename API (Alan Zimmerman)
539e928 Switch ELP from build_info to manifest plugin (Roberto Aloi)
95cff0c BE: Rename MacroStrategy::VisibleMacros to Expand (Alan Zimmerman)
29752a4 BE: Introduce tree_print for SpecBody (Alan Zimmerman)
c25ab62 improving current handling of overloaded specs (Ilya Klyuchnikov)
0b34125 Bump tree-sitter-erlang dependency to 0.9.0 (Alan Zimmerman)
7aecdaa Bump version to 0.9.0 for imminent release (Alan Zimmerman)
c743274 tree-sitter 0.23.0 (Matt Whitworth)
b1d8966 Introduce record tuple mismatch diagnostic (Alan Zimmerman)
59d0760 Complex maps snapshot tests (Victor Lanvin)
f0baf5e Rework map type (Victor Lanvin)
0ae9b6d Remove experimental flag from atoms_exhaustion linter (Roberto Aloi)
2598335 Lower atoms_exhaustion and unsafe_integer_conversion severities to WeakWarning (Roberto Aloi)
cb29661 Make Dialyzer command support the progress bar (Tom Davies)
d5e1758 Add docs for new warning W0026 (Balaji S)
191e147 Add fix to export private function (Balaji S)
5dbe587 Add diagnostic for private function calls from other modules (Balaji S)
bcd8a60 Do not produce STUB section in the Erlang Service linter (Roberto Aloi)
c06351a Filter stub forms from AST instead of relying on the STUB section (Roberto Aloi)
15df6b9 Filter away EEP059 doc attribute from AST and STUB (Roberto Aloi)
eb8a3e2 BE: get rid of new rust 1.81.0 warning (Alan Zimmerman)
b794a65 eqWAlizer: more tests (Ilya Klyuchnikov)
da9cb29 BE: Put DiagnosticsConfig into server Snapshot (Alan Zimmerman)
6549364 BE: Split ad hoc diagnostics out from DiagnosticsConfig (Alan Zimmerman)
7473e1d W0025: cope with expression in parens (Alan Zimmerman)
6659a7c 5/n: BE: Simplify FoldBody (Alan Zimmerman)
1ba0e9b 4/n: Capture parens for CallTarget::Remote (Alan Zimmerman)
4c1a51b 3/n: Introduce hir::Expr::Parens (Alan Zimmerman)
b127495 2/n: Introduce VisibleParens in Strategy (Alan Zimmerman)
0116abb 1/n: Turn fold Strategy into a struct containing an enum (Alan Zimmerman)