1.13.0
Released on 2021-12-03
Changes
- Type
- enhancement
- Tool
- EEx
- Module
- EEx
- Description
- Add `:parser_options` to EEx functions
- Type
- enhancement
- Tool
- Elixir
- Module
- Calendar
- Description
- Add `c:Calendar.year_of_era/3` to support calendars where the beginning of a new era does not align with the beginning of a new year
- Type
- enhancement
- Tool
- Elixir
- Module
- CLI
- Description
- Support `--short-version` on the CLI that does not boot the VM
- Type
- enhancement
- Tool
- Elixir
- Module
- Code
- Description
- Add `Code.string_to_quoted_with_comments/2` and `Code.quoted_to_algebra/2`
- Type
- enhancement
- Tool
- Elixir
- Module
- Code
- Description
- Add more `:token_metadata` to aliases and remote calls when parsing strings
- Type
- enhancement
- Tool
- Elixir
- Module
- Code
- Description
- Add `Code.Fragment` module to provide best-effort information from code fragments. The module currently provides an updated `Code.Fragment.cursor_context/2` with operator support and `Code.Fragment.surround_context/2` which looks at a given position in a fragment and find its surrounding delimiters
- Type
- enhancement
- Tool
- Elixir
- Module
- Code
- Description
- Allow custom sigil formatting on `Code.format_string!/2`
- Type
- enhancement
- Tool
- Elixir
- Module
- Code
- Description
- Add `{:on_module, bytecode, :none}` trace to compilation tracers
- Type
- enhancement
- Tool
- Elixir
- Module
- Enum
- Description
- Optimize `Enum.concat/1` for lists of lists
- Type
- enhancement
- Tool
- Elixir
- Module
- Enum
- Description
- Add `Enum.slide/3`
- Type
- enhancement
- Tool
- Elixir
- Module
- Exception
- Description
- Better format Elixir exceptions in Erlang
- Type
- enhancement
- Tool
- Elixir
- Module
- Inspect
- Description
- Allow default inspect fun to be set globally with `Inspect.Opts.default_inspect_fun/1`
- Type
- enhancement
- Tool
- Elixir
- Module
- IO
- Description
- Allow `:eof` to be given as limit to `IO.getn/2`
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Support the `:sigils` option in `import Mod, only: :sigils` and allow the sigil modifiers to be also digits
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Make `get_in` consistently abort when `nil` values are found
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Improve compilation times by reducing the amount of copies of the AST across compiler processes
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Raise if trying to define a module with a slash in its name
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Warn when `?\` is used and there is no need for a escape character
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Track structs in typespecs as export deps instead of compile-time deps
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Add power operator (`**/2`)
- Type
- enhancement
- Tool
- Elixir
- Module
- Keyword
- Description
- Add `Keyword.validate/2`
- Type
- enhancement
- Tool
- Elixir
- Module
- Keyword
- Description
- Implement `Keyword.filter/2` and `Keyword.map/2`
- Type
- enhancement
- Tool
- Elixir
- Module
- List
- Description
- Add `List.keyfind!/3`
- Type
- enhancement
- Tool
- Elixir
- Module
- Macro
- Description
- Add `Macro.prewalker/1` and `Macro.postwalker/1`
- Type
- enhancement
- Tool
- Elixir
- Module
- Macro.Env
- Description
- Add the following reflection functions: `required?/2`, `lookup_import/2`, `fetch_alias/2`, and `fetch_macro_alias/2`
- Type
- enhancement
- Tool
- Elixir
- Module
- Map
- Description
- Implement `Map.filter/2` and `Map.map/2`
- Type
- enhancement
- Tool
- Elixir
- Module
- Module
- Description
- Support `:nillify_clauses` in `Module.get_definition/3`
- Type
- enhancement
- Tool
- Elixir
- Module
- Module
- Description
- Add `Module.attributes_in/1` and `Module.overridables_in/1`
- Type
- enhancement
- Tool
- Elixir
- Module
- OptionParser
- Description
- Add "did you mean?" suggestions to `OptionParser.ParseError` messages
- Type
- enhancement
- Tool
- Elixir
- Module
- Record
- Description
- Add record reflection via `@__records__`
- Type
- enhancement
- Tool
- Elixir
- Module
- Task
- Description
- Add `Task.completed/1`
- Type
- enhancement
- Tool
- Elixir
- Module
- Task
- Description
- Add `Task.ignore/1` to keep a task running but ignoring all of its results
- Type
- enhancement
- Tool
- Elixir
- Module
- Task
- Description
- Reduce the amount of copying `Task.async*` functions
- Type
- enhancement
- Tool
- Elixir
- Module
- URI
- Description
- Add `URI.new/1` and `URI.new!/1`
- Type
- enhancement
- Tool
- ExUnit
- Module
- ExUnit
- Description
- Show hint if comparing different but equivalent strings
- Type
- enhancement
- Tool
- ExUnit
- Module
- ExUnit.CaptureIO
- Description
- Add `with_io/3` to return result with captured io
- Type
- enhancement
- Tool
- ExUnit
- Module
- ExUnit.CaptureLog
- Description
- Add `with_log/2` to return result with captured logs
- Type
- enhancement
- Tool
- IEx
- Module
- IEx.Autocomplete
- Description
- Add path autocompletion whenever when the cursor follows `"./` or `"/` or `"DRIVER:` where `DRIVER` is a single letter
- Type
- enhancement
- Tool
- IEx
- Module
- IEx.Autocomplete
- Description
- Add autocompletion for sigils, struct names, and struct fields
- Type
- enhancement
- Tool
- IEx
- Module
- IEx.Helpers
- Description
- Allow multiple modules to be given to `r/1`
- Type
- enhancement
- Tool
- Logger
- Module
- Logger
- Description
- Add `Logger.put_application_level/2`
- Type
- enhancement
- Tool
- Mix
- Module
- Mix
- Description
- Add `MIX_INSTALL_FORCE` environment variable support
- Type
- enhancement
- Tool
- Mix
- Module
- Mix
- Description
- Support `:config` and `:system_env` in `Mix.install/2`
- Type
- enhancement
- Tool
- Mix
- Module
- Mix
- Description
- Add `Mix.installed?/0`
- Type
- enhancement
- Tool
- Mix
- Module
- Mix.Shell
- Description
- Add `:default` option to `Mix.Shell.yes?`
- Type
- enhancement
- Tool
- Mix
- Module
- mix archive.install
- Description
- Run `loadconfig` before building archive
- Type
- enhancement
- Tool
- Mix
- Module
- mix compile
- Description
- Move Elixir version check to before deps are compiled, in order to give feedback earlier
- Type
- enhancement
- Tool
- Mix
- Module
- mix compile.elixir
- Description
- Do not recompile files if their modification time change but their contents are still the same and the .beam files are still on disk
- Type
- enhancement
- Tool
- Mix
- Module
- mix compile.elixir
- Description
- Do not recompile all Elixir sources when Erlang modules change, only dependent ones
- Type
- enhancement
- Tool
- Mix
- Module
- mix compile.elixir
- Description
- Do not recompile Elixir files if `mix.exs` changes, instead recompile only files using `Mix.Project` or trigger a recompilation if a compiler option changes
- Type
- enhancement
- Tool
- Mix
- Module
- mix compile.elixir
- Description
- Only recompile needed files when a dependency is added, updated or removed
- Type
- enhancement
- Tool
- Mix
- Module
- mix compile.elixir
- Description
- Only recompile needed files when a dependency is configured
- Type
- enhancement
- Tool
- Mix
- Module
- mix deps
- Description
- Add `:subdir` option to git deps
- Type
- enhancement
- Tool
- Mix
- Module
- mix escript.install
- Description
- Run `loadconfig` before building escript
- Type
- enhancement
- Tool
- Mix
- Module
- mix format
- Description
- Support `:plugins` in `mix format` that can hook into custom extensions and sigils
- Type
- enhancement
- Tool
- Mix
- Module
- mix format
- Description
- Add `Mix.Tasks.Format.formatter_for_file/2`
- Type
- enhancement
- Tool
- Mix
- Module
- mix local.rebar
- Description
- No longer support `sub_dirs` in Rebar 2 to help migration towards Rebar 3
- Type
- enhancement
- Tool
- Mix
- Module
- mix local.rebar
- Description
- Support `--if-missing` option when installing Rebar
- Type
- enhancement
- Tool
- Mix
- Module
- mix local.rebar
- Description
- Set `REBAR_PROFILE=prod` when compiling Rebar dependencies
- Type
- enhancement
- Tool
- Mix
- Module
- mix test
- Description
- Support `--profile-require=time` to profile the time loading test files themselves
- Type
- enhancement
- Tool
- Mix
- Module
- mix test
- Description
- Allow filtering modules from coverage using regex
- Type
- enhancement
- Tool
- Mix
- Module
- mix test
- Description
- Allow the exit status of ExUnit to be configured and set the default to 2
- Type
- enhancement
- Tool
- Mix
- Module
- mix test
- Description
- Exit with a status of 3 when coverage falls below threshold
- Type
- enhancement
- Tool
- Mix
- Module
- mix test
- Description
- Write failed manifest when suite fails due to --warnings-as-errors
- Type
- enhancement
- Tool
- Mix
- Module
- mix test
- Description
- Ignore `MIX_TEST_PARTITION` when partitions set to 1
- Type
- enhancement
- Tool
- Mix
- Module
- mix xref
- Description
- Support multiple sinks and sources in `mix xref graph`
- Type
- enhancement
- Tool
- Mix
- Module
- mix xref
- Description
- Add `trace` subcommand to print compilation dependencies between files
- Type
- enhancement
- Tool
- Mix
- Module
- mix xref
- Description
- Add `--fail-above` option to `mix xref`
- Type
- enhancement
- Tool
- Mix
- Module
- mix xref
- Description
- Add `--label compile-connected` to `mix xref`
- Type
- bugfix
- Tool
- EEx
- Module
- EEx
- Description
- Accept comments in EEx between do and the first clause
- Type
- bugfix
- Tool
- EEx
- Module
- EEx
- Description
- Accept EEx expressions where `->` is followed by newline
- Type
- bugfix
- Tool
- Elixir
- Module
- Application
- Description
- Allow any expression as first argument of `compile_env`
- Type
- bugfix
- Tool
- Elixir
- Module
- Application
- Description
- Warn if `Application.compile_env` or `Application.compile_env!` are called without a require
- Type
- bugfix
- Tool
- Elixir
- Module
- Code
- Description
- Make sure `:static_atoms_encoder` in `Code.string_to_quoted/2` also applies to quoted keyword keys
- Type
- bugfix
- Tool
- Elixir
- Module
- Code
- Description
- Ensure bindings with no context are returned as atoms instead of `{binding, nil}` in eval operations
- Type
- bugfix
- Tool
- Elixir
- Module
- Inspect
- Description
- Fix a bug when inspecting a non-binary bitstring with colors
- Type
- bugfix
- Tool
- Elixir
- Module
- Kernel
- Description
- Reject bidirectional formatting characters in strings and comments
- Type
- bugfix
- Tool
- Elixir
- Module
- Kernel
- Description
- Support escaping of terminators in uppercase sigils heredocs for consistency
- Type
- bugfix
- Tool
- Elixir
- Module
- Kernel
- Description
- Raise if `__CALLER__` or `__ENV__` or `__STACKTRACE__` are used in match
- Type
- bugfix
- Tool
- Elixir
- Module
- Kernel
- Description
- Improve error message on invalid argument for `byte_size` from binary concat
- Type
- bugfix
- Tool
- Elixir
- Module
- Kernel
- Description
- Raise when aliasing non-Elixir modules without `:as`
- Type
- bugfix
- Tool
- Elixir
- Module
- Kernel
- Description
- Allow `unquote_splicing` inside `%{...}` without parens
- Type
- bugfix
- Tool
- Elixir
- Module
- Kernel
- Description
- Ensure that waiting on a struct expansion inside a typespec is correctly tracked as waiting time in the compiler
- Type
- bugfix
- Tool
- Elixir
- Module
- Kernel
- Description
- Correctly parse the atom `.` as a keyword list key
- Type
- bugfix
- Tool
- Elixir
- Module
- Kernel
- Description
- Do not leak variables from the first generator in `with` and `for` special forms
- Type
- bugfix
- Tool
- Elixir
- Module
- Kernel
- Description
- Fix column number on strings with NFD characters
- Type
- bugfix
- Tool
- Elixir
- Module
- Kernel
- Description
- Fix a bug where a combination of dynamic line in `quote` with `unquote` of remote calls would emit invalid AST metadata
- Type
- bugfix
- Tool
- Elixir
- Module
- OptionParser
- Description
- Validate switch types/modifiers early on to give more precise feedback
- Type
- bugfix
- Tool
- Elixir
- Module
- Protocol
- Description
- Add `defdelegate` to the list of unallowed macros inside protocols as protocols do not allow function definitions
- Type
- bugfix
- Tool
- Elixir
- Module
- Protocol
- Description
- Warn if `@callback`, `@macrocallback` and `@optional_callbacks` are defined inside protocol
- Type
- bugfix
- Tool
- Elixir
- Module
- Protocol
- Description
- Ensure protocol metadata is deterministic on consolidation
- Type
- bugfix
- Tool
- Elixir
- Module
- Range
- Description
- Always show step when range is descending
- Type
- bugfix
- Tool
- Elixir
- Module
- String
- Description
- Update Unicode database to version 14.0
- Type
- bugfix
- Tool
- Elixir
- Module
- URI
- Description
- Only percent decode if followed by hex digits (according to https://url.spec.whatwg.org/#percent-decode)
- Type
- bugfix
- Tool
- Elixir
- Module
- Version
- Description
- Ensure proper precedence of `and`/`or` in version requirements
- Type
- bugfix
- Tool
- ExUnit
- Module
- ExUnit
- Description
- Fix formatter and counters from `ExUnit.run/0` to consider all tests in a module whenever if a module's `setup_all` fails
- Type
- bugfix
- Tool
- ExUnit
- Module
- ExUnit
- Description
- Allow doctests newlines to be terminated by CRLF
- Type
- bugfix
- Tool
- IEx
- Module
- IEx
- Description
- Fix the loss of `.iex.exs` context after a pry session
- Type
- bugfix
- Tool
- IEx
- Module
- IEx
- Description
- Stop evaluator before exiting IEx server to avoid evaluators leaking
- Type
- bugfix
- Tool
- Logger
- Module
- Logger
- Description
- Raise clear error message for invalid `:compile_time_purge_matching` configuration
- Type
- bugfix
- Tool
- Logger
- Module
- Logger
- Description
- Fix a bug where Logger would not reset its discard counter under some scenarios
- Type
- bugfix
- Tool
- Mix
- Module
- mix compile.elixir
- Description
- Track transitive runtime dependencies coming from local/path dependencies
- Type
- bugfix
- Tool
- Mix
- Module
- mix compile.elixir
- Description
- Recompile file if `@external_resource` is deleted
- Type
- bugfix
- Tool
- Mix
- Module
- mix compile.elixir
- Description
- Print number of compiling files on all compiler cycles. This will make the `Compiling N files (.ex)` show up multiple times if necessary
- Type
- bugfix
- Tool
- Mix
- Module
- mix deps
- Description
- Raise if local dep is unavailable while compiling
- Type
- bugfix
- Tool
- Mix
- Module
- mix deps.unlock
- Description
- Fix blank output when unlocking a dependency that is not locked
- Type
- bugfix
- Tool
- Mix
- Module
- mix local.install
- Description
- Do not respect `MIX_DEPS_PATH` for install commands
- Type
- bugfix
- Tool
- Mix
- Module
- mix release
- Description
- Improve release scripts by making sure shell errors cascade (this is done by avoiding exporting and defining variables in a single step)
- Type
- bugfix
- Tool
- Mix
- Module
- mix release
- Description
- Do not boot release if `RELEASE_COOKIE` is empty
- Type
- bugfix
- Tool
- Mix
- Module
- mix release
- Description
- Allow releases running as a daemon to be restarted
- Type
- bugfix
- Tool
- Mix
- Module
- mix release
- Description
- Raise proper error message when non-serializable values are in configs
- Type
- bugfix
- Tool
- Mix
- Module
- mix test
- Description
- Fix coverage engine to also tag `case`, `cond`, and `receive` branches where the right side is a literal
- Type
- enhancement
- Tool
- Elixir
- Module
- Code
- Description
- Environment options in `Code.eval_quoted/3` and `Code.eval_string/3`, such as `:aliases` and `:tracers`, have been deprecated in favor of passing an environment
- Type
- enhancement
- Tool
- Elixir
- Module
- IO
- Description
- `:all` on `IO.getn` is deprecated in favor of `:eof`
- Type
- enhancement
- Tool
- Elixir
- Module
- URI
- Description
- `URI.parse/1` is deprecated in favor of `URI.new/1` and `URI.new!/1`
- Type
- enhancement
- Tool
- Mix
- Module
- mix format
- Description
- `Mix.Tasks.Format.formatter_opts_for_file/2` is deprecated in favor of `Mix.Tasks.Format.formatter_for_file/2`
- Type
- enhancement
- Tool
- Elixir
- Module
- Code
- Description
- `Code.cursor_context/2` is deprecated, use `Code.Fragment.cursor_context/2` instead
- Type
- enhancement
- Tool
- Elixir
- Module
- Macro
- Description
- `Macro.to_string/2` is deprecated, use `Macro.to_string/1` instead
- Type
- enhancement
- Tool
- Elixir
- Module
- System
- Description
- `System.get_pid/0` is deprecated, use `System.pid/0` instead
- Type
- enhancement
- Tool
- Elixir
- Module
- Version
- Description
- Using `!` or `!=` in version requirements is deprecated, use `~>` or `>=` instead
- Type
- enhancement
- Tool
- Mix
- Module
- mix escript.build
- Description
- `:strip_beam` option is deprecated in favor of `:strip_beams`
- Type
- enhancement
- Tool
- Mix
- Module
- Mix
- Description
- `:exit_code` in `Mix.raise/2` has been deprecated in favor of `:exit_status`
- Type
- enhancement
- Tool
- Mix
- Module
- Mix.Config
- Description
- `Mix.Config` is deprecated in favor of `Config` module