Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
19f310a0
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,发现更多精彩内容 >>
提交
19f310a0
编写于
6月 27, 2017
作者:
D
Dirk Baeumer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixes #29427 & #29617
上级
14d457ee
变更
17
隐藏空白更改
内联
并排
Showing
17 changed file
with
74 addition
and
88 deletion
+74
-88
extensions/grunt/package.json
extensions/grunt/package.json
+1
-1
extensions/grunt/src/main.ts
extensions/grunt/src/main.ts
+2
-2
extensions/gulp/package.json
extensions/gulp/package.json
+1
-1
extensions/gulp/src/main.ts
extensions/gulp/src/main.ts
+2
-2
extensions/jake/package.json
extensions/jake/package.json
+1
-1
extensions/jake/src/main.ts
extensions/jake/src/main.ts
+2
-2
extensions/npm/package.json
extensions/npm/package.json
+1
-1
extensions/npm/src/main.ts
extensions/npm/src/main.ts
+3
-3
extensions/typescript/package.json
extensions/typescript/package.json
+1
-1
extensions/typescript/src/features/taskProvider.ts
extensions/typescript/src/features/taskProvider.ts
+2
-2
src/vs/vscode.proposed.d.ts
src/vs/vscode.proposed.d.ts
+13
-28
src/vs/workbench/api/node/extHostTask.ts
src/vs/workbench/api/node/extHostTask.ts
+2
-2
src/vs/workbench/api/node/extHostTypes.ts
src/vs/workbench/api/node/extHostTypes.ts
+14
-19
src/vs/workbench/parts/tasks/common/taskDefinitionRegistry.ts
...vs/workbench/parts/tasks/common/taskDefinitionRegistry.ts
+23
-17
src/vs/workbench/parts/tasks/common/tasks.ts
src/vs/workbench/parts/tasks/common/tasks.ts
+1
-1
src/vs/workbench/parts/tasks/electron-browser/jsonSchema_v2.ts
...s/workbench/parts/tasks/electron-browser/jsonSchema_v2.ts
+3
-3
src/vs/workbench/parts/tasks/node/taskConfiguration.ts
src/vs/workbench/parts/tasks/node/taskConfiguration.ts
+2
-2
未找到文件。
extensions/grunt/package.json
浏览文件 @
19f310a0
...
...
@@ -42,7 +42,7 @@
}
}
},
"task
Type
s"
:
[
"task
Definition
s"
:
[
{
"type"
:
"grunt"
,
"required"
:
[
"task"
],
...
...
extensions/grunt/src/main.ts
浏览文件 @
19f310a0
...
...
@@ -84,7 +84,7 @@ function getOutputChannel(): vscode.OutputChannel {
return
_channel
;
}
interface
GruntTask
Kind
extends
vscode
.
TaskKind
{
interface
GruntTask
Definition
extends
vscode
.
TaskDefinition
{
task
:
string
;
file
?:
string
;
}
...
...
@@ -170,7 +170,7 @@ async function getGruntTasks(): Promise<vscode.Task[]> {
let
matches
=
regExp
.
exec
(
line
);
if
(
matches
&&
matches
.
length
===
2
)
{
let
name
=
matches
[
1
];
let
kind
:
GruntTask
Kind
=
{
let
kind
:
GruntTask
Definition
=
{
type
:
'
grunt
'
,
task
:
name
};
...
...
extensions/gulp/package.json
浏览文件 @
19f310a0
...
...
@@ -42,7 +42,7 @@
}
}
},
"task
Type
s"
:
[
"task
Definition
s"
:
[
{
"type"
:
"gulp"
,
"required"
:
[
"task"
],
...
...
extensions/gulp/src/main.ts
浏览文件 @
19f310a0
...
...
@@ -84,7 +84,7 @@ function getOutputChannel(): vscode.OutputChannel {
return
_channel
;
}
interface
GulpTask
Kind
extends
vscode
.
TaskKind
{
interface
GulpTask
Definition
extends
vscode
.
TaskDefinition
{
task
:
string
;
file
?:
string
;
}
...
...
@@ -147,7 +147,7 @@ async function getGulpTasks(): Promise<vscode.Task[]> {
if
(
line
.
length
===
0
)
{
continue
;
}
let
kind
:
GulpTask
Kind
=
{
let
kind
:
GulpTask
Definition
=
{
type
:
'
gulp
'
,
task
:
line
};
...
...
extensions/jake/package.json
浏览文件 @
19f310a0
...
...
@@ -42,7 +42,7 @@
}
}
},
"task
Type
s"
:
[
"task
Definition
s"
:
[
{
"type"
:
"jake"
,
"required"
:
[
"task"
],
...
...
extensions/jake/src/main.ts
浏览文件 @
19f310a0
...
...
@@ -84,7 +84,7 @@ function getOutputChannel(): vscode.OutputChannel {
return
_channel
;
}
interface
JakeTask
Kind
extends
vscode
.
TaskKind
{
interface
JakeTask
Definition
extends
vscode
.
TaskDefinition
{
task
:
string
;
file
?:
string
;
}
...
...
@@ -151,7 +151,7 @@ async function getJakeTasks(): Promise<vscode.Task[]> {
let
matches
=
regExp
.
exec
(
line
);
if
(
matches
&&
matches
.
length
===
2
)
{
let
taskName
=
matches
[
1
];
let
kind
:
JakeTask
Kind
=
{
let
kind
:
JakeTask
Definition
=
{
type
:
'
jake
'
,
task
:
taskName
};
...
...
extensions/npm/package.json
浏览文件 @
19f310a0
...
...
@@ -42,7 +42,7 @@
}
}
},
"task
Type
s"
:
[
"task
Definition
s"
:
[
{
"type"
:
"npm"
,
"required"
:
[
"script"
],
...
...
extensions/npm/src/main.ts
浏览文件 @
19f310a0
...
...
@@ -62,7 +62,7 @@ async function readFile(file: string): Promise<string> {
});
}
interface
NpmTask
Kind
extends
vscode
.
TaskKind
{
interface
NpmTask
Definition
extends
vscode
.
TaskDefinition
{
script
:
string
;
file
?:
string
;
}
...
...
@@ -109,7 +109,7 @@ async function getNpmScriptsAsTasks(): Promise<vscode.Task[]> {
const
result
:
vscode
.
Task
[]
=
[];
Object
.
keys
(
json
.
scripts
).
forEach
(
each
=>
{
const
kind
:
NpmTask
Kind
=
{
const
kind
:
NpmTask
Definition
=
{
type
:
'
npm
'
,
script
:
each
};
...
...
@@ -123,7 +123,7 @@ async function getNpmScriptsAsTasks(): Promise<vscode.Task[]> {
result
.
push
(
task
);
});
// add some 'well known' npm tasks
result
.
push
(
new
vscode
.
Task
({
type
:
'
npm
'
,
script
:
'
install
'
}
as
NpmTask
Kind
,
`install`
,
'
npm
'
,
new
vscode
.
ShellExecution
(
`npm install`
)));
result
.
push
(
new
vscode
.
Task
({
type
:
'
npm
'
,
script
:
'
install
'
}
as
NpmTask
Definition
,
`install`
,
'
npm
'
,
new
vscode
.
ShellExecution
(
`npm install`
)));
return
Promise
.
resolve
(
result
);
}
catch
(
e
)
{
return
Promise
.
resolve
(
emptyTasks
);
...
...
extensions/typescript/package.json
浏览文件 @
19f310a0
...
...
@@ -458,7 +458,7 @@
"url"
:
"http://json.schemastore.org/typings"
}
],
"task
Type
s"
:
[
"task
Definition
s"
:
[
{
"type"
:
"typescript"
,
"required"
:
[
"tsconfig"
],
...
...
extensions/typescript/src/features/taskProvider.ts
浏览文件 @
19f310a0
...
...
@@ -22,7 +22,7 @@ const exists = (file: string): Promise<boolean> =>
});
interface
TypeScriptTask
Identifier
extends
vscode
.
TaskKind
{
interface
TypeScriptTask
Definition
extends
vscode
.
TaskDefinition
{
tsconfig
:
string
;
}
...
...
@@ -53,7 +53,7 @@ class TscTaskProvider implements vscode.TaskProvider {
return
projects
.
map
(
configFile
=>
{
const
configFileName
=
path
.
relative
(
rootPath
,
configFile
);
const
identifier
:
TypeScriptTask
Identifier
=
{
type
:
'
typescript
'
,
tsconfig
:
configFileName
};
const
identifier
:
TypeScriptTask
Definition
=
{
type
:
'
typescript
'
,
tsconfig
:
configFileName
};
const
buildTask
=
new
vscode
.
Task
(
identifier
,
`build
${
configFileName
}
`
,
'
tsc
'
,
new
vscode
.
ShellExecution
(
`
${
command
}
-p "
${
configFile
}
"`
),
'
$tsc
'
);
buildTask
.
group
=
vscode
.
TaskGroup
.
Build
;
return
buildTask
;
...
...
src/vs/vscode.proposed.d.ts
浏览文件 @
19f310a0
...
...
@@ -120,13 +120,18 @@ declare module 'vscode' {
* A structure that defines a task kind in the system.
* The value must be JSON-stringifyable.
*/
export
interface
Task
Kind
{
export
interface
Task
Definition
{
/**
* The task type as defined by the extension implementing a
* task provider. Examples are 'grunt', 'npm' or 'tsc'.
* The task definition descibing the task provided by an extension.
* Usually a task provider defines more properties to identify
* a task. They need to be defined in the package.json of the
* extension under the 'taskKinds' extension point.
* extension under the 'taskDefinitions' extension point. The npm
* task definition for example looks like this
* ```typescript
* interface NpmTaskDefinition extends TaskDefinition {
* script: string;
* }
* ```
*/
readonly
type
:
string
;
}
...
...
@@ -244,30 +249,10 @@ declare module 'vscode' {
*/
export
class
Task
{
/**
* Creates a new task. A task without an exection set is resolved
* before executed.
*
* @param kind The task kind as defined in the 'taskKinds' extension point.
* @param name The task's name. Is presented in the user interface.
* @param source The task's source (e.g. 'gulp', 'npm', ...). Is presented in the user interface.
*/
constructor
(
kind
:
TaskKind
,
name
:
string
,
source
:
string
);
/**
* Creates a new task.
*
* @param kind The task kind as defined in the 'taskKinds' extension point.
* @param name The task's name. Is presented in the user interface.
* @param source The task's source (e.g. 'gulp', 'npm', ...). Is presented in the user interface.
* @param execution The process or shell execution.
*/
constructor
(
kind
:
TaskKind
,
name
:
string
,
source
:
string
,
execution
:
ProcessExecution
|
ShellExecution
);
/**
* Creates a new task.
*
* @param
kind The task kind as defined in the 'taskKinds'
extension point.
* @param
definition The task definition as defined in the taskDefintions
extension point.
* @param name The task's name. Is presented in the user interface.
* @param source The task's source (e.g. 'gulp', 'npm', ...). Is presented in the user interface.
* @param execution The process or shell execution.
...
...
@@ -275,12 +260,12 @@ declare module 'vscode' {
* or '$eslint'. Problem matchers can be contributed by an extension using
* the `problemMatchers` extension point.
*/
constructor
(
kind
:
TaskKind
,
name
:
string
,
source
:
string
,
execution
:
ProcessExecution
|
ShellExecution
,
problemMatchers
?:
string
|
string
[]);
constructor
(
taskDefinition
:
TaskDefinition
,
name
:
string
,
source
:
string
,
execution
?
:
ProcessExecution
|
ShellExecution
,
problemMatchers
?:
string
|
string
[]);
/**
* The task's
kind
.
* The task's
definition
.
*/
kind
:
TaskKind
;
definition
:
TaskDefinition
;
/**
* The task's name
...
...
src/vs/workbench/api/node/extHostTask.ts
浏览文件 @
19f310a0
...
...
@@ -333,8 +333,8 @@ namespace Tasks {
detail
:
extension
.
id
};
let
label
=
nls
.
localize
(
'
task.label
'
,
'
{0}: {1}
'
,
source
.
label
,
task
.
name
);
let
key
=
(
task
as
types
.
Task
).
kind
Key
;
let
kind
=
(
task
as
types
.
Task
).
kind
;
let
key
=
(
task
as
types
.
Task
).
definition
Key
;
let
kind
=
(
task
as
types
.
Task
).
definition
;
let
id
=
`
${
extension
.
id
}
.
${
key
}
`
;
let
taskKind
:
TaskSystem
.
TaskIdentifier
=
{
_key
:
key
,
...
...
src/vs/workbench/api/node/extHostTypes.ts
浏览文件 @
19f310a0
...
...
@@ -1153,8 +1153,8 @@ export class ShellExecution implements vscode.ShellExecution {
export
class
Task
implements
vscode
.
Task
{
private
_
kind
:
vscode
.
TaskKind
;
private
_
kind
Key
:
string
;
private
_
definition
:
vscode
.
TaskDefinition
;
private
_
definition
Key
:
string
;
private
_name
:
string
;
private
_execution
:
ProcessExecution
|
ShellExecution
;
private
_problemMatchers
:
string
[];
...
...
@@ -1163,13 +1163,8 @@ export class Task implements vscode.Task {
private
_group
:
TaskGroup
;
private
_presentationOptions
:
vscode
.
TaskPresentationOptions
;
constructor
(
kind
:
vscode
.
TaskKind
,
name
:
string
,
source
:
string
);
constructor
(
kind
:
vscode
.
TaskKind
,
name
:
string
,
source
:
string
,
execution
:
ProcessExecution
|
ShellExecution
);
constructor
(
kind
:
vscode
.
TaskKind
,
name
:
string
,
source
:
string
,
execution
:
ProcessExecution
|
ShellExecution
,
problemMatchers
?:
string
|
string
[]);
constructor
(
kind
:
vscode
.
TaskKind
,
name
:
string
,
source
:
string
,
execution
?:
ProcessExecution
|
ShellExecution
,
problemMatchers
?:
string
|
string
[])
{
this
.
kind
=
kind
;
constructor
(
definition
:
vscode
.
TaskDefinition
,
name
:
string
,
source
:
string
,
execution
?:
ProcessExecution
|
ShellExecution
,
problemMatchers
?:
string
|
string
[])
{
this
.
definition
=
definition
;
this
.
name
=
name
;
this
.
source
=
source
;
this
.
execution
=
execution
;
...
...
@@ -1183,25 +1178,25 @@ export class Task implements vscode.Task {
this
.
_isBackground
=
false
;
}
get
kind
():
vscode
.
TaskKind
{
return
this
.
_
kind
;
get
definition
():
vscode
.
TaskDefinition
{
return
this
.
_
definition
;
}
set
kind
(
value
:
vscode
.
TaskKind
)
{
set
definition
(
value
:
vscode
.
TaskDefinition
)
{
if
(
value
===
void
0
||
value
===
null
)
{
throw
illegalArgument
(
'
Kind can
\'
t be undefined or null
'
);
}
this
.
_
kind
Key
=
undefined
;
this
.
_
kind
=
value
;
this
.
_
definition
Key
=
undefined
;
this
.
_
definition
=
value
;
}
get
kind
Key
():
string
{
if
(
!
this
.
_
kind
Key
)
{
get
definition
Key
():
string
{
if
(
!
this
.
_
definition
Key
)
{
const
hash
=
crypto
.
createHash
(
'
md5
'
);
hash
.
update
(
JSON
.
stringify
(
this
.
_
kind
));
this
.
_
kind
Key
=
hash
.
digest
(
'
hex
'
);
hash
.
update
(
JSON
.
stringify
(
this
.
_
definition
));
this
.
_
definition
Key
=
hash
.
digest
(
'
hex
'
);
}
return
this
.
_
kind
Key
;
return
this
.
_
definition
Key
;
}
get
name
():
string
{
...
...
src/vs/workbench/parts/tasks/common/task
Type
Registry.ts
→
src/vs/workbench/parts/tasks/common/task
Definition
Registry.ts
浏览文件 @
19f310a0
...
...
@@ -16,17 +16,23 @@ import { ExtensionsRegistry, ExtensionMessageCollector } from 'vs/platform/exten
import
*
as
Tasks
from
'
vs/workbench/parts/tasks/common/tasks
'
;
const
task
Type
Schema
:
IJSONSchema
=
{
const
task
Definition
Schema
:
IJSONSchema
=
{
type
:
'
object
'
,
additionalProperties
:
false
,
properties
:
{
type
:
{
type
:
'
string
'
,
description
:
nls
.
localize
(
'
TaskType.description
'
,
'
The actual task type
'
)
description
:
nls
.
localize
(
'
TaskDefinition.description
'
,
'
The actual task type
'
)
},
required
:
{
type
:
'
array
'
,
items
:
{
type
:
'
string
'
}
},
properties
:
{
type
:
'
object
'
,
description
:
nls
.
localize
(
'
Task
Type
.properties
'
,
'
Additional properties of the task type
'
),
description
:
nls
.
localize
(
'
Task
Definition
.properties
'
,
'
Additional properties of the task type
'
),
additionalProperties
:
{
$ref
:
'
http://json-schema.org/draft-04/schema#
'
}
...
...
@@ -35,13 +41,13 @@ const taskTypeSchema: IJSONSchema = {
};
namespace
Configuration
{
export
interface
Task
TypeDescrip
tion
{
export
interface
Task
Defini
tion
{
type
?:
string
;
required
?:
string
[];
properties
?:
IJSONSchemaMap
;
}
export
function
from
(
value
:
Task
TypeDescription
,
messageCollector
:
ExtensionMessageCollector
):
Tasks
.
TaskTypeDescrip
tion
{
export
function
from
(
value
:
Task
Definition
,
messageCollector
:
ExtensionMessageCollector
):
Tasks
.
TaskDefini
tion
{
if
(
!
value
)
{
return
undefined
;
}
...
...
@@ -63,29 +69,29 @@ namespace Configuration {
}
const
task
TypesExtPoint
=
ExtensionsRegistry
.
registerExtensionPoint
<
Configuration
.
TaskTypeDescription
[]
>
(
'
taskType
s
'
,
[],
{
description
:
nls
.
localize
(
'
Task
Type
ExtPoint
'
,
'
Contributes task kinds
'
),
const
task
DefinitionsExtPoint
=
ExtensionsRegistry
.
registerExtensionPoint
<
Configuration
.
TaskDefinition
[]
>
(
'
taskDefinition
s
'
,
[],
{
description
:
nls
.
localize
(
'
Task
Definition
ExtPoint
'
,
'
Contributes task kinds
'
),
type
:
'
array
'
,
items
:
task
Type
Schema
items
:
task
Definition
Schema
});
export
interface
ITask
Type
Registry
{
export
interface
ITask
Definition
Registry
{
onReady
():
TPromise
<
void
>
;
exists
(
key
:
string
):
boolean
;
get
(
key
:
string
):
Tasks
.
Task
TypeDescrip
tion
;
all
():
Tasks
.
Task
TypeDescrip
tion
[];
get
(
key
:
string
):
Tasks
.
Task
Defini
tion
;
all
():
Tasks
.
Task
Defini
tion
[];
}
class
Task
TypeRegistryImpl
implements
ITaskType
Registry
{
class
Task
DefinitionRegistryImpl
implements
ITaskDefinition
Registry
{
private
taskTypes
:
IStringDictionary
<
Tasks
.
Task
TypeDescrip
tion
>
;
private
taskTypes
:
IStringDictionary
<
Tasks
.
Task
Defini
tion
>
;
private
readyPromise
:
TPromise
<
void
>
;
constructor
()
{
this
.
taskTypes
=
Object
.
create
(
null
);
this
.
readyPromise
=
new
TPromise
<
void
>
((
resolve
,
reject
)
=>
{
task
Type
sExtPoint
.
setHandler
((
extensions
)
=>
{
task
Definition
sExtPoint
.
setHandler
((
extensions
)
=>
{
try
{
extensions
.
forEach
(
extension
=>
{
let
taskTypes
=
extension
.
value
;
...
...
@@ -107,7 +113,7 @@ class TaskTypeRegistryImpl implements ITaskTypeRegistry {
return
this
.
readyPromise
;
}
public
get
(
key
:
string
):
Tasks
.
Task
TypeDescrip
tion
{
public
get
(
key
:
string
):
Tasks
.
Task
Defini
tion
{
return
this
.
taskTypes
[
key
];
}
...
...
@@ -115,9 +121,9 @@ class TaskTypeRegistryImpl implements ITaskTypeRegistry {
return
!!
this
.
taskTypes
[
key
];
}
public
all
():
Tasks
.
Task
TypeDescrip
tion
[]
{
public
all
():
Tasks
.
Task
Defini
tion
[]
{
return
Object
.
keys
(
this
.
taskTypes
).
map
(
key
=>
this
.
taskTypes
[
key
]);
}
}
export
const
TaskTypeRegistry
:
ITaskTypeRegistry
=
new
TaskTypeRegistryImpl
();
\ No newline at end of file
export
const
TaskDefinitionRegistry
:
ITaskDefinitionRegistry
=
new
TaskDefinitionRegistryImpl
();
\ No newline at end of file
src/vs/workbench/parts/tasks/common/tasks.ts
浏览文件 @
19f310a0
...
...
@@ -381,7 +381,7 @@ export interface TaskSet {
extension
?:
IExtensionDescription
;
}
export
interface
Task
TypeDescrip
tion
{
export
interface
Task
Defini
tion
{
taskType
:
string
;
required
:
string
[];
properties
:
IJSONSchemaMap
;
...
...
src/vs/workbench/parts/tasks/electron-browser/jsonSchema_v2.ts
浏览文件 @
19f310a0
...
...
@@ -11,7 +11,7 @@ import { IJSONSchema } from 'vs/base/common/jsonSchema';
import
commonSchema
from
'
./jsonSchemaCommon
'
;
import
{
ProblemMatcherRegistry
}
from
'
vs/platform/markers/common/problemMatcher
'
;
import
{
Task
TypeRegistry
}
from
'
../common/taskType
Registry
'
;
import
{
Task
DefinitionRegistry
}
from
'
../common/taskDefinition
Registry
'
;
function
fixReferences
(
literal
:
any
)
{
if
(
Array
.
isArray
(
literal
))
{
...
...
@@ -177,8 +177,8 @@ let taskConfiguration: IJSONSchema = {
};
let
taskDefinitions
:
IJSONSchema
[]
=
[];
Task
Type
Registry
.
onReady
().
then
(()
=>
{
for
(
let
taskType
of
Task
Type
Registry
.
all
())
{
Task
Definition
Registry
.
onReady
().
then
(()
=>
{
for
(
let
taskType
of
Task
Definition
Registry
.
all
())
{
let
schema
:
IJSONSchema
=
Objects
.
deepClone
(
taskConfiguration
);
// Since we do this after the schema is assigned we need to patch the refs.
schema
.
properties
.
type
=
{
...
...
src/vs/workbench/parts/tasks/node/taskConfiguration.ts
浏览文件 @
19f310a0
...
...
@@ -21,7 +21,7 @@ import {
}
from
'
vs/platform/markers/common/problemMatcher
'
;
import
*
as
Tasks
from
'
../common/tasks
'
;
import
{
Task
TypeRegistry
}
from
'
../common/taskType
Registry
'
;
import
{
Task
DefinitionRegistry
}
from
'
../common/taskDefinition
Registry
'
;
/**
* Defines the problem handling strategy
...
...
@@ -1106,7 +1106,7 @@ namespace ConfiguringTask {
context
.
problemReporter
.
fatal
(
nls
.
localize
(
'
ConfigurationParser.noTaskType
'
,
'
Error: tasks configuration must have a type property. The configuration will be ignored.
\n
{0}
\n
'
,
JSON
.
stringify
(
external
,
null
,
4
)));
return
undefined
;
}
let
typeDeclaration
=
Task
Type
Registry
.
get
(
type
);
let
typeDeclaration
=
Task
Definition
Registry
.
get
(
type
);
let
identifier
:
TaskIdentifier
;
if
(
Types
.
isString
(
customize
))
{
if
(
customize
.
indexOf
(
grunt
)
===
0
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录