我正在追踪对 extpath.isEqual
和 extpath.isEqualOrParent
的调用,并在测试中发现了一些问题:
vscode/src/vs/workbench/services/search/common/search.ts
第435行
| | if(extpath.isEqualOrParent(fsPath,searchPath)){ |
vscode/src/vs/workbench/services/search/node/fileSearch.ts
第94行
| | if(isEqualOrParent(otherRootFolder,fqPath)){ |
vscode/src/vs/workbench/services/search/worker/localFileSearch.ts
第315行
| | if(extpath.isEqualOrParent(fsPath,searchPath)){ |
这似乎与现有的 URIs
中的 fsPath
进行比较。我们有更好的工具来比较URI:IURIIdentityService.extUri
,它还支持根据平台忽略路径大小写。
8条答案
按热度按时间nbnkbykc1#
第三个是@JacksonKearl
gfttwv5a2#
@bpasero 在外部主机中没有
IUriIdentityService
吗?NativeExtHostSearch depends on UNKNOWN service IUriIdentityService.
z31licg03#
可能不会,@jrieken可能知道。我认为该服务仅存在于工作台中,因为它依赖于已注册的文件系统提供程序。尽管扩展注册的提供程序实际上应该在扩展主机中可用。
dkqlctbz4#
已移除搜索工作线程文件中的使用。必须从外部传递路径敏感性,并在工作线程中从其中创建一个新的extUri。
oknwwptz5#
在扩展主机中,您可以使用
ExtHostFileSystemInfo#extUri
,但有一个更大的“但是”。通常情况下,您不应该被要求使用IURIIdentityService.extUri
,因为在99%的情况下,默认的extUri
-util 就足够了。这就是为什么:所有将URI输入系统的地方,如从扩展接收诊断信息、打开文件和(也许?)搜索结果,都必须使用
IUriIdentityService#asCanonicalUri
。这个功能保证只使用一个有效的URI形式,因此可以默认使用更简单/更快的extUri
-util。那么,我们能详细看看我们正在处理哪种类型的URI吗?扩展主机是否将URI输入系统,还是它属于某种 mainThreadSearch 类型(应该使用
asCanonicalUri
)?这些用户输入的URI是否也应该规范化?mzsu5hc06#
在我的情况下,我正在从
URI.file
中形成 URI,同时在本地文件搜索工作器(ripgrep的网页版本)中遍历FileSystemDirectoryHandle
。vscode/src/vs/workbench/services/search/worker/localFileSearch.ts
第 193 行 in 236a716
| | if(!pathIncludedInQuery(queryProps,URI.file(path),extUri)){returnfalse;} |
lyr7nygr7#
这个操作是将搜索结果输入到vscode中,还是内部的一个东西,用于知道在哪些文件夹中进行搜索?此外,这个操作是在完全不同的上下文中完成的,就像一个单独的web worker一样,对吗?
8yoxcaq78#
是的,这都是在Web Worker的上下文中进行的,这是用于根据包含/排除过滤我们遍历的目录。我们像这样创建URI,然后将它们发送到主线程进行实际渲染。