Julia. Форматирование кода

Julia. Форматирование кода

2026-03-21 · 4 мин. для прочтения
blog computer-science

Julia. Форматирование кода.

Содержание

1 Пакет JuliaFormatter.jl

1.1 Общая информация

1.2 Установка

  • Установите пакет через REPL:
using Pkg
Pkg.add("JuliaFormatter")
  • Или в командной строке:
julia -e 'using Pkg; Pkg.add("JuliaFormatter")'

1.3 Использование из REPL

  • Вызовите format на файле или каталоге:

    using JuliaFormatter
    format("myfile.jl")                # форматирует один файл
    format("src/")                     # форматирует все .jl файлы в папке
    format(".")                        # рекурсивно форматирует всё в текущей директории
    
  • По умолчанию используется стиль BlueStyle — стандартный для Julia.

  • Можно явно указать другой стиль (например, YASStyle, DefaultStyle):

    format("src/", style=YASStyle())
    

1.4 Использование из командной строки

  • После установки пакета выполните:
    julia -e 'using JuliaFormatter; format(".")'
    

1.5 Отдельный инструмент командной строки

  • Начиная с версии 2.2.0, JuliaFormatter предоставляет исполняемый файл для работы из командной строки jlfmt.

  • Установка:

    pkg> app add JuliaFormatter
    
  • Применение:

    # Format a file and write to stdout
    jlfmt src/file.jl
    
    # Format a file in place
    jlfmt --inplace src/file.jl
    
    # Check if all files in a directory are already formatted with verbose mode
    jlfmt --check -v src/
    
    # Format all files in a directory with multiple threads
    jlfmt --threads=6 -- --inplace -v src/
    
    # Show diff without modifying files
    jlfmt --diff src/file.jl
    

1.6 Рекомендации по стилю

  • BlueStyle — де-факто стандарт, используется в большинстве пакетов Julia. Он соответствует официальному руководству по стилю.

  • Для проектов можно зафиксировать стиль, добавив в корень файл .JuliaFormatter.toml:

    style = "blue"
    margin = 92
    indent = 4
    
  • Этот файл будет применяться при вызове format(".") без дополнительных параметров.

1.7 Форматирование без изменения файла (проверка)

  • Если нужно только проверить, требуется ли форматирование, используйте:
    format("src/", overwrite=false)   # покажет изменения, но не применит их
    

2 Пакет Runic.jl

2.1 Общая информация

3 Сравнение Runic.jl и JuliaFormatter.jl

3.1 Общая информация

  • JuliaFormatter.jl предлагает максимальную гибкость: вы можете настроить практически всё — от количества пробелов до того, как форматировать kwargs и цепочки вызовов.
    • Это удобно для проектов, где команда уже имеет устоявшиеся предпочтения.
  • Runic.jl следует философии gofmt: полное отсутствие конфигурации.
    • Это устраняет дискуссии о форматировании в код-ревью.

3.2 Таблица

Таблица 1: Сравнение Runic.jl и JuliaFormatter.jl
ХарактеристикаJuliaFormatter.jlRunic.jl
ФилософияГибкий, настраиваемый под ваш стильНе имеет конфигурации
ПодходВаше мнение — ваш выборСтиль gofmt: никто не любит, но все его используют
Конфигурация.JuliaFormatter.toml с множеством опцийОтсутствует — только вкл/выкл через комментарии
Встроенные стилиBlueStyle, YASStyle, SciMLStyle, DefaultStyleТолько один фиксированный стиль
Форматирование блоковНастраиваемоеВсегда начинаются и заканчиваются с новой строки
ОтступыНастраиваемые (по умолчанию 4)Фиксированные 4 пробела
Ограничение строкиmargin (по умолчанию 92)Нет — “используйте Enter или рефакторите код”
Специфичные правилаalignAssignment, alwaysForIn, pipeToFunctionCall и др.Обработка “жесткой” и “мягкой” индентации для цепочек операторов
Интеграция VS CodeВстроенная в расширение JuliaЧерез стороннее расширение Custom Local Formatters
Интеграция NeovimЧерез conform.nvimЧерез conform.nvim (с ручной настройкой)
CLIformat(), format_file(), format_text(), jlfmtrunic с флагами –check, –diff, –inplace
Git интеграцияМожно настроитьgit-runic для форматирования только измененных строк
ПроизводительностьСтандартнаяМожет быть скомпилирован в бинарник (runicc) для скорости
Требования к JuliaJulia 1.0+Рекомендуется Julia 1.12+ для флага -m
СтатусСтабильный, широко используетсяНовый (с 2024), активно развивается

3.3 Форматирование

  • JuliaFormatter.jl позволяет настраивать множество аспектов:

    • Предел длины строки через margin
    • Выравнивание присваиваний (alignAssignment)
    • Автозамену for i = 1:10 на for i in 1:10 (alwaysForIn)
    • Преобразование x |> f в f(x) (pipeToFunctionCall)
  • Runic.jl придерживается строгих правил:

    • 4 пробела отступа — всегда
    • Блоки всегда начинаются и заканчиваются с новой строки
    • Нет ограничения длины строки — разработчик сам решает, где переносить
    • Умная обработка цепочек операторов с “мягкой” индентацией
    • Пробелы вокруг всех инфиксных операторов, включая kwargs

3.4 Отключение форматирования

  • Оба инструмента позволяют временно отключать форматирование с помощью комментариев:
#! format: off          # JuliaFormatter.jl
# runic: off            # Runic.jl

# здесь код не форматируется

#! format: on           # JuliaFormatter.jl
# runic: on             # Runic.jl
  • Runic также позволяет отключить форматирование до конца файла одной командой # runic: off на верхнем уровне .
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Работаю профессором на кафедре теории вероятностей и кибербезопасности Российского университета дружбы народов им. Патриса Лумумбы. Научные интересы относятся к области теоретической физики и математического моделирования.