Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
8c4a39cd
R
Rust
项目概览
int
/
Rust
接近 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8c4a39cd
编写于
10月 18, 2016
作者:
N
Nick Cameron
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
review changes
上级
93223321
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
60 addition
and
17 deletion
+60
-17
src/librustc_lint/builtin.rs
src/librustc_lint/builtin.rs
+22
-7
src/librustc_lint/lib.rs
src/librustc_lint/lib.rs
+13
-1
src/libsyntax/feature_gate.rs
src/libsyntax/feature_gate.rs
+23
-8
src/libsyntax/lib.rs
src/libsyntax/lib.rs
+1
-0
src/test/compile-fail/feature-gate-no-debug-2.rs
src/test/compile-fail/feature-gate-no-debug-2.rs
+1
-1
未找到文件。
src/librustc_lint/builtin.rs
浏览文件 @
8c4a39cd
...
...
@@ -43,8 +43,9 @@
use
std
::
collections
::
HashSet
;
use
syntax
::
{
ast
,
feature_gate
}
;
use
syntax
::
ast
;
use
syntax
::
attr
;
use
syntax
::
feature_gate
::{
AttributeGate
,
AttributeType
,
Stability
,
deprecated_attributes
};
use
syntax_pos
::
Span
;
use
rustc
::
hir
::{
self
,
PatKind
};
...
...
@@ -749,7 +750,19 @@ fn check_foreign_item_post(&mut self, cx: &LateContext, item: &hir::ForeignItem)
/// Checks for use of attributes which have been deprecated.
#[derive(Clone)]
pub
struct
DeprecatedAttr
;
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
{
...
...
@@ -760,14 +773,16 @@ fn get_lints(&self) -> LintArray {
impl
EarlyLintPass
for
DeprecatedAttr
{
fn
check_attribute
(
&
mut
self
,
cx
:
&
EarlyContext
,
attr
:
&
ast
::
Attribute
)
{
let
name
=
&*
attr
.name
();
for
&
(
n
,
_
,
ref
g
)
in
feature_gate
::
KNOWN_ATTRIBUTES
{
for
&
&
(
n
,
_
,
ref
g
)
in
&
self
.depr_attrs
{
if
n
==
name
{
if
let
&
feature_gate
::
AttributeGate
::
Gated
(
feature_gate
::
Stability
::
Deprecated
,
ref
name
,
..
)
=
g
{
if
let
&
AttributeGate
::
Gated
(
Stability
::
Deprecated
(
link
),
ref
name
,
ref
reason
,
_
)
=
g
{
cx
.span_lint
(
DEPRECATED
,
attr
.span
,
&
format!
(
"use of deprecated attribute: {}"
,
name
));
&
format!
(
"use of deprecated attribute `{}`: {}. See {}"
,
name
,
reason
,
link
));
}
return
;
}
...
...
src/librustc_lint/lib.rs
浏览文件 @
8c4a39cd
...
...
@@ -37,6 +37,7 @@
#![feature(rustc_private)]
#![feature(slice_patterns)]
#![feature(staged_api)]
#![feature(dotdot_in_tuple_patterns)]
#[macro_use]
extern
crate
syntax
;
...
...
@@ -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
{
(
$sess:ident
,
$name:expr
,
$
(
$lint:ident
),
*
)
=>
(
store
.register_group
(
$sess
,
false
,
$name
,
vec!
[
$
(
LintId
::
of
(
$lint
)),
*
]);
...
...
@@ -103,9 +112,12 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) {
add_early_builtin!
(
sess
,
UnusedParens
,
DeprecatedAttr
,
);
add_early_builtin_with_new!
(
sess
,
DeprecatedAttr
,
);
add_builtin!
(
sess
,
HardwiredLints
,
WhileTrue
,
...
...
src/libsyntax/feature_gate.rs
浏览文件 @
8c4a39cd
...
...
@@ -377,17 +377,28 @@ pub enum AttributeGate {
Ungated
,
}
#[derive(Copy,
Clone,
PartialEq,
Eq)]
impl
AttributeGate
{
fn
is_deprecated
(
&
self
)
->
bool
{
match
*
self
{
Gated
(
Stability
::
Deprecated
(
_
),
..
)
=>
true
,
_
=>
false
,
}
}
}
#[derive(Copy,
Clone,
PartialEq,
Eq,
Debug)]
pub
enum
Stability
{
Unstable
,
Deprecated
,
// Argument is tracking issue link.
Deprecated
(
&
'static
str
),
}
// fn() is not Debug
impl
::
std
::
fmt
::
Debug
for
AttributeGate
{
fn
fmt
(
&
self
,
fmt
:
&
mut
::
std
::
fmt
::
Formatter
)
->
::
std
::
fmt
::
Result
{
match
*
self
{
Gated
(
_
,
ref
name
,
ref
expl
,
_
)
=>
write!
(
fmt
,
"Gated({}, {})"
,
name
,
expl
),
Gated
(
ref
stab
,
ref
name
,
ref
expl
,
_
)
=>
write!
(
fmt
,
"Gated({:?}, {}, {})"
,
stab
,
name
,
expl
),
Ungated
=>
write!
(
fmt
,
"Ungated"
)
}
}
...
...
@@ -402,6 +413,10 @@ fn f(features: &Features) -> bool {
}}
}
pub
fn
deprecated_attributes
()
->
Vec
<&
'static
(
&
'static
str
,
AttributeType
,
AttributeGate
)
>
{
KNOWN_ATTRIBUTES
.iter
()
.filter
(|
a
|
a
.2
.is_deprecated
())
.collect
()
}
// Attributes that have a special meaning to rustc or rustdoc
pub
const
KNOWN_ATTRIBUTES
:
&
'static
[(
&
'static
str
,
AttributeType
,
AttributeGate
)]
=
&
[
// Normal attributes
...
...
@@ -643,11 +658,11 @@ fn f(features: &Features) -> bool {
(
"link_section"
,
Whitelisted
,
Ungated
),
(
"no_builtins"
,
Whitelisted
,
Ungated
),
(
"no_mangle"
,
Whitelisted
,
Ungated
),
(
"no_debug"
,
Whitelisted
,
Gated
(
Stability
::
Deprecated
,
"no_debug"
,
"the `#[no_debug]` attribute
\
is an experimental feature"
,
cfg_fn!
(
no_debug
))),
(
"no_debug"
,
Whitelisted
,
Gated
(
Stability
::
Deprecated
(
"https://github.com/rust-lang/rust/issues/29721"
)
,
"no_debug"
,
"the `#[no_debug]` attribute
is an experimental feature"
,
cfg_fn!
(
no_debug
))),
(
"omit_gdb_pretty_printer_section"
,
Whitelisted
,
Gated
(
Stability
::
Unstable
,
"omit_gdb_pretty_printer_section"
,
"the `#[omit_gdb_pretty_printer_section]`
\
...
...
src/libsyntax/lib.rs
浏览文件 @
8c4a39cd
...
...
@@ -34,6 +34,7 @@
#![cfg_attr(stage0,
feature(question_mark))]
#![feature(rustc_diagnostic_macros)]
#![feature(specialization)]
#![feature(dotdot_in_tuple_patterns)]
extern
crate
serialize
;
extern
crate
term
;
...
...
src/test/compile-fail/feature-gate-no-debug-2.rs
浏览文件 @
8c4a39cd
...
...
@@ -11,5 +11,5 @@
#![deny(deprecated)]
#![feature(no_debug)]
#[no_debug]
//~ ERROR use of deprecated attribute
: 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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录