Перевіряємо орфографію коду Erlang разом із Sheldon

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

Усім привіти! З Вами ​Ukrainian Erlanger 🤘 У статті «Sheldon: Erlang бібліотека для перевірки орфографії» я описав фантастичну бібліотеку Sheldon, і як її можна використовувати для перевірки орфографії. Сьогодні ми обговоримо плагін Erlang rebar3_sheldon, який використовує Sheldon для перевірки орфографії вихідного коду Erlang/OTP. Цей плагін для rebar3 ми розробили разом з Брухо Бенавідесом саме для Вас 🙃 Сподіваюся, він буде Вам цікавий, як нам.

«Scissors cuts paper. Paper covers rock. Rock crushes lizard» — Sheldon

Що таке rebar3_sheldon

Скільки разів Ви отримували або створювали задачі з виправлення орфографічних проблем у коді? Не знаю, як у Вас, але в моїй кар’єрі таке траплялося багато... Це жахливо, коли відомий продукт у відповідь на запит клієнта надсилає повідомлення з орфографічною помилкою. Або коли деяка важлива інформація, надана в коді, має проблеми з правописом, які ускладнюють розуміння або читання. Не хвилюйтесь більше! Для цього є рішення: новий плагін rebar3 — rebar3_sheldon, який перевіряє орфографію Вашого коду Erlang!

Цей плагін створено за допомогою rebar3_plugin, але ми обговоримо цей репозиторій шаблонів у наступній статті. Отже, якщо коротко — rebar3_sheldon перевіряє орфографію всіх двійкових даних, рядків і коментарів у всіх вихідних файлах (або тільки в тих, які Ви вкажете) будь-якого проєкту Erlang, обходячи їх за допомогою аналізу Erlang AST(Abstract Syntax Tree — Абстрактного Синтаксичного Дерева).

Як ним користуватися

Отже, давайте подивимося, як можна використовувати rebar3_sheldon, і чого ми можемо очікувати від його результату. Щоб протестувати плагін у своєму проєкті, виконайте такі дії:

  • Додайте плагін у свій файл rebar.config:
    {project_plugins, [{rebar3_sheldon, "~> 0.3.1"}]}
  • Виконайте команду у терміналі spellcheck для запуску перевірки орфографії:
    $ rebar3 spellcheck
    ===> Youre welcome. And if he has twins, we can do all kinds of neat experiments on them.:
    test/test_SUITE.erl:1: The word "Speling" in binary is unknown. Maybe you wanted to use "speeling" or "speiling" or ....?
    test/test_SUITE.erl:2: The word "fdfdf" in string is unknown.
    test/test_SUITE.erl:3: The word "Unicode" in comment is unknown. Maybe you wanted to use "uncoded"?

Як бачите, плагін має зручний формат виводу, схожий на ті, які створюють rebar3_format, rebar3_hank та інші відомі інструменти, а саме шлях/до/файлу:номер-рядка: текст із зазначенням типу даних та можливі варіанти для виправлення орфографії.

Більше опцій

В основному плагін корисний без додаткової конфігурації, але конфігурації за замовчуванням не завжди підходять для кожного проєкту, з цієї причини плагін підтримує низку певних налаштувань як через командний рядок, так і через rebar.config. Ви можете перевірити, які саме атрибути можна передати в оболонці за допомогою команди -h:

$ rebar3 -h spellcheck
Plugin for spellchecking with Sheldon
Usage: rebar3 spellcheck [-f files] [-i ignore] [-r ignore_regex]
                         [-d default_dictionary] [-a additional_dictionaries]

 -f, --files                    List of files to check
 -i, --ignore                   List of ignored files
 -r, --ignore_regex             Regular expressions to ignore
 -d, --default_dictionary       Set the default dictionary
 -a, --additional_dictionaries  List of additional dictionaries

Давайте глибше розглянемо кожен з них.

Атрибут -f або —files очікує список шляхів до файлів, розділених комами. Якщо Ви надасте цей аргумент в оболонці, плагін перевірить лише ці вказанні файли.

$ rebar3 spellcheck -f 'src/*.erl, test/*.erl'
# Теж саме що і …
$ rebar3 spellcheck --files='src/*.erl, test/*erl'

Атрибут -i або —ignore очікує список шляхів до файлів, розділених комами. Якщо вказати цей атрибут, плагін пропустить цей список вказаних файлів під час перевірки орфографії.

$ rebar3 spellcheck -i 'test/*.erl, include/*.hrl'
# Теж саме що і …
$ rebar3 spellcheck --ignore='test/*.erl, include/*.hrl'

Атрибут -r або —ignore_regexp очікує рядок, що містить регулярний вираз. Усі рядки, які відповідають заданному регулярному виразу, ігноруватимуться у всіх файлах. Це дозволяє, наприклад, ігнорувати рядки, що містять шляхи або інші значення конфігурації зі специфічними символами тощо.

$ rebar3 spellcheck -i '[[email protected]/#&+-=*]'
# Теж саме що і …
$ rebar3 spellcheck --ignore='[[email protected]/#&+-=*]'

Атрибут -d або —default_dictionary очікує шлях до спеціального словника, який плагін використовуватиме для заміни словника за замовчуванням.

$ rebar3 spellcheck -d 'path/to/dictionary.txt'
# Теж саме що і …
$ rebar3 spellcheck --default_dictionary='path/to/dictionary.txt'

Атрибут -a або —additional_dictionaries очікує список шляхів до додаткових файлів словника, розділених комами, цей атрибут використовується, коли потрібно розширити словник за замовчуванням або словник, котрий був вказаний з атрибутом -d.

$ rebar3 spellcheck -a 'dict1.txt, dict2.txt'
# Теж саме що і …
$ rebar3 spellcheck --additional_dictionaries='dict1.txt, dict2.txt'

Разова конфігурація для кожного проєкту

Звісно, постійно вказувати атрибути в командній оболонці незручно, особливо якщо Ви вирішили додати виклик перевірки орфографії в CI/CD. Через це, і не тільки, плагін rebar3_sheldon підтримує налаштування через rebar.config. Щоб налаштувати rebar3_sheldon лише один раз, Ви можете додати наступне в rebar.config свого проєкту:

{spellcheck, [
   {files, ["src/*.erl", "src/*/*.erl", "include/*.hrl"]},
   {ignore, ["src/*_ignore.erl"]},
   {ignore_regex, "[[email protected]/#&+-=%*]"},
   {default_dictionary, "path/to/default_dictionary.txt"},
   {additional_dictionaries, ["/dict_1.txt", "/dict_2.txt"]}
]}.

Важливо звернути увагу на те, що якщо у той же час, коли вказані вище значення надаються в rebar.config, після чого Ви будете намагатися передати їх або інші параметри як аргументи команди в оболонці, дубльовані параметри конфігурації будуть замінені на аргументи з командного рядка.

Якщо Ви не встановите жодних параметрів конфігурації в rebar.config, плагін використовуватиме параметр за замовчуванням. А саме:

{spellcheck, [
   {files, ["include/**/*.[he]rl",
            "include/**/*.app.src",
            "src/**/*.[he]rl",
            "src/**/*.app.src",
            "test/**/*.[he]rl",
            "test/**/*.app.src",
            "{rebar,elvis,sys}.config"]}
]}.

Майбутній розвиток

Плагін все ще знаходиться в зародковому стані. Нам вкрай потрібно більше бета-тестерів, щоб використовувати його у своїх проєктах і повідомляти якомога більше помилок, скільки Ви можете знайти.

Тим часом у нас вже є деякі плани:

  • Покращити нашу роботу з AST.
  • Дозволяти використовувати спеціальні теги в коді, щоб ігнорувати певні частини модулів під час їхньої перевірки орфографії.
  • Запровадити кращу підтримку Unicode.

Якщо у Вас є ідеї щодо покращення чи інші думки, Ви можете знайти нас у кімнаті #sheldon Erlang Slack. Нам потрібна будь-яка допомога, яку ми тільки можемо знайти 😃 

Посилання

  • Ви можете знайти rebar3_sheldon на hex.pm.
  • Або Ви можете зробити внесок у проєкт безпосередньо на GitHub.
👍ПодобаєтьсяСподобалось2
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Підписатись на коментарі