Monaco Editor 允许通过monaco.languages.registerCompletionProvider
. 但是,这会在给定语言的所有实例中全局注册提供程序。
在我的具体情况下,我想在 SQL 编辑器中提供表和列的自动完成功能。但是我有很多实例,他们需要使用不同的表/列集。
有没有办法只为特定的编辑器实例注册自动完成?
Monaco Editor 允许通过monaco.languages.registerCompletionProvider
. 但是,这会在给定语言的所有实例中全局注册提供程序。
在我的具体情况下,我想在 SQL 编辑器中提供表和列的自动完成功能。但是我有很多实例,他们需要使用不同的表/列集。
有没有办法只为特定的编辑器实例注册自动完成?
不,你不能,他们进入一个全球注册表。但是提供者是作为参数传递给编辑器模型的,所以你可以只为你感兴趣的模型/编辑器提供完成项,其他的返回空。
其实可以,只是有点麻烦。
前提是注册返回一个一次性的,它可以处理(即删除/取消注册),并且提供者是附加的(非排他性的)。
假设您有自己的功能registerMyCompletion
::
功能 registerMyCompletion(monaco, provider) { return monaco.languages.registerCompletionProvider(provider).dispose; }
现在在您的组件中:
const [dispose, setDispose] = useState();
setDispose(registerCompleteion(...)} onBlur={() => setDispose(prevDispose => { if(prevDispose) { prevDispose(); } return null; })} > }