1.10.0

Released on 2020-01-27

Changes

Type
enhancement
Tool
Elixir
Module
Application
Description
Add `Application.compile_env/3` and `Application.compile_env!/2` for reading values at compilation time and tracking if they accidentally change during runtime
Type
enhancement
Tool
Elixir
Module
Calendar
Description
Allow custom calendar representations in calendar sigils
Type
enhancement
Tool
Elixir
Module
Calendar
Description
Add `c:Calendar.parse_time/1`, `c:Calendar.parse_date/1`, `c:Calendar.parse_naive_datetime/1` and `c:Calendar.parse_utc_datetime/1` callbacks to calendar behaviour
Type
enhancement
Tool
Elixir
Module
CLI
Description
Add support for `NO_COLOR` environment variable
Type
enhancement
Tool
Elixir
Module
Code
Description
Add `:token_metadata` and `:literal_encoder` support to `Code.string_to_quoted/2`
Type
enhancement
Tool
Elixir
Module
Code
Description
Add compiler tracing to lift events done by the compiler
Type
enhancement
Tool
Elixir
Module
Code
Description
Return `{:error, :unavailable}` in `Code.ensure_compiled/1` if module is in a deadlock
Type
enhancement
Tool
Elixir
Module
DateTime
Description
Add `DateTime.now!/2` and `DateTime.shift_zone!/3`
Type
enhancement
Tool
Elixir
Module
Enum
Description
Speed up getting one random element from enumerables
Type
enhancement
Tool
Elixir
Module
Enum
Description
Add `Enum.frequencies/1`, `Enum.frequencies_by/2`, and `Enum.map_intersperse/2`
Type
enhancement
Tool
Elixir
Module
Enum
Description
Allow a sorting function on `Enum.min/max/min_by/max_by`
Type
enhancement
Tool
Elixir
Module
Enum
Description
Add `asc/desc` and `compare/1` support to `Enum.sort/2`
Type
enhancement
Tool
Elixir
Module
Exception
Description
Add version alongside app names in stacktraces
Type
enhancement
Tool
Elixir
Module
Function
Description
Add `Function.identity/1`
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Add `Kernel.is_struct/1` and `Kernel.is_map_key/2`
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Warn when function head comes immediately after the implementation instead of before the implementation
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Warn if duplicate key is found in struct declaration
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Print all undefined functions as warnings and then raise. This allows users to see all undefined calls at once, when it would otherwise require them to compile the code multiple times
Type
enhancement
Tool
Elixir
Module
Keyword
Description
Add `Keyword.pop!/2` and `Keyword.pop_values/2`
Type
enhancement
Tool
Elixir
Module
Map
Description
Add `Map.pop!/2`
Type
enhancement
Tool
Elixir
Module
MapSet
Description
Optimize multiple operations
Type
enhancement
Tool
Elixir
Module
Module
Description
Add `Module.has_attribute?/2`
Type
enhancement
Tool
Elixir
Module
Module
Description
Add `@compile {:no_warn_undefined, mfa_or_module}` to turn off undefined function warnings
Type
enhancement
Tool
Elixir
Module
NaiveDateTime
Description
Add `NaiveDateTime.local_now/0`
Type
enhancement
Tool
Elixir
Module
Record
Description
Warn if duplicate key is found in record declaration
Type
enhancement
Tool
Elixir
Module
String
Description
Update to Unicode 12.1
Type
enhancement
Tool
Elixir
Module
StringIO
Description
Add `:encoding` option to StringIO and optimize `get_chars` operation
Type
enhancement
Tool
ExUnit
Module
ExUnit.Assertions
Description
Support diffs in pattern matching and in `assert_receive`
Type
enhancement
Tool
ExUnit
Module
ExUnit.CaptureIO
Description
Supports capturing named devices in asynchronous tests
Type
enhancement
Tool
IEx
Module
IEx
Description
Warn on circular file imports when loading default `.iex.exs`
Type
enhancement
Tool
IEx
Module
IEx
Description
Allow customization of the continuation prompt on IEx
Type
enhancement
Tool
Logger
Module
Logger
Description
Allow `start_options` to be configured on Logger's GenEvent
Type
enhancement
Tool
Logger
Module
Logger
Description
Integrate Elixir's Logger with Erlang/OTP 21+'s logger. This means setting up the logger level in Elixir will automatically change the logger level for Erlang and vice-versa
Type
enhancement
Tool
Mix
Module
mix compile
Description
Add `--profile time` flag to profile compilation steps
Type
enhancement
Tool
Mix
Module
mix deps.compile
Description
Add `--skip-umbrella-children` flag. The new flag does not compile umbrella apps. This is useful for building caches in CD/CI pipelines
Type
enhancement
Tool
Mix
Module
mix deps.unlock
Description
Add `--check-unused` flag. The new flag raises if there are any unused dependencies in the lock file
Type
enhancement
Tool
Mix
Module
mix release
Description
Allow `RELEASE_DISTRIBUTION` to be set to `none`
Type
enhancement
Tool
Mix
Module
mix release
Description
Support overlays in `rel/overlays`
Type
enhancement
Tool
Mix
Module
mix release
Description
Allow configuration reboot to be disabled in releases
Type
enhancement
Tool
Mix
Module
mix test
Description
Add support for simple round-robin test partitioning across multiple machines
Type
enhancement
Tool
Mix
Module
Mix.Project
Description
Add `MIX_DEPS_PATH` environment variable for setting `:deps_path`
Type
enhancement
Tool
Mix
Module
Mix.Project
Description
Add `Mix.Project.deps_scms/1` that returns deps with their SCMs
Type
enhancement
Tool
Mix
Module
Mix.Task
Description
Add `Mix.Task.Compiler.after_compiler/2` callback, to simplify compilers that may need to run something at multiple steps
Type
bugfix
Tool
EEx
Module
EEx
Description
Ensure multiline do/end with no spaces compile under trim mode
Type
bugfix
Tool
Elixir
Module
Enum
Description
Allow positive range slices on infinite streams given to `Enum.slice/2`
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Raise error on functions/guards without implementation
Type
bugfix
Tool
Elixir
Module
Keyword
Description
Ensure keyword replace and update preserve order
Type
bugfix
Tool
Elixir
Module
Module
Description
Raise instead of silently failing when performing a write module operation during after-compile
Type
bugfix
Tool
Elixir
Module
Module
Description
Fix `@macrocallback` definitions with a `when` clause
Type
bugfix
Tool
Elixir
Module
Path
Description
Fix `Path.absname/1` to correctly handle UNC paths on Windows
Type
bugfix
Tool
Elixir
Module
Stream
Description
Close with correct accumulator in `Stream.resource/3` when called for a single-element list
Type
bugfix
Tool
Elixir
Module
Stream
Description
Allow `Stream.cycle/1` to be double nested inside `Stream.cycle/1`
Type
bugfix
Tool
Elixir
Module
URI
Description
Preserve slashes in URIs without authority
Type
bugfix
Tool
Elixir
Module
URI
Description
Require a nil or an absolute path on URIs with host or authority
Type
bugfix
Tool
IEx
Module
IEx
Description
Exit IEx session if the group leader exits
Type
bugfix
Tool
IEx
Module
IEx
Description
Allow `pry` to be used in non-tty terminals
Type
bugfix
Tool
Mix
Module
mix compile
Description
Do not filter out warning for external files from diagnostics
Type
bugfix
Tool
Mix
Module
Mix.Project
Description
Ensure user given `:manager` to dependencies has higher precedence than the SCM one
Type
bugfix
Tool
Mix
Module
Mix.Project
Description
Recompile umbrella children when config files change and `mix compile` is called from the umbrella root
Type
bugfix
Tool
Mix
Module
Mix.Task
Description
Always recompile before running tasks from dependencies
Type
bugfix
Tool
Mix
Module
Mix.Task
Description
Ensure project's Logger config is used when running Mix tasks
Type
enhancement
Tool
Elixir
Module
Code
Description
`compiler_options/0` is deprecated in favor of `compiler_option/1`
Type
enhancement
Tool
Mix
Module
Mix.Config
Description
`Mix.Config.persist/1` has been deprecated. Instead of `Mix.Config.persist(config)` use `Application.put_all_env(config, persistent: true)` (`Application.put_all_env/2` was added in v1.9)
Type
enhancement
Tool
Mix
Module
mix xref
Description
`calls/0` is deprecated in favor of compiler tracer
Type
enhancement
Tool
Mix
Module
mix xref
Description
The `xref.exclude` option has been moved to `elixirc_options.no_warn_undefined` as the `xref` pass has been moved into the compiler
Type
enhancement
Tool
Elixir
Module
Code
Description
`Code.load_file/2` has been deprecated in favor of `Code.require_file/2` or `Code.compile_file/2`
Type
enhancement
Tool
Elixir
Module
Code
Description
`Code.loaded_files/0` and `Code.unload_file/1` have been deprecated in favor of `Code.required_files/0` and `Code.unrequire_file/1` respectively
Type
enhancement
Tool
Elixir
Module
Code
Description
`Code.ensure_compiled?/1` is deprecated in favor of `Code.ensure_compiled/1`
Type
enhancement
Tool
Elixir
Module
String
Description
`String.normalize/2` has been deprecated in favor of `:unicode.characters_to_nfc_binary/1` or `:unicode.characters_to_nfd_binary/1` which ship as part of Erlang/OTP 20+
Type
enhancement
Tool
Elixir
Module
Supervisor
Description
`Supervisor.Spec.supervise/2` has been deprecated in favor of the new Supervisor child specification
Type
enhancement
Tool
Elixir
Module
Supervisor
Description
The `:simple_one_for_one` strategy in `Supervisor` has been deprecated in favor of `DynamicSupervisor`
Type
enhancement
Tool
Logger
Module
Logger
Description
`:compile_time_purge_level` application environment configuration has been deprecated in favor of the more general `:compile_time_purge_matching` config
Type
enhancement
Tool
Logger
Module
Logger
Description
Deprecate logging non-chardata values
Type
enhancement
Tool
Mix
Module
mix compile.xref
Description
This check has been moved into the compiler and has no effect now
Type
enhancement
Tool
Mix
Module
mix xref deprecations
Description
This check has been moved into the compiler and has no effect now
Type
enhancement
Tool
Mix
Module
mix xref unreachable
Description
This check has been moved into the compiler and has no effect now