Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
24544083
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,发现更多精彩内容 >>
提交
24544083
编写于
1月 18, 2021
作者:
C
Cameron Steffen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove qpath_res util function
上级
9009f8f0
变更
14
隐藏空白更改
内联
并排
Showing
14 changed file
with
45 addition
and
58 deletion
+45
-58
clippy_lints/src/default.rs
clippy_lints/src/default.rs
+2
-2
clippy_lints/src/drop_forget_ref.rs
clippy_lints/src/drop_forget_ref.rs
+2
-2
clippy_lints/src/exit.rs
clippy_lints/src/exit.rs
+2
-2
clippy_lints/src/functions.rs
clippy_lints/src/functions.rs
+4
-4
clippy_lints/src/let_if_seq.rs
clippy_lints/src/let_if_seq.rs
+2
-2
clippy_lints/src/loops.rs
clippy_lints/src/loops.rs
+11
-11
clippy_lints/src/manual_strip.rs
clippy_lints/src/manual_strip.rs
+4
-4
clippy_lints/src/mem_forget.rs
clippy_lints/src/mem_forget.rs
+2
-2
clippy_lints/src/no_effect.rs
clippy_lints/src/no_effect.rs
+3
-3
clippy_lints/src/non_copy_const.rs
clippy_lints/src/non_copy_const.rs
+2
-2
clippy_lints/src/to_string_in_display.rs
clippy_lints/src/to_string_in_display.rs
+2
-2
clippy_lints/src/types.rs
clippy_lints/src/types.rs
+6
-6
clippy_lints/src/utils/internal_lints.rs
clippy_lints/src/utils/internal_lints.rs
+3
-3
clippy_lints/src/utils/mod.rs
clippy_lints/src/utils/mod.rs
+0
-13
未找到文件。
clippy_lints/src/default.rs
浏览文件 @
24544083
use
crate
::
utils
::{
any_parent_is_automatically_derived
,
contains_name
,
match_def_path
,
paths
,
qpath_res
,
snippet_with_macro_callsite
,
any_parent_is_automatically_derived
,
contains_name
,
match_def_path
,
paths
,
snippet_with_macro_callsite
,
};
use
crate
::
utils
::{
span_lint_and_note
,
span_lint_and_sugg
};
use
if_chain
::
if_chain
;
...
...
@@ -231,7 +231,7 @@ fn is_expr_default<'tcx>(expr: &'tcx Expr<'tcx>, cx: &LateContext<'tcx>) -> bool
if_chain!
{
if
let
ExprKind
::
Call
(
ref
fn_expr
,
_
)
=
&
expr
.kind
;
if
let
ExprKind
::
Path
(
qpath
)
=
&
fn_expr
.kind
;
if
let
Res
::
Def
(
_
,
def_id
)
=
qpath_res
(
cx
,
qpath
,
fn_expr
.hir_id
);
if
let
Res
::
Def
(
_
,
def_id
)
=
cx
.qpath_res
(
qpath
,
fn_expr
.hir_id
);
then
{
// right hand side of assignment is `Default::default`
match_def_path
(
cx
,
def_id
,
&
paths
::
DEFAULT_TRAIT_METHOD
)
...
...
clippy_lints/src/drop_forget_ref.rs
浏览文件 @
24544083
use
crate
::
utils
::{
is_copy
,
match_def_path
,
paths
,
qpath_res
,
span_lint_and_note
};
use
crate
::
utils
::{
is_copy
,
match_def_path
,
paths
,
span_lint_and_note
};
use
if_chain
::
if_chain
;
use
rustc_hir
::{
Expr
,
ExprKind
};
use
rustc_lint
::{
LateContext
,
LateLintPass
};
...
...
@@ -114,7 +114,7 @@ fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
if
let
ExprKind
::
Call
(
ref
path
,
ref
args
)
=
expr
.kind
;
if
let
ExprKind
::
Path
(
ref
qpath
)
=
path
.kind
;
if
args
.len
()
==
1
;
if
let
Some
(
def_id
)
=
qpath_res
(
cx
,
qpath
,
path
.hir_id
)
.opt_def_id
();
if
let
Some
(
def_id
)
=
cx
.qpath_res
(
qpath
,
path
.hir_id
)
.opt_def_id
();
then
{
let
lint
;
let
msg
;
...
...
clippy_lints/src/exit.rs
浏览文件 @
24544083
use
crate
::
utils
::{
is_entrypoint_fn
,
match_def_path
,
paths
,
qpath_res
,
span_lint
};
use
crate
::
utils
::{
is_entrypoint_fn
,
match_def_path
,
paths
,
span_lint
};
use
if_chain
::
if_chain
;
use
rustc_hir
::{
Expr
,
ExprKind
,
Item
,
ItemKind
,
Node
};
use
rustc_lint
::{
LateContext
,
LateLintPass
};
...
...
@@ -29,7 +29,7 @@ fn check_expr(&mut self, cx: &LateContext<'tcx>, e: &'tcx Expr<'_>) {
if_chain!
{
if
let
ExprKind
::
Call
(
ref
path_expr
,
ref
_
args
)
=
e
.kind
;
if
let
ExprKind
::
Path
(
ref
path
)
=
path_expr
.kind
;
if
let
Some
(
def_id
)
=
qpath_res
(
cx
,
path
,
path_expr
.hir_id
)
.opt_def_id
();
if
let
Some
(
def_id
)
=
cx
.qpath_res
(
path
,
path_expr
.hir_id
)
.opt_def_id
();
if
match_def_path
(
cx
,
def_id
,
&
paths
::
EXIT
);
then
{
let
parent
=
cx
.tcx
.hir
()
.get_parent_item
(
e
.hir_id
);
...
...
clippy_lints/src/functions.rs
浏览文件 @
24544083
use
crate
::
utils
::{
attr_by_name
,
attrs
::
is_proc_macro
,
is_must_use_ty
,
is_trait_impl_item
,
is_type_diagnostic_item
,
iter_input_pats
,
last_path_segment
,
match_def_path
,
must_use_attr
,
qpath_res
,
return_ty
,
snippet
,
snippet_opt
,
span_lint
,
span_lint_and_
help
,
span_lint_and_
then
,
trait_ref_of_method
,
type_is_unsafe_function
,
last_path_segment
,
match_def_path
,
must_use_attr
,
return_ty
,
snippet
,
snippet_opt
,
span_lint
,
span_lint_and_help
,
span_lint_and_then
,
trait_ref_of_method
,
type_is_unsafe_function
,
};
use
if_chain
::
if_chain
;
use
rustc_ast
::
ast
::
Attribute
;
...
...
@@ -659,7 +659,7 @@ fn nested_visit_map(&mut self) -> intravisit::NestedVisitorMap<Self::Map> {
impl
<
'a
,
'tcx
>
DerefVisitor
<
'a
,
'tcx
>
{
fn
check_arg
(
&
self
,
ptr
:
&
hir
::
Expr
<
'_
>
)
{
if
let
hir
::
ExprKind
::
Path
(
ref
qpath
)
=
ptr
.kind
{
if
let
Res
::
Local
(
id
)
=
qpath_res
(
self
.cx
,
qpath
,
ptr
.hir_id
)
{
if
let
Res
::
Local
(
id
)
=
self
.cx
.qpath_res
(
qpath
,
ptr
.hir_id
)
{
if
self
.ptrs
.contains
(
&
id
)
{
span_lint
(
self
.cx
,
...
...
@@ -722,7 +722,7 @@ fn is_mutated_static(cx: &LateContext<'_>, e: &hir::Expr<'_>) -> bool {
use
hir
::
ExprKind
::{
Field
,
Index
,
Path
};
match
e
.kind
{
Path
(
ref
qpath
)
=>
!
matches!
(
qpath_res
(
cx
,
qpath
,
e
.hir_id
),
Res
::
Local
(
_
)),
Path
(
ref
qpath
)
=>
!
matches!
(
cx
.qpath_res
(
qpath
,
e
.hir_id
),
Res
::
Local
(
_
)),
Field
(
ref
inner
,
_
)
|
Index
(
ref
inner
,
_
)
=>
is_mutated_static
(
cx
,
inner
),
_
=>
false
,
}
...
...
clippy_lints/src/let_if_seq.rs
浏览文件 @
24544083
use
crate
::
utils
::{
qpath_res
,
snippet
,
span_lint_and_then
,
visitors
::
LocalUsedVisitor
};
use
crate
::
utils
::{
snippet
,
span_lint_and_then
,
visitors
::
LocalUsedVisitor
};
use
if_chain
::
if_chain
;
use
rustc_errors
::
Applicability
;
use
rustc_hir
as
hir
;
...
...
@@ -145,7 +145,7 @@ fn check_assign<'tcx>(
if
let
hir
::
StmtKind
::
Semi
(
ref
expr
)
=
expr
.kind
;
if
let
hir
::
ExprKind
::
Assign
(
ref
var
,
ref
value
,
_
)
=
expr
.kind
;
if
let
hir
::
ExprKind
::
Path
(
ref
qpath
)
=
var
.kind
;
if
let
Res
::
Local
(
local_id
)
=
qpath_res
(
cx
,
qpath
,
var
.hir_id
);
if
let
Res
::
Local
(
local_id
)
=
cx
.qpath_res
(
qpath
,
var
.hir_id
);
if
decl
==
local_id
;
then
{
let
mut
v
=
LocalUsedVisitor
::
new
(
decl
);
...
...
clippy_lints/src/loops.rs
浏览文件 @
24544083
...
...
@@ -6,9 +6,9 @@
use
crate
::
utils
::{
contains_name
,
get_enclosing_block
,
get_parent_expr
,
get_trait_def_id
,
has_iter_method
,
higher
,
implements_trait
,
indent_of
,
is_in_panic_handler
,
is_integer_const
,
is_no_std_crate
,
is_refutable
,
is_type_diagnostic_item
,
last_path_segment
,
match_trait_method
,
match_type
,
match_var
,
multispan_sugg
,
qpath_res
,
single_segment_path
,
snippet
,
snippet_with_applicability
,
snippet_with_macro_callsite
,
span_lint
,
span_lint_and_help
,
span_lint_and_
sugg
,
span_lint_and_
then
,
sugg
,
SpanlessEq
,
last_path_segment
,
match_trait_method
,
match_type
,
match_var
,
multispan_sugg
,
single_segment_path
,
snippet
,
snippet
_with_applicability
,
snippet_with_macro_callsite
,
span_lint
,
span_lint_and_help
,
span_lint_and_sugg
,
span_lint_and_then
,
sugg
,
SpanlessEq
,
};
use
if_chain
::
if_chain
;
use
rustc_ast
::
ast
;
...
...
@@ -848,7 +848,7 @@ fn same_var<'tcx>(cx: &LateContext<'tcx>, expr: &Expr<'_>, var: HirId) -> bool {
if
let
ExprKind
::
Path
(
qpath
)
=
&
expr
.kind
;
if
let
QPath
::
Resolved
(
None
,
path
)
=
qpath
;
if
path
.segments
.len
()
==
1
;
if
let
Res
::
Local
(
local_id
)
=
qpath_res
(
cx
,
qpath
,
expr
.hir_id
);
if
let
Res
::
Local
(
local_id
)
=
cx
.qpath_res
(
qpath
,
expr
.hir_id
);
then
{
// our variable!
local_id
==
var
...
...
@@ -1420,7 +1420,7 @@ fn emit_lint(cx: &LateContext<'_>, vec: &Expr<'_>, pushed_item: &Expr<'_>) {
// Make sure that the push does not involve possibly mutating values
match
pushed_item
.kind
{
ExprKind
::
Path
(
ref
qpath
)
=>
{
match
qpath_res
(
cx
,
qpath
,
pushed_item
.hir_id
)
{
match
cx
.qpath_res
(
qpath
,
pushed_item
.hir_id
)
{
// immutable bindings that are initialized with literal or constant
Res
::
Local
(
hir_id
)
=>
{
if_chain!
{
...
...
@@ -1437,7 +1437,7 @@ fn emit_lint(cx: &LateContext<'_>, vec: &Expr<'_>, pushed_item: &Expr<'_>) {
ExprKind
::
Lit
(
..
)
=>
emit_lint
(
cx
,
vec
,
pushed_item
),
// immutable bindings that are initialized with constant
ExprKind
::
Path
(
ref
path
)
=>
{
if
let
Res
::
Def
(
DefKind
::
Const
,
..
)
=
qpath_res
(
cx
,
path
,
init
.hir_id
)
{
if
let
Res
::
Def
(
DefKind
::
Const
,
..
)
=
cx
.qpath_res
(
path
,
init
.hir_id
)
{
emit_lint
(
cx
,
vec
,
pushed_item
);
}
}
...
...
@@ -2028,7 +2028,7 @@ fn check_for_mutability(cx: &LateContext<'_>, bound: &Expr<'_>) -> Option<HirId>
if
let
ExprKind
::
Path
(
ref
qpath
)
=
bound
.kind
;
if
let
QPath
::
Resolved
(
None
,
_
)
=
*
qpath
;
then
{
let
res
=
qpath_res
(
cx
,
qpath
,
bound
.hir_id
);
let
res
=
cx
.qpath_res
(
qpath
,
bound
.hir_id
);
if
let
Res
::
Local
(
hir_id
)
=
res
{
let
node_str
=
cx
.tcx
.hir
()
.get
(
hir_id
);
if_chain!
{
...
...
@@ -2120,7 +2120,7 @@ fn check(&mut self, idx: &'tcx Expr<'_>, seqexpr: &'tcx Expr<'_>, expr: &'tcx Ex
if
self
.prefer_mutable
{
self
.indexed_mut
.insert
(
seqvar
.segments
[
0
]
.ident.name
);
}
let
res
=
qpath_res
(
self
.cx
,
seqpath
,
seqexpr
.hir_id
);
let
res
=
self
.cx
.qpath_res
(
seqpath
,
seqexpr
.hir_id
);
match
res
{
Res
::
Local
(
hir_id
)
=>
{
let
parent_id
=
self
.cx.tcx
.hir
()
.get_parent_item
(
expr
.hir_id
);
...
...
@@ -2184,7 +2184,7 @@ fn visit_expr(&mut self, expr: &'tcx Expr<'_>) {
if
let
QPath
::
Resolved
(
None
,
ref
path
)
=
*
qpath
;
if
path
.segments
.len
()
==
1
;
then
{
if
let
Res
::
Local
(
local_id
)
=
qpath_res
(
self
.cx
,
qpath
,
expr
.hir_id
)
{
if
let
Res
::
Local
(
local_id
)
=
self
.cx
.qpath_res
(
qpath
,
expr
.hir_id
)
{
if
local_id
==
self
.var
{
self
.nonindex
=
true
;
}
else
{
...
...
@@ -2589,7 +2589,7 @@ fn nested_visit_map(&mut self) -> NestedVisitorMap<Self::Map> {
fn
var_def_id
(
cx
:
&
LateContext
<
'_
>
,
expr
:
&
Expr
<
'_
>
)
->
Option
<
HirId
>
{
if
let
ExprKind
::
Path
(
ref
qpath
)
=
expr
.kind
{
let
path_res
=
qpath_res
(
cx
,
qpath
,
expr
.hir_id
);
let
path_res
=
cx
.qpath_res
(
qpath
,
expr
.hir_id
);
if
let
Res
::
Local
(
hir_id
)
=
path_res
{
return
Some
(
hir_id
);
}
...
...
@@ -2819,7 +2819,7 @@ fn insert_def_id(&mut self, ex: &'tcx Expr<'_>) {
if_chain!
{
if
let
ExprKind
::
Path
(
ref
qpath
)
=
ex
.kind
;
if
let
QPath
::
Resolved
(
None
,
_
)
=
*
qpath
;
let
res
=
qpath_res
(
self
.cx
,
qpath
,
ex
.hir_id
);
let
res
=
self
.cx
.qpath_res
(
qpath
,
ex
.hir_id
);
then
{
match
res
{
Res
::
Local
(
hir_id
)
=>
{
...
...
clippy_lints/src/manual_strip.rs
浏览文件 @
24544083
use
crate
::
consts
::{
constant
,
Constant
};
use
crate
::
utils
::
usage
::
mutated_variables
;
use
crate
::
utils
::{
eq_expr_value
,
higher
,
match_def_path
,
meets_msrv
,
multispan_sugg
,
paths
,
qpath_res
,
snippet
,
span_lint_and_then
,
eq_expr_value
,
higher
,
match_def_path
,
meets_msrv
,
multispan_sugg
,
paths
,
snippet
,
span_lint_and_then
,
};
use
if_chain
::
if_chain
;
...
...
@@ -92,7 +92,7 @@ fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
}
else
{
return
;
};
let
target_res
=
qpath_res
(
cx
,
&
target_path
,
target_arg
.hir_id
);
let
target_res
=
cx
.qpath_res
(
&
target_path
,
target_arg
.hir_id
);
if
target_res
==
Res
::
Err
{
return
;
};
...
...
@@ -221,7 +221,7 @@ fn visit_expr(&mut self, ex: &'tcx Expr<'_>) {
if
let
ExprKind
::
Index
(
indexed
,
index
)
=
&
unref
.kind
;
if
let
Some
(
higher
::
Range
{
start
,
end
,
..
})
=
higher
::
range
(
index
);
if
let
ExprKind
::
Path
(
path
)
=
&
indexed
.kind
;
if
qpath_res
(
self
.cx
,
path
,
ex
.hir_id
)
==
self
.target
;
if
self
.cx
.qpath_res
(
path
,
ex
.hir_id
)
==
self
.target
;
then
{
match
(
self
.strip_kind
,
start
,
end
)
{
(
StripKind
::
Prefix
,
Some
(
start
),
None
)
=>
{
...
...
@@ -235,7 +235,7 @@ fn visit_expr(&mut self, ex: &'tcx Expr<'_>) {
if
let
ExprKind
::
Binary
(
Spanned
{
node
:
BinOpKind
::
Sub
,
..
},
left
,
right
)
=
end
.kind
;
if
let
Some
(
left_arg
)
=
len_arg
(
self
.cx
,
left
);
if
let
ExprKind
::
Path
(
left_path
)
=
&
left_arg
.kind
;
if
qpath_res
(
self
.cx
,
left_path
,
left_arg
.hir_id
)
==
self
.target
;
if
self
.cx
.qpath_res
(
left_path
,
left_arg
.hir_id
)
==
self
.target
;
if
eq_pattern_length
(
self
.cx
,
self
.pattern
,
right
);
then
{
self
.results
.push
(
ex
.span
);
...
...
clippy_lints/src/mem_forget.rs
浏览文件 @
24544083
use
crate
::
utils
::{
match_def_path
,
paths
,
qpath_res
,
span_lint
};
use
crate
::
utils
::{
match_def_path
,
paths
,
span_lint
};
use
rustc_hir
::{
Expr
,
ExprKind
};
use
rustc_lint
::{
LateContext
,
LateLintPass
};
use
rustc_session
::{
declare_lint_pass
,
declare_tool_lint
};
...
...
@@ -29,7 +29,7 @@ impl<'tcx> LateLintPass<'tcx> for MemForget {
fn
check_expr
(
&
mut
self
,
cx
:
&
LateContext
<
'tcx
>
,
e
:
&
'tcx
Expr
<
'_
>
)
{
if
let
ExprKind
::
Call
(
ref
path_expr
,
ref
args
)
=
e
.kind
{
if
let
ExprKind
::
Path
(
ref
qpath
)
=
path_expr
.kind
{
if
let
Some
(
def_id
)
=
qpath_res
(
cx
,
qpath
,
path_expr
.hir_id
)
.opt_def_id
()
{
if
let
Some
(
def_id
)
=
cx
.qpath_res
(
qpath
,
path_expr
.hir_id
)
.opt_def_id
()
{
if
match_def_path
(
cx
,
def_id
,
&
paths
::
MEM_FORGET
)
{
let
forgot_ty
=
cx
.typeck_results
()
.expr_ty
(
&
args
[
0
]);
...
...
clippy_lints/src/no_effect.rs
浏览文件 @
24544083
use
crate
::
utils
::{
has_drop
,
qpath_res
,
snippet_opt
,
span_lint
,
span_lint_and_sugg
};
use
crate
::
utils
::{
has_drop
,
snippet_opt
,
span_lint
,
span_lint_and_sugg
};
use
rustc_errors
::
Applicability
;
use
rustc_hir
::
def
::{
DefKind
,
Res
};
use
rustc_hir
::{
BinOpKind
,
BlockCheckMode
,
Expr
,
ExprKind
,
Stmt
,
StmtKind
,
UnsafeSource
};
...
...
@@ -67,7 +67,7 @@ fn has_no_effect(cx: &LateContext<'_>, expr: &Expr<'_>) -> bool {
},
ExprKind
::
Call
(
ref
callee
,
ref
args
)
=>
{
if
let
ExprKind
::
Path
(
ref
qpath
)
=
callee
.kind
{
let
res
=
qpath_res
(
cx
,
qpath
,
callee
.hir_id
);
let
res
=
cx
.qpath_res
(
qpath
,
callee
.hir_id
);
match
res
{
Res
::
Def
(
DefKind
::
Struct
|
DefKind
::
Variant
|
DefKind
::
Ctor
(
..
),
..
)
=>
{
!
has_drop
(
cx
,
cx
.typeck_results
()
.expr_ty
(
expr
))
...
...
@@ -146,7 +146,7 @@ fn reduce_expression<'a>(cx: &LateContext<'_>, expr: &'a Expr<'a>) -> Option<Vec
},
ExprKind
::
Call
(
ref
callee
,
ref
args
)
=>
{
if
let
ExprKind
::
Path
(
ref
qpath
)
=
callee
.kind
{
let
res
=
qpath_res
(
cx
,
qpath
,
callee
.hir_id
);
let
res
=
cx
.qpath_res
(
qpath
,
callee
.hir_id
);
match
res
{
Res
::
Def
(
DefKind
::
Struct
|
DefKind
::
Variant
|
DefKind
::
Ctor
(
..
),
..
)
if
!
has_drop
(
cx
,
cx
.typeck_results
()
.expr_ty
(
expr
))
=>
...
...
clippy_lints/src/non_copy_const.rs
浏览文件 @
24544083
...
...
@@ -18,7 +18,7 @@
use
rustc_span
::{
InnerSpan
,
Span
,
DUMMY_SP
};
use
rustc_typeck
::
hir_ty_to_ty
;
use
crate
::
utils
::{
in_constant
,
qpath_res
,
span_lint_and_then
};
use
crate
::
utils
::{
in_constant
,
span_lint_and_then
};
use
if_chain
::
if_chain
;
// FIXME: this is a correctness problem but there's no suitable
...
...
@@ -339,7 +339,7 @@ fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
}
// Make sure it is a const item.
let
item_def_id
=
match
qpath_res
(
cx
,
qpath
,
expr
.hir_id
)
{
let
item_def_id
=
match
cx
.qpath_res
(
qpath
,
expr
.hir_id
)
{
Res
::
Def
(
DefKind
::
Const
|
DefKind
::
AssocConst
,
did
)
=>
did
,
_
=>
return
,
};
...
...
clippy_lints/src/to_string_in_display.rs
浏览文件 @
24544083
use
crate
::
utils
::{
match_def_path
,
match_trait_method
,
paths
,
qpath_res
,
span_lint
};
use
crate
::
utils
::{
match_def_path
,
match_trait_method
,
paths
,
span_lint
};
use
if_chain
::
if_chain
;
use
rustc_hir
::
def
::
Res
;
use
rustc_hir
::{
Expr
,
ExprKind
,
HirId
,
Impl
,
ImplItem
,
ImplItemKind
,
Item
,
ItemKind
};
...
...
@@ -94,7 +94,7 @@ fn check_expr(&mut self, cx: &LateContext<'_>, expr: &Expr<'_>) {
if
match_trait_method
(
cx
,
expr
,
&
paths
::
TO_STRING
);
if
self
.in_display_impl
;
if
let
ExprKind
::
Path
(
ref
qpath
)
=
args
[
0
]
.kind
;
if
let
Res
::
Local
(
hir_id
)
=
qpath_res
(
cx
,
qpath
,
args
[
0
]
.hir_id
);
if
let
Res
::
Local
(
hir_id
)
=
cx
.qpath_res
(
qpath
,
args
[
0
]
.hir_id
);
if
let
Some
(
self_hir_id
)
=
self
.self_hir_id
;
if
hir_id
==
self_hir_id
;
then
{
...
...
clippy_lints/src/types.rs
浏览文件 @
24544083
...
...
@@ -34,7 +34,7 @@
use
crate
::
utils
::{
clip
,
comparisons
,
differing_macro_contexts
,
higher
,
in_constant
,
indent_of
,
int_bits
,
is_hir_ty_cfg_dependant
,
is_type_diagnostic_item
,
last_path_segment
,
match_def_path
,
match_path
,
meets_msrv
,
method_chain_args
,
multispan_sugg
,
numeric_literal
::
NumericLiteral
,
qpath_res
,
reindent_multiline
,
sext
,
snippet
,
snippet_opt
,
multispan_sugg
,
numeric_literal
::
NumericLiteral
,
reindent_multiline
,
sext
,
snippet
,
snippet_opt
,
snippet_with_applicability
,
snippet_with_macro_callsite
,
span_lint
,
span_lint_and_help
,
span_lint_and_sugg
,
span_lint_and_then
,
unsext
,
};
...
...
@@ -298,7 +298,7 @@ fn match_type_parameter(cx: &LateContext<'_>, qpath: &QPath<'_>, path: &[&str])
_
=>
None
,
});
if
let
TyKind
::
Path
(
ref
qpath
)
=
ty
.kind
;
if
let
Some
(
did
)
=
qpath_res
(
cx
,
qpath
,
ty
.hir_id
)
.opt_def_id
();
if
let
Some
(
did
)
=
cx
.qpath_res
(
qpath
,
ty
.hir_id
)
.opt_def_id
();
if
match_def_path
(
cx
,
did
,
path
);
then
{
return
Some
(
ty
.span
);
...
...
@@ -365,7 +365,7 @@ fn check_ty(&mut self, cx: &LateContext<'_>, hir_ty: &hir::Ty<'_>, is_local: boo
match
hir_ty
.kind
{
TyKind
::
Path
(
ref
qpath
)
if
!
is_local
=>
{
let
hir_id
=
hir_ty
.hir_id
;
let
res
=
qpath_res
(
cx
,
qpath
,
hir_id
);
let
res
=
cx
.qpath_res
(
qpath
,
hir_id
);
if
let
Some
(
def_id
)
=
res
.opt_def_id
()
{
if
Some
(
def_id
)
==
cx
.tcx
.lang_items
()
.owned_box
()
{
if
let
Some
(
span
)
=
match_borrows_parameter
(
cx
,
qpath
)
{
...
...
@@ -535,7 +535,7 @@ fn check_ty(&mut self, cx: &LateContext<'_>, hir_ty: &hir::Ty<'_>, is_local: boo
});
// ty is now _ at this point
if
let
TyKind
::
Path
(
ref
ty_qpath
)
=
ty
.kind
;
let
res
=
qpath_res
(
cx
,
ty_qpath
,
ty
.hir_id
);
let
res
=
cx
.qpath_res
(
ty_qpath
,
ty
.hir_id
);
if
let
Some
(
def_id
)
=
res
.opt_def_id
();
if
Some
(
def_id
)
==
cx
.tcx
.lang_items
()
.owned_box
();
// At this point, we know ty is Box<T>, now get T
...
...
@@ -652,7 +652,7 @@ fn check_ty_rptr(
match
mut_ty
.ty.kind
{
TyKind
::
Path
(
ref
qpath
)
=>
{
let
hir_id
=
mut_ty
.ty.hir_id
;
let
def
=
qpath_res
(
cx
,
qpath
,
hir_id
);
let
def
=
cx
.qpath_res
(
qpath
,
hir_id
);
if_chain!
{
if
let
Some
(
def_id
)
=
def
.opt_def_id
();
if
Some
(
def_id
)
==
cx
.tcx
.lang_items
()
.owned_box
();
...
...
@@ -739,7 +739,7 @@ fn is_any_trait(t: &hir::Ty<'_>) -> bool {
fn
get_bounds_if_impl_trait
<
'tcx
>
(
cx
:
&
LateContext
<
'tcx
>
,
qpath
:
&
QPath
<
'_
>
,
id
:
HirId
)
->
Option
<
GenericBounds
<
'tcx
>>
{
if_chain!
{
if
let
Some
(
did
)
=
qpath_res
(
cx
,
qpath
,
id
)
.opt_def_id
();
if
let
Some
(
did
)
=
cx
.qpath_res
(
qpath
,
id
)
.opt_def_id
();
if
let
Some
(
Node
::
GenericParam
(
generic_param
))
=
cx
.tcx
.hir
()
.get_if_local
(
did
);
if
let
GenericParamKind
::
Type
{
synthetic
,
..
}
=
generic_param
.kind
;
if
synthetic
==
Some
(
SyntheticTyParamKind
::
ImplTrait
);
...
...
clippy_lints/src/utils/internal_lints.rs
浏览文件 @
24544083
use
crate
::
consts
::{
constant_simple
,
Constant
};
use
crate
::
utils
::{
is_expn_of
,
match_def_path
,
match_qpath
,
match_type
,
method_calls
,
path_to_res
,
paths
,
qpath_res
,
run_lints
,
s
nippet
,
s
pan_lint
,
span_lint_and_help
,
span_lint_and_sugg
,
SpanlessEq
,
is_expn_of
,
match_def_path
,
match_qpath
,
match_type
,
method_calls
,
path_to_res
,
paths
,
run_lints
,
snippet
,
span_lint
,
span_lint_and_help
,
span_lint_and_sugg
,
SpanlessEq
,
};
use
if_chain
::
if_chain
;
use
rustc_ast
::
ast
::{
Crate
as
AstCrate
,
ItemKind
,
LitKind
,
NodeId
};
...
...
@@ -787,7 +787,7 @@ fn path_to_matched_type(cx: &LateContext<'_>, expr: &hir::Expr<'_>) -> Option<Ve
match
&
expr
.kind
{
ExprKind
::
AddrOf
(
..
,
expr
)
=>
return
path_to_matched_type
(
cx
,
expr
),
ExprKind
::
Path
(
qpath
)
=>
match
qpath_res
(
cx
,
qpath
,
expr
.hir_id
)
{
ExprKind
::
Path
(
qpath
)
=>
match
cx
.qpath_res
(
qpath
,
expr
.hir_id
)
{
Res
::
Local
(
hir_id
)
=>
{
let
parent_id
=
cx
.tcx
.hir
()
.get_parent_node
(
hir_id
);
if
let
Some
(
Node
::
Local
(
local
))
=
cx
.tcx
.hir
()
.find
(
parent_id
)
{
...
...
clippy_lints/src/utils/mod.rs
浏览文件 @
24544083
...
...
@@ -370,19 +370,6 @@ pub fn path_to_res(cx: &LateContext<'_>, path: &[&str]) -> Option<def::Res> {
}
}
pub
fn
qpath_res
(
cx
:
&
LateContext
<
'_
>
,
qpath
:
&
hir
::
QPath
<
'_
>
,
id
:
hir
::
HirId
)
->
Res
{
match
qpath
{
hir
::
QPath
::
Resolved
(
_
,
path
)
=>
path
.res
,
hir
::
QPath
::
TypeRelative
(
..
)
|
hir
::
QPath
::
LangItem
(
..
)
=>
{
if
cx
.tcx
.has_typeck_results
(
id
.owner
.to_def_id
())
{
cx
.tcx
.typeck
(
id
.owner
)
.qpath_res
(
qpath
,
id
)
}
else
{
Res
::
Err
}
},
}
}
/// Convenience function to get the `DefId` of a trait by path.
/// It could be a trait or trait alias.
pub
fn
get_trait_def_id
(
cx
:
&
LateContext
<
'_
>
,
path
:
&
[
&
str
])
->
Option
<
DefId
>
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录