./lang/elixir, Functional, meta-programming aware language built on top of Erlang VM

[ CVSweb ] [ Homepage ] [ RSS ] [ Required by ] [ Add to tracker ]


Branch: CURRENT, Version: 1.17.2, Package name: elixir-1.17.2, Maintainer: pkgsrc-users

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.


Required to run:
[lang/erlang]

Required to build:
[pkgtools/cwrappers]

Master sites:

Filesize: 3178.776 KB

Version history: (Expand)


CVS history: (Expand)


   2025-02-12 16:37:37 by Thomas Klausner | Files touched by this commit (1) | Package updated
Log message:
elixir: update reference to hex
   2024-08-16 11:57:47 by Adam Ciarcinski | Files touched by this commit (3) | Package updated
Log message:
elixir: updated to 1.17.2

v1.17.2

Bug fixes

Logger

[Logger.Translator] Fix logger crash when :gen_statem's format_status/2 returns \ 
non-tuple

Mix

[mix deps.get] Fix regression when fetching a git repository with a :ref
[mix release] Validate RELEASE_MODE and set ERRORLEVEL on .bat scripts
[mix release] Fix invalid example in code comment inside the generated vm.args.eex
   2024-03-20 12:36:49 by Thomas Klausner | Files touched by this commit (2) | Package updated
Log message:
elixir: update to 1.16.2.

1. Enhancements

Elixir

    [Code] Emit :defmodule tracing event on module definition

Mix

    [Mix] Add Mix.install_project_dir/0
    [Mix] Add environment variable for reusing Mix.install/2 installation
    [Mix.SCM] Add Mix.SCM.delete/1

2. Bug fixes

Elixir

    [Code] Fix charlist formatting issue when a single-quoted charlist escapes a \ 
double-quote character
    [Path] Fix regression on how Path.relative_to/2 dealt with "." as input

IEx

    [IEx.Helpers] Discard mermaid fenced blocks from ansi docs

ExUnit

    [ExUnit] Properly compared pinned values when building diffs
   2024-02-21 11:29:44 by Thomas Klausner | Files touched by this commit (2) | Package updated
Log message:
elixir: update to 1.16.1.

Bug fixes

Elixir

    [Code] Fix Code.quoted_to_algebra/2 for operator with :do key as operand
    [Kernel.ParallelCompiler] Do not crash parallel compiler when it receives \ 
diagnostics from additional code evaluation
    [Kernel.ParallelCompiler] Always log errors at the end of compilation
    [String] Fix String.capitalize/1 with a single codepoint

IEx

    [IEx] Fix autocompletion of function signatures on Erlang/OTP 26
    [IEx] Do not assume $HOME is set

Mix

    [mix deps.compile] Handle compilation of rebar3 dependencies when rebar3 is \ 
on a path with spaces on Unix
    [mix test] Properly resolve relative paths when running tests from \ 
individual files
    [mix test] Properly resolve Windows paths when running tests from individual \ 
files
   2023-12-31 22:47:17 by Thomas Klausner | Files touched by this commit (3) | Package updated
Log message:
elixir: update to 1.16.0.

(5 test failures)

# Changelog for Elixir v1.16

## Code snippets in diagnostics

Elixir v1.15 introduced a new compiler diagnostic format and the ability to \ 
print multiple error diagnostics per compilation (in addition to multiple \ 
warnings).

With Elixir v1.16, we also include code snippets in exceptions and diagnostics \ 
raised by the compiler. For example, a syntax error now includes a pointer to \ 
where the error happened:

```
** (SyntaxError) invalid syntax found on lib/my_app.ex:1:17:
    error: syntax error before: '*'
    │
  1 │ [1, 2, 3, 4, 5, *]
    │                 ^
    │
    └─ lib/my_app.ex:1:17
```

For mismatched delimiters, it now shows both delimiters:

```
** (MismatchedDelimiterError) mismatched delimiter found on lib/my_app.ex:1:18:
    error: unexpected token: )
    │
  1 │ [1, 2, 3, 4, 5, 6)
    │ │                └ mismatched closing delimiter (expected "]")
    │ └ unclosed delimiter
    │
    └─ lib/my_app.ex:1:18
```

For unclosed delimiters, it now shows where the unclosed delimiter starts:

```
** (TokenMissingError) token missing on lib/my_app:8:23:
    error: missing terminator: )
    │
  1 │ my_numbers = (1, 2, 3, 4, 5, 6
    │              └ unclosed delimiter
 ...
  8 │ IO.inspect(my_numbers)
    │                       └ missing closing delimiter (expected ")")
    │
    └─ lib/my_app:8:23
```

Errors and warnings diagnostics also include code snippets. When possible, we \ 
will show precise spans, such as on undefined variables:

```
  error: undefined variable "unknown_var"
  │
5 │     a - unknown_var
  │         ^^^^^^^^^^^
  │
  └─ lib/sample.ex:5:9: Sample.foo/1
```

Otherwise the whole line is underlined:

```
error: function names should start with lowercase characters or underscore, \ 
invalid name CamelCase
  │
3 │   def CamelCase do
  │   ^^^^^^^^^^^^^^^^
  │
  └─ lib/sample.ex:3
```

A huge thank you to Vinícius Müller for working on the new diagnostics.

## Revamped documentation

Elixir's Getting Started guides have been made part of the Elixir repository and \ 
incorporated into ExDoc. This was an opportunity to revisit and unify all \ 
official guides and references.

We have also incorporated and extended the work on [Understanding Code Smells in \ 
Elixir Functional \ 
Language](https://github.com/lucasvegi/Elixir-Code-Smells/blob/main/etc/2023-emse-code-smells-elixir.pdf), \ 
by Lucas Vegi and Marco Tulio Valente, from \ 
[ASERG/DCC/UFMG](http://aserg.labsoft.dcc.ufmg.br/), into the official document \ 
in the form of anti-patterns. The anti-patterns are divided into four \ 
categories: code-related, design-related, process-related, and meta-programming. \ 
Our goal is to give all developers examples of potential anti-patterns, with \ 
context and examples on how to improve their codebases.

Another [ExDoc](https://github.com/elixir-lang/ex_doc) feature we have \ 
incorporated in this release is the addition of cheatsheets, starting with [a \ 
cheatsheet for the Enum module](https://hexdocs.pm/elixir/main/enum-cheat.html). \ 
If you would like to contribute future cheatsheets to Elixir itself, feel free \ 
to start a discussion with an issue.

Finally, we have started enriching our documentation with \ 
[Mermaid.js](https://mermaid.js.org/) diagrams. You can find examples in the \ 
[GenServer](https://hexdocs.pm/elixir/main/GenServer.html) and \ 
[Supervisor](https://hexdocs.pm/elixir/main/Supervisor.html) docs.

## v1.16.0 (2023-12-22)

### 1. Enhancements

#### EEx

  * [EEx] Include relative file information in diagnostics

#### Elixir

  * [Code] Add `:emit_warnings` for `Code.string_to_quoted/2`
  * [Code] Automatically include columns in parsing options
  * [Code] Introduce `MismatchedDelimiterError` for handling mismatched \ 
delimiter exceptions
  * [Code.Fragment] Handle anonymous calls in fragments
  * [Code.Formatter] Trim trailing whitespace on heredocs with `\r\n`
  * [File] Add `:offset` option to `File.stream!/2`
  * [Kernel] Auto infer size of matched variable in bitstrings
  * [Kernel] Preserve column information when translating typespecs
  * [Kernel] Suggest module names based on suffix and casing errors when the \ 
module does not exist in `UndefinedFunctionError`
  * [Kernel.ParallelCompiler] Introduce `Kernel.ParallelCompiler.pmap/2` to \ 
compile multiple additional entries in parallel
  * [Kernel.SpecialForms] Warn if `True`/`False`/`Nil` are used as aliases and \ 
there is no such alias
  * [Macro] Add `Macro.compile_apply/4`
  * [Module] Add support for `@nifs` annotation from Erlang/OTP 25
  * [Module] Add support for missing `@dialyzer` configuration
  * [String] Update to Unicode 15.1.0
  * [String] Add `String.replace_invalid/2`
  * [Task] Add `:limit` option to `Task.yield_many/2`

#### Logger

  * [Logger] Add `Logger.levels/0`

#### Mix

  * [mix] Add `MIX_PROFILE` to profile a list of comma separated tasks
  * [mix archive.install] Support `--sparse` option
  * [mix compile.app] Warn if both `:applications` and `:extra_applications` are used
  * [mix compile.elixir] Pass original exception down to diagnostic `:details` \ 
when possible
  * [mix compile.elixir] Optimize scenario where there are thousands of files in \ 
`lib/` and one of them is changed
  * [mix deps.clean] Emit a warning instead of crashing when a dependency cannot \ 
be removed
  * [mix escript.install] Support `--sparse` option
  * [mix release] Include `include/` directory in releases
  * [mix test] Allow testing multiple file:line at once, such as `mix test \ 
test/foo_test.exs:13 test/bar_test.exs:27`

### 2. Bug fixes

#### Elixir

  * [Code] Keep quotes for atom keys in formatter
  * [Code.Fragment] Fix crash in `Code.Fragment.surround_context/2` when \ 
matching on `->`
  * [IO] Raise when using `IO.binwrite/2` on terminated device (mirroring \ 
`IO.write/2`)
  * [Kernel] Do not expand aliases recursively (the alias stored in Macro.Env is \ 
already expanded)
  * [Kernel] Ensure `dbg` module is a compile-time dependency
  * [Kernel] Warn when a private function or macro uses `unquote/1` and the \ 
function/macro itself is unused
  * [Kernel] Re-enabled compiler optimizations for top level functions in \ 
scripts (disabled in v1.14.0 but shouldn't impact most programs)
  * [Kernel] Do not define an alias for nested modules starting with `Elixir.` \ 
in their definition
  * [Kernel.ParallelCompiler] Consider a module has been defined in \ 
`@after_compile` callbacks to avoid deadlocks
  * [Macro] Address exception on `Macro.to_string/1` for certain ASTs
  * [Path] Lazily evaluate `File.cwd!/0` in `Path.expand/1` and `Path.absname/1`
  * [Path] Ensure `Path.relative_to/2` returns a relative path when the given \ 
argument does not share a common prefix with `cwd`

#### ExUnit

  * [ExUnit] Raise on incorrectly dedented doctests

#### IEx

  * [IEx.Pry] Fix prying functions with only literals in their body

#### Mix

  * [mix archive.install] Restore code paths after `mix archive.install`
  * [mix compile] Ensure files with duplicate modules are recompiled whenever \ 
any of the files change
  * [mix compile] Update Mix compiler diagnostics documentation and typespecs to \ 
match the Elixir compiler behaviour where both lines and columns start from one \ 
(before it inaccurately said that columns started from zero)
  * [mix escript.install] Restore code paths after `mix escript.install`

### 3. Soft deprecations (no warnings emitted)

#### Elixir

  * [File] Deprecate `File.stream!(file, options, line_or_bytes)` in favor of \ 
keeping the options as last argument, as in `File.stream!(file, line_or_bytes, \ 
options)`
  * [Kernel.ParallelCompiler] Deprecate `Kernel.ParallelCompiler.async/1` in \ 
favor of `Kernel.ParallelCompiler.pmap/2`
  * [Path] Deprecate `Path.safe_relative_to/2` in favor of `Path.safe_relative/2`

#### Mix

  * [mix compile] Returning a four-element tuple as a position in \ 
`Mix.Task.Compiler.Diagnostic`

### 4. Hard deprecations

#### Elixir

  * [Date] Deprecate inferring a range with negative step, call `Date.range/3` \ 
with a negative step instead
  * [Enum] Deprecate passing a range with negative step on `Enum.slice/2`, give \ 
`first..last//1` instead
  * [Kernel] `~R/.../` is deprecated in favor of `~r/.../`. This is because \ 
`~R/.../` still allowed escape codes, which did not fit the definition of \ 
uppercase sigils
  * [String] Deprecate passing a range with negative step on `String.slice/2`, \ 
give `first..last//1` instead

#### ExUnit

  * [ExUnit.Formatter] Deprecate `format_time/2`, use `format_times/1` instead

#### Mix

  * [mix compile.leex] Require `:leex` to be added as a compiler to run the \ 
`leex` compiler
  * [mix compile.yecc] Require `:yecc` to be added as a compiler to run the \ 
`yecc` compiler
   2023-10-23 16:42:23 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
elixir: updated to 1.15.7

v1.15.7

1. Enhancements

Elixir

[Elixir] Allow code evaluation across Elixir versions

2. Bug fixes

EEx

[EEx] Do not emit duplicate warnings from tokenizer
Mix

[mix format] Correctly match file to subdirectory in \ 
Mix.Tasks.Format.formatter_for_file/2
   2023-07-24 08:57:38 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
elixir: updated to 1.15.4

v1.15.4

Bug fixes

Mix

[mix archive.build] Disable protocol consolidation when building archiveson \ 
archive.install
[mix compile] Track removed files per local dependency (this addresses a bug \ 
where files depending on modules from path dependencies always recompiled)
[mix release] Do not strip relevant chunks from Erlang/OTP 26

v1.15.3

1. Enhancements

Elixir

[Kernel] Improve better stacktraces when executing unnested Elixir code in a file

Mix

[Mix] Allow to opt out of starting apps in Mix.install/2

2. Bug fixes

Elixir

[Code] Ensure with_diagnostics propagate warnings from inner Erlang passes

IEx

[IEx] Fix --remsh on Erlang/OTP 25 and earlier

Mix

[mix compile.elixir] Ensure __mix_recompile__? callbacks are properly invoked
   2023-07-07 15:40:42 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
elixir: updated to 1.15.2

v1.15.2

Bug fixes

IEx

[IEx] Fix CLI being unable to boot on Windows

v1.15.1

1. Enhancements

[Code] Code.string_to_quoted/2 honors :static_atoms_encoder for multi-letter sigils
2. Bug fixes

ExUnit

[ExUnit.CaptureLog] Fix race condition on concurrent capture_log
[ExUnit.CaptureLog] Respect options passed to nested capture_log calls
[ExUnit.Doctest] Properly compile doctests without results terminated by fences
[ExUnit.Doctest] Allow variables defined in doctests to be used in expectation
IEx

[IEx] Ensure pry works on Erlang/OTP 25 and earlier while IEx is booting
[IEx] Code.Fragment.surround_context considers surround context around spaces \ 
and parens
Logger

[Logger] Do not assume Logger has been loaded at compile-time
[Logger.Formatter] Properly handle :function as metadata
Mix

[mix compile] Ensure the current project is available on the code path after its \ 
Elixir sources are compiled
[mix compile] Guarantee yecc/leex are available when emitting warnings from \ 
previous runs
[mix compile] Fix bug where an external resource was deleted after its
mtime was successfully retrieved
[mix compile] Track removed modules and exports across local deps
[mix deps] Fix an issue where dependencies could not be started in an umbrella \ 
projects
[mix release] Properly handle optional dependencies when there is a conflict in \ 
the application start mode
[mix release] Remove --werl from release scripts on Erlang/OTP 26