Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
42ffc0e7
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,发现更多精彩内容 >>
提交
42ffc0e7
编写于
9月 12, 2018
作者:
R
Rob Lourens
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix #47036 remove old settings search issue reporting widget
上级
13cc8e1b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
2 addition
and
218 deletion
+2
-218
src/vs/workbench/parts/preferences/browser/preferencesRenderers.ts
...rkbench/parts/preferences/browser/preferencesRenderers.ts
+2
-218
未找到文件。
src/vs/workbench/parts/preferences/browser/preferencesRenderers.ts
浏览文件 @
42ffc0e7
...
...
@@ -22,17 +22,13 @@ import * as nls from 'vs/nls';
import
{
ConfigurationTarget
,
IConfigurationService
,
overrideIdentifierFromKey
}
from
'
vs/platform/configuration/common/configuration
'
;
import
{
ConfigurationScope
,
Extensions
as
ConfigurationExtensions
,
IConfigurationPropertySchema
,
IConfigurationRegistry
}
from
'
vs/platform/configuration/common/configurationRegistry
'
;
import
{
IContextMenuService
}
from
'
vs/platform/contextview/browser/contextView
'
;
import
{
IEnvironmentService
}
from
'
vs/platform/environment/common/environment
'
;
import
{
IInstantiationService
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
INotificationService
}
from
'
vs/platform/notification/common/notification
'
;
import
{
Registry
}
from
'
vs/platform/registry/common/platform
'
;
import
{
ITelemetryService
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
IWorkspaceContextService
,
WorkbenchState
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
RangeHighlightDecorations
}
from
'
vs/workbench/browser/parts/editor/rangeDecorations
'
;
import
{
DefaultSettingsHeaderWidget
,
EditPreferenceWidget
,
FloatingClickWidget
,
SettingsGroupTitleWidget
,
SettingsHeaderWidget
}
from
'
vs/workbench/parts/preferences/browser/preferencesWidgets
'
;
import
{
IWorkbenchSettingsConfiguration
}
from
'
vs/workbench/parts/preferences/common/preferences
'
;
import
{
IEditorService
,
SIDE_GROUP
}
from
'
vs/workbench/services/editor/common/editorService
'
;
import
{
IFilterResult
,
IPreferencesEditorModel
,
IPreferencesService
,
IScoredResults
,
ISetting
,
ISettingsEditorModel
,
ISettingsGroup
}
from
'
vs/workbench/services/preferences/common/preferences
'
;
import
{
DefaultSettingsHeaderWidget
,
EditPreferenceWidget
,
SettingsGroupTitleWidget
,
SettingsHeaderWidget
}
from
'
vs/workbench/parts/preferences/browser/preferencesWidgets
'
;
import
{
IFilterResult
,
IPreferencesEditorModel
,
IPreferencesService
,
ISetting
,
ISettingsEditorModel
,
ISettingsGroup
}
from
'
vs/workbench/services/preferences/common/preferences
'
;
import
{
DefaultSettingsEditorModel
,
SettingsEditorModel
,
WorkspaceConfigurationEditorModel
}
from
'
vs/workbench/services/preferences/common/preferencesModels
'
;
export
interface
IPreferencesRenderer
<
T
>
extends
IDisposable
{
...
...
@@ -235,7 +231,6 @@ export class DefaultSettingsRenderer extends Disposable implements IPreferencesR
private
filteredMatchesRenderer
:
FilteredMatchesRenderer
;
private
hiddenAreasRenderer
:
HiddenAreasRenderer
;
private
editSettingActionRenderer
:
EditSettingRenderer
;
private
feedbackWidgetRenderer
:
FeedbackWidgetRenderer
;
private
bracesHidingRenderer
:
BracesHidingRenderer
;
private
filterResult
:
IFilterResult
;
...
...
@@ -251,7 +246,6 @@ export class DefaultSettingsRenderer extends Disposable implements IPreferencesR
constructor
(
protected
editor
:
ICodeEditor
,
public
readonly
preferencesModel
:
DefaultSettingsEditorModel
,
@
IPreferencesService
protected
preferencesService
:
IPreferencesService
,
@
IInstantiationService
protected
instantiationService
:
IInstantiationService
,
@
IConfigurationService
private
configurationService
:
IConfigurationService
)
{
super
();
this
.
settingHighlighter
=
this
.
_register
(
instantiationService
.
createInstance
(
SettingHighlighter
,
editor
,
this
.
_onFocusPreference
,
this
.
_onClearFocusPreference
));
...
...
@@ -259,7 +253,6 @@ export class DefaultSettingsRenderer extends Disposable implements IPreferencesR
this
.
settingsGroupTitleRenderer
=
this
.
_register
(
instantiationService
.
createInstance
(
SettingsGroupTitleRenderer
,
editor
));
this
.
filteredMatchesRenderer
=
this
.
_register
(
instantiationService
.
createInstance
(
FilteredMatchesRenderer
,
editor
));
this
.
editSettingActionRenderer
=
this
.
_register
(
instantiationService
.
createInstance
(
EditSettingRenderer
,
editor
,
preferencesModel
,
this
.
settingHighlighter
));
this
.
feedbackWidgetRenderer
=
this
.
_register
(
instantiationService
.
createInstance
(
FeedbackWidgetRenderer
,
editor
));
this
.
bracesHidingRenderer
=
this
.
_register
(
instantiationService
.
createInstance
(
BracesHidingRenderer
,
editor
,
preferencesModel
));
this
.
hiddenAreasRenderer
=
this
.
_register
(
instantiationService
.
createInstance
(
HiddenAreasRenderer
,
editor
,
[
this
.
settingsGroupTitleRenderer
,
this
.
filteredMatchesRenderer
,
this
.
bracesHidingRenderer
]));
...
...
@@ -280,7 +273,6 @@ export class DefaultSettingsRenderer extends Disposable implements IPreferencesR
public
render
()
{
this
.
settingsGroupTitleRenderer
.
render
(
this
.
preferencesModel
.
settingsGroups
);
this
.
editSettingActionRenderer
.
render
(
this
.
preferencesModel
.
settingsGroups
,
this
.
_associatedPreferencesModel
);
this
.
feedbackWidgetRenderer
.
render
(
null
);
this
.
settingHighlighter
.
clear
(
true
);
this
.
bracesHidingRenderer
.
render
(
null
,
this
.
preferencesModel
.
settingsGroups
);
this
.
settingsGroupTitleRenderer
.
showGroup
(
0
);
...
...
@@ -293,7 +285,6 @@ export class DefaultSettingsRenderer extends Disposable implements IPreferencesR
if
(
filterResult
)
{
this
.
filteredMatchesRenderer
.
render
(
filterResult
,
this
.
preferencesModel
.
settingsGroups
);
this
.
settingsGroupTitleRenderer
.
render
(
null
);
this
.
renderIssueWidget
(
filterResult
);
this
.
settingsHeaderRenderer
.
render
(
filterResult
);
this
.
settingHighlighter
.
clear
(
true
);
this
.
bracesHidingRenderer
.
render
(
filterResult
,
this
.
preferencesModel
.
settingsGroups
);
...
...
@@ -301,7 +292,6 @@ export class DefaultSettingsRenderer extends Disposable implements IPreferencesR
}
else
{
this
.
settingHighlighter
.
clear
(
true
);
this
.
filteredMatchesRenderer
.
render
(
null
,
this
.
preferencesModel
.
settingsGroups
);
this
.
renderIssueWidget
(
null
);
this
.
settingsHeaderRenderer
.
render
(
null
);
this
.
settingsGroupTitleRenderer
.
render
(
this
.
preferencesModel
.
settingsGroups
);
this
.
settingsGroupTitleRenderer
.
showGroup
(
0
);
...
...
@@ -312,15 +302,6 @@ export class DefaultSettingsRenderer extends Disposable implements IPreferencesR
this
.
hiddenAreasRenderer
.
render
();
}
private
renderIssueWidget
(
filterResult
:
IFilterResult
):
void
{
const
workbenchSettings
=
this
.
configurationService
.
getValue
<
IWorkbenchSettingsConfiguration
>
().
workbench
.
settings
;
if
(
workbenchSettings
.
enableNaturalLanguageSearchFeedback
)
{
this
.
feedbackWidgetRenderer
.
render
(
filterResult
);
}
else
{
this
.
feedbackWidgetRenderer
.
render
(
null
);
}
}
public
focusPreference
(
s
:
ISetting
):
void
{
const
setting
=
this
.
getSetting
(
s
);
if
(
setting
)
{
...
...
@@ -565,203 +546,6 @@ export class HiddenAreasRenderer extends Disposable {
}
}
export
class
FeedbackWidgetRenderer
extends
Disposable
{
private
static
readonly
DEFAULT_COMMENT_TEXT
=
'
Replace this comment with any text feedback.
'
;
private
static
readonly
INSTRUCTION_TEXT
=
[
'
// Modify the "resultScores" section to contain only your expected results. Assign scores to indicate their relevance.
'
,
'
// Results present in "resultScores" will be automatically "boosted" for this query, if they are not already at the top of the result set.
'
,
'
// Add phrase pairs to the "alts" section to have them considered to be synonyms in queries.
'
].
join
(
'
\n
'
);
private
_feedbackWidget
:
FloatingClickWidget
;
private
_currentResult
:
IFilterResult
;
constructor
(
private
editor
:
ICodeEditor
,
@
IInstantiationService
private
instantiationService
:
IInstantiationService
,
@
IEditorService
private
editorService
:
IEditorService
,
@
ITelemetryService
private
telemetryService
:
ITelemetryService
,
@
INotificationService
private
notificationService
:
INotificationService
,
@
IEnvironmentService
private
environmentService
:
IEnvironmentService
)
{
super
();
}
public
render
(
result
:
IFilterResult
):
void
{
this
.
_currentResult
=
result
;
if
(
result
&&
result
.
metadata
)
{
this
.
showWidget
();
}
else
if
(
this
.
_feedbackWidget
)
{
this
.
disposeWidget
();
}
}
private
showWidget
():
void
{
if
(
!
this
.
_feedbackWidget
)
{
this
.
_feedbackWidget
=
this
.
_register
(
this
.
instantiationService
.
createInstance
(
FloatingClickWidget
,
this
.
editor
,
'
Provide feedback
'
,
null
));
this
.
_register
(
this
.
_feedbackWidget
.
onClick
(()
=>
this
.
getFeedback
()));
this
.
_feedbackWidget
.
render
();
}
}
private
getFeedback
():
void
{
if
(
!
this
.
telemetryService
.
isOptedIn
&&
this
.
environmentService
.
appQuality
)
{
this
.
notificationService
.
error
(
'
Can
\'
t send feedback, user is opted out of telemetry
'
);
return
;
}
const
result
=
this
.
_currentResult
;
const
metadata
=
result
.
metadata
[
'
nlpResult
'
];
// Feedback only on nlpResult set for now
const
actualResults
=
metadata
?
metadata
.
scoredResults
:
{};
const
actualResultIds
=
Object
.
keys
(
actualResults
);
const
feedbackQuery
:
any
=
{};
feedbackQuery
[
'
comment
'
]
=
FeedbackWidgetRenderer
.
DEFAULT_COMMENT_TEXT
;
feedbackQuery
[
'
queryString
'
]
=
result
.
query
;
feedbackQuery
[
'
duration
'
]
=
metadata
?
metadata
.
duration
:
-
1
;
feedbackQuery
[
'
resultScores
'
]
=
[];
actualResultIds
.
forEach
(
settingId
=>
{
feedbackQuery
[
'
resultScores
'
].
push
({
packageID
:
actualResults
[
settingId
].
packageId
,
key
:
actualResults
[
settingId
].
key
,
score
:
10
});
});
feedbackQuery
[
'
alts
'
]
=
[];
const
groupCountsText
=
result
.
filteredGroups
.
map
(
group
=>
`//
${
group
.
id
}
:
${
group
.
sections
[
0
].
settings
.
length
}
`
)
.
join
(
'
\n
'
);
const
contents
=
FeedbackWidgetRenderer
.
INSTRUCTION_TEXT
+
'
\n
'
+
JSON
.
stringify
(
feedbackQuery
,
undefined
,
'
'
)
+
'
\n\n
'
+
this
.
getScoreText
(
actualResults
)
+
'
\n\n
'
+
groupCountsText
+
'
\n
'
;
this
.
editorService
.
openEditor
({
contents
,
language
:
'
jsonc
'
},
SIDE_GROUP
).
then
(
feedbackEditor
=>
{
const
sendFeedbackWidget
=
this
.
_register
(
this
.
instantiationService
.
createInstance
(
FloatingClickWidget
,
feedbackEditor
.
getControl
(),
'
Send feedback
'
,
null
));
sendFeedbackWidget
.
render
();
this
.
_register
(
sendFeedbackWidget
.
onClick
(()
=>
{
this
.
sendFeedback
(
feedbackEditor
.
getControl
()
as
ICodeEditor
,
result
,
actualResults
).
then
(()
=>
{
sendFeedbackWidget
.
dispose
();
this
.
notificationService
.
info
(
'
Feedback sent successfully
'
);
},
err
=>
{
this
.
notificationService
.
error
(
'
Error sending feedback:
'
+
err
.
message
);
});
}));
});
}
private
getScoreText
(
results
?:
IScoredResults
):
string
{
if
(
!
results
)
{
return
''
;
}
return
Object
.
keys
(
results
)
.
map
(
name
=>
{
return
`//
${
results
[
name
].
key
}
:
${
results
[
name
].
score
}
`
;
}).
join
(
'
\n
'
);
}
private
sendFeedback
(
feedbackEditor
:
ICodeEditor
,
result
:
IFilterResult
,
scoredResults
:
IScoredResults
):
TPromise
<
void
>
{
// const model = feedbackEditor.getModel();
// const expectedQueryLines = model.getLinesContent()
// .filter(line => !strings.startsWith(line, '//'));
// let expectedQuery: any;
// try {
// expectedQuery = JSON.parse(expectedQueryLines.join('\n'));
// } catch (e) {
// // invalid JSON
// return TPromise.wrapError(new Error('Invalid JSON: ' + e.message));
// }
// const userComment = expectedQuery.comment === FeedbackWidgetRenderer.DEFAULT_COMMENT_TEXT ? undefined : expectedQuery.comment;
// // validate alts
// if (!this.validateAlts(expectedQuery.alts)) {
// return TPromise.wrapError(new Error('alts must be an array of 2-element string arrays'));
// }
// const altsAdded = expectedQuery.alts && expectedQuery.alts.length;
// const alts = altsAdded ? expectedQuery.alts : undefined;
// const workbenchSettings = this.configurationService.getValue<IWorkbenchSettingsConfiguration>().workbench.settings;
// const autoIngest = workbenchSettings.naturalLanguageSearchAutoIngestFeedback;
// const nlpMetadata = result.metadata && result.metadata['nlpResult'];
// const duration = nlpMetadata && nlpMetadata.duration;
// const requestBody = nlpMetadata && nlpMetadata.requestBody;
// const actualResultScores = {};
// for (let key in scoredResults) {
// actualResultScores[key] = {
// score: scoredResults[key].score
// };
// }
// /* __GDPR__
// "settingsSearchResultFeedback" : {
// "query" : { "classification": "CustomerContent", "purpose": "FeatureInsight" },
// "requestBody" : { "classification": "CustomerContent", "purpose": "FeatureInsight" },
// "userComment" : { "classification": "CustomerContent", "purpose": "FeatureInsight" },
// "actualResults" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
// "expectedResults" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
// "duration" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
// "buildNumber" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
// "alts" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
// "autoIngest" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }
// }
// */
// return this.telemetryService.publicLog('settingsSearchResultFeedback', {
// query: result.query,
// requestBody,
// userComment,
// actualResults: actualResultScores,
// expectedResults: expectedQuery.resultScores,
// duration,
// buildNumber: this.environmentService.settingsSearchBuildId,
// alts,
// autoIngest
// });
// TODO@roblou - reduce GDPR-relevant telemetry by removing this, but it's still helpful for personal use.
// Consider changing this to write to disk.
return
TPromise
.
wrap
(
null
);
}
// private validateAlts(alts?: string[][]): boolean {
// if (!alts) {
// return true;
// }
// if (!Array.isArray(alts)) {
// return false;
// }
// if (!alts.length) {
// return true;
// }
// if (!alts.every(altPair => Array.isArray(altPair) && altPair.length === 2 && typeof altPair[0] === 'string' && typeof altPair[1] === 'string')) {
// return false;
// }
// return true;
// }
private
disposeWidget
():
void
{
if
(
this
.
_feedbackWidget
)
{
this
.
_feedbackWidget
.
dispose
();
this
.
_feedbackWidget
=
null
;
}
}
public
dispose
()
{
this
.
disposeWidget
();
super
.
dispose
();
}
}
export
class
FilteredMatchesRenderer
extends
Disposable
implements
HiddenAreasProvider
{
private
decorationIds
:
string
[]
=
[];
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录