Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
0d27a8c1
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,发现更多精彩内容 >>
提交
0d27a8c1
编写于
6月 19, 2017
作者:
A
Amy Qiu
提交者:
GitHub
6月 19, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #28909 from Microsoft/amqi/experiment-1-4
Task Experiment 1.4
上级
8902a30b
4fbbf416
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
143 addition
and
10 deletion
+143
-10
src/vs/platform/telemetry/common/telemetry.ts
src/vs/platform/telemetry/common/telemetry.ts
+1
-0
src/vs/platform/telemetry/common/telemetryUtils.ts
src/vs/platform/telemetry/common/telemetryUtils.ts
+5
-1
src/vs/workbench/parts/quickopen/common/quickopenActions.ts
src/vs/workbench/parts/quickopen/common/quickopenActions.ts
+54
-0
src/vs/workbench/services/configuration/test/node/configurationEditingService.test.ts
...nfiguration/test/node/configurationEditingService.test.ts
+8
-2
src/vs/workbench/services/keybinding/test/node/keybindingEditing.test.ts
...h/services/keybinding/test/node/keybindingEditing.test.ts
+9
-2
src/vs/workbench/services/textfile/common/textFileEditorModel.ts
...workbench/services/textfile/common/textFileEditorModel.ts
+60
-4
src/vs/workbench/test/workbenchTestServices.ts
src/vs/workbench/test/workbenchTestServices.ts
+6
-1
未找到文件。
src/vs/platform/telemetry/common/telemetry.ts
浏览文件 @
0d27a8c1
...
...
@@ -23,6 +23,7 @@ export interface ITelemetryData {
export
interface
ITelemetryExperiments
{
mergeQuickLinks
:
boolean
;
showTaskDocumentation
:
boolean
;
}
export
interface
ITelemetryService
{
...
...
src/vs/platform/telemetry/common/telemetryUtils.ts
浏览文件 @
0d27a8c1
...
...
@@ -18,6 +18,7 @@ import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation
export
const
defaultExperiments
:
ITelemetryExperiments
=
{
mergeQuickLinks
:
false
,
showTaskDocumentation
:
true
};
export
const
NullTelemetryService
=
{
...
...
@@ -45,10 +46,12 @@ export function loadExperiments(accessor: ServicesAccessor): ITelemetryExperimen
let
{
mergeQuickLinks
,
showTaskDocumentation
,
}
=
splitExperimentsRandomness
(
storageService
);
return
applyOverrides
({
mergeQuickLinks
,
showTaskDocumentation
,
},
configurationService
);
}
...
...
@@ -64,13 +67,14 @@ function applyOverrides(experiments: ITelemetryExperiments, configurationService
function
splitExperimentsRandomness
(
storageService
:
IStorageService
):
ITelemetryExperiments
{
const
random1
=
getExperimentsRandomness
(
storageService
);
const
[
random2
,
/* showNewUserWatermark */
]
=
splitRandom
(
random1
);
const
[
random2
,
showTaskDocumentation
]
=
splitRandom
(
random1
);
const
[
random3
,
/* openUntitledFile */
]
=
splitRandom
(
random2
);
const
[
random4
,
mergeQuickLinks
]
=
splitRandom
(
random3
);
// tslint:disable-next-line:no-unused-variable (https://github.com/Microsoft/TypeScript/issues/16628)
const
[
random5
,
/* enableWelcomePage */
]
=
splitRandom
(
random4
);
return
{
mergeQuickLinks
,
showTaskDocumentation
,
};
}
...
...
src/vs/workbench/parts/quickopen/common/quickopenActions.ts
0 → 100644
浏览文件 @
0d27a8c1
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'
use strict
'
;
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
nls
=
require
(
'
vs/nls
'
);
import
{
Action
}
from
'
vs/base/common/actions
'
;
import
{
IQuickOpenService
}
from
'
vs/platform/quickOpen/common/quickOpen
'
;
import
{
IConfigurationService
}
from
"
vs/platform/configuration/common/configuration
"
;
export
const
ALL_COMMANDS_PREFIX
=
'
>
'
;
export
class
ShowTasksAction
extends
Action
{
public
static
ID
=
'
workbench.action.showTasks
'
;
public
static
LABEL
=
nls
.
localize
(
'
showTasks
'
,
"
Show task menu
"
);
constructor
(
id
:
string
,
label
:
string
,
@
IQuickOpenService
private
quickOpenService
:
IQuickOpenService
,
@
IConfigurationService
private
configurationService
:
IConfigurationService
)
{
super
(
id
,
label
);
}
public
run
(
context
?:
any
):
TPromise
<
any
>
{
const
value
=
`
${
ALL_COMMANDS_PREFIX
}
tasks`
;
this
.
quickOpenService
.
show
(
value
);
return
TPromise
.
as
(
null
);
}
}
export
class
ShowTasksDocumentationAction
extends
Action
{
public
static
ID
=
'
workbench.action.showTaskDocumentation
'
;
public
static
LABEL
=
nls
.
localize
(
'
showTaskDocumentation
'
,
"
Show task documentation
"
);
constructor
(
id
:
string
,
label
:
string
,
)
{
super
(
id
,
label
);
}
public
run
(
context
?:
any
):
TPromise
<
any
>
{
window
.
open
(
'
https://go.microsoft.com/fwlink/?LinkId=733558
'
);
return
TPromise
.
as
(
null
);
}
}
src/vs/workbench/services/configuration/test/node/configurationEditingService.test.ts
浏览文件 @
0d27a8c1
...
...
@@ -18,7 +18,7 @@ import { parseArgs } from 'vs/platform/environment/node/argv';
import
{
IWorkspaceContextService
,
Workspace
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
EnvironmentService
}
from
'
vs/platform/environment/node/environmentService
'
;
import
extfs
=
require
(
'
vs/base/node/extfs
'
);
import
{
TestTextFileService
,
TestEditorGroupService
,
TestLifecycleService
,
TestBackupFileService
}
from
'
vs/workbench/test/workbenchTestServices
'
;
import
{
TestTextFileService
,
TestEditorGroupService
,
TestLifecycleService
,
TestBackupFileService
,
TestStorageService
}
from
'
vs/workbench/test/workbenchTestServices
'
;
import
uuid
=
require
(
'
vs/base/common/uuid
'
);
import
{
IConfigurationRegistry
,
Extensions
as
ConfigurationExtensions
}
from
'
vs/platform/configuration/common/configurationRegistry
'
;
import
{
WorkspaceConfigurationService
}
from
'
vs/workbench/services/configuration/node/configuration
'
;
...
...
@@ -44,6 +44,7 @@ import { ModeServiceImpl } from 'vs/editor/common/services/modeServiceImpl';
import
{
IModelService
}
from
'
vs/editor/common/services/modelService
'
;
import
{
ModelServiceImpl
}
from
'
vs/editor/common/services/modelServiceImpl
'
;
import
{
IChoiceService
,
IMessageService
}
from
'
vs/platform/message/common/message
'
;
import
{
IStorageService
}
from
'
vs/platform/storage/common/storage
'
;
class
SettingsTestEnvironmentService
extends
EnvironmentService
{
...
...
@@ -126,7 +127,12 @@ suite('ConfigurationEditingService', () => {
instantiationService
.
stub
(
IModelService
,
instantiationService
.
createInstance
(
ModelServiceImpl
));
instantiationService
.
stub
(
IFileService
,
new
FileService
(
workspaceService
,
{
disableWatcher
:
true
}));
instantiationService
.
stub
(
IUntitledEditorService
,
instantiationService
.
createInstance
(
UntitledEditorService
));
instantiationService
.
stub
(
IStorageService
,
new
TestStorageService
());
instantiationService
.
stub
(
IChoiceService
,
{
choose
:
(
severity
,
message
,
options
,
cancelId
):
TPromise
<
number
>
=>
{
return
TPromise
.
as
(
cancelId
);
}
});
instantiationService
.
stub
(
ITextFileService
,
instantiationService
.
createInstance
(
TestTextFileService
));
instantiationService
.
stub
(
ITextModelService
,
<
ITextModelService
>
instantiationService
.
createInstance
(
TextModelResolverService
));
instantiationService
.
stub
(
IBackupFileService
,
new
TestBackupFileService
());
...
...
src/vs/workbench/services/keybinding/test/node/keybindingEditing.test.ts
浏览文件 @
0d27a8c1
...
...
@@ -17,7 +17,7 @@ import { TPromise } from 'vs/base/common/winjs.base';
import
{
KeyCode
,
SimpleKeybinding
,
ChordKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
IEnvironmentService
}
from
'
vs/platform/environment/common/environment
'
;
import
extfs
=
require
(
'
vs/base/node/extfs
'
);
import
{
TestTextFileService
,
TestEditorGroupService
,
TestLifecycleService
,
TestBackupFileService
,
TestContextService
}
from
'
vs/workbench/test/workbenchTestServices
'
;
import
{
TestTextFileService
,
TestEditorGroupService
,
TestLifecycleService
,
TestBackupFileService
,
TestContextService
,
TestStorageService
}
from
'
vs/workbench/test/workbenchTestServices
'
;
import
{
IWorkspaceContextService
,
Workspace
}
from
'
vs/platform/workspace/common/workspace
'
;
import
uuid
=
require
(
'
vs/base/common/uuid
'
);
import
{
ConfigurationService
}
from
'
vs/platform/configuration/node/configurationService
'
;
...
...
@@ -42,6 +42,8 @@ import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
import
{
KeybindingsEditingService
}
from
'
vs/workbench/services/keybinding/common/keybindingEditing
'
;
import
{
IUserFriendlyKeybinding
}
from
'
vs/platform/keybinding/common/keybinding
'
;
import
{
ResolvedKeybindingItem
}
from
'
vs/platform/keybinding/common/resolvedKeybindingItem
'
;
import
{
IChoiceService
}
from
'
vs/platform/message/common/message
'
;
import
{
IStorageService
}
from
'
vs/platform/storage/common/storage
'
;
interface
Modifiers
{
metaKey
?:
boolean
;
...
...
@@ -67,7 +69,12 @@ suite('Keybindings Editing', () => {
instantiationService
.
stub
(
IConfigurationService
,
ConfigurationService
);
instantiationService
.
stub
(
IConfigurationService
,
'
getConfiguration
'
,
{
'
eol
'
:
'
\n
'
});
instantiationService
.
stub
(
IConfigurationService
,
'
onDidUpdateConfiguration
'
,
()
=>
{
});
instantiationService
.
stub
(
IStorageService
,
new
TestStorageService
());
instantiationService
.
stub
(
IChoiceService
,
{
choose
:
(
severity
,
message
,
options
,
cancelId
):
TPromise
<
number
>
=>
{
return
TPromise
.
as
(
cancelId
);
}
});
instantiationService
.
stub
(
IWorkspaceContextService
,
new
TestContextService
());
instantiationService
.
stub
(
ILifecycleService
,
new
TestLifecycleService
());
instantiationService
.
stub
(
IEditorGroupService
,
new
TestEditorGroupService
());
...
...
src/vs/workbench/services/textfile/common/textFileEditorModel.ts
浏览文件 @
0d27a8c1
...
...
@@ -4,6 +4,7 @@
*--------------------------------------------------------------------------------------------*/
'
use strict
'
;
import
*
as
path
from
'
vs/base/common/paths
'
;
import
nls
=
require
(
'
vs/nls
'
);
import
Event
,
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
TPromise
,
TValueCallback
,
ErrorCallback
}
from
'
vs/base/common/winjs.base
'
;
...
...
@@ -26,14 +27,17 @@ import { BaseTextEditorModel } from 'vs/workbench/common/editor/textEditorModel'
import
{
IBackupFileService
,
BACKUP_FILE_RESOLVE_OPTIONS
}
from
'
vs/workbench/services/backup/common/backup
'
;
import
{
IFileService
,
IFileStat
,
IFileOperationResult
,
FileOperationResult
,
IContent
,
CONTENT_CHANGE_EVENT_BUFFER_DELAY
,
FileChangesEvent
,
FileChangeType
}
from
'
vs/platform/files/common/files
'
;
import
{
IInstantiationService
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IMessageService
,
Severity
}
from
'
vs/platform/message/common/message
'
;
import
{
IMessageService
,
Severity
,
IChoiceService
}
from
'
vs/platform/message/common/message
'
;
import
{
IModeService
}
from
'
vs/editor/common/services/modeService
'
;
import
{
IModelService
}
from
'
vs/editor/common/services/modelService
'
;
import
{
ITelemetryService
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
anonymize
}
from
'
vs/platform/telemetry/common/telemetryUtils
'
;
import
{
RunOnceScheduler
}
from
'
vs/base/common/async
'
;
import
{
IRawTextSource
}
from
'
vs/editor/common/model/textSource
'
;
import
{
StorageScope
,
IStorageService
}
from
'
vs/platform/storage/common/storage
'
;
import
{
localize
}
from
'
vs/nls
'
;
import
{
ShowTasksAction
,
ShowTasksDocumentationAction
}
from
'
vs/workbench/parts/quickopen/common/quickopenActions
'
;
import
{
Action
}
from
'
vs/base/common/actions
'
;
/**
* The text file editor model listens to changes to its underlying code editor model and saves these changes through the file service back to the disk.
*/
...
...
@@ -85,7 +89,9 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
@
ITextFileService
private
textFileService
:
ITextFileService
,
@
IBackupFileService
private
backupFileService
:
IBackupFileService
,
@
IEnvironmentService
private
environmentService
:
IEnvironmentService
,
@
IWorkspaceContextService
private
contextService
:
IWorkspaceContextService
@
IWorkspaceContextService
private
contextService
:
IWorkspaceContextService
,
@
IChoiceService
private
choiceService
:
IChoiceService
,
@
IStorageService
private
storageService
:
IStorageService
)
{
super
(
modelService
,
modeService
);
...
...
@@ -319,7 +325,57 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
// Resolve Content
return
this
.
textFileService
.
resolveTextContent
(
this
.
resource
,
{
acceptTextOnly
:
true
,
etag
,
encoding
:
this
.
preferredEncoding
})
.
then
(
content
=>
this
.
handleLoadSuccess
(
content
),
error
=>
this
.
handleLoadError
(
error
));
.
then
(
content
=>
this
.
handleLoadSuccess
(
content
),
error
=>
this
.
handleLoadError
(
error
))
.
then
((
result
)
=>
{
this
.
showTaskNotification
();
return
result
;
});
}
private
showTaskNotification
():
void
{
const
storageKey
=
'
workbench.tasks.ranTaskBefore
'
;
if
(
!
this
.
storageService
.
get
(
storageKey
)
&&
this
.
contextService
.
getWorkspace
())
{
const
fileName
=
path
.
relative
(
this
.
contextService
.
getWorkspace
().
resource
.
toString
(),
this
.
resource
.
toString
());
if
(
fileName
.
match
(
/^gruntfile
\.
js$/i
)
||
fileName
.
match
(
/^gulpfile
\.
js$/i
)
||
fileName
.
match
(
/^tsconfig
\.
json$/i
))
{
const
message
=
localize
(
'
taskFileOpened
'
,
`Run your {0} in VS Code. Get started here.`
,
fileName
.
split
(
'
.
'
)[
0
]);
let
action
:
Action
;
let
messageTest
:
string
;
const
showDocumentation
=
this
.
telemetryService
.
getExperiments
().
showTaskDocumentation
;
if
(
showDocumentation
)
{
action
=
this
.
instantiationService
.
createInstance
(
ShowTasksDocumentationAction
,
ShowTasksDocumentationAction
.
ID
,
localize
(
'
showTaskDocumentation
'
,
"
Show task Documentation
"
));
messageTest
=
ShowTasksDocumentationAction
.
LABEL
;
}
else
{
action
=
this
.
instantiationService
.
createInstance
(
ShowTasksAction
,
ShowTasksAction
.
ID
,
localize
(
'
showTasks
'
,
"
Show tasks
"
));
messageTest
=
ShowTasksAction
.
LABEL
;
}
const
options
=
[
messageTest
,
localize
(
'
neverShowAgain
'
,
"
Don't show again
"
),
localize
(
'
close
'
,
"
Close
"
)
];
this
.
choiceService
.
choose
(
Severity
.
Info
,
message
,
options
,
2
).
done
(
choice
=>
{
switch
(
choice
)
{
case
0
:
{
this
.
telemetryService
.
publicLog
(
'
taskNotificationOptionChoice
'
,
{
choice
:
0
,
test
:
showDocumentation
});
this
.
storageService
.
store
(
storageKey
,
true
,
StorageScope
.
GLOBAL
);
return
action
.
run
();
}
case
1
:
{
this
.
telemetryService
.
publicLog
(
'
taskNotificationOptionChoice
'
,
{
choice
:
1
,
test
:
showDocumentation
});
return
this
.
storageService
.
store
(
storageKey
,
true
,
StorageScope
.
GLOBAL
);
}
case
2
:
{
this
.
telemetryService
.
publicLog
(
'
taskNotificationOptionChoice
'
,
{
choice
:
2
,
test
:
showDocumentation
});
return
;
}
}
});
}
}
}
private
handleLoadSuccess
(
content
:
IRawTextContent
):
TPromise
<
TextFileEditorModel
>
{
...
...
src/vs/workbench/test/workbenchTestServices.ts
浏览文件 @
0d27a8c1
...
...
@@ -26,7 +26,7 @@ import { TextModelResolverService } from 'vs/workbench/services/textmodelResolve
import
{
ITextModelService
}
from
'
vs/editor/common/services/resolverService
'
;
import
{
IEditorInput
,
IEditorOptions
,
Position
,
Direction
,
IEditor
,
IResourceInput
}
from
'
vs/platform/editor/common/editor
'
;
import
{
IUntitledEditorService
,
UntitledEditorService
}
from
'
vs/workbench/services/untitled/common/untitledEditorService
'
;
import
{
IMessageService
,
IConfirmation
}
from
'
vs/platform/message/common/message
'
;
import
{
I
ChoiceService
,
I
MessageService
,
IConfirmation
}
from
'
vs/platform/message/common/message
'
;
import
{
ILegacyWorkspace
,
IWorkspaceContextService
,
IWorkspace
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
ILifecycleService
,
ShutdownEvent
,
ShutdownReason
,
StartupKind
,
LifecyclePhase
}
from
'
vs/platform/lifecycle/common/lifecycle
'
;
import
{
EditorStacksModel
}
from
'
vs/workbench/common/editor/editorStacksModel
'
;
...
...
@@ -236,6 +236,11 @@ export function workbenchInstantiationService(): IInstantiationService {
instantiationService
.
stub
(
ITextModelService
,
<
ITextModelService
>
instantiationService
.
createInstance
(
TextModelResolverService
));
instantiationService
.
stub
(
IEnvironmentService
,
TestEnvironmentService
);
instantiationService
.
stub
(
IThemeService
,
new
TestThemeService
());
instantiationService
.
stub
(
IChoiceService
,
{
choose
:
(
severity
,
message
,
options
,
cancelId
):
TPromise
<
number
>
=>
{
return
TPromise
.
as
(
cancelId
);
}
});
return
instantiationService
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录