26 lines
771 B
TypeScript
26 lines
771 B
TypeScript
import type { EditorState, Range } from "@codemirror/state";
|
|
import { Decoration } from "@codemirror/view";
|
|
import { syntaxTree } from "@codemirror/language";
|
|
import { decoratorStateField } from "./util.ts";
|
|
|
|
export function disableSpellcheck(selectors: string[]) {
|
|
return decoratorStateField((state: EditorState) => {
|
|
const widgets: Range<Decoration>[] = [];
|
|
syntaxTree(state).iterate({
|
|
enter: ({ type, from, to }) => {
|
|
for (const selector of selectors) {
|
|
if (type.name === selector) {
|
|
widgets.push(
|
|
Decoration.mark({
|
|
attributes: { spellcheck: "false" },
|
|
}).range(from, to),
|
|
);
|
|
}
|
|
}
|
|
},
|
|
});
|
|
|
|
return Decoration.set(widgets, true);
|
|
});
|
|
}
|