Add Vue LSP and enable eslint for .vue files. (#1952)
This commit is contained in:
@@ -94,6 +94,7 @@ export const LANGUAGE_EXTENSIONS: Record<string, string> = {
|
|||||||
".yml": "yaml",
|
".yml": "yaml",
|
||||||
".mjs": "javascript",
|
".mjs": "javascript",
|
||||||
".cjs": "javascript",
|
".cjs": "javascript",
|
||||||
|
".vue": "vue",
|
||||||
".zig": "zig",
|
".zig": "zig",
|
||||||
".zon": "zig",
|
".zon": "zig",
|
||||||
} as const
|
} as const
|
||||||
|
|||||||
@@ -65,6 +65,67 @@ export namespace LSPServer {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const Vue: Info = {
|
||||||
|
id: "vue",
|
||||||
|
extensions: [".vue"],
|
||||||
|
root: NearestRoot([
|
||||||
|
"tsconfig.json",
|
||||||
|
"jsconfig.json",
|
||||||
|
"package.json",
|
||||||
|
"pnpm-lock.yaml",
|
||||||
|
"yarn.lock",
|
||||||
|
"bun.lockb",
|
||||||
|
"bun.lock",
|
||||||
|
"vite.config.ts",
|
||||||
|
"vite.config.js",
|
||||||
|
"nuxt.config.ts",
|
||||||
|
"nuxt.config.js",
|
||||||
|
"vue.config.js",
|
||||||
|
]),
|
||||||
|
async spawn(_, root) {
|
||||||
|
let binary = Bun.which("vue-language-server")
|
||||||
|
const args: string[] = []
|
||||||
|
if (!binary) {
|
||||||
|
const js = path.join(
|
||||||
|
Global.Path.bin,
|
||||||
|
"node_modules",
|
||||||
|
"@vue",
|
||||||
|
"language-server",
|
||||||
|
"bin",
|
||||||
|
"vue-language-server.js",
|
||||||
|
)
|
||||||
|
if (!(await Bun.file(js).exists())) {
|
||||||
|
await Bun.spawn([BunProc.which(), "install", "@vue/language-server"], {
|
||||||
|
cwd: Global.Path.bin,
|
||||||
|
env: {
|
||||||
|
...process.env,
|
||||||
|
BUN_BE_BUN: "1",
|
||||||
|
},
|
||||||
|
stdout: "pipe",
|
||||||
|
stderr: "pipe",
|
||||||
|
stdin: "pipe",
|
||||||
|
}).exited
|
||||||
|
}
|
||||||
|
binary = BunProc.which()
|
||||||
|
args.push("run", js)
|
||||||
|
}
|
||||||
|
args.push("--stdio")
|
||||||
|
const proc = spawn(binary, args, {
|
||||||
|
cwd: root,
|
||||||
|
env: {
|
||||||
|
...process.env,
|
||||||
|
BUN_BE_BUN: "1",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return {
|
||||||
|
process: proc,
|
||||||
|
initialization: {
|
||||||
|
// Leave empty; the server will auto-detect workspace TypeScript.
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
export const ESLint: Info = {
|
export const ESLint: Info = {
|
||||||
id: "eslint",
|
id: "eslint",
|
||||||
root: NearestRoot([
|
root: NearestRoot([
|
||||||
@@ -81,7 +142,7 @@ export namespace LSPServer {
|
|||||||
".eslintrc.json",
|
".eslintrc.json",
|
||||||
"package.json",
|
"package.json",
|
||||||
]),
|
]),
|
||||||
extensions: [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mts", ".cts"],
|
extensions: [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mts", ".cts", ".vue"],
|
||||||
async spawn(app, root) {
|
async spawn(app, root) {
|
||||||
const eslint = await Bun.resolve("eslint", app.path.cwd).catch(() => {})
|
const eslint = await Bun.resolve("eslint", app.path.cwd).catch(() => {})
|
||||||
if (!eslint) return
|
if (!eslint) return
|
||||||
|
|||||||
Reference in New Issue
Block a user