diff --git a/src/sql/parts/common/customInputConverter.ts b/src/sql/parts/common/customInputConverter.ts index 298f4904b3..5a4ef297c7 100644 --- a/src/sql/parts/common/customInputConverter.ts +++ b/src/sql/parts/common/customInputConverter.ts @@ -14,7 +14,7 @@ import { QueryInput } from 'sql/parts/query/common/queryInput'; import { IQueryEditorOptions } from 'sql/workbench/services/queryEditor/common/queryEditorService'; import { QueryPlanInput } from 'sql/parts/queryPlan/queryPlanInput'; import { NotebookInput } from 'sql/parts/notebook/notebookInput'; -import { DEFAULT_NOTEBOOK_PROVIDER, INotebookService } from 'sql/workbench/services/notebook/common/notebookService'; +import { INotebookService } from 'sql/workbench/services/notebook/common/notebookService'; import { ResourceEditorInput } from 'vs/workbench/common/editor/resourceEditorInput'; import { notebookModeId } from 'sql/common/constants'; @@ -57,14 +57,12 @@ export function convertEditorInput(input: EditorInput, options: IQueryEditorOpti //Notebook uri = getNotebookEditorUri(input, instantiationService); if (uri) { - return withService(instantiationService, INotebookService, notebookService => { - let fileName: string = 'untitled'; - if (input) { - fileName = input.getName(); - } - let notebookInput: NotebookInput = instantiationService.createInstance(NotebookInput, fileName, uri); - return notebookInput; - }); + let fileName: string = 'untitled'; + if (input) { + fileName = input.getName(); + } + let notebookInput: NotebookInput = instantiationService.createInstance(NotebookInput, fileName, uri, input); + return notebookInput; } } return input; diff --git a/src/sql/parts/notebook/notebookInput.ts b/src/sql/parts/notebook/notebookInput.ts index 88e396ab13..196decebb6 100644 --- a/src/sql/parts/notebook/notebookInput.ts +++ b/src/sql/parts/notebook/notebookInput.ts @@ -28,6 +28,7 @@ import { notebookModeId } from 'sql/common/constants'; import { ITextFileService, ISaveOptions } from 'vs/workbench/services/textfile/common/textfiles'; import { LocalContentManager } from 'sql/workbench/services/notebook/node/localContentManager'; import { IConnectionProfile } from 'sql/platform/connection/common/interfaces'; +import { UntitledEditorInput } from 'vs/workbench/common/editor/untitledEditorInput'; export type ModeViewSaveHandler = (handle: number) => Thenable; @@ -142,6 +143,7 @@ export class NotebookInput extends EditorInput { constructor(private _title: string, private resource: URI, + private _textInput: UntitledEditorInput, @ITextModelService private textModelService: ITextModelService, @IUntitledEditorService untitledEditorService: IUntitledEditorService, @IInstantiationService private instantiationService: IInstantiationService, @@ -154,6 +156,10 @@ export class NotebookInput extends EditorInput { this.assignProviders(); } + public get textInput(): UntitledEditorInput { + return this._textInput; + } + public confirmSave(): TPromise { return this._model.confirmSave(); } @@ -258,7 +264,7 @@ export class NotebookInput extends EditorInput { } else { let textOrUntitledEditorModel: UntitledEditorModel | IEditorModel; if (this.resource.scheme === Schemas.untitled) { - textOrUntitledEditorModel = await this._untitledEditorService.loadOrCreate({ resource: this.resource, modeId: notebookModeId }); + textOrUntitledEditorModel = await this._textInput.resolve(); } else { const textEditorModelReference = await this.textModelService.createModelReference(this.resource); diff --git a/src/sql/workbench/api/node/mainThreadNotebookDocumentsAndEditors.ts b/src/sql/workbench/api/node/mainThreadNotebookDocumentsAndEditors.ts index 58f1498f68..b26053b327 100644 --- a/src/sql/workbench/api/node/mainThreadNotebookDocumentsAndEditors.ts +++ b/src/sql/workbench/api/node/mainThreadNotebookDocumentsAndEditors.ts @@ -30,6 +30,9 @@ import { disposed } from 'vs/base/common/errors'; import { ICellModel, NotebookContentChange, INotebookModel } from 'sql/parts/notebook/models/modelInterfaces'; import { NotebookChangeType, CellTypes } from 'sql/parts/notebook/models/contracts'; import { ICapabilitiesService } from 'sql/platform/capabilities/common/capabilitiesService'; +import { IUntitledEditorService } from 'vs/workbench/services/untitled/common/untitledEditorService'; +import { notebookModeId } from 'sql/common/constants'; +import { UntitledEditorInput } from 'vs/workbench/common/editor/untitledEditorInput'; class MainThreadNotebookEditor extends Disposable { private _contentChangedEmitter = new Emitter(); @@ -290,6 +293,7 @@ export class MainThreadNotebookDocumentsAndEditors extends Disposable implements private _modelToDisposeMap = new Map(); constructor( extHostContext: IExtHostContext, + @IUntitledEditorService private _untitledEditorService: IUntitledEditorService, @IInstantiationService private _instantiationService: IInstantiationService, @IEditorService private _editorService: IEditorService, @IEditorGroupsService private _editorGroupService: IEditorGroupsService, @@ -361,9 +365,11 @@ export class MainThreadNotebookDocumentsAndEditors extends Disposable implements preserveFocus: options.preserveFocus, pinned: !options.preview }; - let trusted = uri.scheme === Schemas.untitled; - let input = this._instantiationService.createInstance(NotebookInput, uri.fsPath, uri); - input.isTrusted = trusted; + let isUntitled: boolean = uri.scheme === Schemas.untitled; + + const fileInput: UntitledEditorInput = isUntitled ? this._untitledEditorService.createOrGet(uri, notebookModeId) : undefined; + let input = this._instantiationService.createInstance(NotebookInput, uri.fsPath, uri, fileInput); + input.isTrusted = isUntitled; input.defaultKernel = options.defaultKernel; input.connectionProfile = new ConnectionProfile(this._capabilitiesService, options.connectionProfile); diff --git a/src/vs/workbench/common/editor/editorGroup.ts b/src/vs/workbench/common/editor/editorGroup.ts index 67623aa41b..c8d5a88d88 100644 --- a/src/vs/workbench/common/editor/editorGroup.ts +++ b/src/vs/workbench/common/editor/editorGroup.ts @@ -16,6 +16,7 @@ import { ResourceMap } from 'vs/base/common/map'; import { QueryInput } from 'sql/parts/query/common/queryInput'; import { UntitledEditorInput } from 'vs/workbench/common/editor/untitledEditorInput'; import * as CustomInputConverter from 'sql/parts/common/customInputConverter'; +import { NotebookInput } from 'sql/parts/notebook/notebookInput'; const EditorOpenPositioning = { LEFT: 'left', @@ -624,6 +625,8 @@ export class EditorGroup extends Disposable { let editors = this.editors.map(e => { if (e instanceof QueryInput) { return e.sql; + } else if (e instanceof NotebookInput) { + return e.textInput; } return e; }); @@ -654,6 +657,8 @@ export class EditorGroup extends Disposable { let mru = this.mru.map(e => { if (e instanceof QueryInput) { return e.sql; + } else if (e instanceof NotebookInput) { + return e.textInput; } return e; }); diff --git a/src/vs/workbench/services/editor/browser/editorService.ts b/src/vs/workbench/services/editor/browser/editorService.ts index b776442953..78c0d0760f 100644 --- a/src/vs/workbench/services/editor/browser/editorService.ts +++ b/src/vs/workbench/services/editor/browser/editorService.ts @@ -528,10 +528,10 @@ export class EditorService extends Disposable implements EditorServiceImpl { if (!untitledInput.resource || typeof untitledInput.filePath === 'string' || (untitledInput.resource instanceof URI && untitledInput.resource.scheme === Schemas.untitled)) { // {{SQL CARBON EDIT}} - let mode: string = getFileMode( this.instantiationService, untitledInput.resource); + let modeId: string = untitledInput.language ? untitledInput.language : getFileMode( this.instantiationService, untitledInput.resource); return convertEditorInput(this.untitledEditorService.createOrGet( untitledInput.filePath ? URI.file(untitledInput.filePath) : untitledInput.resource, - mode, + modeId, untitledInput.contents, untitledInput.encoding ), undefined, this.instantiationService);