From ff6b355eb8b9e2e018e952d62d68baa3935d9fdc Mon Sep 17 00:00:00 2001 From: Anton Kosyakov Date: Mon, 14 Jan 2019 14:28:39 +0000 Subject: [PATCH] [monaco] fix #4058: fixed cross editor navigation Signed-off-by: Anton Kosyakov --- packages/monaco/src/browser/monaco-editor-provider.ts | 9 ++++++++- packages/monaco/src/browser/monaco-loader.ts | 5 +++-- packages/monaco/src/typings/monaco/index.d.ts | 7 +++++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/monaco/src/browser/monaco-editor-provider.ts b/packages/monaco/src/browser/monaco-editor-provider.ts index 42b46d7bc311d..3021378981ac4 100644 --- a/packages/monaco/src/browser/monaco-editor-provider.ts +++ b/packages/monaco/src/browser/monaco-editor-provider.ts @@ -52,7 +52,14 @@ export class MonacoEditorProvider { @inject(EditorPreferences) protected readonly editorPreferences: EditorPreferences, @inject(MonacoQuickOpenService) protected readonly quickOpenService: MonacoQuickOpenService, @inject(MonacoDiffNavigatorFactory) protected readonly diffNavigatorFactory: MonacoDiffNavigatorFactory - ) { } + ) { + const init = monaco.services.StaticServices.init.bind(monaco.services.StaticServices); + monaco.services.StaticServices.init = o => { + const result = init(o); + result[0].set(monaco.services.ICodeEditorService, codeEditorService); + return result; + }; + } protected async getModel(uri: URI, toDispose: DisposableCollection): Promise { const reference = await this.textModelService.createModelReference(uri); diff --git a/packages/monaco/src/browser/monaco-loader.ts b/packages/monaco/src/browser/monaco-loader.ts index bff38cf24d4d1..0d4fa6f2c9c88 100644 --- a/packages/monaco/src/browser/monaco-loader.ts +++ b/packages/monaco/src/browser/monaco-loader.ts @@ -67,16 +67,17 @@ export function loadMonaco(vsRequire: any): Promise { 'vs/editor/contrib/find/findController', 'vs/editor/contrib/rename/rename', 'vs/editor/contrib/snippet/snippetParser', + 'vs/editor/browser/services/codeEditorService', 'vs/editor/browser/services/codeEditorServiceImpl' ], (css: any, html: any, commands: any, actions: any, registry: any, resolver: any, resolvedKeybinding: any, keyCodes: any, editorExtensions: any, simpleServices: any, standaloneServices: any, quickOpen: any, quickOpenWidget: any, quickOpenModel: any, filters: any, styler: any, platform: any, modes: any, suggest: any, suggestController: any, findController: any, rename: any, snippetParser: any, - codeEditorServiceImpl: any) => { + codeEditorService: any, codeEditorServiceImpl: any) => { const global: any = self; global.monaco.commands = commands; global.monaco.actions = actions; global.monaco.keybindings = Object.assign({}, registry, resolver, resolvedKeybinding, keyCodes); - global.monaco.services = Object.assign({}, simpleServices, standaloneServices, codeEditorServiceImpl); + global.monaco.services = Object.assign({}, simpleServices, standaloneServices, codeEditorService, codeEditorServiceImpl); global.monaco.quickOpen = Object.assign({}, quickOpen, quickOpenWidget, quickOpenModel); global.monaco.filters = filters; global.monaco.theme = styler; diff --git a/packages/monaco/src/typings/monaco/index.d.ts b/packages/monaco/src/typings/monaco/index.d.ts index e1ef121f89abf..761861576a9b5 100644 --- a/packages/monaco/src/typings/monaco/index.d.ts +++ b/packages/monaco/src/typings/monaco/index.d.ts @@ -421,6 +421,8 @@ declare module monaco.keybindings { declare module monaco.services { + export const ICodeEditorService: any; + export abstract class CodeEditorServiceImpl implements monaco.editor.ICodeEditorService { constructor(themeService: IStandaloneThemeService); abstract getActiveCodeEditor(): monaco.editor.ICodeEditor | undefined; @@ -496,7 +498,12 @@ declare module monaco.services { } + export interface ServiceCollection { + set(id: any, instanceOrDescriptor: T): T; + } + export module StaticServices { + export function init(overrides: monaco.editor.IEditorOverrideServices): [ServiceCollection, monaco.instantiation.IInstantiationService]; export const standaloneThemeService: LazyStaticService; export const modeService: LazyStaticService; export const codeEditorService: LazyStaticService;