Spec-Zone.ru › Elixir 1.16

Исходный код Журнал изменений для Elixir v1.16

Фрагменты кода в диагностике

Elixir v1.15 представил новый формат диагностики компилятора и возможность вывода нескольких диагностических сообщений об ошибках на одну компиляцию (в дополнение к нескольким предупреждениям).

В Elixir v1.16 мы также включили фрагменты кода в исключения и диагностические сообщения, генерируемые компилятором. Например, ошибка синтаксиса теперь включает указатель на то, где произошла ошибка:

** (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

Для несовпадающих разделителей теперь отображаются оба разделителя:

** (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

Для незакрытых разделителей теперь отображается место начала незакрытого разделителя:

** (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

Диагностические сообщения об ошибках и предупреждениях также включают фрагменты кода. Когда это возможно, мы будем показывать точные участки, такие как при использовании неопределённых переменных:

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

В противном случае вся строка подчеркивается:

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

Большое спасибо Vinícius Müller за работу над новой диагностикой.

Переработанная документация

Руководства Elixir по началу работы стали частью репозитория Elixir и были включены в ExDoc. Это предоставило возможность пересмотреть и унифицировать все официальные руководства и справки.

Мы также включили и расширили работу над Понимание проблем с кодом в функциональном языке Elixir, авторами которой являются Lucas Vegi и Marco Tulio Valente, из ASERG/DCC/UFMG, в официальный документ в виде антипаттернов. Антипаттерны разделены на четыре категории: связанные с кодом, связанные с проектированием, связанные с процессом и метапрограммированием. Наша цель — предоставить всем разработчикам примеры потенциальных антипаттернов, с контекстом и примерами того, как улучшить свои базы кода.

Ещё одна функция ExDoc, которую мы включили в этом релизе, — это добавление справочных листов, начиная со справочного листа для модуля Enum. Если вы хотите внести вклад в будущие справочные листы для Elixir, не стесняйтесь начать обсуждение с помощью задачи.

Наконец, мы начали обогащать нашу документацию диаграммами Mermaid.js. Примеры можно найти в документации GenServer и Supervisor.

v1.16.3 (2024-05-21)

1. Исправления ошибок

Elixir

  • [bin/elixir] Правильная обработка флага --dbg в командной строке Elixir
  • [Code.Formatter] Добавить скобки вокруг списков ключевых слов при форматировании левой части when
  • [Kernel] Инференция размера в зафиксированной переменной в строках двоичных данных только при необходимости
  • [System] Добавлено примечание о том, что аргументы небезопасны при вызове скриптов .bat/.com на Windows через System.cmd/3
  • [Port] Добавлено примечание о том, что аргументы небезопасны при вызове скриптов .bat/.com на Windows
  • [URI] Убедиться, что поля :undefined правильно преобразуются в nil при вызове API Erlang

Logger

  • [Logger] Убедиться, что переводчики сохраняются при перезапуске логгера

Mix

  • [mix compile] Убедиться, что пути к компиляции доступны во время компиляции

v1.16.2 (2024-03-10)

1. Улучшения

Elixir

  • [Code] Отправка события отслеживания :defmodule при определении модуля

Mix

  • [Mix] Добавить Mix.install_project_dir/0
  • [Mix] Добавить переменную окружения для повторного использования установки Mix.install/2
  • [Mix.SCM] Добавить Mix.SCM.delete/1

2. Исправления ошибок

Elixir

  • [Code] Исправить проблему форматирования charlist, когда одиночная строка charlist экранирует символ двойной кавычки
  • [Path] Исправить регрессию в том, как Path.relative_to/2 обрабатывал "." в качестве входных данных

IEx

  • [IEx.Helpers] Отбрасывать блоки mermaid с ограждениями из ansi-документов

ExUnit

  • [ExUnit] Правильно сравнивать зафиксированные значения при построении различий

v1.16.1 (2024-01-31)

1. Исправления ошибок

Elixir

  • [Code] Исправить Code.quoted_to_algebra/2 для оператора с ключом :do в качестве операнда
  • [Kernel.ParallelCompiler] Не завершать работу параллельного компилятора, когда он получает диагностические сообщения из дополнительного вычисления кода
  • [Kernel.ParallelCompiler] Всегда регистрировать ошибки в конце компиляции
  • [String] Исправить String.capitalize/1 с одним кодовым знаком

IEx

  • [IEx] Исправить автодополнение сигнатур функций в Erlang/OTP 26
  • [IEx] Не предполагать, что $HOME задано

Mix

  • [mix deps.compile] Обрабатывать компиляцию зависимостей rebar3, когда rebar3 находится на пути со пробелами в Unix
  • [mix test] Правильно разрешать относительные пути при запуске тестов из отдельных файлов
  • [mix test] Правильно разрешать пути Windows при запуске тестов из отдельных файлов

v1.16.0 (2023-12-22)

1. Улучшения

EEx

  • [EEx] Включать информацию об относительном файле в диагностике

Elixir

  • [Code] Добавить :emit_warnings для Code.string_to_quoted/2
  • [Code] Автоматически включать столбцы в параметры парсинга
  • [Code] Ввести MismatchedDelimiterError для обработки исключений несовпадающих разделителей
  • [Code.Fragment] Обрабатывать анонимные вызовы в фрагментах
  • [Code.Formatter] Удалять хвостовые пробелы в heredocs с \r\n
  • [File] Добавить :offset параметр к File.stream!/2
  • [Kernel] Автоматически определять размер сопоставленной переменной в bitstring
  • [Kernel] Сохранять информацию о столбце при переводе типов
  • [Kernel] Предлагать имена модулей на основе ошибок суффикса и регистров, когда модуль отсутствует в UndefinedFunctionError
  • [Kernel.ParallelCompiler] Ввести Kernel.ParallelCompiler.pmap/2 для компиляции нескольких дополнительных записей параллельно
  • [Kernel.SpecialForms] Выдавать предупреждение, если True/False/Nil используются в качестве псевдонимов, и такого псевдонима нет
  • [Macro] Добавить Macro.compile_apply/4
  • [Module] Добавить поддержку аннотации @nifs из Erlang/OTP 25
  • [Module] Добавить поддержку отсутствующей конфигурации @dialyzer
  • [String] Обновить до Unicode 15.1.0
  • [String] Добавить String.replace_invalid/2
  • [Task] Добавить :limit параметр к Task.yield_many/2

Logger

  • [Logger] Добавить Logger.levels/0

Mix

  • [mix] Добавить MIX_PROFILE для профилирования списка задач, разделённых запятыми
  • [mix archive.install] Поддержка --sparse параметра
  • [mix compile.app] Выдать предупреждение, если используются оба :applications и :extra_applications
  • [mix compile.elixir] Передать исходное исключение в диагностическое :details сообщение, когда это возможно
  • [mix compile.elixir] Оптимизировать сценарий с тысячами файлов в lib/ и изменением одного из них
  • [mix deps.clean] Выдавать предупреждение вместо завершения работы при невозможности удаления зависимости
  • [mix escript.build] Скрипты escript теперь по умолчанию удаляют файлы .beam, что приводит к более компактным скриптам. Однако, если вы используете escript для доступа к документации Elixir или компиляции кода Elixir, метаданные документации и устаревших функций больше недоступны. Установите strip_beams: false в вашей конфигурации escript в mix.exs для сохранения всех метаданных
  • [mix escript.install] Поддержка --sparse параметра
  • [mix release] Включить каталог include/ в релизы
  • [mix test] Разрешить одновременное тестирование нескольких файлов:строка, например mix test test/foo_test.exs:13 test/bar_test.exs:27

2. Исправления ошибок

Elixir

  • [Code] Сохранять кавычки для атомных ключей в форматировщике
  • [Code.Fragment] Исправить сбой в Code.Fragment.surround_context/2 при сопоставлении с ->
  • [IO] Вызывать ошибку при использовании IO.binwrite/2 на завершённом устройстве (отражение IO.write/2)
  • [Kernel] Не расширять псевдонимы рекурсивно (псевдоним, хранящийся в Macro.Env, уже расширен)
  • [Kernel] Убедиться, что модуль dbg является зависимостью времени компиляции
  • [Kernel] Выдавать предупреждение, если частная функция или макрос используют unquote/1, а сама функция/макрос не используется
  • [Kernel] Возобновить компиляторские оптимизации для функций верхнего уровня в скриптах (отключены в v1.14.0, но не должны повлиять на большинство программ)
  • [Kernel] Не определять псевдоним для вложенных модулей, начинающихся с Elixir. в их определении
  • [Kernel.ParallelCompiler] Рассматривать модуль как определённый в @after_compile вызовах для предотвращения тупиков
  • [Macro] Исправить исключение в Macro.to_string/1 для определённых AST
  • [Path] Лениво вычислять File.cwd!/0 в Path.expand/1 и Path.absname/1
  • [Path] Убедиться, что Path.relative_to/2 возвращает относительный путь, когда заданный аргумент не имеет общего префикса с cwd

ExUnit

  • [ExUnit] Выдать ошибку при неправильно отступах doctests

IEx

  • [IEx.Pry] Исправить функции prying с только литералами в своём теле

Mix

  • [mix archive.install] Восстановить пути к коду после mix archive.install
  • [mix compile] Убедиться, что файлы с дублирующими модулями перекомпилируются всякий раз, когда любой из файлов изменяется
  • [mix compile] Обновить документацию и типы Mix-компилятора диагностики для соответствия поведению Elixir-компилятора, где и строки, и столбцы начинаются с единицы (раньше неточно утверждалось, что столбцы начинаются с нуля)
  • [mix escript.install] Восстановить пути к коду после mix escript.install

3. Мягкие устаревания (без вывода предупреждений)

Elixir

  • [File] Устаревший File.stream!(file, options, line_or_bytes) в пользу сохранения опций в качестве последнего аргумента, как в File.stream!(file, line_or_bytes, options)
  • [Kernel.ParallelCompiler] Устаревший Kernel.ParallelCompiler.async/1 в пользу Kernel.ParallelCompiler.pmap/2
  • [Path] Устаревший Path.safe_relative_to/2 в пользу Path.safe_relative/2

Mix

  • [mix compile] Возвращение кортежа из четырёх элементов в качестве позиции в Mix.Task.Compiler.Diagnostic

4. Жёсткие устаревания

Elixir

  • [Date] Устарело выведение диапазона с отрицательным шагом, вызовите Date.range/3 с отрицательным шагом вместо этого
  • [Enum] Устарело передача диапазона с отрицательным шагом в Enum.slice/2, используйте first..last//1 вместо
  • [Kernel] ~R/.../ устарел в пользу ~r/.../. Это связано с тем, что ~R/.../ всё ещё допускал escape-коды, которые не соответствовали определению заглавных сигилов
  • [String] Устарело передача диапазона с отрицательным шагом в String.slice/2, используйте first..last//1 вместо

ExUnit

  • [ExUnit.Formatter] Устаревший format_time/2, используйте format_times/1 вместо

Mix

  • [mix compile.leex] Требуется добавление :leex в качестве компилятора для выполнения компилятора leex
  • [mix compile.yecc] Требуется добавление :yecc в качестве компилятора для выполнения компилятора yecc

v1.15

Список изменений для релизов v1.15 можно найти в ветке v1.15.

← Предыдущая страница Справочник API
Следующая страница → Введение

Скачать версию ePub

Создано с помощью ExDoc (v0.32.2) для языка программирования Elixir

© 2012-2024 The Elixir Team
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.16.3/changelog.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API