提交 f1b7315a 编写于 作者: S Sandeep Somavarapu

Fix #16372

上级 036c2b0e
......@@ -351,6 +351,7 @@ export class PreferencesEditorContribution extends Disposable implements editorC
export class SettingsRenderer extends Disposable implements IPreferencesRenderer {
private copySettingActionRenderer: CopySettingActionRenderer;
private modelChangeDelayer: Delayer<void> = new Delayer<void>(200);
constructor(protected editor: ICodeEditor, protected settingsEditorModel: SettingsEditorModel,
@IPreferencesService protected preferencesService: IPreferencesService,
......@@ -358,14 +359,18 @@ export class SettingsRenderer extends Disposable implements IPreferencesRenderer
) {
super();
this.copySettingActionRenderer = this._register(instantiationService.createInstance(CopySettingActionRenderer, editor, false));
this._register(editor.getModel().onDidChangeContent(() => this.onModelChanged()));
this._register(editor.getModel().onDidChangeContent(() => this.modelChangeDelayer.trigger(() => this.onModelChanged())));
}
public render() {
public render(): void {
this.copySettingActionRenderer.render(this.settingsEditorModel.settingsGroups);
}
private onModelChanged() {
private onModelChanged(): void {
if (!this.editor.getModel()) {
// model could have been disposed during the delay
return;
}
this.render();
}
}
......@@ -721,12 +726,13 @@ export class CopySettingActionRenderer extends Disposable {
if (jsonSchema) {
const canChooseValue = jsonSchema.enum || jsonSchema.type === 'boolean';
if (this.isDefaultSettings || canChooseValue) {
const lineNumber = setting.keyRange.startLineNumber;
return {
range: {
startLineNumber: setting.valueRange.startLineNumber,
startColumn: model.getLineMaxColumn(setting.valueRange.startLineNumber),
endLineNumber: setting.valueRange.startLineNumber,
endColumn: model.getLineMaxColumn(setting.valueRange.startLineNumber),
startLineNumber: lineNumber,
startColumn: model.getLineMaxColumn(lineNumber),
endLineNumber: lineNumber,
endColumn: model.getLineMaxColumn(lineNumber),
},
options: {
afterContentClassName: 'copySetting',
......@@ -787,7 +793,7 @@ export class CopySettingActionRenderer extends Disposable {
if (lineNumber >= group.range.startLineNumber && lineNumber <= group.range.endLineNumber) {
for (const section of group.sections) {
for (const setting of section.settings) {
if (lineNumber >= setting.valueRange.startLineNumber && lineNumber <= setting.valueRange.endLineNumber) {
if (lineNumber >= setting.keyRange.startLineNumber && lineNumber <= setting.keyRange.endLineNumber) {
return setting;
}
}
......
......@@ -136,6 +136,12 @@ export class SettingsEditorModel extends AbstractSettingsModel implements ISetti
let currentProperty: string = null;
let currentParent: any = [];
let previousParents: any[] = [];
let range = {
startLineNumber: 0,
startColumn: 0,
endLineNumber: 0,
endColumn: 0
};
function onValue(value: any, offset: number, length: number) {
if (Array.isArray(currentParent)) {
......@@ -163,6 +169,9 @@ export class SettingsEditorModel extends AbstractSettingsModel implements ISetti
onObjectBegin: (offset: number, length: number) => {
if (!parsingSettings) {
parsingSettings = true;
let position = model.getPositionAt(offset);
range.startLineNumber = position.lineNumber;
range.startColumn = position.column;
} else {
parsingSettingValue = true;
}
......@@ -177,8 +186,14 @@ export class SettingsEditorModel extends AbstractSettingsModel implements ISetti
if (parsingSettings && !parsingSettingValue) {
let settingStartPosition = model.getPositionAt(offset);
settings.push({
key: name,
description: '',
key: name,
keyRange: {
startLineNumber: settingStartPosition.lineNumber,
startColumn: settingStartPosition.column,
endLineNumber: settingStartPosition.lineNumber,
endColumn: settingStartPosition.column + length
},
range: {
startLineNumber: settingStartPosition.lineNumber,
startColumn: settingStartPosition.column,
......@@ -186,7 +201,6 @@ export class SettingsEditorModel extends AbstractSettingsModel implements ISetti
endColumn: 0
},
value: null,
keyRange: null,
valueRange: null,
descriptionRange: null,
});
......@@ -208,6 +222,9 @@ export class SettingsEditorModel extends AbstractSettingsModel implements ISetti
if (parsingSettingValue) {
parsingSettingValue = false;
} else if (parsingSettings) {
let position = model.getPositionAt(offset);
range.endLineNumber = position.lineNumber;
range.endColumn = position.column;
parsingSettings = false;
}
},
......@@ -245,12 +262,7 @@ export class SettingsEditorModel extends AbstractSettingsModel implements ISetti
],
title: null,
titleRange: null,
range: {
startLineNumber: settings[0].range.startLineNumber,
startColumn: settings[0].range.startColumn,
endLineNumber: settings[settings.length - 1].range.endLineNumber,
endColumn: settings[settings.length - 1].range.endColumn,
}
range
}] : [];
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册