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