未验证 提交 8ce2d77b 编写于 作者: A Alex Dima

Fixes #99027: Add support for storing properties that survive text buffer diposing

上级 c2be1bb8
......@@ -10,6 +10,7 @@ import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService
import { IDecorationRenderOptions } from 'vs/editor/common/editorCommon';
import { IModelDecorationOptions, ITextModel } from 'vs/editor/common/model';
import { IResourceEditorInput } from 'vs/platform/editor/common/editor';
import { URI } from 'vs/base/common/uri';
export abstract class AbstractCodeEditorService extends Disposable implements ICodeEditorService {
......@@ -94,6 +95,29 @@ export abstract class AbstractCodeEditorService extends Disposable implements IC
abstract resolveDecorationOptions(decorationTypeKey: string | undefined, writable: boolean): IModelDecorationOptions;
private readonly _transientWatchers: { [uri: string]: ModelTransientSettingWatcher; } = {};
private readonly _modelProperties = new Map<string, Map<string, any>>();
public setModelProperty(resource: URI, key: string, value: any): void {
const key1 = resource.toString();
let dest: Map<string, any>;
if (this._modelProperties.has(key1)) {
dest = this._modelProperties.get(key1)!;
} else {
dest = new Map<string, any>();
this._modelProperties.set(key1, dest);
}
dest.set(key, value);
}
public getModelProperty(resource: URI, key: string): any {
const key1 = resource.toString();
if (this._modelProperties.has(key1)) {
const innerMap = this._modelProperties.get(key1)!;
return innerMap.get(key);
}
return undefined;
}
public setTransientModelProperty(model: ITextModel, key: string, value: any): void {
const uri = model.uri.toString();
......
......@@ -9,6 +9,7 @@ import { IDecorationRenderOptions } from 'vs/editor/common/editorCommon';
import { IModelDecorationOptions, ITextModel } from 'vs/editor/common/model';
import { IResourceEditorInput } from 'vs/platform/editor/common/editor';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { URI } from 'vs/base/common/uri';
export const ICodeEditorService = createDecorator<ICodeEditorService>('codeEditorService');
......@@ -41,6 +42,9 @@ export interface ICodeEditorService {
removeDecorationType(key: string): void;
resolveDecorationOptions(typeKey: string, writable: boolean): IModelDecorationOptions;
setModelProperty(resource: URI, key: string, value: any): void;
getModelProperty(resource: URI, key: string): any;
setTransientModelProperty(model: ITextModel, key: string, value: any): void;
getTransientModelProperty(model: ITextModel, key: string): any;
getTransientModelProperties(model: ITextModel): [string, any][] | undefined;
......
......@@ -16,11 +16,11 @@ import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
const ignoreUnusualLineTerminators = 'ignoreUnusualLineTerminators';
function writeIgnoreState(codeEditorService: ICodeEditorService, model: ITextModel, state: boolean): void {
codeEditorService.setTransientModelProperty(model, ignoreUnusualLineTerminators, state);
codeEditorService.setModelProperty(model.uri, ignoreUnusualLineTerminators, state);
}
function readIgnoreState(codeEditorService: ICodeEditorService, model: ITextModel): boolean | undefined {
return codeEditorService.getTransientModelProperty(model, ignoreUnusualLineTerminators);
return codeEditorService.getModelProperty(model.uri, ignoreUnusualLineTerminators);
}
class UnusualLineTerminatorsDetector extends Disposable implements IEditorContribution {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册