1.5.0

Released on 2017-07-25

Changes

Type
enhancement
Tool
Elixir
Module
Access
Description
Optimize `Access.get/2`
Type
enhancement
Tool
Elixir
Module
Base
Description
Optimize Base encode/decode
Type
enhancement
Tool
Elixir
Module
Calendar
Description
Implement Inspect for DateTime with Calendar.ISO
Type
enhancement
Tool
Elixir
Module
Calendar
Description
Add "ISO days" format for conversions between Calendars and `Date.convert/2`, `Time.convert/2`, `NaiveDateTime.convert/2` and `DateTime.convert/2` (as well as bang variants)
Type
enhancement
Tool
Elixir
Module
Calendar
Description
Add `:calendar` field to `Time` struct
Type
enhancement
Tool
Elixir
Module
Calendar
Description
Add `Time.diff/3`, `Date.add/2`, `Date.diff/2`, `DateTime.diff/3`
Type
enhancement
Tool
Elixir
Module
Calendar
Description
Add `Date.range/2`
Type
enhancement
Tool
Elixir
Module
Calendar
Description
Add `Date.new/4`, `DateTime.utc_now/1`, `NaiveDateTime.new/8` and `Time.new/5` that allow specifing calendar
Type
enhancement
Tool
Elixir
Module
Enum
Description
Add `Enum.chunk_by/4` and `Stream.chunk_by/4`
Type
enhancement
Tool
Elixir
Module
Enum
Description
Add `Enum.chunk_every/2` and `Enum.chunk_every/4` with a more explicit API than `Enum.chunk/2` and `Enum.chunk/4`
Type
enhancement
Tool
Elixir
Module
Exception
Description
Add `Exception.blame/3` that adds metadata to exceptions
Type
enhancement
Tool
Elixir
Module
File
Description
Add `File.read_link/1` and `File.read_link!/1`
Type
enhancement
Tool
Elixir
Module
File
Description
Introduce `:trim_bom` option for `File.stream!/2`
Type
enhancement
Tool
Elixir
Module
Inspect
Description
Add `:printable_limit` to control the limit of printable structures
Type
enhancement
Tool
Elixir
Module
Integer
Description
Add `Integer.gcd/2`
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Add `left not in right` to check that the left side is not in the enumerable on the right
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Use the new `debug_info` chunk in OTP 20. This provides a mechanism for tools to retrieve the Elixir AST from beam files
Type
enhancement
Tool
Elixir
Module
Kernel
Description
`defoverridable/1` accepts a module name as argument and marks all callbacks as overridable
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Allow non-quoted Unicode atoms and variables according to Unicode Annex #31 (see Unicode Syntax document)
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Warn when a `:__struct__` key is used when building/updating structs
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Cache the AST on definitions. This speeds up the compilation time from 10% to 15% measured across different projects
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Improve compiler error message on invalid patterns and guards
Type
enhancement
Tool
Elixir
Module
Keyword
Description
Add `replace/3` and `replace!/3` for replacing an existing key
Type
enhancement
Tool
Elixir
Module
List
Description
`List.starts_with?/2`
Type
enhancement
Tool
Elixir
Module
Macro
Description
Introduce `Macro.generate_arguments/2`
Type
enhancement
Tool
Elixir
Module
Map
Description
Optimize `Map.merge/3` by choosing merging direction
Type
enhancement
Tool
Elixir
Module
Map
Description
Add `replace/3` and `replace!/3` for replacing an existing key
Type
enhancement
Tool
Elixir
Module
Map
Description
Raise `BadMapError` in `Map.equal?/2` when either of the two arguments is not a map
Type
enhancement
Tool
Elixir
Module
MapSet
Description
Reduce `MapSet` size when serialized to approximately half
Type
enhancement
Tool
Elixir
Module
Process
Description
Add `Process.cancel_timer/2`
Type
enhancement
Tool
Elixir
Module
Protocol
Description
Show available implementations on `Protocol.UndefinedError` if the protocol has been consolidated
Type
enhancement
Tool
Elixir
Module
Registry
Description
Support ETS guard conditions in `Registry.match/3`
Type
enhancement
Tool
Elixir
Module
Registry
Description
Support `parallel: true` in `Registry.dispatch/3`
Type
enhancement
Tool
Elixir
Module
Registry
Description
Introduce `Registry.unregister_match/4`
Type
enhancement
Tool
Elixir
Module
Stream
Description
Add `Stream.chunk_every/2` and `Stream.chunk_every/4` with a more explicit API than `Stream.chunk/2` and `Stream.chunk/4`
Type
enhancement
Tool
Elixir
Module
String
Description
Optimise binary pattern matching in `String.split/1` and `String.trim_*/1`
Type
enhancement
Tool
Elixir
Module
Supervisor
Description
Add `Supervisor.init/2` and `Supervisor.child_spec/2`
Type
enhancement
Tool
Elixir
Module
Supervisor
Description
Allow `module` and `{module, arg}` to be given to `Supervisor.start_link/2` and invoke `module.child_spec(arg)` on each argument
Type
enhancement
Tool
Elixir
Module
Task
Description
Support `:on_timeout` in `Task.async_stream` to control how tasks are terminated
Type
enhancement
Tool
Elixir
Module
Task
Description
Add `ordered: false` support to `Task.async_stream`
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Show code snippet from test source file in case of test errors
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Use `Exception.blame/3` when formatting test errors
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Make `assert_raise/2` fail if the underlying exception has a broken `message/1` implementation
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Add `start_supervised/2` and `stop_supervised/1` to ExUnit. Processes started by this function are automatically shut down when the test exits
Type
enhancement
Tool
IEx
Module
IEx.Autocomplete
Description
Support autocompletion of variable names
Type
enhancement
Tool
IEx
Module
IEx.Autocomplete
Description
Support autocompletion of functions imported using `import Mod, only: [...]`
Type
enhancement
Tool
IEx
Module
IEx.Evaluator
Description
Use `Exception.blame/3` when showing errors in the terminal
Type
enhancement
Tool
IEx
Module
IEx.Helpers
Description
Add `exports/1` IEx helper to list all exports in a module
Type
enhancement
Tool
IEx
Module
IEx.Helpers
Description
Add `break!/2`, `break!/4`, `breaks/0`, `continue/0`, `open/0`, `remove_breaks/0`, `remove_breaks/1`, `reset_break/1`, `reset_break/3` and `whereami/1` for code debugging
Type
enhancement
Tool
IEx
Module
IEx.Helpers
Description
No longer emit warnings for IEx commands without parentheses
Type
enhancement
Tool
IEx
Module
IEx.Helpers
Description
Add `runtime_info/0` for printing runtime system information
Type
enhancement
Tool
IEx
Module
IEx.Helpers
Description
Add `open/1` to open the source of a given module/function in your editor
Type
enhancement
Tool
IEx
Module
IEx.Info
Description
Implement `IEx.Info` protocol for calendar types
Type
enhancement
Tool
Logger
Module
Logger
Description
Add `metadata: :all` configuration to log all metadata
Type
enhancement
Tool
Mix
Module
mix compile.elixir
Description
Add `--all-warnings` option to Elixir compiler that shows all warnings from the previous compilation (instead of just of the files being compiled)
Type
enhancement
Tool
Mix
Module
mix escript.build
Description
Strip debug information from escripts by default and add option `:strip_beam` which defaults to true
Type
enhancement
Tool
Mix
Module
mix loadpaths
Description
Ensure `--no-deps-check` do not trigger SCM callbacks (such as `git`)
Type
enhancement
Tool
Mix
Module
mix local.hex
Description
Add `--if-missing` flag to `local.hex` mix task
Type
enhancement
Tool
Mix
Module
mix profile.cprof
Description
Add `Mix.Tasks.Profile.Cprof` for count-based profiling
Type
enhancement
Tool
Mix
Module
mix new
Description
New styling for generated applications
Type
bugfix
Tool
Elixir
Module
Calendar
Description
Ensure `Calendar.ISO` raises a readable error when reaching up the year 10000 restriction
Type
bugfix
Tool
Elixir
Module
Calendar
Description
Return `{:error, :invalid_time}` for wrong precision instead of crashing when parsing ISO dates
Type
bugfix
Tool
Elixir
Module
Enumerable
Description
Raise `Protocol.UndefinedError` on bad functions in Enumerable implementation
Type
bugfix
Tool
Elixir
Module
File
Description
Ensure recursive file operations raise on paths with null bytes (*security issue reported by Griffin Byatt*)
Type
bugfix
Tool
Elixir
Module
File
Description
Support `:ram`/`:raw` files in `File.copy/2`
Type
bugfix
Tool
Elixir
Module
Inspect
Description
Do not use colors when inspecting error messages
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Support guards on anonymous functions of zero arity
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Fix compilation of maps used as maps keys inside matches
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Ensure `do` clause in `with` is tail call optimizable
Type
bugfix
Tool
Elixir
Module
Module
Description
`on_definition/6` callback receives body wrapped in a keyword list, such as `[do: body]`. This solves a bug where it was impossible to distinguish between a bodyless clause and a function that returns `nil`.
Type
bugfix
Tool
Elixir
Module
Path
Description
Ensure recursive path operations raise on paths with null bytes (*security issue reported by Griffin Byatt*)
Type
bugfix
Tool
Elixir
Module
Protocol
Description
Do not lose source compile info on protocol consolidation
Type
bugfix
Tool
Elixir
Module
Record
Description
Properly escape quoted expressions passed to `defrecord`
Type
bugfix
Tool
Elixir
Module
Regex
Description
Fix `inspect/2` for regexes with `/` terminator in them
Type
bugfix
Tool
Elixir
Module
Registry
Description
Ensure `Registry.match/4` works with `:_` as key
Type
bugfix
Tool
Elixir
Module
Stream
Description
Fix stream cycle over empty enumerable
Type
bugfix
Tool
Elixir
Module
String
Description
Consider Unicode non-characters valid according to the specification in `String.valid?/1`
Type
bugfix
Tool
Elixir
Module
StringIO
Description
Fix encoding and performance issues in `StringIO.get_until`
Type
bugfix
Tool
Elixir
Module
System
Description
Raise on paths with null bytes in `System.cmd/2` and in `System.find_executable/1` (*security issue reported by Griffin Byatt*)
Type
bugfix
Tool
Elixir
Module
System
Description
Raise on ill-formed environment variables (*security issue reported by Griffin Byatt*)
Type
bugfix
Tool
ExUnit
Module
ExUnit
Description
Properly account failed tests when `setup_all` fails
Type
bugfix
Tool
IEx
Module
IEx
Description
Skip autocompletion of module names that are invalid without being quoted
Type
bugfix
Tool
IEx
Module
IEx
Description
Skip autocompletion of functions with default arguments with `@doc false`
Type
bugfix
Tool
IEx
Module
IEx
Description
Do not start oldshell alongside IEx
Type
bugfix
Tool
Mix
Module
mix compile.elixir
Description
Store multiple sources in case of module conflicts. This solves an issue where `_build` would get corrupted when compiling Elixir projects with module conflicts
Type
bugfix
Tool
Mix
Module
mix compile.erlang
Description
Do not silently discard Erlang compile errors
Type
bugfix
Tool
Mix
Module
mix compile.erlang
Description
Properly track `-compile` module attribute when specified as a list
Type
bugfix
Tool
Mix
Module
mix compile.protocols
Description
Ensure protocol implementations do not "disappear" when switching between applications in umbrella projects by having separate consolidation paths per project
Type
bugfix
Tool
Mix
Module
mix compile.protocols
Description
Do not raise when consolidating a protocol that was converted into a module
Type
enhancement
Tool
Elixir
Module
Kernel
Description
`not left in right` is soft-deprecated in favor of `left not in right`
Type
enhancement
Tool
Elixir
Module
Enum
Description
Deprecate `Enum.filter_map/3` in favor of `Enum.filter/2` + `Enum.map/2` or for-comprehensions
Type
enhancement
Tool
Elixir
Module
GenEvent
Description
Deprecate `GenEvent` and provide alternatives in its docs
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Using `()` to mean `nil` is deprecated
Type
enhancement
Tool
Elixir
Module
Kernel
Description
`:as_char_lists value` in `Inspect.Opts.t/0` type, in favor of `:as_charlists`
Type
enhancement
Tool
Elixir
Module
Kernel
Description
`:char_lists` key in `Inspect.Opts.t/0` type, in favor of `:charlists`
Type
enhancement
Tool
Elixir
Module
Module
Description
Using Erlang parse transforms via `@compile {:parse_transform, _}` is deprecated
Type
enhancement
Tool
Elixir
Module
Stream
Description
Deprecate `Stream.filter_map/3` in favor of `Stream.filter/2` + `Stream.map/2`
Type
enhancement
Tool
Elixir
Module
String
Description
`String.ljust/3` and `String.rjust/3` are deprecated in favor of `String.pad_leading/3` and `String.pad_trailing/3` with a binary padding
Type
enhancement
Tool
Elixir
Module
String
Description
`String.strip/1` and `String.strip/2` are deprecated in favor of `String.trim/1` and `String.trim/2`
Type
enhancement
Tool
Elixir
Module
String
Description
`String.lstrip/1` and `String.rstrip/1` are deprecated in favor of `String.trim_leading/1` and `String.trim_trailing/1`
Type
enhancement
Tool
Elixir
Module
String
Description
`String.lstrip/2` and `String.rstrip/2` are deprecated in favor of `String.trim_leading/2` and `String.trim_trailing/2` with a binary as second argument
Type
enhancement
Tool
Elixir
Module
Typespec
Description
`char_list/0` type is deprecated in favor of `charlist/0`
Type
enhancement
Tool
EEx
Module
EEx
Description
Deprecate `<%= ` in "middle" and "end" expressions, e.g.: `<%= else %>` and `<%= end %>`