Можно ли, чтобы Cargo всегда показывал предупреждения?
Я использую watch
с cargo
, чтобы быстро увидеть ошибки времени компиляции. Однако cargo build
будет показывать только ошибки при сборке в первый раз.
$ cargo build
Compiling clayman v0.0.1
src/core_math/vector.rs:8:5: 13:6 warning: method is never used: 'New', #[warn(dead_code)] on by default
src/core_math/vector.rs:8 pub fn New(x: i32, y: i32) -> Vector {
src/core_math/vector.rs:9 Vector {
src/core_math/vector.rs:10 x: x,
src/core_math/vector.rs:11 y: y
src/core_math/vector.rs:12 }
src/core_math/vector.rs:13 }
src/core_math/vector.rs:8:5: 13:6 warning: method 'New' should have a snake case name such as 'new', #[warn(non_snake_case)] on by default
src/core_math/vector.rs:8 pub fn New(x: i32, y: i32) -> Vector {
src/core_math/vector.rs:9 Vector {
src/core_math/vector.rs:10 x: x,
src/core_math/vector.rs:11 y: y
src/core_math/vector.rs:12 }
src/core_math/vector.rs:13 }
src/main.rs:28:9: 28:10 warning: unused variable: 'v', #[warn(unused_variables)] on by default
src/main.rs:28 let v: vector::Vector;
^
$ cargo build
$
Это означает, что я вижу предупреждения только в течение нескольких секунд, прежде чем watch
дают мне четкий экран.
Есть ли способ сделать cargo build
всегда давать мне предупреждения?
Ответы
Ответ 1
Предупреждения появляются только тогда, когда Rust перекомпилирует ваши файлы; однако он кэширует как можно больше, и если что-то не изменилось, он с радостью пропустит бесполезную компиляцию. Там в настоящее время нет опции в Cargo, чтобы принудительно восстановить.
Быстрое и грязное решение, но простое в настройке, это touch
исходным файлам, чтобы Cargo посчитал, что они изменились:
$ cd /path/to/project/root
$ ls
Cargo.lock Cargo.toml src target
$ cargo build
Compiling abc v0.1.0 (file:///private/tmp/b/abc)
src/main.rs:2:9: 2:10 warning: unused variable: 'x', #[warn(unused_variables)] on by default
src/main.rs:2 let x: u8 = 123;
^
$ cargo build
$ touch $(find src)
$ cargo build
Compiling abc v0.1.0 (file:///private/tmp/b/abc)
src/main.rs:2:9: 2:10 warning: unused variable: 'x', #[warn(unused_variables)] on by default
src/main.rs:2 let x: u8 = 123;
^
Другим решением, может быть, лучше, будет очистить target
каталог, содержащий двоичные артефакты, с помощью cargo clean
:
$ cargo build
Compiling abc v0.1.0 (file:///private/tmp/b/abc)
src/main.rs:2:9: 2:10 warning: unused variable: 'x', #[warn(unused_variables)] on by default
src/main.rs:2 let x: u8 = 123;
^
$ cargo build
$ cargo clean
$ cargo build
Compiling abc v0.1.0 (file:///private/tmp/b/abc)
src/main.rs:2:9: 2:10 warning: unused variable: 'x', #[warn(unused_variables)] on by default
src/main.rs:2 let x: u8 = 123;
^
Преимущество Vim в том, что файл изменен! Предупреждения, а также можно запускать в любом месте внутри каталога проекта, а не только в корне.
Ответ 2
Это еще один вариант шаблона касания, описанный в ответе mdups.
Используйте эту команду для проверки ошибок типа и отображения всех предупреждений при каждом запуске, даже если не произошло никакого изменения кода:
touch src/my_tra_la_la.rs && clear && clear && cargo check
Часть clear && clear &&
в основном не имеет отношения к этому ответу, но для меня это обязательная часть каждой команды сборки, чтобы избежать визуального слияния нового вывода с выводом предыдущего запуска.
Это требует двух вещей, первый mod my_tra_la_la;
в main.rs
или в lib.rs
если это библиотека.
Вторая часть необязательна, но я думаю, что было бы неплохо добавить некоторую документацию в этот специальный исходный файл, src/my_tra_la_la.rs
:
//! The only purpose of this file is to act as a target for the 'touch' command
//! in order to force recompilation of this otherwise meaningless file and in
//! turn to force rustc to display warnings, every time.
//!
//! touch src/my_tra_la_la.rs && clear && clear && cargo check
//!
//! Mmm...my ding ding dong
Весь смысл выделенного сенсорного файла, подобного этому, состоит в том, чтобы избежать необходимости когда-либо открывать его в редакторе кода и избегать всплывающих окон и предупреждений, таких как "файл изменен!" пока работал.
Ответ 3
Решением, хотя и временно, было touch
к файлу, который я редко редактирую. Таким образом, я избегаю проблемы, связанной с изменением this file has been changed
, а также не нужно постоянно очищать весь проект.
Кроме того, мне удалось также добавить цвета (в --color
опции --color
), вообще не используя watch
, а просто запустив следующий скрипт:
#!/bin/sh
while :
do
script -qc "cargo build" /dev/null > .tmp
clear
cat .tmp
sleep 2 # or whatever
touch src/somefile.rs
done
Причина, по которой я пишу и читаю в .tmp
заключается в том, что все выходные данные отображаются в одном (rustc
данные rustc
во время работы)
Ответ 4
Я сталкивался с этим раньше. Я использую:
cargo check