提交 7ce5fe0d 编写于 作者: B Benjamin Pasero

Preserve word wrap state in target file when saving untitled file (fix #33840)

上级 ceabb063
......@@ -120,6 +120,16 @@ export abstract class AbstractCodeEditorService extends Disposable implements IC
return this._transientWatchers[uri].get(key);
}
public getTransientModelProperties(model: ITextModel): [string, any][] | undefined {
const uri = model.uri.toString();
if (!this._transientWatchers.hasOwnProperty(uri)) {
return undefined;
}
return this._transientWatchers[uri].keys().map(key => [key, this._transientWatchers[uri].get(key)]);
}
_removeWatcher(w: ModelTransientSettingWatcher): void {
delete this._transientWatchers[w.uri];
}
......@@ -145,4 +155,8 @@ export class ModelTransientSettingWatcher {
public get(key: string): any {
return this._values[key];
}
public keys(): string[] {
return Object.keys(this._values);
}
}
......@@ -43,6 +43,7 @@ export interface ICodeEditorService {
setTransientModelProperty(model: ITextModel, key: string, value: any): void;
getTransientModelProperty(model: ITextModel, key: string): any;
getTransientModelProperties(model: ITextModel): [string, any][] | undefined;
getActiveCodeEditor(): ICodeEditor | null;
openCodeEditor(input: IResourceInput, source: ICodeEditor | null, sideBySide?: boolean): Promise<ICodeEditor | null>;
......
......@@ -32,6 +32,7 @@ import { IFilesConfigurationService } from 'vs/workbench/services/filesConfigura
import { CancellationToken } from 'vs/base/common/cancellation';
import { ITextModelService, IResolvedTextEditorModel } from 'vs/editor/common/services/resolverService';
import { BaseTextEditorModel } from 'vs/workbench/common/editor/textEditorModel';
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
/**
* The workbench file service implementation implements the raw file service spec and adds additional methods on top.
......@@ -70,7 +71,8 @@ export abstract class AbstractTextFileService extends Disposable implements ITex
@IEditorService private readonly editorService: IEditorService,
@ITextResourceConfigurationService protected readonly textResourceConfigurationService: ITextResourceConfigurationService,
@IFilesConfigurationService protected readonly filesConfigurationService: IFilesConfigurationService,
@ITextModelService private readonly textModelService: ITextModelService
@ITextModelService private readonly textModelService: ITextModelService,
@ICodeEditorService private readonly codeEditorService: ICodeEditorService
) {
super();
......@@ -517,6 +519,14 @@ export abstract class AbstractTextFileService extends Disposable implements ITex
if (sourceMode.language !== PLAINTEXT_MODE_ID && targetMode.language === PLAINTEXT_MODE_ID) {
targetTextModel.setMode(sourceMode); // only use if more specific than plain/text
}
// transient properties
const sourceTransientProperties = this.codeEditorService.getTransientModelProperties(sourceTextModel);
if (sourceTransientProperties) {
for (const [key, value] of sourceTransientProperties) {
this.codeEditorService.setTransientModelProperty(targetTextModel, key, value);
}
}
}
// save model
......
......@@ -38,6 +38,7 @@ import { IEditorService } from 'vs/workbench/services/editor/common/editorServic
import { assign } from 'vs/base/common/objects';
import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService';
import { ITextModelService } from 'vs/editor/common/services/resolverService';
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
export class NativeTextFileService extends AbstractTextFileService {
......@@ -55,9 +56,10 @@ export class NativeTextFileService extends AbstractTextFileService {
@ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService,
@IProductService private readonly productService: IProductService,
@IFilesConfigurationService filesConfigurationService: IFilesConfigurationService,
@ITextModelService textModelService: ITextModelService
@ITextModelService textModelService: ITextModelService,
@ICodeEditorService codeEditorService: ICodeEditorService
) {
super(fileService, untitledTextEditorService, lifecycleService, instantiationService, modelService, environmentService, historyService, dialogService, fileDialogService, editorService, textResourceConfigurationService, filesConfigurationService, textModelService);
super(fileService, untitledTextEditorService, lifecycleService, instantiationService, modelService, environmentService, historyService, dialogService, fileDialogService, editorService, textResourceConfigurationService, filesConfigurationService, textModelService, codeEditorService);
}
private _encoding: EncodingOracle | undefined;
......
......@@ -207,7 +207,8 @@ export class TestTextFileService extends NativeTextFileService {
@ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService,
@IProductService productService: IProductService,
@IFilesConfigurationService filesConfigurationService: IFilesConfigurationService,
@ITextModelService textModelService: ITextModelService
@ITextModelService textModelService: ITextModelService,
@ICodeEditorService codeEditorService: ICodeEditorService
) {
super(
fileService,
......@@ -223,7 +224,8 @@ export class TestTextFileService extends NativeTextFileService {
textResourceConfigurationService,
productService,
filesConfigurationService,
textModelService
textModelService,
codeEditorService
);
}
......@@ -1238,6 +1240,7 @@ export class TestCodeEditorService implements ICodeEditorService {
resolveDecorationOptions(_typeKey: string, _writable: boolean): IModelDecorationOptions { return Object.create(null); }
setTransientModelProperty(_model: ITextModel, _key: string, _value: any): void { }
getTransientModelProperty(_model: ITextModel, _key: string) { }
getTransientModelProperties(_model: ITextModel) { return undefined; }
getActiveCodeEditor(): ICodeEditor | null { return null; }
openCodeEditor(_input: IResourceInput, _source: ICodeEditor, _sideBySide?: boolean): Promise<ICodeEditor | null> { return Promise.resolve(null); }
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册