1.12.0

Released on 2021-05-19

Changes

Type
enhancement
Tool
EEx
Module
EEx.Engine
Description
Add `c:EEx.Engine.handle_text/3` callback that receives text metadata
Type
enhancement
Tool
EEx
Module
EEx.Engine
Description
Emit warnings for unused "do" expression in EEx
Type
enhancement
Tool
Elixir
Module
Code
Description
Add `Code.cursor_context/2` to return the context of a code snippet
Type
enhancement
Tool
Elixir
Module
Code
Description
Do not add newlines around interpolation on code formatting. Note this means formatted code that has interpolation after the line length on Elixir v1.12 won't be considered as formatted on earlier Elixir versions
Type
enhancement
Tool
Elixir
Module
Code
Description
Do not add brackets when keywords is used in the access syntax
Type
enhancement
Tool
Elixir
Module
Calendar
Description
Support basic datetime format in `Calendar.ISO` parsing functions
Type
enhancement
Tool
Elixir
Module
Code
Description
Improve evaluation performance on systems running on Erlang/OTP 24+
Type
enhancement
Tool
Elixir
Module
Date
Description
Support steps via `Date.range/3`
Type
enhancement
Tool
Elixir
Module
DateTime
Description
Add `offset` to `DateTime.to_iso8601/2` (now `to_iso8601/3`)
Type
enhancement
Tool
Elixir
Module
Enum
Description
Add `Enum.count_until/2` and `Enum.count_until/3`
Type
enhancement
Tool
Elixir
Module
Enum
Description
Add `Enum.product/1`
Type
enhancement
Tool
Elixir
Module
Enum
Description
Add `Enum.zip_with/2`, `Enum.zip_with/3`, `Enum.zip_reduce/3`, and `Enum.zip_reduce/4`
Type
enhancement
Tool
Elixir
Module
Enum
Description
Add support for functions as the second argument of `Enum.with_index/2`
Type
enhancement
Tool
Elixir
Module
Exception
Description
Show `error_info` data for exceptions coming from Erlang
Type
enhancement
Tool
Elixir
Module
Float
Description
Add `Float.pow/2`
Type
enhancement
Tool
Elixir
Module
Integer
Description
Add `Integer.pow/2` and `Integer.extended_gcd/2`
Type
enhancement
Tool
Elixir
Module
IO
Description
Add `IO.stream/0` and `IO.binstream/0` which default to STDIO with line orientation
Type
enhancement
Tool
Elixir
Module
List
Description
Add default value for `List.first/1` and `List.last/1`
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Add `first..last//step` as support for stepped ranges
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Also warn for literal structs on `min/2` and `max/2`
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Add `Kernel.tap/2` and `Kernel.then/2`
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Do not add runtime dependencies to remotes in typespecs
Type
enhancement
Tool
Elixir
Module
Kernel
Description
When there is an unused variable warning and there is a variable with the same name previously defined, suggest the user may have wanted to use the pin operator
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Improve error messages on invalid character right after a number
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Show removal and deprecated tips from Erlang/OTP
Type
enhancement
Tool
Elixir
Module
Macro
Description
Add export dependencies on `Macro.struct!/2`
Type
enhancement
Tool
Elixir
Module
Macro
Description
Support `:newline` to customize newlines escaping in `Macro.unescape_string/2`
Type
enhancement
Tool
Elixir
Module
Module
Description
Raise on invalid `@dialyzer` attributes
Type
enhancement
Tool
Elixir
Module
Module
Description
Add `Module.get_definition/2` and `Module.delete_definition/2`
Type
enhancement
Tool
Elixir
Module
Module
Description
Allow `@on_load` to be a private function
Type
enhancement
Tool
Elixir
Module
Module
Description
Validate `@dialyzer` related module attributes
Type
enhancement
Tool
Elixir
Module
Module
Description
Add `Module.reserved_attributes/0` to list all reserved attributes by the language
Type
enhancement
Tool
Elixir
Module
Range
Description
Add `Range.new/3` and `Range.size/1`
Type
enhancement
Tool
Elixir
Module
Regex
Description
Add offset option to `Regex.scan/3` and `Regex.run/3`
Type
enhancement
Tool
Elixir
Module
Registry
Description
Support `:compression` on `Registry` tables
Type
enhancement
Tool
Elixir
Module
Registry
Description
Support `Registry.values/3` for reading values under a given key-pid pair
Type
enhancement
Tool
Elixir
Module
Stream
Description
Add `Stream.zip_with/2` and `Stream.zip_with/3`
Type
enhancement
Tool
Elixir
Module
String
Description
Add `:turkic` mode option to String case functions
Type
enhancement
Tool
Elixir
Module
String
Description
Update to Unicode 13.0
Type
enhancement
Tool
Elixir
Module
System
Description
Add `System.trap_signal/3` and `System.untrap_signal/2`
Type
enhancement
Tool
Elixir
Module
System
Description
Add `System.shell/2` to invoke a command that is interpreted by the shell
Type
enhancement
Tool
Elixir
Module
Tuple
Description
Add `Tuple.sum/1` and `Tuple.product/1`
Type
enhancement
Tool
Elixir
Module
URI
Description
Support RFC3986 compliant encoding and decoding of queries via the `:rfc3986` option
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Intercept SIGQUIT (via Ctrl+\\) and show a list of all aborted tests as well as intermediate test results
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Interpolate module attributes in match assertions diffs
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Print how much time is spent on `async` vs `sync` tests
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Improve error messages for doctests
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Compile doctests faster (often by two times)
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Add `ExUnit.async_run/0` and `ExUnit.await_run/1`
Type
enhancement
Tool
IEx
Module
IEx
Description
Make IEx' parser configurable to allow special commands
Type
enhancement
Tool
IEx
Module
IEx
Description
Show function signature when pressing tab after the opening parens of a function
Type
enhancement
Tool
IEx
Module
IEx
Description
If an IEx expression starts with a binary operator, such as `|>`, automatically pipe in the result of the last expression
Type
enhancement
Tool
Mix
Module
Mix
Description
Add `Mix.install/2` for dynamically installing a list of dependencies
Type
enhancement
Tool
Mix
Module
Mix
Description
Support `:exit_code` option in `Mix.raise/2`
Type
enhancement
Tool
Mix
Module
Mix
Description
Discard `MIX_ENV` and `MIX_TARGET` values if they are empty strings
Type
enhancement
Tool
Mix
Module
Mix
Description
Print the time taken to execute a task with on `MIX_DEBUG=1`
Type
enhancement
Tool
Mix
Module
mix compile.erlang
Description
Compile multiple files in parallel
Type
enhancement
Tool
Mix
Module
mix escript.build
Description
Deep merge configuration and ensure argv is set when executing `config/runtime.exs`
Type
enhancement
Tool
Mix
Module
mix release
Description
Add `RELEASE_PROG` to releases with the name of the executable starting the release
Type
enhancement
Tool
Mix
Module
mix release
Description
Support `remote.vm.args` to customize how the connecting VM boots
Type
enhancement
Tool
Mix
Module
mix test
Description
Run all available tests if there are no pending `--failed` tests. This provides a better workflow as you no longer need to toggle the `--failed` flag between runs
Type
bugfix
Tool
Elixir
Module
CLI
Description
Ensure `-e ""` (with an empty string) parses correctly on Windows
Type
bugfix
Tool
Elixir
Module
Inspect
Description
Do not override user supplied `:limit` option for derived implementations
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Allow heredoc inside a heredoc interpolation
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Preserve CRLF on heredocs
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Public functions without documentation now appear as an empty map on `Code.fetch_docs/1`, unless they start with underscore, where they remain as `:none`. This aligns Elixir's implementation with EEP48
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Do not crash when complex literals (binaries and maps) are used in guards
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Properly parse keywords (such as `end`) followed by the `::` operator
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Do not ignore unimplemented signatures from generated functions
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Improve error message when an expression follows a keyword list without brackets
Type
bugfix
Tool
Elixir
Module
Macro
Description
`Macro.decompose_call/1` now also consider tuples with more than 2 elements to not be valid calls
Type
bugfix
Tool
Elixir
Module
Macro
Description
Fix `Macro.to_string/1` double-escaping of escape characters in sigils
Type
bugfix
Tool
Elixir
Module
Macro
Description
Fix `Macro.underscore/1` on digits preceded by capitals: "FOO10" now becomes "foo10" instead of "fo_o10"
Type
bugfix
Tool
Elixir
Module
Macro
Description
Preserve underscores between digits on `Macro.underscore/1`
Type
bugfix
Tool
Elixir
Module
OptionParser
Description
Properly parse when numbers follow-up aliases, for example, `-ab3` is now parsed as `-a -b 3`
Type
bugfix
Tool
Elixir
Module
Path
Description
Fix `Path.relative_to/2` when referencing self
Type
bugfix
Tool
Elixir
Module
Path
Description
Do not crash when a volume is given to `Path.absname/1`, such as "c:"
Type
bugfix
Tool
Elixir
Module
Task
Description
Ensure `Task.async_stream/2` with `ordered: false` discard results as they are emitted, instead of needlessly accumulating inside the stream manager
Type
bugfix
Tool
Elixir
Module
Task
Description
Raise if `:max_concurrency` is set to 0 on streaming operations
Type
bugfix
Tool
Elixir
Module
URI
Description
Do not discard empty paths on `URI.merge/2`
Type
bugfix
Tool
ExUnit
Module
ExUnit.Case
Description
Make `@tag tmp_dir` an absolute directory, avoiding inconsistencies if the test changes the current working directory
Type
bugfix
Tool
ExUnit
Module
ExUnit.Diff
Description
Fix cases where the diffing algorithm would fail to print a pattern correct
Type
bugfix
Tool
IEx
Module
IEx
Description
Fix auto-completion inside remote shells
Type
bugfix
Tool
Mix
Module
mix app.config
Description
Do not emit false positive warnings when configured dependencies that have `runtime: false` set
Type
bugfix
Tool
Mix
Module
mix compile.elixir
Description
Ensure that a manifest is generated even with no source code
Type
bugfix
Tool
Mix
Module
mix compile.elixir
Description
Make sure export dependencies trigger recompilation when the dependency is removed as well as when the whole file is removed
Type
bugfix
Tool
Mix
Module
mix compile.elixir
Description
Do not emit false positive warnings when a path dependency adds a module that is then used by the current application in the same `mix compile` cycle
Type
bugfix
Tool
Mix
Module
mix test
Description
Ensure protocols within the current project are consolidated when `--cover` is given
Type
bugfix
Tool
Mix
Module
mix release
Description
Improve compliance of release scripts with stripped down Linux installations
Type
bugfix
Tool
Mix
Module
mix release
Description
Preserve file mode when copying non-beam ebin files
Type
bugfix
Tool
Mix
Module
mix xref
Description
Ensure args are passed to the underlying `mix compile` call
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Using `first..last` to match on ranges is soft-deprecated and will warn on future Elixir versions. Use `first..last//step` instead
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Using `first..last` to create decreasing ranges is soft-deprecated and will warn on future versions. Use `first..last//-1` instead
Type
enhancement
Tool
EEx
Module
EEx.Engine
Description
`use EEx.Engine` is deprecated in favor of explicit delegation
Type
enhancement
Tool
Elixir
Module
Kernel
Description
The binary operator `^^^` is deprecated. If you are using `Bitwise.^^^/2`, use `Bitwise.bxor/2` instead
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Deprecate `@foo()` in favor of `@foo`
Type
enhancement
Tool
Elixir
Module
System
Description
Deprecate `System.stacktrace/0` (it was already deprecated outside of catch/rescue and now it is deprecated everywhere)
Type
enhancement
Tool
Mix
Module
mix compile
Description
The `:xref` compiler is deprecated and it has no effect. Please remove it from your mix.exs file.