From c0f1ece220587ccc87f6aa9e9b01ba6a326e32be Mon Sep 17 00:00:00 2001 From: Niels Thole Date: Wed, 2 May 2018 11:59:01 +0200 Subject: [PATCH 1/2] Add registerHoverProvider --- monaco-editor-iframe.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/monaco-editor-iframe.js b/monaco-editor-iframe.js index a4d46cc..56d88c1 100644 --- a/monaco-editor-iframe.js +++ b/monaco-editor-iframe.js @@ -42,6 +42,16 @@ event: 'registerSignatureHelpProvider', args: [languageId, provider] }); + }, + registerHoverProvider: (languageId, provider) => { + if (provider.provideHover) { + provider.provideHover = provider.provideHover.toString(); + } + this.postMessage({ + path: ['monaco', 'languages'], + event: 'registerHoverProvider', + args: [languageId, provider] + }); } }; } @@ -331,6 +341,11 @@ args[1].provideSignatureHelp = eval(args[1].provideSignatureHelp); } } + if (event === 'registerHoverProvider') { + if (args[1].provideHover) { + args[1].provideHover = eval(args[1].provideHover); + } + } try { let cmd = proxy; path.forEach(k => { cmd = cmd[k]; }); From 57737bae49700e9fad88c097e1819abd1daed809 Mon Sep 17 00:00:00 2001 From: Niels Thole Date: Wed, 2 May 2018 12:07:13 +0200 Subject: [PATCH 2/2] New function clearHoverProviders to remove all existing hover providers --- monaco-editor-iframe.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/monaco-editor-iframe.js b/monaco-editor-iframe.js index 56d88c1..c6adfdc 100644 --- a/monaco-editor-iframe.js +++ b/monaco-editor-iframe.js @@ -52,6 +52,13 @@ event: 'registerHoverProvider', args: [languageId, provider] }); + }, + clearHoverProviders: () => { + this.postMessage({ + path: ['monaco', 'languages'], + event: 'clearHoverProviders', + args: [] + }); } }; } @@ -233,6 +240,7 @@ var editorReference = "${opts.editorReference}" var proxy = {}; var queue = []; + var hoverProviders = []; require.config({ paths: {vs: "${libPath}"} @@ -298,6 +306,12 @@ proxy.editor.getModel().setValue(args[0]); return; } + if (event === 'clearHoverProviders') { + for (let hoverProvider of hoverProviders) { + hoverProvider.dispose(); + } + return; + } if(event === 'highlightLine') { proxy.editor.decorationList = []; var debugInfo = args[0]; @@ -349,7 +363,10 @@ try { let cmd = proxy; path.forEach(k => { cmd = cmd[k]; }); - cmd[event](...args); + let disposable = cmd[event](...args); + if (event === 'registerHoverProvider') { + hoverProviders.push(disposable); + } } catch (err) { console.error(err); }