Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
79702969
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,发现更多精彩内容 >>
提交
79702969
编写于
8月 12, 2015
作者:
A
Andrew Casey
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #4499 from amcasey/GH4396
Improve ResetCommand
上级
6f016acb
21fa949f
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
97 addition
and
22 deletion
+97
-22
src/InteractiveWindow/Editor/Commands/ResetCommand.cs
src/InteractiveWindow/Editor/Commands/ResetCommand.cs
+36
-22
src/InteractiveWindow/EditorTest/InteractiveWindowTests.cs
src/InteractiveWindow/EditorTest/InteractiveWindowTests.cs
+61
-0
未找到文件。
src/InteractiveWindow/Editor/Commands/ResetCommand.cs
浏览文件 @
79702969
...
...
@@ -16,6 +16,7 @@ internal sealed class ResetCommand : InteractiveWindowCommand
{
private
const
string
CommandName
=
"reset"
;
private
const
string
NoConfigParameterName
=
"noconfig"
;
private
static
readonly
int
NoConfigParameterNameLength
=
NoConfigParameterName
.
Length
;
private
readonly
IStandardClassificationService
_registry
;
[
ImportingConstructor
]
...
...
@@ -51,53 +52,66 @@ public override string CommandLine
public
override
Task
<
ExecutionResult
>
Execute
(
IInteractiveWindow
window
,
string
arguments
)
{
int
noConfigStart
,
noConfigEnd
;
if
(!
TryParseArguments
(
arguments
,
out
noConfigStart
,
out
noConfigEnd
))
bool
initialize
;
if
(!
TryParseArguments
(
arguments
,
out
initialize
))
{
ReportInvalidArguments
(
window
);
return
ExecutionResult
.
Failed
;
}
return
window
.
Operations
.
ResetAsync
(
initialize
:
noConfigStart
>
-
1
);
}
internal
static
string
BuildCommandLine
(
bool
initialize
)
{
string
result
=
CommandName
;
return
initialize
?
result
:
result
+
" "
+
NoConfigParameterName
;
return
window
.
Operations
.
ResetAsync
(
initialize
);
}
public
override
IEnumerable
<
ClassificationSpan
>
ClassifyArguments
(
ITextSnapshot
snapshot
,
Span
argumentsSpan
,
Span
spanToClassify
)
{
string
arguments
=
snapshot
.
GetText
(
argumentsSpan
);
int
argumentsStart
=
argumentsSpan
.
Start
;
foreach
(
var
pos
in
GetNoConfigPositions
(
arguments
))
{
var
snapshotSpan
=
new
SnapshotSpan
(
snapshot
,
new
Span
(
argumentsStart
+
pos
,
NoConfigParameterNameLength
));
yield
return
new
ClassificationSpan
(
snapshotSpan
,
_registry
.
Keyword
);
}
}
int
noConfigStart
,
noConfigEnd
;
if
(
TryParseArguments
(
arguments
,
out
noConfigStart
,
out
noConfigEnd
))
/// <remarks>
/// Internal for testing.
/// </remarks>
internal
static
IEnumerable
<
int
>
GetNoConfigPositions
(
string
arguments
)
{
int
startIndex
=
0
;
while
(
true
)
{
if
(
noConfigStart
>
-
1
)
int
index
=
arguments
.
IndexOf
(
NoConfigParameterName
,
startIndex
,
StringComparison
.
OrdinalIgnoreCase
);
if
(
index
<
0
)
yield
break
;
if
((
index
==
0
||
char
.
IsWhiteSpace
(
arguments
[
index
-
1
]))
&&
(
index
+
NoConfigParameterNameLength
==
arguments
.
Length
||
char
.
IsWhiteSpace
(
arguments
[
index
+
NoConfigParameterNameLength
])))
{
yield
return
new
ClassificationSpan
(
new
SnapshotSpan
(
snapshot
,
Span
.
FromBounds
(
argumentsSpan
.
Start
+
noConfigStart
,
argumentsSpan
.
Start
+
noConfigEnd
)),
_registry
.
Keyword
)
;
yield
return
index
;
}
startIndex
=
index
+
NoConfigParameterNameLength
;
}
}
private
static
bool
TryParseArguments
(
string
arguments
,
out
int
noConfigStart
,
out
int
noConfigEnd
)
/// <remarks>
/// Internal for testing.
/// </remarks>
internal
static
bool
TryParseArguments
(
string
arguments
,
out
bool
initialize
)
{
noConfigStart
=
noConfigEnd
=
-
1
;
string
noconfig
=
arguments
.
Trim
();
if
(
noconfig
.
Length
==
0
)
var
trimmed
=
arguments
.
Trim
();
if
(
trimmed
.
Length
==
0
)
{
initialize
=
true
;
return
true
;
}
if
(
string
.
Compare
(
noconfig
,
NoConfigParameterName
,
StringComparison
.
OrdinalIgnoreCase
)
==
0
)
else
if
(
string
.
Equals
(
trimmed
,
NoConfigParameterName
,
StringComparison
.
OrdinalIgnoreCase
))
{
noConfigStart
=
arguments
.
IndexOf
(
noconfig
,
StringComparison
.
OrdinalIgnoreCase
);
noConfigEnd
=
noConfigStart
+
noconfig
.
Length
;
initialize
=
false
;
return
true
;
}
initialize
=
false
;
return
false
;
}
}
...
...
src/InteractiveWindow/EditorTest/InteractiveWindowTests.cs
浏览文件 @
79702969
...
...
@@ -636,5 +636,66 @@ public void CheckHistoryPreviousAfterReset()
Window
.
Operations
.
HistoryPrevious
();
Assert
.
Equal
(
resetCommand
,
GetTextFromCurrentLanguageBuffer
());
}
[
Fact
]
public
void
ResetCommandArgumentParsing_Success
()
{
bool
initialize
;
Assert
.
True
(
ResetCommand
.
TryParseArguments
(
""
,
out
initialize
));
Assert
.
True
(
initialize
);
Assert
.
True
(
ResetCommand
.
TryParseArguments
(
" "
,
out
initialize
));
Assert
.
True
(
initialize
);
Assert
.
True
(
ResetCommand
.
TryParseArguments
(
"\r\n"
,
out
initialize
));
Assert
.
True
(
initialize
);
Assert
.
True
(
ResetCommand
.
TryParseArguments
(
"noconfig"
,
out
initialize
));
Assert
.
False
(
initialize
);
Assert
.
True
(
ResetCommand
.
TryParseArguments
(
" noconfig "
,
out
initialize
));
Assert
.
False
(
initialize
);
Assert
.
True
(
ResetCommand
.
TryParseArguments
(
"\r\nnoconfig\r\n"
,
out
initialize
));
Assert
.
False
(
initialize
);
Assert
.
True
(
ResetCommand
.
TryParseArguments
(
"nOcOnfIg"
,
out
initialize
));
Assert
.
False
(
initialize
);
}
[
Fact
]
public
void
ResetCommandArgumentParsing_Failure
()
{
bool
initialize
;
Assert
.
False
(
ResetCommand
.
TryParseArguments
(
"a"
,
out
initialize
));
Assert
.
False
(
ResetCommand
.
TryParseArguments
(
"noconfi"
,
out
initialize
));
Assert
.
False
(
ResetCommand
.
TryParseArguments
(
"noconfig1"
,
out
initialize
));
Assert
.
False
(
ResetCommand
.
TryParseArguments
(
"noconfig 1"
,
out
initialize
));
Assert
.
False
(
ResetCommand
.
TryParseArguments
(
"1 noconfig"
,
out
initialize
));
Assert
.
False
(
ResetCommand
.
TryParseArguments
(
"noconfig\r\na"
,
out
initialize
));
}
[
Fact
]
public
void
ResetCommandNoConfigClassification
()
{
Assert
.
Empty
(
ResetCommand
.
GetNoConfigPositions
(
""
));
Assert
.
Empty
(
ResetCommand
.
GetNoConfigPositions
(
"a"
));
Assert
.
Empty
(
ResetCommand
.
GetNoConfigPositions
(
"noconfi"
));
Assert
.
Empty
(
ResetCommand
.
GetNoConfigPositions
(
"noconfig1"
));
Assert
.
Empty
(
ResetCommand
.
GetNoConfigPositions
(
"1noconfig"
));
Assert
.
Empty
(
ResetCommand
.
GetNoConfigPositions
(
"1noconfig1"
));
Assert
.
Equal
(
new
[]
{
0
},
ResetCommand
.
GetNoConfigPositions
(
"noconfig"
));
Assert
.
Equal
(
new
[]
{
0
},
ResetCommand
.
GetNoConfigPositions
(
"noconfig "
));
Assert
.
Equal
(
new
[]
{
1
},
ResetCommand
.
GetNoConfigPositions
(
" noconfig"
));
Assert
.
Equal
(
new
[]
{
1
},
ResetCommand
.
GetNoConfigPositions
(
" noconfig "
));
Assert
.
Equal
(
new
[]
{
2
},
ResetCommand
.
GetNoConfigPositions
(
"\r\nnoconfig"
));
Assert
.
Equal
(
new
[]
{
0
},
ResetCommand
.
GetNoConfigPositions
(
"noconfig\r\n"
));
Assert
.
Equal
(
new
[]
{
2
},
ResetCommand
.
GetNoConfigPositions
(
"\r\nnoconfig\r\n"
));
Assert
.
Equal
(
new
[]
{
6
},
ResetCommand
.
GetNoConfigPositions
(
"error noconfig"
));
Assert
.
Equal
(
new
[]
{
0
,
9
},
ResetCommand
.
GetNoConfigPositions
(
"noconfig noconfig"
));
Assert
.
Equal
(
new
[]
{
0
,
15
},
ResetCommand
.
GetNoConfigPositions
(
"noconfig error noconfig"
));
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录