Commit graph

16 commits

Author SHA1 Message Date
joerg
d4986232af Increase resource limits due to Erlang's default allocations 2020-03-26 02:31:23 +00:00
adam
78d7df5d19 elixir: updated to 1.10.2
v1.10.2

Bug fixes

Elixir
[Macro] Fix a bug where Macro.to_string/1 would emit invalid code for sigils
[Task] Do not crash async_stream monitor if it receives spurious DOWN messages

Logger
[Logger] Fix a bug where the Logger formatter would fail when handling unknown metadata values

Mix
[mix compile] Do not write files to disk if --warnings-as-errors was given and warnings were emitted
2020-02-26 19:21:50 +00:00
adam
0c8e87d861 elixir: updated to 1.10.0
v1.10.0
Support for Erlang/OTP 21+
Releases improvements

Elixir v1.9 introduced releases as a mechanism to package self-contained applications. Elixir v1.10 further improves releases with bug fixes and new enhancements based on feedback we got from the community. The highlights are:

* Allow the dual boot system of releases to be disabled on environments that are boot-time sensitive, such as embedded devices
* Track and raise if compile-time configuration is set or changes at runtime (more in the next section)
* Support for easily adding extra files to releases via overlays
* Allow RELEASE_DISTRIBUTION to be set to none in order to fully disable it
* Add a built-in :tar step that automatically packages releases
2020-02-13 18:27:23 +00:00
nia
77c5203342 elixir: Update to 1.9.1
## v1.9.1 (2019-07-18)

### 1. Enhancements

#### Mix

  * [mix format] Print relative paths in `--check-formatted` output
  * [mix release] Support included applications

### 2. Bug fixes

#### Elixir

  * [Code] Fix formatter wrongly removing nested parens in nested calls

#### Logger

  * [Logger] Do not crash translator on poorly formatted supervisor names

#### Mix

  * [mix compile] Raise readable error for mismatched sources during compilation
  * [mix release] Preserve UTF8 encoding in release config files

## v1.9.0 (2019-06-24)

### 1. 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 showing
  * [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`. Test failures also include the `apps/APP` prefix in the test location

### 2. 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
  * [Kernel] **Potentially breaking** Do not leak aliases when nesting module definitions that are fully namespaced modules. If you defined `defmodule Elixir.Foo.Bar` inside `defmodule Foo`, previous Elixir versions would automatically define an alias, but fully namespaced modules such as `Elixir.Foo.Bar` should never define or require an alias. If you were accidentally relying on this broken behaviour, your code may no longer work
  * [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 process is 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 could lead to flawed reports

### 3. 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

### 4. 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`
2019-08-01 09:52:52 +00:00
nia
9eeb5f298b elixir: Avoid errors from check-interpreter.mk after addition of interpreter
workaround.
2019-06-17 16:58:42 +00:00
yyamano
762d89fd76 Make bin/mix works.
shebang doesn't work if an interpreter is a shell script.
See http://mail-index.netbsd.org/tech-pkg/2019/05/21/msg021312.html
2019-05-23 23:42:27 +00:00
nia
9759df6e6f lang/elixir: update to 1.7.4.
1. Enhancements

Elixir

    [Kernel] Expand left..right at compile time in more cases, which leads to improved performance under different scenarios, especially on x in left..right expressions

Mix

    [mix deps.loadpaths] Add --no-load-deps flag. This is useful for Rebar 3 compatibility

2. Bug fixes

Elixir

    [Calendar] Fix for converting from negative iso days on New Year in a leap year
    [Kernel] Ensure @spec, @callback, @type and friends can be read accordingly
    [Module] Avoid warnings when using Module.eval_quoted in the middle of existing definitions

Mix

    [mix archive.build] Unload previous archive versions before building
    [mix format] Expand paths so mix format path\for\windows.ex works
    [mix test] Ensure that --cover displays correct coverage in an umbrella app
2018-11-09 17:17:28 +00:00
jperkin
f8611f86ed elixir: Fix PKGMANDIR. Add TEST_TARGET. 2018-10-11 12:10:08 +00:00
fhajny
3d2ee04e14 lang/elixir: Update to 1.7.3.
v1.7.3
======

1. Bug fixes

ExUnit
- [ExUnit.Assertions] Do not attempt to expand `try/1` as it is a
  special form

Mix
- [mix compile.app] Do not include applications with `runtime: false`
  as a runtime dependency for applications coming from Hex


v1.7.2
======

1. Bug fixes

Elixir
- [DateTime] Take negative years into account in
  `DateTime.from_iso8601/1`
- [Kernel] Do not emit warnings for repeated docs over different
  clauses due to false positives

Mix
- [mix compile] Properly mark top-level dependencies as optional and
  as runtime. This fixes a bug where Mix attempted to start optional
  dependencies of a package when those optional dependencies were not
  available
- [mix compile] Avoid deadlock when a config has a timestamp later
  than current time
- [mix help] Show task and alias help when both are available
- [mix test] Do not fail suite if there are no test files


v1.7.1
======

1. Bug fixes

Elixir
- [Calendar] Work-around a Dialyzer bug that causes it to loop for a
  long time, potentially indefinitely

v1.7.0
======

1. Enhancements

Elixir
- [Calendar.ISO] Support negative dates in `Calendar.ISO`
- [Calendar] Add `Calendar.months_in_year/1` callback
- [Code] Add `Code.compile_file/2` that compiles files without leaving
  footprints on the system
- [Code] Add `Code.purge_compiler_modules/0` that purges any compiler
  module left behind. This is useful for live systems dynamically
  compiling code
- [Code] Add `Code.fetch_docs/1` that returns docs in the [EEP
  48](http://erlang.org/eep/eeps/eep-0048.html) format
- [Date] Add `Date.months_in_year/1` function
- [DynamicSupervisor] Use the name of the `DynamicSupervisor` as the
  ID whenever possible
- [Exception] Provide "did you mean" suggestions on KeyError
- [Exception] Provide more information on ArithmeticError on
  Erlang/OTP 21+
- [Function] Add `Function` module with `capture/3`, `info/1` and
  `info/2` functions
- [GenServer] Support the new `handle_continue/2` callback on
  Erlang/OTP 21+
- [IO.ANSI] Add cursor movement to `IO.ANSI`
- [Kernel] Support adding arbitrary documentation metadata by passing
  a keyword list to `@doc`, `@moduledoc` and `@typedoc`
- [Kernel] Introduce `__STACKTRACE__` to retrieve the current
  stacktrace inside `catch`/`rescue` (this will be a requirement for
  Erlang/OTP 21+)
- [Kernel] Raise on unsafe variables in order to allow us to better
  track unused variables
- [Kernel] Warn when using `length` to check if a list is not empty on
  guards
- [Kernel] Add hints on mismatched `do`/`end` and others pairs
- [Kernel] Warn when comparing structs using the `>`, `<`, `>=` and
  `<=` operators
- [Kernel] Warn on unsupported nested comparisons such as `x < y < z`
- [Kernel] Warn if redefining documentation across clauses of the same
  definition
- [Kernel] Warn on unnecessary quotes around atoms, keywords and calls
- [Macro] Add `Macro.special_form?/2` and `Macro.operator?/2` that
  returns `true` if the given name/arity is a special form or operator
  respectively
- [Macro.Env] Add `Macro.Env.vars/1` and `Macro.Env.has_var?/2` that
  gives access to environment data without accessing private fields
- [Regex] Include endianness in the regex version. This allows regexes
  to be recompiled when an archive is installed in a system with a
  different endianness
- [Registry] Add `Registry.count/1` and `Registry.count_match/4`
- [String] Update to Unicode 11
- [StringIO] Add `StringIO.open/3`
- [System] Use ISO 8601 in `System.build_info/0`

ExUnit
- [ExUnit.Assertion] 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
- [ExUnit.Diff] Improve diffing of lists when one list is a subset of
  the other
- [ExUnit.DocTest] Show colored diffs on failed doctests
- [ExUnit.Formatter] 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

IEx
- [IEx.Helpers] Add `use_if_available/2`
- [IEx.Helpers] Allow `force: true` option in `recompile/1`
- [IEx.Helpers] Add `:allocators` pane to `runtime_info/1`
- [IEx.Helpers] Show documentation metadata in `h/1` helpers

Logger
- [Logger] Ensure nil metadata is always pruned
- [Logger] Only evaluate Logger macro arguments when the message will
  be logged
- [Logger] Add `:compile_time_purge_matching` to purge logger calls
  that match certain compile time metadata, such as module names and
  application names
- [Logger] Log to `:stderr` if a backend fails and there are no other
  backends
- [Logger] Allow translators to return custom metadata
- [Logger] Return `:crash_reason`, `:initial_call` and
  `:registered_name` as metadata in crash reports coming from
  Erlang/OTP

Mix
- [mix archive.install] Add support for the Hex organization via
  `--organization`
- [mix archive.uninstall] Support `--force` flag
- [mix compile] Improve support for external build tools such as
  `rebar`
- [mix deps] Include `override: true` in rebar dependencies to make
  the behaviour closer to how rebar3 works (although diverged deps are
  still marked as diverged)
- [mix escript.install] Add support for the Hex organization via
  `--organization`
- [mix escript.uninstall] Support `--force` flag
- [mix help] Also list aliases
- [mix local] Use ipv6 with auto fallback to ipv4 when downloading
  data
- [mix profile] Allow all profiling tasks to run programatically
- [mix test] Add `--failed` option that only runs previously failed
  tests
- [mix test] Print coverage summary by default when the `--cover` flag
  is given
- [Mix.Project] Add `Mix.Project.clear_deps_cache/0`
- [Mix.Project] Add `Mix.Project.config_mtime/0` that caches the
  config mtime values to avoid filesystem access

2. Bug fixes

Elixir
- [IO.ANSI.Docs] Fix table column alignment when converting docs to
  ANSI escapes
- [Code] Ensure `string_to_quoted` returns error tuples instead of
  raising in certain constructs
- [Code.Formatter] Consistently format keyword lists in function calls
  with and without parens
- [Code.Formatter] Do not break after `->` when there are only
  comments and one-line clauses
- [File] Allow the `:trim_bom` option to be used with `:encoding`
- [Kernel] 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
- [Kernel] Do not crash on dynamic sizes in binary generators with
  collectable into in comprehensions
- [Kernel] Do not crash on literals with non-unary size in binary
  generators with collectable into in comprehensions
- [Task] Improve error reports and exit reasons for failed tasks on
  Erlang/OTP 20+

ExUnit
- [ExUnit.Case] Raise proper error if `@tag` and `@moduletag` are used
  before `use ExUnit.Case`
- [ExUnit.Case] Raise proper error if `@describetag` is used outside
  of `describe/2` blocks
- [ExUnit.DocTest] Emit proper assertion error on doctests with
  invalid UTF-8

Mix
- [mix archive.install] Fetch optional dependencies when installing an
  archive from Git/Hex
- [mix compile] Properly track config files in umbrella projects and
  recompile when any relevant umbrella configuration changes
- [mix deps] Ensure the same dependency from different SCMs are tagged
  as diverged when those SCMs are remote and non-remote
- [mix deps] Ensure we re-run dependency resolution when overriding a
  skipped dep in umbrella
- [mix deps.compile] Perform clean builds for dependencies on outdated
  locks to avoid old modules from affecting future compilation
- [mix escript.install] Fetch optional dependencies when installing an
  escript from Git/Hex

3. Soft-deprecations (no warnings emitted)

Elixir
- [Code] Deprecate `Code.load_file/2` in favor of
  `Code.compile_file/2`
- [Code] Deprecate `Code.loaded_files/0` in favor of
  `Code.required_files/0`
- [Code] Deprecate `Code.unload_files/1` in favor of
  `Code.unrequire_files/1`

Logger
- [Logger] `compile_time_purge_level` is deprecated in favor of
  `compile_time_purge_matching`

4. Hard-deprecations

Elixir
- [Code] `Code.get_docs/2` is deprecated in favor of
  `Code.fetch_docs/1`
- [Enum] `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
- [GenServer] Warn if `super` is used in any of the GenServer
  callbacks
- [Kernel] `not left in right` is ambiguous and is deprecated in favor
  of `left not in right`
- [Kernel] Warn on confusing operator sequences, such as `1+++1`
  meaning `1 ++ +1` or `........` meaning `... .. ...`
- [OptionParser] Deprecate dynamic option parser mode that depended on
  atoms to be previously loaded and therefore behaved inconsistently
- [Stream] `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
2018-09-04 13:49:25 +00:00
fhajny
3c0623fb6a lang/elixir: Update to 1.6.5.
- [Code] Preserve the user's choice in the formatter on parens call
  with next break fits
- [Code] Preserve the user's choice in the formatter on calls without
  parens when we have one argument per line
- [Code] Fix formatting when there is a tilde in the first element of
  a bitstring
- [Kernel] Support specsdiff flag on __info__ spec clauses
- [Kernel] Do not exclude hygienic vars in defguard
- [Kernel.SpecialForms] Mark for comprehensions as generated to avoid
  dialyzer warnings
- [Macro] Make sure Macro.to_string/2 emits valid quoted expressions
- [Task] Support :infinity timeout on Task.yield_many/2
- [Task.Supervisor] Do not crash spawning supervised tasks when the
  parent process is dead
- [URI] Fix parsing of URIs with trailing ?
2018-05-14 15:57:13 +00:00
fhajny
2048b50853 lang/elixir: Update to 1.6.4.
- [Code.Formatter] Do not double escape quoted keyword list identifiers
- [Kernel] Properly support into: binary in Erlang/OTP 20.3
2018-03-23 11:54:58 +00:00
fhajny
af720a8f44 lang/elixir: Update to 1.6.3.
Elixir
- [Code.Formatter] Support comments in the middle of pipelines,
  when and | expressions
- [Code.Formatter] Consider commas when breaking groups
- [Code.Formatter] Ensure proper precedence between & and operators
- [Code.Formatter] Consider .formatter.exs when formatting stdin

Logger
- [Logger.Translator] Ensure logger doesn't crash when reporting
  named DynamicSupervisor
2018-03-13 09:18:19 +00:00
fhajny
6af9d8b363 lang/elixit: Update to 1.6.2.
1. Enhancements

Mix
- [mix compile.erlang] Teach Mix erlang compiler alternative spelling
  for -behavior declaration
- [mix format] Support the :subdirectories configuration that points
  to other directories with their own .formatter.exs file. This is
  useful in umbrella applications. mix new --umbrella has also been
  changed to use this new configuration by default
- [mix format] Include the current environment for missing dependency
  errors

2. Bug fixes

Elixir
- [Code.Formatter] Ensure -> does not exceed line length
- [DynamicSupervisor] Properly tag error reports generated by dynamic
  supervisors so they can be properly translated by Logger
- [DynamicSupervisor] Consider extra arguments during child restart
- [Kernel] Ensure arguments given to a guard defined with defguard are
  evaluated in the correct order
- [Module] Do not remove docs for previous function declaration when
  @impl true is used
- [Supervisor] Ensure use Supervisor properly adds the @behaviour
  Supervisor annotation

Mix
- [Mix.Shell] Bring back Mix.Shell.cmd/2 - this arity was defined via
  a default argument that was accidentally removed
2018-02-28 15:14:02 +00:00
fhajny
d943c140a0 Update lang/elixir to 1.6.1.
1. Enhancements

Elixir
- [DynamicSupervisor] Implement child_spec/1 for DynamicSupervisor
- [Kernel] Raise better error messages on invalid map syntax

2. Bug fixes

Elixir
- [Code.Formatter] Only rearrange not in operator if explicitly
  opted-in
- [Code.Formatter] Ensure do blocks do not exceed line length on calls
  with a single argument
- [Collectable] Support bitstrings in Collectable and
  for-comprehensions (regression in v1.6.0)
- [GenServer] Do not override user own @opts attribute
- [Enum] Reintroduce zipping of any enumerable of enumerables in
  Enum.zip/1 (regression in v1.6.0)
- [Macro] Reorder kw blocks in Macro.to_string/1 to avoid warnings
- [Protocol] Fix protocol consolidation when some chunks may be
  missing
- [Stream] Reintroduce zipping of any enumerable of enumerables in
  Stream.zip/1 (regression in v1.6.0)
- [Supervisor] Do not override user own @opts attribute
- [Supervisor] Add @spec to second clause of start_link/2

ExUnit
- [ExUnit.Case] Reintroduce :case in ExUnit setup/setup_all/test
  context
2018-01-30 16:27:10 +00:00
fhajny
b96a217e4d Update lang/elixir to 1.6.0.
1. Enhancements

EEx
- [EEx] Allow markers `/` and `|` to be used in a custom EEx engine

Elixir
- [Calendar] Add truncate to `Time`, `DateTime` and `NaiveDateTime` to
  facilitate microsecond precision pruning
- [Code] Add `format_string!/2` and `format_file!/2` for automatic
  code formatting
- [Code] Support column annotations in quoted expressions with
  `columns: true` in `Code.string_to_quoted/2`
- [DynamicSupervisor] Add `DynamicSupervisor` designed to manage
  children that are added and removed dynamically
- [Exception] Make `Exception.blame/3` extensible by adding an
  optional `blame/2` callback to exceptions
- [Exception] Improve the printing of guards on blamed exceptions
- [Enumerable] Add `Enumerable.slice/1` and optimize many `Enum`
  operations with the new protocol. This allows data-structures with
  index-based random access to provide a non-linear implementation
- [Inspect] Show UTF-8 BOM on inspected strings
- [Inspect.Algebra] Add `:strict` and `:flex` breaks - this gives more
  control over the document fitting
- [Inspect.Algebra] Allow a group to inherit the parent group break
- [Inspect.Algebra] Add `force_unfit/1` and `next_break_fits/2` which
  give more control over document fitting
- [Inspect.Algebra] Add `collapse_lines/1` for collapsing multiple
  lines to a maximum value
- [Inspect.Algebra] Allow `nest/2` to be `:reset` or be set to the
  current `:cursor` position
- [Kernel] Prefix variables with V when emitting Erlang code. This
  improves the integration with tools such as Erlang code formatters
  and the GUI debugger
- [Kernel] Warn on the use of `length(x) == 0` in guards
- [Kernel] Warn if `catch` comes before `rescue` in try
- [Kernel] Warn if heredoc is outdented compared to its closing quotes
- [Kernel] Add `defguard/1` and `defguardp/1` to make it easier to
  build guard-safe macros
- [Kernel.ParallelCompiler] Add `compile/2`, `compile_to_path/3` and
  `require/2` which provide detailed information about warnings and
  errors
- [Kernel.SpecialForms] Support the `uniq: true` flag in `for`
  comprehensions
- [Module] Introduce `@deprecated` and `@since` attributes
- [Module] Emit conflicting behaviour warnings if the same behaviour
  is given more than once
- [List] Rearrange equals and inserts for shorter diff scripts in
  `List.myers_difference/2`
- [Record] Allow `:macros` and `:includes` to be given to
  `Record.extract/2`
- [Stream] Add `Stream.intersperse/2`
- [String] Update to Unicode 10
- [String] Allow passing empty string `match` to `String.replace/4`
- [String] Support context and language sensitive operations in
  `String.upcase/2` and `String.downcase/2`. Currently only the
  `:greek` context is supported
- [String] Support `:ascii` conversion in `String.upcase/2` and
  `String.downcase/2`
- [Time] Add `Time.add/3`

ExUnit
- [ExUnit.Assertions] Perform inclusive checks in `assert_in_delta`
- [ExUnit.Callbacks] Add `ExUnit.Callbacks.start_supervised!/2`
- [ExUnit.Case] Generate a random seed per test based on the test
  suite seed

IEx
- [IEx.Autocomplete] Provide contextual autocompletion: `t Enum.` will
  autocomplete types, `b Enum` will autocomplete callbacks
- [IEx.CLI] Provide hints for developers when a bad host name is given
  to `--remsh`
- [IEx.Helpers] Automatically include specs when showing documentation
  for functions/macros
- [IEx.Helpers] Improve formatting of behaviours and typespecs by
  using the formatter
- [IEx.Helpers] Allow pattern matching and guard expressions when on
  `IEx.break!`

Logger
- [Logger] Add `:discard_threshold` to Logger to help with message
  queue overflow

Mix
- [mix app.start] Add `--preload-modules` to `mix app.start`
- [mix archive.build] Allow `mix archive.build` to bundle dot files
  via an option
- [mix compile] Define a behavior for Mix compiler tasks and return
  diagnostics from compiler tasks
- [mix compile] Track struct dependencies between files and recompile
  them only if the struct changes
- [mix deps] Support `:system_env` option when specifying dependencies
- [mix format] Add a `mix format` task that formats the given files
  (or the files specified in a `.formatter.exs` file)
- [mix profile.eprof] Add a new task for time-based profiling with
  eprof
- [mix test] Run all functions in a describe block by giving the
  `file:line` the describe block starts
- [mix test] Report the top N slowest tests with the `--slowest N`
  flag
- [mix test] Report the number of doctests and tests separately
- [mix xref] Support `--include-siblings` in reports for umbrella
  support
- [mix xref] Add `mix xref graph --format stats`
- [mix xref] Add `--only-nodes` and `--label` filters to mix xref
  graph
- [mix xref] Add `mix xref deprecated` that shows the callsite of
  deprecated functions

2. Bug fixes

Elixir
- [CLI] Support path with spaces as argument to elixir.bat
- [Inspect] Properly handle minus signal for non-decimal negative
  integers
- [Integer] Do not raise on non-integer values in `is_odd`/`is_even`
- [Kernel] Solve a precedence issue between `&` and `|`, such as
  `[&Foo.bar/1 | &Baz.bat/2]`
- [Kernel] Do not load dynamic Elixir modules as `:in_memory` as this
  value is not officially supported by the code server. Instead, use
  an empty list, which is the same value used by Erlang.
- [Kernel] Validate variable struct name is atom when used in pattern
  matching
- [Macro] Fix `Macro.to_string/2` for tuple calls, such as `alias
  Foo.{Bar, Baz}`
- [MapSet] Return valid MapSet when unioning a legacy MapSet
- [Regex] Return a leading empty space when splitting on empty
  pattern. This makes the `split` operation consistent with the other
  operations in the `Regex` module
- [Stream] Ensure `Stream.chunk_while/4` does not emit more elements
  than necessary when halted
- [String] Return a leading empty space when splitting on empty
  string. This makes the `split` operation consistent with the other
  operations in the `String` module
- [URI] Preserve empty fragments in `URI.parse/1`

Mix
- [mix app.start] Improve the quality of reports if app fails to boot
- [mix cmd] Allow `mix cmd` to be invoked multiple times without
  marking it as executed
- [mix deps] Ensure optional dependencies in umbrella applications are
  loaded
- [mix deps.update] Ensure transitive new non-Hex dependencies are
  also fetched when a repo is updated
- [mix xref] Take compile dependencies with higher priority than
  runtime ones when building a graph
- [mix xref] Handle external files for xref callers and warnings

3. Soft deprecations (no warnings emitted)

Elixir
- [Inspect.Algebra] `surround/3` and `surround_many/6` are deprecated
  in favor of `container_doc/6`
- [Kernel.ParallelCompiler] `files/2` and `files_to_path/3` are
  deprecated in favor of `compile/2` and `compile_to_path/3`
- [Kernel.ParallelRequire] `files/2` is deprecated in favor of
  `Kernel.ParallelCompiler.require/2`
- [GenServer] Warn if `init/1` is not defined in `GenServer`. This
  brings GenServer closer to the implementation in OTP and aligns all
  behaviours to require the `init/1` callback

ExUnit
- [ExUnit.Formatter] `:case_started` and `:case_finished` events are
  deprecated in favor of `:module_started` and `:module_finished`

4. Deprecations

Elixir
- [Enum] `Enum.partition/2` is deprecated in favor of
  `Enum.split_with/2`
- [Keyword] `Keyword.replace/3` is deprecated in favor of
  `Keyword.fetch/2` and `Keyword.put/3`
- [Map] `Map.replace/3` is deprecated in favor of `Map.fetch/2` and
  `Map.put/3`
- [Macro] `Macro.unescape_tokens/1` and `Macro.unescape_tokens/2` are
  deprecated in favor of `Enum.map/2`
- [Range] Deprecate `Range.range?/1` in favor of pattern matching on
  `_ .. _`
2018-01-22 14:59:53 +00:00
fhajny
da8550acb4 Import elixir-1.5.2 as lang/elixir.
Elixir is a functional, meta-programming aware language built on top of the
Erlang VM. It is a dynamic language that focuses on tooling to leverage
Erlang's abilities to build concurrent, distributed and fault-tolerant
applications with hot code upgrades.
2018-01-03 13:06:17 +00:00