...

пятница, 15 января 2016 г.

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

Под новогодние праздники был выпущен 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: "http://ift.tt/1UTX56w"
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

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Комментариев нет:

Отправить комментарий