提交 46d39f33 编写于 作者: B bors 提交者: GitHub

Auto merge of #37128 - nrc:depr-attr, r=@alexcrichton

Deprecate no_debug and custom_derive

r? @nikomatsakis
...@@ -314,5 +314,4 @@ pub enum LintSource { ...@@ -314,5 +314,4 @@ pub enum LintSource {
pub type LevelSource = (Level, LintSource); pub type LevelSource = (Level, LintSource);
pub mod builtin; pub mod builtin;
mod context; mod context;
...@@ -39,12 +39,13 @@ ...@@ -39,12 +39,13 @@
use rustc::hir::map as hir_map; use rustc::hir::map as hir_map;
use util::nodemap::NodeSet; use util::nodemap::NodeSet;
use lint::{Level, LateContext, LintContext, LintArray, Lint}; use lint::{Level, LateContext, LintContext, LintArray, Lint};
use lint::{LintPass, LateLintPass}; use lint::{LintPass, LateLintPass, EarlyLintPass, EarlyContext};
use std::collections::HashSet; use std::collections::HashSet;
use syntax::ast; use syntax::ast;
use syntax::attr; use syntax::attr;
use syntax::feature_gate::{AttributeGate, AttributeType, Stability, deprecated_attributes};
use syntax_pos::Span; use syntax_pos::Span;
use rustc::hir::{self, PatKind}; use rustc::hir::{self, PatKind};
...@@ -741,6 +742,54 @@ fn check_foreign_item_post(&mut self, cx: &LateContext, item: &hir::ForeignItem) ...@@ -741,6 +742,54 @@ fn check_foreign_item_post(&mut self, cx: &LateContext, item: &hir::ForeignItem)
} }
} }
declare_lint! {
DEPRECATED_ATTR,
Warn,
"detects use of deprecated attributes"
}
/// Checks for use of attributes which have been deprecated.
#[derive(Clone)]
pub struct DeprecatedAttr {
// This is not free to compute, so we want to keep it around, rather than
// compute it for every attribute.
depr_attrs: Vec<&'static (&'static str, AttributeType, AttributeGate)>,
}
impl DeprecatedAttr {
pub fn new() -> DeprecatedAttr {
DeprecatedAttr {
depr_attrs: deprecated_attributes(),
}
}
}
impl LintPass for DeprecatedAttr {
fn get_lints(&self) -> LintArray {
lint_array!(DEPRECATED_ATTR)
}
}
impl EarlyLintPass for DeprecatedAttr {
fn check_attribute(&mut self, cx: &EarlyContext, attr: &ast::Attribute) {
let name = &*attr.name();
for &&(n, _, ref g) in &self.depr_attrs {
if n == name {
if let &AttributeGate::Gated(Stability::Deprecated(link),
ref name,
ref reason,
_) = g {
cx.span_lint(DEPRECATED,
attr.span,
&format!("use of deprecated attribute `{}`: {}. See {}",
name, reason, link));
}
return;
}
}
}
}
declare_lint! { declare_lint! {
pub UNCONDITIONAL_RECURSION, pub UNCONDITIONAL_RECURSION,
Warn, Warn,
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#![feature(rustc_private)] #![feature(rustc_private)]
#![feature(slice_patterns)] #![feature(slice_patterns)]
#![feature(staged_api)] #![feature(staged_api)]
#![feature(dotdot_in_tuple_patterns)]
#[macro_use] #[macro_use]
extern crate syntax; extern crate syntax;
...@@ -95,6 +96,14 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) { ...@@ -95,6 +96,14 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) {
) )
} }
macro_rules! add_early_builtin_with_new {
($sess:ident, $($name:ident),*,) => (
{$(
store.register_early_pass($sess, false, box $name::new());
)*}
)
}
macro_rules! add_lint_group { macro_rules! add_lint_group {
($sess:ident, $name:expr, $($lint:ident),*) => ( ($sess:ident, $name:expr, $($lint:ident),*) => (
store.register_group($sess, false, $name, vec![$(LintId::of($lint)),*]); store.register_group($sess, false, $name, vec![$(LintId::of($lint)),*]);
...@@ -105,6 +114,10 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) { ...@@ -105,6 +114,10 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) {
UnusedParens, UnusedParens,
); );
add_early_builtin_with_new!(sess,
DeprecatedAttr,
);
add_builtin!(sess, add_builtin!(sess,
HardwiredLints, HardwiredLints,
WhileTrue, WhileTrue,
......
此差异已折叠。
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#![cfg_attr(stage0, feature(question_mark))] #![cfg_attr(stage0, feature(question_mark))]
#![feature(rustc_diagnostic_macros)] #![feature(rustc_diagnostic_macros)]
#![feature(specialization)] #![feature(specialization)]
#![feature(dotdot_in_tuple_patterns)]
extern crate serialize; extern crate serialize;
extern crate term; extern crate term;
......
...@@ -175,6 +175,7 @@ pub fn expand_derive(cx: &mut ExtCtxt, ...@@ -175,6 +175,7 @@ pub fn expand_derive(cx: &mut ExtCtxt,
feature_gate::GateIssue::Language, feature_gate::GateIssue::Language,
feature_gate::EXPLAIN_CUSTOM_DERIVE); feature_gate::EXPLAIN_CUSTOM_DERIVE);
} else { } else {
cx.span_warn(titem.span, feature_gate::EXPLAIN_DEPR_CUSTOM_DERIVE);
let name = intern_and_get_ident(&format!("derive_{}", tname)); let name = intern_and_get_ident(&format!("derive_{}", tname));
let mitem = cx.meta_word(titem.span, name); let mitem = cx.meta_word(titem.span, name);
new_attributes.push(cx.attribute(mitem.span, mitem)); new_attributes.push(cx.attribute(mitem.span, mitem));
......
...@@ -8,8 +8,10 @@ ...@@ -8,8 +8,10 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
// ignore-tidy-linelength
#[derive(Eqr)] #[derive(Eqr)]
//~^ ERROR `#[derive]` for custom traits is not stable enough for use and is subject to change //~^ ERROR `#[derive]` for custom traits is not stable enough for use. It is deprecated and will be removed in v1.15 (see issue #29644)
struct Foo; struct Foo;
pub fn main() {} pub fn main() {}
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![deny(deprecated)]
#![feature(no_debug)]
#[no_debug] //~ ERROR use of deprecated attribute `no_debug`
fn main() {}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册