Thu Jan 6 18:45:51 UTC 2022 - Sven Marquardt <dev@mail.smarquardt.space>
- Elixir 1.13.0
* Enhancements
EEx
[EEx] Add `:parser_options` to EEx functions
Elixir
[Calendar] Add `c:Calendar.year_of_era/3` to support calendars where the beginning of a new era does not align with
the beginning of a new year
[CLI] Support `--short-version` on the CLI that does not boot the VM
[Code] Add `Code.string_to_quoted_with_comments/2` and `Code.quoted_to_algebra/2`
[Code] Add more `:token_metadata` to aliases and remote calls when parsing strings
[Code] Add `Code.Fragment` module to provide best-effort information from code fragments.
The module currently provides an updated `Code.Fragment.cursor_context/2` with operator support and
`Code.Fragment.surround_context/2` which looks at a given position in a fragment and find its surrounding delimiters
[Code] Allow custom sigil formatting on `Code.format_string!/2`
[Code] Add `{:on_module, bytecode, :none}` trace to compilation tracers
[Enum] Optimize `Enum.concat/1` for lists of lists
[Enum] Add `Enum.slide/3`
[Exception] Better format Elixir exceptions in Erlang
[Inspect] Allow default inspect fun to be set globally with `Inspect.Opts.default_inspect_fun/1`
[IO] Allow `:eof` to be given as limit to `IO.getn/2`
[Kernel] Support the `:sigils` option in `import Mod, only: :sigils` and allow the sigil modifiers to be also digits
[Kernel] Make `get_in` consistently abort and return `nil` when `nil` values are found (previously Elixir would raise
an error in this case). This allows a user to use `get_in` as a safe navigation operator.
[Kernel] Improve compilation times by reducing the amount of copies of the AST across compiler processes
[Kernel] Raise if trying to define a module with a slash in its name
[Kernel] Warn when `?\` is used and there is no need for a escape character
[Kernel] Track structs in typespecs as export deps instead of compile-time deps
[Kernel] Add power operator (`**/2`)
[Keyword] Add `Keyword.validate/2`
[Keyword] Implement `Keyword.filter/2` and `Keyword.map/2`
[List] Add `List.keyfind!/3`
[Macro] Add `Macro.prewalker/1` and `Macro.postwalker/1`
[Macro.Env] Add the following reflection functions: `required?/2`, `lookup_import/2`, `fetch_alias/2`, and `fetch_macro_alias/2`
[Map] Implement `Map.filter/2` and `Map.map/2`
[Module] Support `:nillify_clauses` in `Module.get_definition/3`
[Module] Add `Module.attributes_in/1` and `Module.overridables_in/1`
[OptionParser] Add "did you mean?" suggestions to `OptionParser.ParseError` messages
[Record] Add record reflection via `@__records__`
[Task] Add `Task.completed/1`
[Task] Add `Task.ignore/1` to keep a task running but ignoring all of its results
[Task] Reduce the amount of copying `Task.async*` functions
[URI] Add `URI.new/1` and `URI.new!/1`
ExUnit
[ExUnit] Show hint if comparing different but equivalent strings
[ExUnit.CaptureIO] Add `with_io/3` to return result with captured io
[ExUnit.CaptureLog] Add `with_log/2` to return result with captured logs
IEx
[IEx.Autocomplete] Add path autocompletion whenever when the cursor follows `"./` or `"/` or `"DRIVER:` where
`DRIVER` is a single letter
[IEx.Autocomplete] Add autocompletion for sigils, struct names, and struct fields
[IEx.Helpers] Allow multiple modules to be given to `r/1`
Logger
[Logger] Add `Logger.put_application_level/2`
[Logger] Print all log levels in accordance to Erlang/OTP. This also means `[warn]` is now shown as `[warning]`
Mix
[Mix] Add `MIX_INSTALL_FORCE` environment variable support
[Mix] Support `:config` and `:system_env` in `Mix.install/2`
[Mix] Add `Mix.installed?/0`
[Mix.Shell] Add `:default` option to `Mix.Shell.yes?`
[mix archive.install] Run `loadconfig` before building archive
[mix compile] Move Elixir version check to before deps are compiled, in order to give feedback earlier
[mix compile.elixir] Do not recompile files if their modification time change but their contents are still the same and the .beam files are still on disk
[mix compile.elixir] Do not recompile all Elixir sources when Erlang modules change, only dependent ones
[mix compile.elixir] Do not recompile Elixir files if `mix.exs` changes, instead recompile only files using `Mix.Project` or trigger a recompilation if a compiler option changes
[mix compile.elixir] Only recompile needed files when a dependency is added, updated or removed
[mix compile.elixir] Only recompile needed files when a dependency is configured
[mix deps] Add `:subdir` option to git deps
[mix escript.install] Run `loadconfig` before building escript
[mix format] Support `:plugins` in `mix format` that can hook into custom extensions and sigils
[mix local.rebar] No longer support `sub_dirs` in Rebar 2 to help migration towards Rebar 3
[mix local.rebar] Support `--if-missing` option when installing Rebar
[mix local.rebar] Set `REBAR_PROFILE=prod` when compiling Rebar dependencies
[mix test] Support `--profile-require=time` to profile the time loading test files themselves
[mix test] Allow filtering modules from coverage using regex
[mix test] Allow the exit status of ExUnit to be configured and set the default to 2
[mix test] Exit with a status of 3 when coverage falls below threshold
[mix test] Write failed manifest when suite fails due to --warnings-as-errors
[mix test] Ignore `MIX_TEST_PARTITION` when partitions set to 1
[mix xref] Support multiple sinks and sources in `mix xref graph`
[mix xref] Add `trace` subcommand to print compilation dependencies between files
[mix xref] Add `--fail-above` option to `mix xref`
[mix xref] Add `--label compile-connected` to `mix xref`
* 2. Bug fixes
EEx
[EEx] Accept comments in EEx between do and the first clause
[EEx] Accept EEx expressions where `->` is followed by newline
Elixir
[Application] Allow any expression as first argument of `compile_env`
[Application] Warn if `Application.compile_env` or `Application.compile_env!` are called without a require
[Code] Make sure `:static_atoms_encoder` in `Code.string_to_quoted/2` also applies to quoted keyword keys
[Code] Ensure bindings with no context are returned as atoms instead of `{binding, nil}` in eval operations
[Inspect] Fix a bug when inspecting a non-binary bitstring with colors
[Kernel] Reject bidirectional formatting characters in strings and comments
[Kernel] Support escaping of terminators in uppercase sigils heredocs for consistency
[Kernel] Raise if `__CALLER__` or `__ENV__` or `__STACKTRACE__` are used in match
[Kernel] Improve error message on invalid argument for `byte_size` from binary concat
[Kernel] Raise when aliasing non-Elixir modules without `:as`
[Kernel] Allow `unquote_splicing` inside `%{...}` without parens
[Kernel] Ensure that waiting on a struct expansion inside a typespec is correctly tracked as waiting time in the compiler
[Kernel] Correctly parse the atom `.` as a keyword list key
[Kernel] Do not leak variables from the first generator in `with` and `for` special forms
[Kernel] Fix column number on strings with NFD characters
[Kernel] Fix a bug where a combination of dynamic line in `quote` with `unquote` of remote calls would emit invalid AST metadata
[OptionParser] Validate switch types/modifiers early on to give more precise feedback
[Protocol] Add `defdelegate` to the list of unallowed macros inside protocols as protocols do not allow function definitions
[Protocol] Warn if `@callback`, `@macrocallback` and `@optional_callbacks` are defined inside protocol
[Protocol] Ensure protocol metadata is deterministic on consolidation
[Range] Always show step when range is descending
[String] Update Unicode database to version 14.0
[URI] Only percent decode if followed by hex digits (according to https://url.spec.whatwg.org/#percent-decode)
[Version] Ensure proper precedence of `and`/`or` in version requirements
ExUnit
[ExUnit] Fix formatter and counters from `ExUnit.run/0` to consider all tests in a module whenever if a module's `setup_all` fails
[ExUnit] Allow doctests newlines to be terminated by CRLF
IEx
[IEx] Fix the loss of `.iex.exs` context after a pry session
[IEx] Stop evaluator before exiting IEx server to avoid evaluators leaking
Logger
[Logger] Raise clear error message for invalid `:compile_time_purge_matching` configuration
[Logger] Fix a bug where Logger would not reset its discard counter under some scenarios
Mix
[mix compile.elixir] Track transitive runtime dependencies coming from local/path dependencies
[mix compile.elixir] Recompile file if `@external_resource` is deleted
[mix compile.elixir] Print number of compiling files on all compiler cycles. This will make the `Compiling N files (.ex)` show up multiple times if necessary
[mix deps] Raise if local dep is unavailable while compiling
[mix deps.unlock] Fix blank output when unlocking a dependency that is not locked
[mix local.install] Do not respect `MIX_DEPS_PATH` for install commands
[mix release] Improve release scripts by making sure shell errors cascade (this is done by avoiding exporting and defining variables in a single step)
[mix release] Do not boot release if `RELEASE_COOKIE` is empty
[mix release] Allow releases running as a daemon to be restarted
[mix release] Raise proper error message when non-serializable values are in configs
[mix test] Fix coverage engine to also tag `case`, `cond`, and `receive` branches where the right side is a literal
* 3. Soft-deprecations (no warnings emitted)
Elixir
[Code] Environment options in `Code.eval_quoted/3` and `Code.eval_string/3`, such as `:aliases` and `:tracers`, have been deprecated in favor of passing an environment
[IO] `:all` on `IO.getn` is deprecated in favor of `:eof`
[URI] `URI.parse/1` is deprecated in favor of `URI.new/1` and `URI.new!/1`
Mix
[mix format] `Mix.Tasks.Format.formatter_opts_for_file/2` is deprecated in favor of `Mix.Tasks.Format.formatter_for_file/2`
* 4. Hard-deprecations
Elixir
[Code] `Code.cursor_context/2` is deprecated, use `Code.Fragment.cursor_context/2` instead
[Macro] `Macro.to_string/2` is deprecated, use `Macro.to_string/1` instead
[System] `System.get_pid/0` is deprecated, use `System.pid/0` instead
[Version] Using `!` or `!=` in version requirements is deprecated, use `~>` or `>=` instead
Mix
[mix escript.build] `:strip_beam` option is deprecated in favor of `:strip_beams`
[Mix] `:exit_code` in `Mix.raise/2` has been deprecated in favor of `:exit_status`
[Mix.Config] `Mix.Config` is deprecated in favor of `Config` module
Full release notes: https://github.com/elixir-lang/elixir/releases/tag/v1.13.0
Mon Jun 14 19:24:33 UTC 2021 - Sven Marquardt <dev@mail.smarquardt.space>
- Elixir 1.12
* Enhancements
EEx
[EEx.Engine] Add `c:EEx.Engine.handle_text/3` callback that receives text metadata
[EEx.Engine] Emit warnings for unused "do" expression in EEx
Elixir
[Code] Add `Code.cursor_context/2` to return the context of a code snippet
[Code] Do not add newlines around interpolation on code formatting.
Note this means formatted code that has interpolation after the line length on Elixir v1.12 won't be considered as formatted on earlier Elixir versions
[Code] Do not add brackets when keywords is used in the access syntax
[Calendar] Support basic datetime format in `Calendar.ISO` parsing functions
[Code] Improve evaluation performance on systems running on Erlang/OTP 24+
[Date] Support steps via `Date.range/3`
[DateTime] Add `offset` to `DateTime.to_iso8601/2` (now `to_iso8601/3`)
[Enum] Add `Enum.count_until/2` and `Enum.count_until/3`
[Enum] Add `Enum.product/1`
[Enum] Add `Enum.zip_with/2`, `Enum.zip_with/3`, `Enum.zip_reduce/3`, and `Enum.zip_reduce/4`
[Enum] Add support for functions as the second argument of `Enum.with_index/2`
[Exception] Show `error_info` data for exceptions coming from Erlang
[Float] Add `Float.pow/2`
[Integer] Add `Integer.pow/2` and `Integer.extended_gcd/2`
[IO] Add `IO.stream/0` and `IO.binstream/0` which default to STDIO with line orientation
[List] Add default value for `List.first/1` and `List.last/1`
[Kernel] Add `first..last//step` as support for stepped ranges
[Kernel] Also warn for literal structs on `min/2` and `max/2`
[Kernel] Add `Kernel.tap/2` and `Kernel.then/2`
[Kernel] Do not add runtime dependencies to remotes in typespecs
[Kernel] When there is an unused variable warning and there is a variable with the same name previously defined, suggest the user may have wanted to use the pin operator
[Kernel] Improve error messages on invalid character right after a number
[Kernel] Show removal and deprecated tips from Erlang/OTP
[Macro] Add export dependencies on `Macro.struct!/2`
[Macro] Support `:newline` to customize newlines escaping in `Macro.unescape_string/2`
[Module] Raise on invalid `@dialyzer` attributes
[Module] Add `Module.get_definition/2` and `Module.delete_definition/2`
[Module] Allow `@on_load` to be a private function
[Module] Validate `@dialyzer` related module attributes
[Module] Add `Module.reserved_attributes/0` to list all reserved attributes by the language
[Range] Add `Range.new/3` and `Range.size/1`
[Regex] Add offset option to `Regex.scan/3` and `Regex.run/3`
[Registry] Support `:compression` on `Registry` tables
[Registry] Support `Registry.values/3` for reading values under a given key-pid pair
[Stream] Add `Stream.zip_with/2` and `Stream.zip_with/3`
[String] Add `:turkic` mode option to String case functions
[String] Update to Unicode 13.0
[System] Add `System.trap_signal/3` and `System.untrap_signal/2`
[System] Add `System.shell/2` to invoke a command that is interpreted by the shell
[Tuple] Add `Tuple.sum/1` and `Tuple.product/1`
[URI] Support RFC3986 compliant encoding and decoding of queries via the `:rfc3986` option
ExUnit
[ExUnit] Intercept SIGQUIT (via Ctrl+\\) and show a list of all aborted tests as well as intermediate test results
[ExUnit] Interpolate module attributes in match assertions diffs
[ExUnit] Print how much time is spent on `async` vs `sync` tests
[ExUnit] Improve error messages for doctests
[ExUnit] Compile doctests faster (often by two times)
[ExUnit] Add `ExUnit.async_run/0` and `ExUnit.await_run/1`
IEx
[IEx] Make IEx' parser configurable to allow special commands
[IEx] Show function signature when pressing tab after the opening parens of a function
[IEx] If an IEx expression starts with a binary operator, such as `|>`, automatically pipe in the result of the last expression
Mix
[Mix] Add `Mix.install/2` for dynamically installing a list of dependencies
[Mix] Support `:exit_code` option in `Mix.raise/2`
[Mix] Discard `MIX_ENV` and `MIX_TARGET` values if they are empty strings
[Mix] Print the time taken to execute a task with on `MIX_DEBUG=1`
[mix compile.erlang] Compile multiple files in parallel
[mix escript.build] Deep merge configuration and ensure argv is set when executing `config/runtime.exs`
[mix release] Add `RELEASE_PROG` to releases with the name of the executable starting the release
[mix release] Support `remote.vm.args` to customize how the connecting VM boots
[mix test] Run all available tests if there are no pending `--failed` tests. This provides a better workflow as you no longer need to toggle the `--failed` flag between runs
* Bug fixes
Elixir
[CLI] Ensure `-e ""` (with an empty string) parses correctly on Windows
[Inspect] Do not override user supplied `:limit` option for derived implementations
[Kernel] Allow heredoc inside a heredoc interpolation
[Kernel] Preserve CRLF on heredocs
[Kernel] Public functions without documentation now appear as an empty map on `Code.fetch_docs/1`,
unless they start with underscore, where they remain as `:none`. This aligns Elixir's implementation with EEP48
[Kernel] Do not crash when complex literals (binaries and maps) are used in guards
[Kernel] Properly parse keywords (such as `end`) followed by the `::` operator
[Kernel] Do not ignore unimplemented signatures from generated functions
[Kernel] Improve error message when an expression follows a keyword list without brackets
[Macro] `Macro.decompose_call/1` now also consider tuples with more than 2 elements to not be valid calls
[Macro] Fix `Macro.to_string/1` double-escaping of escape characters in sigils
[Macro] Fix `Macro.underscore/1` on digits preceded by capitals: "FOO10" now becomes "foo10" instead of "fo_o10"
[Macro] Preserve underscores between digits on `Macro.underscore/1`
[OptionParser] Properly parse when numbers follow-up aliases, for example, `-ab3` is now parsed as `-a -b 3`
[Path] Fix `Path.relative_to/2` when referencing self
[Path] Do not crash when a volume is given to `Path.absname/1`, such as "c:"
[Task] Ensure `Task.async_stream/2` with `ordered: false` discard results as they are emitted, instead of needlessly accumulating inside the stream manager
[Task] Raise if `:max_concurrency` is set to 0 on streaming operations
[URI] Do not discard empty paths on `URI.merge/2`
ExUnit
[ExUnit.Case] Make `@tag tmp_dir` an absolute directory, avoiding inconsistencies if the test changes the current working directory
[ExUnit.Diff] Fix cases where the diffing algorithm would fail to print a pattern correct
IEx
[IEx] Fix auto-completion inside remote shells
Mix
[mix app.config] Do not emit false positive warnings when configured dependencies that have `runtime: false` set
[mix compile.elixir] Ensure that a manifest is generated even with no source code
[mix compile.elixir] Make sure export dependencies trigger recompilation when the dependency is removed as well as when the whole file is removed
[mix compile.elixir] Do not emit false positive warnings when a path dependency adds a module that is then used by the current application in the same `mix compile` cycle
[mix test] Ensure protocols within the current project are consolidated when `--cover` is given
[mix release] Improve compliance of release scripts with stripped down Linux installations
[mix release] Preserve file mode when copying non-beam ebin files
[mix xref] Ensure args are passed to the underlying `mix compile` call
* Soft-deprecations (no warnings emitted)
Elixir
[Kernel] Using `first..last` to match on ranges is soft-deprecated and will warn on future Elixir versions. Use `first..last//step` instead
[Kernel] Using `first..last` to create decreasing ranges is soft-deprecated and will warn on future versions. Use `first..last//-1` instead
* Hard-deprecations
EEx
[EEx.Engine] `use EEx.Engine` is deprecated in favor of explicit delegation
Elixir
[Kernel] The binary operator `^^^` is deprecated. If you are using `Bitwise.^^^/2`, use `Bitwise.bxor/2` instead
[Kernel] Deprecate `@foo()` in favor of `@foo`
[System] Deprecate `System.stacktrace/0` (it was already deprecated outside of catch/rescue and now it is deprecated everywhere)
Mix
[mix compile] The `:xref` compiler is deprecated and it has no effect. Please remove it from your mix.exs file.
Full release notes: https://github.com/elixir-lang/elixir/releases/tag/v1.12.0
Sat Apr 25 16:20:54 UTC 2020 - Sven Marquardt <dev@mail.smarquardt.space>
- Elixir 1.10.3
* Bug fixes
Elixir
[Code] Return `[{mod, bin}]` from `Code.compile_file/2`, `Code.require_file/2`, `Code.load_file/2`
[Code] Make sure the formatter respects newlines before and after module attributes
[Kernel.ParallelCompiler] Fix a bug where the parallel compiler would raise in long compilation cycles
[Kernel.ParallelCompiler] Fix a bug where the parallel compiler would raise if some of the modules being compiled referred to a module that has been loaded directly to memory
[Module] Fix accidental breaking change where bodiless clauses had their body value on `@on_definition` callbacks set to an empty list instead of `nil`
[String] Undeprecate `String.normalize/2` normalize and fix infinite loop caused by certain invalid strings
ExUnit
[ExUnit.Assertions] Fix pattern matching diff when matching on pinned variables
[ExUnit.Assertions] Fix pattern matching diff when matching variable struct names
[ExUnit.Assertions] Fix pattern matching diff when matching on the binary concat operator (`<>`) and the left side is not a literal string
[ExUnit.Assertions] Fix pattern matching diff when matching on pseudo-vars (`__MODULE__`, `__DIR__`, etc)
Mix
[mix release] Respect the `:path` option when creating a `:tar` file for releases
Tue Jun 25 08:55:44 UTC 2019 - g.santomaggio@gmail.com
- Elixir 1.9.0
* Enhancements
EEx
[EEx] Allow more complex mixed expressions when tokenizing
Elixir
[Access] Allow Access.at/1 to handle negative index
[CLI] Add support for --boot, --boot-var, --erl-config, --pipe-to, --rpc-eval, and --vm-args options
[Code] Add static_atom_encoder option to Code.string_to_quoted/2
[Code] Support :force_do_end_blocks on Code.format_string!/2 and Code.format_file!/2
[Code] Do not raise on deadlocks on Code.ensure_compiled/1
[Config] Add Config, Config.Reader, and Config.Provider modules for working with configuration
[File] Add File.rename!/2
[Inspect] Add :inspect_fun and :custom_options to Inspect.Opts
[Kernel] Add ~U sigil for UTC date times
[Kernel] Optimize &super/arity and &super(&1)
[Kernel] Optimize generated code for with with a catch-all clause
[Kernel] Validate __struct__ key in map returned by __struct__/0,1
[Module] Add Module.get_attribute/3
[Protocol] Improve Protocol.UndefinedError messages to also include the type that was attempted to dispatch on
[Protocol] Optimize performance of dynamic dispatching for non-consolidated protocols
[Record] Include field names in generated type for records
[Regex] Automatically recompile regexes
[Registry] Add Registry.select/2
[System] Add System.restart/0, System.pid/0 and System.no_halt/1
[System] Add System.get_env/2, System.fetch_env/1, and System.fetch_env!/1
[System] Support SOURCE_DATE_EPOCH for reproducible builds
ExUnit
[ExUnit] Allow multiple :exclude on configuration/CLI
[ExUnit.DocTest] No longer wrap doctest errors in custom exceptions. They ended-up hiding more information than shing
[ExUnit.DocTest] Display the actual doctest code when doctest fails
IEx
[IEx.CLI] Copy ticktime from remote node on IEx --remsh
[IEx.CLI] Automatically add a host on node given to --remsh
Logger
[Logger] Use a decentralized mode computation for Logger which allows overloads to be detected more quickly
[Logger] Use persistent_term to store configuration whenever available for performance
Mix
[Mix] Follow XDG base dir specification in Mix for temporary and configuration files
[Mix.Generator] Add copy_file/3, copy_template/4, and overwite?/2
[Mix.Project] Add preferred_cli_target that works like preferred_cli_env
[mix archive.uninstall] Allow mix archive.uninstall APP to uninstall any installed version of APP
[mix new] No longer generate a config/ directory for mix new
[mix release] Add support for releases
[mix release.init] Add templates for release configuration
[mix test] Allow running tests for a given umbrella app from the umbrella root with mix test apps/APP/test. failures also include the apps/APP prefix in the test location
* Bug fixes
EEx
[EEx] Consistently trim newlines when you have a single EEx expression per line on multiple lines
Elixir
[Code] Quote :: in Code.format_string!/1 to avoid ambiguity
[Code] Do not crash formatter on false positive sigils
[Enum] Ensure the first equal entry is returned by Enum.min/2 and Enum.max/2
[Kernel] Improve error message when string interpolation is used in a guard
[Kernel] Properly merge and handle docs for callbacks with multiple clauses
[Kernel] Guarantee reproducible builds on modules with dozens of specs
[Kernel] Resolve __MODULE__ accordingly in nested defmodule to avoid double nesting
[Kernel] Type variables starting with an underscore (_foo) should not raise compile error
[Kernel] Keep order of elements when macro in/2 is expanded with a literal list on the right-hand side
[Kernel] Print proper location on undefined function error from dynamically generated functions
[System] Make sure :init.get_status/0 is set to {:started, :started} once the system starts
[Path] Do not expand ~ in Path.expand/2 when not followed by a path separator
[Protocol] Ensure debug_info is kept in protocols
[Regex] Ensure inspect returns valid ~r// expressions when they are manually compiled with backslashes
[Registry] Fix ETS leak in Registry.register/2 for already registered calls in unique registries while the procesis still alive
ExUnit
[ExUnit] Raise error if attempting to run single line tests on multiple files
[ExUnit] Return proper error on duplicate child IDs on start_supervised
IEx
[IEx] Automatically shut down IEx if we receive EOF
Logger
[Logger] Don't discard Logger messages from other nodes as to leave a trail on both systems
Mix
[mix compile] Ensure Erlang-based Mix compilers (erlang, leex, yecc) set valid position on diagnostics
[mix compile] Ensure compilation halts in an umbrella project if one of the siblings fail to compile
[mix deps] Raise an error if the umbrella app's dir name and mix.exs app name don't match
[mix deps.compile] Fix subcommand splitting bug in rebar3
[mix test] Do not consider modules that are no longer cover compiled when computing coverage report, which couldlead to flawed reports
* Soft-deprecations (no warnings emitted)
Mix
[Mix.Config] Mix.Config has been deprecated in favor of the Config module that now ships as part of Elixir itself.Reading
configuration files should now be done by the Config.Reader module
* Hard-deprecations
Elixir
[CLI] Deprecate --detached option, use --erl "-detached" instead
[Map] Deprecate Enumerable keys in Map.drop/2, Map.split/2, and Map.take/2
[String] The :insert_replaced option in String.replace/4 has been deprecated.
Instead you may pass a function as a replacement or use :binary.replace/4 if you need to support earlier Elixir versions
Mix
[Mix.Project] Deprecate Mix.Project.load_paths/1 in favor of Mix.Project.compile_path/1
* Full release notes: https://github.com/elixir-lang/elixir/releases/tag/v1.9.0
Mon Jan 28 11:00:20 UTC 2019 - g.santomaggio@gmail.com
- Elixir 1.8.0
* Elixir v1.8 comes with many improvements at the infrastructure level, improving compilation time,
speeding up common patterns, and adding features around introspection of the system.
See full changelog at https://github.com/elixir-lang/elixir/releases/tag/v1.8.0
* Enhancements
EEx
[EEx] Optimize the default template engine to compile and execute more efficiently
Elixir
[Calendar] Add Calendar.TimeZoneDatabase and a Calendar.UTCOnlyTimeZoneDatabase implementation
[Calendar] Add callbacks day_of_year/3, quarter_of_year/3, year_of_era/1, and day_of_era/3
[Code.Formatter] Preserve user's choice of new line after most operators
[Date] Add Date.day_of_year/1, Date.quarter_of_year/1, Date.year_of_era/1, and Date.day_of_era/1
[DateTime] Add DateTime.from_naive/3, DateTime.now/1, and DateTime.shift_zone/3
[File] Allow :raw option in File.exists?/2, File.regular?/2, and File.dir?/2
[File] Allow POSIX time as an integer in File.touch/2 and File.touch!/2
[Inspect] Allow Inspect protocol to be derivable with the :only/:except options
[Kernel] Do not propagate counters to variables in quote inside another quote
[Kernel] Warn on ambiguous use of :: and | in typespecs
[Kernel] Add :delegate_to @doc metadata tag when using defdelegate
[Kernel] Improve compile-time building of ranges via the .. operator
[Kernel] Compile charlist interpolation more efficiently
[Kernel] Add floor/1 and ceil/1 guards
[Kernel.SpecialForms] Add :reduce option to for comprehensions
[List] Add List.myers_difference/3 and List.improper?/1
[Macro] Add Macro.struct!/2 for proper struct resolution during compile time
[Map] Optimize and merge nested maps put and merge operations
[Range] Add Range.disjoint?/2
[Record] Reduce memory allocation when updating multiple fields in a record
[Registry] Allow associating a value on :via tuple
[String] Add String.bag_distance/2
[Task] Add $callers tracking to Task - this makes it easier to find which process spawned a task and use it for tracking ownership and monitoring
ExUnit
[ExUnit] Add ExUnit.after_suite/1 callback
[ExUnit.Assertions] Show last N messages (instead of first N) from mailbox on assert_receive fail
IEx
[IEx.Helpers] Add port/1 and port/2
[IEx.Server] Expose IEx.Server.run/1 for custom IEx sessions with the ability to broker pry sessions
Mix
[Mix] Add Mix.target/0 and Mix.target/1 to control dependency management per target
[Mix.Project] Add :depth and :parents options to deps_paths/1
[mix archive.install] Add a timeout when installing archives
[mix compile] Include optional dependencies in :extra_applications
[mix escript.install] Add a timeout when installing escripts
[mix format] Warn when the same file may be formatted by multiple .formatter.exs
[mix test] Allow setting the maximum number of failures via --max-failures
[mix test] Print a message instead of raising on unmatched tests inside umbrella projects
* Bug fixes
Elixir
[Calendar] Allow printing dates with more than 9999 years
[Exception] Exclude deprecated functions in "did you mean?" hints
[Float] Handle subnormal floats in Float.ratio/1
[Kernel] Remove Guard test tuple_size(...) can never succeed Dialyzer warning on try
[Kernel] Expand operands in size*unit bitstring modifier instead of expecting size and unit to be literal integers
[Kernel] Do not deadlock on circular struct dependencies in typespecs
[Kernel] Raise proper error message when passing flags to the Erlang compiler that Elixir cannot handle
[Kernel] Do not leak variables in cond clauses with a single matching at compile-time clause
[NaiveDateTime] Do not accept leap seconds in builder and parsing functions
[String] Fix ZWJ handling in Unicode grapheme clusters
[StringIO] Handle non-printable args in StringIO gracefully
IEx
[IEx.Helpers] Use typespec info (instead of docs chunk) and properly format callbacks in b/1
Logger
[Logger] Allow Logger backends to be dynamically removed when an application is shutting down
Mix
[mix compile] Ensure changes in deps propagate to all umbrella children - this fix a long standing issue where updating a dependency would not recompile all projects accordingly, requiring a complete removal of _build
[mix compile] Avoid time drift when checking and updating compiler manifest files
[mix compile.app] Respect the :only option between umbrella siblings
[mix compile.protocols] Reconsolidate protocols if local dependencies are stale
[mix deps] Properly mark dependencies with different :system_env as diverged
[mix new] Use --module value when setting up filenames
Sat Jul 30 10:32:07 UTC 2016 - develop7@develop7.info
- update to v1.3.2
1. Enhancements
Elixir
[Kernel] Support guards in else clauses in with
Mix
[Mix] Add MIX_NO_DEPS env var for disabling dep loading. Used for third-party scripts and tools like Nix package manager
[Mix] Add mix test --listen-on-stdin that automatically reruns tests on stdin
[Mix] Disable --warnings-as-errors when compiling dependencies
[Mix] Add --filter option to mix deps.unlock to unlock only matching dependencies
2. Bug fixes
Elixir
[Enum] Return nil if enumerable halts in Enum.find_index/3
[Kernel] Do not attempt to load modules that have not been required when invoking regular functions, otherwise this invalidates the @compile {:autoload, false} directive.
Mix
[Mix] Ensure missing protocol dependencies are discarded in umbrella projects with shared build
ExUnit
[ExUnit.Diff] Ensure no leading or trailing when diffing some maps
Sun May 1 09:43:58 UTC 2016 - pereira.alex@gmail.com
- Update to v1.2.5
Bug fixes
[Logger] Stringify truncated function data in Logger
[Logger] Ensure poorly formatted char data can also be logged by using the replacement character "<22>" (diamond question mark)
[Mix] Do not assume @impl is always a list
[String] Fix bugs in String.replace_* functions where it would not include the accumulated value for certain replacements
- Update to v1.2.4
Enhancements
[Mix] Add :archives configuration to def project that allows projects to list archive dependencies. --no-archives-check (as well as --no-deps-check) will disable the archive check. The :archives option is not checked for dependencies.
[Mix] Add deps.precompile task as hook
[Mix] Support --include-children in mix deps.compile option
[String] Update version of the Unicode database to 8.0.0
Bug fixes
[Application] Ensure spec/2 returns nil for unknown applications
[Integer] Fix a possible binary leak in parse/1
[Mix] Purge Erlang modules on recompilation
[String] Ensure split/1 does not break on non-breakable whitespace
[String] Ensure NFC and NFD normalization pass all of Unicode 8.0.0 tests
[Version] Allow dots in build info for versions in Version.parse/1
+ Remove broken and unfixable delegate_locals_to implementation
+ Fix inconsistency of collection in Enum
+ Failing test demonstrating ExUnit crash on inspect failure
+ Ensure ExUnit survives inspect and exception message failures
+ Fixed typos in Supervisor doc
+ Ensure mix compiler is able to handle nested directories
+ add missing assert call
+ Set MIX_ARCHIVES in mix tasks archive tests
+ Improve error message when using attributes inside match in module
+ Fix error documentation for Kernel.hd/1
+ Invert the order of non matching token messages (closes #2993)
+ Fixes #3009
+ Add missing :ok return
+ Optimize common flat_map_reduce paths
+ Do not repeat the module name
+ Inline common map cases in into
+ Add --color option description to mix moduledoc.
+ Add examples to System.cmd/3
+ Fix the logging with `metadata[:function]`
+ Add test for metadata defaults
+ Use actual message in the metadata assertion
+ Remove unused umbrella flag
+ Don't ignore escape characters in regex
+ Do not show aliases and import warnings when code cannot compile
+ Merge pull request #2801 from fishcakez/app_env
+ Get rid of ets from Mix.State
+ Add an example of Enum.find_value/3 to the docs
+ Avoid escape characters in System.cmd/3 docs
+ Corrected incorrect docstring.
+ Change Record#extract to a function - Also adds docs for defining records that were extracted with anonymous functions
+ Explicitly pass allowed attributes to __info__
+ Do not choke when Exception.message/1 does not return a string
+ Call Logger.flush in System.at_exit when running mix test.
+ Ensure priv/include are copied on Windows even if source did not change
+ Improve error message with invalid structures in maps
+ Update CHANGELOG
+ Add Dict.get_and_update/3
+ Add Keyword.get_and_update/3
+ Optimize the performance of Map.get_and_update/3 and Keyword.get_and_update/3
+ Avoid export vars in destructure
+ Ignore exported vars warning
+ Improve docs for functions in File
+ Simplify Logger checks
+ Update CHANGELOG
+ Use :application.info[:loaded] to avoid races
+ Fix `Keyword.get_and_update/4` funtion name
+ Suppress warning in `Mix.Tasks.Test`
+ Make `Dict.get_and_update/3` overridable
+ Always rebuild structures on Windows
+ Ensure rebar is quoted when running escript on windows
+ No need for `args` in `Mix.CLI.load_mixfile/1`
+ Fix a minor typo in the docs for `Module`
+ Add an example of defining a `__using__/1` macro
+ Fix race condition in undef logger translator tests
+ Bring change removed from v1.0 into CHANGELOG
+ Tell user to run mix deps.get on lock mismatch, closes #3038
+ Fix some grammar in the docs for Access, and add more docs
+ Use which_applications instead of undocumented info
+ Fix boundary in Enum.take/2, closes #3042
+ Optimize more Enum and Stream functions
+ Added man page for iex/elixir
+ Polish the docs for the Kernel functions delegated to Erlang
+ Add examples to some of the Kernel functions delegated to Erlang
+ fix broken system path test
+ Remove a Kernel doctest that issued a warning
+ Add details to the docs of a bunch of Kernel functions/macros
+ Expand attributes and macros in record extractor
+ Ensure quoted expressions are properly shown in error messages
+ Make it clear that Keyword does not preseve ordering
+ Rebar dependencies can be compiled with mix if they have a mix.exs file
+ Raise an appropriate error when raise/1 is called with an invalid arg
+ Remove @moduledoc false from requirement
+ Allow rebar dependencies to be specified via :path
+ Remove 17.1 which has a bug in its filelib:wildcard check
+ Add the timeout option for tests
+ Add the timeout option for running the test
+ update links to website
+ Polish the docs of a bunch of Kernel functions
+ Added to tuple.ex module doc a see also note reference the various Kernel functions dealing with tuples. The Rationale for this is that its confusing for a newcomer to the language that these are not members of tuple and it provides a hint as to where these are actually found
+ singular plural issue fixed for tests
+ Throw syntax error for `:foo.Bar`
+ Add positive test case for punctuation in atoms
+ Remove internals from IEx stacktrace
+ Set the timeout to infinity when trace option is true
+ Update CHANGELOG
+ Refactor the runner configuration to make it testable
+ Add a note for in memory reloading to r/1
+ Logger: Format OTP 17.4 terminate reasons
+ Fix Exception.stacktrace_entry/0 type spec
+ Logger uses chardata, not iodata
+ Add tests for IEx.Helpers.import_file/1 with missing file
+ Add an :optional option to IEx.Helpers.import_file/1
+ Update docs for `IEx.Helpers.import_file/1`
+ Add Record.extract_all/1 returning all records information
+ small corrections in docs
+ Also ignore elixir_clauses in stacktraces
+ Update new major.minor instructions
+ Hack The Docs contribution
+ Add import flag to Bitwise
+ Replace os.cmd in git with System.cmd, done one to verify what is wanted.
+ Correct the phrase "if there already exists"
+ Fix httpc proxy option profile
+ Replaced all uses of :os.cmd
+ Use stderr_to_stdout option in run_cmd_or_raise
+ Fix @spec for Path.wildcard + doc:return value
+ create individual tasks for "make docs"
+ Move test for `:foo.Bar` syntax error
+ Add more documentation for ~> requirements
+ Correct usage of `ExUnit.Assertions.flunk` and add guard for it
+ Tweak the docs a bit.
+ No need to pass cmd, include output in errors
+ Use Behaviour in exception
+ Update Task logs to OTP 17.4 behaviour format
+ Update logger translator tests for OTP 17.4 format
+ Polish the docs of some `Kernel` functions
+ Polish the docs for the Kernel.def* set of macros
+ Mix: add comma at the end of worker()
+ Turn some examples in `Kernel` into doctests
+ Support R18 standard error
+ Do not erase stacktrace on bad configs
+ Fallback to undocumented API only if necessary
+ Polish the docs of the sigils in the `Kernel` module
+ Fixed the formatting and some docs in the Tuple module
+ Ensure mix CLI-wide that we print Logger messages
+ Fix some docs in the `Atom` module
+ Also run tests on 17.4
+ Replaced all but one Mix.shell.cmd call with System.cmd. The remaining call is for windows systems using powershell and I don't know the appropriate token parsing for powershell command lines.
+ Reuse `ArgumentError` creation in `elixir_quote` module
+ Add test for error on struct field value
+ Use `:lists.reverse/2` instead of `:lists.reverse/1` and `++`
+ Emit deprecation warnings for Access protocol
+ remove blank in README template
+ Unify empty parens and map exprs handling
+ Split containers and call args expressions
+ Add documentation with examples how to assert return values and capture IO output at the same time
+ Add String.levenshtein_distance/2 and "Did you mean?" suggestion to mix
+ Add distinction between no_parens_one and no_parens_ambig to parser
+ Throw syntax error on [f g :a, :b]
+ Add comments explaining changes to parser
+ Add assertion that `[f g a]` is ok
+ Add line breaks to code comment
+ Polish the docs for the functions in the `Float` module
+ Replace `String.levenshtein_distance/2` with `String.jaro_distance/2`
+ Remove crypto and syntax_tools dependencies
+ Use best match in "Did you mean?" mix suggestion
+ Store relative paths in erlang manifest
+ Replace "in between" with "between" in comments and doc strings
+ Replace "parenthesis" with "parentheses" in comments and doc strings
+ Improve tokenization of identifiers and `k: v` keys
+ Use identifier instead of name
+ Fix typo
+ Ensure changes in child deps forces the parent to recompile
+ Update CHANGELOG
+ Make ::/2 a special form
+ Also check mix options for divergence
+ Revert "Merge pull request #3109 from oneeman/refine_no_parens_parsing"
+ Return value when matching with `_` on last line of block
+ undefined attribute does not need to be set to nil
+ Added test for markup ending in . and code to pass the test
+ Improve docs for GenEvent.stream/1, closes #3138
+ adds Dict.get_lazy/3
+ adds Dict.pop_lazy/3
+ adds Dict.put_new_lazy/3
+ adds guards to dict lazy funs
+ Clarify where truthy and falsey values suffice in the Enum docs
+ Fix ExUnit.Assertions assertion fail doc example
+ Produce clearer messages for syntax errors before a sigil
+ Add example to Regex.replace with option "global: false"
+ the example is correct but in the description have a small difference
+ Mention default values in String.split/3
+ remove duplicate words + add quotes to nil and false