Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
徽霖
Vscode
提交
5bf5fc2a
V
Vscode
项目概览
徽霖
/
Vscode
通知
9
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
Vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5bf5fc2a
编写于
11月 14, 2016
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
account for bad syntax in static snippets, #3210
上级
62af23b9
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
38 addition
and
15 deletion
+38
-15
src/vs/editor/common/modes.ts
src/vs/editor/common/modes.ts
+4
-1
src/vs/editor/common/modes/snippetsRegistry.ts
src/vs/editor/common/modes/snippetsRegistry.ts
+1
-1
src/vs/editor/contrib/snippet/common/snippet.ts
src/vs/editor/contrib/snippet/common/snippet.ts
+11
-5
src/vs/editor/contrib/snippet/test/common/snippet.test.ts
src/vs/editor/contrib/snippet/test/common/snippet.test.ts
+17
-0
src/vs/editor/contrib/suggest/browser/suggestController.ts
src/vs/editor/contrib/suggest/browser/suggestController.ts
+5
-6
src/vs/monaco.d.ts
src/vs/monaco.d.ts
+0
-2
未找到文件。
src/vs/editor/common/modes.ts
浏览文件 @
5bf5fc2a
...
...
@@ -169,7 +169,10 @@ export type SuggestionType = 'method'
|
'
reference
'
|
'
customcolor
'
;
export
type
SnippetType
=
'
internal
'
|
'
textmate
'
;
/**
* @internal
*/
export
type
SnippetType
=
'
internal
'
|
'
badtextmate
'
|
'
textmate
'
;
/**
* @internal
...
...
src/vs/editor/common/modes/snippetsRegistry.ts
浏览文件 @
5bf5fc2a
...
...
@@ -107,7 +107,7 @@ class SnippetsRegistry implements ISnippetsRegistry {
documentation
:
s
.
description
,
insertText
:
s
.
codeSnippet
,
noAutoAccept
:
true
,
snippetType
:
'
textmate
'
,
snippetType
:
'
bad
textmate
'
,
overwriteBefore
});
...
...
src/vs/editor/contrib/snippet/common/snippet.ts
浏览文件 @
5bf5fc2a
...
...
@@ -29,21 +29,21 @@ export interface ICodeSnippet {
export
class
CodeSnippet
implements
ICodeSnippet
{
static
fromTextmate
(
template
:
string
):
CodeSnippet
{
static
fromTextmate
(
template
:
string
,
variablesAsPlaceholder
:
boolean
=
true
):
CodeSnippet
{
const
marker
=
new
SnippetParser
(
true
,
false
).
parse
(
template
);
const
snippet
=
new
CodeSnippet
();
_fillCodeSnippetFromMarker
(
snippet
,
marker
);
_fillCodeSnippetFromMarker
(
snippet
,
marker
,
variablesAsPlaceholder
);
return
snippet
;
}
static
fromInternal
(
template
:
string
):
CodeSnippet
{
const
marker
=
new
SnippetParser
(
false
,
true
).
parse
(
template
);
const
snippet
=
new
CodeSnippet
();
_fillCodeSnippetFromMarker
(
snippet
,
marker
);
_fillCodeSnippetFromMarker
(
snippet
,
marker
,
true
);
return
snippet
;
}
static
plain
(
template
:
string
):
CodeSnippet
{
static
none
(
template
:
string
):
CodeSnippet
{
const
snippet
=
new
CodeSnippet
();
snippet
.
lines
=
template
.
split
(
/
\r\n
|
\n
|
\r
/
);
return
snippet
;
...
...
@@ -465,7 +465,7 @@ function _convertExternalSnippet(snippet: string, snippetType: ExternalSnippetTy
return
convertedSnippet
;
};
function
_fillCodeSnippetFromMarker
(
snippet
:
CodeSnippet
,
marker
:
Marker
[])
{
function
_fillCodeSnippetFromMarker
(
snippet
:
CodeSnippet
,
marker
:
Marker
[]
,
variablesAsPlaceholder
:
boolean
)
{
let
placeHolders
:
{
[
id
:
string
]:
IPlaceHolder
}
=
Object
.
create
(
null
);
...
...
@@ -480,6 +480,12 @@ function _fillCodeSnippetFromMarker(snippet: CodeSnippet, marker: Marker[]) {
snippet
.
lines
.
push
(...
lines
);
}
else
if
(
marker
instanceof
Placeholder
)
{
if
(
marker
.
isVariable
&&
!
variablesAsPlaceholder
)
{
stack
.
unshift
(...
marker
.
value
);
continue
;
}
// TODO - not every variable is a placeholder
let
placeHolder
=
placeHolders
[
marker
.
name
];
if
(
!
placeHolder
)
{
...
...
src/vs/editor/contrib/snippet/test/common/snippet.test.ts
浏览文件 @
5bf5fc2a
...
...
@@ -85,6 +85,23 @@ suite('Editor Contrib - Snippets', () => {
);
});
test
(
'
Variables vs Placeholders
'
,
()
=>
{
let
snippet
=
CodeSnippet
.
fromTextmate
(
'
${first}-${2}-${second}-${1}
'
,
true
);
assert
.
deepEqual
(
snippet
.
lines
,
[
'
first--second-
'
]);
assert
.
equal
(
snippet
.
placeHolders
.
length
,
4
);
assert
.
equal
(
snippet
.
placeHolders
[
0
].
id
,
'
first
'
);
assert
.
equal
(
snippet
.
placeHolders
[
1
].
id
,
'
second
'
);
assert
.
equal
(
snippet
.
placeHolders
[
2
].
id
,
'
1
'
);
assert
.
equal
(
snippet
.
placeHolders
[
3
].
id
,
'
2
'
);
snippet
=
CodeSnippet
.
fromTextmate
(
'
${first}-${2}-${second}-${1}
'
,
false
);
assert
.
deepEqual
(
snippet
.
lines
,
[
'
---
'
]);
assert
.
equal
(
snippet
.
placeHolders
.
length
,
2
);
assert
.
equal
(
snippet
.
placeHolders
[
0
].
id
,
'
1
'
);
assert
.
equal
(
snippet
.
placeHolders
[
1
].
id
,
'
2
'
);
});
test
(
'
nested placeholder
'
,
()
=>
{
let
snippet
=
CodeSnippet
.
fromTextmate
([
'
<div${1: id="${2:some_id}"}>
'
,
...
...
src/vs/editor/contrib/suggest/browser/suggestController.ts
浏览文件 @
5bf5fc2a
...
...
@@ -77,12 +77,11 @@ export class SuggestController implements IEditorContribution {
}
private
static
_codeSnippetForSuggestion
({
suggestion
}:
ICompletionItem
):
CodeSnippet
{
if
(
suggestion
.
snippetType
===
'
textmate
'
)
{
return
CodeSnippet
.
fromTextmate
(
suggestion
.
insertText
);
}
else
if
(
suggestion
.
snippetType
===
'
internal
'
)
{
return
CodeSnippet
.
fromInternal
(
suggestion
.
insertText
);
}
else
{
return
CodeSnippet
.
plain
(
suggestion
.
insertText
);
switch
(
suggestion
.
snippetType
)
{
case
'
badtextmate
'
:
return
CodeSnippet
.
fromTextmate
(
suggestion
.
insertText
);
case
'
textmate
'
:
return
CodeSnippet
.
fromTextmate
(
suggestion
.
insertText
,
false
);
case
'
internal
'
:
return
CodeSnippet
.
fromInternal
(
suggestion
.
insertText
);
default
:
CodeSnippet
.
none
(
suggestion
.
insertText
);
}
}
...
...
src/vs/monaco.d.ts
浏览文件 @
5bf5fc2a
...
...
@@ -4334,8 +4334,6 @@ declare module monaco.languages {
provideHover
(
model
:
editor
.
IReadOnlyModel
,
position
:
Position
,
token
:
CancellationToken
):
Hover
|
Thenable
<
Hover
>
;
}
export
type
SnippetType
=
'
internal
'
|
'
textmate
'
;
/**
* Interface used to quick fix typing errors while accesing member fields.
*/
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录