Skip to content

v0.14.3

Pre-release
Pre-release
Compare
Choose a tag to compare
@ericmj ericmj released this 12 Jul 13:08

Enhancements

  • [Access] Allow function access on get_in/2 and get_and_update_in/3
  • [Enum] Add Enum.sort_by/3
  • [ExUnit] Match the line filter by proximity instead of exact match
  • [Float] Support precision in Float.ceil/1 and Float.floor/1
  • [IO] Add IO.(bin)read(device, :all)
  • [Kernel] Print a warning if a dangling @doc clause is found
  • [Mix] Use absolute symbolic links on Windows for _build instead of copying
  • [Mix] Add Mix.compilers that returns all default compilers used by mix tasks
  • [Mix] Issue warning and reset mtime for source files from the future
  • [Mix] Support task aliases in Mix
  • [OptionParser] Add OptionParser.split/1 that splits a string into argv
  • [Record] Allow a record to be converted to a keyword list with record(some_record)
  • [String] Improve performance of String.split/1
  • [Typespec] Allow %Struct{} syntax to be used in typespecs
  • [Typespec] Allow record(:record, fields) syntax to be used in typespecs

Bug fixes

  • [IEx] Do not print ANSI sequences on IEx.Helpers.clear/0 if ANSI sequences are not supported
  • [Inspect] Ensure Inspect.Algebra.to_doc/2 doesn't go into a loop when there is a failure printing a struct
  • [Kernel] |>, <<<, >>> and ^^^ made left associative in operator table
  • [Kernel] <, >, <=, >= given higher precedence than comparison operators (==, !=, etc) in the operator table
  • [Kernel] Run command line and escripts in a process that does not trap exits
  • [Kernel] Fix a bug where Mix paths had higher priority than CLI ones, causing protocol consolidations to not be properly loaded
  • [Kernel] Fix wording on error messages when a check/guard always passes or always fails
  • [Kernel] Fix a bug where an unused function warning was printed even when the function was used via defoverridable
  • [Kernel] Improve typespecs so they don't generate supertype dialyzer warnings
  • [Macro] to_string correctly displays sigils
  • [Mix] Ensure Mix dependencies are not compiled every second time when mix deps.compile is invoked
  • [Mix] Fix a bug where Mix.shell.error/1 and friends choked when printing a map
  • [Mix] Ensure multiple @external_resource entries are read by Mix compilers
  • [Mix] Fix a bug where tasks for umbrella projects were not properly reenabled
  • [Stream] Fix bug when flat_map is used inside another flat_map with an Enumerable
  • [Typespec] Fix a bug where the list typespec was incorrectly rendered as []

Soft deprecations (no warnings emitted)

  • [Kernel] Using a list for bitstring modifiers is deprecated (as in <<x :: [little, utf16]>>), please use - as the separator instead (as in <<x :: little-utf16>>)
  • [System] System.cmd/1 is deprecated in favor of System.cmd/3

Deprecations

  • [Mix] mix escriptize is deprecated in favor of escript.build
  • [Mix] mix local.install and mix local.uninstall have been deprecated in favor of mix archive.install and mix archive.uninstall respectively
  • [Mix] :embed_extra_apps for escripts is deprecated, instead list the dependencies inside def application
  • [System] Giving a char list to System.find_executable/1 is deprecated

Backwards incompatible changes

  • [Access] No longer fill in missing intermediate values with empty maps
  • [Float] Float.ceil/2 and Float.floor/2 now always returns floats and no longer accept integers
  • [Kernel] defstruct no longer automatically defines a type
  • [Kernel] exit(integer) is no longer supported from scripts to configure the exit signal. Use exit({:shutdown, integer}) instead
  • [Kernel] Default argument values have to be defined in a function head if the function has multiple clauses
  • [Mix] mix archive.build replaces the functionality of mix archive, mix archive now lists locally installed archives
  • [Mix] Mix.shell.info/1 no longer automatically escape ANSI sequences. Instead if has to be explicitly enabled with the ansi: true option
  • [OptionParser] --no-SWITCH are only allowed for declared booleans switches