Skip to content

Releases: elixir-lang/elixir

v1.19.0-rc.0

09 Jun 11:03

Choose a tag to compare

v1.19.0-rc.0 Pre-release
Pre-release

1. Enhancements

Elixir

  • [Access] Add Access.values/0 for 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/3 which receives the whole data type
  • [Code] Add :migrate_call_parens_on_pipe formatter option
  • [Code] Add :indentation option to Code.string_to_quoted/2
  • [Code.Fragment] Preserve more block content around cursor in container_cursor_to_quoted
  • [Code.Fragment] Add :block_keyword_or_binary_operator to Code.Fragment for 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: :all when 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/2 and max/2 as guards
  • [Kernel.ParallelCompiler] Add each_long_verification_threshold which 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/3 as 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/2 which returns an embeddable representation of regex in another regex
  • [String] Add String.count/2 to count occurrences of a pattern

ExUnit

  • [ExUnit.CaptureLog] Parallelize log dispatch when multiple processes are capturing log
  • [ExUnit.Case] Add :test_group to the test context
  • [ExUnit.Doctest] Support ellipsis in doctest exceptions to match the remaining of the exception
  • [ExUnit.Doctest] Add :inspect_opts option for doctest

IEx

  • [IEx] Support multi-line prompts (due to this feature, :continuation_prompt and :alive_continuation_prompt are 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_FLAGS to configure MIX_PROFILE
  • [mix compile] Debug the compiler and type checker PID when MIX_DEBUG=1 and compilation/verification thresholds are met
  • [mix compile] Add Mix.Tasks.Compiler.reenable/1
  • [mix deps.compile] Support MIX_OS_DEPS_COMPILE_PARTITION_COUNT for compiling deps concurrently across multiple operating system processes
  • [mix help] Add mix help Mod, mix help :mod, mix help Mod.fun and mix 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 --source is 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.key now raises BadMapError for consistency with other map operations
  • [Regex] 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)
  • [Stream] Ensure Stream.transform/5 respects suspend command when its inner stream halts
  • [URI] Several fixes to URI.merge/2 related 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_CONFIG for 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_fits is deprecated in favor of optimistic/pessimistic groups
  • [Node] Node.start/2-3 is deprecated in favor of Node.start/2 with a keyword list

Mix

  • [mix compile] --no-protocol-consolidation is deprecated in favor of --no-consolidate-protocols for consistency with mix.exs configuration
  • [mix compile.protocols] Protocol consolidation is now part of compile.elixir and has no effect

4. Hard deprecations

Elixir

  • [Code] The on_undefined_variable: :warn is 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/3 is deprecated, pass it as a on_conflict: callback option instead
  • [File] Passing a callback as third argument to File.cp_r/3 is deprecated, pass it as a on_conflict: callback option 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: true as an option is required on compile, compile_to_path and require

Logger

  • [Logger] The :backends configuration is deprecated, either set the :default_handler to false or start backends in your application start callback

Mix

  • [mix] 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
  • [mix do] Using commas as task separator in mix do (such as mix do foo, bar) is deprecated, use + instead (as in mix do foo + bar)

v1.18.4

21 May 13:51

Choose a tag to compare

This release includes initial support for Erlang/OTP 28, for those who want to try it out. In such cases, you may use Elixir v1.18.4 precompiled for Erlang/OTP 27, as it is binary compatible with Erlang/OTP 28. Note, however, that Erlang/OTP 28 no longer allows regexes to be defined in the module body and interpolated into an attribute. If you do this:

@some_attribute ~r/foo/
def some_fun, do: @some_attribute

You must rewrite it to:

def some_fun, do: ~r/foo/

1. Enhancements

IEx

  • [IEx.Helpers] Add IEx.Helpers.process_info/1 which prints process information

Mix

  • [mix compile] Support the --no-listeners option
  • [mix local] Retry HTTP requests with disabled middlebox comp mode depending on the failure reason
  • [mix local.hex] Install Hex per OTP release
  • [mix local.rebar] Install Hex per OTP release
  • [mix run] Support the --no-listeners option

2. Bug fixes

Elixir

  • [Kernel] Emit trace events for @on_definition callbacks
  • [Kernel] Emit trace events for @on_load callbacks
  • [Kernel] Emit trace events for super calls
  • [Kernel] Emit trace events for imported function calls
  • [Kernel] Optimize map unions to avoid building long lists
  • [Kernel] Do not crash when type checking nested bitstrings in patterns
  • [Kernel] Do not crash when non-binary bitstring is given as struct default value
  • [Kernel] Recompile regexes when escaped from module attributes for Erlang/OTP 28 compatibility
  • [Kernel] Preserve backwards compatibility in elixir_erl

Mix

  • [mix deps.get] Ensure git checkout works when there are untracked files in the dependency
  • [mix loadpaths] Do not run listeners when not checking the deps

v1.18.3

06 Mar 10:11

Choose a tag to compare

1. Enhancements

Elixir

  • [JSON] Encode any JSON key to string
  • [Kernel] Allow <<_::3*8>> in typespecs

Mix

  • [mix loadpaths] Support --no-listeners option

2. Bug fixes

Elixir

  • [CLI] Fix --no-color not setting :ansi_enabled to false
  • [Protocol] Return correct implementation for an invalid struct pointing to nil
  • [Stream] Do not raise when Stream.cycle/1 is explicitly halted

ExUnit

  • [ExUnit.Diff] Fix regression when diffing nested improper lists

IEx

  • [IEx.Autocomplete] Fix autocomplete crash when expanding struct with __MODULE__
  • [IEx.Helpers] Do not purge on recompile if IEx is not running

v1.18.2

22 Jan 17:04

Choose a tag to compare

1. Enhancements

Elixir

  • [CLI] Add --color/--no-color for enabling and disabling of ANSI colors
  • [Code.Fragment] Provide more AST context when invoking container_cursor_to_quoted with trailing fragments
  • [Regex] Ensure compatibility with Erlang/OTP 28+ new Regex engine

Mix

  • [mix] Print compilation lock waiting message to stderr
  • [mix] Add an environment variable to optionally disable compilation locking

2. Bug fixes

Elixir

  • [CLI] Temporarily remove PowerShell scripts for elixir, elixirc, and mix on Windows, as they leave the shell broken after quitting Erlang

ExUnit

  • [ExUnit] Fix crash when diffing bitstring specifiers

IEx

  • [IEx.Autocomplete] Fix crashing whhen autocompleting structs with runtime values

Mix

  • [mix] Track compilation locks per user to avoid permission errors
  • [mix deps.update] Ensure Git dependencies can be upgraded by doing so against the origin

v1.18.1

24 Dec 09:26

Choose a tag to compare

1. Enhancements

  • [Kernel] Do not emit type violation warnings when comparing or matching against literals
  • [Kernel] Do not validate clauses of private overridable functions

2. Bug fixes

Elixir

  • [Code.Fragment] Ensure Code.Fragment.container_cursor_to_quoted/2 with :trailing_fragment parses expressions that were supported in previous versions
  • [Kernel] Do not crash when typing violation is detected on dynamic dispatch
  • [Kernel] Properly annotate the source for warnings emitted by the compiler with the @file annotation
  • [Kernel] Properly annotate the source for warnings emitted by the type system with the @file annotation
  • [Kernel] Remove :no_parens metadata when using capture with arity on all cases
  • [Kernel] Ensure diagnostic traces are kept backwards compatible

ExUnit

  • [ExUnit.Case] Ensure async groups do not run concurrenly while the test suite is still loading
  • [ExUnit.Case] Ensure --repeat-until-failure can be combined with groups

Mix

  • [mix compile.elixir] Store compilation results if compilation fails due to --warnings-as-errors
  • [mix deps.loadpaths] Add build lock
  • [mix escript.build] Ensure build succeeds when protocol consolidation is disabled
  • [Mix.Shell] Ensure encoding is properly respected on Windows and Unix systems

v1.18.0

19 Dec 17:39

Choose a tag to compare

Official announcement: https://elixir-lang.org/blog/2024/12/19/elixir-v1-18-0-released/

1. Enhancements

Elixir

  • [CLI] Add experimental PowerShell scripts for elixir, elixirc, and mix on Windows. Those provide a safer entry point for running Elixir from other platforms
  • [Calendar] Add Duration.to_string/1
  • [Code] Support several migration options in Code.format_string!/2
  • [Code] Add parenthesis around -- and --- in Code.format_string!/2 to make precedence clearer
  • [Code] Include more metadata in Code.string_to_quoted/2 when token_metadata: true to help compute ranges from the AST
  • [Code.Fragment] Have :capture_arg as its own entry in Code.Fragment.surround_context/2
  • [Config] Add Config.read_config/1
  • [Enumerable] Add Enum.product_by/2 and Enum.sum_by/2
  • [Exception] Add MissingApplicationsError exception to denote missing applications
  • [JSON] Add a new JSON module with encoding and decoding functionality
  • [JSON] Implement JSON.Encoder for all Calendar types
  • [Kernel] Update source code parsing to match UTS #55 latest recommendations. In particular, mixed script is allowed in identifiers as long as they are separate by underscores (_), such as http_сервер. Previously allowed highly restrictive identifiers, which mixed Latin and other scripts, such as the japanese word for t-shirt, Tシャツ, now require the underscore as well
  • [Kernel] Warn on bidirectional confusability in identifiers
  • [Kernel] Verify the type of the binary generators
  • [Kernel] Track the type of tuples in patterns and inside elem/2
  • [Kernel] Perform validation of root AST nodes in unquote and unquote_splicing to catch bugs earlier
  • [Kernel] Add source, behaviour, and record information to Docs chunk metadata
  • [Kernel] Support deterministic builds in tandem with Erlang by setting ERL_COMPILER_OPTIONS=deterministic. Keep in mind deterministic builds strip source and other compile time information, which may be relevant for programs
  • [Kernel] Allow aliases and imports to be enabled conditionally in module body
  • [List] Add List.ends_with?/2
  • [Macro] Improve dbg handling of if/2, with/1 and of code blocks
  • [Macro] Add Macro.struct_info!/2 to return struct information mirroring mod.__info__(:struct)
  • [Registry] Add Registry.lock/3 for local locking
  • [PartitionSupervisor] Add PartitionSupervisor.resize!/2 to resize the number of partitions in a supervisor (up to the limit it was started with)
  • [Process] Handle arbitrarily high integer values in Process.sleep/1
  • [Protocol] Add @undefined_impl_description to customize error message when an implementation is undefined
  • [Protocol] Add __deriving__/1 as optional macro callback to Protocol, no longer requiring empty implementations
  • [String] Inspect special whitespace and zero-width characters using their Unicode representation
  • [String] Update Unicode to 16.0

ExUnit

  • [ExUnit] Support parameterized tests on ExUnit.Case
  • [ExUnit] Support test groups: tests in the same group never run concurrently
  • [ExUnit.Case] Add test_pid as a tag

IEx

  • [IEx] Add IEx.configure(auto_reload: true) to automatically pick up modules recompiled from other operating system processes
  • [IEx] Add :dot_iex support to IEx.configure/1
  • [IEx] Add report for normal/shutdown exits in IEx

Mix

  • [mix compile] Ensure only a single operating system process can compile at a given time
  • [mix deps.get] Ensure only a single operating system process can fetch deps at a given time
  • [mix format] Add mix format --migrate to migrate from deprecated functionality
  • [mix format] Add new options and metadata to improve formatting applying by editors and other environments
  • [mix test] Taint failure manifest if requiring or compiling tests fail
  • [Mix.Project] Add a :listeners configuration to listen to compilation events from the current and other operating system processes
  • [Mix.Task.Compiler] Add API for fetching all persisted compiler diagnostics
  • [Mix.Task.Compiler] Add API for fetching all compiler tasks

2. Bug fixes

Elixir

  • [Code] Fix delimiter metadata for single quoted atoms and remote calls in Code.string_to_quoted/2
  • [Code.Formatter] Fix formatter adding extra escapes to quoted remote calls
  • [Code.Fragment] Properly handle keyword keys as their own entry
  • [Inspect.Algebra] Ensure next_break_fits respects line_length
  • [Kernel] Validate AST on unquote and unquote_splicing to provide better error reports instead of failing too late inside the compiler
  • [Kernel] Avoid crashes when emitting diagnostics on code using \t for indentation
  • [Module] Include module attribute line and name when tracing its aliases
  • [Stream] Do not halt streams twice in Stream.transform/5
  • [URI] Fix a bug when a schemaless URI is given to URI.merge/2

ExUnit

  • [ExUnit.Assertions] Raise if guards are used in assert/1 with =
  • [ExUnit.Assertions] Format inserted/deleted maps in list assertions

IEx

  • [IEx.Helpers] IEx.Helpers.recompile/0 will reload modules changed by other operating system processes

Mix

  • [mix compile] Ensure warnings from external resources are emitted with --all-warnings when files do not change
  • [mix deps.compile] Fix escaping issues when invoking rebar3 in some cases
  • [mix escript] Fix escript layout and support storing priv directories
  • [mix release] Make .app files deterministic in releases
  • [Mix.Shell] Fix Mix.Shell on Windows when outputting non UTF-8 characters

3. Soft deprecations (no warnings emitted)

Elixir

  • [Inspect.Algebra] color/3 is deprecated in favor of color_doc/3
  • [Inspect.Algebra] fold_doc/2 is deprecated in favor of fold/2
  • [Kernel] Deprecate unless in favor of if. Use mix format --migrate to automate the migration
  • [Macro] Macro.struct!/2 is deprecated in favor of Macro.struct_info!/2
  • [Protocol] Defining __deriving__/3 inside the Any implementation is deprecated, derive it inside the protocol definition itself

4. Hard deprecations

EEx

  • [EEx] <%# is deprecated in favor of <%!-- or <% #
  • [EEx] c:EEx.handle_text/2 is deprecated in favor of c:EEx.handle_text/3

Elixir

  • [Code] Setting :warnings_as_errors is deprecated via Code.put_compiler_option/2. This must not affect developers, as the :warnings_as_errors option is managed by Mix tasks, and not directly used via the Code module
  • [Enumerable] Deprecate returning a two-arity function in Enumerable.slice/1
  • [List] List.zip/1 is deprecated in favor of Enum.zip/1
  • [Module] Deprecate Module.eval_quoted/3 in favor of Code.eval_quoted/3
  • [Range] Deprecate inferring negative ranges on Range.new/2
  • [Tuple] Tuple.append/2 is deprecated, use Tuple.insert_at/3 instead

Mix

  • [mix cmd] Deprecate mix cmd --app APP in favor of mix do --app APP
  • [mix compile] :warnings_as_errors configuration in :elixirc_options is deprecated. Instead pass the --warnings-as-errors flag to mix compile. Alternatively, you might alias the task: aliases: [compile: "compile --warnings-as-errors"]
  • [mix test] :warnings_as_errors configuration in :test_elixirc_options is deprecated. Instead pass the --warnings-as-errors flag to mix test. Alternatively, you might alias the task: aliases: [test: "test --warnings-as-errors"]
  • [Mix.Tasks.Compile] Deprecate compilers/0 in favor of Mix.Task.Compiler.compilers/0

v1.17

The CHANGELOG for v1.17 releases can be found in the v1.17 branch.

v1.18.0-rc.0

10 Dec 17:47

Choose a tag to compare

v1.18.0-rc.0 Pre-release
Pre-release

1. Enhancements

Elixir

  • [CLI] Add experimental PowerShell scripts for elixir, elixirc, and mix on Windows. Those provide a safer entry point for running Elixir from other platforms
  • [Calendar] Add Duration.to_string/1
  • [Code] Support several migration options in Code.format_string!/2
  • [Code] Add parenthesis around -- and --- in Code.format_string!/2 to make precedence clearer
  • [Code] Include more metadata in Code.string_to_quoted/2 when token_metadata: true to help compute ranges from the AST
  • [Code.Fragment] Have :capture_arg as its own entry in Code.Fragment.surround_context/2
  • [Config] Add Config.read_config/1
  • [Enumerable] Add Enum.product_by/2 and Enum.sum_by/2
  • [Exception] Add MissingApplicationsError exception to denote missing applications
  • [Kernel] Update source code parsing to match UTS #55 latest recommendations. In particular, mixed script is allowed in identifiers as long as they are separate by underscores (_), such as http_сервер. Previously allowed highly restrictive identifiers, which mixed Latin and other scripts, such as the japanese word for t-shirt, Tシャツ, now require the underscore as well
  • [Kernel] Warn on bidirectional confusability in identifiers
  • [Kernel] Verify the type of the binary generators
  • [Kernel] Track the type of tuples in patterns and inside elem/2
  • [Kernel] Perform validation of root AST nodes in unquote and unquote_splicing to catch bugs earlier
  • [Kernel] Add source, behaviour, and record information to Docs chunk metadata
  • [Kernel] Support deterministic builds in tandem with Erlang by setting ERL_COMPILER_OPTIONS=deterministic. Keep in mind deterministic builds strip source and other compile time information, which may be relevant for programs
  • [Kernel] Allow aliases and imports to be enabled conditionally in module body
  • [List] Add List.ends_with?/2
  • [Macro] Improve dbg handling of if/2, with/1 and of code blocks
  • [Macro] Add Macro.struct_info!/2 to return struct information mirroring mod.__info__(:struct)
  • [Registry] Add Registry.lock/3 for local locking
  • [PartitionSupervisor] Add PartitionSupervisor.resize!/2 to resize the number of partitions in a supervisor (up to the limit it was started with)
  • [Process] Handle arbitrarily high integer values in Process.sleep/1
  • [Protocol] Add @undefined_impl_description to customize error message when an implementation is undefined
  • [Protocol] Add __deriving__/1 as optional macro callback to Protocol, no longer requiring empty implementations
  • [String] Inspect special whitespace and zero-width characters using their Unicode representation
  • [String] Update Unicode to 16.0

ExUnit

  • [ExUnit] Support parameterized tests on ExUnit.Case
  • [ExUnit] Support test groups: tests in the same group never run concurrently
  • [ExUnit.Case] Add test_pid as a tag

IEx

  • [IEx] Add :dot_iex support to IEx.configure/1
  • [IEx] Add report for normal/shutdown exits in IEx

Mix

  • [mix compile] Ensure only a single operating system process can compile at a given time
  • [mix deps.get] Ensure only a single operating system process can fetch deps at a given time
  • [mix format] Add mix format --migrate to migrate from deprecated functionality
  • [mix format] Add new options and metadata to improve formatting applying by editors and other environments
  • [mix test] Taint failure manifest if requiring or compiling tests fail
  • [Mix.Project] Add a :listeners configuration to listen to compilation events from the current and other operating system processes
  • [Mix.Task.Compiler] Add API for fetching all persisted compiler diagnostics
  • [Mix.Task.Compiler] Add API for fetching all compiler tasks

2. Bug fixes

Elixir

  • [Code] Fix delimiter metadata for single quoted atoms and remote calls in Code.string_to_quoted/2
  • [Code.Formatter] Fix formatter adding extra escapes to quoted remote calls
  • [Code.Fragment] Properly handle keyword keys as their own entry
  • [Inspect.Algebra] Ensure next_break_fits respects line_length
  • [Kernel] Validate AST on unquote and unquote_splicing to provide better error reports instead of failing too late inside the compiler
  • [Module] Include module attribute line and name when tracing its aliases
  • [Stream] Do not halt streams twice in Stream.transform/5
  • [URI] Fix a bug when a schemaless URI is given to URI.merge/2

ExUnit

  • [ExUnit.Assertions] Raise if guards are used in assert/1 with =
  • [ExUnit.Assertions] Format inserted/deleted maps in list assertions

IEx

  • [IEx.Helpers] IEx.Helpers.recompile/0 will reload modules changed by other operating system processes

Mix

  • [mix compile] Ensure warnings from external resources are emitted with --all-warnings when files do not change
  • [mix deps.compile] Fix escaping issues when invoking rebar3 in some cases
  • [mix escript] Fix escript layout and support storing priv directories
  • [mix release] Make .app files deterministic in releases
  • [Mix.Shell] Fix Mix.Shell on Windows when outputting non UTF-8 characters

3. Soft deprecations (no warnings emitted)

Elixir

  • [Inspect.Algebra] color/3 is deprecated in favor of color_doc/3
  • [Inspect.Algebra] fold_doc/2 is deprecated in favor of fold/2
  • [Kernel] Deprecate unless in favor of if. Use mix format --migrate to automate the migration
  • [Macro] Macro.struct!/2 is deprecated in favor of Macro.struct_info!/2
  • [Protocol] Defining __deriving__/3 inside the Any implementation is deprecated, derive it inside the protocol definition itself

4. Hard deprecations

EEx

  • [EEx] <%# is deprecated in favor of <%!-- or <% #
  • [EEx] c:EEx.handle_text/2 is deprecated in favor of c:EEx.handle_text/3

Elixir

  • [Code] Setting :warnings_as_errors is deprecated via Code.put_compiler_option/2. This must not affect developers, as the :warnings_as_errors option is managed by Mix tasks, and not directly used via the Code module
  • [Enumerable] Deprecate returning a two-arity function in Enumerable.slice/1
  • [List] List.zip/1 is deprecated in favor of Enum.zip/1
  • [Module] Deprecate Module.eval_quoted/3 in favor of Code.eval_quoted/3
  • [Range] Deprecate inferring negative ranges on Range.new/2
  • [Tuple] Tuple.append/2 is deprecated, use Tuple.insert_at/3 instead

Mix

  • [mix cmd] Deprecate mix cmd --app APP in favor of mix do --app APP
  • [Mix.Tasks.Compile] Deprecate compilers/0 in favor of Mix.Task.Compiler.compilers/0

v1.17.3

18 Sep 12:50

Choose a tag to compare

1. Bug fixes

Elixir

  • [Duration] Fix parsing of fractional durations with non-positive seconds
  • [Kernel] Do not attempt to group module warnings when they have a large context

IEx

  • [IEx.Helpers] Properly reconsolidate protocols on recompile

Mix

  • [mix compile.elixir] Do not verify modules twice
  • [mix xref] Respect the --label option on stats and cycles

v1.17.2

06 Jul 21:20

Choose a tag to compare

1. Bug fixes

Logger

  • [Logger.Translator] Fix logger crash when :gen_statem's format_status/2 returns non-tuple

Mix

  • [mix deps.get] Fix regression when fetching a git repository with a :ref
  • [mix release] Validate RELEASE_MODE and set ERRORLEVEL on .bat scripts
  • [mix release] Fix invalid example in code comment inside the generated vm.args.eex

v1.17.1

18 Jun 11:22

Choose a tag to compare

1. Enhancements

Mix

  • [mix compile.elixir] Do not run fixpoint computation on runtime dependencies. This should considerably improve compilation times for large projects when changing only one or two files

2. Bug fixes

EEx

  • [EEx] Do not warn for assignment with blocks in EEx

Elixir

  • [Kernel] Fix bug when using pinned variables inside with's else patterns
  • [Kernel] Fix Dialyzer error when with else clause is calling a no_return function

ExUnit

  • [ExUnit] Do not alternative sync/async suites on --repeat-until-failure