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 %>`