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 

На самом деле будет установлено сразу 2 команды: add и 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 

ссылка на оригинал статьи http://habrahabr.ru/post/275157/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *