struct SemanticDirection;
fn main() {}
warning: struct is never used: `SemanticDirection`
--> src/main.rs:1:1
|
1 | struct SemanticDirection;
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: #[warn(dead_code)] on by default
I will turn these warnings back on for anything serious, but I am just tinkering with the language and this is driving me bats.
I tried adding #[allow(dead_code)]
to my code, but that did not work.
You can either:
Add an allow attribute on a struct, module, function, etc.: #[allow(dead_code)] struct SemanticDirection;
Add a crate-level allow attribute; notice the !: #![allow(dead_code)]
Pass it to rustc: rustc -A dead_code main.rs
Pass it using cargo via the RUSTFLAGS environment variable: RUSTFLAGS="$RUSTFLAGS -A dead_code" cargo build
Another way to disable this warning is to prefix the identifier by _
:
struct _UnusedStruct {
_unused_field: i32,
}
fn main() {
let _unused_variable = 10;
}
This can be useful, for instance, with an SDL window:
let _window = video_subsystem.window("Rust SDL2 demo", 800, 600);
Prefixing with an underscore is different from using a lone underscore as the name. Doing the following will immediately destroy the window, which is unlikely to be the intended behavior.
let _ = video_subsystem.window("Rust SDL2 demo", 800, 600);
let _ =
the value would be dropped at the end of the statement, not the end of the block
X
in let X = Y
is an irrefutable pattern (i.e. it's like a match
arm that can be proved to never be wrong at compile time) and, like with refutable patterns, _
is a wildcard that doesn't bind anything to a variable. That's why and how you can do let (x, y) = foo();
and other sorts of unpacking like that. It's just another kind of irrefutable pattern.
Put these two lines on the top of the file.
#![allow(dead_code)]
#![allow(unused_variables)]
#![allow(dead_code, unused)]
;-)
Making the code public also stops the warnings; you'll need to make the enclosing mod
's public too.
This makes sense when you're writing a library: your code is "unused" internally because it's intended to be used by client code.
also as an addition: rust provides four levels of lints (allow, warn, deny, forbid).
https://doc.rust-lang.org/rustc/lints/levels.html#lint-levels
You can always disable unused variables/functions by adding an (_) to the variable name, like so:
let _variable = vec![0; 10];
For unused functions, you should make the function public, but watch out. If the struct isn't public, then you'll still get the error as in here:
//this should be public also
struct A{
A{}
}
impl A {
pub fn new() -> A {
}
}
Or if you don't want it to be public, you should put #[allow(unused)]
using features
#[cfg(feature = "dead_code")]
note: "dead_code"
can be replaced by any word.
Success story sharing
-A unused_variables
can be helpful to prevent dealing with with placing_
in front of everything.#![allow(dead_code)]
also have to go before any code otherwise rust gives some cryptic error.