Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
f21c196a
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f21c196a
编写于
4月 25, 2020
作者:
A
Alireza Habibi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add some comments
上级
a81bcde9
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
15 addition
and
3 deletion
+15
-3
src/Features/CSharp/Portable/UsePatternCombinators/AnalyzedPattern.cs
.../CSharp/Portable/UsePatternCombinators/AnalyzedPattern.cs
+8
-1
src/Features/CSharp/Portable/UsePatternCombinators/CSharpUsePatternCombinatorsAnalyzer.cs
...PatternCombinators/CSharpUsePatternCombinatorsAnalyzer.cs
+5
-2
src/Features/CSharp/Portable/UsePatternCombinators/CSharpUsePatternCombinatorsDiagnosticAnalyzer.cs
...binators/CSharpUsePatternCombinatorsDiagnosticAnalyzer.cs
+2
-0
未找到文件。
src/Features/CSharp/Portable/UsePatternCombinators/AnalyzedPattern.cs
浏览文件 @
f21c196a
...
...
@@ -92,6 +92,13 @@ private Binary(AnalyzedPattern leftPattern, AnalyzedPattern rightPattern, bool i
if
(!
SyntaxFactory
.
AreEquivalent
(
target
,
rightPattern
.
TargetExpression
))
return
null
;
// We factor out not-patterns in a conjunction.
// For instance: `not 1 and not 2` is simplified as `not (1 or 2)`.
// Note that we don't do the same for disjunction, because the result would not be the same.
// For instance: `not 1 or not 2` cannot be rewritten as `not (1 and 2)`.
// The latter could be always true while that is not the case in the original form.
return
!
isDisjunctive
&&
(
leftPattern
,
rightPattern
)
is
(
Not
left
,
Not
right
)
?
Not
.
Create
(
new
Binary
(
left
.
Pattern
,
right
.
Pattern
,
isDisjunctive
:
true
,
token
,
target
))
:
new
Binary
(
leftPattern
,
rightPattern
,
isDisjunctive
,
token
,
target
);
...
...
@@ -122,7 +129,7 @@ private static BinaryOperatorKind Negate(BinaryOperatorKind kind)
=>
pattern
switch
{
null
=>
null
,
Not
p
=>
p
.
Pattern
,
Not
p
=>
p
.
Pattern
,
// double negative
Relational
p
=>
new
Relational
(
Negate
(
p
.
OperatorKind
),
p
.
Value
,
p
.
TargetExpression
),
_
=>
new
Not
(
pattern
,
pattern
.
TargetExpression
)
};
...
...
src/Features/CSharp/Portable/UsePatternCombinators/CSharpUsePatternCombinatorsAnalyzer.cs
浏览文件 @
f21c196a
...
...
@@ -101,6 +101,9 @@ private static ConstantResult DetermineConstant(IBinaryOperation op)
return
DetermineConstant
(
op
)
switch
{
ConstantResult
.
Left
when
op
.
LeftOperand
.
Syntax
is
ExpressionSyntax
left
// We need to flip the operator if the constant is on the left-hand-side.
// This is because relational patterns only come in the prefix form.
// For instance: `123 > x` would be rewritten as `x is < 123`.
=>
new
Relational
(
Flip
(
op
.
OperatorKind
),
left
,
GetTargetExpression
(
op
.
RightOperand
)),
ConstantResult
.
Right
when
op
.
RightOperand
.
Syntax
is
ExpressionSyntax
right
=>
new
Relational
(
op
.
OperatorKind
,
right
,
GetTargetExpression
(
op
.
LeftOperand
)),
...
...
@@ -138,8 +141,8 @@ private static bool IsRelationalOperator(BinaryOperatorKind operatorKind)
/// Changes the direction the operator is pointing at.
/// </summary>
/// <remarks>
/// Relational patterns only come in prefix form so we'll have to
/// flip the operator if the
original comparison has an LHS constant
.
/// Relational patterns only come in
the
prefix form so we'll have to
/// flip the operator if the
constant happens to be on the left-hand-side
.
/// </remarks>
public
static
BinaryOperatorKind
Flip
(
BinaryOperatorKind
operatorKind
)
{
...
...
src/Features/CSharp/Portable/UsePatternCombinators/CSharpUsePatternCombinatorsDiagnosticAnalyzer.cs
浏览文件 @
f21c196a
...
...
@@ -83,9 +83,11 @@ private void AnalyzeNode(SyntaxNodeAnalysisContext context)
if
(
pattern
is
null
)
return
;
// Avoid rewriting trivial patterns, such as a single relational or a constant pattern.
if
(
IsTrivial
(
pattern
))
return
;
// C# 9.0 does not support pattern variables under `not` and `or` combinators.
if
(
HasIllegalPatternVariables
(
pattern
))
return
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录