Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(deps): update dependency elixir to v1.17.3 #70

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented Jan 23, 2024

This PR contains the following updates:

Package Update Change
elixir (source) minor 1.10.2-otp-22 -> 1.17.3

Release Notes

elixir-lang/elixir (elixir)

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

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

This release includes type inference of patterns to provide warnings for an initial set of constructs (binaries, maps, and atoms) within the same function. It also includes a new Duration data type to interact with Calendar types, support for Erlang/OTP 27, and many other improvements.

Warnings from gradual set-theoretic types

This release introduces gradual set-theoretic types to infer types from patterns and use them to type check programs, enabling the Elixir compiler to find faults and bugs in codebases without requiring changes to existing software. The underlying principles, theory, and roadmap of our work have been outlined in "The Design Principles of the Elixir Type System" by Giuseppe Castagna, Guillaume Duboc, José Valim.

At the moment, Elixir developers will interact with set-theoretic types only through warnings found by the type system. The current implementation models all data types in the language:

  • binary(), integer(), float(), pid(), port(), reference() - these types are indivisible. This means both 1 and 13 get the same integer() type.

  • atom() - it represents all atoms and it is divisible. For instance, the atom :foo and :hello_world are also valid (distinct) types.

  • map() and structs - maps can be "closed" or "open". Closed maps only allow the specified keys, such as %{key: atom(), value: integer()}. Open maps support any other keys in addition to the ones listed and their definition starts with ..., such as %{..., key: atom(), value: integer()}. Structs are closed maps with the __struct__ key.

  • tuple(), list(), and function() - currently they are modelled as indivisible types. The next Elixir versions will also introduce fine-grained support to them.

We focused on atoms and maps on this initial release as they are respectively the simplest and the most complex types representations, so we can stress the performance of the type system and quality of error messages. Modelling these types will also provide the most immediate benefits to Elixir developers. Assuming there is a variable named user, holding a %User{} struct with an address field, Elixir v1.17 will emit the following warnings at compile-time:

  • Pattern matching against a map or a struct that does not have the given key, such as %{adress: ...} = user (notice address vs adress)

  • Accessing a key on a map or a struct that does not have the given key, such as user.adress

  • Updating a struct or a map that does not define the given key, such as %{user | adress: ...}

  • Invoking a function on non-modules, such as user.address()

  • Capturing a function on non-modules, such as &user.address/0

  • Attempting to invoke to call an anonymous function without an actual function, such as user.()

  • Performing structural comparisons with structs, such as my_date < ~D[2010-04-17]

  • Performing structural comparisons between non-overlapping types, such as integer >= string

  • Building and pattern matching on binaries without the relevant specifiers, such as <<name>> (this warns because by default it expects an integer, it should have been <<name::binary>> instead)

  • Attempting to rescue an undefined exception or a struct that is not an exception

  • Accessing a field that is not defined in a rescued exception

These new warnings help Elixir developers find bugs earlier and give more confidence when refactoring code, especially around maps and structs. While some of these warnings were emitted in the past, they were discovered using syntax analysis. The new warnings are more reliable, precise, and with better error messages. Keep in mind, however, that the Elixir typechecker only infers types from patterns within the same function at the moment. Analysis from guards and across function boundaries will be added in future relases. For more details, see our new reference document on gradual set-theoretic types.

The type system was made possible thanks to a partnership between CNRS and Remote. The development work is currently sponsored by Fresha, Starfish*, and Dashbit.

Erlang/OTP support

This release adds support for Erlang/OTP 27 and drops support for Erlang/OTP 24. We recommend Elixir developers to migrate to Erlang/OTP 26 or later, especially on Windows. Support for WERL (a graphical user interface for the Erlang terminal on Windows) will be removed in Elixir v1.18.

Adding Duration and shift/2 functions

Elixir introduces the Duration data type and APIs to shift dates, times, and date times by a given duration, considering different calendars and time zones.

iex> Date.shift(~D[2016-01-31], month: 2)
~D[2016-03-31]

Note the operation is called shift (instead of add) since working with durations does not obey properties such as associativity. For instance, adding one month and then one month does not give the same result as adding two months:

iex> ~D[2016-01-31] |> Date.shift(month: 1) |> Date.shift(month: 1)
~D[2016-03-29]

Still, durations are essential for building intervals, recurring events, and modelling scheduling complexities found in the world around us. For DateTimes, Elixir will correctly deal with time zone changes (such as Daylight Saving Time), but provisions are also available in case you want to surface conflicts (for example, you shifted to a wall clock that does not exist, because the clock has been moved forward by one hour). See DateTime.shift/2 for examples.

Finally, a new Kernel.to_timeout/1 function has been added, which helps developers normalize durations and integers to a timeout used by Process APIs. For example, to send a message after one hour, one can now write:

Process.send_after(pid, :wake_up, to_timeout(hour: 1))

v1.17.0 (2024-06-12)

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
under it, a dynamic supervisor can be a bottleneck, especially if said processes
take a long time to initialize. Instead of starting a single DynamicSupervisor,
you can start multiple:

children = [
  {PartitionSupervisor, child_spec: DynamicSupervisor, name: MyApp.DynamicSupervisors}
]

Supervisor.start_link(children, strategy: :one_for_one)

Now you start processes on the dynamic supervisor for the right partition.
For instance, you can partition by PID, like in the previous example:

DynamicSupervisor.start_child(
  {:via, PartitionSupervisor, {MyApp.DynamicSupervisors, self()}},
  my_child_specification
)

Improved errors on binaries and evaluation

Erlang/OTP 25 improved errors on binary construction and evaluation. These improvements
apply to Elixir as well. Before v1.14, errors when constructing binaries would
often be hard-to-debug generic "argument errors". With Erlang/OTP 25 and Elixir v1.14,
more detail is provided for easier debugging. This work is part of EEP
54
.

Before:

int = 1
bin = "foo"
int <> bin

#=> ** (ArgumentError) argument error

Now:

int = 1
bin = "foo"
int <> bin

#=> ** (ArgumentError) construction of binary failed:
#=>    segment 1 of type 'binary':

#=>    expected a binary but got: 1

Slicing with steps

Elixir v1.12 introduced stepped ranges, which are ranges where you can
specify the "step":

Enum.to_list(1..10//3)

#=> [1, 4, 7, 10]

Stepped ranges are particularly useful for numerical operations involving
vectors and matrices (see Nx, for example).
However, the Elixir standard library was not making use of stepped ranges in its
APIs. Elixir v1.14 starts to take advantage of steps with support for stepped
ranges in a couple of functions. One of them is Enum.slice/2:

letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
Enum.slice(letters, 0..5//2)

#=> ["a", "c", "e"]

binary_slice/2 (and binary_slice/3 for completeness) has been added to the
Kernel module, that works with bytes and also support stepped ranges:

binary_slice("Elixir", 1..5//2)

#=> "lxr"

Expression-based inspection and Inspect improvements

In Elixir, it's conventional to implement the Inspect protocol for opaque
structs so that they're inspected with a special notation, resembling this:

MapSet.new([:apple, :banana])

#MapSet<[:apple, :banana]>

This is generally done when the struct content or part of it is private and the
%name{...} representation would reveal fields that are not part of the public
API.

The downside of the #name<...> convention is that the inspected output is not
valid Elixir code
. For example, you cannot copy the inspected output and paste
it into an IEx session.

Elixir v1.14 changes the convention for some of the standard-library structs.
The Inspect implementation for those structs now returns a string with a valid
Elixir expression that recreates the struct when evaluated. In the MapSet
example above, this is what we have now:

fruits = MapSet.new([:apple, :banana])
MapSet.put(fruits, :pear)

#=> MapSet.new([:apple, :banana, :pear])

The MapSet.new/1 expression evaluates to exactly the struct that we're
inspecting. This allows us to hide the internals of MapSet, while keeping
it as valid Elixir code. This expression-based inspection has been
implemented for Version.Requirement, MapSet, and Date.Range.

Finally, we have improved the Inspect protocol for structs so that
fields are inspected in the order they are declared in defstruct.
The option :optional has also been added when deriving the Inspect
protocol, giving developers more control over the struct representation.
See the updated documentation for Inspect for a general rundown on
the approaches and options available.

1. Enhancements
EEx
  • [EEx] Support multi-line comments to EEx via <%!-- --%>
  • [EEx] Add EEx.tokenize/2
Elixir
  • [Access] Add Access.slice/1
  • [Application] Add Application.compile_env/4 and Application.compile_env!/3 to read the compile-time environment inside macros
  • [Calendar] Support ISO8601 basic format parsing with DateTime.from_iso8601/2
  • [Calendar] Add day/hour/minute on add/diff across different calendar modules
  • [Code] Add :normalize_bitstring_modifiers to Code.format_string!/2
  • [Code] Emit deprecation and type warnings for invalid options in on Code.compile_string/2 and Code.compile_quoted/2
  • [Code] Warn if an outdated lexical tracker is given on eval
  • [Code] Add Code.env_for_eval/1 and Code.eval_quoted_with_env/3
  • [Code] Improve stacktraces from eval operations on Erlang/OTP 25+
  • [Code.Fragment] Add support for __MODULE__ in several functions
  • [Code.Fragment] Support surround and context suggestions across multiple lines
  • [Enum] Allow slicing with steps in Enum.slice/2
  • [File] Support dereference_symlinks: true in File.cp/3 and File.cp_r/3
  • [Float] Do not show floats in scientific notation if below 1.0e16 and the fractional value is precisely zero
  • [Float] Add Float.min_finite/0 and Float.max_finite/0
  • [Inspect] Improve error reporting when there is a faulty implementation of the Inspect protocol
  • [Inspect] Allow :optional when deriving the Inspect protocol for hiding fields that match their default value
  • [Inspect] Inspect struct fields in the order they are declared in defstruct
  • [Inspect] Use expression-based inspection for Date.Range, MapSet, and Version.Requirement
  • [IO] Support Macro.Env and keywords as stacktrace definitions in IO.warn/2
  • [IO] Add IO.ANSI.syntax_colors/0 and related configuration to be shared across IEx and dbg
  • [Kernel] Add new dbg/0-2 macro
  • [Kernel] Allow any guard expression as the size of a bitstring in a pattern match
  • [Kernel] Allow composite types with pins as the map key in a pattern match
  • [Kernel] Print escaped version of control chars when they show up as unexpected tokens
  • [Kernel] Warn on confusable non-ASCII identifiers
  • [Kernel] Add .. as a nullary operator that returns 0..-1//1
  • [Kernel] Implement Unicode Technical Standard #​39 recommendations. In particular, we warn for confusable scripts and restrict identifiers to single-scripts or highly restrictive mixed-scripts
  • [Kernel] Automatically perform NFC conversion of identifiers
  • [Kernel] Add binary_slice/2 and binary_slice/3
  • [Kernel] Lazily expand module attributes to avoid compile-time deps
  • [Kernel] Automatically cascade generated: true annotations on macro expansion
  • [Keyword] Add Keyword.from_keys/2 and Keyword.replace_lazy/3
  • [List] Add List.keysort/3 with support for a sorter function
  • [Macro] Add Macro.classify_atom/1 and Macro.inspect_atom/2
  • [Macro] Add Macro.expand_literal/2 and Macro.path/2
  • [Macro.Env] Add Macro.Env.prune_compile_info/1
  • [Map] Add Map.from_keys/2 and Map.replace_lazy/3
  • [MapSet] Add MapSet.filter/2, MapSet.reject/2, and MapSet.symmetric_difference/2
  • [Node] Add Node.spawn_monitor/2 and Node.spawn_monitor/4
  • [Module] Support new @after_verify attribute for executing code whenever a module is verified
  • [PartitionSupervisor] Add PartitionSupervisor that starts multiple isolated partitions of the same child for scalability
  • [Path] Add Path.safe_relative/1 and Path.safe_relative_to/2
  • [Registry] Add Registry.count_select/2
  • [Stream] Add Stream.duplicate/2 and Stream.transform/5
  • [String] Support empty lookup lists in String.replace/3, String.split/3, and String.splitter/3
  • [String] Allow slicing with steps in String.slice/2
  • [Task] Add :zip_input_on_exit option to Task.async_stream/3
  • [Task] Store :mfa in the Task struct for reflection purposes
  • [URI] Add URI.append_query/2
  • [Version] Add Version.to_string/1
  • [Version] Colorize Version.Requirement source in the Inspect protocol
ExUnit
  • [ExUnit] Add ExUnit.Callbacks.start_link_supervised!/2
  • [ExUnit] Add ExUnit.run/1 to rerun test modules
  • [ExUnit] Colorize summary in yellow with message when all tests are excluded
  • [ExUnit] Display friendly error when test name is too long
IEx
  • [IEx] Evaluate --dot-iex line by line
  • [IEx] Add line-by-line evaluation of IEx breakpoints
  • [IEx.Autocomplete] Autocomplete bitstrings modifiers (after :: inside <<...>>)
  • [IEx.Helpers] Allow an atom to be given to pid/1
  • [IEx.Helpers] Support sigils in h/1
Logger
  • [Logger] Add Logger.put_process_level/2
Mix
  • [Mix] Add :config_path and :lockfile options to Mix.install/2
  • [mix compile] Add --no-optional-deps to skip optional dependencies to test compilation works without optional dependencies
  • [mix compile] Include column information on error diagnostics when possible
  • [mix deps] Mix.Dep.Converger now tells which deps formed a cycle
  • [mix do] Support --app option to restrict recursive tasks in umbrella projects
  • [mix do] Allow using + as a task separator instead of comma
  • [mix format] Support filename in mix format - when reading from stdin
  • [mix format] Compile if mix format plugins are missing
  • [mix new] Do not allow projects to be created with application names that conflict with multi-arg Erlang VM switches
  • [mix profile] Return the return value of the profiled function
  • [mix release] Make BEAM compression opt-in
  • [mix release] Let :runtime_config_path accept false to skip the config/runtime.exs
  • [mix test] Improve error message when suite fails due to coverage
  • [mix test] Support :test_elixirc_options and default to not generating docs nor debug info chunk for tests
  • [mix xref] Support --group flag in mix xref graph
2. Bug fixes
Elixir
  • [Calendar] Handle widths with "0" in them in Calendar.strftime/3
  • [CLI] Improve errors on incorrect --rpc-eval usage
  • \

Configuration

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

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, 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 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 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 changed the title chore(deps): update dependency elixir to v1.16.2 chore(deps): update dependency elixir to v1.16.3 May 20, 2024
@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 14, 2024
@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 19, 2024
@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 6, 2024
@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
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.

0 participants