v1.19.0-rc.0
Pre-release
Pre-release
·
274 commits
to main
since this release
1. Enhancements
Elixir
- [Access] Add
Access.values/0for traversing maps and keyword lists values - [Base] Add functions to verify if an encoding is valid, such as
valid16?,valid64?, and so forth - [Calendar] Support 2-arity options for
Calendar.strftime/3which receives the whole data type - [Code] Add
:migrate_call_parens_on_pipeformatter option - [Code] Add
:indentationoption toCode.string_to_quoted/2 - [Code.Fragment] Preserve more block content around cursor in
container_cursor_to_quoted - [Code.Fragment] Add
:block_keyword_or_binary_operatortoCode.Fragmentfor more precise suggestions after operators and closing terminators - [Code.Fragment] Add
Code.Fragment.lines/1 - [Enum] Provide more information on
Enum.OutOfBoundsError - [Inspect] Allow
optional: :allwhen deriving Inspect - [Inspect.Algebra] Add optimistic/pessimistic groups as a simplified implementation of
next_break_fits - [IO.ANSI] Add ANSI codes to turn off conceal and crossed_out
- [Kernel] Allow controlling which applications are used during inference
- [Kernel] Support
min/2andmax/2as guards - [Kernel.ParallelCompiler] Add
each_long_verification_thresholdwhich invokes a callback when type checking a module takes too long - [Kernel.ParallelCompiler] Include lines in
== Compilation error in file ... ==slogans - [Macro] Print debugging results from
Macro.dbg/3as they happen, instead of once at the end - [Module] Do not automatically load modules after their compilation, guaranteeing a more consistent compile time experience and drastically improving compilation times
- [Protocol] Type checking of protocols dispatch and implementations
- [Regex] Add
Regex.to_embed/2which returns an embeddable representation of regex in another regex - [String] Add
String.count/2to count occurrences of a pattern
ExUnit
- [ExUnit.CaptureLog] Parallelize log dispatch when multiple processes are capturing log
- [ExUnit.Case] Add
:test_groupto the test context - [ExUnit.Doctest] Support ellipsis in doctest exceptions to match the remaining of the exception
- [ExUnit.Doctest] Add
:inspect_optsoption for doctest
IEx
- [IEx] Support multi-line prompts (due to this feature,
:continuation_promptand:alive_continuation_promptare no longer supported as IEx configuration) - [IEx.Autocomplete] Functions annotated with
@doc group: "Name"metadata will appear within their own groups in autocompletion
Mix
- [mix] Add support for
MIX_PROFILE_FLAGSto configureMIX_PROFILE - [mix compile] Debug the compiler and type checker PID when
MIX_DEBUG=1and compilation/verification thresholds are met - [mix compile] Add
Mix.Tasks.Compiler.reenable/1 - [mix deps.compile] Support
MIX_OS_DEPS_COMPILE_PARTITION_COUNTfor compiling deps concurrently across multiple operating system processes - [mix help] Add
mix help Mod,mix help :mod,mix help Mod.funandmix help Mod.fun/arity - [mix test] Allow to distinguish the exit status between warnings as errors and test failures
- [mix xref graph] Add support for
--format json - [mix xref graph] Emit a warning if
--sourceis part of a cycle - [M ix.Task.Compiler] Add
Mix.Task.Compiler.run/2
2. Bug fixes
Elixir
- [DateTime] Do not truncate microseconds regardless of precision in
DateTime.diff/3 - [File] Properly handle permissions errors cascading from parent in
File.mkdir_p/1 - [Kernel]
not_a_map.keynow raisesBadMapErrorfor consistency with other map operations - [Regex] Fix
Regex.split/2returning too many results when the chunk being split on was empty (which can happen when using features such as/K) - [Stream] Ensure
Stream.transform/5respects suspend command when its inner stream halts - [URI] Several fixes to
URI.merge/2related to trailing slashes, trailing dots, and hostless base URIs
Mix
- [mix cmd] Preserve argument quoting in subcommands
- [mix format] Ensure the formatter does not go over the specified limit in certain corner cases
- [mix release] Fix
RELEASE_SYS_CONFIGfor Windows 11 - [mix test] Preserve files with no longer filter on
mix test - [mix xref graph] Provide more consistent output by considering strong connected components only when computing graphs
3. Soft deprecations (no warnings emitted)
Elixir
- [Inspect.Algebra]
next_break_fitsis deprecated in favor ofoptimistic/pessimisticgroups - [Node]
Node.start/2-3is deprecated in favor ofNode.start/2with a keyword list
Mix
- [mix compile]
--no-protocol-consolidationis deprecated in favor of--no-consolidate-protocolsfor consistency withmix.exsconfiguration - [mix compile.protocols] Protocol consolidation is now part of
compile.elixirand has no effect
4. Hard deprecations
Elixir
- [Code] The
on_undefined_variable: :warnis deprecated. Relying on undefined variables becoming function calls will not be supported in the future - [File] Passing a callback as third argument to
File.cp/3is deprecated, pass it as aon_conflict: callbackoption instead - [File] Passing a callback as third argument to
File.cp_r/3is deprecated, pass it as aon_conflict: callbackoption instead - [Kernel] The struct update syntax, such as
%URI{uri | path: "/foo/bar"}is deprecated in favor of pattern matching on the struct when the variable is defined and then using the map update syntax%{uri | path: "/foo/bar"}. Thanks to the type system, pattern matching on structs can find more errors, more reliably - [Kernel.ParallelCompiler] Passing
return_diagnostics: trueas an option is required oncompile,compile_to_pathandrequire
Logger
- [Logger] The
:backendsconfiguration is deprecated, either set the:default_handlerto false or start backends in your application start callback
Mix
- [mix] The
:default_task,:preferred_cli_env, and:preferred_cli_targetconfiguration insidedef projectin yourmix.exshas been deprecated in favor of:default_task,:preferred_envsand:preferred_targetsinside thedef clifunction - [mix do] Using commas as task separator in
mix do(such asmix do foo, bar) is deprecated, use+instead (as inmix do foo + bar)