Под новогодние праздники был выпущен Rust 1.5. Так как близится релиз 1.6, хочу наверстать упущенное, и рассказать о том, что появилось в последней стабильной версии. Существенные изменения затронули Cargo!
Основное изменение, которое вы получите — это команда cargo install. Всё её прелесть в возможности установить внешние плагины на ваш cargo. Список доступных расширений можно посмотреть здесь, крейты с плагинами чаще всего имеют префикс cagro-. Приведу пример использования нескольких их них.
cargo-check
Команда check позволяет проверить код, без сборки. Устанавливаем:
cargo install cargo-check
Использовать очень просто, точно так же как вы используете команду build:
cargo check
Команда выводит все предупреждения и ошибки по исходникам Rust вашего проекта.
cargo-edit
Команда edit позволяет управлять зависимостями. Устанавливаем:
cargo install cargo-edit
На самом деле будет установлено сразу 3 команды: add, rm и list. Используем следующим образом:
cargo list
env_logger ~0.3
hyper ~0.7
json_macro 0.1.1
log ~0.3
lua git: "https://github.com/jcmoyer/rust-lua53"
mould path: "C:\DEVELOPMENT\rust-dev\mould"
r2d2 0.6.3
r2d2_sqlite 0.0.4
rusqlite 0.6.0
rust-crypto 0.2.34
rustc-serialize ~0.3.16
static-server path: "C:\DEVELOPMENT\rust-dev\static-server"
uuid 0.1.18
Добавляем зависимость с помощью:
cargo add <crate> [--dev|--build|--optional] [--vers=<ver>|--git=<uri>|--path=<uri>] [options]
cargo-graph
Команда graph генерирует граф зависимостей в формате GraphViz. Возможно вы уже видели подобное в некоторых библиотеках на Rust. Устанавливаем:
cargo install cargo-graph
Граф генерируется в stdout, поэтому укажите название файла:
cargo graph > deps.dot
После генерируем PNG из DOT файла:
dot deps.dot -Tpng -o deps.png
Вот что получилось:
cargo-watch
Команда watch позволяет автоматически собирать код, при изменениях в файлах. Подобный подход очень популярен в мире Node (Grunt, Gulp). Устанавливаем:
cargo install cargo-watch
Использовать так же просто:
cargo watch
По сути команда запускает бесконечный цикл с командами build и test, просто наблюдающий за изменениями в файлах.
Кстати, по всем командам можно получить справку через команду help, например:
cargo help watch
Usage: cargo-watch [watch] [options]
cargo watch [options]
cargo-watch [watch] [<args>...]
cargo watch [<args>...]
Options:
-h, --help Display this message
`cargo watch` can take one or more arguments to pass to cargo. For example,
`cargo watch "test ex_ --release"` will run `cargo test ex_ --release`
If no arguments are provided, then cargo will run `build` and `test`
cargo-count
Команда count позволяет посчитать полезную статистику о вашем коде. Устанавливаем:
cargo install cargo-count
Просто наберите:
cargo count
И получите следующий отчёт (меня он приводит в полный восторг!):
Gathering information...
Language Files Lines Blanks Comments Code
-------- ----- ----- ------ -------- ----
TOML 1 19 1 0 18
Python 1 63 11 5 47
Rust 7 824 89 17 718
HTML 41218 5218543 1016734 239837 3961972
CSS 5 907 130 38 739
C 37 19303 2665 1964 14673
C Header 25 3970 1049 1012 1907
C++ Header 1 9 1 3 5
JavaScript 788 4024 591 155 3278
-------- ----- ----- ------ -------- ----
Totals: 42083 5247662 1021271 243031 3983357
rustfmt
Команда fmt позволяет автоматически форматировать код. Близкий аналог есть в Go. Устанавливаем:
cargo install rustfmt
Команда довольно долго компилируется, и пока не очень стабильна, но уже очень полезна.
Наберите:
cargo fmt
Помогает отформатировать код и показывает все не сделанные TODO )
Итог
Теперь вы можете значительно повысить удобство и без того прекрасного cargo. Перспектива радует.
P.S. К слову, все команды — полноценные и автономные программы на Rust, которые компилируются и складываются в ~/.cargo/bin/:
ls -lah ~/.cargo/bin/
итого 33M
drwxr-xr-x 1 denis_000 denis_000 0 янв 15 12:17 .
drwxr-xr-x 1 denis_000 denis_000 0 дек 15 16:37 ..
-rwxr-xr-x 1 denis_000 denis_000 3,5M янв 15 12:13 cargo-add.exe
-rwxr-xr-x 1 denis_000 denis_000 2,2M янв 15 12:04 cargo-check.exe
-rwxr-xr-x 1 denis_000 denis_000 3,3M дек 15 16:44 cargo-count.exe
-rwxr-xr-x 1 denis_000 denis_000 2,4M янв 15 12:03 cargo-fmt.exe
-rwxr-xr-x 1 denis_000 denis_000 3,1M янв 15 12:17 cargo-graph.exe
-rwxr-xr-x 1 denis_000 denis_000 3,2M янв 15 12:13 cargo-list.exe
-rwxr-xr-x 1 denis_000 denis_000 3,2M янв 15 12:12 cargo-rm.exe
-rwxr-xr-x 1 denis_000 denis_000 3,3M дек 15 16:37 cargo-watch.exe
-rwxr-xr-x 1 denis_000 denis_000 8,4M янв 15 12:03 rustfmt.exe
Автор: deko