Skip to content

Conversation

@renovate
Copy link

@renovate renovate bot commented Nov 20, 2022

This PR contains the following updates:

Package Update Change
elixir (source) minor 1.13.2-otp-24 -> 1.19.2

Release Notes

elixir-lang/elixir (elixir)

v1.19.2

Compare Source

1. Enhancements
Elixir
  • [Kernel] Measure and optimize writing of .beam files in the compiler
  • [Kernel] Optimize rare scenarios where type checking took too long
Mix
  • [mix compile] Add flag --no-check-cwd to skip compiler check to aid debugging
2. Bug fixes
Elixir
  • [IO] Fix dialyzer warning on IO.inspect :label
  • [Kernel] Ensure we warn on deprecated ~~~ unary operator
Logger
  • [Logger] Reset ansi escapes before newlines in Logger
Mix
  • [mix compile] Warn if elixirc_paths is not a list of string paths
  • [mix compile] Address regression where umbrella children were compiled too early and without respecting compilation flags
  • [mix deps.compile] Improve reliability of MIX_OS_DEPS_COMPILE_PARTITION_COUNT across mix escript.install, mix archive.install, and others

v1.19.1

Compare Source

1. Bug fixes
EEx
  • [EEx] Address Dialyzer warnings when invoking EEx.compile_string
Elixir
  • [Kernel] Optimize how types are computed for pretty printing
  • [Kernel] Optimize how differences are computed in the type system
  • [Macro] Do not escape options given to dbg/2
  • [Protocol] Improve protocol violation warnings
Mix
  • [mix compile] Do not attempt to touch deleted files when compilation fails and then resumed with missing files
  • [mix deps.compile] Do not spawn partitions when all dependencies are local and already compiled

v1.18.4

Compare Source

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

Compare Source

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

Compare Source

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

Compare Source

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

Compare Source

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.17.3

Compare Source

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

Compare Source

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

Compare Source

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

v1.17.0

Compare Source

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

1. Enhancements
Elixir
  • [Access] Add Access.find/1 that mirrors Enum.find/2
  • [Code] Support cursor inside fn/rescue/catch/else/after inside Code.Fragment.container_cursor_to_quoted/2
  • [Date] Add Date.shift/2 to shift dates with duration and calendar-specific semantics
  • [Date] Allow Date to accept years outside of -9999..9999 range
  • [DateTime] Add DateTime.shift/2 to shift datetimes with duration and calendar-specific semantics
  • [Duration] Add a new Duration data type
  • [GenServer] Add c:GenServer.format_status/1 callback
  • [Kernel] Add Kernel.get_in/1 with safe nil-handling for access and structs
  • [Kernel] Add Kernel.is_non_struct_map/1 guard
  • [Kernel] Add Kernel.to_timeout/1
  • [Kernel] Emit warnings for undefined functions from modules defined within the same context as the caller code
  • [Kernel] Support integers in uppercase sigils
  • [Keyword] Add Keyword.intersect/2-3 to mirror the Map API
  • [Macro] Add Macro.Env.define_alias/4, Macro.Env.define_import/4, Macro.Env.define_require/4, Macro.Env.expand_alias/4, Macro.Env.expand_import/5, and Macro.Env.expand_require/6 to aid the implementation of language servers and embedded languages
  • [NaiveDateTime] Add NaiveDateTime.shift/2 to shift naive datetimes with duration and calendar-specific semantics
  • [Process] Add Process.set_label/1
  • [String] Add String.byte_slice/3 to slice a string to a maximum number of bytes while keeping it UTF-8 encoded
  • [System] Support use_stdio: false in System.cmd/3 and System.shell/2
  • [Time] Add Time.shift/2 to shift times with duration and calendar-specific semantics
ExUnit
  • [ExUnit] Propagate the test process itself as a caller in start_supervised
  • [ExUnit] Include max cases in ExUnit reports
IEx
  • [IEx.Helpers] Warns if recompile was called and the current working directory changed
  • [IEx.Helpers] Add c/0 as an alias to continue/0
  • [IEx.Pry] Add IEx.Pry.annotate_quoted/3 to annotate a quoted expression with pry breakpoints
Logger
  • [Logger] Format :gen_statem reports using Elixir data structures
  • [Logger] Include process label in logger events
Mix
  • [mix deps] Add :depth option to Mix.SCM.Git, thus supporting shallow clones of Git dependencies
  • [mix deps] Warn if :optional is used in combination with :in_umbrella
  • [mix deps.get] Do not add optional dependency requirements if its parent dep was skipped
  • [mix deps.tree] Add --umbrella-only to mix deps.tree
  • [mix profile.tprof] Add a new profiler, available on Erlang/OTP 27+, which can measure count, time, and heap usage
  • [mix test] Add mix test --breakpoints that sets up a breakpoint before each test that will run
  • [mix test] Add mix test --repeat-until-failure to rerun tests until a failure occurs
  • [mix test] Add mix test --slowest-modules to print slowest modules based on all of the tests they hold
  • [mix test] Generate cover HTML files in parallel
2. Bug fixes
Elixir
  • [bin/elixir.bat] Improve handling of quotes and exclamation marks in flags
  • [Code] Address a bug where AST nodes for (a -> b) were not wrapped as part of the literal encoder
  • [Kernel] Resolve inconsistencies of how .. and ... are handled at the AST level
  • [Kernel] Fix parsing precedence of ambiguous operators followed by containers
  • [Kernel] Do not expand code in quote bind_quoted: ... twice
  • [Kernel] Respect :line property when :file is given as option to quote
  • [Kernel] Do not crash on Macro.escape/2 when passing a quote triplet without valid meta
  • [Kernel] Avoid double tracing events when capturing a function
  • [Kernel] Fix a bug where captured arguments would conflict when a capture included a macro that also used captures
  • [Module] Return default value in Module.get_attribute/3 for persisted attributes which have not yet been written to
IEx
  • [IEx.Helpers] Update the history size whenever history is pruned
Mix
  • [mix deps] Fix error message for diverged SCM definition in sibling
3. Soft deprecations (no warnings emitted)
Elixir
  • [GenServer] Deprecate c:GenServer.format_status/2 callback to align with Erlang/OTP 25+
Mix
  • [mix profile.cprof] Deprecated in favor of the new mix profile.tprof
  • [mix profile.eprof] Deprecated in favor of the new mix profile.tprof
4. Hard deprecations
Elixir
  • [IO] Passing :all to IO.read/2 and IO.binread/2 is deprecated, pass :eof instead
  • [Kernel] Single-quote charlists are deprecated, use ~c instead
  • [Kernel] Deprecate escaping closing delimiter in uppercase sigils
  • [Range] left..right without explicit steps inside patterns and guards is deprecated, write left..right//step instead
  • [Range] Decreasing ranges, such as 10..1 without an explicit step is deprecated, write 10..1//-1 instead
ExUnit
  • [ExUnit.Case] register_test/4 is deprecated in favor of register_test/6 for performance reasons

v1.16.3

Compare Source

1. Bug fixes
Elixir
  • [bin/elixir] Properly handle the --dbg flag in Elixir's CLI
  • [Code.Formatter] Add brackets around keyword lists when formatting the left-hand side of when
  • [Kernel] Only infer size in pinned variable in binary strings when needed
  • [System] Add a note that arguments are unsafe when invoking .bat/.com scripts on Windows via System.cmd/3
  • [Port] Add a note that arguments are unsafe when invoking .bat/.com scripts on Windows
  • [URI] Ensure :undefined fields are properly converted to nil when invoking Erlang's API
Logger
  • [Logger] Ensure translators are persisted across logger restarts
Mix
  • [mix compile] Ensure compile paths are accessible during compilation

v1.16.2

Compare Source

1. Enhancements
Elixir
  • [Code] Emit :defmodule tracing event on module definition
Mix
  • [Mix] Add Mix.install_project_dir/0
  • [Mix] Add environment variable for reusing Mix.install/2 installation
  • [Mix.SCM] Add Mix.SCM.delete/1
2. Bug fixes
Elixir
  • [Code] Fix charlist formatting issue when a single-quoted charlist escapes a double-quote character
  • [Path] Fix regression on how Path.relative_to/2 dealt with "." as input
IEx
  • [IEx.Helpers] Discard mermaid fenced blocks from ansi docs
ExUnit
  • [ExUnit] Properly compared pinned values when building diffs

v1.16.1

Compare Source

1. Bug fixes
Elixir
  • [Code] Fix Code.quoted_to_algebra/2 for operator with :do key as operand
  • [Kernel.ParallelCompiler] Do not crash parallel compiler when it receives diagnostics from additional code evaluation
  • [Kernel.ParallelCompiler] Always log errors at the end of compilation
  • [String] Fix String.capitalize/1 with a single codepoint
IEx
  • [IEx] Fix autocompletion of function signatures on Erlang/OTP 26
  • [IEx] Do not assume $HOME is set
Mix
  • [mix deps.compile] Handle compilation of rebar3 dependencies when rebar3 is on a path with spaces on Unix
  • [mix test] Properly resolve relative paths when running tests from individual files
  • [mix test] Properly resolve Windows paths when running tests from individual files

v1.16.0

Compare Source

Official announcement: https://elixir-lang.org/blog/2023/12/22/elixir-v1-16-0-released/

1. Enhancements
EEx
  • [EEx] Include relative file information in diagnostics
Elixir
  • [Code] Add :emit_warnings for Code.string_to_quoted/2
  • [Code] Automatically include columns in parsing options
  • [Code] Introduce MismatchedDelimiterError for handling mismatched delimiter exceptions
  • [Code.Fragment] Handle anonymous calls in fragments
  • [Code.Formatter] Trim trailing whitespace on heredocs with \r\n
  • [File] Add :offset option to File.stream!/2
  • [Kernel] Auto infer size of matched variable in bitstrings
  • [Kernel] Preserve column information when translating typespecs
  • [Kernel] Suggest module names based on suffix and casing errors when the module does not exist in UndefinedFunctionError
  • [Kernel.ParallelCompiler] Introduce Kernel.ParallelCompiler.pmap/2 to compile multiple additional entries in parallel
  • [Kernel.SpecialForms] Warn if True/False/Nil are used as aliases and there is no such alias
  • [Macro] Add Macro.compile_apply/4
  • [Module] Add support for @nifs annotation from Erlang/OTP 25
  • [Module] Add support for missing @dialyzer configuration
  • [String] Update to Unicode 15.1.0
  • [String] Add String.replace_invalid/2
  • [Task] Add :limit option to Task.yield_many/2
Logger
  • [Logger] Add Logger.levels/0
Mix
  • [mix] Add MIX_PROFILE to profile a list of comma separated tasks
  • [mix archive.install] Support --sparse option
  • [mix compile.app] Warn if both :applications and :extra_applications are used
  • [mix compile.elixir] Pass original exception down to diagnostic :details when possible
  • [mix compile.elixir] Optimize scenario where there are thousands of files in lib/ and one of them is changed
  • [mix deps.clean] Emit a warning instead of crashing when a dependency cannot be removed
  • [mix escript.install] Support --sparse option
  • [mix release] Include include/ directory in releases
  • [mix test] Allow testing multiple file:line at once, such as mix test test/foo_test.exs:13 test/bar_test.exs:27
2. Bug fixes
Elixir
  • [Code] Keep quotes for atom keys in formatter
  • [Code.Fragment] Fix crash in Code.Fragment.surround_context/2 when matching on ->
  • [IO] Raise when using IO.binwrite/2 on terminated device (mirroring IO.write/2)
  • [Kernel] Do not expand aliases recursively (the alias stored in Macro.Env is already expanded)
  • [Kernel] Ensure dbg module is a compile-time dependency
  • [Kernel] Warn when a private function or macro uses unquote/1 and the function/macro itself is unused
  • [Kernel] Re-enabled compiler optimizations for top level functions in scripts (disabled in v1.14.0 but shouldn't impact most programs)
  • [Kernel] Do not define an alias for nested modules starting with Elixir. in their definition
  • [Kernel.ParallelCompiler] Consider a module has been defined in @after_compile callbacks to avoid deadlocks
  • [Macro] Address exception on Macro.to_string/1 for certain ASTs
  • [Path] Lazily evaluate File.cwd!/0 in Path.expand/1 and Path.absname/1
  • [Path] Ensure Path.relative_to/2 returns a relative path when the given argument does not share a common prefix with cwd
ExUnit
  • [ExUnit] Raise on incorrectly dedented doctests
IEx
  • [IEx.Pry] Fix prying functions with only literals in their body
Mix
  • [mix archive.install] Restore code paths after mix archive.install
  • [mix compile] Ensure files with duplicate modules are recompiled whenever any of the files change
  • [mix compile] Update Mix compiler diagnostics documentation and typespecs to match the Elixir compiler behaviour where both lines and columns start from one (before it inaccurately said that columns started from zero)
  • [mix escript.install] Restore code paths after mix escript.install
3. Soft deprecations (no warnings emitted)
Elixir
  • [File] Deprecate File.stream!(file, options, line_or_bytes) in favor of keeping the options as last argument, as in File.stream!(file, line_or_bytes, options)
  • [Kernel.ParallelCompiler] Deprecate Kernel.ParallelCompiler.async/1 in favor of Kernel.ParallelCompiler.pmap/2
  • [Path] Deprecate Path.safe_relative_to/2 in favor of Path.safe_relative/2
Mix
  • [mix compile] Returning a four-element tuple as a position in Mix.Task.Compiler.Diagnostic
4. Hard deprecations
Elixir
  • [Date] Deprecate inferring a range with negative step, call Date.range/3 with a negative step instead
  • [Enum] Deprecate passing a range with negative step on Enum.slice/2, give first..last//1 instead
  • [Kernel] ~R/.../ is deprecated in favor of ~r/.../. This is because ~R/.../ still allowed escape codes, which did not fit the definition of uppercase sigils
  • [String] Deprecate passing a range with negative step on String.slice/2, give first..last//1 instead
ExUnit
  • [ExUnit.Formatter] Deprecate format_time/2, use format_times/1 instead
Mix
  • [mix compile.leex] Require :leex to be added as a compiler to run the leex compiler
  • [mix compile.yecc] Require :yecc to be added as a compiler to run the yecc compiler

v1.15.8

Compare Source

1. Bug fixes
Elixir
  • [bin/elixir] Properly handle the --dbg flag in Elixir's CLI
  • [System] Add a note that arguments are unsafe when invoking .bat/.com scripts on Windows via System.cmd/3
  • [Port] Add a note that arguments are unsafe when invoking .bat/.com scripts on Windows
  • [URI] Ensure :undefined fields are properly converted to nil when invoking Erlang's API
Logger
  • [Logger] Ensure translators are persisted across logger restarts
Mix
  • [mix compile] Ensure compile paths are accessible during compilation

v1.15.7

Compare Source

1. Enhancements
Elixir
  • [Elixir] Allow code evaluation across Elixir versions
2. Bug fixes
EEx
  • [EEx] Do not emit duplicate warnings from tokenizer
Mix
  • [mix format] Correctly match file to subdirectory in Mix.Tasks.Format.formatter_for_file/2

v1.15.6

Compare Source

This release also includes fixes to the Windows installer.

1. Bug fixes
EEx
  • [EEx] Do not crash when printing tokenizer warnings
Elixir
  • [Code] Fix formatter for nested * in bitstrings
  • [Code] Improve feedback when an invalid block is given Code.quoted_to_algebra/2
  • [Kernel] Trace functions before they are inlined
Mix
  • [mix compile] Ensure :extra_applications declare in umbrella projects are loaded
  • [mix deps.get] Do not check for invalid applications before deps.get
  • [mix deps.update] Do not check for invalid applications before deps.update
  • [mix format] Load plugins when invoking the formatter from an IDE

v1.15.5

Compare Source

1. Enhancements
IEx
  • [IEx.Autocomplete] Speed up loading of struct suggestions
2. Bug fixes
Elixir
  • [Code.Fragment] Fix Code.Fragment.surround_context/2 for aliases and submodules of non-aliases
  • [Kernel] Ensure stacktrace is included when necessary when rescuing multiple exceptions in the same branch
  • [Kernel] Fix index in error message for unused optional arguments
ExUnit
  • [ExUnit.Diff] Fix scenario where diff would not show up due to a timed-out loop
IEx
  • [IEx] Force group leader to run as a binary and unicode in IEx
Mix
  • [mix compile] Do not assume blake is always available
  • [mix format] Load and compile plugins if specified in subdirectories

v1.15.4

Compare Source

1. Bug fixes
Mix
  • [mix archive.build] Disable protocol consolidation when building archiveson archive.install
  • [mix compile] Track removed files per local dependency (this addresses a bug where files depending on modules from path dependencies always recompiled)
  • [mix release] Do not strip relevant chunks from Erlang/OTP 26

v1.15.3

Compare Source

1. Enhancements
Elixir
  • [Kernel] Improve better stacktraces when executing unnested Elixir code in a file
Mix
  • [Mix] Allow to opt out of starting apps in Mix.install/2
2. Bug fixes
Elixir
  • [Code] Ensure with_diagnostics propagate warnings from inner Erlang passes
IEx
  • [IEx] Fix --remsh on Erlang/OTP 25 and earlier
Mix
  • [mix compile.elixir] Ensure __mix_recompile__? callbacks are properly invoked

v1.15.2

Compare Source

1. Bug fixes
IEx
  • [IEx] Fix CLI being unable to boot on Windows

v1.15.1

Compare Source

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

Compare Source

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) to Calendar.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 and Code.ensure_all_loaded(!)/1
  • [Code] Add Code.prepend_paths/1, Code.append_paths/1, and Code.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 and Date.after?/2
  • [DateTime] Add DateTime.before?/2 and DateTime.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 and cond inside dbg/2
  • [Kernel] Add t:nonempty_binary/0 and t:nonempty_bitstring/0
  • [Kernel] Treat @behaviours 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 to warning: ...
  • [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 your mix.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 and Map.intersect/3
  • [MapSet] Add MapSet.split_with/2
  • [MapSet] Optimize most functions
  • [NaiveDateTime] Add NaiveDateTime.beginning_of_day/1 and NaiveDateTime.end_of_day/1
  • [NaiveDateTime] Add NaiveDateTime.before?/2 and NaiveDateTime.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 and Process.unalias/1
  • [Range] Add Range.split/2
  • [String] Update Unicode to version 15.0.0
  • [String] Add :fast_ascii mode to String.valid?/2
  • [Supervisor] Add support for automatic shutdown in Supervisor
  • [System] Support :lines in System.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 and Time.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 ExUnit setup 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, and require
  • [IEx.Autocomplete] Provide field completion on map and struct updates
  • [IEx.Helpers] Add runtime_info(:allocators)
  • [IEx.Info] Implement protocol for Range, DateTime, and Regex
Logger
  • [Logger] Add Logger.add_handlers/1 and Logger.default_formatter/1
  • [Logger] Introduce default_formatter and default_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 and module_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 returns nil and not the given default value when an attribute has been explicitly set as nil
  • [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 and File.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, and configure_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 of Logger.add_handlers/1
Mix
  • [Mix.Project] :preferred_cli_env is deprecated in favor of :preferred_envs in def cli
  • [Mix.Project] :preferred_cli_target is deprecated in favor of :preferred_targets in def cli
  • [mix local] The environment variable HEX_MIRROR is deprecated in favor of HEX_BUILDS_URL
4. Hard deprecations
Elixir
  • [Calendar] Calendar.ISO.day_of_week/3 is deprecated in favor of Calendar.ISO.day_of_week/4
  • [Exception] Exception.exception?/1 is deprecated in favor of Kernel.is_exception/1
  • [Kernel] Deprecate ... as a valid function call identifier
  • [Regex] Regex.regex?/1 is deprecated in favor of Kernel.is_struct/2
Logger
  • [Logger] Logger.warn/2 is deprecated in favor of Logger.warning/2

v1.14.5

Compare Source

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

Compare Source

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 to Inspect.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

Compare Source

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

Compare Source

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

Compare Source

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 and Macro.expand_literals/3
  • [System] Add :close_stdin to System.shell/2
Mix
  • [mix test] Accept --all-warnings option

2. Bug fixes

Elixir
  • [Kernel] Fix misleading warning when :uniq is given in for 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 after defstruct 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 and String.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 in URI.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

v1.14.0

Compare Source

Elixir v1.14 brings many improvements to the debugging experience in Elixir
and data-type inspection. It also includes a new abstraction for easy
partitioning of processes called PartitionSupervisor, as well as improved
compilation times and error messages.

Elixir v1.14 is the last version to support Erlang/OTP 23. Consider updating
to Erlang/OTP 24 or Erlang/OTP 25.

dbg

Kernel.dbg/2 is a new macro that's somewhat similar to IO.inspect/2, but
specifically tailored for debugging.

When called, it prints the value of whatever you pass to it, plus the debugged
code itself as well as its location. This code:

### In my_file.exs
feature = %{name: :dbg, inspiration: "Rust"}
dbg(feature)
dbg(Map.put(feature, :in_version, "1.14.0"))

Prints this:

$ elixir my_file.exs
[my_file.exs:2: (file)]
feature #=> %{inspiration: "Rust", name: :dbg}

[my_file.exs:3: (file)]
Map.put(feature, :in_version, "1.14.0") #=> %{in_version: "1.14.0", inspiration: "Rust", name: :dbg}

dbg/2 can do more. It's a macro, so it understands Elixir code. You can see
that when you pass a series of |> pipes to it. dbg/2 will print the value
for every step of the pipeline. This code:

### In dbg_pipes.exs
__ENV__.file
|> String.split("/", trim: true)
|> List.last()
|> File.exists?()
|> dbg()

Prints this:

$ elixir dbg_pipes.exs
[dbg_pipes.exs:5: (file)]
__ENV__.file #=> "/home/myuser/dbg_pipes.exs"
|> String.split("/", trim: true) #=> ["home", "myuser", "dbg_pipes.exs"]
|> List.last() #=> "dbg_pipes.exs"
|> File.exists?() #=> true
IEx and Prying

dbg/2 supports configurable backends. IEx automatically replaces the default
backend by one that halts the code execution with IEx.Pry, giving developers
the option to access local variables, imports, and more. This also works with
pipelines: if you pass a series of |> pipe calls to dbg (or pipe into it at the
end, like |> dbg()), you'll be able to step through every line in the pipeline.

You can keep the default behaviour by passing the --no-pry option to IEx.

PartitionSupervisor

PartitionSupervisor is a new module that implements a new supervisor type. The
partition supervisor is designed to help with situations where you have a single
supervised process that becomes a bottleneck. If that process's state can be
easily partitioned, then you can use PartitionSupervisor to supervise multiple
isolated copies of that process running concurrently, each assigned its own
partition.

For example, imagine you have an ErrorReporter process that you use to report
errors to a monitoring service.

### Application supervisor:
children = [

### ...,
  ErrorReporter
]

Supervisor.start_link(children, strategy: :one_for_one)

As the concurrency of your application goes up, the ErrorReporter process
might receive requests from many other processes and eventually become a
bottleneck. In a case like this, it could help to spin up multiple copies of the
ErrorReporter process under a PartitionSupervisor.

### Application supervisor
children = [
  {PartitionSupervisor, child_spec: ErrorReporter, name: Reporters}
]

The PartitionSupervisor will spin up a number of processes equal to
System.schedulers_online() by default (most often one per core). Now, when
routing requests to ErrorReporter processes we can use a :via tuple and
route the requests through the partition supervisor.

partitioning_key = self()
ErrorReporter.report({:via, PartitionSupervisor, {Reporters, partitioning_key}}, error)

Using self() as the partitioning key here means that the same process will
always report errors to the same ErrorReporter process, ensuring a form of
back-pressure. You can use any term as the partitioning key.

A Common Example

A common and practical example of a good use case for PartitionSupervisor is
partitioning something like a DynamicSupervisor. When starting many processes
un


Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot enabled auto-merge (rebase) November 20, 2022 12:08
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from 6a6daab to 61d9532 Compare March 16, 2023 17:37
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.14.2 chore(deps): update dependency elixir to v1.14.3 Mar 16, 2023
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.14.3 chore(deps): update dependency elixir to v1.14.4 Apr 3, 2023
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from 61d9532 to d59938e Compare April 3, 2023 10:18
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from d59938e to e39bf7f Compare May 28, 2023 09:15
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.14.4 chore(deps): update dependency elixir to v1.14.5 May 28, 2023
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from e39bf7f to d08b259 Compare June 19, 2023 13:01
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.14.5 chore(deps): update dependency elixir to v1.15.0 Jun 19, 2023
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from d08b259 to 13e23ff Compare June 30, 2023 17:09
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.15.0 chore(deps): update dependency elixir to v1.15.1 Jun 30, 2023
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from 13e23ff to e52c2d0 Compare July 1, 2023 21:14
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.15.1 chore(deps): update dependency elixir to v1.15.2 Jul 1, 2023
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from e52c2d0 to 8b69ae5 Compare July 15, 2023 10:04
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.15.2 chore(deps): update dependency elixir to v1.15.3 Jul 15, 2023
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from 8b69ae5 to aeda573 Compare July 18, 2023 13:20
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.15.3 chore(deps): update dependency elixir to v1.15.4 Jul 18, 2023
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from aeda573 to f14b298 Compare August 28, 2023 23:26
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.15.4 chore(deps): update dependency elixir to v1.15.5 Aug 28, 2023
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from f14b298 to 4495db9 Compare September 20, 2023 10:14
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.15.5 chore(deps): update dependency elixir to v1.15.6 Sep 20, 2023
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from 4495db9 to 6d1a3a7 Compare October 14, 2023 13:37
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.15.6 chore(deps): update dependency elixir to v1.15.7 Oct 14, 2023
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from 6d1a3a7 to fd9227d Compare December 22, 2023 19:37
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.15.7 chore(deps): update dependency elixir to v1.16.0 Dec 22, 2023
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from fd9227d to 030c6cc Compare January 31, 2024 10:47
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.16.0 chore(deps): update dependency elixir to v1.16.1 Jan 31, 2024
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from 030c6cc to 048da4d Compare March 10, 2024 14:30
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.16.1 chore(deps): update dependency elixir to v1.16.2 Mar 10, 2024
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from 048da4d to fd25d77 Compare May 21, 2024 00:41
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.16.2 chore(deps): update dependency elixir to v1.16.3 May 21, 2024
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from fd25d77 to 5736f8d Compare June 12, 2024 11:23
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.16.3 chore(deps): update dependency elixir to v1.17.0 Jun 12, 2024
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from 5736f8d to b6fdfb3 Compare June 18, 2024 12:25
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.17.0 chore(deps): update dependency elixir to v1.17.1 Jun 18, 2024
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from b6fdfb3 to ede4633 Compare July 7, 2024 00:03
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.17.1 chore(deps): update dependency elixir to v1.17.2 Jul 7, 2024
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from ede4633 to b058fe1 Compare September 18, 2024 17:02
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.17.2 chore(deps): update dependency elixir to v1.17.3 Sep 18, 2024
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from b058fe1 to 25f5191 Compare December 19, 2024 18:29
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.17.3 chore(deps): update dependency elixir to v1.18.0 Dec 19, 2024
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from 25f5191 to c7e40d3 Compare December 27, 2024 23:23
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.18.0 chore(deps): update dependency elixir to v1.18.1 Dec 27, 2024
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from c7e40d3 to 2c6b988 Compare January 22, 2025 17:15
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.18.1 chore(deps): update dependency elixir to v1.18.2 Jan 22, 2025
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from 2c6b988 to 676eb8a Compare March 6, 2025 12:00
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.18.2 chore(deps): update dependency elixir to v1.18.3 Mar 6, 2025
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from 676eb8a to 2911433 Compare May 21, 2025 17:01
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.18.3 chore(deps): update dependency elixir to v1.18.4 May 21, 2025
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from 2911433 to 6982384 Compare October 20, 2025 17:01
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.18.4 chore(deps): update dependency elixir to v1.19.1 Oct 20, 2025
@renovate renovate bot force-pushed the renovate/elixir-1.x branch from 6982384 to d5b3c37 Compare November 2, 2025 13:54
@renovate renovate bot changed the title chore(deps): update dependency elixir to v1.19.1 chore(deps): update dependency elixir to v1.19.2 Nov 2, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant