Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
b81f7485
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,发现更多精彩内容 >>
提交
b81f7485
编写于
5月 09, 2017
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add overwrite[Before|After] to SnippetSession
上级
b7499af7
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
41 addition
and
5 deletion
+41
-5
src/vs/editor/contrib/snippet/browser/editorSnippets.ts
src/vs/editor/contrib/snippet/browser/editorSnippets.ts
+26
-4
src/vs/editor/contrib/snippet/browser/snippetController2.ts
src/vs/editor/contrib/snippet/browser/snippetController2.ts
+1
-1
src/vs/editor/contrib/snippet/test/browser/editorSnippets.test.ts
...ditor/contrib/snippet/test/browser/editorSnippets.test.ts
+14
-0
未找到文件。
src/vs/editor/contrib/snippet/browser/editorSnippets.ts
浏览文件 @
b81f7485
...
...
@@ -166,13 +166,34 @@ export class SnippetSession {
return
templateLines
.
join
(
model
.
getEOL
());
}
static
adjustRange
(
model
:
IModel
,
range
:
Range
,
overwriteBefore
:
number
,
overwriteAfter
:
number
):
Range
{
if
(
overwriteBefore
!==
0
||
overwriteAfter
!==
0
)
{
let
{
startLineNumber
,
startColumn
,
endLineNumber
,
endColumn
}
=
range
;
startColumn
-=
overwriteBefore
;
endColumn
+=
overwriteAfter
;
range
=
Range
.
plusRange
(
range
,
{
startLineNumber
,
startColumn
,
endLineNumber
,
endColumn
,
});
range
=
model
.
validateRange
(
range
);
}
return
range
;
}
private
readonly
_editor
:
ICommonCodeEditor
;
private
readonly
_template
:
string
;
private
readonly
_overwriteBefore
:
number
;
private
readonly
_overwriteAfter
:
number
;
private
readonly
_snippets
:
OneSnippet
[];
constructor
(
editor
:
ICommonCodeEditor
,
template
:
string
)
{
constructor
(
editor
:
ICommonCodeEditor
,
template
:
string
,
overwriteBefore
:
number
=
0
,
overwriteAfter
:
number
=
0
)
{
this
.
_editor
=
editor
;
this
.
_template
=
template
;
this
.
_overwriteBefore
=
overwriteBefore
;
this
.
_overwriteAfter
=
overwriteAfter
;
this
.
_snippets
=
[];
}
...
...
@@ -186,16 +207,17 @@ export class SnippetSession {
let
model
=
this
.
_editor
.
getModel
();
for
(
const
selection
of
this
.
_editor
.
getSelections
())
{
const
start
=
selection
.
getStartPosition
();
const
range
=
SnippetSession
.
adjustRange
(
model
,
selection
,
this
.
_overwriteBefore
,
this
.
_overwriteAfter
);
const
start
=
range
.
getStartPosition
();
const
adjustedTemplate
=
SnippetSession
.
normalizeWhitespace
(
model
,
start
,
this
.
_template
);
const
snippet
=
SnippetParser
.
parse
(
adjustedTemplate
);
const
offset
=
model
.
getOffsetAt
(
start
)
+
delta
;
edits
.
push
(
EditOperation
.
replaceMove
(
selection
,
snippet
.
text
));
edits
.
push
(
EditOperation
.
replaceMove
(
range
,
snippet
.
text
));
this
.
_snippets
.
push
(
new
OneSnippet
(
this
.
_editor
,
snippet
,
offset
));
delta
+=
snippet
.
text
.
length
-
model
.
getValueLengthInRange
(
selection
);
delta
+=
snippet
.
text
.
length
-
model
.
getValueLengthInRange
(
range
);
}
// make insert edit and start with first selections
...
...
src/vs/editor/contrib/snippet/browser/snippetController2.ts
浏览文件 @
b81f7485
...
...
@@ -45,7 +45,7 @@ export class SnippetController2 {
}
insert
(
template
:
string
,
overwriteBefore
:
number
=
0
,
overwriteAfter
:
number
=
0
):
void
{
const
session
=
new
SnippetSession
(
this
.
_editor
,
template
);
const
session
=
new
SnippetSession
(
this
.
_editor
,
template
,
overwriteBefore
,
overwriteAfter
);
const
newLen
=
this
.
_snippetStack
.
unshift
(
session
);
if
(
newLen
===
1
)
{
this
.
_inSnippet
.
set
(
true
);
...
...
src/vs/editor/contrib/snippet/test/browser/editorSnippets.test.ts
浏览文件 @
b81f7485
...
...
@@ -6,6 +6,7 @@
import
*
as
assert
from
'
assert
'
;
import
{
Selection
}
from
'
vs/editor/common/core/selection
'
;
import
{
Range
}
from
'
vs/editor/common/core/range
'
;
import
{
IPosition
,
Position
}
from
'
vs/editor/common/core/position
'
;
import
{
SnippetSession
}
from
'
vs/editor/contrib/snippet/browser/editorSnippets
'
;
import
{
ICommonCodeEditor
}
from
'
vs/editor/common/editorCommon
'
;
...
...
@@ -51,6 +52,19 @@ suite('SnippetSession', function () {
assertNormalized
(
new
Position
(
2
,
3
),
'
foo
\r\t
bar
'
,
'
foo
\n
bar
'
);
});
test
(
'
adjust selection (overwrite[Before|After]
'
,
function
()
{
let
range
=
SnippetSession
.
adjustRange
(
model
,
new
Range
(
1
,
2
,
1
,
2
),
1
,
0
);
assert
.
ok
(
range
.
equalsRange
(
new
Range
(
1
,
1
,
1
,
2
)));
range
=
SnippetSession
.
adjustRange
(
model
,
new
Range
(
1
,
2
,
1
,
2
),
1111
,
0
);
assert
.
ok
(
range
.
equalsRange
(
new
Range
(
1
,
1
,
1
,
2
)));
range
=
SnippetSession
.
adjustRange
(
model
,
new
Range
(
1
,
2
,
1
,
2
),
0
,
10
);
assert
.
ok
(
range
.
equalsRange
(
new
Range
(
1
,
2
,
1
,
12
)));
range
=
SnippetSession
.
adjustRange
(
model
,
new
Range
(
1
,
2
,
1
,
2
),
0
,
10111
);
assert
.
ok
(
range
.
equalsRange
(
new
Range
(
1
,
2
,
1
,
17
)));
});
test
(
'
text edits & selection
'
,
function
()
{
const
session
=
new
SnippetSession
(
editor
,
'
foo${1:bar}foo$0
'
);
session
.
insert
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录