Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
86f5275e
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,发现更多精彩内容 >>
提交
86f5275e
编写于
12月 11, 2015
作者:
G
Guillaume Gomez
提交者:
Felix S. Klock II
12月 16, 2015
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add note when item accessed from module via `m.i` rather than `m::i`.
上级
ce132752
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
64 addition
and
5 deletion
+64
-5
src/librustc_resolve/lib.rs
src/librustc_resolve/lib.rs
+64
-5
未找到文件。
src/librustc_resolve/lib.rs
浏览文件 @
86f5275e
...
...
@@ -179,7 +179,7 @@ pub enum ResolutionError<'a> {
/// error E0424: `self` is not available in a static method
SelfNotAvailableInStaticMethod
,
/// error E0425: unresolved name
UnresolvedName
(
&
'a
str
,
&
'a
str
),
UnresolvedName
(
&
'a
str
,
&
'a
str
,
UnresolvedNameContext
),
/// error E0426: use of undeclared label
UndeclaredLabel
(
&
'a
str
),
/// error E0427: cannot use `ref` binding mode with ...
...
...
@@ -202,6 +202,12 @@ pub enum ResolutionError<'a> {
AttemptToUseNonConstantValueInConstant
,
}
#[derive(Clone,
PartialEq,
Eq,
Debug)]
pub
enum
UnresolvedNameContext
{
PathIsMod
(
ast
::
NodeId
),
Other
,
}
fn
resolve_error
<
'b
,
'a
:
'b
,
'tcx
:
'a
>
(
resolver
:
&
'b
Resolver
<
'a
,
'tcx
>
,
span
:
syntax
::
codemap
::
Span
,
resolution_error
:
ResolutionError
<
'b
>
)
{
...
...
@@ -402,13 +408,46 @@ fn resolve_error<'b, 'a: 'b, 'tcx: 'a>(resolver: &'b Resolver<'a, 'tcx>,
"`self` is not available in a static method. Maybe a `self` argument is
\
missing?"
);
}
ResolutionError
::
UnresolvedName
(
path
,
name
)
=>
{
ResolutionError
::
UnresolvedName
(
path
,
msg
,
context
)
=>
{
span_err!
(
resolver
.session
,
span
,
E0425
,
"unresolved name `{}`{}"
,
path
,
name
);
msg
);
match
context
{
UnresolvedNameContext
::
Other
=>
{}
// no help available
UnresolvedNameContext
::
PathIsMod
(
id
)
=>
{
let
mut
help_msg
=
String
::
new
();
let
parent_id
=
resolver
.ast_map
.get_parent_node
(
id
);
if
let
Some
(
hir_map
::
Node
::
NodeExpr
(
e
))
=
resolver
.ast_map
.find
(
parent_id
)
{
match
e
.node
{
ExprField
(
_
,
ident
)
=>
{
help_msg
=
format!
(
"To reference an item from the
\
`{module}` module, use
\
`{module}::{ident}`"
,
module
=
&*
path
,
ident
=
ident
.node
);
}
ExprMethodCall
(
ident
,
_
,
_
)
=>
{
help_msg
=
format!
(
"To call a function from the
\
`{module}` module, use
\
`{module}::{ident}(..)`"
,
module
=
&*
path
,
ident
=
ident
.node
);
}
_
=>
{}
// no help available
}
}
if
!
help_msg
.is_empty
()
{
resolver
.session
.fileline_help
(
span
,
&
help_msg
);
}
}
}
}
ResolutionError
::
UndeclaredLabel
(
name
)
=>
{
span_err!
(
resolver
.session
,
...
...
@@ -3509,13 +3548,33 @@ fn resolve_expr(&mut self, expr: &Expr) {
format!
(
"to call `{}::{}`"
,
path_str
,
path_name
),
};
let
mut
context
=
UnresolvedNameContext
::
Other
;
if
!
msg
.is_empty
()
{
msg
=
format!
(
". Did you mean {}?"
,
msg
)
msg
=
format!
(
". Did you mean {}?"
,
msg
);
}
else
{
// we check if this a module and if so, we display a help
// message
let
name_path
=
path
.segments
.iter
()
.map
(|
seg
|
seg
.identifier.name
)
.collect
::
<
Vec
<
_
>>
();
let
current_module
=
self
.current_module
.clone
();
match
self
.resolve_module_path
(
current_module
,
&
name_path
[
..
],
UseLexicalScope
,
expr
.span
,
PathSearch
)
{
Success
(
_
)
=>
{
context
=
UnresolvedNameContext
::
PathIsMod
(
expr
.id
);
},
_
=>
{},
};
}
resolve_error
(
self
,
expr
.span
,
ResolutionError
::
UnresolvedName
(
&*
path_name
,
&*
msg
));
ResolutionError
::
UnresolvedName
(
&*
path_name
,
&*
msg
,
context
));
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录