aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorJürgen Steitz <JSteitz@users.noreply.github.com>2022-01-15 15:02:23 +0100
committerGitHub <noreply@github.com>2022-01-15 15:02:23 +0100
commit50f82f6042d72fd370f752ec6a4f2033cea22ab6 (patch)
tree57849632ac79f8bdd18d9642186afcf7381a6087 /lua
parentrun autogen_metadata.lua (diff)
downloadmason-50f82f6042d72fd370f752ec6a4f2033cea22ab6.tar
mason-50f82f6042d72fd370f752ec6a4f2033cea22ab6.tar.gz
mason-50f82f6042d72fd370f752ec6a4f2033cea22ab6.tar.bz2
mason-50f82f6042d72fd370f752ec6a4f2033cea22ab6.tar.lz
mason-50f82f6042d72fd370f752ec6a4f2033cea22ab6.tar.xz
mason-50f82f6042d72fd370f752ec6a4f2033cea22ab6.tar.zst
mason-50f82f6042d72fd370f752ec6a4f2033cea22ab6.zip
add server psalm (#426)
Co-authored-by: William Boman <william@redwill.se>
Diffstat (limited to 'lua')
-rw-r--r--lua/nvim-lsp-installer/_generated/filetype_map.lua2
-rw-r--r--lua/nvim-lsp-installer/_generated/language_autocomplete_map.lua2
-rw-r--r--lua/nvim-lsp-installer/_generated/metadata.lua3
-rw-r--r--lua/nvim-lsp-installer/_generated/schemas/psalm.lua3
-rw-r--r--lua/nvim-lsp-installer/core/receipt.lua1
-rw-r--r--lua/nvim-lsp-installer/installers/composer.lua43
-rw-r--r--lua/nvim-lsp-installer/jobs/outdated-servers/composer.lua42
-rw-r--r--lua/nvim-lsp-installer/jobs/outdated-servers/init.lua2
-rw-r--r--lua/nvim-lsp-installer/servers/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/psalm/init.lua15
10 files changed, 112 insertions, 2 deletions
diff --git a/lua/nvim-lsp-installer/_generated/filetype_map.lua b/lua/nvim-lsp-installer/_generated/filetype_map.lua
index 43a83076..4de77a36 100644
--- a/lua/nvim-lsp-installer/_generated/filetype_map.lua
+++ b/lua/nvim-lsp-installer/_generated/filetype_map.lua
@@ -77,7 +77,7 @@ return {
ocaml = { "ocamlls" },
opencl = { "opencl_ls" },
org = { "ltex" },
- php = { "intelephense", "phpactor", "tailwindcss" },
+ php = { "intelephense", "phpactor", "psalm", "tailwindcss" },
plaintex = { "ltex" },
postcss = { "tailwindcss" },
prisma = { "prismals" },
diff --git a/lua/nvim-lsp-installer/_generated/language_autocomplete_map.lua b/lua/nvim-lsp-installer/_generated/language_autocomplete_map.lua
index 9a234af9..995ab5f3 100644
--- a/lua/nvim-lsp-installer/_generated/language_autocomplete_map.lua
+++ b/lua/nvim-lsp-installer/_generated/language_autocomplete_map.lua
@@ -22,7 +22,7 @@ return {
nix = { "rnix" },
["objective-c"] = { "ccls" },
openapi = { "spectral" },
- php = { "intelephense", "phpactor" },
+ php = { "intelephense", "phpactor", "psalm" },
python = { "jedi_language_server", "pylsp", "pyright" },
ruby = { "solargraph", "sorbet" },
solidity = { "solang", "solc", "solidity_ls" },
diff --git a/lua/nvim-lsp-installer/_generated/metadata.lua b/lua/nvim-lsp-installer/_generated/metadata.lua
index 13dba9c5..ec70cd9e 100644
--- a/lua/nvim-lsp-installer/_generated/metadata.lua
+++ b/lua/nvim-lsp-installer/_generated/metadata.lua
@@ -154,6 +154,9 @@ return {
prismals = {
filetypes = { "prisma" }
},
+ psalm = {
+ filetypes = { "php" }
+ },
puppet = {
filetypes = { "puppet" }
},
diff --git a/lua/nvim-lsp-installer/_generated/schemas/psalm.lua b/lua/nvim-lsp-installer/_generated/schemas/psalm.lua
new file mode 100644
index 00000000..5ceb23e8
--- /dev/null
+++ b/lua/nvim-lsp-installer/_generated/schemas/psalm.lua
@@ -0,0 +1,3 @@
+-- THIS FILE IS GENERATED. DO NOT EDIT MANUALLY.
+-- stylua: ignore start
+return {properties = {["psalm.analyzedFileExtensions"] = {default = { {language = "php",scheme = "file"}, {language = "php",scheme = "untitled"} },description = "A list of file extensions to request Psalm to analyze. By default, this only includes 'php' (Modifying requires VSCode reload)",type = "array"},["psalm.configPaths"] = {default = { "psalm.xml", "psalm.xml.dist" },description = "A list of files to checkup for psalm configuration (relative to the workspace directory)",items = {type = "string"},type = "array"},["psalm.connectToServerWithTcp"] = {default = false,description = "If this is set to true, this VSCode extension will use TCP instead of the default STDIO to communicate with the Psalm language server. (Modifying requires VSCode reload)",type = "boolean"},["psalm.disableAutoComplete"] = {default = false,description = "Enable to disable autocomplete on methods and properties (Modifying requires VSCode reload)",type = "boolean"},["psalm.enableDebugLog"] = {default = false,deprecationMessage = "Deprecated: Please use psalm.enableVerbose, psalm.logLevel or psalm.trace.server instead.",description = "Enable this to print messages to the debug console when developing or debugging this VS Code extension. (Modifying requires VSCode reload)",type = "boolean"},["psalm.enableUseIniDefaults"] = {default = false,description = "Enable this to use PHP-provided ini defaults for memory and error display. (Modifying requires restart)",type = "boolean"},["psalm.enableVerbose"] = {default = false,description = "Enable --verbose mode on the Psalm Language Server (Modifying requires VSCode reload)",type = "boolean"},["psalm.hideStatusMessageWhenRunning"] = {default = true,description = "This will hide the Psalm status from the status bar when it is started and running. This is useful to clear up a cluttered status bar.",type = "boolean"},["psalm.logLevel"] = {default = "INFO",description = "Traces the communication between VSCode and the Psalm language server.",enum = { "NONE", "ERROR", "WARN", "INFO", "DEBUG", "TRACE" },scope = "window",type = "string"},["psalm.maxRestartCount"] = {default = 5,description = "The number of times the Language Server is allowed to crash and restart before it will no longer try to restart (Modifying requires VSCode reload)",type = "number"},["psalm.phpExecutableArgs"] = {default = { "-dxdebug.remote_autostart=0", "-dxdebug.remote_enable=0", "-dxdebug_profiler_enable=0" },description = "Optional (Advanced), default is '-dxdebug.remote_autostart=0 -dxdebug.remote_enable=0 -dxdebug_profiler_enable=0'. Additional PHP executable CLI arguments to use. (Modifying requires VSCode reload)",items = {type = "string"},type = "array"},["psalm.phpExecutablePath"] = {default = vim.NIL,description = 'Optional, defaults to searching for "php". The path to a PHP 7.0+ executable to use to execute the Psalm server. The PHP 7.0+ installation should preferably include and enable the PHP module `pcntl`. (Modifying requires VSCode reload)',type = "string"},["psalm.psalmClientScriptPath"] = {default = vim.NIL,deprecationMessage = "Deprecated: Please use psalm.psalmScriptPath instead.",description = "Optional (Advanced). If provided, this overrides the Psalm script to use, e.g. vendor/bin/psalm. (Modifying requires VSCode reload)",markdownDeprecationMessage = "**Deprecated**: Please use `#psalm.psalmScriptPath#` instead.",type = "string"},["psalm.psalmScriptArgs"] = {default = {},description = "Optional (Advanced). Additional arguments to the Psalm language server. (Modifying requires VSCode reload)",items = {type = "string"},type = "array"},["psalm.psalmScriptPath"] = {default = vim.NIL,description = "Optional (Advanced). If provided, this overrides the Psalm script to use, e.g. vendor/bin/psalm-language-server. (Modifying requires VSCode reload)",type = "string"},["psalm.trace.server"] = {default = "off",description = "Traces the communication between VSCode and the Psalm language server.",enum = { "off", "messages", "verbose" },scope = "window",type = "string"},["psalm.unusedVariableDetection"] = {default = false,description = "Enable this to enable unused variable and parameter detection",type = "boolean"}},title = "PHP - Psalm Analyzer",type = "object"} \ No newline at end of file
diff --git a/lua/nvim-lsp-installer/core/receipt.lua b/lua/nvim-lsp-installer/core/receipt.lua
index c29ebde7..d430d9dc 100644
--- a/lua/nvim-lsp-installer/core/receipt.lua
+++ b/lua/nvim-lsp-installer/core/receipt.lua
@@ -117,6 +117,7 @@ InstallReceiptBuilder.gem = package_source "gem"
InstallReceiptBuilder.go = package_source "go"
InstallReceiptBuilder.dotnet = package_source "dotnet"
InstallReceiptBuilder.cargo = package_source "cargo"
+InstallReceiptBuilder.composer = package_source "composer"
InstallReceiptBuilder.unmanaged = { type = "unmanaged" }
diff --git a/lua/nvim-lsp-installer/installers/composer.lua b/lua/nvim-lsp-installer/installers/composer.lua
index 1e8a1717..26e4e7be 100644
--- a/lua/nvim-lsp-installer/installers/composer.lua
+++ b/lua/nvim-lsp-installer/installers/composer.lua
@@ -2,6 +2,11 @@ local installers = require "nvim-lsp-installer.installers"
local std = require "nvim-lsp-installer.installers.std"
local platform = require "nvim-lsp-installer.platform"
local process = require "nvim-lsp-installer.process"
+local fs = require "nvim-lsp-installer.fs"
+local path = require "nvim-lsp-installer.path"
+local Data = require "nvim-lsp-installer.data"
+
+local list_copy = Data.list_copy
local M = {}
@@ -18,6 +23,37 @@ local function ensure_composer(installer)
}
end
+---@param packages string[] The composer packages to install. The first item in this list will be the recipient of the server version, should the user request a specific one.
+function M.require(packages)
+ return ensure_composer(
+ ---@type ServerInstallerFunction
+ function(_, callback, ctx)
+ local pkgs = list_copy(packages)
+ local c = process.chain {
+ cwd = ctx.install_dir,
+ stdio_sink = ctx.stdio_sink,
+ }
+
+ ctx.receipt:with_primary_source(ctx.receipt.composer(pkgs[1]))
+ for i = 2, #pkgs do
+ ctx.receipt:with_secondary_source(ctx.receipt.composer(pkgs[i]))
+ end
+
+ if not (fs.file_exists(path.concat { ctx.install_dir, "composer.json" })) then
+ c.run(M.composer_cmd, { "init", "--no-interaction", "--stability=stable" })
+ end
+
+ if ctx.requested_server_version then
+ -- The "head" package is the recipient for the requested version. It's.. by design... don't ask.
+ pkgs[1] = ("%s:%s"):format(pkgs[1], ctx.requested_server_version)
+ end
+
+ c.run(M.composer_cmd, vim.list_extend({ "require" }, pkgs))
+ c.spawn(callback)
+ end
+ )
+end
+
function M.install()
return ensure_composer(
---@type ServerInstallerFunction
@@ -37,4 +73,11 @@ function M.install()
)
end
+---@param root_dir string The directory to resolve the executable from.
+function M.env(root_dir)
+ return {
+ PATH = process.extend_path { path.concat { root_dir, "vendor", "bin" } },
+ }
+end
+
return M
diff --git a/lua/nvim-lsp-installer/jobs/outdated-servers/composer.lua b/lua/nvim-lsp-installer/jobs/outdated-servers/composer.lua
new file mode 100644
index 00000000..b8e75424
--- /dev/null
+++ b/lua/nvim-lsp-installer/jobs/outdated-servers/composer.lua
@@ -0,0 +1,42 @@
+local process = require "nvim-lsp-installer.process"
+local composer = require "nvim-lsp-installer.installers.composer"
+local VersionCheckResult = require "nvim-lsp-installer.jobs.outdated-servers.version-check-result"
+
+---@param server Server
+---@param source InstallReceiptSource
+---@param on_check_complete fun(result: VersionCheckResult)
+local function composer_checker(server, source, on_check_complete)
+ local stdio = process.in_memory_sink()
+ process.spawn(composer.composer_cmd, {
+ args = { "outdated", "--no-interaction", "--format=json" },
+ cwd = server.root_dir,
+ stdio_sink = stdio.sink,
+ }, function(success)
+ if not success then
+ return on_check_complete(VersionCheckResult.fail(server))
+ end
+ ---@type {installed: {name: string, version: string, latest: string}[]}
+ local decode_ok, outdated_json = pcall(vim.json.decode, table.concat(stdio.buffers.stdout, ""))
+
+ if not decode_ok then
+ return on_check_complete(VersionCheckResult.fail(server))
+ end
+
+ ---@type OutdatedPackage[]
+ local outdated_packages = {}
+
+ for _, outdated_package in ipairs(outdated_json.installed) do
+ if outdated_package.name == source.package and outdated_package.version ~= outdated_package.latest then
+ table.insert(outdated_packages, {
+ name = outdated_package.name,
+ current_version = outdated_package.version,
+ latest_version = outdated_package.latest,
+ })
+ end
+ end
+
+ on_check_complete(VersionCheckResult.success(server, outdated_packages))
+ end)
+end
+
+return composer_checker
diff --git a/lua/nvim-lsp-installer/jobs/outdated-servers/init.lua b/lua/nvim-lsp-installer/jobs/outdated-servers/init.lua
index c2c45178..8e4548f7 100644
--- a/lua/nvim-lsp-installer/jobs/outdated-servers/init.lua
+++ b/lua/nvim-lsp-installer/jobs/outdated-servers/init.lua
@@ -10,6 +10,7 @@ local git_check = require "nvim-lsp-installer.jobs.outdated-servers.git"
local github_release_file_check = require "nvim-lsp-installer.jobs.outdated-servers.github_release_file"
local github_tag_check = require "nvim-lsp-installer.jobs.outdated-servers.github_tag"
local jdtls = require "nvim-lsp-installer.jobs.outdated-servers.jdtls"
+local composer_check = require "nvim-lsp-installer.jobs.outdated-servers.composer"
local M = {}
@@ -26,6 +27,7 @@ local checkers = {
["pip3"] = pip3_check,
["cargo"] = cargo_check,
["gem"] = gem_check,
+ ["composer"] = composer_check,
["go"] = noop, -- TODO
["dotnet"] = noop, -- TODO
["unmanaged"] = noop,
diff --git a/lua/nvim-lsp-installer/servers/init.lua b/lua/nvim-lsp-installer/servers/init.lua
index 3a91adfb..114e6635 100644
--- a/lua/nvim-lsp-installer/servers/init.lua
+++ b/lua/nvim-lsp-installer/servers/init.lua
@@ -82,6 +82,7 @@ local CORE_SERVERS = Data.set_of {
"phpactor",
"powershell_es",
"prismals",
+ "psalm",
"puppet",
"purescriptls",
"pylsp",
diff --git a/lua/nvim-lsp-installer/servers/psalm/init.lua b/lua/nvim-lsp-installer/servers/psalm/init.lua
new file mode 100644
index 00000000..3b3d4721
--- /dev/null
+++ b/lua/nvim-lsp-installer/servers/psalm/init.lua
@@ -0,0 +1,15 @@
+local server = require "nvim-lsp-installer.server"
+local composer = require "nvim-lsp-installer.installers.composer"
+
+return function(name, root_dir)
+ return server.Server:new {
+ name = name,
+ root_dir = root_dir,
+ homepage = "https://psalm.dev/",
+ languages = { "php" },
+ installer = composer.require { "vimeo/psalm" },
+ default_options = {
+ cmd_env = composer.env(root_dir),
+ },
+ }
+end