Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
496603e4
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
496603e4
编写于
6月 02, 2017
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix #27898
上级
fff2f376
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
32 addition
and
10 deletion
+32
-10
src/vs/editor/contrib/snippet/browser/snippetParser.ts
src/vs/editor/contrib/snippet/browser/snippetParser.ts
+5
-6
src/vs/editor/contrib/snippet/browser/snippetSession.ts
src/vs/editor/contrib/snippet/browser/snippetSession.ts
+4
-4
src/vs/editor/contrib/snippet/test/browser/snippetController2.test.ts
...r/contrib/snippet/test/browser/snippetController2.test.ts
+23
-0
未找到文件。
src/vs/editor/contrib/snippet/browser/snippetParser.ts
浏览文件 @
496603e4
...
...
@@ -331,8 +331,8 @@ export class SnippetParser {
return
value
.
replace
(
/
\$
|}|
\\
/g
,
'
\\
$&
'
);
}
static
parse
(
template
:
string
):
TextmateSnippet
{
const
marker
=
new
SnippetParser
(
true
,
false
).
parse
(
template
,
true
);
static
parse
(
template
:
string
,
enforceFinalTabstop
?:
boolean
):
TextmateSnippet
{
const
marker
=
new
SnippetParser
(
true
,
false
).
parse
(
template
,
true
,
enforceFinalTabstop
);
return
new
TextmateSnippet
(
marker
);
}
...
...
@@ -351,7 +351,7 @@ export class SnippetParser {
return
Marker
.
toString
(
this
.
parse
(
value
));
}
parse
(
value
:
string
,
insertFinalTabstop
?:
boolean
):
Marker
[]
{
parse
(
value
:
string
,
insertFinalTabstop
?:
boolean
,
enforceFinalTabstop
?:
boolean
):
Marker
[]
{
const
marker
:
Marker
[]
=
[];
this
.
_scanner
.
text
(
value
);
...
...
@@ -395,9 +395,8 @@ export class SnippetParser {
walk
(
marker
,
placeholderDefaultValues
);
if
(
insertFinalTabstop
&&
placeholderDefaultValues
.
size
>
0
&&
!
placeholderDefaultValues
.
has
(
'
0
'
)
!
placeholderDefaultValues
.
has
(
'
0
'
)
&&
// there is no final tabstop
(
insertFinalTabstop
&&
placeholderDefaultValues
.
size
>
0
||
enforceFinalTabstop
)
)
{
// the snippet uses placeholders but has no
// final tabstop defined -> insert at the end
...
...
src/vs/editor/contrib/snippet/browser/snippetSession.ts
浏览文件 @
496603e4
...
...
@@ -243,7 +243,7 @@ export class SnippetSession {
return
selection
;
}
static
createEditsAndSnippets
(
editor
:
ICommonCodeEditor
,
template
:
string
,
overwriteBefore
:
number
,
overwriteAfter
:
number
):
{
edits
:
IIdentifiedSingleEditOperation
[],
snippets
:
OneSnippet
[]
}
{
static
createEditsAndSnippets
(
editor
:
ICommonCodeEditor
,
template
:
string
,
overwriteBefore
:
number
,
overwriteAfter
:
number
,
enforceFinalTabstop
:
boolean
):
{
edits
:
IIdentifiedSingleEditOperation
[],
snippets
:
OneSnippet
[]
}
{
const
model
=
editor
.
getModel
();
const
edits
:
IIdentifiedSingleEditOperation
[]
=
[];
...
...
@@ -288,7 +288,7 @@ export class SnippetSession {
const
start
=
snippetSelection
.
getStartPosition
();
const
adjustedTemplate
=
SnippetSession
.
adjustWhitespace
(
model
,
start
,
template
);
const
snippet
=
SnippetParser
.
parse
(
adjustedTemplate
).
resolveVariables
(
new
EditorSnippetVariableResolver
(
model
,
selection
));
const
snippet
=
SnippetParser
.
parse
(
adjustedTemplate
,
enforceFinalTabstop
).
resolveVariables
(
new
EditorSnippetVariableResolver
(
model
,
selection
));
const
offset
=
model
.
getOffsetAt
(
start
)
+
delta
;
delta
+=
snippet
.
text
.
length
-
model
.
getValueLengthInRange
(
snippetSelection
);
...
...
@@ -325,7 +325,7 @@ export class SnippetSession {
const
model
=
this
.
_editor
.
getModel
();
// make insert edit and start with first selections
const
{
edits
,
snippets
}
=
SnippetSession
.
createEditsAndSnippets
(
this
.
_editor
,
this
.
_template
,
this
.
_overwriteBefore
,
this
.
_overwriteAfter
);
const
{
edits
,
snippets
}
=
SnippetSession
.
createEditsAndSnippets
(
this
.
_editor
,
this
.
_template
,
this
.
_overwriteBefore
,
this
.
_overwriteAfter
,
false
);
this
.
_snippets
=
snippets
;
this
.
_editor
.
setSelections
(
model
.
pushEditOperations
(
this
.
_editor
.
getSelections
(),
edits
,
undoEdits
=>
{
...
...
@@ -338,7 +338,7 @@ export class SnippetSession {
}
merge
(
template
:
string
,
overwriteBefore
:
number
=
0
,
overwriteAfter
:
number
=
0
):
void
{
const
{
edits
,
snippets
}
=
SnippetSession
.
createEditsAndSnippets
(
this
.
_editor
,
template
,
overwriteBefore
,
overwriteAfter
);
const
{
edits
,
snippets
}
=
SnippetSession
.
createEditsAndSnippets
(
this
.
_editor
,
template
,
overwriteBefore
,
overwriteAfter
,
true
);
this
.
_editor
.
setSelections
(
this
.
_editor
.
getModel
().
pushEditOperations
(
this
.
_editor
.
getSelections
(),
edits
,
undoEdits
=>
{
...
...
src/vs/editor/contrib/snippet/test/browser/snippetController2.test.ts
浏览文件 @
496603e4
...
...
@@ -175,6 +175,29 @@ suite('SnippetController2', function () {
ctrl
.
insert
(
'
farboo
'
);
assertSelections
(
editor
,
new
Selection
(
1
,
7
,
1
,
7
),
new
Selection
(
2
,
11
,
2
,
11
));
assertContextKeys
(
contextKeys
,
true
,
false
,
true
);
ctrl
.
next
();
assertSelections
(
editor
,
new
Selection
(
1
,
7
,
1
,
7
),
new
Selection
(
2
,
11
,
2
,
11
));
assertContextKeys
(
contextKeys
,
false
,
false
,
false
);
});
test
(
'
Nested snippets without final placeholder jumps to next outer placeholder, #27898
'
,
function
()
{
const
ctrl
=
new
SnippetController2
(
editor
,
contextKeys
);
ctrl
.
insert
(
'
for(const ${1:element} of ${2:array}) {$0}
'
);
assertContextKeys
(
contextKeys
,
true
,
false
,
true
);
assertSelections
(
editor
,
new
Selection
(
1
,
11
,
1
,
18
),
new
Selection
(
2
,
15
,
2
,
22
));
ctrl
.
next
();
assertContextKeys
(
contextKeys
,
true
,
true
,
true
);
assertSelections
(
editor
,
new
Selection
(
1
,
22
,
1
,
27
),
new
Selection
(
2
,
26
,
2
,
31
));
ctrl
.
insert
(
'
document
'
);
assertContextKeys
(
contextKeys
,
true
,
true
,
true
);
assertSelections
(
editor
,
new
Selection
(
1
,
30
,
1
,
30
),
new
Selection
(
2
,
34
,
2
,
34
));
ctrl
.
next
();
assertContextKeys
(
contextKeys
,
false
,
false
,
false
);
});
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录