Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
760e583e
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,发现更多精彩内容 >>
提交
760e583e
编写于
10月 13, 2016
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Only format an open curly if it the first token on a line.
上级
3281d6b1
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
85 addition
and
7 deletion
+85
-7
src/EditorFeatures/CSharp/Formatting/CSharpEditorFormattingService.cs
...atures/CSharp/Formatting/CSharpEditorFormattingService.cs
+21
-5
src/EditorFeatures/CSharp/Formatting/Indentation/SmartTokenFormatter.cs
...ures/CSharp/Formatting/Indentation/SmartTokenFormatter.cs
+5
-2
src/EditorFeatures/CSharpTest/Formatting/FormattingEngineTests.cs
...orFeatures/CSharpTest/Formatting/FormattingEngineTests.cs
+59
-0
未找到文件。
src/EditorFeatures/CSharp/Formatting/CSharpEditorFormattingService.cs
浏览文件 @
760e583e
...
...
@@ -138,10 +138,25 @@ private static bool TokenShouldNotFormatOnReturn(SyntaxToken token)
return
!
token
.
IsKind
(
SyntaxKind
.
CloseParenToken
)
||
!
token
.
Parent
.
IsKind
(
SyntaxKind
.
UsingStatement
);
}
private
static
bool
TokenShouldNotFormatOnTypeChar
(
SyntaxToken
token
)
private
static
bool
TokenShouldNotFormatOnTypeChar
(
SyntaxToken
token
,
CancellationToken
cancellationToken
)
{
return
(
token
.
IsKind
(
SyntaxKind
.
CloseParenToken
)
&&
!
token
.
Parent
.
IsKind
(
SyntaxKind
.
UsingStatement
))
||
(
token
.
IsKind
(
SyntaxKind
.
ColonToken
)
&&
!(
token
.
Parent
.
IsKind
(
SyntaxKind
.
LabeledStatement
)
||
token
.
Parent
is
SwitchLabelSyntax
));
if
(
token
.
IsKind
(
SyntaxKind
.
CloseParenToken
)
&&
!
token
.
Parent
.
IsKind
(
SyntaxKind
.
UsingStatement
))
{
return
true
;
}
if
(
token
.
IsKind
(
SyntaxKind
.
ColonToken
)
&&
!(
token
.
Parent
.
IsKind
(
SyntaxKind
.
LabeledStatement
)
||
token
.
Parent
is
SwitchLabelSyntax
))
{
return
true
;
}
if
(
token
.
IsKind
(
SyntaxKind
.
OpenBraceToken
)
&&
!
token
.
IsFirstTokenOnLine
(
token
.
SyntaxTree
.
GetText
()))
{
return
true
;
}
return
false
;
}
public
async
Task
<
IList
<
TextChange
>>
GetFormattingChangesAsync
(
Document
document
,
char
typedChar
,
int
caretPosition
,
CancellationToken
cancellationToken
)
...
...
@@ -149,7 +164,7 @@ public async Task<IList<TextChange>> GetFormattingChangesAsync(Document document
var
formattingRules
=
this
.
GetFormattingRules
(
document
,
caretPosition
);
// first, find the token user just typed.
SyntaxToken
token
=
await
GetTokenBeforeTheCaretAsync
(
document
,
caretPosition
,
cancellationToken
).
ConfigureAwait
(
false
);
var
token
=
await
GetTokenBeforeTheCaretAsync
(
document
,
caretPosition
,
cancellationToken
).
ConfigureAwait
(
false
);
if
(
token
.
IsMissing
||
!
ValidSingleOrMultiCharactersTokenKind
(
typedChar
,
token
.
Kind
())
||
...
...
@@ -167,7 +182,8 @@ public async Task<IList<TextChange>> GetFormattingChangesAsync(Document document
// Check to see if any of the below. If not, bail.
// case 1: The token is ')' and the parent is an using statement.
// case 2: The token is ':' and the parent is either labelled statement or case switch or default switch
if
(
TokenShouldNotFormatOnTypeChar
(
token
))
//
if
(
TokenShouldNotFormatOnTypeChar
(
token
,
cancellationToken
))
{
return
null
;
}
...
...
src/EditorFeatures/CSharp/Formatting/Indentation/SmartTokenFormatter.cs
浏览文件 @
760e583e
...
...
@@ -68,7 +68,8 @@ private bool CloseBraceOfTryOrDoBlock(SyntaxToken endToken)
(
endToken
.
Parent
.
IsParentKind
(
SyntaxKind
.
TryStatement
)
||
endToken
.
Parent
.
IsParentKind
(
SyntaxKind
.
DoStatement
));
}
public
Task
<
IList
<
TextChange
>>
FormatTokenAsync
(
Workspace
workspace
,
SyntaxToken
token
,
CancellationToken
cancellationToken
)
public
Task
<
IList
<
TextChange
>>
FormatTokenAsync
(
Workspace
workspace
,
SyntaxToken
token
,
CancellationToken
cancellationToken
)
{
Contract
.
ThrowIfTrue
(
token
.
Kind
()
==
SyntaxKind
.
None
||
token
.
Kind
()
==
SyntaxKind
.
EndOfFileToken
);
...
...
@@ -100,7 +101,9 @@ public Task<IList<TextChange>> FormatTokenAsync(Workspace workspace, SyntaxToken
var
smartTokenformattingRules
=
(
new
SmartTokenFormattingRule
()).
Concat
(
_formattingRules
);
var
adjustedStartPosition
=
previousToken
.
SpanStart
;
var
indentStyle
=
_optionSet
.
GetOption
(
FormattingOptions
.
SmartIndent
,
LanguageNames
.
CSharp
);
if
(
token
.
IsKind
(
SyntaxKind
.
OpenBraceToken
)
&&
token
.
IsFirstTokenOnLine
(
token
.
SyntaxTree
.
GetText
())
&&
indentStyle
!=
FormattingOptions
.
IndentStyle
.
Smart
)
if
(
token
.
IsKind
(
SyntaxKind
.
OpenBraceToken
)
&&
token
.
IsFirstTokenOnLine
(
token
.
SyntaxTree
.
GetText
(
cancellationToken
))
&&
indentStyle
!=
FormattingOptions
.
IndentStyle
.
Smart
)
{
adjustedStartPosition
=
token
.
SpanStart
;
}
...
...
src/EditorFeatures/CSharpTest/Formatting/FormattingEngineTests.cs
浏览文件 @
760e583e
...
...
@@ -6,6 +6,7 @@
using
Microsoft.CodeAnalysis.CSharp
;
using
Microsoft.CodeAnalysis.Editor.Commands
;
using
Microsoft.CodeAnalysis.Editor.Implementation.Formatting
;
using
Microsoft.CodeAnalysis.Editor.Options
;
using
Microsoft.CodeAnalysis.Editor.Shared.Options
;
using
Microsoft.CodeAnalysis.Editor.UnitTests.Utilities
;
using
Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces
;
...
...
@@ -1142,6 +1143,64 @@ class C
await
AssertFormatAfterTypeCharAsync
(
code
,
expected
,
optionSet
);
}
[
WpfFact
,
WorkItem
(
4435
,
"https://github.com/dotnet/roslyn/issues/4435"
)]
[
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
SmartTokenFormatting
)]
public
async
Task
OpenCurlyNotFormattedIfNotAtStartOfLine
()
{
var
code
=
@"
class C
{
public int P {$$
}
"
;
var
expected
=
@"
class C
{
public int P {
}
"
;
var
optionSet
=
new
Dictionary
<
OptionKey
,
object
>
{
{
new
OptionKey
(
BraceCompletionOptions
.
EnableBraceCompletion
,
LanguageNames
.
CSharp
),
false
}
};
await
AssertFormatAfterTypeCharAsync
(
code
,
expected
);
}
[
WpfFact
,
WorkItem
(
4435
,
"https://github.com/dotnet/roslyn/issues/4435"
)]
[
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
SmartTokenFormatting
)]
public
async
Task
OpenCurlyFormattedIfAtStartOfLine
()
{
var
code
=
@"
class C
{
public int P
{$$
}
"
;
var
expected
=
@"
class C
{
public int P
{
}
"
;
var
optionSet
=
new
Dictionary
<
OptionKey
,
object
>
{
{
new
OptionKey
(
BraceCompletionOptions
.
EnableBraceCompletion
,
LanguageNames
.
CSharp
),
false
}
};
await
AssertFormatAfterTypeCharAsync
(
code
,
expected
);
}
[
WpfFact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
Formatting
)]
public
async
Task
DoNotFormatIncompleteBlockOnSingleLineIfNotTypingCloseCurly1
()
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录