Releases: elixir-lang/elixir
Releases · elixir-lang/elixir
v1.13.4
This release has been verified to work with Erlang/OTP 25 RC2.
1. Enhancements
Elixir
- [Code] Allow iodata to be returned in sigil formatting functions
- [Code] Pass opening delimiter information to sigil formatting functions
2. Bug fixes
Elixir
- [Kernel] Tweak type unification to fix infinite loop with recursive vars
- [Kernel] Add compile-time dependencies on
require
- [Registry] Make
Registry
send work with named triplets
3. Deprecations
Mix
- [mix rebar] Deprecate Rebar 2 as it no longer works on Erlang/OTP 25
Checksums
- Precompiled.zip SHA1: 325fbdde4f0a5701bb8b9d455175b85ff41470d7
- Precompiled.zip SHA512: e64c714e80cd9657b8897d725f6d78f251d443082f6af5070caec863c18068c97af6bdda156c3b3390e0a2b84f77c2ad3378a42913f64bb583fb5251fa49e619
- Docs.zip SHA1: 2ae1b2e4c9a62fe8fc36b5da23c6d9ab8646463f
- Docs.zip SHA512: faa66a9543344728f2ffa7de0855747526e8c2dc7f710875bad5335c87d4d3be3eb5963c152a1ed7a0f021308f877e3c81a8a4479db26ca77679317574912d21
v1.13.3
1. Enhancements
Mix
- [mix format] Supply file and line to formatter plugins
- [mix format] Support embedded Elixir expressions inside formatter plugins
2. Bug fixes
Elixir
- [Code] Fix duplicate bindings causing errors during evaluation
- [Kernel] Make sure signatures stored in the Documentation chunk does not contain newlines
- [Kernel] Fix infinite loop when compiling guards with recursive map access
- [Macro] Fix error on
Macro.to_string/1
when the plain aliasElixir
is given - [String] Fix error for certain codepoint combinations in
String.split_at/2
Mix
- [mix compile] Recompile project files when exports from dependencies change
- [mix test] Fix total coverage always showing in red even when above the threshold
Checksums
- Precompiled.zip SHA1: 7a2d0ff13beadcba3f566d692d960dcd785df5c8
- Precompiled.zip SHA512: 93132c03a16479cfd48c509e2c5ee145b9062d77d528ac2eaeae460f4349f138286f14d34a1ee884e6c76081fe1bf52d27788b944ef06feaa40c07bec41a0a27
- Docs.zip SHA1: e1110f7a791483a09914ab364ea283cf890f3157
- Docs.zip SHA512: c477ba1bf10dd009f3c295e1c70f5272b7df3525edbd3f9ee0ae71eef49933c7a19a264cb9fa7eae4fa82d9c393c59e0f2e39b99b16b7ca6cd413f1c7d96d9a2
v1.13.2
1. Enhancements
Mix
- [mix format] Allow plugins to also format
.ex
and.exs
files - [mix release] Allow bypassing application mode validation in release spec
- [mix test] Print a message when the suite fails due to the coverage threshold
2. Bug fixes
Elixir
- [Code] Do not emit warnings on
Code.Fragment.container_cursor_to_quoted/2
- [Kernel] Fix a crash when a for-comprehension with
:uniq
was used inside another comprehension with:uniq
- [Kernel] Ensure
env.context_modules
is properly set inside optimizeddefmodule
- [Keyword] Deprecate the recently added
Keyword.map/2
as it is equivalent toKeyword.new/2
- [Map] Deprecate the recently added
Map.map/2
as it is equivalent toMap.new/2
- [Protocol] Warn on zero arity callbacks inside protocols
Checksums
- Precompiled.zip SHA1: 53bf917f18fc210dcf252e346453fd8c04f2ac6b
- Precompiled.zip SHA512: 74cc0b3d7ddb0156d6695b3b08319d0c01fcfac053407b0bf8b456013d21d1b37ffd5cba389557edfb6af329fbed07c8cd1061a6698b60e1b16a70c898720ec2
- Docs.zip SHA1: 442ee132942e7834b0dd87e459b261d0d7db5821
- Docs.zip SHA512: 8519c56c6f57c187a82745c272906dc9ff76be2a026af5d1a8cb7e727530aab99c7536d520a72209f01bf7c99cabb29efb8d1a43eb99ac8dc0bababc04805d0e
v1.13.1
1. Bug fixes
Elixir
- [Code] Do not show code snippets in
SyntaxError
andTokenMissingError
if line is empty - [Exception] Do not fail blaming
ArgumentError
for improper lists onapply/3
- [Macro] Set a max
line_length
forMacro.to_string/1
- [Macro] Fix formatting of lists on module attributes for
Macro.to_string/1
- [String] Fix incorrect codepoint byte counting in
slice
with negative positions in ranges - [Task] Ensure async streams can be consumed from another process than the one that creates them
- [URI] Undeprecate
URI.parse/1
asURI.new/1
is too strict in many common cases - [URI] Make sure
URI.new/1
returns nil for empty paths
IEx
- [IEx] Make sure the
--version
flag halts IEx
Mix
- [Mix] Make protocol consolidation part of the
Mix.install/2
cache
Checksums
- Precompiled.zip SHA1: 40762ffbef86cbbfd0c79a94e057fb987dc882ff
- Precompiled.zip SHA512: bb02ead0d4ccf499ff0473fbbb17fd12de4ba476b463c0452138bc1ef9004547166e75ffe7c6f96b9497adc9fecbda4ad57bfe0f17f1ba95d8339a0e98c29b03
- Docs.zip SHA1: 066586bc79319f6248b26143124b76520e995c19
- Docs.zip SHA512: 7c33c6208250a88646ffc2a2f74a944e7f1a9c69473791e9faaf054bd476876a1dd80d8c792a5c47b5bf350a77c0ba4ef191f3b4509b9e962d2514ef88bff9a3
v1.13.0
Announcement: https://elixir-lang.org/blog/2021/12/03/elixir-v1-13-0-released/
1. Enhancements
EEx
- [EEx] Add
:parser_options
to EEx functions
Elixir
- [Calendar] Add
c:Calendar.year_of_era/3
to support calendars where the beginning of a new era does not align with the beginning of a new year - [CLI] Support
--short-version
on the CLI that does not boot the VM - [Code] Add
Code.string_to_quoted_with_comments/2
andCode.quoted_to_algebra/2
- [Code] Add more
:token_metadata
to aliases and remote calls when parsing strings - [Code] Add
Code.Fragment
module to provide best-effort information from code fragments. The module currently provides an updatedCode.Fragment.cursor_context/2
with operator support andCode.Fragment.surround_context/2
which looks at a given position in a fragment and find its surrounding delimiters - [Code] Allow custom sigil formatting on
Code.format_string!/2
- [Code] Add
{:on_module, bytecode, :none}
trace to compilation tracers - [Enum] Optimize
Enum.concat/1
for lists of lists - [Enum] Add
Enum.slide/3
- [Exception] Better format Elixir exceptions in Erlang
- [Inspect] Allow default inspect fun to be set globally with
Inspect.Opts.default_inspect_fun/1
- [IO] Allow
:eof
to be given as limit toIO.getn/2
- [Kernel] Support the
:sigils
option inimport Mod, only: :sigils
and allow the sigil modifiers to be also digits - [Kernel] Make
get_in
consistently abort whennil
values are found - [Kernel] Improve compilation times by reducing the amount of copies of the AST across compiler processes
- [Kernel] Raise if trying to define a module with a slash in its name
- [Kernel] Warn when
?\
is used and there is no need for a escape character - [Kernel] Track structs in typespecs as export deps instead of compile-time deps
- [Kernel] Add power operator (
**/2
) - [Keyword] Add
Keyword.validate/2
- [Keyword] Implement
Keyword.filter/2
andKeyword.map/2
- [List] Add
List.keyfind!/3
- [Macro] Add
Macro.prewalker/1
andMacro.postwalker/1
- [Macro.Env] Add the following reflection functions:
required?/2
,lookup_import/2
,fetch_alias/2
, andfetch_macro_alias/2
- [Map] Implement
Map.filter/2
andMap.map/2
- [Module] Support
:nillify_clauses
inModule.get_definition/3
- [Module] Add
Module.attributes_in/1
andModule.overridables_in/1
- [OptionParser] Add "did you mean?" suggestions to
OptionParser.ParseError
messages - [Record] Add record reflection via
@__records__
- [Task] Add
Task.completed/1
- [Task] Add
Task.ignore/1
to keep a task running but ignoring all of its results - [Task] Reduce the amount of copying
Task.async*
functions - [URI] Add
URI.new/1
andURI.new!/1
ExUnit
- [ExUnit] Show hint if comparing different but equivalent strings
- [ExUnit.CaptureIO] Add
with_io/3
to return result with captured io - [ExUnit.CaptureLog] Add
with_log/2
to return result with captured logs
IEx
- [IEx.Autocomplete] Add path autocompletion whenever when the cursor follows
"./
or"/
or"DRIVER:
whereDRIVER
is a single letter - [IEx.Autocomplete] Add autocompletion for sigils, struct names, and struct fields
- [IEx.Helpers] Allow multiple modules to be given to
r/1
Logger
- [Logger] Add
Logger.put_application_level/2
Mix
- [Mix] Add
MIX_INSTALL_FORCE
environment variable support - [Mix] Support
:config
and:system_env
inMix.install/2
- [Mix] Add
Mix.installed?/0
- [Mix.Shell] Add
:default
option toMix.Shell.yes?
- [mix archive.install] Run
loadconfig
before building archive - [mix compile] Move Elixir version check to before deps are compiled, in order to give feedback earlier
- [mix compile.elixir] Do not recompile files if their modification time change but their contents are still the same and the .beam files are still on disk
- [mix compile.elixir] Do not recompile all Elixir sources when Erlang modules change, only dependent ones
- [mix compile.elixir] Do not recompile Elixir files if
mix.exs
changes, instead recompile only files usingMix.Project
or trigger a recompilation if a compiler option changes - [mix compile.elixir] Only recompile needed files when a dependency is added, updated or removed
- [mix compile.elixir] Only recompile needed files when a dependency is configured
- [mix deps] Add
:subdir
option to git deps - [mix escript.install] Run
loadconfig
before building escript - [mix format] Support
:plugins
inmix format
that can hook into custom extensions and sigils - [mix format] Add
Mix.Tasks.Format.formatter_for_file/2
- [mix local.rebar] No longer support
sub_dirs
in Rebar 2 to help migration towards Rebar 3 - [mix local.rebar] Support
--if-missing
option when installing Rebar - [mix local.rebar] Set
REBAR_PROFILE=prod
when compiling Rebar dependencies - [mix test] Support
--profile-require=time
to profile the time loading test files themselves - [mix test] Allow filtering modules from coverage using regex
- [mix test] Allow the exit status of ExUnit to be configured and set the default to 2
- [mix test] Exit with a status of 3 when coverage falls below threshold
- [mix test] Write failed manifest when suite fails due to --warnings-as-errors
- [mix test] Ignore
MIX_TEST_PARTITION
when partitions set to 1 - [mix xref] Support multiple sinks and sources in
mix xref graph
- [mix xref] Add
trace
subcommand to print compilation dependencies between files - [mix xref] Add
--fail-above
option tomix xref
- [mix xref] Add
--label compile-connected
tomix xref
2. Bug fixes
EEx
- [EEx] Accept comments in EEx between do and the first clause
- [EEx] Accept EEx expressions where
->
is followed by newline
Elixir
- [Application] Allow any expression as first argument of
compile_env
- [Application] Warn if
Application.compile_env
orApplication.compile_env!
are called without a require - [Code] Make sure
:static_atoms_encoder
inCode.string_to_quoted/2
also applies to quoted keyword keys - [Code] Ensure bindings with no context are returned as atoms instead of
{binding, nil}
in eval operations - [Inspect] Fix a bug when inspecting a non-binary bitstring with colors
- [Kernel] Reject bidirectional formatting characters in strings and comments
- [Kernel] Support escaping of terminators in uppercase sigils heredocs for consistency
- [Kernel] Raise if
__CALLER__
or__ENV__
or__STACKTRACE__
are used in match - [Kernel] Improve error message on invalid argument for
byte_size
from binary concat - [Kernel] Raise when aliasing non-Elixir modules without
:as
- [Kernel] Allow
unquote_splicing
inside%{...}
without parens - [Kernel] Ensure that waiting on a struct expansion inside a typespec is correctly tracked as waiting time in the compiler
- [Kernel] Correctly parse the atom
.
as a keyword list key - [Kernel] Do not leak variables from the first generator in
with
andfor
special forms - [Kernel] Fix column number on strings with NFD characters
- [Kernel] Fix a bug where a combination of dynamic line in
quote
withunquote
of remote calls would emit invalid AST metadata - [OptionParser] Validate switch types/modifiers early on to give more precise feedback
- [Protocol] Add
defdelegate
to the list of unallowed macros inside protocols as protocols do not allow function definitions - [Protocol] Warn if
@callback
,@macrocallback
and@optional_callbacks
are defined inside protocol - [Protocol] Ensure protocol metadata is deterministic on consolidation
- [Range] Always show step when range is descending
- [String] Update Unicode database to version 14.0
- [URI] Only percent decode if followed by hex digits (according to https://url.spec.whatwg.org/#percent-decode)
- [Version] Ensure proper precedence of
and
/or
in version requirements
ExUnit
- [ExUnit] Fix formatter and counters from
ExUnit.run/0
to consider all tests in a module whenever if a module'ssetup_all
fails - [ExUnit] Allow doctests newlines to be terminated by CRLF
IEx
- [IEx] Fix the loss of
.iex.exs
context after a pry session - [IEx] Stop evaluator before exiting IEx server to avoid evaluators leaking
Logger
- [Logger] Raise clear error message for invalid
:compile_time_purge_matching
configuration - [Logger] Fix a bug where Logger would not reset its discard counter under some scenarios
Mix
- [mix compile.elixir] Track transitive runtime dependencies coming from local/path dependencies
- [mix compile.elixir] Recompile file if
@external_resource
is deleted - [mix compile.elixir] Print number of compiling files on all compiler cycles. This will make the
Compiling N files (.ex)
show up multiple times if necessary - [mix deps] Raise if local dep is unavailable while compiling
- [mix deps.unlock] Fix blank output when unlocking a dependency that is not locked
- [mix local.install] Do not respect
MIX_DEPS_PATH
for install commands - [mix release] Improve release scripts by making sure shell errors cascade (this is done by avoiding exporting and defining variables in a single step)
- [mix release] Do not boot release if
RELEASE_COOKIE
is empty - [mix release] Allow releases running as a daemon to be restarted
- [mix release] Raise proper error message when non-serializable values are in configs
- [mix test] Fix coverage engine to also tag
case
,cond
, andreceive
branches where the right side is a literal
3. Soft-deprecations (no warnings emitted)
Elixir
- [Code] Environment options in
Code.eval_quoted/3
andCode.eval_string/3
, such as:aliases
and `:t...
v1.13.0-rc.1
Checksums
- Precompiled.zip SHA1: 8878e702736ccd1d9d3ed4ec013abd299c885bad
- Precompiled.zip SHA512: 3fbdddcac36f96e33c3b5d6eecdfe4e9adcfc9d4f3dc5dd1fbb6803c673f28aea8d210ced450b7786f861abdcb1707f98fff1ec41278e9ac1cd2d484f7de6bc5
- Docs.zip SHA1: 7a64deae28eb719f634cb6118402b9e38da376e1
- Docs.zip SHA512: 2a0ce6a19edd795fc5eb0f1c529ae7a3680713f6a1c225d1e7acb5de032b10a4d6c67a9ee1c31e9dcc935e5b040df02fe2ad36a8ec7272c6a538fc012dee5b6e
v1.13.0-rc.0
Checksums
- Precompiled.zip SHA1: 5f6846da1f85c78500ee86240b412aec76c6fe77
- Precompiled.zip SHA512: 10e5e40c6a1a3cd338538f4fb1e1fa6bfcce22157c1300b6779f27ba22b6ed8b1d5a60e0aa02efa6365c956f5181e4d9e80eb15b6137a03294f0e2b28fcc2391
- Docs.zip SHA1: f7099c1646c8c5e8747e226452115c5f7e1d1a39
- Docs.zip SHA512: 69af920c03e61c0310cc2964c66a332e2498dab62c1c314eeabff75617ab9fbe41c16124b41abbcd62bdae955d6f619cd8902336705dedd39686560c5186f05d
v1.12.3
1. Bug fixes
Elixir
- [Code] Make sure that bindings in the default context returned by
Code.eval_*
functions are not returned as tagged tuples - [Kernel] Do not crash when handling ambiguity errors
- [Range] Still match on old range patterns throughout the stdlib
IEx
- [IEx.Autocomplete] Do not error autocompletion with module attribute
Mix
- [Mix] Rename inconsistent
:exit_code
option to:exit_status
onMix.raise/2
Checksums
- Precompiled.zip SHA1: db3c8a5470dee211168707c432a1f8002960e966
- Precompiled.zip SHA512: db092caa32b55195eeb24a17e0ab98bb2fea38d2f638bc42fee45a6dfcd3ba0782618d27e281c545651f93914481866b9d34b6d284c7f763d197e87847fdaef4
- Docs.zip SHA1: c49003f6252dd2e892c1897f06fe357bbf360e08
- Docs.zip SHA512: 3e3f2b39546025f25716bb265cc53861ab260db2598f2a91183da3389b9902e189cbd6b409e178a917e59e533c630e372d9d2c8721a8576951700ec8dbfa1d8f
v1.12.2
1. Bug fixes
Elixir
- [Kernel] Ensure deprecated macros emit warnings
Mix
- [mix deps] Ensure unconstrained rebar deps generate valid mix specifications
2. Enhancements
Elixir
- [elixirc] Change the output of
--profile time
to make it easier to detect outliers - [Application] Do not add compile time deps on args to
Application.compile_env/2
andApplication.compile_env!/2
- [Enum] Optimize
Enum.into/3
andMap.new/2
Mix
- [mix compile] Compile most recently changed files first
- [mix compile, mix run, mix test] Speed up the time taken to load dependencies. This should make the usage of Mix inside projects quite more responsive
Checksums
- Precompiled.zip SHA1: 051c2728bfd679d1d6f74d11f25ca679491cd6b4
- Precompiled.zip SHA512: 38eb2281032b0cb096ef5e61f048c5374d6fb9bf4078ab8f9526a42e16e7c661732a632b55d6072328eedf87a47e6eeb3f0e3f90bba1086239c71350f90c75e5
- Docs.zip SHA1: a3573b1a759944669dec951b38d3a978e17ba535
- Docs.zip SHA512: ed1d9814e53a7d8abb13354f1772881640f84cb55dd6f4fdf24465b871aae5561d0b64627b2cba03dd00494c1822ce1108956b02cdaa230d41ce7e5c6ede1222
v1.12.1
1. Bug fixes
Elixir
- [Code] Make sure
Code.format_string!/2
formats multiline expression inside interpolation on the first run - [Macro] Revert keeping of underscores between digits in camelize
Mix
- [Mix] Make sure
Mix.install/2
expand paths for deps - [mix deps.get] Silence false positives on
httpc
warnings - [mix test] Do not run the whole suite when there are no --failed tests as it won't behave as expected inside umbrellas
Checksums
- Precompiled.zip SHA1: 4a1269b95c719e0295cd6b57a1c447e1b91563ef
- Precompiled.zip SHA512: 66e877486606f232f36cbe76cdd63bc4ee5e75e27d6292bb602ab2c88b4dd7da6684e6ff9cdb2020e7f916ee2d58016e2d1e2cbd5e579f297ab8eae660cb5dcb
- Docs.zip SHA1: 32da77e41f28ad5fa08a1c8f166f44fc09b1cbfd
- Docs.zip SHA512: 260ce9bf8a0d4ddc5b6af67f5b970624cafd5aa1571a97d10573500f5722ab44fb4f49ebfc686003d2cc2b8eaf1e19b1cc176b0b6f121d3e405a3fea052e99f4