-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
172 additions
and
93 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
import path from "path" | ||
import fs from "fs" | ||
import { workspace, LanguageClient } from "coc.nvim" | ||
import { configDir } from "./config" | ||
import { showInstallStatus } from "./tools" | ||
|
||
export async function updateLuaLsp(client: LanguageClient): Promise<void> { | ||
await installLuaLsp(true) | ||
|
||
if (client.needsStop()) { | ||
await client.stop() | ||
client.start() | ||
} | ||
} | ||
|
||
export async function installLuaLsp(force = false): Promise<void> { | ||
if (!force && (await luaLspExists())) { | ||
return | ||
} | ||
|
||
await showInstallStatus("Alloyed/lua-lsp", async () => { | ||
const baseDir = await configDir("tools") | ||
let installCmd = `luarocks install --tree ${baseDir} --server=http://luarocks.org/dev lua-lsp` | ||
|
||
const luaVersion = workspace.getConfiguration().get("lua", {})["version"] | ||
if (luaVersion) { | ||
installCmd += ` --lua-version=${luaVersion}` | ||
} | ||
|
||
await workspace.runTerminalCommand(installCmd) | ||
}) | ||
} | ||
|
||
export async function luaLspCommand(): Promise<string> { | ||
const baseDir = await configDir("tools") | ||
|
||
// binary installed by luarocks under Windows has extension '.bat' | ||
const bin = process.platform === "win32" ? "lua-lsp.bat" : "lua-lsp" | ||
|
||
return path.join(baseDir, "bin", bin) | ||
} | ||
|
||
export async function luaLspExists(): Promise<boolean> { | ||
const bin = await luaLspCommand() | ||
return new Promise((resolve) => fs.open(bin, "r", (err) => resolve(err === null))) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
import fs from "fs" | ||
import path from "path" | ||
import { LanguageClient } from "coc.nvim" | ||
import { configDir } from "./config" | ||
import { osEnv, install } from "./installer" | ||
import { showInstallStatus } from "./tools" | ||
|
||
const luaLsDir = "sumneko_lua" | ||
|
||
export async function updateLuaLs(client: LanguageClient): Promise<void> { | ||
await installLuaLs(true) | ||
|
||
if (client.needsStop()) { | ||
await client.stop() | ||
client.start() | ||
} | ||
} | ||
|
||
export async function installLuaLs(force = false): Promise<void> { | ||
if (!force && (await luaLsExists())) { | ||
return | ||
} | ||
|
||
await showInstallStatus("sumneko/lua-language-server", async () => { | ||
await install(await configDir("tools", luaLsDir)) | ||
}) | ||
} | ||
|
||
export async function luaLsCommandAndArgs(): Promise<[string, string[]]> { | ||
const baseDir = await configDir("tools") | ||
|
||
const { bin } = osEnv() | ||
return [path.join(baseDir, luaLsDir, bin), ["-E", path.join(baseDir, luaLsDir, "main.lua")]] | ||
} | ||
|
||
export async function luaLsExists(): Promise<boolean> { | ||
const [bin] = await luaLsCommandAndArgs() | ||
return new Promise((resolve) => fs.open(bin, "r", (err) => resolve(err === null))) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,53 +1,24 @@ | ||
import path from "path" | ||
import fs from "fs" | ||
import { workspace } from "coc.nvim" | ||
import which from "which" | ||
import { configDir } from "./config" | ||
import { osEnv, install } from "./installer" | ||
|
||
const lspDir = "sumneko_lua" | ||
|
||
export async function installLuaLsp(force = false): Promise<void> { | ||
if (!force && (await luaLspExists())) { | ||
return | ||
} | ||
|
||
const useSumnekoLs = workspace.getConfiguration().get("lua.useSumnekoLs", false) | ||
if (useSumnekoLs) { | ||
return install(await configDir("tools", lspDir)) | ||
} | ||
|
||
const baseDir = await configDir("tools") | ||
let installCmd = `luarocks install --tree ${baseDir} --server=http://luarocks.org/dev lua-lsp` | ||
|
||
const luaVersion = workspace.getConfiguration().get("lua", {})["version"] | ||
if (luaVersion) { | ||
installCmd += ` --lua-version=${luaVersion}` | ||
} | ||
import { workspace } from "coc.nvim" | ||
|
||
await workspace.runTerminalCommand(installCmd) | ||
export async function commandExists(bin: string): Promise<boolean> { | ||
return new Promise((resolve) => which(bin, (err) => resolve(err == null))) | ||
} | ||
|
||
export async function luaLspBin(): Promise<[string, string[]]> { | ||
const baseDir = await configDir("tools") | ||
|
||
const useSumnekoLs = workspace.getConfiguration().get("lua.useSumnekoLs", false) | ||
if (useSumnekoLs) { | ||
const { bin } = osEnv() | ||
return [path.join(baseDir, lspDir, bin), ["-E", path.join(baseDir, lspDir, "main.lua")]] | ||
} | ||
|
||
// binary installed by luarocks under Windows has extension '.bat' | ||
const bin = process.platform === "win32" ? "lua-lsp.bat" : "lua-lsp" | ||
export async function showInstallStatus(name: string, fn: () => Promise<void>): Promise<void> { | ||
const statusItem = workspace.createStatusBarItem(90, { progress: true }) | ||
|
||
return [path.join(baseDir, "bin", bin), []] | ||
} | ||
statusItem.text = `Installing '${name}'` | ||
statusItem.show() | ||
|
||
export async function luaLspExists(): Promise<boolean> { | ||
const [bin] = await luaLspBin() | ||
return new Promise((resolve) => fs.open(bin, "r", (err) => resolve(err === null))) | ||
} | ||
try { | ||
await fn() | ||
workspace.showMessage(`Installed '${name}'`) | ||
} catch (err) { | ||
workspace.showMessage(`Failed to install '${name}': ${err}`, "error") | ||
statusItem.hide() | ||
throw err | ||
} | ||
|
||
export async function commandExists(command: string): Promise<boolean> { | ||
return new Promise((resolve) => which(command, (err) => resolve(err == null))) | ||
statusItem.hide() | ||
} |