@qualified/codemirror-workspace
Provides intelligence to CodeMirror editors.
Workspace
is an abstraction to allow CodeMirror editors to use Language Servers.
Usage Example
import { Workspace } from "@qualified/codemirror-workspace";
const workspace = new Workspace({
rootUri: "file:///workspace/",
getLanguageAssociation: (uri: string) => {
if (/\.(?:[jt]sx?)$/.test(uri)) {
const languageId = /\.tsx?$/.test(uri) ? "typescript" : "javascript";
return {
languageId: languageId + (uri.endsWith("x") ? "react" : ""),
languageServerIds: ["typescript-language-server"],
};
}
const styles = uri.match(/\.(css|less|s[ac]ss)$/);
if (styles !== null) {
return {
languageId: styles[1],
languageServerIds: ["css-language-server"],
};
}
if (uri.endsWith(".html")) {
return {
languageId: "html",
languageServerIds: ["html-language-server"],
};
}
if (uri.endsWith(".json")) {
return {
languageId: "json",
languageServerIds: ["json-worker"],
};
}
return null;
},
getConnectionString: async (langserverId: string) => {
switch (langserverId) {
case "typescript-language-server":
const res = await fetch("/start", { method: "POST" });
return res.json().uri;
case "css-language-server":
return "ws://localhost:9991";
case "html-language-server":
return "ws://localhost:9992";
case "json-worker":
return "js/json-worker.js";
default:
return "";
}
},
renderMarkdown: (markdown: string): string => markdown,
});
workspace.openTextDocument("example.js", cm);
Prior Art