Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
faefc83a
R
Rust
项目概览
int
/
Rust
11 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
faefc83a
编写于
10月 20, 2018
作者:
V
Vadim Petrochenkov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Feature gate extern prelude additions from `extern crate` items
Fix rustdoc and fulldeps tests
上级
0f625ac4
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
143 addition
and
9 deletion
+143
-9
src/librustc_resolve/lib.rs
src/librustc_resolve/lib.rs
+10
-2
src/librustc_resolve/macros.rs
src/librustc_resolve/macros.rs
+2
-1
src/librustc_resolve/resolve_imports.rs
src/librustc_resolve/resolve_imports.rs
+9
-2
src/librustdoc/core.rs
src/librustdoc/core.rs
+3
-1
src/libsyntax/feature_gate.rs
src/libsyntax/feature_gate.rs
+3
-0
src/test/ui-fulldeps/proc-macro/extern-prelude-extern-crate-proc-macro.rs
...deps/proc-macro/extern-prelude-extern-crate-proc-macro.rs
+2
-0
src/test/ui-fulldeps/resolve-error.stderr
src/test/ui-fulldeps/resolve-error.stderr
+1
-1
src/test/ui/feature-gates/feature-gate-extern_crate_item_prelude.rs
...i/feature-gates/feature-gate-extern_crate_item_prelude.rs
+39
-0
src/test/ui/feature-gates/feature-gate-extern_crate_item_prelude.stderr
...ature-gates/feature-gate-extern_crate_item_prelude.stderr
+67
-0
src/test/ui/imports/extern-prelude-extern-crate-cfg.rs
src/test/ui/imports/extern-prelude-extern-crate-cfg.rs
+1
-0
src/test/ui/imports/extern-prelude-extern-crate-pass.rs
src/test/ui/imports/extern-prelude-extern-crate-pass.rs
+2
-0
src/test/ui/imports/extern-prelude-extern-crate-restricted-shadowing.rs
...ports/extern-prelude-extern-crate-restricted-shadowing.rs
+2
-0
src/test/ui/imports/extern-prelude-extern-crate-restricted-shadowing.stderr
...s/extern-prelude-extern-crate-restricted-shadowing.stderr
+2
-2
未找到文件。
src/librustc_resolve/lib.rs
浏览文件 @
faefc83a
...
...
@@ -58,6 +58,7 @@
use
syntax
::
ext
::
base
::
SyntaxExtension
;
use
syntax
::
ext
::
base
::
Determinacy
::{
self
,
Determined
,
Undetermined
};
use
syntax
::
ext
::
base
::
MacroKind
;
use
syntax
::
feature_gate
::{
emit_feature_err
,
GateIssue
};
use
syntax
::
symbol
::{
Symbol
,
keywords
};
use
syntax
::
util
::
lev_distance
::
find_best_match_for_name
;
...
...
@@ -1971,7 +1972,7 @@ fn resolve_ident_in_lexical_scope(&mut self,
if
!
module
.no_implicit_prelude
{
if
ns
==
TypeNS
{
if
let
Some
(
binding
)
=
self
.extern_prelude_get
(
ident
,
!
record_used
)
{
if
let
Some
(
binding
)
=
self
.extern_prelude_get
(
ident
,
!
record_used
,
false
)
{
return
Some
(
LexicalScopeBinding
::
Item
(
binding
));
}
}
...
...
@@ -4820,10 +4821,17 @@ fn report_conflict<'b>(&mut self,
self
.name_already_seen
.insert
(
name
,
span
);
}
fn
extern_prelude_get
(
&
mut
self
,
ident
:
Ident
,
speculative
:
bool
)
fn
extern_prelude_get
(
&
mut
self
,
ident
:
Ident
,
speculative
:
bool
,
skip_feature_gate
:
bool
)
->
Option
<&
'a
NameBinding
<
'a
>>
{
self
.extern_prelude
.get
(
&
ident
.modern
())
.cloned
()
.and_then
(|
entry
|
{
if
let
Some
(
binding
)
=
entry
.extern_crate_item
{
if
!
speculative
&&
!
skip_feature_gate
&&
entry
.introduced_by_item
&&
!
self
.session
.features_untracked
()
.extern_crate_item_prelude
{
emit_feature_err
(
&
self
.session.parse_sess
,
"extern_crate_item_prelude"
,
ident
.span
,
GateIssue
::
Language
,
"use of extern prelude names introduced
\
with `extern crate` items is unstable"
);
}
Some
(
binding
)
}
else
{
let
crate_id
=
if
!
speculative
{
...
...
src/librustc_resolve/macros.rs
浏览文件 @
faefc83a
...
...
@@ -693,7 +693,8 @@ struct Flags: u8 {
WhereToResolve
::
ExternPrelude
=>
{
let
mut
result
=
Err
(
Determinacy
::
Determined
);
if
use_prelude
{
if
let
Some
(
binding
)
=
self
.extern_prelude_get
(
ident
,
!
record_used
)
{
if
let
Some
(
binding
)
=
self
.extern_prelude_get
(
ident
,
!
record_used
,
innermost_result
.is_some
())
{
result
=
Ok
((
binding
,
Flags
::
PRELUDE
,
Flags
::
empty
()));
}
}
...
...
src/librustc_resolve/resolve_imports.rs
浏览文件 @
faefc83a
...
...
@@ -222,7 +222,7 @@ pub fn resolve_ident_in_module_unadjusted(&mut self,
ns
==
TypeNS
&&
!
ident
.is_path_segment_keyword
()
{
if
let
Some
(
binding
)
=
self
.extern_prelude_get
(
ident
,
!
record_used
)
{
if
let
Some
(
binding
)
=
self
.extern_prelude_get
(
ident
,
!
record_used
,
false
)
{
let
module
=
self
.get_module
(
binding
.def
()
.def_id
());
self
.populate_module_if_necessary
(
module
);
return
Ok
(
binding
);
...
...
@@ -742,7 +742,7 @@ struct UniformPathsCanaryResults<'a> {
for
((
span
,
_
,
ns
),
results
)
in
uniform_paths_canaries
{
let
name
=
results
.name
;
let
external_crate
=
if
ns
==
TypeNS
{
self
.extern_prelude_get
(
Ident
::
with_empty_ctxt
(
name
),
true
)
self
.extern_prelude_get
(
Ident
::
with_empty_ctxt
(
name
),
true
,
false
)
.map
(|
binding
|
binding
.def
())
}
else
{
None
...
...
@@ -1023,6 +1023,13 @@ fn finalize_import(&mut self, directive: &'b ImportDirective<'b>) -> Option<(Spa
Some
(
this
.dummy_binding
);
}
}
if
record_used
&&
ns
==
TypeNS
{
if
let
ModuleOrUniformRoot
::
UniformRoot
(
..
)
=
module
{
// Make sure single-segment import is resolved non-speculatively
// at least once to report the feature error.
this
.extern_prelude_get
(
ident
,
false
,
false
);
}
}
}
});
...
...
src/librustdoc/core.rs
浏览文件 @
faefc83a
...
...
@@ -476,7 +476,9 @@ pub fn run_core(search_paths: SearchPaths,
trait_map
:
resolver
.trait_map
.clone
(),
maybe_unused_trait_imports
:
resolver
.maybe_unused_trait_imports
.clone
(),
maybe_unused_extern_crates
:
resolver
.maybe_unused_extern_crates
.clone
(),
extern_prelude
:
resolver
.extern_prelude
.clone
(),
extern_prelude
:
resolver
.extern_prelude
.iter
()
.map
(|(
ident
,
entry
)|
{
(
ident
.name
,
entry
.introduced_by_item
)
})
.collect
(),
};
let
analysis
=
ty
::
CrateAnalysis
{
access_levels
:
Lrc
::
new
(
AccessLevels
::
default
()),
...
...
src/libsyntax/feature_gate.rs
浏览文件 @
faefc83a
...
...
@@ -501,6 +501,9 @@ pub fn walk_feature_fields<F>(&self, mut f: F)
// Allows `const _: TYPE = VALUE`
(
active
,
underscore_const_names
,
"1.31.0"
,
Some
(
54912
),
None
),
// `extern crate foo as bar;` puts `bar` into extern prelude.
(
active
,
extern_crate_item_prelude
,
"1.31.0"
,
Some
(
54658
),
None
),
);
declare_features!
(
...
...
src/test/ui-fulldeps/proc-macro/extern-prelude-extern-crate-proc-macro.rs
浏览文件 @
faefc83a
// compile-pass
// edition:2018
#![feature(extern_crate_item_prelude)]
extern
crate
proc_macro
;
use
proc_macro
::
TokenStream
;
// OK
...
...
src/test/ui-fulldeps/resolve-error.stderr
浏览文件 @
faefc83a
...
...
@@ -20,7 +20,7 @@ error: cannot find derive macro `attr_proc_macra` in this scope
--> $DIR/resolve-error.rs:54:10
|
LL | #[derive(attr_proc_macra)]
| ^^^^^^^^^^^^^^^
| ^^^^^^^^^^^^^^^
help: try: `attr_proc_macro`
error: cannot find macro `FooWithLongNama!` in this scope
--> $DIR/resolve-error.rs:59:5
...
...
src/test/ui/feature-gates/feature-gate-extern_crate_item_prelude.rs
0 → 100644
浏览文件 @
faefc83a
// edition:2018
#![feature(alloc)]
extern
crate
alloc
;
mod
in_scope
{
fn
check
()
{
let
v
=
alloc
::
vec!
[
0
];
//~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
type
A
=
alloc
::
boxed
::
Box
<
u8
>
;
//~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
}
}
mod
absolute
{
fn
check
()
{
let
v
=
::
alloc
::
vec!
[
0
];
//~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
type
A
=
::
alloc
::
boxed
::
Box
<
u8
>
;
//~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
}
}
mod
import_in_scope
{
use
alloc
;
//~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
use
alloc
::
boxed
;
//~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
}
mod
import_absolute
{
use
::
alloc
;
//~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
use
::
alloc
::
boxed
;
//~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
}
fn
main
()
{}
src/test/ui/feature-gates/feature-gate-extern_crate_item_prelude.stderr
0 → 100644
浏览文件 @
faefc83a
error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #54658)
--> $DIR/feature-gate-extern_crate_item_prelude.rs:26:9
|
LL | use alloc;
| ^^^^^
|
= help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #54658)
--> $DIR/feature-gate-extern_crate_item_prelude.rs:28:9
|
LL | use alloc::boxed;
| ^^^^^
|
= help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #54658)
--> $DIR/feature-gate-extern_crate_item_prelude.rs:33:11
|
LL | use ::alloc;
| ^^^^^
|
= help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #54658)
--> $DIR/feature-gate-extern_crate_item_prelude.rs:35:11
|
LL | use ::alloc::boxed;
| ^^^^^
|
= help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #54658)
--> $DIR/feature-gate-extern_crate_item_prelude.rs:9:17
|
LL | let v = alloc::vec![0];
| ^^^^^
|
= help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #54658)
--> $DIR/feature-gate-extern_crate_item_prelude.rs:11:18
|
LL | type A = alloc::boxed::Box<u8>;
| ^^^^^
|
= help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #54658)
--> $DIR/feature-gate-extern_crate_item_prelude.rs:18:19
|
LL | let v = ::alloc::vec![0];
| ^^^^^
|
= help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #54658)
--> $DIR/feature-gate-extern_crate_item_prelude.rs:20:20
|
LL | type A = ::alloc::boxed::Box<u8>;
| ^^^^^
|
= help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
error: aborting due to 8 previous errors
For more information about this error, try `rustc --explain E0658`.
src/test/ui/imports/extern-prelude-extern-crate-cfg.rs
浏览文件 @
faefc83a
// compile-pass
// compile-flags:--cfg my_feature
#![feature(extern_crate_item_prelude)]
#![no_std]
#[cfg(my_feature)]
...
...
src/test/ui/imports/extern-prelude-extern-crate-pass.rs
浏览文件 @
faefc83a
// compile-pass
// aux-build:two_macros.rs
#![feature(extern_crate_item_prelude)]
extern
crate
two_macros
;
mod
m
{
...
...
src/test/ui/imports/extern-prelude-extern-crate-restricted-shadowing.rs
浏览文件 @
faefc83a
// aux-build:two_macros.rs
#![feature(extern_crate_item_prelude)]
macro_rules!
define_vec
{
()
=>
{
extern
crate
std
as
Vec
;
...
...
src/test/ui/imports/extern-prelude-extern-crate-restricted-shadowing.stderr
浏览文件 @
faefc83a
error[E0659]: `Vec` is ambiguous
--> $DIR/extern-prelude-extern-crate-restricted-shadowing.rs:1
3
:9
--> $DIR/extern-prelude-extern-crate-restricted-shadowing.rs:1
5
:9
|
LL | Vec::panic!(); //~ ERROR `Vec` is ambiguous
| ^^^ ambiguous name
|
note: `Vec` could refer to the name defined here
--> $DIR/extern-prelude-extern-crate-restricted-shadowing.rs:
5
:9
--> $DIR/extern-prelude-extern-crate-restricted-shadowing.rs:
7
:9
|
LL | extern crate std as Vec;
| ^^^^^^^^^^^^^^^^^^^^^^^^
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录