Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to suppress "function is never used" warning for a function used by tests?

Tags:

rust

I'm writing a program in Rust and I have some tests for it. I wrote a helper function for these tests, but whenever I build using cargo build it warns me that the function is never used:

warning: function is never used: ... #[warn(dead_code)] on by default

How I can mark this function as used so as not to get the warnings?

like image 563
Derokorian Avatar asked Oct 02 '15 05:10

Derokorian


3 Answers

Specific question

How I can mark this function as used so as not to get the warnings?

The Rust compiler runs many lints to warn you about possible issues in your code and the dead_code lint is one of them. It can be very useful in pointing out mistakes when code is complete, but may also be a nuisance at earlier stages. Often, this can be solved by either deleting unused code, or by marking a public method. However, all lints can be turned off by allowing them, and your error message (#[warn(dead_code)] on by default) contains the name of the lint you could disable.

#[allow(dead_code)]
fn my_unused_function() {}

Alternative for testing

I wrote a helper function for these tests, but whenever I build using cargo build it warns me that the function is never used.

This happens to be a special case, which is that code that is only used for testing isn't needed in the real executable and should probably not be included.

In order to optionally disable compilation of test code, you can mark it accordingly using the cfg attribute with the test profile.

#[cfg(test)]
fn my_test_specific_function() {}

When marked in this way, the compiler knows to ignore the method during compilation. This is similar to commonly used ifdef usage in other languages like C or C++, where you are telling a preprocessor to ignore the enclosed code unless TESTING is defined.

#ifdef TESTING
...
#endif
like image 50
chills42 Avatar answered Nov 10 '22 23:11

chills42


If something is only used in tests, it should be omitted altogether. This can be done with the #[cfg(test)] attribute.

like image 38
Chris Morgan Avatar answered Nov 10 '22 23:11

Chris Morgan


For people getting this warning while making a rust library, you may get this if you don't have your modules set to pub in your lib.rs.

pub mod foo;
like image 18
Michael Eliot Avatar answered Nov 10 '22 23:11

Michael Eliot