Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
d1a50ffb
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,发现更多精彩内容 >>
提交
d1a50ffb
编写于
10月 22, 2020
作者:
N
Nadrieril
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Rename the `overlapping_patterns` lint to `overlapping_range_endpoints`
上级
06ca6bba
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
52 addition
and
51 deletion
+52
-51
compiler/rustc_lint/src/lib.rs
compiler/rustc_lint/src/lib.rs
+2
-1
compiler/rustc_lint_defs/src/builtin.rs
compiler/rustc_lint_defs/src/builtin.rs
+8
-9
compiler/rustc_mir_build/src/thir/pattern/deconstruct_pat.rs
compiler/rustc_mir_build/src/thir/pattern/deconstruct_pat.rs
+7
-6
src/test/ui/issues/issue-21475.rs
src/test/ui/issues/issue-21475.rs
+1
-1
src/test/ui/issues/issue-26251.rs
src/test/ui/issues/issue-26251.rs
+1
-1
src/test/ui/pattern/usefulness/integer-ranges/overlapping_range_endpoints.rs
.../usefulness/integer-ranges/overlapping_range_endpoints.rs
+11
-11
src/test/ui/pattern/usefulness/integer-ranges/overlapping_range_endpoints.stderr
...fulness/integer-ranges/overlapping_range_endpoints.stderr
+22
-22
未找到文件。
compiler/rustc_lint/src/lib.rs
浏览文件 @
d1a50ffb
...
...
@@ -283,7 +283,7 @@ fn register_builtins(store: &mut LintStore, no_interleave_lints: bool) {
UNUSED_MUT
,
UNREACHABLE_CODE
,
UNREACHABLE_PATTERNS
,
OVERLAPPING_
PATTERN
S
,
OVERLAPPING_
RANGE_ENDPOINT
S
,
UNUSED_MUST_USE
,
UNUSED_UNSAFE
,
PATH_STATEMENTS
,
...
...
@@ -335,6 +335,7 @@ fn register_builtins(store: &mut LintStore, no_interleave_lints: bool) {
store
.register_renamed
(
"exceeding_bitshifts"
,
"arithmetic_overflow"
);
store
.register_renamed
(
"redundant_semicolon"
,
"redundant_semicolons"
);
store
.register_renamed
(
"intra_doc_link_resolution_failure"
,
"broken_intra_doc_links"
);
store
.register_renamed
(
"overlapping_patterns"
,
"overlapping_range_endpoints"
);
store
.register_removed
(
"unknown_features"
,
"replaced by an error"
);
store
.register_removed
(
"unsigned_negation"
,
"replaced by negate_unsigned feature gate"
);
store
.register_removed
(
"negate_unsigned"
,
"cast a signed value instead"
);
...
...
compiler/rustc_lint_defs/src/builtin.rs
浏览文件 @
d1a50ffb
...
...
@@ -588,8 +588,8 @@
}
declare_lint!
{
/// The `overlapping_
patterns` lint detects `match` arms that have
///
[range patterns] that overlap
.
/// The `overlapping_
range_endpoints` lint detects `match` arms that have [range patterns] that
///
overlap on their endpoints
.
///
/// [range patterns]: https://doc.rust-lang.org/nightly/reference/patterns.html#range-patterns
///
...
...
@@ -607,13 +607,12 @@
///
/// ### Explanation
///
/// It is likely a mistake to have range patterns in a match expression
/// that overlap. Check that the beginning and end values are what you
/// expect, and keep in mind that with `..=` the left and right bounds are
/// inclusive.
pub
OVERLAPPING_PATTERNS
,
/// It is likely a mistake to have range patterns in a match expression that overlap in this
/// way. Check that the beginning and end values are what you expect, and keep in mind that
/// with `..=` the left and right bounds are inclusive.
pub
OVERLAPPING_RANGE_ENDPOINTS
,
Warn
,
"detects
overlapping pattern
s"
"detects
range patterns with overlapping endpoint
s"
}
declare_lint!
{
...
...
@@ -2765,7 +2764,7 @@
DEAD_CODE
,
UNREACHABLE_CODE
,
UNREACHABLE_PATTERNS
,
OVERLAPPING_
PATTERN
S
,
OVERLAPPING_
RANGE_ENDPOINT
S
,
BINDINGS_WITH_VARIANT_NAME
,
UNUSED_MACROS
,
WARNINGS
,
...
...
compiler/rustc_mir_build/src/thir/pattern/deconstruct_pat.rs
浏览文件 @
d1a50ffb
...
...
@@ -273,7 +273,7 @@ fn range_borders(r: IntRange) -> impl Iterator<Item = Border> {
let
mut
borders
:
Vec
<
_
>
=
row_borders
.chain
(
self_borders
)
.collect
();
borders
.sort_unstable
();
self
.lint_overlapping_
pattern
s
(
pcx
,
hir_id
,
overlaps
);
self
.lint_overlapping_
range_endpoint
s
(
pcx
,
hir_id
,
overlaps
);
// We're going to iterate through every adjacent pair of borders, making sure that
// each represents an interval of nonnegative length, and convert each such
...
...
@@ -296,7 +296,7 @@ fn range_borders(r: IntRange) -> impl Iterator<Item = Border> {
.collect
()
}
fn
lint_overlapping_
pattern
s
(
fn
lint_overlapping_
range_endpoint
s
(
&
self
,
pcx
:
PatCtxt
<
'_
,
'_
,
'_
>
,
hir_id
:
Option
<
HirId
>
,
...
...
@@ -304,22 +304,23 @@ fn lint_overlapping_patterns(
)
{
if
let
(
true
,
Some
(
hir_id
))
=
(
!
overlaps
.is_empty
(),
hir_id
)
{
pcx
.cx.tcx
.struct_span_lint_hir
(
lint
::
builtin
::
OVERLAPPING_
PATTERN
S
,
lint
::
builtin
::
OVERLAPPING_
RANGE_ENDPOINT
S
,
hir_id
,
pcx
.span
,
|
lint
|
{
let
mut
err
=
lint
.build
(
"multiple patterns
covering the same range
"
);
err
.span_label
(
pcx
.span
,
"overlapping
pattern
s"
);
let
mut
err
=
lint
.build
(
"multiple patterns
overlap on their endpoints
"
);
err
.span_label
(
pcx
.span
,
"overlapping
range endpoint
s"
);
for
(
int_range
,
span
)
in
overlaps
{
// Use the real type for user display of the ranges:
err
.span_label
(
span
,
&
format!
(
"this range overlaps on `{}`"
,
int_range
.to_pat
(
pcx
.cx.tcx
,
pcx
.ty
)
,
int_range
.to_pat
(
pcx
.cx.tcx
,
pcx
.ty
)
),
);
}
// FIXME: add note
err
.emit
();
},
);
...
...
src/test/ui/issues/issue-21475.rs
浏览文件 @
d1a50ffb
// run-pass
#![allow(unused_imports,
overlapping_
pattern
s)]
#![allow(unused_imports,
overlapping_
range_endpoint
s)]
// pretty-expanded FIXME #23616
use
m
::{
START
,
END
};
...
...
src/test/ui/issues/issue-26251.rs
浏览文件 @
d1a50ffb
// run-pass
#![allow(overlapping_
pattern
s)]
#![allow(overlapping_
range_endpoint
s)]
fn
main
()
{
let
x
=
'a'
;
...
...
src/test/ui/pattern/usefulness/integer-ranges/overlapping_range_endpoints.rs
浏览文件 @
d1a50ffb
#![feature(exclusive_range_pattern)]
#![deny(overlapping_
pattern
s)]
#![deny(overlapping_
range_endpoint
s)]
macro_rules!
m
{
(
$s:expr
,
$t1:pat
,
$t2:pat
)
=>
{
...
...
@@ -12,31 +12,31 @@
}
fn
main
()
{
m!
(
0u8
,
20
..=
30
,
30
..=
40
);
//~ ERROR multiple patterns
covering the same range
m!
(
0u8
,
30
..=
40
,
20
..=
30
);
//~ ERROR multiple patterns
covering the same range
m!
(
0u8
,
20
..=
30
,
30
..=
40
);
//~ ERROR multiple patterns
overlap on their endpoints
m!
(
0u8
,
30
..=
40
,
20
..=
30
);
//~ ERROR multiple patterns
overlap on their endpoints
m!
(
0u8
,
20
..=
30
,
31
..=
40
);
m!
(
0u8
,
20
..=
30
,
29
..=
40
);
m!
(
0u8
,
20
..
30
,
29
..=
40
);
//~ ERROR multiple patterns
covering the same range
m!
(
0u8
,
20
..
30
,
29
..=
40
);
//~ ERROR multiple patterns
overlap on their endpoints
m!
(
0u8
,
20
..
30
,
28
..=
40
);
m!
(
0u8
,
20
..
30
,
30
..=
40
);
m!
(
0u8
,
20
..=
30
,
30
..=
30
);
m!
(
0u8
,
20
..=
30
,
30
..=
31
);
//~ ERROR multiple patterns
covering the same range
m!
(
0u8
,
20
..=
30
,
30
..=
31
);
//~ ERROR multiple patterns
overlap on their endpoints
m!
(
0u8
,
20
..=
30
,
29
..=
30
);
m!
(
0u8
,
20
..=
30
,
20
..=
20
);
m!
(
0u8
,
20
..=
30
,
20
..=
21
);
m!
(
0u8
,
20
..=
30
,
19
..=
20
);
//~ ERROR multiple patterns
covering the same range
m!
(
0u8
,
20
..=
30
,
19
..=
20
);
//~ ERROR multiple patterns
overlap on their endpoints
m!
(
0u8
,
20
..=
30
,
20
);
m!
(
0u8
,
20
..=
30
,
25
);
m!
(
0u8
,
20
..=
30
,
30
);
m!
(
0u8
,
20
..
30
,
29
);
m!
(
0u8
,
20
,
20
..=
30
);
//~ ERROR multiple patterns
covering the same range
m!
(
0u8
,
20
,
20
..=
30
);
//~ ERROR multiple patterns
overlap on their endpoints
m!
(
0u8
,
25
,
20
..=
30
);
m!
(
0u8
,
30
,
20
..=
30
);
//~ ERROR multiple patterns
covering the same range
m!
(
0u8
,
30
,
20
..=
30
);
//~ ERROR multiple patterns
overlap on their endpoints
match
0u8
{
0
..=
10
=>
{}
20
..=
30
=>
{}
10
..=
20
=>
{}
//~ ERROR multiple patterns
covering the same range
10
..=
20
=>
{}
//~ ERROR multiple patterns
overlap on their endpoints
_
=>
{}
}
match
(
0u8
,
true
)
{
...
...
@@ -47,13 +47,13 @@ fn main() {
}
match
(
true
,
0u8
)
{
(
true
,
0
..=
10
)
=>
{}
(
true
,
10
..
20
)
=>
{}
//~ ERROR multiple patterns
covering the same range
(
true
,
10
..
20
)
=>
{}
//~ ERROR multiple patterns
overlap on their endpoints
(
false
,
10
..
20
)
=>
{}
_
=>
{}
}
match
Some
(
0u8
)
{
Some
(
0
..=
10
)
=>
{}
Some
(
10
..
20
)
=>
{}
//~ ERROR multiple patterns
covering the same range
Some
(
10
..
20
)
=>
{}
//~ ERROR multiple patterns
overlap on their endpoints
_
=>
{}
}
}
src/test/ui/pattern/usefulness/integer-ranges/overlapping_range_endpoints.stderr
浏览文件 @
d1a50ffb
error: multiple patterns
covering the same range
error: multiple patterns
overlap on their endpoints
--> $DIR/overlapping_range_endpoints.rs:15:22
|
LL | m!(0u8, 20..=30, 30..=40);
| ------- ^^^^^^^ overlapping
pattern
s
| ------- ^^^^^^^ overlapping
range endpoint
s
| |
| this range overlaps on `30_u8`
|
note: the lint level is defined here
--> $DIR/overlapping_range_endpoints.rs:2:9
|
LL | #![deny(overlapping_
pattern
s)]
| ^^^^^^^^^^^^^^^^^^^^
LL | #![deny(overlapping_
range_endpoint
s)]
| ^^^^^^^^^^^^^^^^^^^^
^^^^^^^
error: multiple patterns
covering the same range
error: multiple patterns
overlap on their endpoints
--> $DIR/overlapping_range_endpoints.rs:16:22
|
LL | m!(0u8, 30..=40, 20..=30);
| ------- ^^^^^^^ overlapping
pattern
s
| ------- ^^^^^^^ overlapping
range endpoint
s
| |
| this range overlaps on `30_u8`
error: multiple patterns
covering the same range
error: multiple patterns
overlap on their endpoints
--> $DIR/overlapping_range_endpoints.rs:19:22
|
LL | m!(0u8, 20.. 30, 29..=40);
| ------- ^^^^^^^ overlapping
pattern
s
| ------- ^^^^^^^ overlapping
range endpoint
s
| |
| this range overlaps on `29_u8`
error: multiple patterns
covering the same range
error: multiple patterns
overlap on their endpoints
--> $DIR/overlapping_range_endpoints.rs:23:22
|
LL | m!(0u8, 20..=30, 30..=31);
| ------- ^^^^^^^ overlapping
pattern
s
| ------- ^^^^^^^ overlapping
range endpoint
s
| |
| this range overlaps on `30_u8`
error: multiple patterns
covering the same range
error: multiple patterns
overlap on their endpoints
--> $DIR/overlapping_range_endpoints.rs:27:22
|
LL | m!(0u8, 20..=30, 19..=20);
| ------- ^^^^^^^ overlapping
pattern
s
| ------- ^^^^^^^ overlapping
range endpoint
s
| |
| this range overlaps on `20_u8`
error: multiple patterns
covering the same range
error: multiple patterns
overlap on their endpoints
--> $DIR/overlapping_range_endpoints.rs:32:17
|
LL | m!(0u8, 20, 20..=30);
| -- ^^^^^^^ overlapping
pattern
s
| -- ^^^^^^^ overlapping
range endpoint
s
| |
| this range overlaps on `20_u8`
error: multiple patterns
covering the same range
error: multiple patterns
overlap on their endpoints
--> $DIR/overlapping_range_endpoints.rs:34:17
|
LL | m!(0u8, 30, 20..=30);
| -- ^^^^^^^ overlapping
pattern
s
| -- ^^^^^^^ overlapping
range endpoint
s
| |
| this range overlaps on `30_u8`
error: multiple patterns
covering the same range
error: multiple patterns
overlap on their endpoints
--> $DIR/overlapping_range_endpoints.rs:39:9
|
LL | 0..=10 => {}
...
...
@@ -68,23 +68,23 @@ LL | 0..=10 => {}
LL | 20..=30 => {}
| ------- this range overlaps on `20_u8`
LL | 10..=20 => {}
| ^^^^^^^ overlapping
pattern
s
| ^^^^^^^ overlapping
range endpoint
s
error: multiple patterns
covering the same range
error: multiple patterns
overlap on their endpoints
--> $DIR/overlapping_range_endpoints.rs:50:16
|
LL | (true, 0..=10) => {}
| ------ this range overlaps on `10_u8`
LL | (true, 10..20) => {}
| ^^^^^^ overlapping
pattern
s
| ^^^^^^ overlapping
range endpoint
s
error: multiple patterns
covering the same range
error: multiple patterns
overlap on their endpoints
--> $DIR/overlapping_range_endpoints.rs:56:14
|
LL | Some(0..=10) => {}
| ------ this range overlaps on `10_u8`
LL | Some(10..20) => {}
| ^^^^^^ overlapping
pattern
s
| ^^^^^^ overlapping
range endpoint
s
error: aborting due to 10 previous errors
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录