Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
1e7a92b1
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
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,发现更多精彩内容 >>
提交
1e7a92b1
编写于
10月 02, 2019
作者:
A
Alex Ross
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix double prompting for default build task when canceled
Fixes #81767
上级
2f06eb98
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
23 addition
and
21 deletion
+23
-21
src/vs/workbench/services/configurationResolver/browser/configurationResolverService.ts
...igurationResolver/browser/configurationResolverService.ts
+4
-4
src/vs/workbench/services/configurationResolver/common/configurationResolver.ts
...ces/configurationResolver/common/configurationResolver.ts
+1
-1
src/vs/workbench/services/configurationResolver/common/variableResolver.ts
...services/configurationResolver/common/variableResolver.ts
+18
-16
未找到文件。
src/vs/workbench/services/configurationResolver/browser/configurationResolverService.ts
浏览文件 @
1e7a92b1
...
...
@@ -91,21 +91,21 @@ export abstract class BaseConfigurationResolverService extends AbstractVariableR
config
=
await
this
.
resolveAny
(
folder
,
config
);
// resolve input variables in the order in which they are encountered
return
this
.
resolveWithInteraction
(
folder
,
config
,
section
,
variables
,
tru
e
).
then
(
mapping
=>
{
return
this
.
resolveWithInteraction
(
folder
,
config
,
section
,
variables
,
fals
e
).
then
(
mapping
=>
{
// finally substitute evaluated command variables (if there are any)
if
(
!
mapping
)
{
return
null
;
}
else
if
(
mapping
.
size
>
0
)
{
return
this
.
resolveAny
(
folder
,
config
,
fromMap
(
mapping
));
return
this
.
resolveAny
(
folder
,
config
,
fromMap
(
mapping
)
,
false
);
}
else
{
return
config
;
}
});
}
public
async
resolveWithInteraction
(
folder
:
IWorkspaceFolder
|
undefined
,
config
:
any
,
section
?:
string
,
variables
?:
IStringDictionary
<
string
>
,
skipContributed
:
boolean
=
fals
e
):
Promise
<
Map
<
string
,
string
>
|
undefined
>
{
public
async
resolveWithInteraction
(
folder
:
IWorkspaceFolder
|
undefined
,
config
:
any
,
section
?:
string
,
variables
?:
IStringDictionary
<
string
>
,
resolveContributed
:
boolean
=
tru
e
):
Promise
<
Map
<
string
,
string
>
|
undefined
>
{
// resolve any non-interactive variables and any contributed variables
const
resolved
=
await
this
.
resolveAnyMap
(
folder
,
config
);
const
resolved
=
await
this
.
resolveAnyMap
(
folder
,
config
,
resolveContributed
);
config
=
resolved
.
newConfig
;
const
allVariableMapping
:
Map
<
string
,
string
>
=
resolved
.
resolvedVariables
;
...
...
src/vs/workbench/services/configurationResolver/common/configurationResolver.ts
浏览文件 @
1e7a92b1
...
...
@@ -20,7 +20,7 @@ export interface IConfigurationResolverService {
* Recursively resolves all variables in the given config and returns a copy of it with substituted values.
* Command variables are only substituted if a "commandValueMapping" dictionary is given and if it contains an entry for the command.
*/
resolveAny
(
folder
:
IWorkspaceFolder
|
undefined
,
config
:
any
,
commandValueMapping
?:
IStringDictionary
<
string
>
):
Promise
<
any
>
;
resolveAny
(
folder
:
IWorkspaceFolder
|
undefined
,
config
:
any
,
commandValueMapping
?:
IStringDictionary
<
string
>
,
resolveContributed
?:
boolean
):
Promise
<
any
>
;
/**
* Recursively resolves all variables (including commands and user input) in the given config and returns a copy of it with substituted values.
...
...
src/vs/workbench/services/configurationResolver/common/variableResolver.ts
浏览文件 @
1e7a92b1
...
...
@@ -53,7 +53,7 @@ export class AbstractVariableResolverService implements IConfigurationResolverSe
return
this
.
recursiveResolve
(
root
?
root
.
uri
:
undefined
,
value
);
}
private
async
resolveAnyBase
(
workspaceFolder
:
IWorkspaceFolder
|
undefined
,
config
:
any
,
commandValueMapping
?:
IStringDictionary
<
string
>
,
resolvedVariables
?:
Map
<
string
,
string
>
):
Promise
<
any
>
{
private
async
resolveAnyBase
(
workspaceFolder
:
IWorkspaceFolder
|
undefined
,
config
:
any
,
resolveContributed
:
boolean
,
commandValueMapping
?:
IStringDictionary
<
string
>
,
resolvedVariables
?:
Map
<
string
,
string
>
):
Promise
<
any
>
{
const
result
=
objects
.
deepClone
(
config
)
as
any
;
// hoist platform specific attributes to top level
...
...
@@ -71,16 +71,16 @@ export class AbstractVariableResolverService implements IConfigurationResolverSe
delete
result
.
linux
;
// substitute all variables recursively in string values
return
this
.
recursiveResolvePromise
(
workspaceFolder
?
workspaceFolder
.
uri
:
undefined
,
result
,
commandValueMapping
,
resolvedVariables
);
return
this
.
recursiveResolvePromise
(
workspaceFolder
?
workspaceFolder
.
uri
:
undefined
,
result
,
resolveContributed
,
commandValueMapping
,
resolvedVariables
);
}
public
resolveAny
(
workspaceFolder
:
IWorkspaceFolder
|
undefined
,
config
:
any
,
commandValueMapping
?:
IStringDictionary
<
string
>
):
Promise
<
any
>
{
return
this
.
resolveAnyBase
(
workspaceFolder
,
config
,
commandValueMapping
);
public
resolveAny
(
workspaceFolder
:
IWorkspaceFolder
|
undefined
,
config
:
any
,
commandValueMapping
?:
IStringDictionary
<
string
>
,
resolveContributed
:
boolean
=
true
):
Promise
<
any
>
{
return
this
.
resolveAnyBase
(
workspaceFolder
,
config
,
resolveContributed
,
commandValueMapping
);
}
protected
async
resolveAnyMap
(
workspaceFolder
:
IWorkspaceFolder
|
undefined
,
config
:
any
,
commandValueMapping
?:
IStringDictionary
<
string
>
):
Promise
<
{
newConfig
:
any
,
resolvedVariables
:
Map
<
string
,
string
>
}
>
{
protected
async
resolveAnyMap
(
workspaceFolder
:
IWorkspaceFolder
|
undefined
,
config
:
any
,
resolveContributed
:
boolean
,
commandValueMapping
?:
IStringDictionary
<
string
>
):
Promise
<
{
newConfig
:
any
,
resolvedVariables
:
Map
<
string
,
string
>
}
>
{
const
resolvedVariables
=
new
Map
<
string
,
string
>
();
const
newConfig
=
await
this
.
resolveAnyBase
(
workspaceFolder
,
config
,
commandValueMapping
,
resolvedVariables
);
const
newConfig
=
await
this
.
resolveAnyBase
(
workspaceFolder
,
config
,
resolveContributed
,
commandValueMapping
,
resolvedVariables
);
return
{
newConfig
,
resolvedVariables
};
}
...
...
@@ -116,17 +116,17 @@ export class AbstractVariableResolverService implements IConfigurationResolverSe
return
value
;
}
private
async
recursiveResolvePromise
(
folderUri
:
uri
|
undefined
,
value
:
any
,
commandValueMapping
?:
IStringDictionary
<
string
>
,
resolvedVariables
?:
Map
<
string
,
string
>
):
Promise
<
any
>
{
private
async
recursiveResolvePromise
(
folderUri
:
uri
|
undefined
,
value
:
any
,
resolveContributed
:
boolean
,
commandValueMapping
?:
IStringDictionary
<
string
>
,
resolvedVariables
?:
Map
<
string
,
string
>
):
Promise
<
any
>
{
if
(
types
.
isString
(
value
))
{
return
this
.
resolveStringPromise
(
folderUri
,
value
,
commandValueMapping
,
resolvedVariables
);
return
this
.
resolveStringPromise
(
folderUri
,
value
,
commandValueMapping
,
resolve
Contributed
,
resolve
dVariables
);
}
else
if
(
types
.
isArray
(
value
))
{
return
Promise
.
all
(
value
.
map
(
s
=>
this
.
recursiveResolvePromise
(
folderUri
,
s
,
commandValueMapping
,
resolvedVariables
)));
return
Promise
.
all
(
value
.
map
(
s
=>
this
.
recursiveResolvePromise
(
folderUri
,
s
,
resolveContributed
,
commandValueMapping
,
resolvedVariables
)));
}
else
if
(
types
.
isObject
(
value
))
{
let
result
:
IStringDictionary
<
string
|
IStringDictionary
<
string
>
|
string
[]
>
=
Object
.
create
(
null
);
const
keys
=
Object
.
keys
(
value
);
for
(
let
key
of
keys
)
{
const
replaced
=
await
this
.
resolveStringPromise
(
folderUri
,
key
,
commandValueMapping
,
resolvedVariables
);
result
[
replaced
]
=
await
this
.
recursiveResolvePromise
(
folderUri
,
value
[
key
],
commandValueMapping
,
resolvedVariables
);
const
replaced
=
await
this
.
resolveStringPromise
(
folderUri
,
key
,
commandValueMapping
,
resolve
Contributed
,
resolve
dVariables
);
result
[
replaced
]
=
await
this
.
recursiveResolvePromise
(
folderUri
,
value
[
key
],
resolveContributed
,
commandValueMapping
,
resolvedVariables
);
}
return
result
;
}
...
...
@@ -150,17 +150,19 @@ export class AbstractVariableResolverService implements IConfigurationResolverSe
return
replaced
;
}
private
async
resolveStringPromise
(
folderUri
:
uri
|
undefined
,
value
:
string
,
commandValueMapping
:
IStringDictionary
<
string
>
|
undefined
,
resolvedVariables
?:
Map
<
string
,
string
>
):
Promise
<
string
>
{
private
async
resolveStringPromise
(
folderUri
:
uri
|
undefined
,
value
:
string
,
commandValueMapping
:
IStringDictionary
<
string
>
|
undefined
,
resolve
Contributed
:
boolean
,
resolve
dVariables
?:
Map
<
string
,
string
>
):
Promise
<
string
>
{
// loop through all variables occurrences in 'value'
const
matches
=
value
.
match
(
AbstractVariableResolverService
.
VARIABLE_REGEXP
);
const
replaces
:
Map
<
string
,
string
>
=
new
Map
();
if
(
!
matches
)
{
return
value
;
}
for
(
const
match
of
matches
)
{
const
evaluate
=
await
this
.
evaluateSingleContributedVariable
(
match
,
match
.
match
(
AbstractVariableResolverService
.
VARIABLE_REGEXP_SINGLE
)
!
[
1
]);
if
(
evaluate
!==
match
)
{
replaces
.
set
(
match
,
evaluate
);
if
(
resolveContributed
)
{
for
(
const
match
of
matches
)
{
const
evaluate
=
await
this
.
evaluateSingleContributedVariable
(
match
,
match
.
match
(
AbstractVariableResolverService
.
VARIABLE_REGEXP_SINGLE
)
!
[
1
]);
if
(
evaluate
!==
match
)
{
replaces
.
set
(
match
,
evaluate
);
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录