diff --git a/src/vs/workbench/contrib/notebook/browser/notebookEditorInput.ts b/src/vs/workbench/contrib/notebook/browser/notebookEditorInput.ts index 8dfb595f64ce7a5fe54919cf1319bcb8c4e022f8..ef987d7b89c9797e6cd5c5a8ac0e31a8193552d9 100644 --- a/src/vs/workbench/contrib/notebook/browser/notebookEditorInput.ts +++ b/src/vs/workbench/contrib/notebook/browser/notebookEditorInput.ts @@ -98,7 +98,13 @@ export class NotebookEditorInput extends EditorInput { } async saveAs(group: GroupIdentifier, options?: ISaveOptions): Promise { - if (!this._textModel) { + if (!this._textModel || !this.viewType) { + return undefined; + } + + const provider = this._notebookService.getContributedNotebookProvider(this.viewType!); + + if (!provider) { return undefined; } @@ -108,6 +114,21 @@ export class NotebookEditorInput extends EditorInput { return undefined; // save cancelled } + if (!provider.matches(target)) { + const patterns = provider.selector.map(pattern => { + if (pattern.excludeFileNamePattern) { + return `${pattern.filenamePattern} (exclude: ${pattern.excludeFileNamePattern})`; + } + + return pattern.filenamePattern; + }).join(', '); + throw new Error(`File name ${target} is not supported by ${provider.providerDisplayName}. + +Please make sure the file name matches following patterns: +${patterns} +`); + } + if (!await this._textModel.object.saveAs(target)) { return undefined; }