Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
7c664b10
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,发现更多精彩内容 >>
提交
7c664b10
编写于
6月 23, 2017
作者:
R
Rob Lourens
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Correctly apply search excludes to local file matches
上级
6ed964d8
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
41 addition
and
15 deletion
+41
-15
src/vs/platform/search/common/search.ts
src/vs/platform/search/common/search.ts
+26
-3
src/vs/workbench/services/search/node/searchService.ts
src/vs/workbench/services/search/node/searchService.ts
+15
-12
未找到文件。
src/vs/platform/search/common/search.ts
浏览文件 @
7c664b10
...
...
@@ -6,7 +6,8 @@
import
{
PPromise
,
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
uri
from
'
vs/base/common/uri
'
;
import
{
mixin
}
from
'
vs/base/common/objects
'
;
import
*
as
paths
from
'
vs/base/common/paths
'
;
import
*
as
objects
from
'
vs/base/common/objects
'
;
import
{
IExpression
}
from
'
vs/base/common/glob
'
;
import
{
IFilesConfiguration
}
from
'
vs/platform/files/common/files
'
;
import
{
createDecorator
}
from
'
vs/platform/instantiation/common/instantiation
'
;
...
...
@@ -163,8 +164,30 @@ export function getExcludes(configuration: ISearchConfiguration): IExpression {
}
let
allExcludes
:
IExpression
=
Object
.
create
(
null
);
allExcludes
=
mixin
(
allExcludes
,
fileExcludes
);
allExcludes
=
mixin
(
allExcludes
,
searchExcludes
,
true
);
allExcludes
=
objects
.
mixin
(
allExcludes
,
fileExcludes
);
allExcludes
=
objects
.
mixin
(
allExcludes
,
searchExcludes
,
true
);
return
allExcludes
;
}
export
function
getMergedExcludes
(
query
:
ISearchQuery
,
absolutePaths
?:
boolean
):
IExpression
{
const
globalExcludePattern
:
IExpression
=
query
.
excludePattern
||
{};
return
query
.
folderQueries
.
map
(
folderQuery
=>
{
const
mergedFolderExclude
=
objects
.
assign
({},
globalExcludePattern
,
folderQuery
.
excludePattern
||
{});
return
absolutePaths
?
makeExcludesAbsolute
(
mergedFolderExclude
,
folderQuery
.
folder
)
:
mergedFolderExclude
;
});
}
function
makeExcludesAbsolute
(
excludePattern
:
IExpression
,
rootFolder
:
uri
)
{
return
Object
.
keys
(
excludePattern
)
.
reduce
((
absolutePattern
:
IExpression
,
key
:
string
)
=>
{
const
value
=
excludePattern
[
key
];
key
=
paths
.
join
(
rootFolder
.
fsPath
,
key
);
absolutePattern
[
key
]
=
value
;
return
absolutePattern
;
},
{});
}
\ No newline at end of file
src/vs/workbench/services/search/node/searchService.ts
浏览文件 @
7c664b10
...
...
@@ -12,7 +12,7 @@ import scorer = require('vs/base/common/scorer');
import
strings
=
require
(
'
vs/base/common/strings
'
);
import
{
getNextTickChannel
}
from
'
vs/base/parts/ipc/common/ipc
'
;
import
{
Client
}
from
'
vs/base/parts/ipc/node/ipc.cp
'
;
import
{
IProgress
,
LineMatch
,
FileMatch
,
ISearchComplete
,
ISearchProgressItem
,
QueryType
,
IFileMatch
,
ISearchQuery
,
ISearchConfiguration
,
ISearchService
}
from
'
vs/platform/search/common/search
'
;
import
{
IProgress
,
LineMatch
,
FileMatch
,
ISearchComplete
,
ISearchProgressItem
,
QueryType
,
IFileMatch
,
ISearchQuery
,
ISearchConfiguration
,
ISearchService
,
getMergedExcludes
}
from
'
vs/platform/search/common/search
'
;
import
{
IUntitledEditorService
}
from
'
vs/workbench/services/untitled/common/untitledEditorService
'
;
import
{
IModelService
}
from
'
vs/editor/common/services/modelService
'
;
import
{
IWorkspaceContextService
}
from
'
vs/platform/workspace/common/workspace
'
;
...
...
@@ -130,7 +130,7 @@ export class SearchService implements ISearchService {
return
;
}
if
(
!
this
.
matches
(
resource
,
query
.
filePattern
,
query
.
includePattern
,
query
.
excludePattern
))
{
if
(
!
this
.
matches
(
resource
,
query
))
{
return
;
// respect user filters
}
...
...
@@ -152,8 +152,11 @@ export class SearchService implements ISearchService {
return
localResults
;
}
private
matches
(
resource
:
uri
,
filePattern
:
string
,
includePattern
:
glob
.
IExpression
,
excludePattern
:
glob
.
IExpression
):
boolean
{
let
workspaceRelativePath
=
this
.
contextService
.
toWorkspaceRelativePath
(
resource
);
private
matches
(
resource
:
uri
,
query
:
ISearchQuery
):
boolean
{
const
{
filePattern
,
includePattern
,
}
=
query
;
// file pattern
if
(
filePattern
)
{
...
...
@@ -172,20 +175,20 @@ export class SearchService implements ISearchService {
return
false
;
// if we match on file patterns, we have to ignore non file resources
}
if
(
!
glob
.
match
(
includePattern
,
workspaceRelativePath
||
resource
.
fsPath
))
{
if
(
!
glob
.
match
(
includePattern
,
resource
.
fsPath
))
{
return
false
;
}
}
// excludes
if
(
excludePattern
)
{
if
(
resource
.
scheme
!==
'
file
'
)
{
return
true
;
// e.g. untitled files can never be excluded with file patterns
}
if
(
glob
.
match
(
excludePattern
,
workspaceRelativePath
||
resource
.
fsPath
))
{
return
false
;
}
const
allFolderExcludes
=
getMergedExcludes
(
query
,
/*absolutePaths=*/
true
);
if
(
resource
.
scheme
!==
'
file
'
)
{
return
true
;
// e.g. untitled files can never be excluded with file patterns
}
if
(
glob
.
match
(
allFolderExcludes
,
resource
.
fsPath
))
{
return
false
;
}
return
true
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录