Releases: elixir-lang/elixir
v1.15.1
1. Enhancements
- [Code]
Code.string_to_quoted/2
honors:static_atoms_encoder
for multi-letter sigils
2. Bug fixes
ExUnit
- [ExUnit.CaptureLog] Fix race condition on concurrent
capture_log
- [ExUnit.CaptureLog] Respect options passed to nested
capture_log
calls - [ExUnit.Doctest] Properly compile doctests without results terminated by fences
- [ExUnit.Doctest] Allow variables defined in doctests to be used in expectation
IEx
- [IEx] Ensure
pry
works on Erlang/OTP 25 and earlier while IEx is booting - [IEx]
Code.Fragment.surround_context
considers surround context around spaces and parens
Logger
- [Logger] Do not assume Logger has been loaded at compile-time
- [Logger.Formatter] Properly handle
:function
as metadata
Mix
- [mix compile] Ensure the current project is available on the code path after its Elixir sources are compiled
- [mix compile] Guarantee yecc/leex are available when emitting warnings from previous runs
- [mix compile] Fix bug where an external resource was deleted after its
mtime was successfully retrieved - [mix compile] Track removed modules and exports across local deps
- [mix deps] Fix an issue where dependencies could not be started in an umbrella projects
- [mix release] Properly handle optional dependencies when there is a conflict in the application start mode
- [mix release] Remove
--werl
from release scripts on Erlang/OTP 26
v1.15.0
Official announcement: https://elixir-lang.org/blog/2023/06/19/elixir-v1-15-0-released/
1. Enhancements
EEx
- [EEx] Include source code snippets in syntax errors
Elixir
- [Calendar] Add support for epoch time (
%s
) toCalendar.strftime/2
- [Code]
Code.format_string!/2
now converts'charlists'
into~c"charlists"
by default - [Code] Add
:on_undefined_variable
to the compiler options to preserve the warning behaviour which was deprecated back in Elixir v1.4 - [Code] Add
Code.loaded?/1
andCode.ensure_all_loaded(!)/1
- [Code] Add
Code.prepend_paths/1
,Code.append_paths/1
, andCode.delete_paths/1
- [Code] Add
Code.with_diagnostics/2
to return diagnostics when compiling and evaluating code - [Code.Fragment] Support nested expressions in
Code.Fragment.cursor_context/1
- [Code.Fragment] Keep operators and no paren calls in
Code.Fragment.container_cursor_to_quoted/1
- [Date] Add
Date.before?/2
andDate.after?/2
- [DateTime] Add
DateTime.before?/2
andDateTime.after?/2
- [DateTime] Support precision in
DateTime.utc_now/2
- [File] Support distributed
File.Stream
- [Inspect]
Inspect
now renders'charlists'
as~c"charlists"
by default - [Kernel] Break down
case
andcond
insidedbg/2
- [Kernel] Add
t:nonempty_binary/0
andt:nonempty_bitstring/0
- [Kernel] Treat
@behaviour
s as runtime dependencies - [Kernel] Do not add runtime dependencies for alias references in patterns and guards
- [Kernel] Warn for nested calls without parens inside keywords
- [Kernel] Support for multi-letter uppercase sigils
- [Kernel] Introduce mechanism to collect several errors in a module. Previously, as soon as there was a compilation error, compilation would fail. Now the compiler became a bit smarter and will report multiple errors whenever possible as multiple
error: ...
messages, similar towarning: ...
- [Kernel] Raise instead of warning on undefined variables. Previously, an undefined variable would attempt to invoke a function of the same name, which led to confusing error messages, especially to newcomers. To enable the previous behaviour, invoke
Code.compiler_options(on_undefined_variable: :warn)
at the top of yourmix.exs
- [Kernel.CLI] Support
--sname undefined
/--name undefined
so a name is automatically generated - [Keyword] Add
Keyword.split_with/2
- [Macro] Improve error message when piping into an expression ending in bracket-based access
- [Macro.Env] Add
Macro.Env.lookup_alias_as/2
- [Map] Add
Map.split_with/2
- [Map] Add
Map.intersect/2
andMap.intersect/3
- [MapSet] Add
MapSet.split_with/2
- [MapSet] Optimize most functions
- [NaiveDateTime] Add
NaiveDateTime.beginning_of_day/1
andNaiveDateTime.end_of_day/1
- [NaiveDateTime] Add
NaiveDateTime.before?/2
andNaiveDateTime.after?/2
- [NaiveDateTime] Support precision in
NaiveDateTime.utc_now/2
- [Module] Mark functions as generated in "Docs" chunk
- [Module] Add
Module.get_last_attribute/3
- [OptionParser] Support
:return_separator
option - [Process] Add
Process.alias/0,1
andProcess.unalias/1
- [Range] Add
Range.split/2
- [String] Update Unicode to version 15.0.0
- [String] Add
:fast_ascii
mode toString.valid?/2
- [Supervisor] Add support for automatic shutdown in
Supervisor
- [System] Support
:lines
inSystem.cmd/3
to capture output line by line - [Task] Remove head of line blocking on
Task.yield_many/2
- [Task] Enable selective receive optimizations in Erlang/OTP 26+
- [Task] Reduce tasks footprint by avoiding unecessary work during spawning
- [Task.Supervisor] Do not copy args on temporary
Task.Supervisor.start_child/2
- [Time] Add
Time.before?/2
andTime.after?/2
- [URI] Add
URI.append_path/2
ExUnit
- [ExUnit] Add more color configuration to ExUnit CLI formatter
- [ExUnit.Callbacks] Accept
{module, function}
tuples in ExUnitsetup
callbacks - [ExUnit.Case] Add
ExUnit.Case.get_last_registered_test/1
- [ExUnit.Doctest] Add
ExUnit.DocTest.doctest_file/2
- [ExUnit.Doctest] Include
doctest_data
in doctest tags - [ExUnit.Formatter] When comparing two anonymous functions, defined at the same place but capturing a different environment, we will now also diff the environments
IEx
- [IEx] Make pry opt-in on dbg with
--dbg pry
- [IEX] Support
IEX_HOME
- [IEx.Autocomplete] Only provide aliases when autocompleting
alias
,import
, andrequire
- [IEx.Autocomplete] Provide field completion on map and struct updates
- [IEx.Helpers] Add
runtime_info(:allocators)
- [IEx.Info] Implement protocol for
Range
,DateTime
, andRegex
Logger
- [Logger] Add
Logger.add_handlers/1
andLogger.default_formatter/1
- [Logger] Introduce
default_formatter
anddefault_handler
configuration for Logger which configures Erlang/OTP logger - [Logger] Add
:always_evaluate_messages
configuration to Logger - [Logger.Formatter] Implement the Erlang Logger formatter API
- [Logger.Formatter] Add support for ports in Logger metadata
Mix
- [mix app.start] Allow applications to be started concurrently via the
:start_concurrently
configuration - [mix compile] Set
--all-warnings
by default - [mix compile] Reduce the amount of filesystem lookups for path dependencies by storing timestamps in manifests
- [mix compile] Track digests of
@external_resources
- [mix compile.app] Write
optional_applications
to.app
file - [mix compile.elixir] Add
--purge-consolidation-path-if-stale
which will purge the given consolidation path if compilation is required - [mix deps.compile] Automatically recompile dependencies if their compile env changes
- [mix deps.get] Automatically install Hex and Rebar on
mix deps.get
/mix deps.update
- [mix deps.get] Support
--check-locked
which raises if changes to the lockfile are required - [mix eval] Allow passing additional arguments
- [mix format] Support
--no-exit
option - [mix format] Allow multiple formatters per file extension and sigil
- [mix format] Show diffs whenever
--check-formatted
fails - [mix format] Allow the formatting root to be configured
- [mix loadpaths] Cache deps and archive loadpaths in Erlang/OTP 26
- [mix profile.fprof] Support
--trace-to-file
to improve performance when working with large outputs - [mix release] Allow passing additional arguments to the
eval
command - [mix xref graph] Support
--output
flag - [Mix.Project] Support
def cli
to unify all CLI defaults in a single place - [Mix.Project] Add
Mix.Project.deps_tree/1
2. Bug fixes
Elixir
- [Code.Formatter] Fix a scenario where a keyword followed by parenthesis could go above the maximum line length
- [Code.Formatter] Remove unnecessary parens in nullary type funs
- [Exception] Fix operator precedence when printing guards in
Exception.blame/3
- [File] Do not raise if there are file system race conditions in
File.cp/2
- [File] Do not raise when deleting write-only empty directories on
File.rm_rf/1
- [Kernel] Expand macros on the left side of -> in
try/rescue
- [Kernel] Raise on misplaced
...
inside typespecs - [Kernel] Do not import
behaviour_info
andmodule_info
functions from Erlang modules - [Kernel] Raise when macros are given to dialyzer
- [Kernel.ParallelCompiler] Make sure compiler doesn't crash when there are stray messages in the inbox
- [Kernel.ParallelCompiler] Track compile and runtime warnings separately
- [Module] Ensure that
Module.get_attribute/3
returnsnil
and not the given default value when an attribute has been explicitly set asnil
- [System] Fix race condition when a script would terminate before
System.stop/1
executes - [Task] Do not double log Task failure reports
- [URI] Make sure
URI.merge/2
works accordingly with relative paths
ExUnit
- [ExUnit] Fix crash when
@tag capture_log: true
was set to true and the Logger application was shut down in the middle of the test - [ExUnit] Do not merge context as tags inside the runner to reduce memory usage when emitting events to formatters
- [ExUnit] Mark test cases as invalid when an exit occurs during
setup_all
- [ExUnit] Do not expand or collect vars from quote in ExUnit assertions
- [ExUnit.DocTest] Ensure proper line is returned when failing to parse doctest results
- [ExUnit.Doctest] Fix line information when a doctest with multiple assertions fails
IEx
- [IEx] Do not spawn a process to read IO. This fixes a bug where multiline paste stopped working
whenever the input reader was killed - [IEx] Do not perform completion for prompts triggered during code evaluation
Mix
- [mix compile] Include
cwd
in compiler cache key - [mix release] Fix Windows service when invoking
erlsrv.exe
in path with spaces - [mix xref] Raise early if
mix xref
is used at the umbrella root
3. Soft deprecations (no warnings emitted)
Elixir
- [File]
File.cp/3
andFile.cp_r/3
with a function as third argument
is deprecated in favor of a keyword list - [Kernel] Require pin variable when accessing variable inside binary size in match
- [Kernel.ParallelCompiler] Require the
:return_diagnostics
option to be
set to true when compiling or requiring code
Logger
- [Logger]
add_backend/2
,remove_backend/2
, andconfigure_backend/2
have been deprecated
in favor of the new:logger_backends
dependency - [Logger] The
:console
configuration has been deprecated in favor of:default_formatter
- [Logger] The
:backends
configuration has been deprecated in favor ofLogger.add_handlers/1
Mix
- [Mix.Project]
:preferred_cli_env
is deprecated in favor o...
v1.15.0-rc.2
Note this release includes offline Elixir installers for Windows per supported Erlang/OTP version.
1. Enhancements
Elixir
- [Module] Mark functions as generated in "Docs" chunk
ExUnit
- [ExUnit.Doctest] Include
doctest_data
in doctest tags
2. Bug fixes
Elixir
- [Kernel] Fix
import m, only: :sigils
for multi-letter sigils (regression) - [Macro] Fix
Macro.to_string/1
for multi-letter sigils (regression)
ExUnit
- [ExUnit] Mark test cases as invalid when an exit occurs during
setup_all
- [ExUnit] Fix ExUnit diffs for multi-letter sigils (regression)
- [ExUnit.Doctest] Fix line information when a doctest with multiple assertions fails
Mix
- [mix compile] Keep erts when pruning load paths (regression)
- [mix xref] Raise early if
mix xref
is used at the umbrella root
v1.15.0-rc.1
1. Enhancements
Elixir
- [File] Support distributed
File.Stream
- [Module] Add
Module.get_last_attribute/3
- [Task] Reduce footprint of tasks by avoiding unecessary work during spawning
ExUnit
- [ExUnit.Case] Add
ExUnit.Case.get_last_registered_test/1
2. Bug fixes
Elixir
- [Code] Ensure
:on_undefined_variable
option works as advertised (regression) - [Code] Format paths in
Code.with_diagnostic/2
as relative paths (regression) - [Kernel] Raise when macros are given to dialyzer
- [Kernel] Support bitstring specifiers as map keys in pattern (regression)
- [Module] Ensure that
Module.get_attribute/3
returnsnil
and not the given default value when an attribute has been explicitly set asnil
- [Task] Do not double log Task failure reports
ExUnit
- [ExUnit.CaptureLog] Allow capturing deprecated log level (regression)
- [ExUnit.DocTest] Ensure proper line is returned when failing to parse doctest results
IEx
- [IEx] Fix IO operations not returning when booting IEx (regression)
Mix
- [mix deps] Ensure dependencies with
included_applications
can be loaded (regression) - [mix format] Ensure proper formatter options are returned for files (regression)
3. Soft deprecations
Elixir
- [Kernel] Require pin variable when accessing variable inside binary size in match
v1.15.0-rc.0
This release requires Erlang/OTP 24 and later.
Elixir v1.15 is a smaller release with focused improvements
on compilation and boot times. This release also completes
our integration process with Erlang/OTP logger, bringing new
features such as log rotation and compaction out of the box.
You will also find additional convenience functions in Code
,
Map
, Keyword
, all Calendar modules, and others.
Compile and boot-time improvements
The last several releases brought improvements to compilation
time and this version is no different. In particular, Elixir
now caches and prunes load paths before compilation, ensuring your
project (and dependencies!) compile faster and in an environment
closer to production.
In a nutshell the Erlang VM loads modules from code paths. Each
application that ships with Erlang and Elixir plus each dependency
become an entry in your code path. The larger the code path, the
more work Erlang has to do in order to find a module.
In previous versions, Mix would only add entries to the load paths.
Therefore, if you compiled 20 dependencies and you went to compile
the 21st, the code path would have 21 entries (plus all Erlang and
Elixir apps). This allowed modules from unrelated dependencies to
be seen and made compilation slower the more dependencies you had.
With this release, we will now prune the code paths to only the ones
listed as dependencies, bringing the behaviour closer to mix release
.
Furthermore, Erlang/OTP 26 allows us to start applications
concurrently and cache the code path lookups, decreasing the cost of
booting applications. The combination of Elixir v1.15 and Erlang/OTP 26
should reduce the boot time of applications, such as when starting
iex -S mix
or running a single test with mix test
, from 5% to 30%.
The compiler is also smarter in several ways: @behaviour
declarations
no longer add compile-time dependencies and aliases in patterns and
guards add no dependency whatsoever, as no dispatching happens. Furthermore,
Mix now tracks the digests of @external_resource
files, reducing the
amount of recompilation when swapping branches. Finally, dependencies
are automatically recompiled when their compile-time configuration changes.
Potential incompatibilities
Due to the code path pruning, if you have an application or dependency
that does not specify its dependencies on Erlang and Elixir application,
it may no longer compile successfully in Elixir v1.15. You can temporarily
disable code path pruning by setting prune_code_paths: false
in your
mix.exs
, although doing so may lead to runtime bugs that are only
manifested inside a mix release
.
Compiler warnings and errors
The Elixir compiler can now emit many errors for a single file, making
sure more feedback is reported to developers before compilation is aborted.
In Elixir v1.14, an undefined function would be reported as:
** (CompileError) undefined function foo/0 (there is no such import)
my_file.exs:1
In Elixir v1.15, the new reports will look like:
error: undefined function foo/0 (there is no such import)
my_file.exs:1
** (CompileError) nofile: cannot compile file (errors have been logged)
A new function, called Code.with_diagnostics/2
, has been added so this
information can be leveraged by editors, allowing them to point to several
errors at once.
Integration with Erlang/OTP logger
This release provides additional features such as global logger
metadata and file logging (with rotation and compaction) out-of-the-box!
This release also soft-deprecates Elixir's Logger Backends in
favor of Erlang's Logger handlers. Elixir will automatically
convert your :console
backend configuration into the new
configuration. Previously, you would set:
config :logger, :console,
level: :error,
format: "$time $message $metadata"
Which is now translated to the equivalent:
config :logger, :default_handler,
level: :error
config :logger, :default_formatter,
format: "$time $message $metadata"
If you use Logger.Backends.Console
or other backends, they are
still fully supported and functional. If you implement your own
backends, you want to consider migrating to
:logger_backends
in the long term.
See the new Logger
documentation for more information on the
new features and on compatibility.
v1.15.0-rc.0 (2022-05-22)
1. Enhancements
EEx
- [EEx] Include source code snippets in syntax errors
Elixir
- [Calendar] Add support for epoch time (
%s
) toCalendar.strftime/2
- [Code]
Code.format_string!/2
now converts'charlists'
into~c"charlists"
by default - [Code] Add
:on_undefined_variable
to the compiler options to preserve the warning behaviour which was deprecated back in Elixir v1.4 - [Code] Add
Code.loaded?/1
andCode.ensure_all_loaded(!)/1
- [Code] Add
Code.prepend_paths/1
,Code.append_paths/1
, andCode.delete_paths/1
- [Code] Add
Code.with_diagnostics/2
to return diagnostics when compiling and evaluating code - [Code.Fragment] Support nested expressions in
Code.Fragment.cursor_context/1
- [Code.Fragment] Keep operators and no paren calls in
Code.Fragment.container_cursor_to_quoted/1
- [Date] Add
Date.before?/2
andDate.after?/2
- [DateTime] Add
DateTime.before?/2
andDateTime.after?/2
- [DateTime] Support precision in
DateTime.utc_now/2
- [Inspect]
Inspect
now renders'charlists'
as~c"charlists"
by default - [Kernel] Break down
case
andcond
insidedbg/2
- [Kernel] Add
t:nonempty_binary/0
andt:nonempty_bitstring/0
- [Kernel] Treat
@behaviour
s as runtime dependencies - [Kernel] Do not add runtime dependencies for alias references in patterns and guards
- [Kernel] Warn for nested calls without parens inside keywords
- [Kernel] Support for multi-letter uppercase sigils
- [Kernel] Introduce mechanism to collect several errors in a module. Previously, as soon as there was a compilation error, compilation would fail. Now the compiler became a bit smarter and will report multiple errors whenever possible as multiple
error: ...
messages, similar towarning: ...
- [Kernel.CLI] Support
--sname undefined
/--name undefined
so a name is automatically generated - [Keyword] Add
Keyword.split_with/2
- [Macro] Improve error message when piping into an expression ending in bracket-based access
- [Macro.Env] Add
Macro.Env.lookup_alias_as/2
- [Map] Add
Map.split_with/2
- [Map] Add
Map.intersect/2
andMap.intersect/3
- [MapSet] Add
MapSet.split_with/2
- [MapSet] Optimize most functions
- [NaiveDateTime] Add
NaiveDateTime.beginning_of_day/1
andNaiveDateTime.end_of_day/1
- [NaiveDateTime] Add
NaiveDateTime.before?/2
andNaiveDateTime.after?/2
- [NaiveDateTime] Support precision in
NaiveDateTime.utc_now/2
- [OptionParser] Support
:return_separator
option - [Process] Add
Process.alias/0,1
andProcess.unalias/1
- [Range] Add
Range.split/2
- [String] Update Unicode to version 15.0.0
- [String] Add
:fast_ascii
mode toString.valid?/2
- [Supervisor] Add support for automatic shutdown in
Supervisor
- [System] Support
:lines
inSystem.cmd/3
to capture output line by line - [Task] Remove head of line blocking on
Task.yield_many/2
- [Task] Enable selective receive optimizations in Erlang/OTP 26+
- [Task.Supervisor] Do not copy args on temporary
Task.Supervisor.start_child/2
- [Time] Add
Time.before?/2
andTime.after?/2
- [URI] Add
URI.append_path/2
ExUnit
- [ExUnit] Add more color configuration to ExUnit CLI formatter
- [ExUnit.Callbacks] Accept
{module, function}
tuples in ExUnitsetup
callbacks - [ExUnit.Doctest] Add
ExUnit.DocTest.doctest_file/2
- [ExUnit.Formatter] When comparing two anonymous functions, defined at the same place but capturing a different environment, we will now also diff the environments
IEx
- [IEx] Make pry opt-in on dbg with
--dbg pry
- [IEX] Support
IEX_HOME
- [IEx.Autocomplete] Only provide aliases when autocompleting
alias
,import
, andrequire
- [IEx.Autocomplete] Provide field completion on map and struct updates
- [IEx.Helpers] Add
runtime_info(:allocators)
- [IEx.Info] Implement protocol for
Range
,DateTime
, andRegex
Logger
- [Logger] Add
Logger.add_handlers/1
andLogger.default_formatter/1
- [Logger] Introduce
default_formatter
anddefault_handler
configuration for Logger which configures Erlang/OTP logger - [Logger] Add
:always_evaluate_messages
configuration to Logger - [Logger.Formatter] Implement the Erlang Logger formatter API
- [Logger.Formatter] Add support for ports in Logger metadata
Mix
- [mix app.start] Allow applications to be started concurrently via the
:start_concurrently
configuration - [mix compile] Set
--all-warnings
by default - [mix compile] Reduce the amount of filesystem lookups for path dependencies by storing timestamps in manifests
- [mix compile] Track digests of
@external_resources
- [mix compile.app] Write
optional_applications
to.app
file - [mix compile.elixir] Add
--purge-consolidation-path-if-stale
which will purge the given consolidation path if compilation is required - [mix deps.compile] Automatically recompile dependencies if their compile env changes
- [mix deps.get] Automatically install Hex and Rebar on
mix deps.get
/mix deps.update
- [mix deps.get] Support
--check-locked
which raises if changes to the lockfile are required - [mix eval] Allow passing additional arguments
- [mix format] Support
--no-exit
option - [mix format] Allow multiple formatters per file extension and sigil
- [mix...
v1.14.5
This release contains fixes for Erlang/OTP 26.
Bug fixes
Elixir
- [CLI] Fix a bug where stdout would block when there was no attached terminal on Windows when running on Erlang/OTP 26
Mix
- [Mix] Properly set SSL configuration for Mix downloads when running on Erlang/OTP 26
v1.14.4
This release adds basic support for Erlang/OTP 26. When migrating
to Erlang/OTP 26, keep it mind it changes how maps are stored
internally and they will be printed and traversed in a different
order (note maps never provided a guarantee of their order).
To aid migration, this release adds :sort_maps
to inspect
custom options, in case you want to sort them before inspection:
inspect(map, custom_options: [sort_maps: true])
Enhancements
Elixir
- [Inspect] Add
:sort_maps
toInspect.Opts.custom_options
IEx
- [IEx] Support shell history in Erlang/OTP 26+
Mix
- [mix compile.elixir] Optimize application tracer
Bug fixes
Elixir
- [Code] Properly handle blocks with comments in all cases in
Code.quoted_to_string_with_comments/2
- [Kernel] Fix
debug_info/4
when returning core_v1 - [Kernel] Store complete path on
quote keep: true
to avoid invalid stacktraces - [Kernel] Fix column count when tokenizing escaped interpolations
- [Stream] Fix
Stream.zip/1
hanging on empty list
Mix
- [mix format] Don't call formatter on directories
v1.14.3
1. Enhancements
Elixir
- [Kernel] Speed up loading of runtime modules in the parallel compiler
- [Range] Optimize range membership implementation
ExUnit
- [ExUnit] Return values from running doctests and make their order consistent
2. Bug fixes
Elixir
- [Calendar] Fix handling of negative years in
Calendar.strftime/2
- [Exception] Improve blaming of FunctionClauseError with
is_struct/2
guards - [Kernel] Fix invalid variable scoping in
defguard
expansion - [Kernel] Do not warn on captured underscored vars from
defmodule
- [Kernel] Do not crash for missing line info on type warnings
- [Macro] Fix
Macro.to_string/1
for large negative integers - [Macro] Properly type and escape expansion of
__ENV__
in macros - [Path] Make sure
Path.wildcard/2
expands..
symlinks accordingly - [Range] Address corner cases in
Range.disjoint?/2
implementation
ExUnit
- [ExUnit.DocTest] Remove unnecessary literal quotes from error message on reports
v1.14.2
1. Enhancements
Elixir
- [Code] Add
Code.eval_quoted_with_env/4
with support for the:prune_binding
option
ExUnit
- [ExUnit.Case] Allow test cases to not be registered on use
- [ExUnit.DocTest] Include
:doctest
and:doctest_line
as meta tags - [ExUnit.Formatter] Expose
ExUnit.Formatter.format_assertion_diff/4
Mix
- [Mix]
Mix.install/2
accepts atoms as paths
2. Bug fixes
Elixir
- [Code.Formatter] Fix
size*unit
shortcut in bitstring - [Kernel] Generate unique variables for macro expansion of
defguard
- [Protocol] Expand
:for
in protocols with the appropriate env
ExUnit
- [ExUnit] Do not run duplicate cases on
ExUnit.run/1
Mix
- [mix test] Ensure proper error message when there is no test directory
v1.14.1
1. Enhancements
Elixir
- [Kernel] Perform partial expansion of literals in module attributes
- [Kernel] Do not add compile-time dependencies for literals as defaults in
Application.compile_env/3
inside module attributes - [Macro] Add
Macro.expand_literals/2
andMacro.expand_literals/3
- [System] Add
:close_stdin
toSystem.shell/2
Mix
- [mix test] Accept
--all-warnings
option
2. Bug fixes
Elixir
- [Kernel] Fix misleading warning when
:uniq
is given infor
comprehensions and the result is unused - [Kernel] Improve error message for when there is a conflicting struct and ignoring module conflict
- [Kernel] Do not delete
@enforce_keys
attribute afterdefstruct
declaration - [Kernel] Do not crash the checker on modules with missing
:debug_info
chunk - [Macro] Fix error in
Macro.to_string/2
when converting an AST with:erlang.binary_to_atom/2
- [String] Fix
String.split/3
andString.next_grapheme/1
returning invalid results on invalid UTF-8 encoding - [System] Do not close stdin by default in
System.shell/2
- [URI] Do not return
uri.port
as:undefined
in certain cases inURI.new/1
ExUnit
- [ExUnit.DocTest] Do not crash when both
:moduledoc
and functions are specified in:only
IEx
- [CLI] Fix invalid argument handling when
--no-pry
is given
Mix
- [mix format] Do not cache inputs from
.formatter.exs
so they are properly re-evaluted on every call