|
1 | 1 | # Changelog for Elixir v1.16
|
2 | 2 |
|
3 |
| -## Code snippets in diagnostics |
4 |
| - |
5 |
| -Elixir v1.15 introduced a new compiler diagnostic format and the ability to print multiple error diagnostics per compilation (in addition to multiple warnings). |
6 |
| - |
7 |
| -With Elixir v1.16, we also include code snippets in exceptions and diagnostics raised by the compiler. For example, a syntax error now includes a pointer to where the error happened: |
8 |
| - |
9 |
| -``` |
10 |
| -** (SyntaxError) invalid syntax found on lib/my_app.ex:1:17: |
11 |
| - error: syntax error before: '*' |
12 |
| - │ |
13 |
| - 1 │ [1, 2, 3, 4, 5, *] |
14 |
| - │ ^ |
15 |
| - │ |
16 |
| - └─ lib/my_app.ex:1:17 |
17 |
| -``` |
18 |
| - |
19 |
| -For mismatched delimiters, it now shows both delimiters: |
20 |
| - |
21 |
| -``` |
22 |
| -** (MismatchedDelimiterError) mismatched delimiter found on lib/my_app.ex:1:18: |
23 |
| - error: unexpected token: ) |
24 |
| - │ |
25 |
| - 1 │ [1, 2, 3, 4, 5, 6) |
26 |
| - │ │ └ mismatched closing delimiter (expected "]") |
27 |
| - │ └ unclosed delimiter |
28 |
| - │ |
29 |
| - └─ lib/my_app.ex:1:18 |
30 |
| -``` |
31 |
| - |
32 |
| -Errors and warnings diagnostics also include code snippets. When possible, we will show precise spans, such as on undefined variables: |
33 |
| - |
34 |
| -``` |
35 |
| - error: undefined variable "unknown_var" |
36 |
| - │ |
37 |
| -5 │ a - unknown_var |
38 |
| - │ ^^^^^^^^^^^ |
39 |
| - │ |
40 |
| - └─ lib/sample.ex:5:9: Sample.foo/1 |
41 |
| -``` |
42 |
| - |
43 |
| -Otherwise the whole line is underlined: |
44 |
| - |
45 |
| -``` |
46 |
| -error: function names should start with lowercase characters or underscore, invalid name CamelCase |
47 |
| - │ |
48 |
| -3 │ def CamelCase do |
49 |
| - │ ^^^^^^^^^^^^^^^^ |
50 |
| - │ |
51 |
| - └─ lib/sample.ex:3 |
52 |
| -``` |
53 |
| - |
54 |
| -A huge thank you to Vinícius Muller for working on the new diagnostics. |
55 |
| - |
56 |
| -## Revamped documentation |
57 |
| - |
58 |
| -Elixir's Getting Started guided has been made part of the Elixir repository and incorporated into ExDoc. This was an opportunity to revisit and unify all official guides and references. |
59 |
| - |
60 |
| -We have also incorporated and extended the work on [Understanding Code Smells in Elixir Functional Language](https://github.com/lucasvegi/Elixir-Code-Smells/blob/main/etc/2023-emse-code-smells-elixir.pdf), by Lucas Vegi and Marco Tulio Valente, from [ASERG/DCC/UFMG](http://aserg.labsoft.dcc.ufmg.br/), into the official document in the form of anti-patterns. The anti-patterns are divided into four categories: code-related, design-related, process-related, and meta-programming. Our goal is to give all developers with both positive and negative examples of Elixir code, with context and examples on how to improve their codebases. |
61 |
| - |
62 |
| -Another [ExDoc](https://github.com/elixir-lang/ex_doc) feature we have incorporated in this release is the addition of cheatsheets, starting with [a cheatsheet for the Enum module](https://hexdocs.pm/elixir/main/enum-cheat.html). If you would like to contribute future cheatsheets to Elixir itself, feel free to start a discussion with an issue. |
63 |
| - |
64 |
| -Finally, we have started enriching our documentation with [Mermaid.js](https://mermaid.js.org/) diagrams. You can find examples in the [GenServer](https://hexdocs.pm/elixir/main/GenServer.html) and [Supervisor](https://hexdocs.pm/elixir/main/Supervisor.html) docs. |
65 |
| - |
66 |
| -## v1.16.0-dev |
| 3 | +## v1.17.0-dev |
67 | 4 |
|
68 | 5 | ### 1. Enhancements
|
69 | 6 |
|
70 |
| -#### EEx |
71 |
| - |
72 |
| - * [EEx] Include relative file information in diagnostics |
73 |
| - |
74 |
| -#### Elixir |
75 |
| - |
76 |
| - * [Code] Automatically include columns in parsing options |
77 |
| - * [Code] Introduce `MismatchedDelimiterError` for handling mismatched delimiter exceptions |
78 |
| - * [Code.Fragment] Handle anonymous calls in fragments |
79 |
| - * [Kernel] Suggest module names based on suffix and casing errors when the module does not exist in `UndefinedFunctionError` |
80 |
| - * [Kernel.ParallelCompiler] Introduce `Kernel.ParallelCompiler.pmap/2` to compile multiple additional entries in parallel |
81 |
| - * [Kernel.SpecialForms] Warn if `True`/`False`/`Nil` are used as aliases and there is no such alias |
82 |
| - * [Macro] Add `Macro.compile_apply/4` |
83 |
| - * [Module] Add support for `@nifs` annotation from Erlang/OTP 25 |
84 |
| - * [Module] Add support for missing `@dialyzer` configuration |
85 |
| - * [String] Update to Unicode 15.1.0 |
86 |
| - * [Task] Add `:limit` option to `Task.yield_many/2` |
87 |
| - |
88 |
| -#### Mix |
89 |
| - |
90 |
| - * [mix] Add `MIX_PROFILE` to profile a list of comma separated tasks |
91 |
| - * [mix compile.elixir] Optimize scenario where there are thousands of files in `lib/` and one of them is changed |
92 |
| - * [mix test] Allow testing multiple file:line at once, such as `mix test test/foo_test.exs:13 test/bar_test.exs:27` |
93 |
| - |
94 | 7 | ### 2. Bug fixes
|
95 | 8 |
|
96 |
| -#### Elixir |
97 |
| - |
98 |
| - * [Code.Fragment] Fix crash in `Code.Fragment.surround_context/2` when matching on `->` |
99 |
| - * [IO] Raise when using `IO.binwrite/2` on terminated device (mirroring `IO.write/2`) |
100 |
| - * [Kernel] Do not expand aliases recursively (the alias stored in Macro.Env is already expanded) |
101 |
| - * [Kernel] Ensure `dbg` module is a compile-time dependency |
102 |
| - * [Kernel] Warn when a private function or macro uses `unquote/1` and the function/macro itself is unused |
103 |
| - * [Kernel] Do not define an alias for nested modules starting with `Elixir.` in their definition |
104 |
| - * [Kernel.ParallelCompiler] Consider a module has been defined in `@after_compile` callbacks to avoid deadlocks |
105 |
| - * [Path] Ensure `Path.relative_to/2` returns a relative path when the given argument does not share a common prefix with `cwd` |
106 |
| - |
107 |
| -#### ExUnit |
108 |
| - |
109 |
| - * [ExUnit] Raise on incorrectly dedented doctests |
110 |
| - |
111 |
| -#### Mix |
112 |
| - |
113 |
| - * [Mix] Ensure files with duplicate modules are recompiled whenever any of the files change |
114 |
| - |
115 | 9 | ### 3. Soft deprecations (no warnings emitted)
|
116 | 10 |
|
117 |
| -#### Elixir |
118 |
| - |
119 |
| - * [File] Deprecate `File.stream!(file, options, line_or_bytes)` in favor of keeping the options as last argument, as in `File.stream!(file, line_or_bytes, options)` |
120 |
| - * [Kernel.ParallelCompiler] Deprecate `Kernel.ParallelCompiler.async/1` in favor of `Kernel.ParallelCompiler.pmap/2` |
121 |
| - * [Path] Deprecate `Path.safe_relative_to/2` in favor of `Path.safe_relative/2` |
122 |
| - |
123 | 11 | ### 4. Hard deprecations
|
124 | 12 |
|
125 |
| -#### Elixir |
126 |
| - |
127 |
| - * [Date] Deprecate inferring a range with negative step, call `Date.range/3` with a negative step instead |
128 |
| - * [Enum] Deprecate passing a range with negative step on `Enum.slice/2`, give `first..last//1` instead |
129 |
| - * [Kernel] `~R/.../` is deprecated in favor of `~r/.../`. This is because `~R/.../` still allowed escape codes, which did not fit the definition of uppercase sigils |
130 |
| - * [String] Deprecate passing a range with negative step on `String.slice/2`, give `first..last//1` instead |
131 |
| - |
132 |
| -#### ExUnit |
133 |
| - |
134 |
| - * [ExUnit.Formatter] Deprecate `format_time/2`, use `format_times/1` instead |
135 |
| - |
136 |
| -#### Mix |
137 |
| - |
138 |
| - * [mix compile.leex] Require `:leex` to be added as a compiler to run the `leex` compiler |
139 |
| - * [mix compile.yecc] Require `:yecc` to be added as a compiler to run the `yecc` compiler |
140 |
| - |
141 | 13 | ## v1.15
|
142 | 14 |
|
143 |
| -The CHANGELOG for v1.15 releases can be found [in the v1.15 branch](https://github.com/elixir-lang/elixir/blob/v1.15/CHANGELOG.md). |
| 15 | +The CHANGELOG for v1.16 releases can be found [in the v1.16 branch](https://github.com/elixir-lang/elixir/blob/v1.16/CHANGELOG.md). |
0 commit comments