2024-08-16 11:57:47 by Adam Ciarcinski | Files touched by this commit (3) | |
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) | |
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) | |
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) | |
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) | |
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) | |
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) | |
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 |
2023-07-02 10:09:37 by Thomas Klausner | Files touched by this commit (3) | |
Log message: elixir: update to 1.15.0. # Changelog for Elixir v1.15 This release requires Erlang/OTP 24 and later. Elixir v1.15 is a smaller release with focused improvements on compilation and boot times. This release also completes our integration process with Erlang/OTP logger, bringing new features such as log rotation and compaction out of the box. You will also find additional convenience functions in `Code`, `Map`, `Keyword`, all Calendar modules, and others. ## Compile and boot-time improvements The last several releases brought improvements to compilation time and this version is no different. In particular, Elixir now caches and prunes load paths before compilation, ensuring your project (and dependencies!) compile faster and in an environment closer to production. In a nutshell the Erlang VM loads modules from code paths. Each application that ships with Erlang and Elixir plus each dependency become an entry in your code path. The larger the code path, the more work Erlang has to do in order to find a module. In previous versions, Mix would only add entries to the load paths. Therefore, if you compiled 20 dependencies and you went to compile the 21st, the code path would have 21 entries (plus all Erlang and Elixir apps). This allowed modules from unrelated dependencies to be seen and made compilation slower the more dependencies you had. With this release, we will now prune the code paths to only the ones listed as dependencies, bringing the behaviour closer to `mix release`. Furthermore, Erlang/OTP 26 allows us to start applications concurrently and cache the code path lookups, decreasing the cost of booting applications. The combination of Elixir v1.15 and Erlang/OTP 26 should reduce the boot time of applications, such as when starting `iex -S mix` or running a single test with `mix test`, from 5% to 30%. The compiler is also smarter in several ways: `@behaviour` declarations no longer add compile-time dependencies and aliases in patterns and guards add no dependency whatsoever, as no dispatching happens. Furthermore, Mix now tracks the digests of `@external_resource` files, reducing the amount of recompilation when swapping branches. Finally, dependencies are automatically recompiled when their compile-time configuration changes. ### Potential incompatibilities Due to the code path pruning, if you have an application or dependency that does not specify its dependencies on Erlang and Elixir application, it may no longer compile successfully in Elixir v1.15. You can temporarily disable code path pruning by setting `prune_code_paths: false` in your `mix.exs`, although doing so may lead to runtime bugs that are only manifested inside a `mix release`. ## Compiler warnings and errors The Elixir compiler can now emit many errors for a single file, making sure more feedback is reported to developers before compilation is aborted. In Elixir v1.14, an undefined function would be reported as: ** (CompileError) undefined function foo/0 (there is no such import) my_file.exs:1 In Elixir v1.15, the new reports will look like: error: undefined function foo/0 (there is no such import) my_file.exs:1 ** (CompileError) my_file.exs: cannot compile file (errors have been logged) A new function, called `Code.with_diagnostics/2`, has been added so this information can be leveraged by editors, allowing them to point to several errors at once. ## Integration with Erlang/OTP logger This release provides additional features such as global logger metadata and file logging (with rotation and compaction) out-of-the-box! This release also soft-deprecates Elixir's Logger Backends in favor of Erlang's Logger handlers. Elixir will automatically convert your `:console` backend configuration into the new configuration. Previously, you would set: ```elixir config :logger, :console, level: :error, format: "$time $message $metadata" ``` Which is now translated to the equivalent: ```elixir config :logger, :default_handler, level: :error config :logger, :default_formatter, format: "$time $message $metadata" ``` If you use `Logger.Backends.Console` with a custom device or other backends, they are still fully supported and functional. If you implement your own backends, you want to consider migrating to [`:logger_backends`](https://github.com/elixir-lang/logger_backends) in the long term. See the new `Logger` documentation for more information on the new features and on compatibility. |
2023-05-26 06:26:50 by Adam Ciarcinski | Files touched by this commit (2) | |
Log message: elixir: updated to 1.14.5 v1.14.5 (2023-05-22) This release contains fixes for Erlang/OTP 26. Bug fixes Elixir * [CLI] Fix a bug where stdout would block when there was no attached terminal \ on Windows when running on Erlang/OTP 26 Mix * [Mix] Properly set SSL configuration for Mix downloads when running on \ Erlang/OTP 26 |
2023-04-09 10:56:58 by Thomas Klausner | Files touched by this commit (2) | |
Log message: elixir: update to 1.14.4. v1.14.4 Latest This release adds basic support for Erlang/OTP 26. When migrating to Erlang/OTP 26, keep it mind it changes how maps are stored internally and they will be printed and traversed in a different order (note maps never provided a guarantee of their order). To aid migration, this release adds :sort_maps to inspect custom options, in case you want to sort them before inspection: inspect(map, custom_options: [sort_maps: true]) Enhancements Elixir [Inspect] Add :sort_maps to Inspect.Opts.custom_options IEx [IEx] Support shell history in Erlang/OTP 26+ Mix [mix compile.elixir] Optimize application tracer Bug fixes Elixir [Code] Properly handle blocks with comments in all cases in \ Code.quoted_to_string_with_comments/2 [Kernel] Fix debug_info/4 when returning core_v1 [Kernel] Store complete path on quote keep: true to avoid invalid stacktraces [Kernel] Fix column count when tokenizing escaped interpolations [Stream] Fix Stream.zip/1 hanging on empty list Mix [mix format] Don't call formatter on directories v1.14.3 1. Enhancements Elixir [Kernel] Speed up loading of runtime modules in the parallel compiler [Range] Optimize range membership implementation ExUnit [ExUnit] Return values from running doctests and make their order consistent 2. Bug fixes Elixir [Calendar] Fix handling of negative years in Calendar.strftime/2 [Exception] Improve blaming of FunctionClauseError with is_struct/2 guards [Kernel] Fix invalid variable scoping in defguard expansion [Kernel] Do not warn on captured underscored vars from defmodule [Kernel] Do not crash for missing line info on type warnings [Macro] Fix Macro.to_string/1 for large negative integers [Macro] Properly type and escape expansion of __ENV__ in macros [Path] Make sure Path.wildcard/2 expands .. symlinks accordingly [Range] Address corner cases in Range.disjoint?/2 implementation ExUnit [ExUnit.DocTest] Remove unnecessary literal quotes from error message on reports |