Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to quiet a warning for a single statement in Rust?

Tags:

Say there is a single warning such as path_statements, unused_variables. Is there a way to ignore a single instant of this, without isolating them into a code block or function?

To be clear, when there is a single warning in the code. I would like the ability to quiet only that warning, without having to do special changes addressing the particular warning. And without this quieting warnings anywhere else, even later on in the same function.

With GCC this can be done as follows:

#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wformat"     /* Isolated region which doesn't raise warnings! */     this_would_raise_Wformat(args); #pragma GCC diagnostic pop 

Does Rust have the equivalent capability?


Note, am asking about the general case of how to quiet warnings. Am aware there are ways to resolve unused var warning for eg.

like image 282
ideasman42 Avatar asked Sep 01 '16 10:09

ideasman42


People also ask

How do you allow unused variables in rust?

So for unused_variables errors, you can add #![ allow(unused_variables)] . To avoid warnings in code, You have to add below code at starting in the rust code file. Third way, adding underscore(_) to names of variables, functions,structs.


2 Answers

To silence warnings you have to add the allow(warning_type) attribute to the affected expression or any of its parents. If you only want to silence the warning on one specific expression, you can add the attribute to that expression/statement:

fn main() {     #[allow(unused_variables)]     let not_used = 27;      #[allow(path_statements)]     std::io::stdin;      println!("hi!"); } 

However, the feature of adding attributes to statements/expressions (as opposed to items, like functions) is still a bit broken. In particular, in the above code, the std::io::stdin line still triggers a warning. You can read the ongoing discussion about this feature here.


Often it is not necessary to use an attribute though. Many warnings (like unused_variables and unused_must_use) can be silenced by using let _ = as the left side of your statement. In general, any variable that starts with an underscore won't trigger unused-warnings.

like image 185
Lukas Kalbertodt Avatar answered Sep 22 '22 05:09

Lukas Kalbertodt


If you want to silence all warnings of a kind in a module, write e.g. #![allow(dead_code)] (note the exclamation mark) at the top of the module. This will disable all warnings of this kind in the whole module. You can also call rustc with e.g. -A dead_code.

You can disable all warnings by writing #![allow(warnings)] at the top of the module.

You can insert a module (as described in the Rust book) where the specific warnings are ignored.

As Lukas said, you can also write e.g. #[allow(dead_code)] on a statement or an expression.

like image 31
ljedrz Avatar answered Sep 21 '22 05:09

ljedrz