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