Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
c956a19f
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,发现更多精彩内容 >>
提交
c956a19f
编写于
8月 16, 2017
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Have MainThreadDocumentsAndEditors follow the lifecycle of the extension host
上级
f6463432
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
90 addition
and
32 deletion
+90
-32
src/vs/workbench/api/electron-browser/extensionHost.contribution.ts
...kbench/api/electron-browser/extensionHost.contribution.ts
+24
-14
src/vs/workbench/api/electron-browser/mainThreadDocuments.ts
src/vs/workbench/api/electron-browser/mainThreadDocuments.ts
+3
-4
src/vs/workbench/api/electron-browser/mainThreadDocumentsAndEditors.ts
...nch/api/electron-browser/mainThreadDocumentsAndEditors.ts
+33
-5
src/vs/workbench/api/electron-browser/mainThreadEditors.ts
src/vs/workbench/api/electron-browser/mainThreadEditors.ts
+3
-5
src/vs/workbench/api/node/extHost.protocol.ts
src/vs/workbench/api/node/extHost.protocol.ts
+2
-0
src/vs/workbench/test/electron-browser/api/mainThreadDocumentsAndEditors.test.ts
...lectron-browser/api/mainThreadDocumentsAndEditors.test.ts
+25
-3
src/vs/workbench/test/electron-browser/api/testThreadService.ts
.../workbench/test/electron-browser/api/testThreadService.ts
+0
-1
未找到文件。
src/vs/workbench/api/electron-browser/extensionHost.contribution.ts
浏览文件 @
c956a19f
...
...
@@ -8,16 +8,14 @@
import
{
IWorkbenchContribution
,
IWorkbenchContributionsRegistry
,
Extensions
as
WorkbenchExtensions
}
from
'
vs/workbench/common/contributions
'
;
import
{
Registry
}
from
'
vs/platform/registry/common/platform
'
;
import
{
IInstantiationService
,
IConstructorSignature0
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IThreadService
}
from
'
vs/workbench/services/thread/common/threadService
'
;
import
{
MainContext
,
InstanceCollection
}
from
'
../node/extHost.protocol
'
;
import
{
IThreadService
,
ProxyIdentifier
}
from
'
vs/workbench/services/thread/common/threadService
'
;
import
{
MainContext
,
InstanceCollection
,
IExtHostContext
}
from
'
../node/extHost.protocol
'
;
import
{
IExtensionService
}
from
'
vs/platform/extensions/common/extensions
'
;
import
{
ExtHostCustomersRegistry
}
from
"
vs/workbench/api/electron-browser/extHostCustomers
"
;
// --- addressable
import
{
MainThreadDiagnostics
}
from
'
./mainThreadDiagnostics
'
;
import
{
MainThreadDocuments
}
from
'
./mainThreadDocuments
'
;
import
{
MainThreadDocumentContentProviders
}
from
'
./mainThreadDocumentContentProviders
'
;
import
{
MainThreadEditors
}
from
'
./mainThreadEditors
'
;
import
{
MainThreadErrors
}
from
'
./mainThreadErrors
'
;
import
{
MainThreadTreeViews
}
from
'
./mainThreadTreeViews
'
;
import
{
MainThreadLanguages
}
from
'
./mainThreadLanguages
'
;
...
...
@@ -34,7 +32,6 @@ import { MainThreadTask } from './mainThreadTask';
import
{
MainThreadSCM
}
from
'
./mainThreadSCM
'
;
// --- other interested parties
import
{
MainThreadDocumentsAndEditors
}
from
'
./mainThreadDocumentsAndEditors
'
;
import
{
JSONValidationExtensionPoint
}
from
'
vs/platform/jsonschemas/common/jsonValidationExtensionPoint
'
;
import
{
ColorExtensionPoint
}
from
'
vs/platform/theme/common/colorExtensionPoint
'
;
import
{
LanguageConfigurationFileHandler
}
from
'
vs/workbench/parts/codeEditor/electron-browser/languageConfiguration/languageConfigurationExtensionPoint
'
;
...
...
@@ -49,10 +46,10 @@ import './mainThreadConfiguration';
import
'
./mainThreadCredentials
'
;
import
'
./mainThreadDebugService
'
;
// import './mainThreadDiagnostics';
//
import './mainThreadDocuments';
//
import './mainThreadDocumentsAndEditors';
import
'
./mainThreadDocuments
'
;
import
'
./mainThreadDocumentsAndEditors
'
;
import
'
./mainThreadEditor
'
;
//
import './mainThreadEditors';
import
'
./mainThreadEditors
'
;
// import './mainThreadErrors';
// import './mainThreadExtensionService';
import
'
./mainThreadFileSystemEventService
'
;
...
...
@@ -92,14 +89,25 @@ export class ExtHostContribution implements IWorkbenchContribution {
return
this
.
instantiationService
.
createInstance
(
ctor
);
};
const
documentsAndEditors
=
this
.
instantiationService
.
createInstance
(
MainThreadDocumentsAndEditors
);
let
col
=
new
InstanceCollection
();
const
extHostContext
=
new
class
implements
IExtHostContext
{
constructor
(
private
readonly
_threadService
:
IThreadService
)
{
}
get
<
T
>
(
identifier
:
ProxyIdentifier
<
T
>
):
T
{
return
this
.
_threadService
.
get
<
T
>
(
identifier
);
}
set
<
T
>
(
identifier
:
ProxyIdentifier
<
T
>
,
instance
:
T
):
void
{
col
.
define
(
identifier
).
set
(
instance
);
}
}(
this
.
threadService
);
// Addressable instances
const
col
=
new
InstanceCollection
();
col
.
define
(
MainContext
.
MainThreadDiagnostics
).
set
(
create
(
MainThreadDiagnostics
));
col
.
define
(
MainContext
.
MainThreadDocumentContentProviders
).
set
(
create
(
MainThreadDocumentContentProviders
));
col
.
define
(
MainContext
.
MainThreadDocuments
).
set
(
this
.
instantiationService
.
createInstance
(
MainThreadDocuments
,
documentsAndEditors
));
col
.
define
(
MainContext
.
MainThreadEditors
).
set
(
this
.
instantiationService
.
createInstance
(
MainThreadEditors
,
documentsAndEditors
));
col
.
define
(
MainContext
.
MainThreadErrors
).
set
(
create
(
MainThreadErrors
));
col
.
define
(
MainContext
.
MainThreadTreeViews
).
set
(
create
(
MainThreadTreeViews
));
col
.
define
(
MainContext
.
MainThreadLanguages
).
set
(
create
(
MainThreadLanguages
));
...
...
@@ -119,7 +127,7 @@ export class ExtHostContribution implements IWorkbenchContribution {
const
namedCustomers
=
ExtHostCustomersRegistry
.
getNamedCustomers
();
for
(
let
i
=
0
,
len
=
namedCustomers
.
length
;
i
<
len
;
i
++
)
{
const
[
id
,
ctor
]
=
namedCustomers
[
i
];
const
obj
=
this
.
instantiationService
.
createInstance
(
ctor
,
this
.
threadService
);
const
obj
=
this
.
instantiationService
.
createInstance
(
ctor
,
extHostContext
);
col
.
define
(
id
).
set
(
obj
);
}
...
...
@@ -127,11 +135,13 @@ export class ExtHostContribution implements IWorkbenchContribution {
const
customers
=
ExtHostCustomersRegistry
.
getCustomers
();
for
(
let
i
=
0
,
len
=
customers
.
length
;
i
<
len
;
i
++
)
{
const
ctor
=
customers
[
i
];
this
.
instantiationService
.
createInstance
(
ctor
,
this
.
threadService
);
this
.
instantiationService
.
createInstance
(
ctor
,
extHostContext
);
}
col
.
finish
(
true
,
this
.
threadService
);
col
=
null
;
// Other interested parties
create
(
JSONValidationExtensionPoint
);
// TODO@rehost: can survive an ext host restart
create
(
ColorExtensionPoint
);
// TODO@rehost: can survive an ext host restart
...
...
src/vs/workbench/api/electron-browser/mainThreadDocuments.ts
浏览文件 @
c956a19f
...
...
@@ -7,14 +7,13 @@
import
URI
from
'
vs/base/common/uri
'
;
import
{
toErrorMessage
}
from
'
vs/base/common/errorMessage
'
;
import
{
IModelService
}
from
'
vs/editor/common/services/modelService
'
;
import
{
IThreadService
}
from
'
vs/workbench/services/thread/common/threadService
'
;
import
{
IDisposable
,
dispose
,
IReference
}
from
'
vs/base/common/lifecycle
'
;
import
{
TextFileModelChangeEvent
,
ITextFileService
}
from
'
vs/workbench/services/textfile/common/textfiles
'
;
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
{
IFileService
}
from
'
vs/platform/files/common/files
'
;
import
{
IModeService
}
from
'
vs/editor/common/services/modeService
'
;
import
{
IUntitledEditorService
}
from
'
vs/workbench/services/untitled/common/untitledEditorService
'
;
import
{
ExtHostContext
,
MainThreadDocumentsShape
,
ExtHostDocumentsShape
}
from
'
../node/extHost.protocol
'
;
import
{
ExtHostContext
,
MainThreadDocumentsShape
,
ExtHostDocumentsShape
,
IExtHostContext
}
from
'
../node/extHost.protocol
'
;
import
{
ITextModelService
}
from
'
vs/editor/common/services/resolverService
'
;
import
{
MainThreadDocumentsAndEditors
}
from
'
./mainThreadDocumentsAndEditors
'
;
import
*
as
editorCommon
from
'
vs/editor/common/editorCommon
'
;
...
...
@@ -81,7 +80,7 @@ export class MainThreadDocuments implements MainThreadDocumentsShape {
constructor
(
documentsAndEditors
:
MainThreadDocumentsAndEditors
,
@
IThreadService
threadService
:
IThreadService
,
extHostContext
:
IExtHostContext
,
@
IModelService
modelService
:
IModelService
,
@
IModeService
modeService
:
IModeService
,
@
ITextFileService
textFileService
:
ITextFileService
,
...
...
@@ -96,7 +95,7 @@ export class MainThreadDocuments implements MainThreadDocumentsShape {
this
.
_fileService
=
fileService
;
this
.
_untitledEditorService
=
untitledEditorService
;
this
.
_proxy
=
threadService
.
get
(
ExtHostContext
.
ExtHostDocuments
);
this
.
_proxy
=
extHostContext
.
get
(
ExtHostContext
.
ExtHostDocuments
);
this
.
_modelIsSynced
=
{};
this
.
_toDispose
=
[];
...
...
src/vs/workbench/api/electron-browser/mainThreadDocumentsAndEditors.ts
浏览文件 @
c956a19f
...
...
@@ -11,12 +11,20 @@ import { delta } from 'vs/base/common/arrays';
import
{
IDisposable
,
dispose
}
from
'
vs/base/common/lifecycle
'
;
import
{
ICodeEditorService
}
from
'
vs/editor/common/services/codeEditorService
'
;
import
Event
,
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
ExtHostContext
,
ExtHostDocumentsAndEditorsShape
,
IModelAddedData
,
ITextEditorAddData
,
IDocumentsAndEditorsDelta
}
from
'
../node/extHost.protocol
'
;
import
{
ExtHostContext
,
ExtHostDocumentsAndEditorsShape
,
IModelAddedData
,
ITextEditorAddData
,
IDocumentsAndEditorsDelta
,
IExtHostContext
,
MainContext
}
from
'
../node/extHost.protocol
'
;
import
{
MainThreadTextEditor
}
from
'
./mainThreadEditor
'
;
import
{
IThreadService
}
from
'
vs/workbench/services/thread/common/threadService
'
;
import
{
ITextFileService
}
from
'
vs/workbench/services/textfile/common/textfiles
'
;
import
{
IWorkbenchEditorService
}
from
'
vs/workbench/services/editor/common/editorService
'
;
import
{
Position
as
EditorPosition
,
IEditor
}
from
'
vs/platform/editor/common/editor
'
;
import
{
extHostCustomer
}
from
"
vs/workbench/api/electron-browser/extHostCustomers
"
;
import
{
MainThreadDocuments
}
from
"
vs/workbench/api/electron-browser/mainThreadDocuments
"
;
import
{
MainThreadEditors
}
from
"
vs/workbench/api/electron-browser/mainThreadEditors
"
;
import
{
IModeService
}
from
"
vs/editor/common/services/modeService
"
;
import
{
IFileService
}
from
"
vs/platform/files/common/files
"
;
import
{
ITextModelService
}
from
"
vs/editor/common/services/resolverService
"
;
import
{
IUntitledEditorService
}
from
"
vs/workbench/services/untitled/common/untitledEditorService
"
;
import
{
IEditorGroupService
}
from
"
vs/workbench/services/group/common/groupService
"
;
import
{
ITelemetryService
}
from
"
vs/platform/telemetry/common/telemetry
"
;
namespace
cmp
{
export
function
compareModels
(
a
:
IModel
,
b
:
IModel
):
number
{
...
...
@@ -205,6 +213,7 @@ class MainThreadDocumentAndEditorStateComputer {
}
}
@
extHostCustomer
export
class
MainThreadDocumentsAndEditors
{
private
_toDispose
:
IDisposable
[];
...
...
@@ -223,17 +232,36 @@ export class MainThreadDocumentsAndEditors {
readonly
onDocumentRemove
:
Event
<
string
[]
>
=
this
.
_onDocumentRemove
.
event
;
constructor
(
extHostContext
:
IExtHostContext
,
@
IModelService
private
_modelService
:
IModelService
,
@
ITextFileService
private
_textFileService
:
ITextFileService
,
@
IWorkbenchEditorService
private
_workbenchEditorService
:
IWorkbenchEditorService
,
@
IThreadService
threadService
:
IThreadService
,
@
ICodeEditorService
codeEditorService
:
ICodeEditorService
,
@
IModeService
modeService
:
IModeService
,
@
IFileService
fileService
:
IFileService
,
@
ITextModelService
textModelResolverService
:
ITextModelService
,
@
IUntitledEditorService
untitledEditorService
:
IUntitledEditorService
,
@
IEditorGroupService
editorGroupService
:
IEditorGroupService
,
@
ITelemetryService
telemetryService
:
ITelemetryService
)
{
this
.
_proxy
=
threadService
.
get
(
ExtHostContext
.
ExtHostDocumentsAndEditors
);
this
.
_proxy
=
extHostContext
.
get
(
ExtHostContext
.
ExtHostDocumentsAndEditors
);
this
.
_stateComputer
=
new
MainThreadDocumentAndEditorStateComputer
(
_modelService
,
codeEditorService
,
_workbenchEditorService
);
const
mainThreadDocuments
=
new
MainThreadDocuments
(
this
,
extHostContext
,
this
.
_modelService
,
modeService
,
this
.
_textFileService
,
fileService
,
textModelResolverService
,
untitledEditorService
);
extHostContext
.
set
(
MainContext
.
MainThreadDocuments
,
mainThreadDocuments
);
const
mainThreadEditors
=
new
MainThreadEditors
(
this
,
extHostContext
,
codeEditorService
,
this
.
_workbenchEditorService
,
editorGroupService
,
telemetryService
);
extHostContext
.
set
(
MainContext
.
MainThreadEditors
,
mainThreadEditors
);
this
.
_toDispose
=
[
mainThreadDocuments
,
mainThreadEditors
,
this
.
_stateComputer
,
this
.
_stateComputer
.
onDidChangeState
(
this
.
_onDelta
,
this
)
this
.
_stateComputer
.
onDidChangeState
(
this
.
_onDelta
,
this
),
this
.
_onTextEditorAdd
,
this
.
_onTextEditorRemove
,
this
.
_onDocumentAdd
,
this
.
_onDocumentRemove
,
];
}
...
...
src/vs/workbench/api/electron-browser/mainThreadEditors.ts
浏览文件 @
c956a19f
...
...
@@ -7,7 +7,6 @@
import
URI
from
'
vs/base/common/uri
'
;
import
{
IDisposable
,
dispose
}
from
'
vs/base/common/lifecycle
'
;
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
{
IThreadService
}
from
'
vs/workbench/services/thread/common/threadService
'
;
import
{
ISingleEditOperation
,
IDecorationRenderOptions
,
IDecorationOptions
,
ILineChange
}
from
'
vs/editor/common/editorCommon
'
;
import
{
ICodeEditorService
}
from
'
vs/editor/common/services/codeEditorService
'
;
import
{
IWorkbenchEditorService
}
from
'
vs/workbench/services/editor/common/editorService
'
;
...
...
@@ -15,11 +14,10 @@ import { IEditorGroupService } from 'vs/workbench/services/group/common/groupSer
import
{
Position
as
EditorPosition
,
ITextEditorOptions
}
from
'
vs/platform/editor/common/editor
'
;
import
{
MainThreadTextEditor
}
from
'
./mainThreadEditor
'
;
import
{
ITextEditorConfigurationUpdate
,
TextEditorRevealType
,
IApplyEditsOptions
,
IUndoStopOptions
}
from
'
vs/workbench/api/node/extHost.protocol
'
;
import
{
MainThreadDocumentsAndEditors
}
from
'
./mainThreadDocumentsAndEditors
'
;
import
{
ITelemetryService
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
equals
as
objectEquals
}
from
'
vs/base/common/objects
'
;
import
{
ExtHostContext
,
MainThreadEditorsShape
,
ExtHostEditorsShape
,
ITextDocumentShowOptions
,
ITextEditorPositionData
}
from
'
../node/extHost.protocol
'
;
import
{
ExtHostContext
,
MainThreadEditorsShape
,
ExtHostEditorsShape
,
ITextDocumentShowOptions
,
ITextEditorPositionData
,
IExtHostContext
}
from
'
../node/extHost.protocol
'
;
import
{
IRange
}
from
'
vs/editor/common/core/range
'
;
import
{
ISelection
}
from
'
vs/editor/common/core/selection
'
;
...
...
@@ -35,13 +33,13 @@ export class MainThreadEditors implements MainThreadEditorsShape {
constructor
(
documentsAndEditors
:
MainThreadDocumentsAndEditors
,
extHostContext
:
IExtHostContext
,
@
ICodeEditorService
private
_codeEditorService
:
ICodeEditorService
,
@
IThreadService
threadService
:
IThreadService
,
@
IWorkbenchEditorService
workbenchEditorService
:
IWorkbenchEditorService
,
@
IEditorGroupService
editorGroupService
:
IEditorGroupService
,
@
ITelemetryService
telemetryService
:
ITelemetryService
)
{
this
.
_proxy
=
threadService
.
get
(
ExtHostContext
.
ExtHostEditors
);
this
.
_proxy
=
extHostContext
.
get
(
ExtHostContext
.
ExtHostEditors
);
this
.
_documentsAndEditors
=
documentsAndEditors
;
this
.
_workbenchEditorService
=
workbenchEditorService
;
this
.
_telemetryService
=
telemetryService
;
...
...
src/vs/workbench/api/node/extHost.protocol.ts
浏览文件 @
c956a19f
...
...
@@ -78,6 +78,8 @@ export interface IExtHostContext {
* Returns a proxy to an object addressable/named in the extension host process.
*/
get
<
T
>
(
identifier
:
ProxyIdentifier
<
T
>
):
T
;
set
<
T
>
(
identifier
:
ProxyIdentifier
<
T
>
,
instance
:
T
):
void
;
}
export
interface
IMainContext
{
...
...
src/vs/workbench/test/electron-browser/api/mainThreadDocumentsAndEditors.test.ts
浏览文件 @
c956a19f
...
...
@@ -16,6 +16,8 @@ import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/edi
import
{
ExtHostDocumentsAndEditorsShape
,
IDocumentsAndEditorsDelta
}
from
'
vs/workbench/api/node/extHost.protocol
'
;
import
{
mockCodeEditor
}
from
'
vs/editor/test/common/mocks/mockCodeEditor
'
;
import
{
mock
}
from
"
vs/workbench/test/electron-browser/api/mock
"
;
import
{
IEditorGroupService
}
from
"
vs/workbench/services/group/common/groupService
"
;
import
Event
from
'
vs/base/common/event
'
;
suite
(
'
MainThreadDocumentsAndEditors
'
,
()
=>
{
...
...
@@ -33,17 +35,37 @@ suite('MainThreadDocumentsAndEditors', () => {
configService
.
setUserConfiguration
(
'
editor
'
,
{
'
detectIndentation
'
:
false
});
modelService
=
new
ModelServiceImpl
(
null
,
configService
);
codeEditorService
=
new
MockCodeEditorService
();
textFileService
=
<
ITextFileService
>
{
isDirty
()
{
return
false
;
}
};
textFileService
=
new
class
extends
mock
<
ITextFileService
>
()
{
isDirty
()
{
return
false
;
};
models
=
<
any
>
{
onModelSaved
:
Event
.
None
,
onModelReverted
:
Event
.
None
,
onModelDirty
:
Event
.
None
,
};
};
workbenchEditorService
=
<
IWorkbenchEditorService
>
{
getVisibleEditors
()
{
return
[];
},
getActiveEditor
()
{
return
undefined
;
}
};
const
editorGroupService
=
new
class
extends
mock
<
IEditorGroupService
>
()
{
onEditorsChanged
=
Event
.
None
;
onEditorsMoved
=
Event
.
None
;
};
documentAndEditor
=
new
MainThreadDocumentsAndEditors
(
modelService
,
textFileService
,
workbenchEditorService
,
OneGetThreadService
(
new
class
extends
mock
<
ExtHostDocumentsAndEditorsShape
>
()
{
$acceptDocumentsAndEditorsDelta
(
delta
)
{
deltas
.
push
(
delta
);
}
}),
codeEditorService
}),
modelService
,
textFileService
,
workbenchEditorService
,
codeEditorService
,
null
,
null
,
null
,
null
,
editorGroupService
,
null
);
});
...
...
src/vs/workbench/test/electron-browser/api/testThreadService.ts
浏览文件 @
c956a19f
...
...
@@ -15,7 +15,6 @@ export function OneGetThreadService(thing: any): IThreadService {
return
thing
;
},
set
<
T
>
():
void
{
throw
new
Error
();
}
};
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录