LibMake ⧉ — це відкритий CLI-інструмент та бібліотека для Rust, яка генерує повну структуру проєкту бібліотеки за один виклик. Вона усуває розрив між cargo new --lib (яка створює лише мінімальні файли Cargo.toml та src/lib.rs) та готовим до розгортання налаштуванням бібліотеки (яке вимагає вручну додавати коментарі документації, CI, тестові середовища, структуру для бенчмарків, CONTRIBUTING.md та файли ліцензій).
У цій статті описується, що саме генерує LibMake, як працюють режими конфігураційного файлу та CLI, згенерована структура CI, а також система шаблонізації.
Встановлення та базове використання
LibMake опубліковано на crates.io та встановлюється за допомогою Cargo:
cargo install libmake
Мінімальний виклик CLI генерує бібліотеку із вказаною назвою в поточному каталозі:
libmake \
--author "Jane Smith" \
--email "jane@example.com" \
--name "my_library" \
--description "A Rust library for doing useful things" \
--version "0.1.0" \
--licence "MIT OR Apache-2.0" \
--repository "https://github.com/example/my_library" \
--rustversion "1.70.0" \
--edition "2021" \
--output "my_library"
Додаткові необов'язкові прапорці включають --categories, --keywords, --homepage, --documentation, --readme та --build.
Режим конфігураційного файлу
Для використання в команді всі прапорці CLI можна описати у конфігураційному файлі TOML:
# libmake.toml
author = "Jane Smith"
email = "jane@example.com"
name = "my_library"
description = "A Rust library for doing useful things"
version = "0.1.0"
licence = "MIT OR Apache-2.0"
repository = "https://github.com/example/my_library"
rustversion = "1.70.0"
edition = "2021"
output = "my_library"
categories = ["algorithms", "data-structures"]
keywords = ["rust", "library"]
Викликається так:
libmake --config libmake.toml
LibMake також приймає конфігураційні формати JSON, YAML та CSV за допомогою прапорців --config-json, --config-yaml та --config-csv відповідно. Додавання libmake.toml до кореня репозиторію надає кожному розробнику відтворювану основу структури проєкту, а зміни у конфігурації шаблонів відображаються у Git-дифах.
Згенерована структура проєкту
Виклик LibMake створює таку структуру каталогу:
my_library/
├── .github/
│ └── workflows/
│ └── release.yml # повна матриця CI
├── benches/
│ └── lib_benchmarks.rs # заглушка для бенчмарку Criterion
├── src/
│ └── lib.rs # з коментарями документації, deny(missing_docs)
├── tests/
│ └── lib_tests.rs # заглушка для інтеграційного тесту
├── CONTRIBUTING.md
├── Cargo.toml # повні метадані
├── LICENSE-APACHE
├── LICENSE-MIT
└── README.md
Згенерований файл src/lib.rs містить коментар документації на рівні пакета (crate), #![deny(missing_docs)], #![doc = include_str!("../README.md")] для підтягування README в rustdoc, а також заглушку публічного типу з відповідним коментарем документації. Ці рішення відповідають вимогам Rust API Guidelines, згідно з якими всі публічні елементи повинні мати документацію.
Згенерований файл benches/lib_benchmarks.rs використовує Criterion.rs та потребує додавання criterion як dev-залежності, яку LibMake вставляє в Cargo.toml автоматично.
Робочий процес CI у GitHub Actions
Згенерований файл .github/workflows/release.yml запускає п'ять завдань для кожного push-запиту та pull-запиту:
| Завдання | Toolchain | Що перевіряється |
|---|---|---|
test |
stable, beta, nightly (матриця) | cargo test --all-features |
clippy |
stable | cargo clippy -- -D warnings |
fmt |
stable | cargo fmt --check |
audit |
stable | cargo audit (cargo-audit встановлюється під час виконання завдання) |
doc |
stable | cargo doc --no-deps (завершується помилкою у разі відсутності документації) |
Завдання для версії nightly має параметр continue-on-error: true, тому регресія в nightly-версії не блокує злиття гілок (merges), водночас інформація про збій все одно відображається в результатах запуску робочого процесу.
Шаблонізація за допомогою Tera
LibMake використовує двигун шаблонів Tera (подібний до Jinja2 синтаксис для Rust) для рендерингу всіх згенерованих файлів. Кожен шаблон отримує повну структуру конфігурації як контекст:
{{ name }} → my_library
{{ author }} → Jane Smith
{{ edition }} → 2021
{{ description }} → A Rust library for doing useful things
Каталоги користувацьких шаблонів підтримуються за допомогою прапорця --template:
libmake --config libmake.toml --template ./my_templates/
Користувацький каталог має повторювати структуру шаблонів за замовчуванням (мати ті самі імена файлів). Будь-який файл, наявний у користувацькому каталозі, замінює відповідний вбудований шаблон; для файлів, які відсутні в користувацькому каталозі, використовуються вбудовані версії. Це дозволяє здійснювати часткове перевизначення — наприклад, замінити лише шаблон робочого процесу CI, зберігши при цьому стандартні шаблони src/lib.rs та Cargo.toml.
Часті запитання
Чим LibMake відрізняється від cargo new --lib?
cargo new --lib створює мінімальний проєкт, який містить лише Cargo.toml та src/lib.rs (з одним блоком #[cfg(test)]). LibMake генерує повну структуру — інтеграційні тести, бенчмарки, CI, CONTRIBUTING.md, файли подвійної ліцензії та належним чином документований src/lib.rs — налаштований з реальними метаданими проєкту, а не з тимчасовими плейсхолдерами.
Чи можна використовувати LibMake з наявним Cargo workspace?
LibMake генерує автономний каталог пакета (crate). Щоб додати згенерований пакет до наявного робочого простору (workspace), додайте вихідний шлях до масиву members робочого простору у кореневому Cargo.toml. LibMake не змінює наявні файли робочого простору.
Чи можу я оновити шаблони структури після початкової генерації? LibMake генерує файли лише один раз; він не відстежує та не оновлює раніше згенеровані проєкти. Щоб застосувати оновлені шаблони, рекомендованим підходом є повторний запуск LibMake у тимчасовий каталог і порівняння результатів із наявним пакетом для вибіркового внесення бажаних змін.
Які редакції (editions) Rust та значення MSRV підтримує LibMake?
LibMake приймає будь-який рядок для --edition та --rustversion і записує ці значення безпосередньо в Cargo.toml. Він не перевіряє, чи є вказана редакція або MSRV реальною версією Rust, тому користувачі самі відповідають за надання коректних значень.
Література
- Rousseau, S. LibMake — A code generator to reduce repetitive tasks and build high-quality Rust libraries. GitHub, 2023. https://github.com/sebastienrousseau/libmake
- The Rust Programming Language. Rust API Guidelines. GitHub, 2023. https://rust-lang.github.io/api-guidelines/
- The Cargo Book. Package Layout. The Rust Programming Language, 2023. https://doc.rust-lang.org/cargo/guide/project-layout.html
- Keats, V. et al. Tera — A template engine inspired by Jinja2 and Django templates. GitHub, 2023. https://keats.github.io/tera/
Останній перегляд .
Останній перегляд .
Перепублікувати цю статтю
Скопіювати формат для Medium
# Оптимізація розробки бібліотек Rust за допомогою генерації коду — Sebastien Rousseau > Originally published at [https://sebastienrousseau.com/uk/2023-10-26-libmake-henerator-kodu-dlya-rust-bibliotek/](https://sebastienrousseau.com/uk/2023-10-26-libmake-henerator-kodu-dlya-rust-bibliotek/) Покращте розробку бібліотек Rust за допомогою LibMake: інструменту генерації коду, який застосовує найкращі практики та створює початковий код, заощаджуючи час і зусилля розробників. Read the full article on sebastienrousseau.com: https://sebastienrousseau.com/uk/2023-10-26-libmake-henerator-kodu-dlya-rust-bibliotek/
Скопіювати формат для Mastodon
Оптимізація розробки бібліотек Rust за допомогою генерації коду — Sebastien Rousseau Покращте розробку бібліотек Rust за допомогою LibMake: інструменту генерації коду, який застосовує найкращі практики та створює початковий код, заощаджуючи час і зусилля розробників. https://sebastienrousseau.com/uk/2023-10-26-libmake-henerator-kodu-dlya-rust-bibliotek/
Копіювати відформатоване для LinkedIn
Оптимізація розробки бібліотек Rust за допомогою генерації коду — Sebastien Rousseau Покращте розробку бібліотек Rust за допомогою LibMake: інструменту генерації коду, який застосовує найкращі практики та створює початковий код, заощаджуючи час і зусилля розробників. Ось ключові стратегічні висновки: - Встановлення та базове використання. LibMake опубліковано на crates.io та встановлюється за допомогою Cargo:. - Режим конфігураційного файлу. Для використання в команді всі прапорці CLI можна описати у конфігураційному файлі TOML:. - Згенерована структура проєкту. Виклик LibMake створює таку структуру каталогу:. - Робочий процес CI у GitHub Actions. Згенерований файл .github/workflows/release.yml запускає п'ять завдань для кожного push-запиту та pull-запиту:. Яким є підхід вашої організації до викликів, описаних у цій статті? → https://sebastienrousseau.com/uk/2023-10-26-libmake-henerator-kodu-dlya-rust-bibliotek/ #Rust #Бібліотека #Розробка #Код #Генератор Sebastien Rousseau | CC-BY-4.0
Цитувати цю статтю
Оптимізація розробки бібліотек Rust за допомогою генерації коду — Sebastien Rousseau
Покращте розробку бібліотек Rust за допомогою LibMake: інструменту генерації коду, який застосовує найкращі практики та створює початковий код, заощаджуючи час і зусилля розробників.
BibTeX
@online{rousseau2023оптимізація,
author = {Rousseau, Sebastien},
title = {{Оптимізація розробки бібліотек Rust за допомогою генерації коду — Sebastien Rousseau}},
year = {2023},
url = {https://sebastienrousseau.com/uk/2023-10-26-libmake-henerator-kodu-dlya-rust-bibliotek/},
urldate = {2023}
}RIS
TY - GEN AU - Rousseau, Sebastien TI - Оптимізація розробки бібліотек Rust за допомогою генерації коду — Sebastien Rousseau PY - 2023 UR - https://sebastienrousseau.com/uk/2023-10-26-libmake-henerator-kodu-dlya-rust-bibliotek/ ER -
Vancouver
Rousseau S. Оптимізація розробки бібліотек Rust за допомогою генерації коду — Sebastien Rousseau. sebastienrousseau.com. 2023 Oct 26. Available from: https://sebastienrousseau.com/uk/2023-10-26-libmake-henerator-kodu-dlya-rust-bibliotek/
Chicago
Rousseau, Sebastien. "Оптимізація розробки бібліотек Rust за допомогою генерації коду — Sebastien Rousseau." sebastienrousseau.com. October 26, 2023. https://sebastienrousseau.com/uk/2023-10-26-libmake-henerator-kodu-dlya-rust-bibliotek/.
APA
Rousseau, S. (2023, October 26). Оптимізація розробки бібліотек Rust за допомогою генерації коду — Sebastien Rousseau. sebastienrousseau.com. https://sebastienrousseau.com/uk/2023-10-26-libmake-henerator-kodu-dlya-rust-bibliotek/
Перевидати цю статтю
Оптимізація розробки бібліотек Rust за допомогою генерації коду — Sebastien Rousseau
Покращте розробку бібліотек Rust за допомогою LibMake: інструменту генерації коду, який застосовує найкращі практики та створює початковий код, заощаджуючи час і зусилля розробників.
Ця стаття поширюється за ліцензією Creative Commons Attribution 4.0 International. Перевидання вимагає посилання на канонічну URL-адресу.
Оптимізація розробки бібліотек Rust за допомогою генерації коду — Sebastien Rousseau Покращте розробку бібліотек Rust за допомогою LibMake: інструменту генерації коду, який застосовує найкращі практики та створює початковий код, заощаджуючи час і зусилля розробників. Originally published at https://sebastienrousseau.com/uk/2023-10-26-libmake-henerator-kodu-dlya-rust-bibliotek/ by Sebastien Rousseau. Licensed under CC-BY-4.0.
