Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
3c67ceb2
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,发现更多精彩内容 >>
提交
3c67ceb2
编写于
11月 16, 2017
作者:
C
Cyrus Najmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Improve code style behavior.
上级
c8a40509
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
46 addition
and
22 deletion
+46
-22
src/Features/Core/Portable/UseAutoProperty/AbstractUseAutoPropertyAnalyzer.cs
...rtable/UseAutoProperty/AbstractUseAutoPropertyAnalyzer.cs
+36
-20
src/Features/Core/Portable/UseAutoProperty/AbstractUseAutoPropertyCodeFixProvider.cs
...UseAutoProperty/AbstractUseAutoPropertyCodeFixProvider.cs
+10
-2
未找到文件。
src/Features/Core/Portable/UseAutoProperty/AbstractUseAutoPropertyAnalyzer.cs
浏览文件 @
3c67ceb2
...
...
@@ -45,15 +45,32 @@ protected sealed override void InitializeWorker(AnalysisContext context)
private
void
AnalyzeSemanticModel
(
SemanticModelAnalysisContext
context
)
{
var
cancellationToken
=
context
.
CancellationToken
;
var
semanticModel
=
context
.
SemanticModel
;
// Don't even bother doing the analysis if the user doesn't even want auto-props.
var
optionSet
=
context
.
Options
.
GetDocumentOptionSetAsync
(
semanticModel
.
SyntaxTree
,
cancellationToken
).
GetAwaiter
().
GetResult
();
if
(
optionSet
==
null
)
{
return
;
}
var
option
=
optionSet
.
GetOption
(
CodeStyleOptions
.
PreferAutoProperties
,
semanticModel
.
Language
);
if
(!
option
.
Value
)
{
return
;
}
var
analysisResults
=
new
List
<
AnalysisResult
>();
var
ineligibleFields
=
new
HashSet
<
IFieldSymbol
>();
var
root
=
context
.
SemanticModel
.
SyntaxTree
.
GetRoot
(
context
.
C
ancellationToken
);
var
root
=
semanticModel
.
SyntaxTree
.
GetRoot
(
c
ancellationToken
);
AnalyzeCompilationUnit
(
context
,
root
,
analysisResults
);
RegisterIneligibleFieldsAction
(
analysisResults
,
ineligibleFields
,
context
.
SemanticModel
.
Compilation
,
context
.
C
ancellationToken
);
semanticModel
.
Compilation
,
c
ancellationToken
);
Process
(
analysisResults
,
ineligibleFields
,
context
);
}
...
...
@@ -275,32 +292,31 @@ private void Process(AnalysisResult result, SemanticModelAnalysisContext context
return
;
}
// Always offer the conversion if possible. But only let the user know (by
// fading/suggestions/squiggles) if their option is set to see this.
var
option
=
optionSet
.
GetOption
(
CodeStyleOptions
.
PreferAutoProperties
,
propertyDeclaration
.
Language
);
if
(
option
.
Value
)
{
// Fade out the field/variable we are going to remove.
var
diagnostic1
=
Diagnostic
.
Create
(
UnnecessaryWithoutSuggestionDescriptor
,
nodeToFade
.
GetLocation
());
context
.
ReportDiagnostic
(
diagnostic1
);
}
// Now add diagnostics to both the field and the property saying we can convert it to
// an auto property. For each diagnostic store both location so we can easily retrieve
// them when performing the code fix.
var
additionalLocations
=
ImmutableArray
.
Create
(
propertyDeclaration
.
GetLocation
(),
variableDeclarator
.
GetLocation
());
var
diagnostic2
=
Diagnostic
.
Create
(
HiddenDescriptor
,
propertyDeclaration
.
GetLocation
(),
additionalLocations
:
additionalLocations
);
context
.
ReportDiagnostic
(
diagnostic2
);
var
option
=
optionSet
.
GetOption
(
CodeStyleOptions
.
PreferAutoProperties
,
propertyDeclaration
.
Language
);
var
lowPriority
=
ImmutableDictionary
<
string
,
string
>.
Empty
.
Add
(
"LowPriority"
,
""
);
// Place the appropriate marker on the field depending on the user option.
var
diagnostic
3
=
Diagnostic
.
Create
(
var
diagnostic
1
=
Diagnostic
.
Create
(
GetFieldDescriptor
(
option
),
nodeToFade
.
GetLocation
(),
additionalLocations
:
additionalLocations
);
context
.
ReportDiagnostic
(
diagnostic3
);
additionalLocations
:
additionalLocations
,
properties
:
option
.
Notification
.
Value
==
DiagnosticSeverity
.
Hidden
?
lowPriority
:
default
);
// Also, place a hidden marker on the property. If they bring up a lightbulb
// there, they'll be able to see that they can convert it to an auto-prop.
var
diagnostic2
=
Diagnostic
.
Create
(
HiddenDescriptor
,
propertyDeclaration
.
GetLocation
(),
additionalLocations
:
additionalLocations
,
properties
:
lowPriority
);
context
.
ReportDiagnostic
(
diagnostic1
);
context
.
ReportDiagnostic
(
diagnostic2
);
}
private
DiagnosticDescriptor
GetFieldDescriptor
(
CodeStyleOption
<
bool
>
styleOption
)
...
...
@@ -315,7 +331,7 @@ private DiagnosticDescriptor GetFieldDescriptor(CodeStyleOption<bool> styleOptio
}
}
return
Hidde
nDescriptor
;
return
UnnecessaryWithSuggestio
nDescriptor
;
}
protected
virtual
bool
IsEligibleHeuristic
(
IFieldSymbol
field
,
TPropertyDeclaration
propertyDeclaration
,
Compilation
compilation
,
CancellationToken
cancellationToken
)
...
...
src/Features/Core/Portable/UseAutoProperty/AbstractUseAutoPropertyCodeFixProvider.cs
浏览文件 @
3c67ceb2
...
...
@@ -46,10 +46,15 @@ public sealed override Task RegisterCodeFixesAsync(CodeFixContext context)
{
foreach
(
var
diagnostic
in
context
.
Diagnostics
)
{
var
priority
=
diagnostic
.
Properties
.
ContainsKey
(
"LowPriority"
)
?
CodeActionPriority
.
Low
:
CodeActionPriority
.
Medium
;
context
.
RegisterCodeFix
(
new
UseAutoPropertyCodeAction
(
FeaturesResources
.
Use_auto_property
,
c
=>
ProcessResultAsync
(
context
,
diagnostic
,
c
)),
c
=>
ProcessResultAsync
(
context
,
diagnostic
,
c
),
priority
),
diagnostic
);
}
...
...
@@ -273,10 +278,13 @@ private async Task<SyntaxNode> FormatAsync(SyntaxNode newRoot, Document document
private
class
UseAutoPropertyCodeAction
:
CodeAction
.
SolutionChangeAction
{
public
UseAutoPropertyCodeAction
(
string
title
,
Func
<
CancellationToken
,
Task
<
Solution
>>
createChangedSolution
)
public
UseAutoPropertyCodeAction
(
string
title
,
Func
<
CancellationToken
,
Task
<
Solution
>>
createChangedSolution
,
CodeActionPriority
priority
)
:
base
(
title
,
createChangedSolution
,
title
)
{
this
.
Priority
=
priority
;
}
internal
override
CodeActionPriority
Priority
{
get
;
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录