Make a ViewPlugin configurable in CodeMirror
ViewPlugin.fromClass
only allows the class constructor to take a single argument with the CodeMirror view.
You use a Facet. Great example in JupyterLab. Like everything in CodeMirror, this lets you be super flexible with how configuration works - it is designed with multiple reconfigurations in mind.
Example defining the facet:
export const suggestionConfigFacet = Facet.define<
{ acceptOnClick: boolean },
{ acceptOnClick: boolean }
>({
combine(value) {
return { acceptOnClick: !!value.at(-1)?.acceptOnClick };
},
});
Initializing the facet:
suggestionConfigFacet.of({ acceptOnClick: true });
Reading the facet:
const config = view.state.facet(suggestionConfigFacet);