1
Fork 0

Update lint plugin example in book to work with recent master

This commit is contained in:
Florian Hahn 2015-10-15 23:53:05 +02:00
parent be3d390cf5
commit ac097f1a5e

View file

@ -170,13 +170,25 @@ starting point for an improved quasiquote as an ordinary plugin library.
Plugins can extend [Rust's lint Plugins can extend [Rust's lint
infrastructure](../reference.html#lint-check-attributes) with additional checks for infrastructure](../reference.html#lint-check-attributes) with additional checks for
code style, safety, etc. You can see code style, safety, etc. Now let's write a plugin [`lint_plugin_test.rs`](https://github.com/rust-lang/rust/blob/master/src/test/auxiliary/lint_plugin_test.rs)
[`src/test/auxiliary/lint_plugin_test.rs`](https://github.com/rust-lang/rust/blob/master/src/test/auxiliary/lint_plugin_test.rs) that warns about any item named `lintme`.
for a full example, the core of which is reproduced here:
```ignore ```ignore
declare_lint!(TEST_LINT, Warn, #![feature(plugin_registrar)]
"Warn about items named 'lintme'"); #![feature(box_syntax, rustc_private)]
extern crate syntax;
// Load rustc as a plugin to get macros
#[macro_use]
extern crate rustc;
use rustc::lint::{EarlyContext, LintContext, LintPass, EarlyLintPass,
EarlyLintPassObject, LintArray};
use rustc::plugin::Registry;
use syntax::ast;
declare_lint!(TEST_LINT, Warn, "Warn about items named 'lintme'");
struct Pass; struct Pass;
@ -184,9 +196,11 @@ impl LintPass for Pass {
fn get_lints(&self) -> LintArray { fn get_lints(&self) -> LintArray {
lint_array!(TEST_LINT) lint_array!(TEST_LINT)
} }
}
fn check_item(&mut self, cx: &Context, it: &ast::Item) { impl EarlyLintPass for Pass {
if it.ident.name == "lintme" { fn check_item(&mut self, cx: &EarlyContext, it: &ast::Item) {
if it.ident.name.as_str() == "lintme" {
cx.span_lint(TEST_LINT, it.span, "item is named 'lintme'"); cx.span_lint(TEST_LINT, it.span, "item is named 'lintme'");
} }
} }
@ -194,7 +208,7 @@ impl LintPass for Pass {
#[plugin_registrar] #[plugin_registrar]
pub fn plugin_registrar(reg: &mut Registry) { pub fn plugin_registrar(reg: &mut Registry) {
reg.register_lint_pass(box Pass as LintPassObject); reg.register_early_lint_pass(box Pass as EarlyLintPassObject);
} }
``` ```