1.1.0

Released on 2015-09-25

Changes

Type
enhancement
Tool
Elixir
Module
Application
Description
Add `Application.fetch_env!/2`, `Application.loaded_applications/0` and `Application.started_applications/0`
Type
enhancement
Tool
Elixir
Module
CLI
Description
Add support for `--werl` in Windows bash-like shells
Type
enhancement
Tool
Elixir
Module
Dict
Description
Add `Dict.get_and_update/3` which behaves similar to the now deprecated Access protocol
Type
enhancement
Tool
Elixir
Module
Dict
Description
Add `Dict.get_lazy/3`, `Dict.pop_lazy/3` and `Dict.put_new_lazy/3`
Type
enhancement
Tool
Elixir
Module
Enum
Description
Add `Enum.random/1`, `Enum.take_random/2`, `Enum.min_max/1`, `Enum.min_max_by/2`, `Enum.reverse_slice/3`, `Enum.reduce_while/3`, `Enum.dedup/1` and `Enum.dedup_by/2`
Type
enhancement
Tool
Elixir
Module
Enum
Description
Inline common map usage in `Enum` functions for performance
Type
enhancement
Tool
Elixir
Module
File
Description
Add `File.lstat/1` and `File.lstat/1` that works like `File.stat/1` but is able to return symlink information (i.e. it does not traverse symlinks)
Type
enhancement
Tool
Elixir
Module
File
Description
Add `File.rename/2`
Type
enhancement
Tool
Elixir
Module
Integer
Description
Add `Integer.digits/2` and `Integer.undigits/2`
Type
enhancement
Tool
Elixir
Module
Inspect
Description
Add the `:safe` option to `inspect/2` and make it safe by default, meaning failures while inspecting won't trigger other failures. Instead, it will be wrapped in an exception which is properly formatted
Type
enhancement
Tool
Elixir
Module
IO
Description
Support fenced code blocks on `IO.ANSI.Docs`
Type
enhancement
Tool
Elixir
Module
GenServer
Description
Add `GenServer.whereis/1` that expands `GenServer` dispatches into a proper pid
Type
enhancement
Tool
Elixir
Module
Kernel
Description
No longer include `:crypto` and `:syntax_tools` as dependencies. The former is only needed if you have encrypted debug info (therefore you can add `:crypto` as a dependency manually) and the latter is no longer used
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Raise when `var.Alias` syntax is used and it does not expand to an atom at compile time (previously it emitted warnings)
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Improve generation of argument names for function signatures
Type
enhancement
Tool
Elixir
Module
Kernel
Description
`::/2` is now a special form
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Warn when a variable with underscore is used
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Allow underscores in binary, octal and hex literals
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Warn when module attributes, variables, strings and numbers are used in code but the expression has no effect
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Support `\uXXXX` and `\u{X*}` in strings and char lists to map to Unicode codepoints
Type
enhancement
Tool
Elixir
Module
List
Description
Add `List.keytake/3`
Type
enhancement
Tool
Elixir
Module
Module
Description
Improve name inference for function signatures in documentation metadata
Type
enhancement
Tool
Elixir
Module
Process
Description
Add `Process.hibernate/3`
Type
enhancement
Tool
Elixir
Module
Process
Description
Allow a list of specs in `Process.info/2`
Type
enhancement
Tool
Elixir
Module
Set
Description
Introduce `MapSet` data type. This new data type uses maps behind the scenes and is useful for storing a dozens of items in Erlang 17. In future versions when maps efficiently support large collections, it is meant to be the main Set abstraction in Elixir
Type
enhancement
Tool
Elixir
Module
Stream
Description
Add `Stream.dedup/1`, `Stream.dedup_by/2` and `Stream.transform/4`
Type
enhancement
Tool
Elixir
Module
String
Description
Support calculation of the jaro distance between strings (usually names) via `String.jaro_distance/2`. This is used by Mix to support "Did you mean?" feature when a task does not exist
Type
enhancement
Tool
Elixir
Module
String
Description
Add `String.splitter/3` that splits strings as a stream
Type
enhancement
Tool
Elixir
Module
StringIO
Description
`StringIO.flush/1` was added to flush the output of a StringIO device
Type
enhancement
Tool
Elixir
Module
Task
Description
Introduce `Task.yield/2` and `Task.shutdown/2` to check if a task is still executing and shutdown otherwise
Type
enhancement
Tool
Elixir
Module
Tuple
Description
Add `Tuple.append/2`
Type
enhancement
Tool
Elixir
Module
URI
Description
Default ports were added for "ws" and "wss" schemas
Type
enhancement
Tool
Elixir
Module
URI
Description
Add `URI.to_string/1`
Type
enhancement
Tool
EEx
Module
EEx
Description
Add `:trim` option to EEx that automatically trims the left side of `<%` and right side `%>` if only spaces and new lines preceed/follow them
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Add number of skipped tests to `ExUnit` output
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Make timeout configurable for the whole test suite via the `:timeout` configuration
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Allow moduledoc to be filtered/skipped in doctests
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Provide built-in log capturing functionality
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Allow `assert_receive_timeout` and `refute_receive_timeout` to be configured in the ExUnit application
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Allow tests to be skipped with `@tag :skip` or `@tag skip: "reason"`
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Add tests without implementation (missing the do block) which automatically fail. Such tests are also automatically tagged as `:not_implemented`, allowing them to be skipped
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Increase by default stacktrace depth to 20 (this value is also configurable)
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Improve formatting on `assert_raise` errors for message mismatch
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Improve formatting on `assert_receive` when using pinned variables
Type
enhancement
Tool
IEx
Module
IEx
Description
Support `IEx.pry` with `--remsh` for remote debugging
Type
enhancement
Tool
IEx
Module
IEx
Description
Add `b/1` helper that shows documentation for behaviour modules and its callback functions
Type
enhancement
Tool
IEx
Module
IEx
Description
Provide tab completion for aliases and allow aliases like `Foo.Bar.Baz` to autocomplete even if `Foo.Bar` is not defined
Type
enhancement
Tool
IEx
Module
IEx
Description
Provide a `pid/3` helper for buildings pids from numbers
Type
enhancement
Tool
Logger
Module
Logger
Description
Support printing pids and refs in Logger metadata
Type
enhancement
Tool
Logger
Module
Logger
Description
Allow Logger metadata to be removed from pdict by setting it to `nil`
Type
enhancement
Tool
Logger
Module
Logger
Description
Add application configuration `translator_inspect_opts` for logger to customize how state and message are formatted when translating OTP errors and reports
Type
enhancement
Tool
Logger
Module
Logger
Description
Automatically include the current application in metadata when compiled via Mix
Type
enhancement
Tool
Mix
Module
Mix
Description
Check Elixir version right after archive installation and provide feedback if there is a mismatch
Type
enhancement
Tool
Mix
Module
Mix
Description
Allow rebar dependencies with `mix.exs` to be compiled with Mix
Type
enhancement
Tool
Mix
Module
Mix
Description
Allow rebar dependencies to be specified via `:path`
Type
enhancement
Tool
Mix
Module
Mix
Description
Also consider subdirectories in `config` directory for `Mix.Project.config_files/0`
Type
enhancement
Tool
Mix
Module
Mix
Description
Allow dynamic configuration in Mix projects by storing config in an agent
Type
enhancement
Tool
Mix
Module
Mix
Description
Support rebar3 style Git refs in `rebar.config` files
Type
enhancement
Tool
Mix
Module
Mix
Description
Only recompile compile time dependencies in mix projects. This should considerably speed up recompilation times in Elixir projects
Type
enhancement
Tool
Mix
Module
Mix
Description
Warn when configuring an application that is not available
Type
enhancement
Tool
Mix
Module
Mix
Description
Add `mix profile.fprof` for easy code profiling
Type
enhancement
Tool
Mix
Module
Mix
Description
Abort when dependencies have conflicting `:only` definitions
Type
enhancement
Tool
Mix
Module
Mix
Description
Fully recompile projects if Elixir or SCM changes
Type
enhancement
Tool
Mix
Module
Mix
Description
Allow checksum to be checked on archive install via `--sha512` option
Type
enhancement
Tool
Mix
Module
Mix
Description
Add `mix local.public_keys` to safely manage installation of Hex and Rebar dependencies
Type
bugfix
Tool
Elixir
Module
CLI
Description
Ensure Logger messages are flushed when executing commands
Type
bugfix
Tool
Elixir
Module
Code
Description
`:delegate_locals_to` failed to delegate to the chosen module in many situations and messed up stacktraces. This option has therefore been replaced by imports
Type
bugfix
Tool
Elixir
Module
Code
Description
Store the documentation line in the metadata returned by `Code.get_docs/2`
Type
bugfix
Tool
Elixir
Module
Exception
Description
Do not fail when calculating an exception message, even if the message is invalid
Type
bugfix
Tool
Elixir
Module
File
Description
Ensure `File.touch/2` and `File.stat/2` receive and return universal times. Previously they would work with local times which are not monotonically increasing, which could present issues on scripts. If the times are being shown to the user, `time: :local` can be given as argument
Type
bugfix
Tool
Elixir
Module
Float
Description
Support complete scientific notation in `Float.parse/1`
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Do not expand `in/2` argument in module body
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Throw syntax error for undefind atom/alias syntax `:foo.Bar`
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Improve error message when we can't compile because the target directory is not writeable
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Allow capture of non-symbolic operators like `&and/2`, `¬/1` and others
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Raise if heredoc terminal is accidentally found in the middle of a line without escaping
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Don't warn on missing imports if nothing was imported
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Raise if arity bigger than 255 is given to capture operator
Type
bugfix
Tool
Elixir
Module
Macro
Description
Properly convert captures in `Macro.to_string/1`
Type
bugfix
Tool
Elixir
Module
Module
Description
Do not accept non-Elixir module names in `Module.split/1`
Type
bugfix
Tool
Elixir
Module
Protocol
Description
Guarantee that derived protocols go through `Any` instead of `Map`
Type
bugfix
Tool
Elixir
Module
Range
Description
Restrict ranges to integers to fix diverse bugs of values being included in the range when they should not (false positives)
Type
bugfix
Tool
Elixir
Module
Regex
Description
Fix splitting of empty strings with regexes when trim is set to `true`. Now both `String.split/3` and `Regex.split/3` return an empty list when called with an empty string and trim is enabled
Type
bugfix
Tool
Elixir
Module
Regex
Description
Fix `Regex.replace/4` so it doesn't discard escape characters
Type
bugfix
Tool
Elixir
Module
Stream
Description
Ensure suspending `Stream.flat_map/2` and `Stream.transform/3` does not consume unecessary items from the given enumerable
Type
bugfix
Tool
EEx
Module
EEx
Description
Allow EEx interpolation to also apply inside quotations `<%%= ... %>`
Type
bugfix
Tool
ExUnit
Module
ExUnit
Description
Skipped tests now correctly count towards the total of tests in the result returned by `ExUnit.run/0`
Type
bugfix
Tool
ExUnit
Module
ExUnit
Description
Fix a bug where failures when inspecting data structure or retrieving error messages could bring the whole ExUnit runner down
Type
bugfix
Tool
ExUnit
Module
ExUnit
Description
Do not change the semantics of evaluated code with `assert`/`refute`. For example, from now on, `assert nil = some_expr()` will now raise as expected, as the expression still evaluates to a falsy value
Type
bugfix
Tool
ExUnit
Module
ExUnit
Description
Report proper line number for doctest failures
Type
bugfix
Tool
Logger
Module
Logger
Description
Include metadata in `Logger.log/3`, use `Logger.bare_log/3` for runtime-only, with no metadata behaviour
Type
bugfix
Tool
Mix
Module
Mix
Description
Use the safer `https` protocol instead of `git` for `:github` dependencies
Type
bugfix
Tool
Mix
Module
Mix
Description
Ensure automatic protocol consolidation via `:consolidate_protocols` is triggered in umbrella apps
Type
bugfix
Tool
Mix
Module
Mix
Description
Do not raise if wildcard given to `import_config` does not match any file
Type
bugfix
Tool
Mix
Module
Mix
Description
Applications with `:build_embedded` set to true require explicit compilation step
Type
bugfix
Tool
Mix
Module
Mix
Description
Also remove consolidated protocols on `mix clean`
Type
bugfix
Tool
Mix
Module
Mix
Description
Ensure `--exclude` in `mix test` concatenates with test helper excludes
Type
enhancement
Tool
Elixir
Module
Behaviour
Description
The module `Behaviour` is deprecated. Instead of `defcallback`, one can simply use `@callback`. Instead of `defmacrocallback`, one can simply use `@macrocallback`
Type
enhancement
Tool
Elixir
Module
Enum
Description
`Enum.uniq/2` is deprecated in favor of `Enum.uniq_by/2`
Type
enhancement
Tool
Elixir
Module
Kernel
Description
`\x` inside strings and charlists is deprecated in favor of `\uXXXX` and `\u{X*}`. The values emitted by `\x` are unfortunately wrong (they should be bytes but currently it emits codepoints). `\u` is meant to correctly map to codepoints and `\x` will be fixed in the future to map to bytes
Type
enhancement
Tool
Elixir
Module
Regex
Description
Ungreedy option `r` is deprecated in favor of `U` (which is standard in regular expressions in other languages)
Type
enhancement
Tool
Elixir
Module
Access
Description
Implementing the Access protocol is deprecated. The Access protocol relies on the code server in development and test mode (when protocol consolidation is not applied) and it generated a bottleneck when working with multiple processes and the Access protocol was invoked hundreds of times (which is not uncommon). Note the `Access` module and the `opts[key]` syntax are not affected and they are not deprecated, only the underlying protocol dispatch
Type
enhancement
Tool
Elixir
Module
Kernel
Description
`?\xHEX` is deprecated in favor of `0xHEX`. There is no situation where the former should be used in favor of the latter and the latter is always cleaner
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Giving `as: true | false` to `alias/2` and `require/2` have been deprecated (it was undocumented behaviour)
Type
enhancement
Tool
Elixir
Module
String
Description
Passing an empty string to `starts_with?`, `contains?` and `ends_with?` had dubious behaviour and have been deprecated to help developers identify possible bugs in their source code