From 345945da5377874c770774054b78e6b374b821a6 Mon Sep 17 00:00:00 2001 From: Victor Rubezhny Date: Fri, 8 Nov 2019 20:00:30 +0100 Subject: [PATCH] [vscode] No error message if vscode.open command is invoked with resource that doesn't exist #5667 Signed-off-by: Victor Rubezhny --- .../src/browser/monaco-text-model-service.ts | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/packages/monaco/src/browser/monaco-text-model-service.ts b/packages/monaco/src/browser/monaco-text-model-service.ts index 2ede3881a36f7..7cf8f24f7ad5d 100644 --- a/packages/monaco/src/browser/monaco-text-model-service.ts +++ b/packages/monaco/src/browser/monaco-text-model-service.ts @@ -20,6 +20,7 @@ import URI from '@theia/core/lib/common/uri'; import { ResourceProvider, ReferenceCollection, Event } from '@theia/core'; import { EditorPreferences, EditorPreferenceChange } from '@theia/editor/lib/browser'; import { MonacoEditorModel } from './monaco-editor-model'; +import { MessageClient, MessageType } from '@theia/core/lib/common'; @injectable() export class MonacoTextModelService implements monaco.editor.ITextModelService { @@ -40,6 +41,9 @@ export class MonacoTextModelService implements monaco.editor.ITextModelService { @inject(ProtocolToMonacoConverter) protected readonly p2m: ProtocolToMonacoConverter; + @inject(MessageClient) + protected readonly messages: MessageClient; + get models(): MonacoEditorModel[] { return this._models.values(); } @@ -57,14 +61,20 @@ export class MonacoTextModelService implements monaco.editor.ITextModelService { } protected async loadModel(uri: URI): Promise { - await this.editorPreferences.ready; - const resource = await this.resourceProvider(uri); - const model = await (new MonacoEditorModel(resource, this.m2p, this.p2m, { encoding: this.editorPreferences.get('files.encoding') }).load()); - this.updateModel(model); - model.textEditorModel.onDidChangeLanguage(() => this.updateModel(model)); - const disposable = this.editorPreferences.onPreferenceChanged(change => this.updateModel(model, change)); - model.onDispose(() => disposable.dispose()); - return model; + try { + await this.editorPreferences.ready; + const resource = await this.resourceProvider(uri); + const model = await (new MonacoEditorModel(resource, this.m2p, this.p2m, { encoding: this.editorPreferences.get('files.encoding') }).load()); + this.updateModel(model); + model.textEditorModel.onDidChangeLanguage(() => this.updateModel(model)); + const disposable = this.editorPreferences.onPreferenceChanged(change => this.updateModel(model, change)); + model.onDispose(() => disposable.dispose()); + return model; + } catch (error) { + const msg = 'Unable to open "' + uri + '": ' + error; + this.messages.showMessage({ type: MessageType.Error, text: msg }); + return Promise.reject(error); + } } protected readonly modelOptions: {