Using my lint
branch and the example lint from my RFC to compile this program:
#![feature(phase)]
#[phase(plugin)]
extern crate lipogram;
fn hello() { }
fn main() { hello() }
The result is:
$ rustc lipogram.rs
$ rustc -L . test.rs
test.rs:6:1: 6:15 warning: item name contains the letter 'e', #[warn(letter_e)] on by default
test.rs:6 fn hello() { }
^~~~~~~~~~~~~~
Lint plugins work with the usual attributes:
$ (echo '#![allow(letter_e)]'; cat test.rs) | rustc -L . -
$ (echo '#![deny(letter_e)]'; cat test.rs) | rustc -L . -
<anon>:7:1: 7:15 error: item name contains the letter 'e'
<anon>:7 fn hello() { }
^~~~~~~~~~~~~~
<anon>:1:9: 1:17 note: lint level defined here
<anon>:1 #![deny(letter_e)]
^~~~~~~~
error: aborting due to previous error
And they work with command-line flags:
$ rustc -L . test.rs -A letter-e
$ rustc -L . test.rs -D letter-e
test.rs:6:1: 6:15 error: item name contains the letter 'e' [-D letter-e]
test.rs:6 fn hello() { }
^~~~~~~~~~~~~~
error: aborting due to previous error
With no crate filename, -W help
lists builtin lints:
$ rustc -W help
...
Lint checks provided by rustc:
name default meaning
---- ------- -------
deprecated-owned-vector allow use of a `~[T]` vector
heap-memory allow use of any (Box type or @ type) heap memory
...
unknown-crate-type deny unknown crate type found in #[crate_type] directive
unknown-features deny unknown features found in crate-level #[feature] directives
Compiler plugins can provide additional lints. To see a listing of these, re-run `rustc -W help` with a crate filename.
With a crate filename, it shows plugins too:
$ rustc -W help -L . test.rs
...
Lint checks provided by rustc:
name default meaning
---- ------- -------
deprecated-owned-vector allow use of a `~[T]` vector
heap-memory allow use of any (Box type or @ type) heap memory
...
unknown-crate-type deny unknown crate type found in #[crate_type] directive
unknown-features deny unknown features found in crate-level #[feature] directives
Lint checks provided by plugins loaded by this crate:
letter-e warn forbid use of the letter 'e'
or indicates that there aren't any:
$ echo 'fn main() { }' | rustc -W help -
...
Lint checks provided by rustc:
name default meaning
---- ------- -------
deprecated-owned-vector allow use of a `~[T]` vector
heap-memory allow use of any (Box type or @ type) heap memory
...
unknown-crate-type deny unknown crate type found in #[crate_type] directive
unknown-features deny unknown features found in crate-level #[feature] directives
This crate does not load any lint plugins.
Lint flags are checked as soon as possible:
$ rustc -Z time-passes -L . test.rs -A zzzz
time: 0.001 s parsing
time: 0.000 s gated feature checking
time: 0.000 s crate injection
time: 0.000 s configuration 1
time: 0.038 s plugin loading
time: 0.000 s plugin registration
error: unknown allow flag: zzzz
error: aborting due to previous error