Перевіряємо орфографію коду Erlang разом із Sheldon
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
Усім привіти! З Вами Ukrainian Erlanger 🤘 У статті «Sheldon: Erlang бібліотека для перевірки орфографії» я описав фантастичну бібліотеку Sheldon, і як її можна використовувати для перевірки орфографії. Сьогодні ми обговоримо плагін Erlang rebar3_sheldon, який використовує Sheldon для перевірки орфографії вихідного коду Erlang/OTP. Цей плагін для rebar3 ми розробили разом з Брухо Бенавідесом саме для Вас 🙃 Сподіваюся, він буде Вам цікавий, як нам.
Що таке 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 '[_@./#&+-=*]' # Теж саме що і … $ rebar3 spellcheck --ignore='[_@./#&+-=*]'
Атрибут -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, "[_@./#&+-=%*]"}, {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.
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів