Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
3c77120d
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,发现更多精彩内容 >>
未验证
提交
3c77120d
编写于
7月 06, 2020
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixes #75284: Run a real search when enabling/installing an extension with workspaceContains
上级
d432126e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
59 addition
and
23 deletion
+59
-23
src/vs/workbench/api/browser/mainThreadWorkspace.ts
src/vs/workbench/api/browser/mainThreadWorkspace.ts
+2
-19
src/vs/workbench/api/common/shared/workspaceContains.ts
src/vs/workbench/api/common/shared/workspaceContains.ts
+33
-0
src/vs/workbench/services/extensions/electron-browser/extensionService.ts
.../services/extensions/electron-browser/extensionService.ts
+24
-4
未找到文件。
src/vs/workbench/api/browser/mainThreadWorkspace.ts
浏览文件 @
3c77120d
...
...
@@ -24,6 +24,7 @@ import { INotificationService } from 'vs/platform/notification/common/notificati
import
{
withNullAsUndefined
}
from
'
vs/base/common/types
'
;
import
{
IFileService
}
from
'
vs/platform/files/common/files
'
;
import
{
IRequestService
}
from
'
vs/platform/request/common/request
'
;
import
{
checkGlobFileExists
}
from
'
vs/workbench/api/common/shared/workspaceContains
'
;
@
extHostNamedCustomer
(
MainContext
.
MainThreadWorkspace
)
export
class
MainThreadWorkspace
implements
MainThreadWorkspaceShape
{
...
...
@@ -189,25 +190,7 @@ export class MainThreadWorkspace implements MainThreadWorkspaceShape {
}
$checkExists
(
folders
:
readonly
UriComponents
[],
includes
:
string
[],
token
:
CancellationToken
):
Promise
<
boolean
>
{
const
queryBuilder
=
this
.
_instantiationService
.
createInstance
(
QueryBuilder
);
const
query
=
queryBuilder
.
file
(
folders
.
map
(
folder
=>
toWorkspaceFolder
(
URI
.
revive
(
folder
))),
{
_reason
:
'
checkExists
'
,
includePattern
:
includes
.
join
(
'
,
'
),
expandPatterns
:
true
,
exists
:
true
});
return
this
.
_searchService
.
fileSearch
(
query
,
token
).
then
(
result
=>
{
return
!!
result
.
limitHit
;
},
err
=>
{
if
(
!
isPromiseCanceledError
(
err
))
{
return
Promise
.
reject
(
err
);
}
return
false
;
});
return
this
.
_instantiationService
.
invokeFunction
((
accessor
)
=>
checkGlobFileExists
(
accessor
,
folders
,
includes
,
token
));
}
// --- save & edit resources ---
...
...
src/vs/workbench/api/common/shared/workspaceContains.ts
浏览文件 @
3c77120d
...
...
@@ -8,6 +8,10 @@ import { URI, UriComponents } from 'vs/base/common/uri';
import
{
CancellationTokenSource
,
CancellationToken
}
from
'
vs/base/common/cancellation
'
;
import
*
as
errors
from
'
vs/base/common/errors
'
;
import
{
ExtensionIdentifier
,
IExtensionDescription
}
from
'
vs/platform/extensions/common/extensions
'
;
import
{
IInstantiationService
,
ServicesAccessor
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
QueryBuilder
}
from
'
vs/workbench/contrib/search/common/queryBuilder
'
;
import
{
ISearchService
}
from
'
vs/workbench/services/search/common/search
'
;
import
{
toWorkspaceFolder
}
from
'
vs/platform/workspace/common/workspace
'
;
const
WORKSPACE_CONTAINS_TIMEOUT
=
7000
;
...
...
@@ -103,3 +107,32 @@ async function _activateIfGlobPatterns(host: IExtensionActivationHost, extension
activate
(
`workspaceContains:
${
globPatterns
.
join
(
'
,
'
)}
`
);
}
}
export
function
checkGlobFileExists
(
accessor
:
ServicesAccessor
,
folders
:
readonly
UriComponents
[],
includes
:
string
[],
token
:
CancellationToken
,
):
Promise
<
boolean
>
{
const
instantiationService
=
accessor
.
get
(
IInstantiationService
);
const
searchService
=
accessor
.
get
(
ISearchService
);
const
queryBuilder
=
instantiationService
.
createInstance
(
QueryBuilder
);
const
query
=
queryBuilder
.
file
(
folders
.
map
(
folder
=>
toWorkspaceFolder
(
URI
.
revive
(
folder
))),
{
_reason
:
'
checkExists
'
,
includePattern
:
includes
.
join
(
'
,
'
),
expandPatterns
:
true
,
exists
:
true
});
return
searchService
.
fileSearch
(
query
,
token
).
then
(
result
=>
{
return
!!
result
.
limitHit
;
},
err
=>
{
if
(
!
errors
.
isPromiseCanceledError
(
err
))
{
return
Promise
.
reject
(
err
);
}
return
false
;
});
}
src/vs/workbench/services/extensions/electron-browser/extensionService.ts
浏览文件 @
3c77120d
...
...
@@ -41,6 +41,9 @@ import { Extensions as ActionExtensions, IWorkbenchActionRegistry } from 'vs/wor
import
{
getRemoteName
}
from
'
vs/platform/remote/common/remoteHosts
'
;
import
{
IRemoteAgentEnvironment
}
from
'
vs/platform/remote/common/remoteAgentEnvironment
'
;
import
{
WebWorkerExtensionHost
}
from
'
vs/workbench/services/extensions/browser/webWorkerExtensionHost
'
;
import
{
IExtensionActivationHost
as
IWorkspaceContainsActivationHost
,
checkGlobFileExists
,
checkActivateWorkspaceContainsExtension
}
from
'
vs/workbench/api/common/shared/workspaceContains
'
;
import
{
IWorkspaceContextService
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
exists
}
from
'
vs/base/node/pfs
'
;
class
DeltaExtensionsQueueItem
{
constructor
(
...
...
@@ -75,6 +78,7 @@ export class ExtensionService extends AbstractExtensionService implements IExten
@
IHostService
private
readonly
_hostService
:
IHostService
,
@
IRemoteExplorerService
private
readonly
_remoteExplorerService
:
IRemoteExplorerService
,
@
IExtensionGalleryService
private
readonly
_extensionGalleryService
:
IExtensionGalleryService
,
@
IWorkspaceContextService
private
readonly
_contextService
:
IWorkspaceContextService
,
)
{
super
(
instantiationService
,
...
...
@@ -308,6 +312,7 @@ export class ExtensionService extends AbstractExtensionService implements IExten
let
shouldActivate
=
false
;
let
shouldActivateReason
:
string
|
null
=
null
;
let
hasWorkspaceContains
=
false
;
if
(
Array
.
isArray
(
extensionDescription
.
activationEvents
))
{
for
(
let
activationEvent
of
extensionDescription
.
activationEvents
)
{
// TODO@joao: there's no easy way to contribute this
...
...
@@ -329,10 +334,7 @@ export class ExtensionService extends AbstractExtensionService implements IExten
}
if
(
/^workspaceContains/
.
test
(
activationEvent
))
{
// do not trigger a search, just activate in this case...
shouldActivate
=
true
;
shouldActivateReason
=
activationEvent
;
break
;
hasWorkspaceContains
=
true
;
}
if
(
activationEvent
===
'
onStartupFinished
'
)
{
...
...
@@ -347,6 +349,24 @@ export class ExtensionService extends AbstractExtensionService implements IExten
await
Promise
.
all
(
this
.
_extensionHostManagers
.
map
(
extHostManager
=>
extHostManager
.
activate
(
extensionDescription
.
identifier
,
{
startup
:
false
,
extensionId
:
extensionDescription
.
identifier
,
activationEvent
:
shouldActivateReason
!
}))
).
then
(()
=>
{
});
}
else
if
(
hasWorkspaceContains
)
{
const
workspace
=
await
this
.
_contextService
.
getCompleteWorkspace
();
const
forceUsingSearch
=
!!
this
.
_environmentService
.
configuration
.
remoteAuthority
;
const
host
:
IWorkspaceContainsActivationHost
=
{
folders
:
workspace
.
folders
.
map
(
folder
=>
folder
.
uri
),
forceUsingSearch
:
forceUsingSearch
,
exists
:
(
path
)
=>
exists
(
path
),
checkExists
:
(
folders
,
includes
,
token
)
=>
this
.
_instantiationService
.
invokeFunction
((
accessor
)
=>
checkGlobFileExists
(
accessor
,
folders
,
includes
,
token
))
};
const
result
=
await
checkActivateWorkspaceContainsExtension
(
host
,
extensionDescription
);
if
(
!
result
)
{
return
;
}
await
Promise
.
all
(
this
.
_extensionHostManagers
.
map
(
extHostManager
=>
extHostManager
.
activate
(
extensionDescription
.
identifier
,
{
startup
:
false
,
extensionId
:
extensionDescription
.
identifier
,
activationEvent
:
result
.
activationEvent
}))
).
then
(()
=>
{
});
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录