This PR contains the following updates:
| Package | Update | Change |
|---|---|---|
| [elixir](https://elixir-lang.org/) ([source](https://github.com/elixir-lang/elixir)) | minor | `1.15.7` -> `1.16.0` |
---
### Release Notes
<details>
<summary>elixir-lang/elixir (elixir)</summary>
### [`v1.16.0`](https://github.com/elixir-lang/elixir/releases/tag/v1.16.0)
[Compare Source](https://github.com/elixir-lang/elixir/compare/v1.15.7...v1.16.0)
Official announcement: https://elixir-lang.org/blog/2023/12/22/elixir-v1-16-0-released/
##### 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
</details>
---
### Configuration
📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMDcuMCIsInVwZGF0ZWRJblZlciI6IjM3LjEyNy4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->
Reviewed-on: https://code.harton.nz/james/smokestack/pulls/18
Co-authored-by: Renovate Bot <bot@harton.nz>
Co-committed-by: Renovate Bot <bot@harton.nz>
This makes the design a little easier to understand and change.
Also implements building of many params/records as a side-effect.
Reviewed-on: https://code.harton.nz/james/smokestack/pulls/6
Co-authored-by: James Harton <james@harton.nz>
Co-committed-by: James Harton <james@harton.nz>