1.7.0
Released on 2018-07-25
Changes
- Type
- enhancement
- Tool
- Elixir
- Module
- Calendar.ISO
- Description
- Support negative dates in `Calendar.ISO`
- Type
- enhancement
- Tool
- Elixir
- Module
- Calendar
- Description
- Add `Calendar.months_in_year/1` callback
- Type
- enhancement
- Tool
- Elixir
- Module
- Code
- Description
- Add `Code.compile_file/2` that compiles files without leaving footprints on the system
- Type
- enhancement
- Tool
- Elixir
- Module
- Code
- Description
- Add `Code.purge_compiler_modules/0` that purges any compiler module left behind. This is useful for live systems dynamically compiling code
- Type
- enhancement
- Tool
- Elixir
- Module
- Code
- Description
- Add `Code.fetch_docs/1` that returns docs in the [EEP 48](http://erlang.org/eep/eeps/eep-0048.html) format
- Type
- enhancement
- Tool
- Elixir
- Module
- Date
- Description
- Add `Date.months_in_year/1` function
- Type
- enhancement
- Tool
- Elixir
- Module
- DynamicSupervisor
- Description
- Use the name of the `DynamicSupervisor` as the ID whenever possible
- Type
- enhancement
- Tool
- Elixir
- Module
- Exception
- Description
- Provide "did you mean" suggestions on KeyError
- Type
- enhancement
- Tool
- Elixir
- Module
- Exception
- Description
- Provide more information on ArithmeticError on Erlang/OTP 21+
- Type
- enhancement
- Tool
- Elixir
- Module
- Function
- Description
- Add `Function` module with `capture/3`, `info/1` and `info/2` functions
- Type
- enhancement
- Tool
- Elixir
- Module
- GenServer
- Description
- Support the new `handle_continue/2` callback on Erlang/OTP 21+
- Type
- enhancement
- Tool
- Elixir
- Module
- IO.ANSI
- Description
- Add cursor movement to `IO.ANSI`
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Support adding arbitrary documentation metadata by passing a keyword list to `@doc`, `@moduledoc` and `@typedoc`
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Introduce `__STACKTRACE__` to retrieve the current stacktrace inside `catch`/`rescue` (this will be a requirement for Erlang/OTP 21+)
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Raise on unsafe variables in order to allow us to better track unused variables (also known as imperative assignment / variable leakage)
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Warn when using `length` to check if a list is not empty on guards
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Add hints on mismatched `do`/`end` and others pairs
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Warn when comparing structs using the `>`, `<`, `>=` and `<=` operators
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Warn on unsupported nested comparisons such as `x < y < z`
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Warn if redefining documentation across clauses of the same definition
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Warn on unnecessary quotes around atoms, keywords and calls
- Type
- enhancement
- Tool
- Elixir
- Module
- Macro
- Description
- Add `Macro.special_form?/2` and `Macro.operator?/2` that returns `true` if the given name/arity is a special form or operator respectively
- Type
- enhancement
- Tool
- Elixir
- Module
- Macro.Env
- Description
- Add `Macro.Env.vars/1` and `Macro.Env.has_var?/2` that gives access to environment data without accessing private fields
- Type
- enhancement
- Tool
- Elixir
- Module
- Regex
- Description
- Include endianness in the regex version. This allows regexes to be recompiled when an archive is installed in a system with a different endianness
- Type
- enhancement
- Tool
- Elixir
- Module
- Registry
- Description
- Add `Registry.count/1` and `Registry.count_match/4`
- Type
- enhancement
- Tool
- Elixir
- Module
- String
- Description
- Update to Unicode 11
- Type
- enhancement
- Tool
- Elixir
- Module
- StringIO
- Description
- Add `StringIO.open/3`
- Type
- enhancement
- Tool
- Elixir
- Module
- System
- Description
- Use ISO 8601 in `System.build_info/0`
- Type
- enhancement
- Tool
- ExUnit
- Module
- ExUnit.Assertion
- Description
- Print the arguments in error reports when asserting on a function call. For example, if `assert is_list(arg)` fails, the argument will be shown in the report
- Type
- enhancement
- Tool
- ExUnit
- Module
- ExUnit.Diff
- Description
- Improve diffing of lists when one list is a subset of the other
- Type
- enhancement
- Tool
- ExUnit
- Module
- ExUnit.DocTest
- Description
- Show colored diffs on failed doctests
- Type
- enhancement
- Tool
- ExUnit
- Module
- ExUnit.Formatter
- Description
- Excluded tests, via the `--exclude` and `--only` flags, are now shown as "Excluded" in reports. Tests skipped via `@tag :skip` are now exclusively shown as "Skipped" and in yellow
- Type
- enhancement
- Tool
- IEx
- Module
- IEx.Helpers
- Description
- Add `use_if_available/2`
- Type
- enhancement
- Tool
- IEx
- Module
- IEx.Helpers
- Description
- Allow `force: true` option in `recompile/1`
- Type
- enhancement
- Tool
- IEx
- Module
- IEx.Helpers
- Description
- Add `:allocators` pane to `runtime_info/1`
- Type
- enhancement
- Tool
- IEx
- Module
- IEx.Helpers
- Description
- Show documentation metadata in `h/1` helpers
- Type
- enhancement
- Tool
- Logger
- Module
- Logger
- Description
- Ensure nil metadata is always pruned
- Type
- enhancement
- Tool
- Logger
- Module
- Logger
- Description
- Only evaluate Logger macro arguments when the message will be logged
- Type
- enhancement
- Tool
- Logger
- Module
- Logger
- Description
- Add `:compile_time_purge_matching` to purge logger calls that match certain compile time metadata, such as module names and application names
- Type
- enhancement
- Tool
- Logger
- Module
- Logger
- Description
- Log to `:stderr` if a backend fails and there are no other backends
- Type
- enhancement
- Tool
- Logger
- Module
- Logger
- Description
- Allow translators to return custom metadata
- Type
- enhancement
- Tool
- Logger
- Module
- Logger
- Description
- Return `:crash_reason`, `:initial_call` and `:registered_name` as metadata in crash reports coming from Erlang/OTP
- Type
- enhancement
- Tool
- Mix
- Module
- mix archive.install
- Description
- Add support for the Hex organization via `--organization`
- Type
- enhancement
- Tool
- Mix
- Module
- mix archive.uninstall
- Description
- Support `--force` flag
- Type
- enhancement
- Tool
- Mix
- Module
- mix compile
- Description
- Improve support for external build tools such as `rebar`
- Type
- enhancement
- Tool
- Mix
- Module
- mix deps
- Description
- Include `override: true` in rebar dependencies to make the behaviour closer to how rebar3 works (although diverged deps are still marked as diverged)
- Type
- enhancement
- Tool
- Mix
- Module
- mix escript.install
- Description
- Add support for the Hex organization via `--organization`
- Type
- enhancement
- Tool
- Mix
- Module
- mix escript.uninstall
- Description
- Support `--force` flag
- Type
- enhancement
- Tool
- Mix
- Module
- mix help
- Description
- Also list aliases
- Type
- enhancement
- Tool
- Mix
- Module
- mix local
- Description
- Use ipv6 with auto fallback to ipv4 when downloading data
- Type
- enhancement
- Tool
- Mix
- Module
- mix profile
- Description
- Allow all profiling tasks to run programatically
- Type
- enhancement
- Tool
- Mix
- Module
- mix test
- Description
- Add `--failed` option that only runs previously failed tests
- Type
- enhancement
- Tool
- Mix
- Module
- mix test
- Description
- Print coverage summary by default when the `--cover` flag is given
- Type
- enhancement
- Tool
- Mix
- Module
- Mix.Project
- Description
- Add `Mix.Project.clear_deps_cache/0`
- Type
- enhancement
- Tool
- Mix
- Module
- Mix.Project
- Description
- Add `Mix.Project.config_mtime/0` that caches the config mtime values to avoid filesystem access
- Type
- bugfix
- Tool
- Elixir
- Module
- IO.ANSI.Docs
- Description
- Fix table column alignment when converting docs to ANSI escapes
- Type
- bugfix
- Tool
- Elixir
- Module
- Code
- Description
- Ensure `string_to_quoted` returns error tuples instead of raising in certain constructs
- Type
- bugfix
- Tool
- Elixir
- Module
- Code.Formatter
- Description
- Consistently format keyword lists in function calls with and without parens
- Type
- bugfix
- Tool
- Elixir
- Module
- Code.Formatter
- Description
- Do not break after `->` when there are only comments and one-line clauses
- Type
- bugfix
- Tool
- Elixir
- Module
- File
- Description
- Allow the `:trim_bom` option to be used with `:encoding`
- Type
- bugfix
- Tool
- Elixir
- Module
- Kernel
- Description
- Raise on unsafe variables as some of the code emitted with unsafe variables would not correctly propagate variables or would disable tail call optimization semantics
- Type
- bugfix
- Tool
- Elixir
- Module
- Kernel
- Description
- Do not crash on dynamic sizes in binary generators with collectable into in comprehensions
- Type
- bugfix
- Tool
- Elixir
- Module
- Kernel
- Description
- Do not crash on literals with non-unary size in binary generators with collectable into in comprehensions
- Type
- bugfix
- Tool
- Elixir
- Module
- Task
- Description
- Improve error reports and exit reasons for failed tasks on Erlang/OTP 20+
- Type
- bugfix
- Tool
- ExUnit
- Module
- ExUnit.Case
- Description
- Raise proper error if `@tag` and `@moduletag` are used before `use ExUnit.Case`
- Type
- bugfix
- Tool
- ExUnit
- Module
- ExUnit.Case
- Description
- Raise proper error if `@describetag` is used outside of `describe/2` blocks
- Type
- bugfix
- Tool
- ExUnit
- Module
- ExUnit.DocTest
- Description
- Emit proper assertion error on doctests with invalid UTF-8
- Type
- bugfix
- Tool
- Mix
- Module
- mix archive.install
- Description
- Fetch optional dependencies when installing an archive from Git/Hex
- Type
- bugfix
- Tool
- Mix
- Module
- mix compile
- Description
- Properly track config files in umbrella projects and recompile when any relevant umbrella configuration changes
- Type
- bugfix
- Tool
- Mix
- Module
- mix deps
- Description
- Ensure the same dependency from different SCMs are tagged as diverged when those SCMs are remote and non-remote
- Type
- bugfix
- Tool
- Mix
- Module
- mix deps
- Description
- Ensure we re-run dependency resolution when overriding a skipped dep in umbrella
- Type
- bugfix
- Tool
- Mix
- Module
- mix deps.compile
- Description
- Perform clean builds for dependencies on outdated locks to avoid old modules from affecting future compilation
- Type
- bugfix
- Tool
- Mix
- Module
- mix escript.install
- Description
- Fetch optional dependencies when installing an escript from Git/Hex
- Type
- enhancement
- Tool
- Elixir
- Module
- Code
- Description
- Deprecate `Code.load_file/2` in favor of `Code.compile_file/2`
- Type
- enhancement
- Tool
- Elixir
- Module
- Code
- Description
- Deprecate `Code.loaded_files/0` in favor of `Code.required_files/0`
- Type
- enhancement
- Tool
- Elixir
- Module
- Code
- Description
- Deprecate `Code.unload_files/1` in favor of `Code.unrequire_files/1`
- Type
- enhancement
- Tool
- Logger
- Module
- Logger
- Description
- `compile_time_purge_level` is deprecated in favor of `compile_time_purge_matching`
- Type
- enhancement
- Tool
- Elixir
- Module
- Code
- Description
- `Code.get_docs/2` is deprecated in favor of `Code.fetch_docs/1`
- Type
- enhancement
- Tool
- Elixir
- Module
- Enum
- Description
- `Enum.chunk/2/3/4` is deprecated in favor of `Enum.chunk_every/2/3/4` - notice `chunk_every` does not discard incomplete chunks by default
- Type
- enhancement
- Tool
- Elixir
- Module
- GenServer
- Description
- Warn if `super` is used in any of the GenServer callbacks
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- `not left in right` is ambiguous and is deprecated in favor of `left not in right`
- Type
- enhancement
- Tool
- Elixir
- Module
- Kernel
- Description
- Warn on confusing operator sequences, such as `1+++1` meaning `1 ++ +1` or `........` meaning `... .. ...`
- Type
- enhancement
- Tool
- Elixir
- Module
- OptionParser
- Description
- Deprecate dynamic option parser mode that depended on atoms to be previously loaded and therefore behaved inconsistently
- Type
- enhancement
- Tool
- Elixir
- Module
- Stream
- Description
- `Stream.chunk/2/3/4` is deprecated in favor of `Stream.chunk_every/2/3/4` - notice `chunk_every` does not discard incomplete chunks by default