Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
f2b21097
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,发现更多精彩内容 >>
提交
f2b21097
编写于
2月 01, 2018
作者:
R
Rob Lourens
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Setting search - fix groupId telemetry when setting is configured on the RHS
and add displayIdx
上级
d2383991
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
101 addition
and
73 deletion
+101
-73
src/vs/workbench/parts/preferences/browser/preferencesEditor.ts
.../workbench/parts/preferences/browser/preferencesEditor.ts
+90
-42
src/vs/workbench/parts/preferences/browser/preferencesRenderers.ts
...rkbench/parts/preferences/browser/preferencesRenderers.ts
+11
-31
未找到文件。
src/vs/workbench/parts/preferences/browser/preferencesEditor.ts
浏览文件 @
f2b21097
...
...
@@ -6,6 +6,7 @@
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
*
as
nls
from
'
vs/nls
'
;
import
URI
from
'
vs/base/common/uri
'
;
import
*
as
strings
from
'
vs/base/common/strings
'
;
import
{
onUnexpectedError
,
isPromiseCanceledError
,
getErrorMessage
}
from
'
vs/base/common/errors
'
;
import
*
as
DOM
from
'
vs/base/browser/dom
'
;
import
{
Delayer
,
ThrottledDelayer
}
from
'
vs/base/common/async
'
;
...
...
@@ -25,7 +26,7 @@ import { CodeEditor } from 'vs/editor/browser/codeEditor';
import
{
IInstantiationService
,
ServicesAccessor
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IPreferencesService
,
ISettingsGroup
,
ISetting
,
IFilterResult
,
IPreferencesSearchService
,
CONTEXT_SETTINGS_EDITOR
,
CONTEXT_SETTINGS_SEARCH_FOCUS
,
SETTINGS_EDITOR_COMMAND_SEARCH
,
SETTINGS_EDITOR_COMMAND_FOCUS_FILE
,
ISettingsEditorModel
,
SETTINGS_EDITOR_COMMAND_CLEAR_SEARCH_RESULTS
,
SETTINGS_EDITOR_COMMAND_FOCUS_NEXT_SETTING
,
SETTINGS_EDITOR_COMMAND_FOCUS_PREVIOUS_SETTING
,
I
FilterMetadata
,
I
SearchProvider
,
ISearchResult
,
SETTINGS_EDITOR_COMMAND_EDIT_FOCUSED_SETTING
CONTEXT_SETTINGS_EDITOR
,
CONTEXT_SETTINGS_SEARCH_FOCUS
,
SETTINGS_EDITOR_COMMAND_SEARCH
,
SETTINGS_EDITOR_COMMAND_FOCUS_FILE
,
ISettingsEditorModel
,
SETTINGS_EDITOR_COMMAND_CLEAR_SEARCH_RESULTS
,
SETTINGS_EDITOR_COMMAND_FOCUS_NEXT_SETTING
,
SETTINGS_EDITOR_COMMAND_FOCUS_PREVIOUS_SETTING
,
ISearchProvider
,
ISearchResult
,
SETTINGS_EDITOR_COMMAND_EDIT_FOCUSED_SETTING
}
from
'
vs/workbench/parts/preferences/common/preferences
'
;
import
{
SettingsEditorModel
,
DefaultSettingsEditorModel
}
from
'
vs/workbench/parts/preferences/common/preferencesModels
'
;
import
{
ICodeEditor
}
from
'
vs/editor/browser/editorBrowser
'
;
...
...
@@ -255,8 +256,7 @@ export class PreferencesEditor extends BaseEditor {
if
(
result
)
{
this
.
delayedFilterLogging
.
trigger
(()
=>
this
.
reportFilteringUsed
(
query
,
result
.
defaultSettingsGroupCounts
,
result
.
metadata
));
this
.
preferencesRenderers
.
lastFilterResult
));
}
});
}
...
...
@@ -311,8 +311,26 @@ export class PreferencesEditor extends BaseEditor {
}
}
private
reportFilteringUsed
(
filter
:
string
,
counts
:
IStringDictionary
<
number
>
,
metadata
?:
IStringDictionary
<
IFilterMetadata
>
):
void
{
private
_countById
(
settingsGroups
:
ISettingsGroup
[]):
IStringDictionary
<
number
>
{
const
result
=
{};
for
(
const
group
of
settingsGroups
)
{
let
i
=
0
;
for
(
const
section
of
group
.
sections
)
{
i
+=
section
.
settings
.
length
;
}
result
[
group
.
id
]
=
i
;
}
return
result
;
}
private
reportFilteringUsed
(
filter
:
string
,
filterResult
:
IFilterResult
):
void
{
if
(
filter
&&
filter
!==
this
.
_lastReportedFilter
)
{
const
metadata
=
filterResult
&&
filterResult
.
metadata
;
const
counts
=
filterResult
&&
this
.
_countById
(
filterResult
.
filteredGroups
);
let
durations
:
any
;
if
(
metadata
)
{
durations
=
Object
.
create
(
null
);
...
...
@@ -355,11 +373,6 @@ class SettingsNavigator extends ArrayNavigator<ISetting> {
}
}
interface
IFilterOrSearchResult
{
defaultSettingsGroupCounts
:
IStringDictionary
<
number
>
;
metadata
:
IStringDictionary
<
IFilterMetadata
>
;
}
interface
IPreferencesCount
{
target
?:
SettingsTarget
;
count
:
number
;
...
...
@@ -380,7 +393,7 @@ class PreferencesRenderersController extends Disposable {
private
_currentLocalSearchProvider
:
ISearchProvider
;
private
_currentRemoteSearchProvider
:
ISearchProvider
;
private
_lastQuery
:
string
;
private
_lastFilterResult
:
IFilter
OrSearch
Result
;
private
_lastFilterResult
:
IFilterResult
;
private
_onDidFilterResultsCountChange
:
Emitter
<
IPreferencesCount
>
=
this
.
_register
(
new
Emitter
<
IPreferencesCount
>
());
public
onDidFilterResultsCountChange
:
Event
<
IPreferencesCount
>
=
this
.
_onDidFilterResultsCountChange
.
event
;
...
...
@@ -394,7 +407,7 @@ class PreferencesRenderersController extends Disposable {
super
();
}
get
lastFilterResult
():
IFilter
OrSearch
Result
{
get
lastFilterResult
():
IFilterResult
{
return
this
.
_lastFilterResult
;
}
...
...
@@ -413,7 +426,10 @@ class PreferencesRenderersController extends Disposable {
this
.
_defaultPreferencesRendererDisposables
=
dispose
(
this
.
_defaultPreferencesRendererDisposables
);
if
(
this
.
_defaultPreferencesRenderer
)
{
this
.
_defaultPreferencesRenderer
.
onUpdatePreference
(({
key
,
value
,
source
})
=>
this
.
_updatePreference
(
key
,
value
,
source
,
this
.
_editablePreferencesRenderer
),
this
,
this
.
_defaultPreferencesRendererDisposables
);
this
.
_defaultPreferencesRenderer
.
onUpdatePreference
(({
key
,
value
,
source
})
=>
{
this
.
_editablePreferencesRenderer
.
updatePreference
(
key
,
value
,
source
);
this
.
_updatePreference
(
key
,
value
,
source
);
},
this
,
this
.
_defaultPreferencesRendererDisposables
);
this
.
_defaultPreferencesRenderer
.
onFocusPreference
(
preference
=>
this
.
_focusPreference
(
preference
,
this
.
_editablePreferencesRenderer
),
this
,
this
.
_defaultPreferencesRendererDisposables
);
this
.
_defaultPreferencesRenderer
.
onClearFocusPreference
(
preference
=>
this
.
_clearFocus
(
preference
,
this
.
_editablePreferencesRenderer
),
this
,
this
.
_defaultPreferencesRendererDisposables
);
}
...
...
@@ -427,6 +443,8 @@ class PreferencesRenderersController extends Disposable {
if
(
this
.
_editablePreferencesRenderer
)
{
(
<
ISettingsEditorModel
>
this
.
_editablePreferencesRenderer
.
preferencesModel
)
.
onDidChangeGroups
(
this
.
_onEditableContentDidChange
,
this
,
this
.
_editablePreferencesRendererDisposables
);
this
.
_editablePreferencesRenderer
.
onUpdatePreference
(({
key
,
value
,
source
})
=>
this
.
_updatePreference
(
key
,
value
,
source
,
true
),
this
,
this
.
_defaultPreferencesRendererDisposables
);
}
}
}
...
...
@@ -474,25 +492,21 @@ class PreferencesRenderersController extends Disposable {
private
filterOrSearchPreferences
(
query
:
string
,
searchProvider
:
ISearchProvider
,
groupId
:
string
,
groupLabel
:
string
,
groupOrder
:
number
,
editableContentOnly
?:
boolean
):
TPromise
<
void
>
{
this
.
_lastQuery
=
query
;
const
filterPs
=
[
];
const
filterPs
:
TPromise
<
any
>
[]
=
[
this
.
_filterOrSearchPreferences
(
query
,
this
.
editablePreferencesRenderer
,
searchProvider
,
groupId
,
groupLabel
,
groupOrder
)
];
if
(
!
editableContentOnly
)
{
filterPs
.
push
(
this
.
_filterOrSearchPreferences
(
query
,
this
.
defaultPreferencesRenderer
,
searchProvider
,
groupId
,
groupLabel
,
groupOrder
));
}
filterPs
.
push
(
this
.
_filterOrSearchPreferences
(
query
,
this
.
editablePreferencesRenderer
,
searchProvider
,
groupId
,
groupLabel
,
groupOrder
),
this
.
searchAllSettingsTargets
(
query
,
searchProvider
,
groupId
,
groupLabel
,
groupOrder
));
filterPs
.
push
(
this
.
searchAllSettingsTargets
(
query
,
searchProvider
,
groupId
,
groupLabel
,
groupOrder
));
return
TPromise
.
join
(
filterPs
).
then
(
results
=>
{
const
[
defaultFilterResult
,
editable
FilterResult
]
=
results
;
const
[
editableFilterResult
,
default
FilterResult
]
=
results
;
this
.
consolidateAndUpdate
(
defaultFilterResult
,
editableFilterResult
);
const
result
=
<
IFilterOrSearchResult
>
{
metadata
:
defaultFilterResult
&&
defaultFilterResult
.
metadata
,
defaultSettingsGroupCounts
:
defaultFilterResult
&&
this
.
_countById
(
defaultFilterResult
.
filteredGroups
)
};
this
.
_lastFilterResult
=
result
;
if
(
defaultFilterResult
)
{
this
.
_lastFilterResult
=
defaultFilterResult
;
}
});
}
...
...
@@ -598,13 +612,14 @@ class PreferencesRenderersController extends Disposable {
}
else
{
/* __GDPR__
"defaultSettings.searchError" : {
"message": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
"message": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"filter": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
const
message
=
getErrorMessage
(
err
).
trim
();
if
(
message
)
{
// Empty message = any generic network error
this
.
telemetryService
.
publicLog
(
'
defaultSettings.searchError
'
,
{
message
});
this
.
telemetryService
.
publicLog
(
'
defaultSettings.searchError
'
,
{
message
,
filter
});
}
return
null
;
}
...
...
@@ -668,10 +683,58 @@ class PreferencesRenderersController extends Disposable {
}
}
private
_updatePreference
(
key
:
string
,
value
:
any
,
source
:
ISetting
,
preferencesRenderer
:
IPreferencesRenderer
<
ISetting
>
):
void
{
if
(
preferencesRenderer
)
{
preferencesRenderer
.
updatePreference
(
key
,
value
,
source
);
private
_updatePreference
(
key
:
string
,
value
:
any
,
source
:
ISetting
,
fromEditableSettings
?:
boolean
):
void
{
const
data
=
{
userConfigurationKeys
:
[
key
]
};
if
(
this
.
lastFilterResult
)
{
data
[
'
query
'
]
=
this
.
lastFilterResult
.
query
;
data
[
'
editableSide
'
]
=
!!
fromEditableSettings
;
const
nlpMetadata
=
this
.
lastFilterResult
.
metadata
&&
this
.
lastFilterResult
.
metadata
[
'
nlpResult
'
];
if
(
nlpMetadata
)
{
const
sortedKeys
=
Object
.
keys
(
nlpMetadata
.
scoredResults
).
sort
((
a
,
b
)
=>
nlpMetadata
.
scoredResults
[
b
].
score
-
nlpMetadata
.
scoredResults
[
a
].
score
);
const
suffix
=
'
##
'
+
key
;
data
[
'
nlpIndex
'
]
=
arrays
.
firstIndex
(
sortedKeys
,
key
=>
strings
.
endsWith
(
key
,
suffix
));
}
const
settingLocation
=
this
.
_findSetting
(
this
.
lastFilterResult
,
key
);
if
(
settingLocation
)
{
data
[
'
groupId
'
]
=
this
.
lastFilterResult
.
filteredGroups
[
settingLocation
.
groupIdx
].
id
;
data
[
'
displayIdx
'
]
=
settingLocation
.
overallSettingIdx
;
}
}
/* __GDPR__
"defaultSettingsActions.copySetting" : {
"userConfigurationKeys" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"query" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"nlpIndex" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"groupId" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"displayIdx" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"editableSide" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this
.
telemetryService
.
publicLog
(
'
defaultSettingsActions.copySetting
'
,
data
);
}
private
_findSetting
(
filterResult
:
IFilterResult
,
key
:
string
):
{
groupIdx
:
number
,
settingIdx
:
number
,
overallSettingIdx
:
number
}
{
let
overallSettingIdx
=
0
;
for
(
let
groupIdx
=
0
;
groupIdx
<
filterResult
.
filteredGroups
.
length
;
groupIdx
++
)
{
const
group
=
filterResult
.
filteredGroups
[
groupIdx
];
for
(
let
settingIdx
=
0
;
settingIdx
<
group
.
sections
[
0
].
settings
.
length
;
settingIdx
++
)
{
const
setting
=
group
.
sections
[
0
].
settings
[
settingIdx
];
if
(
key
===
setting
.
key
)
{
return
{
groupIdx
,
settingIdx
,
overallSettingIdx
};
}
overallSettingIdx
++
;
}
}
return
null
;
}
private
_consolidateSettings
(
editableSettingsGroups
:
ISettingsGroup
[],
defaultSettingsGroups
:
ISettingsGroup
[]):
ISetting
[]
{
...
...
@@ -691,21 +754,6 @@ class PreferencesRenderersController extends Disposable {
return
settings
;
}
private
_countById
(
settingsGroups
:
ISettingsGroup
[]):
IStringDictionary
<
number
>
{
const
result
=
{};
for
(
const
group
of
settingsGroups
)
{
let
i
=
0
;
for
(
const
section
of
group
.
sections
)
{
i
+=
section
.
settings
.
length
;
}
result
[
group
.
id
]
=
i
;
}
return
result
;
}
public
dispose
():
void
{
dispose
(
this
.
_defaultPreferencesRendererDisposables
);
dispose
(
this
.
_editablePreferencesRendererDisposables
);
...
...
src/vs/workbench/parts/preferences/browser/preferencesRenderers.ts
浏览文件 @
f2b21097
...
...
@@ -71,11 +71,13 @@ export class UserSettingsRenderer extends Disposable implements IPreferencesRend
private
_onClearFocusPreference
:
Emitter
<
ISetting
>
=
new
Emitter
<
ISetting
>
();
public
readonly
onClearFocusPreference
:
Event
<
ISetting
>
=
this
.
_onClearFocusPreference
.
event
;
private
_onUpdatePreference
:
Emitter
<
{
key
:
string
,
value
:
any
,
source
:
IIndexedSetting
}
>
=
new
Emitter
<
{
key
:
string
,
value
:
any
,
source
:
IIndexedSetting
}
>
();
public
readonly
onUpdatePreference
:
Event
<
{
key
:
string
,
value
:
any
,
source
:
IIndexedSetting
}
>
=
this
.
_onUpdatePreference
.
event
;
private
filterResult
:
IFilterResult
;
constructor
(
protected
editor
:
ICodeEditor
,
public
readonly
preferencesModel
:
SettingsEditorModel
,
@
IPreferencesService
protected
preferencesService
:
IPreferencesService
,
@
ITelemetryService
private
telemetryService
:
ITelemetryService
,
@
IConfigurationService
private
configurationService
:
IConfigurationService
,
@
IInstantiationService
protected
instantiationService
:
IInstantiationService
)
{
...
...
@@ -83,7 +85,7 @@ export class UserSettingsRenderer extends Disposable implements IPreferencesRend
this
.
settingHighlighter
=
this
.
_register
(
instantiationService
.
createInstance
(
SettingHighlighter
,
editor
,
this
.
_onFocusPreference
,
this
.
_onClearFocusPreference
));
this
.
highlightMatchesRenderer
=
this
.
_register
(
instantiationService
.
createInstance
(
HighlightMatchesRenderer
,
editor
));
this
.
editSettingActionRenderer
=
this
.
_register
(
this
.
instantiationService
.
createInstance
(
EditSettingRenderer
,
this
.
editor
,
this
.
preferencesModel
,
this
.
settingHighlighter
));
this
.
_register
(
this
.
editSettingActionRenderer
.
onUpdateSetting
(({
key
,
value
,
source
})
=>
this
.
updatePreference
(
key
,
value
,
source
,
tru
e
)));
this
.
_register
(
this
.
editSettingActionRenderer
.
onUpdateSetting
(({
key
,
value
,
source
})
=>
this
.
_updatePreference
(
key
,
value
,
sourc
e
)));
this
.
_register
(
this
.
editor
.
getModel
().
onDidChangeContent
(()
=>
this
.
modelChangeDelayer
.
trigger
(()
=>
this
.
onModelChanged
())));
this
.
createHeader
();
...
...
@@ -109,34 +111,12 @@ export class UserSettingsRenderer extends Disposable implements IPreferencesRend
}
}
public
updatePreference
(
key
:
string
,
value
:
any
,
source
:
IIndexedSetting
,
fromEditableSettings
?:
boolean
):
void
{
const
data
=
{
userConfigurationKeys
:
[
key
]
};
if
(
this
.
filterResult
)
{
data
[
'
query
'
]
=
this
.
filterResult
.
query
;
data
[
'
groupId
'
]
=
source
.
groupId
;
data
[
'
editableSide
'
]
=
!!
fromEditableSettings
;
const
nlpMetadata
=
this
.
filterResult
.
metadata
&&
this
.
filterResult
.
metadata
[
'
nlpResult
'
];
if
(
nlpMetadata
)
{
const
sortedKeys
=
Object
.
keys
(
nlpMetadata
.
scoredResults
).
sort
((
a
,
b
)
=>
nlpMetadata
.
scoredResults
[
b
].
score
-
nlpMetadata
.
scoredResults
[
a
].
score
);
const
suffix
=
'
##
'
+
key
;
data
[
'
nlpIndex
'
]
=
arrays
.
firstIndex
(
sortedKeys
,
key
=>
strings
.
endsWith
(
key
,
suffix
));
}
}
private
_updatePreference
(
key
:
string
,
value
:
any
,
source
:
IIndexedSetting
):
void
{
this
.
_onUpdatePreference
.
fire
({
key
,
value
,
source
});
this
.
updatePreference
(
key
,
value
,
source
);
}
/* __GDPR__
"defaultSettingsActions.copySetting" : {
"userConfigurationKeys" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"query" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"nlpIndex" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"groupId" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"editableSide" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this
.
telemetryService
.
publicLog
(
'
defaultSettingsActions.copySetting
'
,
data
);
public
updatePreference
(
key
:
string
,
value
:
any
,
source
:
IIndexedSetting
):
void
{
const
overrideIdentifier
=
source
.
overrideOf
?
overrideIdentifierFromKey
(
source
.
overrideOf
.
key
)
:
null
;
const
resource
=
this
.
preferencesModel
.
uri
;
this
.
configurationService
.
updateValue
(
key
,
value
,
{
overrideIdentifier
,
resource
},
this
.
preferencesModel
.
configurationTarget
)
...
...
@@ -213,7 +193,7 @@ export class WorkspaceSettingsRenderer extends UserSettingsRenderer implements I
@
IConfigurationService
configurationService
:
IConfigurationService
,
@
IInstantiationService
instantiationService
:
IInstantiationService
)
{
super
(
editor
,
preferencesModel
,
preferencesService
,
telemetryService
,
configurationService
,
instantiationService
);
super
(
editor
,
preferencesModel
,
preferencesService
,
configurationService
,
instantiationService
);
this
.
unsupportedSettingsRenderer
=
this
.
_register
(
instantiationService
.
createInstance
(
UnsupportedSettingsRenderer
,
editor
,
preferencesModel
));
this
.
workspaceConfigurationRenderer
=
this
.
_register
(
instantiationService
.
createInstance
(
WorkspaceConfigurationRenderer
,
editor
,
preferencesModel
));
}
...
...
@@ -244,7 +224,7 @@ export class FolderSettingsRenderer extends UserSettingsRenderer implements IPre
@
IConfigurationService
configurationService
:
IConfigurationService
,
@
IInstantiationService
instantiationService
:
IInstantiationService
)
{
super
(
editor
,
preferencesModel
,
preferencesService
,
telemetryService
,
configurationService
,
instantiationService
);
super
(
editor
,
preferencesModel
,
preferencesService
,
configurationService
,
instantiationService
);
this
.
unsupportedSettingsRenderer
=
this
.
_register
(
instantiationService
.
createInstance
(
UnsupportedSettingsRenderer
,
editor
,
preferencesModel
));
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录