Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
fc7051a8
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,发现更多精彩内容 >>
提交
fc7051a8
编写于
3月 16, 2018
作者:
D
Dirk Baeumer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Cleaner API to query tasks
上级
52086ecf
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
92 addition
and
36 deletion
+92
-36
src/vs/vscode.proposed.d.ts
src/vs/vscode.proposed.d.ts
+13
-7
src/vs/workbench/api/node/extHost.api.impl.ts
src/vs/workbench/api/node/extHost.api.impl.ts
+1
-1
src/vs/workbench/api/node/extHostApiCommands.ts
src/vs/workbench/api/node/extHostApiCommands.ts
+25
-12
src/vs/workbench/api/node/extHostWorkspace.ts
src/vs/workbench/api/node/extHostWorkspace.ts
+11
-0
src/vs/workbench/parts/tasks/common/tasks.ts
src/vs/workbench/parts/tasks/common/tasks.ts
+23
-4
src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts
...rkbench/parts/tasks/electron-browser/task.contribution.ts
+14
-11
src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts
...ench/test/electron-browser/api/extHostApiCommands.test.ts
+5
-1
未找到文件。
src/vs/vscode.proposed.d.ts
浏览文件 @
fc7051a8
...
...
@@ -743,26 +743,32 @@ declare module 'vscode' {
//#region Tasks
/**
* A task handle represents a task in the system. It can be used to
* present task and to execute them.
* A task item represents a task in the system. It can be used to
* present task information in the user interface or to execute the
* underlying task.
*/
export
interface
Task
Handle
{
export
interface
Task
Item
{
/**
* A unique ID.
* A unique ID
representing the underlying task
.
*/
id
:
string
;
readonly
id
:
string
;
/**
* A human readable label of the task.
*/
label
:
string
;
readonly
label
:
string
;
/**
* The task definition.
*/
readonly
definition
:
TaskDefinition
;
/**
* The workspace folder the task belongs to. Is undefined
* to tasks that aren't scoped to a workspace folder.
*/
workspaceFolder
:
WorkspaceFolder
|
undefined
;
readonly
workspaceFolder
:
WorkspaceFolder
|
undefined
;
}
//#endregion
...
...
src/vs/workbench/api/node/extHost.api.impl.ts
浏览文件 @
fc7051a8
...
...
@@ -132,7 +132,7 @@ export function createApiFactory(
const
extHostLanguages
=
new
ExtHostLanguages
(
rpcProtocol
);
// Register API-ish commands
ExtHostApiCommands
.
register
(
extHostCommands
);
ExtHostApiCommands
.
register
(
extHostCommands
,
extHostWorkspace
);
return
function
(
extension
:
IExtensionDescription
):
typeof
vscode
{
...
...
src/vs/workbench/api/node/extHostApiCommands.ts
浏览文件 @
fc7051a8
...
...
@@ -6,6 +6,7 @@
import
URI
from
'
vs/base/common/uri
'
;
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
*
as
Objects
from
'
vs/base/common/objects
'
;
import
{
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
*
as
vscode
from
'
vscode
'
;
import
*
as
typeConverters
from
'
vs/workbench/api/node/extHostTypeConverters
'
;
...
...
@@ -18,18 +19,21 @@ import { IWorkspaceSymbolProvider } from 'vs/workbench/parts/search/common/searc
import
{
Position
as
EditorPosition
,
ITextEditorOptions
}
from
'
vs/platform/editor/common/editor
'
;
import
{
CustomCodeAction
}
from
'
vs/workbench/api/node/extHostLanguageFeatures
'
;
import
*
as
TaskSystem
from
'
vs/workbench/parts/tasks/common/tasks
'
;
import
{
ExtHostWorkspace
}
from
'
./extHostWorkspace
'
;
export
class
ExtHostApiCommands
{
static
register
(
commands
:
ExtHostCommands
)
{
return
new
ExtHostApiCommands
(
commands
).
registerCommands
();
static
register
(
commands
:
ExtHostCommands
,
workspace
:
ExtHostWorkspace
)
{
return
new
ExtHostApiCommands
(
commands
,
workspace
).
registerCommands
();
}
private
_commands
:
ExtHostCommands
;
private
_workspace
:
ExtHostWorkspace
;
private
_disposables
:
IDisposable
[]
=
[];
private
constructor
(
commands
:
ExtHostCommands
)
{
private
constructor
(
commands
:
ExtHostCommands
,
workspace
:
ExtHostWorkspace
)
{
this
.
_commands
=
commands
;
this
.
_workspace
=
workspace
;
}
registerCommands
()
{
...
...
@@ -472,16 +476,25 @@ export class ExtHostApiCommands {
.
then
(
tryMapWith
(
typeConverters
.
DocumentLink
.
to
));
}
private
_executeTaskProvider
():
Thenable
<
vscode
.
TaskHandle
[]
>
{
return
this
.
_commands
.
executeCommand
<
TaskSystem
.
TaskHandleTransfer
[]
>
(
'
_executeTaskProvider
'
).
then
<
vscode
.
TaskHandle
[]
>
((
values
)
=>
{
private
_executeTaskProvider
():
Thenable
<
vscode
.
TaskItem
[]
>
{
return
this
.
_commands
.
executeCommand
<
TaskSystem
.
TaskItemTransfer
[]
>
(
'
_executeTaskProvider
'
).
then
<
vscode
.
TaskItem
[]
>
((
values
)
=>
{
let
workspace
=
this
.
_workspace
;
return
values
.
map
(
handle
=>
{
return
{
id
:
handle
.
id
,
label
:
handle
.
label
,
workspaceFolder
:
{
name
:
handle
.
workspaceFolder
.
name
,
index
:
handle
.
workspaceFolder
.
index
,
uri
:
URI
.
revive
(
handle
.
workspaceFolder
.
uri
)
let
definition
:
vscode
.
TaskDefinition
=
Objects
.
assign
(
Object
.
create
(
null
),
handle
.
definition
);
delete
definition
.
_key
;
let
uri
=
URI
.
revive
(
handle
.
workspaceFolderUri
);
return
new
class
{
get
id
():
string
{
return
handle
.
id
;
}
get
label
():
string
{
return
handle
.
label
;
}
get
definition
():
vscode
.
TaskDefinition
{
return
definition
;
}
get
workspaceFolder
():
vscode
.
WorkspaceFolder
{
return
uri
?
workspace
.
resolveWorkspaceFolder
(
uri
)
:
undefined
;
}
};
});
...
...
src/vs/workbench/api/node/extHostWorkspace.ts
浏览文件 @
fc7051a8
...
...
@@ -125,6 +125,10 @@ class ExtHostWorkspaceImpl extends Workspace {
}
return
this
.
_structure
.
findSubstr
(
uri
.
toString
());
}
resolveWorkspaceFolder
(
uri
:
URI
):
vscode
.
WorkspaceFolder
{
return
this
.
_structure
.
get
(
uri
.
toString
());
}
}
export
class
ExtHostWorkspace
implements
ExtHostWorkspaceShape
{
...
...
@@ -239,6 +243,13 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape {
return
this
.
_actualWorkspace
.
getWorkspaceFolder
(
uri
,
resolveParent
);
}
resolveWorkspaceFolder
(
uri
:
vscode
.
Uri
):
vscode
.
WorkspaceFolder
{
if
(
!
this
.
_actualWorkspace
)
{
return
undefined
;
}
return
this
.
_actualWorkspace
.
resolveWorkspaceFolder
(
uri
);
}
getPath
():
string
{
// this is legacy from the days before having
...
...
src/vs/workbench/parts/tasks/common/tasks.ts
浏览文件 @
fc7051a8
...
...
@@ -4,14 +4,15 @@
*--------------------------------------------------------------------------------------------*/
'
use strict
'
;
import
{
UriComponents
}
from
'
vs/base/common/uri
'
;
import
URI
,
{
UriComponents
}
from
'
vs/base/common/uri
'
;
import
*
as
Types
from
'
vs/base/common/types
'
;
import
{
IJSONSchemaMap
}
from
'
vs/base/common/jsonSchema
'
;
import
*
as
Objects
from
'
vs/base/common/objects
'
;
import
{
IExtensionDescription
}
from
'
vs/workbench/services/extensions/common/extensions
'
;
import
{
ProblemMatcher
}
from
'
vs/workbench/parts/tasks/common/problemMatcher
'
;
import
{
IWorkspaceFolder
,
IWorkspaceFolderData
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
IWorkspaceFolder
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
generateUuid
}
from
'
../../../../base/common/uuid
'
;
export
enum
ShellQuoting
{
...
...
@@ -335,6 +336,7 @@ export type TaskSource = WorkspaceTaskSource | ExtensionTaskSource | InMemoryTas
export
interface
TaskIdentifier
{
_key
:
string
;
type
:
string
;
[
name
:
string
]:
any
;
}
export
interface
TaskDependency
{
...
...
@@ -439,6 +441,22 @@ export namespace CustomTask {
let
candidate
:
CustomTask
=
value
;
return
candidate
&&
candidate
.
type
===
'
custom
'
;
}
export
function
getDefinition
(
task
:
CustomTask
):
TaskIdentifier
{
if
(
task
.
command
===
void
0
)
{
return
undefined
;
}
if
(
task
.
command
.
runtime
===
RuntimeType
.
Shell
)
{
return
{
_key
:
generateUuid
(),
type
:
'
shell
'
};
}
else
{
return
{
_key
:
generateUuid
(),
type
:
'
process
'
};
}
}
}
export
interface
ConfiguringTask
extends
CommonTask
,
ConfigurationProperties
{
...
...
@@ -594,10 +612,11 @@ export namespace Task {
}
}
export
interface
Task
Handle
Transfer
{
export
interface
Task
Item
Transfer
{
id
:
string
;
label
:
string
;
workspaceFolder
:
IWorkspaceFolderData
;
definition
:
TaskIdentifier
;
workspaceFolderUri
:
URI
;
}
export
enum
ExecutionEngine
{
...
...
src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts
浏览文件 @
fc7051a8
...
...
@@ -62,7 +62,7 @@ import Constants from 'vs/workbench/parts/markers/electron-browser/constants';
import
{
IPartService
}
from
'
vs/workbench/services/part/common/partService
'
;
import
{
IWorkbenchEditorService
}
from
'
vs/workbench/services/editor/common/editorService
'
;
import
{
IConfigurationResolverService
}
from
'
vs/workbench/services/configurationResolver/common/configurationResolver
'
;
import
{
IWorkspaceContextService
,
WorkbenchState
,
IWorkspaceFolder
,
IWorkspaceFolderData
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
IWorkspaceContextService
,
WorkbenchState
,
IWorkspaceFolder
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
ITextFileService
}
from
'
vs/workbench/services/textfile/common/textfiles
'
;
import
{
IOutputService
,
IOutputChannelRegistry
,
Extensions
as
OutputExt
,
IOutputChannel
}
from
'
vs/workbench/parts/output/common/output
'
;
...
...
@@ -74,7 +74,7 @@ import { ITaskSystem, ITaskResolver, ITaskSummary, TaskExecuteKind, TaskError, T
import
{
Task
,
CustomTask
,
ConfiguringTask
,
ContributedTask
,
InMemoryTask
,
TaskEvent
,
TaskEventKind
,
TaskSet
,
TaskGroup
,
GroupType
,
ExecutionEngine
,
JsonSchemaVersion
,
TaskSourceKind
,
TaskIdentifier
,
TaskSorter
,
Task
Handle
Transfer
TaskIdentifier
,
TaskSorter
,
Task
Item
Transfer
}
from
'
vs/workbench/parts/tasks/common/tasks
'
;
import
{
ITaskService
,
ITaskProvider
,
RunOptions
,
CustomizationProperties
}
from
'
vs/workbench/parts/tasks/common/taskService
'
;
import
{
getTemplates
as
getTaskTemplates
}
from
'
vs/workbench/parts/tasks/common/taskTemplates
'
;
...
...
@@ -582,18 +582,21 @@ class TaskService implements ITaskService {
CommandsRegistry
.
registerCommand
(
'
_executeTaskProvider
'
,
(
accessor
,
args
)
=>
{
return
this
.
tasks
().
then
((
tasks
)
=>
{
let
result
:
Task
Handle
Transfer
[]
=
[];
let
result
:
Task
Item
Transfer
[]
=
[];
for
(
let
task
of
tasks
)
{
let
folder
=
Task
.
getWorkspaceFolder
(
task
);
let
folderData
:
IWorkspaceFolderData
=
folder
?
{
name
:
folder
.
name
,
uri
:
folder
.
uri
,
index
:
folder
.
index
}
:
undefined
;
let
handle
:
TaskHandleTransfer
=
{
let
folder
:
IWorkspaceFolder
=
Task
.
getWorkspaceFolder
(
task
);
let
folderUri
=
folder
?
folder
.
uri
:
undefined
;
let
definition
:
TaskIdentifier
;
if
(
ContributedTask
.
is
(
task
))
{
definition
=
task
.
defines
;
}
else
if
(
CustomTask
.
is
(
task
)
&&
task
.
command
!==
void
0
)
{
definition
=
CustomTask
.
getDefinition
(
task
);
}
let
handle
:
TaskItemTransfer
=
{
id
:
task
.
_id
,
label
:
task
.
_label
,
workspaceFolder
:
folderData
definition
:
definition
,
workspaceFolderUri
:
folderUri
};
result
.
push
(
handle
);
}
...
...
src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts
浏览文件 @
fc7051a8
...
...
@@ -33,6 +33,8 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
import
'
vs/workbench/parts/search/electron-browser/search.contribution
'
;
import
{
NullLogService
}
from
'
vs/platform/log/common/log
'
;
import
{
ITextModel
}
from
'
vs/editor/common/model
'
;
import
{
ExtHostWorkspace
}
from
'
vs/workbench/api/node/extHostWorkspace
'
;
import
{
generateUuid
}
from
'
vs/base/common/uuid
'
;
const
defaultSelector
=
{
scheme
:
'
far
'
};
const
model
:
ITextModel
=
EditorModel
.
createFromString
(
...
...
@@ -49,6 +51,7 @@ let rpcProtocol: TestRPCProtocol;
let
extHost
:
ExtHostLanguageFeatures
;
let
mainThread
:
MainThreadLanguageFeatures
;
let
commands
:
ExtHostCommands
;
let
workspace
:
ExtHostWorkspace
;
let
disposables
:
vscode
.
Disposable
[]
=
[];
let
originalErrorHandler
:
(
e
:
any
)
=>
any
;
...
...
@@ -115,9 +118,10 @@ suite('ExtHostLanguageFeatureCommands', function () {
const
heapService
=
new
ExtHostHeapService
();
commands
=
new
ExtHostCommands
(
rpcProtocol
,
heapService
,
new
NullLogService
());
workspace
=
new
ExtHostWorkspace
(
rpcProtocol
,
{
id
:
generateUuid
(),
name
:
'
Test
'
,
folders
:
[]
},
new
NullLogService
());
rpcProtocol
.
set
(
ExtHostContext
.
ExtHostCommands
,
commands
);
rpcProtocol
.
set
(
MainContext
.
MainThreadCommands
,
inst
.
createInstance
(
MainThreadCommands
,
rpcProtocol
));
ExtHostApiCommands
.
register
(
commands
);
ExtHostApiCommands
.
register
(
commands
,
workspace
);
const
diagnostics
=
new
ExtHostDiagnostics
(
rpcProtocol
);
rpcProtocol
.
set
(
ExtHostContext
.
ExtHostDiagnostics
,
diagnostics
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录