Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
723b3348
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,发现更多精彩内容 >>
提交
723b3348
编写于
11月 30, 2017
作者:
R
Rob Lourens
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add literal match highlighting to NL settings search
上级
e8693114
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
55 addition
and
43 deletion
+55
-43
src/vs/workbench/parts/preferences/common/preferences.ts
src/vs/workbench/parts/preferences/common/preferences.ts
+2
-2
src/vs/workbench/parts/preferences/common/preferencesModels.ts
...s/workbench/parts/preferences/common/preferencesModels.ts
+29
-21
src/vs/workbench/parts/preferences/electron-browser/preferencesSearch.ts
...h/parts/preferences/electron-browser/preferencesSearch.ts
+24
-20
未找到文件。
src/vs/workbench/parts/preferences/common/preferences.ts
浏览文件 @
723b3348
...
...
@@ -86,13 +86,13 @@ export interface IPreferencesEditorModel<T> {
}
export
type
IGroupFilter
=
(
group
:
ISettingsGroup
)
=>
boolean
;
export
type
ISetting
Filt
er
=
(
setting
:
ISetting
)
=>
IRange
[];
export
type
ISetting
Match
er
=
(
setting
:
ISetting
)
=>
IRange
[];
export
interface
ISettingsEditorModel
extends
IPreferencesEditorModel
<
ISetting
>
{
readonly
onDidChangeGroups
:
Event
<
void
>
;
settingsGroups
:
ISettingsGroup
[];
groupsTerms
:
string
[];
filterSettings
(
filter
:
string
,
groupFilter
:
IGroupFilter
,
setting
Filter
:
ISettingFilt
er
,
mostRelevantSettings
?:
string
[]):
IFilterResult
;
filterSettings
(
filter
:
string
,
groupFilter
:
IGroupFilter
,
setting
Matcher
:
ISettingMatch
er
,
mostRelevantSettings
?:
string
[]):
IFilterResult
;
findValueMatches
(
filter
:
string
,
setting
:
ISetting
):
IRange
[];
}
...
...
src/vs/workbench/parts/preferences/common/preferencesModels.ts
浏览文件 @
723b3348
...
...
@@ -14,7 +14,7 @@ import { visit, JSONVisitor } from 'vs/base/common/json';
import
{
IModel
}
from
'
vs/editor/common/editorCommon
'
;
import
{
EditorModel
}
from
'
vs/workbench/common/editor
'
;
import
{
IConfigurationNode
,
IConfigurationRegistry
,
Extensions
,
OVERRIDE_PROPERTY_PATTERN
,
IConfigurationPropertySchema
,
ConfigurationScope
}
from
'
vs/platform/configuration/common/configurationRegistry
'
;
import
{
ISettingsEditorModel
,
IKeybindingsEditorModel
,
ISettingsGroup
,
ISetting
,
IFilterResult
,
ISettingsSection
,
IGroupFilter
,
ISetting
Filt
er
}
from
'
vs/workbench/parts/preferences/common/preferences
'
;
import
{
ISettingsEditorModel
,
IKeybindingsEditorModel
,
ISettingsGroup
,
ISetting
,
IFilterResult
,
ISettingsSection
,
IGroupFilter
,
ISetting
Match
er
}
from
'
vs/workbench/parts/preferences/common/preferences
'
;
import
{
IKeybindingService
}
from
'
vs/platform/keybinding/common/keybinding
'
;
import
{
ITextEditorModel
}
from
'
vs/editor/common/services/resolverService
'
;
import
{
IRange
,
Range
}
from
'
vs/editor/common/core/range
'
;
...
...
@@ -26,7 +26,7 @@ export abstract class AbstractSettingsModel extends EditorModel {
return
this
.
settingsGroups
.
map
(
group
=>
'
@
'
+
group
.
id
);
}
protected
doFilterSettings
(
filter
:
string
,
groupFilter
:
IGroupFilter
,
setting
Filter
:
ISettingFilt
er
):
IFilterResult
{
protected
doFilterSettings
(
filter
:
string
,
groupFilter
:
IGroupFilter
,
setting
Matcher
:
ISettingMatch
er
):
IFilterResult
{
const
allGroups
=
this
.
settingsGroups
;
if
(
!
filter
)
{
...
...
@@ -56,7 +56,7 @@ export abstract class AbstractSettingsModel extends EditorModel {
for
(
const
section
of
group
.
sections
)
{
const
settings
:
ISetting
[]
=
[];
for
(
const
setting
of
section
.
settings
)
{
const
settingMatches
=
setting
Filt
er
(
setting
);
const
settingMatches
=
setting
Match
er
(
setting
);
if
(
groupMatched
||
settingMatches
&&
settingMatches
.
length
)
{
settings
.
push
(
setting
);
}
...
...
@@ -108,6 +108,8 @@ export abstract class AbstractSettingsModel extends EditorModel {
}
public
abstract
settingsGroups
:
ISettingsGroup
[];
public
abstract
findValueMatches
(
filter
:
string
,
setting
:
ISetting
):
IRange
[];
}
export
class
SettingsEditorModel
extends
AbstractSettingsModel
implements
ISettingsEditorModel
{
...
...
@@ -147,8 +149,8 @@ export class SettingsEditorModel extends AbstractSettingsModel implements ISetti
return
this
.
settingsModel
.
getValue
();
}
public
filterSettings
(
filter
:
string
,
groupFilter
:
IGroupFilter
,
setting
Filter
:
ISettingFilt
er
):
IFilterResult
{
return
this
.
doFilterSettings
(
filter
,
groupFilter
,
setting
Filt
er
);
public
filterSettings
(
filter
:
string
,
groupFilter
:
IGroupFilter
,
setting
Matcher
:
ISettingMatch
er
):
IFilterResult
{
return
this
.
doFilterSettings
(
filter
,
groupFilter
,
setting
Match
er
);
}
public
findValueMatches
(
filter
:
string
,
setting
:
ISetting
):
IRange
[]
{
...
...
@@ -388,24 +390,13 @@ export class DefaultSettings extends Disposable {
this
.
initAllSettingsMap
(
settingsGroups
);
const
mostCommonlyUsed
=
this
.
getMostCommonlyUsedSettings
(
settingsGroups
);
this
.
_allSettingsGroups
=
[
mostCommonlyUsed
,
...
settingsGroups
];
const
builder
=
new
SettingsContentBuilder
();
builder
.
pushLine
(
'
[
'
);
builder
.
pushGroups
([
mostCommonlyUsed
]);
builder
.
pushLine
(
'
,
'
);
builder
.
pushGroups
(
settingsGroups
);
builder
.
pushLine
(
'
]
'
);
this
.
_content
=
builder
.
getContent
();
this
.
_content
=
this
.
toContent
(
this
.
_allSettingsGroups
,
true
);
return
this
.
_content
;
}
get
raw
():
string
{
if
(
!
DefaultSettings
.
_RAW
)
{
const
settingsGroups
=
this
.
getRegisteredGroups
();
const
builder
=
new
SettingsContentBuilder
();
builder
.
pushGroups
(
settingsGroups
);
DefaultSettings
.
_RAW
=
builder
.
getContent
();
DefaultSettings
.
_RAW
=
this
.
toContent
(
this
.
getRegisteredGroups
(),
false
);
}
return
DefaultSettings
.
_RAW
;
}
...
...
@@ -543,6 +534,18 @@ export class DefaultSettings extends Disposable {
return
c1
.
order
-
c2
.
order
;
}
private
toContent
(
settingsGroups
:
ISettingsGroup
[],
asArray
:
boolean
):
string
{
const
builder
=
new
SettingsContentBuilder
();
if
(
asArray
)
{
builder
.
pushLine
(
'
[
'
);
}
builder
.
pushGroups
(
settingsGroups
);
if
(
asArray
)
{
builder
.
pushLine
(
'
]
'
);
}
return
builder
.
getContent
();
}
}
export
class
DefaultSettingsEditorModel
extends
AbstractSettingsModel
implements
ISettingsEditorModel
{
...
...
@@ -576,20 +579,25 @@ export class DefaultSettingsEditorModel extends AbstractSettingsModel implements
return
this
.
defaultSettings
.
settingsGroups
;
}
public
filterSettings
(
filter
:
string
,
groupFilter
:
IGroupFilter
,
setting
Filter
:
ISettingFilt
er
,
mostRelevantSettings
?:
string
[]):
IFilterResult
{
public
filterSettings
(
filter
:
string
,
groupFilter
:
IGroupFilter
,
setting
Matcher
:
ISettingMatch
er
,
mostRelevantSettings
?:
string
[]):
IFilterResult
{
if
(
mostRelevantSettings
)
{
const
mostRelevantGroup
=
this
.
renderMostRelevantSettings
(
mostRelevantSettings
);
// calculate match ranges
const
matches
=
mostRelevantGroup
.
sections
[
0
].
settings
.
reduce
((
prev
,
s
)
=>
{
return
prev
.
concat
(
settingMatcher
(
s
));
},
[]);
return
{
allGroups
:
[...
this
.
settingsGroups
,
mostRelevantGroup
],
filteredGroups
:
mostRelevantGroup
.
sections
[
0
].
settings
.
length
?
[
mostRelevantGroup
]
:
[],
matches
:
[]
,
matches
,
query
:
filter
};
}
else
{
// Do local search and add empty 'most relevant' group
const
mostRelevantGroup
=
this
.
renderMostRelevantSettings
([]);
const
result
=
this
.
doFilterSettings
(
filter
,
groupFilter
,
setting
Filt
er
);
const
result
=
this
.
doFilterSettings
(
filter
,
groupFilter
,
setting
Match
er
);
result
.
allGroups
=
[...
result
.
allGroups
,
mostRelevantGroup
];
return
result
;
}
...
...
src/vs/workbench/parts/preferences/electron-browser/preferencesSearch.ts
浏览文件 @
723b3348
...
...
@@ -128,11 +128,11 @@ class LocalSearchProvider {
return
regex
.
test
(
group
.
title
);
};
const
setting
Filt
er
=
(
setting
:
ISetting
)
=>
{
return
new
SettingMatches
(
this
.
_filter
,
setting
,
(
filter
,
setting
)
=>
preferencesModel
.
findValueMatches
(
filter
,
setting
)).
matches
;
const
setting
Match
er
=
(
setting
:
ISetting
)
=>
{
return
new
SettingMatches
(
this
.
_filter
,
setting
,
true
,
(
filter
,
setting
)
=>
preferencesModel
.
findValueMatches
(
filter
,
setting
)).
matches
;
};
return
TPromise
.
wrap
(
preferencesModel
.
filterSettings
(
this
.
_filter
,
groupFilter
,
setting
Filt
er
));
return
TPromise
.
wrap
(
preferencesModel
.
filterSettings
(
this
.
_filter
,
groupFilter
,
setting
Match
er
));
}
}
...
...
@@ -150,19 +150,6 @@ class RemoteSearchProvider {
filterPreferences
(
preferencesModel
:
ISettingsEditorModel
):
TPromise
<
IFilterResult
>
{
return
this
.
_remoteSearchP
.
then
(
remoteResult
=>
{
const
settingFilter
=
(
setting
:
ISetting
)
=>
{
if
(
!!
remoteResult
.
scoredResults
[
setting
.
key
])
{
const
settingMatches
=
new
SettingMatches
(
this
.
_filter
,
setting
,
(
filter
,
setting
)
=>
preferencesModel
.
findValueMatches
(
filter
,
setting
)).
matches
;
if
(
settingMatches
.
length
)
{
return
settingMatches
;
}
else
{
return
[
new
Range
(
setting
.
keyRange
.
startLineNumber
,
setting
.
keyRange
.
startColumn
,
setting
.
keyRange
.
endLineNumber
,
setting
.
keyRange
.
startColumn
)];
}
}
else
{
return
null
;
}
};
if
(
remoteResult
)
{
let
sortedNames
=
Object
.
keys
(
remoteResult
.
scoredResults
).
sort
((
a
,
b
)
=>
remoteResult
.
scoredResults
[
b
]
-
remoteResult
.
scoredResults
[
a
]);
if
(
sortedNames
.
length
)
{
...
...
@@ -170,7 +157,8 @@ class RemoteSearchProvider {
sortedNames
=
sortedNames
.
filter
(
name
=>
remoteResult
.
scoredResults
[
name
]
>=
highScore
/
2
);
}
const
result
=
preferencesModel
.
filterSettings
(
this
.
_filter
,
group
=>
null
,
settingFilter
,
sortedNames
);
const
settingMatcher
=
this
.
getRemoteSettingMatcher
(
sortedNames
,
preferencesModel
);
const
result
=
preferencesModel
.
filterSettings
(
this
.
_filter
,
group
=>
null
,
settingMatcher
,
sortedNames
);
result
.
metadata
=
remoteResult
;
return
result
;
}
else
{
...
...
@@ -226,6 +214,22 @@ class RemoteSearchProvider {
return
TPromise
.
as
(
p
as
any
);
}
private
getRemoteSettingMatcher
(
names
:
string
[],
preferencesModel
:
ISettingsEditorModel
):
any
{
const
resultSet
=
new
Set
();
names
.
forEach
(
name
=>
resultSet
.
add
(
name
));
return
(
setting
:
ISetting
)
=>
{
if
(
resultSet
.
has
(
setting
.
key
))
{
const
settingMatches
=
new
SettingMatches
(
this
.
_filter
,
setting
,
false
,
(
filter
,
setting
)
=>
preferencesModel
.
findValueMatches
(
filter
,
setting
)).
matches
;
if
(
settingMatches
.
length
)
{
return
settingMatches
;
}
}
return
[];
};
}
}
const
API_VERSION
=
'
api-version=2016-09-01-Preview
'
;
...
...
@@ -275,7 +279,7 @@ class SettingMatches {
public
readonly
matches
:
IRange
[];
constructor
(
searchString
:
string
,
setting
:
ISetting
,
private
valuesMatcher
:
(
filter
:
string
,
setting
:
ISetting
)
=>
IRange
[])
{
constructor
(
searchString
:
string
,
setting
:
ISetting
,
private
requireFullQueryMatch
:
boolean
,
private
valuesMatcher
:
(
filter
:
string
,
setting
:
ISetting
)
=>
IRange
[])
{
this
.
matches
=
distinct
(
this
.
_findMatchesInSetting
(
searchString
,
setting
),
(
match
)
=>
`
${
match
.
startLineNumber
}
_
${
match
.
startColumn
}
_
${
match
.
endLineNumber
}
_
${
match
.
endColumn
}
_`
);
}
...
...
@@ -283,7 +287,7 @@ class SettingMatches {
const
result
=
this
.
_doFindMatchesInSetting
(
searchString
,
setting
);
if
(
setting
.
overrides
&&
setting
.
overrides
.
length
)
{
for
(
const
subSetting
of
setting
.
overrides
)
{
const
subSettingMatches
=
new
SettingMatches
(
searchString
,
subSetting
,
this
.
valuesMatcher
);
const
subSettingMatches
=
new
SettingMatches
(
searchString
,
subSetting
,
this
.
requireFullQueryMatch
,
this
.
valuesMatcher
);
let
words
=
searchString
.
split
(
'
'
);
const
descriptionRanges
:
IRange
[]
=
this
.
getRangesForWords
(
words
,
this
.
descriptionMatchingWords
,
[
subSettingMatches
.
descriptionMatchingWords
,
subSettingMatches
.
keyMatchingWords
,
subSettingMatches
.
valueMatchingWords
]);
const
keyRanges
:
IRange
[]
=
this
.
getRangesForWords
(
words
,
this
.
keyMatchingWords
,
[
subSettingMatches
.
descriptionMatchingWords
,
subSettingMatches
.
keyMatchingWords
,
subSettingMatches
.
valueMatchingWords
]);
...
...
@@ -353,7 +357,7 @@ class SettingMatches {
const
ranges
=
from
.
get
(
word
);
if
(
ranges
)
{
result
.
push
(...
ranges
);
}
else
if
(
others
.
every
(
o
=>
!
o
.
has
(
word
)))
{
}
else
if
(
this
.
requireFullQueryMatch
&&
others
.
every
(
o
=>
!
o
.
has
(
word
)))
{
return
[];
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录