From 0c576a41af0cf293b7e19f65605692910c269d59 Mon Sep 17 00:00:00 2001 From: PedroCristovao-Movai Date: Mon, 22 Aug 2022 13:40:56 +0000 Subject: [PATCH] register completion item just once --- .../hooks/useMonacoEditorCore.js | 61 +++++++++++-------- src/stories/MonacoCodeEditor.stories.js | 4 +- 2 files changed, 36 insertions(+), 29 deletions(-) diff --git a/src/components/MonacoCodeEditor/hooks/useMonacoEditorCore.js b/src/components/MonacoCodeEditor/hooks/useMonacoEditorCore.js index a0c0306..a4f8f76 100644 --- a/src/components/MonacoCodeEditor/hooks/useMonacoEditorCore.js +++ b/src/components/MonacoCodeEditor/hooks/useMonacoEditorCore.js @@ -12,6 +12,7 @@ import normalizeUrl from "normalize-url"; import { useCallback, useEffect } from "react"; import ReconnectingWebSocket from "reconnecting-websocket"; import { PORT, SERVER_PATH } from "../../../constants/Constants"; +import isEqual from "lodash/isEqual"; //======================================================================================== /* * @@ -111,6 +112,8 @@ function sendBuiltins2LanguageServer(builtins) { //======================================================================================== const useMonacoEditorCore = () => { + []; + useEffect(() => { getBuiltins().then((actualBuiltins) => { BUILTINS = actualBuiltins; @@ -158,16 +161,16 @@ const useMonacoEditorCore = () => { } = props; function getSuggestions(model, position) { if (!BUILTINS) return []; - if (!areBuiltinsSend) { - BUILTINS = { - ...BUILTINS, - ...builtins.map((b) => ({ - label: b, - insertText: b, - })), - }; + const newBuiltins = { + ...BUILTINS, + ...builtins.map((b) => ({ + label: b, + insertText: b, + })), + }; + if (!isEqual(newBuiltins, BUILTINS)) { + BUILTINS = newBuiltins; sendBuiltins2LanguageServer(BUILTINS); - areBuiltinsSend = true; } // parse the current suggestion position const textUntilPosition = model.getValueInRange({ @@ -207,25 +210,30 @@ const useMonacoEditorCore = () => { ); } } + + const defaultSuggestions = Object.values(BUILTINS).map((builtin) => ({ + ...builtin, + range: range, + })); + return suggestionsForObject.length > 0 ? suggestionsForObject - : Object.values(BUILTINS).map((builtin) => ({ - ...builtin, - range: range, - })); + : defaultSuggestions; + } + if (!isCompletionItemProviderRegister) { + monaco.languages.registerCompletionItemProvider("python", { + provideCompletionItems: function (model, position) { + console.debug( + "debug provide completion item", + getSuggestions(model, position) + ); + return { + suggestions: getSuggestions(model, position), + }; + }, + }); + isCompletionItemProviderRegister = true; } - - monaco.languages.registerCompletionItemProvider("python", { - provideCompletionItems: function (model, position) { - console.debug( - "debug provide completion item", - getSuggestions(model, position) - ); - return { - suggestions: getSuggestions(model, position), - }; - }, - }); const editor = monaco.editor.create(element, { value: value, @@ -267,6 +275,5 @@ const useMonacoEditorCore = () => { * It had to be this way, it didn't work as a React.useState. */ let BUILTINS = undefined; -let areBuiltinsSend = false; - +let isCompletionItemProviderRegister = false; export default useMonacoEditorCore; diff --git a/src/stories/MonacoCodeEditor.stories.js b/src/stories/MonacoCodeEditor.stories.js index e7737d9..ff8b0ab 100644 --- a/src/stories/MonacoCodeEditor.stories.js +++ b/src/stories/MonacoCodeEditor.stories.js @@ -37,9 +37,9 @@ Python.parameters = { // MUST BE A REAL TOKEN FROM MOVAI BE return { refresh_token: - "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJSZWZyZXNoIiwiaXNzIjoiYmFja2VuZCIsImlhdCI6MTY2MTE2Mjk1MCwiZXhwIjoxNjYxNzY3NzUwLCJqdGkiOiJjMWZmZmM2MS1lNmQxLTQ0YWYtOTI1Yy0xNWY3ZDBjNjlhZjYiLCJyZWZyZXNoX2lkIjoiIiwiZG9tYWluX25hbWUiOiJpbnRlcm5hbCIsImFjY291bnRfbmFtZSI6InBlZHJvIiwiY29tbW9uX25hbWUiOiJQZWRybyIsInVzZXJfdHlwZSI6IklOVEVSTkFMIiwicm9sZXMiOlsiRGVmYXVsdFJvbGUiXSwiZW1haWwiOiIiLCJzdXBlcl91c2VyIjp0cnVlLCJyZWFkX29ubHkiOmZhbHNlLCJzZW5kX3JlcG9ydCI6ZmFsc2V9.mtHcttZc4t2n49vP4Cx0_3N6L7t0vXRqHMm--mQZKcs", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJSZWZyZXNoIiwiaXNzIjoiYmFja2VuZCIsImlhdCI6MTY2MTE3MzcyNywiZXhwIjoxNjYxNzc4NTI3LCJqdGkiOiJiZDU2MzY3OS0xNTkyLTQwZGMtYjg4OC05YjQ2NWQ0ZTE5YTciLCJyZWZyZXNoX2lkIjoiIiwiZG9tYWluX25hbWUiOiJpbnRlcm5hbCIsImFjY291bnRfbmFtZSI6InBlZHJvIiwiY29tbW9uX25hbWUiOiJQZWRybyIsInVzZXJfdHlwZSI6IklOVEVSTkFMIiwicm9sZXMiOlsiRGVmYXVsdFJvbGUiXSwiZW1haWwiOiIiLCJzdXBlcl91c2VyIjp0cnVlLCJyZWFkX29ubHkiOmZhbHNlLCJzZW5kX3JlcG9ydCI6ZmFsc2V9.sj7p0n81hHdQCxQtCwRJHzBPTJShG7JgSZJR6VkBSFs", access_token: - "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBY2Nlc3MiLCJpc3MiOiJiYWNrZW5kIiwiaWF0IjoxNjYxMTYyOTUwLCJleHAiOjE2NjExNjY1NTAsImp0aSI6IjgwZDhjNWY2LWMxN2ItNDdiNS05ZWJjLWMyNTYxMWI0NDg0NyIsInJlZnJlc2hfaWQiOiJjMWZmZmM2MS1lNmQxLTQ0YWYtOTI1Yy0xNWY3ZDBjNjlhZjYiLCJkb21haW5fbmFtZSI6ImludGVybmFsIiwiYWNjb3VudF9uYW1lIjoicGVkcm8iLCJjb21tb25fbmFtZSI6IlBlZHJvIiwidXNlcl90eXBlIjoiSU5URVJOQUwiLCJyb2xlcyI6WyJEZWZhdWx0Um9sZSJdLCJlbWFpbCI6IiIsInN1cGVyX3VzZXIiOnRydWUsInJlYWRfb25seSI6ZmFsc2UsInNlbmRfcmVwb3J0IjpmYWxzZX0.N6rrNkwFAL0jnm7i9Ua80CHqDrD7I9OJuBjumpFsn5c", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBY2Nlc3MiLCJpc3MiOiJiYWNrZW5kIiwiaWF0IjoxNjYxMTczNzI3LCJleHAiOjE2NjExNzczMjcsImp0aSI6ImJjNDFkYmI5LWU2ZTYtNDQ4NS04MTRlLTdjMWY0ZThmODdkNSIsInJlZnJlc2hfaWQiOiJiZDU2MzY3OS0xNTkyLTQwZGMtYjg4OC05YjQ2NWQ0ZTE5YTciLCJkb21haW5fbmFtZSI6ImludGVybmFsIiwiYWNjb3VudF9uYW1lIjoicGVkcm8iLCJjb21tb25fbmFtZSI6IlBlZHJvIiwidXNlcl90eXBlIjoiSU5URVJOQUwiLCJyb2xlcyI6WyJEZWZhdWx0Um9sZSJdLCJlbWFpbCI6IiIsInN1cGVyX3VzZXIiOnRydWUsInJlYWRfb25seSI6ZmFsc2UsInNlbmRfcmVwb3J0IjpmYWxzZX0.-lNF1og9lDjBulw2P_rXahHONN21DRVHBNzYMNIZZdA", error: false, }; },