Add mdx lsp support
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
return {
|
||||||
|
cmd = { "lemminx" },
|
||||||
|
filetypes = { "xml", "xsd", "xsl", "xslt", "svg" },
|
||||||
|
root_markers = { "sfdx-project.json", ".git" },
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
-- LWC LSP: install with `npm i -g @salesforce/lwc-language-server`.
|
||||||
|
-- Attaches only inside SFDX projects via root marker.
|
||||||
|
return {
|
||||||
|
cmd = { "lwc-language-server", "--stdio" },
|
||||||
|
filetypes = { "javascript", "html" },
|
||||||
|
root_markers = { "sfdx-project.json" },
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
local function tsdk()
|
||||||
|
local local_ts = vim.fs.find("node_modules/typescript/lib", {
|
||||||
|
upward = true,
|
||||||
|
path = vim.fn.expand("%:p:h"),
|
||||||
|
type = "directory",
|
||||||
|
})[1]
|
||||||
|
if local_ts then return local_ts end
|
||||||
|
return vim.fn.stdpath("data")
|
||||||
|
.. "/mason/packages/typescript-language-server/node_modules/typescript/lib"
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
cmd = { "mdx-language-server", "--stdio" },
|
||||||
|
filetypes = { "mdx", "markdown.mdx" },
|
||||||
|
root_markers = { "package.json", "tsconfig.json", ".git" },
|
||||||
|
init_options = {
|
||||||
|
typescript = { tsdk = tsdk() },
|
||||||
|
},
|
||||||
|
capabilities = {
|
||||||
|
workspace = {
|
||||||
|
didChangeWatchedFiles = { dynamicRegistration = false },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -1,5 +1,49 @@
|
|||||||
local lint = require("lint")
|
local lint = require("lint")
|
||||||
|
|
||||||
|
-- PMD for Apex. JVM startup ~3s per run, so we trigger on save only.
|
||||||
|
-- Uses project-local pmd-ruleset.xml if present, else bundled Apex categories.
|
||||||
|
lint.linters.pmd_apex = {
|
||||||
|
cmd = "pmd",
|
||||||
|
stdin = false,
|
||||||
|
append_fname = true,
|
||||||
|
args = function()
|
||||||
|
local ruleset = vim.fs.find("pmd-ruleset.xml", {
|
||||||
|
upward = true,
|
||||||
|
path = vim.fn.expand("%:p:h"),
|
||||||
|
})[1] or
|
||||||
|
"category/apex/bestpractices.xml,category/apex/errorprone.xml," ..
|
||||||
|
"category/apex/security.xml,category/apex/performance.xml," ..
|
||||||
|
"category/apex/design.xml"
|
||||||
|
return { "check", "-R", ruleset, "-f", "json", "--no-progress", "-d" }
|
||||||
|
end,
|
||||||
|
stream = "stdout",
|
||||||
|
ignore_exitcode = true,
|
||||||
|
parser = function(output)
|
||||||
|
if not output or output == "" then return {} end
|
||||||
|
local ok, decoded = pcall(vim.json.decode, output)
|
||||||
|
if not ok or not decoded.files then return {} end
|
||||||
|
local diags = {}
|
||||||
|
for _, file in ipairs(decoded.files) do
|
||||||
|
for _, v in ipairs(file.violations or {}) do
|
||||||
|
local sev = vim.diagnostic.severity.WARN
|
||||||
|
if (v.priority or 3) <= 2 then sev = vim.diagnostic.severity.ERROR
|
||||||
|
elseif (v.priority or 3) >= 4 then sev = vim.diagnostic.severity.INFO end
|
||||||
|
table.insert(diags, {
|
||||||
|
lnum = (v.beginline or 1) - 1,
|
||||||
|
end_lnum = (v.endline or v.beginline or 1) - 1,
|
||||||
|
col = (v.begincolumn or 1) - 1,
|
||||||
|
end_col = v.endcolumn or v.begincolumn or 1,
|
||||||
|
severity = sev,
|
||||||
|
source = "pmd",
|
||||||
|
code = v.rule,
|
||||||
|
message = v.description,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return diags
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
lint.linters_by_ft = {
|
lint.linters_by_ft = {
|
||||||
javascript = { "eslint_d" },
|
javascript = { "eslint_d" },
|
||||||
typescript = { "eslint_d" },
|
typescript = { "eslint_d" },
|
||||||
@@ -9,10 +53,25 @@ lint.linters_by_ft = {
|
|||||||
sh = { "shellcheck" },
|
sh = { "shellcheck" },
|
||||||
bash = { "shellcheck" },
|
bash = { "shellcheck" },
|
||||||
markdown = { "markdownlint-cli2" },
|
markdown = { "markdownlint-cli2" },
|
||||||
|
-- apex handled via separate save-only autocmd below (pmd is slow)
|
||||||
}
|
}
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd({ "BufWritePost", "InsertLeave" }, {
|
vim.api.nvim_create_autocmd({ "BufWritePost", "InsertLeave" }, {
|
||||||
callback = function() lint.try_lint() end,
|
callback = function()
|
||||||
|
if vim.bo.filetype == "apex" then return end
|
||||||
|
lint.try_lint()
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>l", function() lint.try_lint() end, { desc = "Lint buffer" })
|
vim.api.nvim_create_autocmd("BufWritePost", {
|
||||||
|
pattern = { "*.cls", "*.trigger", "*.apex" },
|
||||||
|
callback = function() lint.try_lint("pmd_apex") end,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.keymap.set("n", "<leader>l", function()
|
||||||
|
if vim.bo.filetype == "apex" then
|
||||||
|
lint.try_lint("pmd_apex")
|
||||||
|
else
|
||||||
|
lint.try_lint()
|
||||||
|
end
|
||||||
|
end, { desc = "Lint buffer" })
|
||||||
|
|||||||
@@ -1,8 +1,21 @@
|
|||||||
vim.filetype.add({
|
vim.filetype.add({
|
||||||
extension = {
|
extension = {
|
||||||
|
mdx = "markdown.mdx",
|
||||||
cls = "apex",
|
cls = "apex",
|
||||||
trigger = "apex",
|
trigger = "apex",
|
||||||
apex = "apex",
|
apex = "apex",
|
||||||
|
-- Visualforce
|
||||||
|
page = "html",
|
||||||
|
component = "html",
|
||||||
|
-- Aura
|
||||||
|
cmp = "html",
|
||||||
|
app = "html",
|
||||||
|
evt = "xml",
|
||||||
|
-- SOQL
|
||||||
|
soql = "soql",
|
||||||
|
},
|
||||||
|
pattern = {
|
||||||
|
[".*%-meta%.xml"] = "xml",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -26,6 +39,9 @@ vim.lsp.enable({
|
|||||||
"bashls",
|
"bashls",
|
||||||
"apex_ls",
|
"apex_ls",
|
||||||
"htmx",
|
"htmx",
|
||||||
|
"lemminx",
|
||||||
|
"lwc_ls",
|
||||||
|
"mdx_analyzer",
|
||||||
})
|
})
|
||||||
|
|
||||||
vim.diagnostic.config({
|
vim.diagnostic.config({
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ require("mason-tool-installer").setup({
|
|||||||
"taplo",
|
"taplo",
|
||||||
"bash-language-server",
|
"bash-language-server",
|
||||||
"htmx-lsp",
|
"htmx-lsp",
|
||||||
|
"lemminx",
|
||||||
|
"mdx-analyzer",
|
||||||
-- Apex LSP not in mason registry — install JAR manually, set APEX_JAR env
|
-- Apex LSP not in mason registry — install JAR manually, set APEX_JAR env
|
||||||
|
|
||||||
-- Formatters
|
-- Formatters
|
||||||
|
|||||||
Reference in New Issue
Block a user