Pull to refresh

Rust 1.5: Cargo с блэкджеком

Reading time 3 min
Views 12K
Под новогодние праздники был выпущен 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

Вот что получилось:

image

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
Tags:
Hubs:
+20
Comments 18
Comments Comments 18

Articles