1.19.0
Released on 2025-10-16
Changes
- Type
- enhancement
- Tool
- Elixir
- Module
- Access
- Description
- Add `Access.values/0` for traversing maps and keyword lists values
- Type
- enhancement
- Tool
- Elixir
- Module
- Base
- Description
- Add functions to verify if an encoding is valid, such as `valid16?`, `valid64?`, and so forth
- Type
- enhancement
- Tool
- Elixir
- Module
- Calendar
- Description
- Support 2-arity options for `Calendar.strftime/3` which receives the whole data type
- Type
- enhancement
- Tool
- Elixir
- Module
- Code
- Description
- Add `:migrate_call_parens_on_pipe` formatter option
- Type
- enhancement
- Tool
- Elixir
- Module
- Code
- Description
- Add `:indentation` option to Code.string_to_quoted/2
- Type
- enhancement
- Tool
- Elixir
- Module
- Code.Fragment
- Description
- Preserve more block content around cursor in `container_cursor_to_quoted`
- Type
- enhancement
- Tool
- Elixir
- Module
- Code.Fragment
- Description
- Add `:block_keyword_or_binary_operator` to `Code.Fragment` for more precise suggestions after operators and closing terminators
- Type
- enhancement
- Tool
- Elixir
- Module
- Code.Fragment
- Description
- Add `Code.Fragment.lines/1`
- Type
- enhancement
- Tool
- Elixir
- Module
- Enum
- Description
- Provide more information on `Enum.OutOfBoundsError`
- Type
- enhancement
- Tool
- Elixir
- Module
- Inspect
- Description
- Allow `optional: :all` when deriving Inspect
- Type
- enhancement
- Tool
- Elixir
- Module
- Inspect.Algebra
- Description
- Add optimistic/pessimistic groups as a simplified implementation of `next_break_fits`
- Type
- enhancement
- Tool
- Elixir
- Module
- IO.ANSI
- Description
- Add ANSI codes to turn off conceal and crossed_out
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Raise when U+2028 and U+2029 characters are present in comments and strings to avoid line spoofing attacks
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Include the line for the previous clause in errors/warnings related to conflicts between defaults on function definitions
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Support `min/2` and `max/2` as guards
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel.ParallelCompiler
- Description
- Add `each_long_verification_threshold` which invokes a callback when type checking a module takes too long
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel.ParallelCompiler
- Description
- Include lines in `== Compilation error in file ... ==` slogans
- Type
- enhancement
- Tool
- Elixir
- Module
- Macro
- Description
- Print debugging results from `Macro.dbg/3` as they happen, instead of once at the end
- Type
- enhancement
- Tool
- Elixir
- Module
- Macro
- Description
- Add `__escape__/1` callback so structs can escape references and other runtime data types in `Macro.escape/1`
- Type
- enhancement
- Tool
- Elixir
- Module
- Module
- Description
- Do not automatically load modules after their compilation, guaranteeing a more consistent compile time experience and drastically improving compilation times
- Type
- enhancement
- Tool
- Elixir
- Module
- OptionParser
- Description
- Support the `:regex` type
- Type
- enhancement
- Tool
- Elixir
- Module
- OptionParser
- Description
- Enhance parsing error to display available options
- Type
- enhancement
- Tool
- Elixir
- Module
- Protocol
- Description
- Type checking of protocols dispatch and implementations
- Type
- enhancement
- Tool
- Elixir
- Module
- Regex
- Description
- Add `Regex.to_embed/2` which returns an embeddable representation of regex in another regex
- Type
- enhancement
- Tool
- Elixir
- Module
- Regex
- Description
- Raise error message when regexes are used as default values in struct fields for compatibility with Erlang/OTP 28
- Type
- enhancement
- Tool
- Elixir
- Module
- Registry
- Description
- Add key-based partitioning of duplicate registries
- Type
- enhancement
- Tool
- Elixir
- Module
- String
- Description
- Add `String.count/2` to count occurrences of a pattern
- Type
- enhancement
- Tool
- Elixir
- Module
- String
- Description
- Update to Unicode 17.0.0
- Type
- enhancement
- Tool
- ExUnit
- Module
- ExUnit
- Description
- Set a process label for each test
- Type
- enhancement
- Tool
- ExUnit
- Module
- ExUnit.CaptureLog
- Description
- Parallelize log dispatch when multiple processes are capturing log
- Type
- enhancement
- Tool
- ExUnit
- Module
- ExUnit.Case
- Description
- Add `:test_group` to the test context
- Type
- enhancement
- Tool
- ExUnit
- Module
- ExUnit.Doctest
- Description
- Support ellipsis in doctest exceptions to match the remaining of the exception
- Type
- enhancement
- Tool
- ExUnit
- Module
- ExUnit.Doctest
- Description
- Add `:inspect_opts` option for doctest
- Type
- enhancement
- Tool
- IEx
- Module
- IEx
- Description
- Support multi-line prompts (due to this feature, `:continuation_prompt` and `:alive_continuation_prompt` are no longer supported as IEx configuration)
- Type
- enhancement
- Tool
- IEx
- Module
- IEx.Autocomplete
- Description
- Functions annotated with `@doc group: "Name"` metadata will appear within their own groups in autocompletion
- Type
- enhancement
- Tool
- Logger
- Module
- Logger
- Description
- Accept any enumerable in `Logger.metadata/1`
- Type
- enhancement
- Tool
- Mix
- Module
- mix
- Description
- Add support for `MIX_PROFILE_FLAGS` to configure `MIX_PROFILE`
- Type
- enhancement
- Tool
- Mix
- Module
- mix compile
- Description
- Debug the compiler and type checker PID when `MIX_DEBUG=1` and compilation/verification thresholds are met
- Type
- enhancement
- Tool
- Mix
- Module
- mix compile
- Description
- Add `Mix.Tasks.Compiler.reenable/1`
- Type
- enhancement
- Tool
- Mix
- Module
- mix deps.compile
- Description
- Support `MIX_OS_DEPS_COMPILE_PARTITION_COUNT` for compiling deps concurrently across multiple operating system processes
- Type
- enhancement
- Tool
- Mix
- Module
- mix help
- Description
- Add `mix help Mod`, `mix help :mod`, `mix help Mod.fun`, `mix help Mod.fun/arity`, and `mix help app:package`
- Type
- enhancement
- Tool
- Mix
- Module
- mix format
- Description
- Add options to mix format to allow excluding of files
- Type
- enhancement
- Tool
- Mix
- Module
- mix test
- Description
- Add `--name-pattern` option to mix test
- Type
- enhancement
- Tool
- Mix
- Module
- mix test
- Description
- Allow to distinguish the exit status between warnings as errors and test failures
- Type
- enhancement
- Tool
- Mix
- Module
- mix xref graph
- Description
- Add support for `--format json`
- Type
- enhancement
- Tool
- Mix
- Module
- mix xref graph
- Description
- Emit a warning if `--source` is part of a cycle
- Type
- enhancement
- Tool
- Mix
- Module
- Mix
- Description
- Support the `:compilers` option
- Type
- enhancement
- Tool
- Mix
- Module
- Mix.Task.Compiler
- Description
- Add `Mix.Task.Compiler.run/2`
- Type
- bugfix
- Tool
- Elixir
- Module
- Code
- Description
- Return error on invalid unicode sequences in `Code.string_to_quoted/2` instead of raising
- Type
- bugfix
- Tool
- Elixir
- Module
- Code
- Description
- Properly handle column annotation for `in` in `not in` expressions
- Type
- bugfix
- Tool
- Elixir
- Module
- DateTime
- Description
- Do not truncate microseconds regardless of precision in `DateTime.diff/3`
- Type
- bugfix
- Tool
- Elixir
- Module
- Enum
- Description
- Fix infinite loop on `Enum.take/2` with negative index on empty enumerable
- Type
- bugfix
- Tool
- Elixir
- Module
- File
- Description
- Properly handle permissions errors cascading from parent in `File.mkdir_p/1`
- Type
- bugfix
- Tool
- Elixir
- Module
- Inspect
- Description
- Inspect ill-formed structs as maps
- Type
- bugfix
- Tool
- Elixir
- Module
- Kernel
- Description
- Properly increment metadata newline when `?` is followed by a literal newline character
- Type
- bugfix
- Tool
- Elixir
- Module
- Kernel
- Description
- `not_a_map.key` now raises `BadMapError` for consistency with other map operations
- Type
- bugfix
- Tool
- Elixir
- Module
- Protocol
- Description
- `defstruct/1` and `defexception/1` are now disabled inside `defprotocol` as to not allow defining structs/exceptions alongside a protocol
- Type
- bugfix
- Tool
- Elixir
- Module
- Regex
- Description
- Fix `Regex.split/2` returning too many results when the chunk being split on was empty (which can happen when using features such as `/K`)
- Type
- bugfix
- Tool
- Elixir
- Module
- Stream
- Description
- Ensure `Stream.transform/5` respects suspend command when its inner stream halts
- Type
- bugfix
- Tool
- Elixir
- Module
- URI
- Description
- Several fixes to `URI.merge/2` related to trailing slashes, trailing dots, and hostless base URIs
- Type
- bugfix
- Tool
- ExUnit
- Module
- ExUnit.Assertions
- Description
- Fix order of pinned variables in failure reports
- Type
- bugfix
- Tool
- ExUnit
- Module
- ExUnit.Assertions
- Description
- Raise if attempting to raise an assertion error with invalid message (not a binary)
- Type
- bugfix
- Tool
- ExUnit
- Module
- ExUnit.Case
- Description
- Do not crash on empty test unit groups
- Type
- bugfix
- Tool
- IEx
- Module
- IEx
- Description
- Abort pipelines when there is an error in any step along the way
- Type
- bugfix
- Tool
- Mix
- Module
- mix cmd
- Description
- Preserve argument quoting in subcommands by no longer performing shell expansion. To revert to the previous behaviour, pass `--shell` before the command name
- Type
- bugfix
- Tool
- Mix
- Module
- mix compile
- Description
- Fix bug where reverting changes to an external resource (such as HEEx template) after a compilation error would make it so the source module would not be compiled
- Type
- bugfix
- Tool
- Mix
- Module
- mix compile
- Description
- Avoid failures when locking compilation across different users
- Type
- bugfix
- Tool
- Mix
- Module
- mix compile
- Description
- Fix race condition when renaming files used by the compilation lock
- Type
- bugfix
- Tool
- Mix
- Module
- mix format
- Description
- Ensure the formatter does not go over the specified limit in certain corner cases
- Type
- bugfix
- Tool
- Mix
- Module
- mix release
- Description
- Fix `RELEASE_SYS_CONFIG` for Windows 11
- Type
- bugfix
- Tool
- Mix
- Module
- mix test
- Description
- Ensure modules are preloaded in `mix test --slowest-modules=N`
- Type
- bugfix
- Tool
- Mix
- Module
- mix xref graph
- Description
- Provide more consistent output by considering strong connected components only when computing graphs
- Type
- soft_deprecation
- Tool
- Elixir
- Module
- Inspect.Algebra
- Description
- `next_break_fits` is deprecated in favor of `optimistic`/`pessimistic` groups
- Type
- soft_deprecation
- Tool
- Elixir
- Module
- Node
- Description
- `Node.start/2-3` is deprecated in favor of `Node.start/2` with a keyword list
- Type
- soft_deprecation
- Tool
- Mix
- Module
- mix compile
- Description
- `--no-protocol-consolidation` is deprecated in favor of `--no-consolidate-protocols` for consistency with `mix.exs` configuration
- Type
- soft_deprecation
- Tool
- Mix
- Module
- mix compile.protocols
- Description
- Protocol consolidation is now part of `compile.elixir` and the task itself has no effect
- Type
- hard_deprecation
- Tool
- Elixir
- Module
- Code
- Description
- Warn if line-break characters outside of `\r` and `\r\n` are found in strings according to UX#55. This warning will be fast-tracked into an error for security reasons in Elixir v1.20, following a similar rule to bidirectional control characters. They will already raise if found in comments
- Type
- hard_deprecation
- Tool
- Elixir
- Module
- Code
- Description
- The `on_undefined_variable: :warn` is deprecated. Relying on undefined variables becoming function calls will not be supported in the future
- Type
- hard_deprecation
- Tool
- Elixir
- Module
- File
- Description
- Passing a callback as third argument to `File.cp/3` is deprecated, pass it as a `on_conflict: callback` option instead
- Type
- hard_deprecation
- Tool
- Elixir
- Module
- File
- Description
- Passing a callback as third argument to `File.cp_r/3` is deprecated, pass it as a `on_conflict: callback` option instead
- Type
- hard_deprecation
- Tool
- Elixir
- Module
- Kernel
- Description
- The struct update syntax, such as `%URI{uri | path: "/foo/bar"}`, now requires the given variable (or expression) to explicitly pattern match on the struct before it can be updated. This is because, thanks to the type system, pattern matching on structs can find more errors, more reliably, and we want to promote its usage. Once pattern matching is added, you may optionally convert the struct update syntax into the map update syntax `%{uri | path: "/foo/bar"}` with no less of typing guarantees
- Type
- hard_deprecation
- Tool
- Elixir
- Module
- Kernel.ParallelCompiler
- Description
- Passing `return_diagnostics: true` as an option is required on `compile`, `compile_to_path` and `require`
- Type
- hard_deprecation
- Tool
- Logger
- Module
- Logger
- Description
- The `:backends` configuration is deprecated, either set the :default_handler to false or start backends in your application start callback
- Type
- hard_deprecation
- Tool
- Mix
- Module
- mix
- Description
- The `:default_task`, `:preferred_cli_env`, and :preferred_cli_target configuration inside `def project` in your `mix.exs` has been deprecated in favor of `:default_task`, `:preferred_envs` and `:preferred_targets` inside the `def cli` function
- Type
- hard_deprecation
- Tool
- Mix
- Module
- mix do
- Description
- Using commas as task separator in `mix do` (such as `mix do foo, bar`) is deprecated, use `+` instead (as in `mix do foo + bar`)