about summary refs log tree commit diff
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2020-08-01 09:30:13 -0700
committerGitHub <noreply@github.com>2020-08-01 09:30:13 -0700
commite65d6ed80ff1b0f1f5bab3e210f8f2cd165d4f14 (patch)
tree50ab22b702bb3d01fd0f16ae7478ed4716c14c5b
parent60bf83d21531c09c7005adff681e32e186d40f4b (diff)
parent3e48848538a49c66e3447a46346b96e8dc972531 (diff)
downloadrust-e65d6ed80ff1b0f1f5bab3e210f8f2cd165d4f14.tar.gz
rust-e65d6ed80ff1b0f1f5bab3e210f8f2cd165d4f14.zip
Rollup merge of #74981 - giraffate:fix_sample_codes_in_unstable_book_plugin, r=GuilliameGomez
Some fixes for `plugin.md` in unstable-book

- sample codes not working
I referred to https://github.com/rust-lang/rust/blob/master/src/test/ui-fulldeps/auxiliary/lint-plugin-test.rs and https://github.com/rust-lang/rust/blob/master/src/test/ui-fulldeps/lint-plugin.rs.

- broken link
https://github.com/rust-lang/rust/blob/master/src/librustc/lint/builtin.rs -> https://github.com/rust-lang/rust/blob/master/src/librustc_session/lint/builtin.rs
-rw-r--r--src/doc/unstable-book/src/language-features/plugin.md30
1 files changed, 14 insertions, 16 deletions
diff --git a/src/doc/unstable-book/src/language-features/plugin.md b/src/doc/unstable-book/src/language-features/plugin.md
index 1f010656bb8..38351131527 100644
--- a/src/doc/unstable-book/src/language-features/plugin.md
+++ b/src/doc/unstable-book/src/language-features/plugin.md
@@ -45,42 +45,40 @@ that warns about any item named `lintme`.
 extern crate rustc_ast;
 
 // Load rustc as a plugin to get macros
-#[macro_use]
-extern crate rustc;
 extern crate rustc_driver;
+#[macro_use]
+extern crate rustc_lint;
+#[macro_use]
+extern crate rustc_session;
 
-use rustc::lint::{EarlyContext, LintContext, LintPass, EarlyLintPass,
-                  EarlyLintPassObject, LintArray};
 use rustc_driver::plugin::Registry;
+use rustc_lint::{EarlyContext, EarlyLintPass, LintArray, LintContext, LintPass};
 use rustc_ast::ast;
-
 declare_lint!(TEST_LINT, Warn, "Warn about items named 'lintme'");
 
-struct Pass;
-
-impl LintPass for Pass {
-    fn get_lints(&self) -> LintArray {
-        lint_array!(TEST_LINT)
-    }
-}
+declare_lint_pass!(Pass => [TEST_LINT]);
 
 impl EarlyLintPass for Pass {
     fn check_item(&mut self, cx: &EarlyContext, it: &ast::Item) {
-        if it.ident.as_str() == "lintme" {
-            cx.span_lint(TEST_LINT, it.span, "item is named 'lintme'");
+        if it.ident.name.as_str() == "lintme" {
+            cx.lint(TEST_LINT, |lint| {
+                lint.build("item is named 'lintme'").set_span(it.span).emit()
+            });
         }
     }
 }
 
 #[plugin_registrar]
 pub fn plugin_registrar(reg: &mut Registry) {
-    reg.register_early_lint_pass(box Pass as EarlyLintPassObject);
+    reg.lint_store.register_lints(&[&TEST_LINT]);
+    reg.lint_store.register_early_pass(|| box Pass);
 }
 ```
 
 Then code like
 
 ```rust,ignore
+#![feature(plugin)]
 #![plugin(lint_plugin_test)]
 
 fn lintme() { }
@@ -107,7 +105,7 @@ The components of a lint plugin are:
 
 Lint passes are syntax traversals, but they run at a late stage of compilation
 where type information is available. `rustc`'s [built-in
-lints](https://github.com/rust-lang/rust/blob/master/src/librustc/lint/builtin.rs)
+lints](https://github.com/rust-lang/rust/blob/master/src/librustc_session/lint/builtin.rs)
 mostly use the same infrastructure as lint plugins, and provide examples of how
 to access type information.