Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
dfe76442
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,发现更多精彩内容 >>
提交
dfe76442
编写于
10月 12, 2016
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix issue where we overly aggressively removed xml doc comment trivia.
上级
672f22f6
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
203 addition
and
7 deletion
+203
-7
src/EditorFeatures/CSharpTest/DocumentationComments/CodeFixes/RemoveDocCommentNodeCodeFixProviderTests.cs
...nts/CodeFixes/RemoveDocCommentNodeCodeFixProviderTests.cs
+57
-1
src/EditorFeatures/VisualBasicTest/DocumentationComments/CodeFixes/RemoveDocCommentNodeCodeFixProviderTests.vb
...nts/CodeFixes/RemoveDocCommentNodeCodeFixProviderTests.vb
+55
-1
src/Features/CSharp/Portable/DocumentationComments/CodeFixes/CSharpRemoveDocCommentNodeCodeFixProvider.cs
...ts/CodeFixes/CSharpRemoveDocCommentNodeCodeFixProvider.cs
+22
-1
src/Features/Core/Portable/DocumentationComments/CodeFixes/AbstractRemoveDocCommentNodeCodeFixProvider.cs
.../CodeFixes/AbstractRemoveDocCommentNodeCodeFixProvider.cs
+50
-3
src/Features/VisualBasic/Portable/DocumentationComments/CodeFixes/VisualBasicRemoveDocCommentNodeCodeFixProvider.vb
...deFixes/VisualBasicRemoveDocCommentNodeCodeFixProvider.vb
+19
-1
未找到文件。
src/EditorFeatures/CSharpTest/DocumentationComments/CodeFixes/RemoveDocCommentNodeCodeFixProviderTests.cs
浏览文件 @
dfe76442
...
...
@@ -153,7 +153,7 @@ public async Task RemovesDuplicateParamTag_BothParamTagsOnSameLine_WhitespaceBet
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsRemoveDocCommentNode
)]
public
async
Task
RemovesDuplicateParamTag_BothParamTagsOnSameLine_NothingBetweenThem
()
public
async
Task
RemovesDuplicateParamTag_BothParamTagsOnSameLine_NothingBetweenThem
1
()
{
var
initial
=
@"class Program
...
...
@@ -179,6 +179,62 @@ public async Task RemovesDuplicateParamTag_BothParamTagsOnSameLine_NothingBetwee
await
TestAsync
(
initial
,
expected
);
}
[
WorkItem
(
13436
,
"https://github.com/dotnet/roslyn/issues/13436"
)]
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsRemoveDocCommentNode
)]
public
async
Task
RemovesTag_BothParamTagsOnSameLine_NothingBetweenThem2
()
{
var
initial
=
@"class Program
{
/// <summary>
///
/// </summary>
/// <param [|name=""a""|]></param><param name=""value""></param>
public void Fizz(int value) {}
}
"
;
var
expected
=
@"class Program
{
/// <summary>
///
/// </summary>
/// <param name=""value""></param>
public void Fizz(int value) {}
}
"
;
await
TestAsync
(
initial
,
expected
);
}
[
WorkItem
(
13436
,
"https://github.com/dotnet/roslyn/issues/13436"
)]
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsRemoveDocCommentNode
)]
public
async
Task
RemovesTag_TrailingTextAfterTag
()
{
var
initial
=
@"class Program
{
/// <summary>
///
/// </summary>
/// <param [|name=""a""|]></param> a
public void Fizz(int value) {}
}
"
;
var
expected
=
@"class Program
{
/// <summary>
///
/// </summary>
/// a
public void Fizz(int value) {}
}
"
;
await
TestAsync
(
initial
,
expected
);
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsRemoveDocCommentNode
)]
public
async
Task
RemovesDuplicateParamTag_RawTextBeforeAndAfterNode
()
{
...
...
src/EditorFeatures/VisualBasicTest/DocumentationComments/CodeFixes/RemoveDocCommentNodeCodeFixProviderTests.vb
浏览文件 @
dfe76442
...
...
@@ -139,6 +139,60 @@ End Class"
Await
TestAsync
(
initial
,
expected
)
End
Function
<
WorkItem
(
13436
,
"https://github.com/dotnet/roslyn/issues/13436"
)
>
<
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsRemoveDocCommentNode
)
>
Public
Async
Function
RemovesParamTag_BothParamTagsOnSameLine
()
As
Task
Dim
initial
=
"Class Program
''' <summary>
'''
''' </summary>
''' [|<param name=
""
a
""
></param>|]<param name=
""
value
""
></param>
Sub Fizz(ByVal value As Integer)
End Sub
End Class"
Dim
expected
=
"Class Program
''' <summary>
'''
''' </summary>
''' <param name=
""
value
""
></param>
Sub Fizz(ByVal value As Integer)
End Sub
End Class"
Await
TestAsync
(
initial
,
expected
)
End
Function
<
WorkItem
(
13436
,
"https://github.com/dotnet/roslyn/issues/13436"
)
>
<
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsRemoveDocCommentNode
)
>
Public
Async
Function
RemovesParamTag_TrailingText1
()
As
Task
Dim
initial
=
"Class Program
''' <summary>
'''
''' </summary>
''' [|<param name=
""
a
""
></param>|] a
''' <param name=
""
value
""
></param>
Sub Fizz(ByVal value As Integer)
End Sub
End Class"
Dim
expected
=
"Class Program
''' <summary>
'''
''' </summary>
''' a
''' <param name=
""
value
""
></param>
Sub Fizz(ByVal value As Integer)
End Sub
End Class"
Await
TestAsync
(
initial
,
expected
)
End
Function
<
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsRemoveDocCommentNode
)
>
Public
Async
Function
RemovesDuplicateParamTag_BothParamTagsOnSameLine_NothingBetweenThem
()
As
Task
Dim
initial
=
...
...
src/Features/CSharp/Portable/DocumentationComments/CodeFixes/CSharpRemoveDocCommentNodeCodeFixProvider.cs
浏览文件 @
dfe76442
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using
System
;
using
System.Collections.Immutable
;
using
System.Composition
;
using
Microsoft.CodeAnalysis.CodeFixes
;
...
...
@@ -10,7 +11,8 @@ namespace Microsoft.CodeAnalysis.DiagnosticComments.CodeFixes
{
[
ExportCodeFixProvider
(
LanguageNames
.
CSharp
,
Name
=
PredefinedCodeFixProviderNames
.
RemoveDocCommentNode
),
Shared
]
[
ExtensionOrder
(
After
=
PredefinedCodeFixProviderNames
.
ImplementInterface
)]
internal
class
CSharpRemoveDocCommentNodeCodeFixProvider
:
AbstractRemoveDocCommentNodeCodeFixProvider
<
XmlElementSyntax
>
internal
class
CSharpRemoveDocCommentNodeCodeFixProvider
:
AbstractRemoveDocCommentNodeCodeFixProvider
<
XmlElementSyntax
,
XmlTextSyntax
>
{
/// <summary>
/// Duplicate param tag
...
...
@@ -33,5 +35,24 @@ internal class CSharpRemoveDocCommentNodeCodeFixProvider : AbstractRemoveDocComm
protected
override
SyntaxTriviaList
GetRevisedDocCommentTrivia
(
string
docCommentText
)
=>
SyntaxFactory
.
ParseLeadingTrivia
(
docCommentText
);
protected
override
bool
IsXmlWhitespaceToken
(
SyntaxToken
token
)
=>
token
.
Kind
()
==
SyntaxKind
.
XmlTextLiteralToken
&&
IsWhitespace
(
token
.
Text
);
protected
override
bool
IsXmlNewLineToken
(
SyntaxToken
token
)
=>
token
.
Kind
()
==
SyntaxKind
.
XmlTextLiteralNewLineToken
;
private
bool
IsWhitespace
(
string
text
)
{
foreach
(
var
c
in
text
)
{
if
(!
SyntaxFacts
.
IsWhitespace
(
c
))
{
return
false
;
}
}
return
true
;
}
}
}
\ No newline at end of file
src/Features/Core/Portable/DocumentationComments/CodeFixes/AbstractRemoveDocCommentNodeCodeFixProvider.cs
浏览文件 @
dfe76442
...
...
@@ -3,6 +3,7 @@
using
System
;
using
System.Collections.Generic
;
using
System.Collections.Immutable
;
using
System.Diagnostics
;
using
System.Linq
;
using
System.Threading
;
using
System.Threading.Tasks
;
...
...
@@ -12,8 +13,9 @@
namespace
Microsoft.CodeAnalysis.DiagnosticComments.CodeFixes
{
internal
abstract
class
AbstractRemoveDocCommentNodeCodeFixProvider
<
TXmlElementSyntax
>
:
CodeFixProvider
internal
abstract
class
AbstractRemoveDocCommentNodeCodeFixProvider
<
TXmlElementSyntax
,
TXmlTextSyntax
>
:
CodeFixProvider
where
TXmlElementSyntax
:
SyntaxNode
where
TXmlTextSyntax
:
SyntaxNode
{
public
override
FixAllProvider
GetFixAllProvider
()
=>
WellKnownFixAllProviders
.
BatchFixer
;
...
...
@@ -23,6 +25,9 @@ internal abstract class AbstractRemoveDocCommentNodeCodeFixProvider<TXmlElementS
protected
abstract
SyntaxTriviaList
GetRevisedDocCommentTrivia
(
string
docCommentText
);
protected
abstract
bool
IsXmlNewLineToken
(
SyntaxToken
token
);
protected
abstract
bool
IsXmlWhitespaceToken
(
SyntaxToken
token
);
public
async
sealed
override
Task
RegisterCodeFixesAsync
(
CodeFixContext
context
)
{
var
root
=
await
context
.
Document
.
GetSyntaxRootAsync
(
context
.
CancellationToken
).
ConfigureAwait
(
false
);
...
...
@@ -60,9 +65,8 @@ private TXmlElementSyntax GetParamNode(SyntaxNode root, TextSpan span, Cancellat
// If, perhaps, this specific node is not directly preceded by the comment marker node,
// it will be preceded by another XML node
var
paramNodeIndex
=
paramNodeSiblings
.
IndexOf
(
paramNode
);
var
previousNodeTextTrimmed
=
paramNodeSiblings
[
paramNodeIndex
-
1
].
ToFullString
().
Trim
();
if
(
previousNodeTextTrimmed
==
string
.
Empty
||
previousNodeTextTrimmed
==
DocCommentSignifierToken
)
if
(
ShouldRemovePreviousSibling
(
paramNodeSiblings
,
paramNodeIndex
)
)
{
removedNodes
.
Add
(
paramNodeSiblings
[
paramNodeIndex
-
1
]);
}
...
...
@@ -74,6 +78,49 @@ private TXmlElementSyntax GetParamNode(SyntaxNode root, TextSpan span, Cancellat
return
document
.
WithSyntaxRoot
(
newRoot
);
}
private
bool
ShouldRemovePreviousSibling
(
List
<
SyntaxNode
>
paramNodeSiblings
,
int
paramNodeIndex
)
{
if
(
paramNodeIndex
>
0
)
{
var
previousNodeTextTrimmed
=
paramNodeSiblings
[
paramNodeIndex
-
1
].
ToFullString
().
Trim
();
if
(
previousNodeTextTrimmed
==
string
.
Empty
||
previousNodeTextTrimmed
==
DocCommentSignifierToken
)
{
// Only remove the preceding /// if this param node is also the only thing on this line.
if
(
paramNodeIndex
+
1
<
paramNodeSiblings
.
Count
)
{
var
nextSibling
=
paramNodeSiblings
[
paramNodeIndex
+
1
];
var
textSyntax
=
nextSibling
as
TXmlTextSyntax
;
if
(
textSyntax
!=
null
)
{
// Walk the next text block forward, making sure we only see whitespace
// until we hit the next newline. If that's all we can remove the preceding
// '///'. Otherwise we'll want to keep it to keep whatever comes after
// this node valid.
foreach
(
var
child
in
textSyntax
.
ChildNodesAndTokens
())
{
Debug
.
Assert
(
child
.
IsToken
,
"All children of an XmlTextSyntax must be tokens"
);
if
(
IsXmlWhitespaceToken
(
child
.
AsToken
()))
{
continue
;
}
if
(
IsXmlNewLineToken
(
child
.
AsToken
()))
{
return
true
;
}
return
false
;
}
}
}
}
}
return
false
;
}
private
class
MyCodeAction
:
CodeAction
.
DocumentChangeAction
{
public
MyCodeAction
(
Func
<
CancellationToken
,
Task
<
Document
>>
createChangedDocument
)
...
...
src/Features/VisualBasic/Portable/DocumentationComments/CodeFixes/VisualBasicRemoveDocCommentNodeCodeFixProvider.vb
浏览文件 @
dfe76442
...
...
@@ -9,7 +9,7 @@ Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Namespace
Microsoft.CodeAnalysis.DiagnosticComments.CodeFixes
<
ExportCodeFixProvider
(
LanguageNames
.
VisualBasic
,
Name
:
=
PredefinedCodeFixProviderNames
.
RemoveDocCommentNode
),
[
Shared
]
>
Friend
Class
VisualBasicRemoveDocCommentNodeCodeFixProvider
Inherits
AbstractRemoveDocCommentNodeCodeFixProvider
(
Of
XmlElementSyntax
)
Inherits
AbstractRemoveDocCommentNodeCodeFixProvider
(
Of
XmlElementSyntax
,
XmlTextSyntax
)
''' <summary>
''' XML comment tag with identical attributes
...
...
@@ -58,5 +58,23 @@ Namespace Microsoft.CodeAnalysis.DiagnosticComments.CodeFixes
Protected
Overrides
Function
GetRevisedDocCommentTrivia
(
docCommentText
As
String
)
As
SyntaxTriviaList
Return
SyntaxFactory
.
ParseLeadingTrivia
(
docCommentText
)
End
Function
Protected
Overrides
Function
IsXmlWhitespaceToken
(
token
As
SyntaxToken
)
As
Boolean
Return
token
.
Kind
()
=
SyntaxKind
.
XmlTextLiteralToken
AndAlso
IsWhitespace
(
token
.
Text
)
End
Function
Protected
Overrides
Function
IsXmlNewLineToken
(
token
As
SyntaxToken
)
As
Boolean
Return
token
.
Kind
()
=
SyntaxKind
.
DocumentationCommentLineBreakToken
End
Function
Private
Shared
Function
IsWhitespace
(
text
As
String
)
As
Boolean
For
Each
c
In
text
If
Not
SyntaxFacts
.
IsWhitespace
(
c
)
Then
Return
False
End
If
Next
Return
True
End
Function
End
Class
End
Namespace
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录