1.3.0

Released on 2016-06-21

Changes

Type
enhancement
Tool
EEx
Module
EEx.Engine
Description
Support an `init/1` function in engines that will return the initial buffer (defaults to an empty string)
Type
enhancement
Tool
Elixir
Module
Access
Description
Add support for `Access.all/0`, `Access.elem/1`, `Access.key/2` and `Access.key!/1` for traversing nested data structures
Type
enhancement
Tool
Elixir
Module
Calendar
Description
Add `Calendar` and `Date`, `Time`, `NaiveDateTime` and `DateTime` types
Type
enhancement
Tool
Elixir
Module
CLI
Description
Add `--logger-otp-reports BOOL` and `--logger-sasl-reports BOOL` switches
Type
enhancement
Tool
Elixir
Module
Compiler
Description
Emit a summary of compilation errors when modules are missing
Type
enhancement
Tool
Elixir
Module
Enum
Description
Add `Enum.group_by/3` that allows developers to map on the value being grouped
Type
enhancement
Tool
Elixir
Module
Enum
Description
Make list values in maps returned by `Enum.group_by/2` and `Enum.group_by/3` preserve the order of the input enumerable instead of reversing it.
Type
enhancement
Tool
Elixir
Module
Enum
Description
Add `Enum.drop_every/2` that drops every `nth`, including the first one
Type
enhancement
Tool
Elixir
Module
Exception
Description
Suggest possible functions on `UndefinedFunctionError` for existing modules
Type
enhancement
Tool
Elixir
Module
Exception
Description
Warn if unknown fields are given to `raise/2`
Type
enhancement
Tool
Elixir
Module
File
Description
Support IO devices in `File.copy/3`
Type
enhancement
Tool
Elixir
Module
GenServer
Description
Raise a more meaningful exit if you try to `GenServer.call/3` yourself
Type
enhancement
Tool
Elixir
Module
Inspect
Description
Support `:base` option when inspecting binaries
Type
enhancement
Tool
Elixir
Module
IO
Description
Add `IO.warn/2` that will print a warning message with stacktrace and notify the compiler a warning was printed (in case --warnings-as-errors was enabled)
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Support `generated: true` in quote
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Support `Kernel.pop_in/1` and `Kernel.pop_in/2` for yanking a value from a nested data structure
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Allow variable struct names when matching, for example, `%module{key: "value"} = struct`
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Allow guards on the left side of `<-` in `for` and `with` special forms
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Support `else` chunks in `with`
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Track `{module, function, arity}` imports and warn on unused ones when such are specified in `:only`
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Add `keyword/0` and `keyword/1` built-in types to typespecs
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Add sigils for date (`~D[2015-04-17]`), time (`~T[08:00:00]`) and naive date times `~N[2015-04-17 08:00:00]`
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Support `@enforce_keys` on `defstruct/1` to guarantee some keys are explicitly given when building structs
Type
enhancement
Tool
Elixir
Module
OptionParser
Description
Add support for `:count` switch type
Type
enhancement
Tool
Elixir
Module
OptionParser
Description
Add `parse!/2` and `parse_head!/2` that raise `OptionParser.ParseError` in case of errors
Type
enhancement
Tool
Elixir
Module
Process
Description
Add `Process.sleep/1`
Type
enhancement
Tool
Elixir
Module
Range
Description
`Range.range?/1` now checks the validity of a range.
Type
enhancement
Tool
Elixir
Module
Regex
Description
Support `:include_captures` in `Regex.split/3`
Type
enhancement
Tool
Elixir
Module
String
Description
Add `String.myers_difference/2` for calculating the difference between two strings
Type
enhancement
Tool
Elixir
Module
System
Description
Add `System.os_time/0` and `System.os_time/1`
Type
enhancement
Tool
Elixir
Module
Typespec
Description
Add support for `%{required(foo) => bar}` and `%{optional(foo) => bar}` forms (Erlang 19 only)
Type
enhancement
Tool
Elixir
Module
Typespec
Description
Add support for `@optional_callbacks` to mark certain that certain callbacks may be optionally implemented
Type
enhancement
Tool
Elixir
Module
Typespec
Description
Introduce `%{...}` to mean any map (Erlang 19 only)
Type
enhancement
Tool
Elixir
Module
URI
Description
Add `URI.merge/2`
Type
enhancement
Tool
Elixir
Module
Version
Description
Add `Version.parse!/1`
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Show pinned variables on failed `assert ^left = right` and `assert match?(^left, right)` assertions
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Add `ExUnit.Case.register_attribute` which allow attributes to be cleaned up whenever a test is defined
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Add `ExUnit.Case.register_test` and support the ability to tag "tests" by type. This will allow projects like QuickCheck to change the wording in formatters to say "10 properties" instead of "10 tests"
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Support diffing of values when using `==` in `assert`
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Start running tests as soon as cases are loaded. This feature is enabled by default when running tests through Mix
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Raise a straight-forward error message in case a duplicate test name is defined
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Bump the default number of max cases to double of schedulers to support both IO and CPU bound tests
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Support for named setups in `setup` and `setup_all`
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Support for bundling tests together with `describe/2`
Type
enhancement
Tool
IEx
Module
IEx
Description
Add `nl/2` that loads a given module on a list of nodes
Type
enhancement
Tool
IEx
Module
IEx.Helpers
Description
No longer restart applications on `recompile/1`
Type
enhancement
Tool
IEx
Module
IEx.Autocomplete
Description
Improve IEx expand to handle functions after `&`
Type
enhancement
Tool
Logger
Module
Logger
Description
Introduce `Logger.reset_metadata/0,1`
Type
enhancement
Tool
Mix
Module
Mix
Description
Add `mix xref` and `mix compile.xref` that runs cross-reference checks, with the latter running after compilation by default
Type
enhancement
Tool
Mix
Module
Mix
Description
Add `mix app.tree` and `mix deps.tree`
Type
enhancement
Tool
Mix
Module
Mix
Description
Add `Mix.Task.rerun/2` that reenables and re-runs a task
Type
enhancement
Tool
Mix
Module
Mix
Description
Integrate `OptionParser.ParseError` into Mix, automatically converting such exceptions into `Mix.Error` and embedding the task information
Type
enhancement
Tool
Mix
Module
Mix
Description
Support `@preferred_cli_env` attribute when defining tasks
Type
enhancement
Tool
Mix
Module
Mix
Description
Support `mix test --raise` that will raise when a test suite fails (instead of setting the exit code to 1)
Type
enhancement
Tool
Mix
Module
Mix
Description
Enable rebar3 manager by default for Hex dependencies
Type
enhancement
Tool
Mix
Module
Mix
Description
Add `mix escript.install` to install escripts
Type
enhancement
Tool
Mix
Module
Mix
Description
Print stacktraces for `Mix.Error` when `MIX_DEBUG=1` is set
Type
enhancement
Tool
Mix
Module
Mix
Description
Add a user friendly error for merge conflicts on `mix.lock`
Type
enhancement
Tool
Mix
Module
Mix
Description
Track files between path dependencies. This means umbrella applications will no longer trigger full recompilation when a sibling changes. Instead it will only recompile the files affected by the sibling changes
Type
enhancement
Tool
Mix
Module
Mix
Description
No longer print every file being compiled. Instead a generic "Compiling N files (.ext)" will be printed and files will only be logged in case they take more than 5 seconds to compile. This threshold can be customized by passing the `--long-compilation-threshold` flag and the previous behaviour can be reenabled by giving `--verbose` to `mix compile`
Type
enhancement
Tool
Mix
Module
Mix
Description
Add `mix test --stale` that uses static analysis on source files to know which tests should run when source files changes. If any test file changes, it will also re-run. Changing a configuration file or the test helper will trigger a full recompilation
Type
bugfix
Tool
Elixir
Module
Application
Description
Ensure `Application.spec/2` returns nil for unknown applications
Type
bugfix
Tool
Elixir
Module
GenServer
Description
Ensures `cast/2` returns `:ok` if locally registered process is not found
Type
bugfix
Tool
Elixir
Module
Inspect
Description
Ensure binaries break into new lines when inspected
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Do not choke on capture operator with argument above `&191`
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Raise if `defstruct` is called multiple times
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Ensure `Module.create/3` respects var/alias hygiene
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Support non-literal ranges on the right side of `in/2`
Type
bugfix
Tool
Elixir
Module
Macro
Description
Fix `Macro.to_string/1` on a call of a capture argument, for example `&(&1).(:x)`
Type
bugfix
Tool
Elixir
Module
OptionParser
Description
Allow `OptionParser` to parse negative numbers
Type
bugfix
Tool
Elixir
Module
Record
Description
Fix `Record.is_record/2` when dealing with non-record tuples
Type
bugfix
Tool
Elixir
Module
String
Description
Ensure `strip` also removes non-breaking whitespaces (and ensure `split` still does not split on them)
Type
bugfix
Tool
Elixir
Module
URI
Description
Use square brackets for IPv6 in `URI.to_string/1`
Type
bugfix
Tool
Mix
Module
Mix
Description
Improve task not found message when Mix would include the not found task as a suggestion due to different casing
Type
bugfix
Tool
Mix
Module
Mix
Description
Ignore lock revision when the lock is out of date when updating Mix dependencies. Before this fix, Git tags and branches in the lock file would erroneously take higher precedence than the one in `mix.exs`
Type
bugfix
Tool
Mix
Module
Mix
Description
Only recompile empty Elixir files if they change instead of recompiling them on every run
Type
bugfix
Tool
Mix
Module
Mix
Description
Ensure .app file is written in UTF-8 (this allows app descriptions to contain UTF-8 characters)
Type
bugfix
Tool
Mix
Module
Mix.Dep
Description
Always specify the `:env` option internally for dependencies to avoid false positives in the dependency resolution
Type
bugfix
Tool
Mix
Module
Mix.Dep
Description
Correctly detect conflict from cousin optional dependencies in the dependency resolution algorithm
Type
enhancement
Tool
Elixir
Module
Float
Description
`Float.to_string/2` and `Float.to_char_list/2` has been soft-deprecated as Elixir will now attempt to print the shortest and most accurate representation by default. Developers can always fallback to `:erlang.float_to_binary/2` and `:erlang.float_to_list/2` if they need the previous functionality
Type
enhancement
Tool
Elixir
Module
Kernel
Description
`to_char_list` functions have been soft-deprecated in favor of `to_charlist`. This aligns with the naming conventions in both Erlang and Elixir
Type
enhancement
Tool
Elixir
Module
String
Description
The confusing `String.strip/2`, `String.lstrip/2` and `String.rstrip/2` API has been soft deprecated in favor of `String.trim/2`, `String.trim_leading/2` and `String.trim_trailing/2`
Type
enhancement
Tool
Elixir
Module
String
Description
The confusing `String.ljust/3` and `String.rjust/3` API has been soft deprecated in favor of `String.pad_leading/3` and `String.pad_trailing/3`
Type
enhancement
Tool
Elixir
Module
Typespec
Description
`char_list` is soft-deprecated in favor of `charlist`
Type
enhancement
Tool
Elixir
Module
Dict
Description
`Dict` is no longer a behaviour and its functions will be deprecated in upcoming releases
Type
enhancement
Tool
Elixir
Module
Enum
Description
Passing a dictionary to `Enum.group_by/3` is deprecated
Type
enhancement
Tool
Elixir
Module
Kernel
Description
`\x{H*}` in strings/sigils/charlists is deprecated
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Add deprecation for `defdelegate` list arguments and `:append_first` option. The previously undocumented and deprecated support for matching has been removed
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Warn if a variable is assigned inside `case`/`if`/etc and used outside the block
Type
enhancement
Tool
Elixir
Module
Keyword
Description
`Keyword.size/1` is deprecated in favor of `Kernel.length/1`
Type
enhancement
Tool
Elixir
Module
Map
Description
`Map.size/1` is deprecated in favor of `Kernel.map_size/1`
Type
enhancement
Tool
Elixir
Module
Regex
Description
The option `/r` (for ungreedy) has been deprecated in favor of `/U`
Type
enhancement
Tool
Elixir
Module
Set
Description
`Set` is no longer a behaviour and its functions will be deprecated in upcoming releases
Type
enhancement
Tool
Elixir
Module
String
Description
`String.valid_character?/1` is deprecated in favor of `String.valid?/1` with pattern matching
Type
enhancement
Tool
Elixir
Module
Task
Description
`Task.find/2` is deprecated in favor of explicit message matching
Type
enhancement
Tool
Elixir
Module
URI
Description
Passing a non-map to `URI.decode_query/2` is deprecated