Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
979efb6b
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,发现更多精彩内容 >>
提交
979efb6b
编写于
5月 11, 2018
作者:
R
Ramya Achutha Rao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Allow ! as css abbreviation in property value Fixes #49214
上级
b69b51d4
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
80 addition
and
53 deletion
+80
-53
extensions/emmet/src/abbreviationActions.ts
extensions/emmet/src/abbreviationActions.ts
+2
-2
extensions/emmet/src/test/cssAbbreviationAction.test.ts
extensions/emmet/src/test/cssAbbreviationAction.test.ts
+78
-51
未找到文件。
extensions/emmet/src/abbreviationActions.ts
浏览文件 @
979efb6b
...
@@ -391,13 +391,13 @@ export function isValidLocationForEmmetAbbreviation(document: vscode.TextDocumen
...
@@ -391,13 +391,13 @@ export function isValidLocationForEmmetAbbreviation(document: vscode.TextDocumen
&&
position
.
isAfterOrEqual
(
propertyNode
.
separatorToken
.
end
)
&&
position
.
isAfterOrEqual
(
propertyNode
.
separatorToken
.
end
)
&&
position
.
isBeforeOrEqual
(
propertyNode
.
terminatorToken
.
start
)
&&
position
.
isBeforeOrEqual
(
propertyNode
.
terminatorToken
.
start
)
&&
abbreviation
.
indexOf
(
'
:
'
)
===
-
1
)
{
&&
abbreviation
.
indexOf
(
'
:
'
)
===
-
1
)
{
return
hexColorRegex
.
test
(
abbreviation
);
return
hexColorRegex
.
test
(
abbreviation
)
||
abbreviation
===
'
!
'
;
}
}
if
(
!
propertyNode
.
terminatorToken
if
(
!
propertyNode
.
terminatorToken
&&
propertyNode
.
separator
&&
propertyNode
.
separator
&&
position
.
isAfterOrEqual
(
propertyNode
.
separatorToken
.
end
)
&&
position
.
isAfterOrEqual
(
propertyNode
.
separatorToken
.
end
)
&&
abbreviation
.
indexOf
(
'
:
'
)
===
-
1
)
{
&&
abbreviation
.
indexOf
(
'
:
'
)
===
-
1
)
{
return
hexColorRegex
.
test
(
abbreviation
);
return
hexColorRegex
.
test
(
abbreviation
)
||
abbreviation
===
'
!
'
;
}
}
}
}
...
...
extensions/emmet/src/test/cssAbbreviationAction.test.ts
浏览文件 @
979efb6b
...
@@ -151,32 +151,41 @@ nav#
...
@@ -151,32 +151,41 @@ nav#
});
});
});
});
test
(
'
Allow hex color when typing property values when there is a property in the next line (CSS)
'
,
()
=>
{
test
(
'
Allow hex color
or !important
when typing property values when there is a property in the next line (CSS)
'
,
()
=>
{
const
testContent
=
`
const
testContent
=
`
.foo {
.foo {
margin: #12
margin: #12
!
margin: 10px;
margin: 10px;
}
}
`
;
`
;
return
withRandomFileEditor
(
testContent
,
'
css
'
,
(
editor
,
doc
)
=>
{
return
withRandomFileEditor
(
testContent
,
'
css
'
,
(
editor
,
doc
)
=>
{
editor
.
selection
=
new
Selection
(
2
,
12
,
2
,
12
);
const
cancelSrc
=
new
CancellationTokenSource
();
return
expandEmmetAbbreviation
(
null
).
then
(()
=>
{
const
completionPromise1
=
completionProvider
.
provideCompletionItems
(
editor
.
document
,
new
Position
(
2
,
12
),
cancelSrc
.
token
,
{
triggerKind
:
CompletionTriggerKind
.
Invoke
});
assert
.
equal
(
editor
.
document
.
getText
(),
testContent
.
replace
(
'
#12
'
,
'
#121212
'
));
const
completionPromise2
=
completionProvider
.
provideCompletionItems
(
editor
.
document
,
new
Position
(
2
,
14
),
cancelSrc
.
token
,
{
triggerKind
:
CompletionTriggerKind
.
Invoke
});
const
cancelSrc
=
new
CancellationTokenSource
();
const
completionPromise
=
completionProvider
.
provideCompletionItems
(
editor
.
document
,
new
Position
(
2
,
12
),
cancelSrc
.
token
,
{
triggerKind
:
CompletionTriggerKind
.
Invoke
});
if
(
!
completionPromise1
||
!
completionPromise2
)
{
if
(
!
completionPromise
)
{
assert
.
equal
(
1
,
2
,
`Completion promise wasnt returned`
);
assert
.
fail
(
'
Completion promise wasnt returned
'
);
return
Promise
.
resolve
();
return
Promise
.
resolve
();
}
const
callBack
=
(
completionList
:
CompletionList
,
expandedText
:
string
)
=>
{
if
(
!
completionList
.
items
||
!
completionList
.
items
.
length
)
{
assert
.
equal
(
1
,
2
,
`Empty Completions`
);
return
;
}
}
completionPromise
.
then
(
result
=>
{
const
emmetCompletionItem
=
completionList
.
items
[
0
];
if
(
!
result
||
!
result
.
items
||
!
result
.
items
.
length
)
{
assert
.
equal
(
emmetCompletionItem
.
label
,
expandedText
,
`Label of completion item doesnt match.`
);
assert
.
fail
(
'
Completion promise came back empty
'
);
assert
.
equal
((
<
string
>
emmetCompletionItem
.
documentation
||
''
).
replace
(
/
\|
/g
,
''
),
expandedText
,
`Docs of completion item doesnt match.`
);
return
Promise
.
resolve
();
};
}
assert
.
equal
(
result
.
items
[
0
].
label
,
'
#121212
'
);
return
Promise
.
all
<
CompletionList
>
([
completionPromise1
,
completionPromise2
]).
then
(([
result1
,
result2
])
=>
{
callBack
(
result1
,
'
#121212
'
);
callBack
(
result2
,
'
!important
'
);
editor
.
selections
=
[
new
Selection
(
2
,
12
,
2
,
12
),
new
Selection
(
2
,
14
,
2
,
14
)];
return
expandEmmetAbbreviation
(
null
).
then
(()
=>
{
assert
.
equal
(
editor
.
document
.
getText
(),
testContent
.
replace
(
'
#12
'
,
'
#121212
'
).
replace
(
'
!
'
,
'
!important
'
));
});
});
return
Promise
.
resolve
();
});
});
});
});
});
});
...
@@ -203,32 +212,41 @@ nav#
...
@@ -203,32 +212,41 @@ nav#
});
});
});
});
test
(
'
Allow hex color when typing property values when there is a property in the previous line (CSS)
'
,
()
=>
{
test
(
'
Allow hex color
or !important
when typing property values when there is a property in the previous line (CSS)
'
,
()
=>
{
const
testContent
=
`
const
testContent
=
`
.foo {
.foo {
margin: 10px;
margin: 10px;
margin: #12
margin: #12
!
}
}
`
;
`
;
return
withRandomFileEditor
(
testContent
,
'
css
'
,
(
editor
,
doc
)
=>
{
return
withRandomFileEditor
(
testContent
,
'
css
'
,
(
editor
,
doc
)
=>
{
editor
.
selection
=
new
Selection
(
3
,
12
,
3
,
12
);
const
cancelSrc
=
new
CancellationTokenSource
();
return
expandEmmetAbbreviation
(
null
).
then
(()
=>
{
const
completionPromise1
=
completionProvider
.
provideCompletionItems
(
editor
.
document
,
new
Position
(
3
,
12
),
cancelSrc
.
token
,
{
triggerKind
:
CompletionTriggerKind
.
Invoke
});
assert
.
equal
(
editor
.
document
.
getText
(),
testContent
.
replace
(
'
#12
'
,
'
#121212
'
));
const
completionPromise2
=
completionProvider
.
provideCompletionItems
(
editor
.
document
,
new
Position
(
3
,
14
),
cancelSrc
.
token
,
{
triggerKind
:
CompletionTriggerKind
.
Invoke
});
const
cancelSrc
=
new
CancellationTokenSource
();
const
completionPromise
=
completionProvider
.
provideCompletionItems
(
editor
.
document
,
new
Position
(
3
,
12
),
cancelSrc
.
token
,
{
triggerKind
:
CompletionTriggerKind
.
Invoke
});
if
(
!
completionPromise1
||
!
completionPromise2
)
{
if
(
!
completionPromise
)
{
assert
.
equal
(
1
,
2
,
`Completion promise wasnt returned`
);
assert
.
fail
(
'
Completion promise wasnt returned
'
);
return
Promise
.
resolve
();
return
Promise
.
resolve
();
}
const
callBack
=
(
completionList
:
CompletionList
,
expandedText
:
string
)
=>
{
if
(
!
completionList
.
items
||
!
completionList
.
items
.
length
)
{
assert
.
equal
(
1
,
2
,
`Empty Completions`
);
return
;
}
}
completionPromise
.
then
(
result
=>
{
const
emmetCompletionItem
=
completionList
.
items
[
0
];
if
(
!
result
||
!
result
.
items
||
!
result
.
items
.
length
)
{
assert
.
equal
(
emmetCompletionItem
.
label
,
expandedText
,
`Label of completion item doesnt match.`
);
assert
.
fail
(
'
Completion promise came back empty
'
);
assert
.
equal
((
<
string
>
emmetCompletionItem
.
documentation
||
''
).
replace
(
/
\|
/g
,
''
),
expandedText
,
`Docs of completion item doesnt match.`
);
return
Promise
.
resolve
();
};
}
assert
.
equal
(
result
.
items
[
0
].
label
,
'
#121212
'
);
return
Promise
.
all
<
CompletionList
>
([
completionPromise1
,
completionPromise2
]).
then
(([
result1
,
result2
])
=>
{
callBack
(
result1
,
'
#121212
'
);
callBack
(
result2
,
'
!important
'
);
editor
.
selections
=
[
new
Selection
(
3
,
12
,
3
,
12
),
new
Selection
(
3
,
14
,
3
,
14
)];
return
expandEmmetAbbreviation
(
null
).
then
(()
=>
{
assert
.
equal
(
editor
.
document
.
getText
(),
testContent
.
replace
(
'
#12
'
,
'
#121212
'
).
replace
(
'
!
'
,
'
!important
'
));
});
});
return
Promise
.
resolve
();
});
});
});
});
});
});
...
@@ -254,31 +272,40 @@ nav#
...
@@ -254,31 +272,40 @@ nav#
});
});
});
});
test
(
'
Allow hex colors when typing property values when it is the only property in the rule (CSS)
'
,
()
=>
{
test
(
'
Allow hex colors
or !important
when typing property values when it is the only property in the rule (CSS)
'
,
()
=>
{
const
testContent
=
`
const
testContent
=
`
.foo {
.foo {
margin: #12
margin: #12
!
}
}
`
;
`
;
return
withRandomFileEditor
(
testContent
,
'
css
'
,
(
editor
,
doc
)
=>
{
return
withRandomFileEditor
(
testContent
,
'
css
'
,
(
editor
,
doc
)
=>
{
editor
.
selection
=
new
Selection
(
2
,
12
,
2
,
12
);
const
cancelSrc
=
new
CancellationTokenSource
();
return
expandEmmetAbbreviation
(
null
).
then
(()
=>
{
const
completionPromise1
=
completionProvider
.
provideCompletionItems
(
editor
.
document
,
new
Position
(
2
,
12
),
cancelSrc
.
token
,
{
triggerKind
:
CompletionTriggerKind
.
Invoke
});
assert
.
equal
(
editor
.
document
.
getText
(),
testContent
.
replace
(
'
#12
'
,
'
#121212
'
));
const
completionPromise2
=
completionProvider
.
provideCompletionItems
(
editor
.
document
,
new
Position
(
2
,
14
),
cancelSrc
.
token
,
{
triggerKind
:
CompletionTriggerKind
.
Invoke
});
const
cancelSrc
=
new
CancellationTokenSource
();
const
completionPromise
=
completionProvider
.
provideCompletionItems
(
editor
.
document
,
new
Position
(
2
,
12
),
cancelSrc
.
token
,
{
triggerKind
:
CompletionTriggerKind
.
Invoke
});
if
(
!
completionPromise1
||
!
completionPromise2
)
{
if
(
!
completionPromise
)
{
assert
.
equal
(
1
,
2
,
`Completion promise wasnt returned`
);
assert
.
fail
(
'
Completion promise wasnt returned
'
);
return
Promise
.
resolve
();
return
Promise
.
resolve
();
}
const
callBack
=
(
completionList
:
CompletionList
,
expandedText
:
string
)
=>
{
if
(
!
completionList
.
items
||
!
completionList
.
items
.
length
)
{
assert
.
equal
(
1
,
2
,
`Empty Completions`
);
return
;
}
}
completionPromise
.
then
(
result
=>
{
const
emmetCompletionItem
=
completionList
.
items
[
0
];
if
(
!
result
||
!
result
.
items
||
!
result
.
items
.
length
)
{
assert
.
equal
(
emmetCompletionItem
.
label
,
expandedText
,
`Label of completion item doesnt match.`
);
assert
.
fail
(
'
Completion promise came back empty
'
);
assert
.
equal
((
<
string
>
emmetCompletionItem
.
documentation
||
''
).
replace
(
/
\|
/g
,
''
),
expandedText
,
`Docs of completion item doesnt match.`
);
return
Promise
.
resolve
();
};
}
assert
.
equal
(
result
.
items
[
0
].
label
,
'
#121212
'
);
return
Promise
.
all
<
CompletionList
>
([
completionPromise1
,
completionPromise2
]).
then
(([
result1
,
result2
])
=>
{
callBack
(
result1
,
'
#121212
'
);
callBack
(
result2
,
'
!important
'
);
editor
.
selections
=
[
new
Selection
(
2
,
12
,
2
,
12
),
new
Selection
(
2
,
14
,
2
,
14
)];
return
expandEmmetAbbreviation
(
null
).
then
(()
=>
{
assert
.
equal
(
editor
.
document
.
getText
(),
testContent
.
replace
(
'
#12
'
,
'
#121212
'
).
replace
(
'
!
'
,
'
!important
'
));
});
});
return
Promise
.
resolve
();
});
});
});
});
});
});
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录