Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
d859157d
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,发现更多精彩内容 >>
未验证
提交
d859157d
编写于
10月 02, 2019
作者:
J
Johannes Rieken
提交者:
GitHub
10月 02, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #81297 from jeanp413/fix-snippet-tranformation-escape
Fix character escaping in snippet transformation
上级
ca8a10ba
1dd2e64c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
25 addition
and
16 deletion
+25
-16
src/vs/editor/contrib/snippet/snippetParser.ts
src/vs/editor/contrib/snippet/snippetParser.ts
+12
-16
src/vs/editor/contrib/snippet/test/snippetParser.test.ts
src/vs/editor/contrib/snippet/test/snippetParser.test.ts
+13
-0
未找到文件。
src/vs/editor/contrib/snippet/snippetParser.ts
浏览文件 @
d859157d
...
...
@@ -664,27 +664,23 @@ export class SnippetParser {
}
private
_until
(
type
:
TokenType
):
false
|
string
{
if
(
this
.
_token
.
type
===
TokenType
.
EOF
)
{
return
false
;
}
let
res
=
''
;
let
pos
=
this
.
_token
.
pos
;
let
prevToken
=
<
Token
>
{
type
:
TokenType
.
EOF
,
pos
:
0
,
len
:
0
};
while
(
this
.
_token
.
type
!==
type
||
prevToken
.
type
===
TokenType
.
Backslash
)
{
if
(
this
.
_token
.
type
===
type
)
{
res
+=
this
.
_scanner
.
value
.
substring
(
pos
,
prevToken
.
pos
);
pos
=
this
.
_token
.
pos
;
}
prevToken
=
this
.
_token
;
this
.
_token
=
this
.
_scanner
.
next
();
const
start
=
this
.
_token
;
while
(
this
.
_token
.
type
!==
type
)
{
if
(
this
.
_token
.
type
===
TokenType
.
EOF
)
{
return
false
;
}
else
if
(
this
.
_token
.
type
===
TokenType
.
Backslash
)
{
const
nextToken
=
this
.
_scanner
.
next
();
if
(
nextToken
.
type
!==
TokenType
.
Dollar
&&
nextToken
.
type
!==
TokenType
.
CurlyClose
&&
nextToken
.
type
!==
TokenType
.
Backslash
)
{
return
false
;
}
}
this
.
_token
=
this
.
_scanner
.
next
();
}
res
+=
this
.
_scanner
.
value
.
substring
(
pos
,
this
.
_token
.
pos
);
const
value
=
this
.
_scanner
.
value
.
substring
(
start
.
pos
,
this
.
_token
.
pos
).
replace
(
/
\\(\$
|}|
\\)
/g
,
'
$1
'
);
this
.
_token
=
this
.
_scanner
.
next
();
return
res
;
return
value
;
}
private
_parse
(
marker
:
Marker
):
boolean
{
...
...
src/vs/editor/contrib/snippet/test/snippetParser.test.ts
浏览文件 @
d859157d
...
...
@@ -767,4 +767,17 @@ suite('SnippetParser', () => {
assert
.
equal
((
<
FormatString
>
variable
.
transform
!
.
children
[
0
]).
ifValue
,
'
import { hello } from world
'
);
assert
.
equal
((
<
FormatString
>
variable
.
transform
!
.
children
[
0
]).
elseValue
,
undefined
);
});
test
(
'
Snippet escape backslashes inside conditional insertion variable replacement #80394
'
,
function
()
{
let
snippet
=
new
SnippetParser
().
parse
(
'
${CURRENT_YEAR/(.+)/${1:+
\\\\
}/}
'
);
let
variable
=
<
Variable
>
snippet
.
children
[
0
];
assert
.
equal
(
snippet
.
children
.
length
,
1
);
assert
.
ok
(
variable
instanceof
Variable
);
assert
.
ok
(
variable
.
transform
);
assert
.
equal
(
variable
.
transform
!
.
children
.
length
,
1
);
assert
.
ok
(
variable
.
transform
!
.
children
[
0
]
instanceof
FormatString
);
assert
.
equal
((
<
FormatString
>
variable
.
transform
!
.
children
[
0
]).
ifValue
,
'
\\
'
);
assert
.
equal
((
<
FormatString
>
variable
.
transform
!
.
children
[
0
]).
elseValue
,
undefined
);
});
});
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录