From cf43ca6ae3ae63bdf657a67dec64d28eb2e13296 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Fri, 19 Oct 2018 17:37:13 +0200 Subject: [PATCH] try to load a model when an editor/api command wants to work with it --- src/vs/editor/browser/editorExtensions.ts | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/vs/editor/browser/editorExtensions.ts b/src/vs/editor/browser/editorExtensions.ts index 727365c539b..36171828096 100644 --- a/src/vs/editor/browser/editorExtensions.ts +++ b/src/vs/editor/browser/editorExtensions.ts @@ -19,6 +19,8 @@ import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { ITextModel } from 'vs/editor/common/model'; import { IPosition } from 'vs/base/browser/ui/contextview/contextview'; +import { ITextModelService } from 'vs/editor/common/services/resolverService'; +import { always } from 'vs/base/common/async'; export type ServicesAccessor = ServicesAccessor; export type IEditorContributionCtor = IConstructorSignature1; @@ -258,13 +260,23 @@ export function registerDefaultLanguageCommand(id: string, handler: (model: ITex } const model = accessor.get(IModelService).getModel(resource); - if (!model) { - throw illegalArgument('Can not find open model for ' + resource); + if (model) { + const editorPosition = Position.lift(position); + return handler(model, editorPosition, args); } - const editorPosition = Position.lift(position); - - return handler(model, editorPosition, args); + return accessor.get(ITextModelService).createModelReference(resource).then(reference => { + return always(new Promise((resolve, reject) => { + try { + let result = handler(reference.object.textEditorModel, Position.lift(position), args); + resolve(result); + } catch (err) { + reject(err); + } + }), () => { + reference.dispose(); + }); + }); }); } -- GitLab