I am using v6 bundled with Vite. I am trying to create an editor with syntax highlighting for a custom language using Lezer. To test, I first created a Javascript editor, which worked just fine after a bit to tinkering. However, when I build my custom language parser using lezer-generator
I am getting the classic Unrecognized extension value in extension set ((type) => {let result = match(type); return result === void 0 ? null : [this, result];}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.
error. I suspect that somehow @codemirror/state is embedded inside my parser, but I’m not familiar enough to say for sure. I really just need to know how to reconcile all of the Lezer dependencies with all of the CodeMirror dependencies.
main.js
import { EditorView, basicSetup } from "codemirror";
import { EditorState } from "@codemirror/state";
import { LRLanguage, LanguageSupport } from "@codemirror/language";
import { styleTags, tags } from "@lezer/highlight";
import { parser } from "./lang.js"; // generated parser
const myHighlighting = styleTags({
"=": tags.operator,
"+": tags.operator,
"{": tags.brace,
"}": tags.brace,
"[": tags.squareBracket,
"]": tags.squareBracket,
":": tags.punctuation,
});
const myLang = LRLanguage.define({ parser });
function myLangSupport() {
return new LanguageSupport(myLang, [myHighlighting]); // error here
}
const state = EditorState.create({
doc: "console.log('Hello world');",
extensions: [
basicSetup,
myLangSupport()
]
});
const view = new EditorView({
state,
parent: document.querySelector("#editor")
});
package.json
{
"name": "edu",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"devDependencies": {
"vite": "^7.0.0"
},
"dependencies": {
"codemirror": "^6.0.0",
"@codemirror/language": "^6.11.2",
"@codemirror/state": "6.5.2",
"@codemirror/theme-one-dark": "^6.1.3",
"@codemirror/view": "^6.38.0",
"@lezer/common": "^1.2.3",
"@lezer/lr": "^1.4.2",
"@lezer/generator": "^1.8.0"
},
"overrides": {
"@codemirror/state": "6.5.2"
},
"optimizeDeps": {
"exclude": [
"codemirror",
"@codemirror/commands",
"@codemirror/language",
"@codemirror/state",
"@codemirror/view",
"@lezer/highlight",
"@lezer/generator"
]
}
}