dotfiles/nvim/.config/nvim/lua/core/languages.lua

392 lines
7.8 KiB
Lua

-- A list of all languages for which I have support for any of:
-- an LSP (lsp)
-- Treesitter (ts)
-- linting (lint)
-- formatting (format)
--
-- with their respective names used by lspconfig, nvim-treesitter, nvim-lint and conform.
--
local nushell = { lsp = { nushell = {} }, ts = { "nu" } }
if vim.fn.executable("nufmt") == 1 then
nushell.format = { nu = { "nufmt" } }
end
-- FIXME: This does not work for populating LSP config,
-- never gets set MASON env var. Executing too early?
local function mason_dir()
local dir = vim.fn.getenv("MASON")
if dir ~= vim.NIL then
return dir
end
return vim.fn.getenv("HOME") .. "/.local/share/nvim/mason"
end
local languages = {
arduino = { lsp = { arduino_language_server = {} }, ts = { "arduino" } },
awk = { ts = { "awk" }, format = { awk = { "gawk" } } },
astro = {
lsp = { astro = {} },
ts = { "astro" },
lint = { astro = { "eslint_d" } },
format = { astro = {
"prettier",
} },
},
bash = {
lsp = { bashls = {} },
ts = { "bash" },
lint = { bash = { "shellcheck" } },
format = { bash = { "shellharden", "shfmt" } },
},
beancount = { lsp = { beancount = {} }, ts = { "beancount" }, format = { beancount = { "bean-format" } } },
bibtex = { ts = { "bibtex" }, format = { bib = { "bibtex-tidy" } } },
c = { lsp = { clangd = {} }, ts = { "c" } },
css = { lsp = { cssls = {} }, ts = { "css" }, format = { css = { "prettier", "rustywind" } } },
csv = { ts = { "csv" } },
d = { lsp = { serve_d = {} }, ts = { "d" } },
dart = { ts = { "dart" } },
dhall = { ts = { "dhall" } },
diff = { ts = { "diff" } },
djot = { ts = { "djot" } },
docker_compose = { lsp = { docker_compose_language_service = {} } },
docker = { lsp = { dockerls = {} }, ts = { "dockerfile" } },
dot = { ts = { "dot" } },
emmet = { lsp = { emmet_ls = {} } },
javascript = {
lsp = { eslint = {} },
ts = { "javascript" },
lint = { javascript = { "eslint_d" }, javascriptreact = { "eslint_d" } },
format = { javascript = { "prettier" }, javascriptreact = { "prettier" } },
},
git = { ts = { "git_config", "git_rebase", "gitattributes", "gitcommit", "gitignore" } },
go = { lsp = { gopls = {} }, ts = { "go" }, lint = { go = { "revive" } }, format = { go = { "gofumpt" } } },
graphql = { format = { graphql = { "prettier" } } },
html = { format = { html = { "prettier", "rustywind" } } },
julia = { lsp = { julials = {} }, ts = { "julia" } },
json = {
lsp = { jsonls = {} },
ts = { "hjson", "json", "json5", "jsonc", "jsonnet" },
format = { json = { "jq" } },
},
latex = {
-- TODO: May need to switch to ltex_plus at some point since ltex is unmaintained
lsp = { ltex = { autostart = false }, texlab = {} },
ts = { "latex" },
},
lua = {
lsp = {
lua_ls = {
settings = {
Lua = {
diagnostics = { globals = { "vim" } },
telemetry = { enable = false },
hint = { enable = true, setType = true },
},
},
},
},
ts = { "fennel", "luadoc", "luap", "luau" },
format = { lua = { "stylua" } },
},
markdown = {
lsp = { marksman = {} },
ts = { "markdown", "markdown_inline" },
lint = { markdown = { "markdownlint" } },
format = { markdown = { "prettier", "injected" } },
},
nim = { lsp = { nim_langserver = {} }, ts = { "nim", "nim_format_string" }, format = { nim = { "nimpretty" } } },
nu = nushell,
python = {
lsp = { basedpyright = {}, ruff = {} },
ts = { "python" },
format = { python = { "ruff_format", "ruff_organize_imports" } },
},
quarto = { lint = { quarto = { "markdownlint" } }, format = { quarto = { "prettier", "injected" } } },
sh = { lint = { sh = { "shellcheck" } }, format = { sh = { "shellharden", "shfmt" } } },
sql = { format = { sql = { "sleek" } } },
svelte = { lint = { svelte = { "eslint_d" } }, format = { svelte = { "prettier" } } },
toml = { lsp = { taplo = {} }, ts = { "toml" } },
typescript = {
lsp = { ts_ls = {} },
ts = { "typescript" },
lint = { typescript = { "eslint_d" }, typescriptreact = { "eslint_d" } },
format = { typescript = { "prettier" }, typescriptreact = { "prettier" } },
},
typst = {
lsp = { tinymist = { settings = { formatterMode = "typstyle" } } },
ts = { "typst" },
},
vue = {
lsp = { vue_ls = {} },
ts = { "typescript", "vue" },
format = { vue = { "prettier", "rustywind" } },
},
yaml = { lsp = { yamlls = {}, ansiblels = {} }, ts = { "yaml" }, format = { yaml = { "prettier" } } },
zsh = { format = { zsh = { "shfmt" } } },
-- TODO: For an easier migration from having 'all' in treesitter config
-- Should be migrated away from over time until it is completely removed
_additional_treesitters = {
ts = {
"cmake",
"comment",
"commonlisp",
"cooklang",
"corn",
"cpon",
"cpp",
"cuda",
"cue",
"cylc",
"desktop",
"devicetree",
"disassembly",
"doxygen",
"dtd",
"earthfile",
"ebnf",
"editorconfig",
"eds",
"eex",
"elixir",
"elm",
"elsa",
"elvish",
"embedded_template",
"enforce",
"erlang",
"facility",
"faust",
"fidl",
"firrtl",
"fish",
"foam",
"forth",
"fortran",
"fsh",
"fsharp",
"func",
"fusion",
"gap",
"gaptst",
"gdscript",
"gdshader",
"gleam",
"glimmer",
"glimmer_javascript",
"glimmer_typescript",
"glsl",
"gn",
"gnuplot",
"goctl",
"godot_resource",
"gomod",
"gosum",
"gotmpl",
"gowork",
"gpg",
"graphql",
"gren",
"groovy",
"gstlaunch",
"hack",
"hare",
"haskell",
"haskell_persistent",
"hcl",
"heex",
"helm",
"hlsl",
"hlsplaylist",
"hocon",
"hoon",
"html",
"htmldjango",
"http",
"hurl",
"hyprlang",
"idl",
"idris",
"ini",
"inko",
"ipkg",
"ispc",
"janet_simple",
"java",
"javascript",
"jinja",
"jinja_inline",
"jq",
"jsdoc",
"just",
"kcl",
"kconfig",
"kdl",
"kotlin",
"koto",
"kusto",
"lalrpop",
"ledger",
"leo",
"linkerscript",
"liquid",
"liquidsoap",
"llvm",
"luau",
"m68k",
"make",
"matlab",
"menhir",
"mermaid",
"meson",
"mlir",
"muttrc",
"nasm",
"nginx",
"nickel",
"ninja",
"nix",
"norg",
"nqc",
"nu",
"objc",
"objdump",
"ocaml",
"ocaml_interface",
"ocamllex",
"odin",
"pascal",
"passwd",
"pem",
"perl",
"php",
"php_only",
"phpdoc",
"pioasm",
"po",
"pod",
"poe_filter",
"pony",
"powershell",
"printf",
"prisma",
"problog",
"prolog",
"promql",
"properties",
"proto",
"prql",
"psv",
"pug",
"puppet",
"purescript",
"pymanifest",
"python",
"ql",
"qmldir",
"qmljs",
"query",
"r",
"racket",
"ralph",
"rasi",
"razor",
"rbs",
"re2c",
"readline",
"regex",
"rego",
"requirements",
"rescript",
"rnoweb",
"robot",
"robots",
"roc",
"ron",
"rst",
"ruby",
"runescript",
"rust",
"scala",
"scfg",
"scheme",
"scss",
"sflog",
"slang",
"slim",
"slint",
"smali",
"smithy",
"snakemake",
"solidity",
"soql",
"sosl",
"sourcepawn",
"sparql",
"sql",
"squirrel",
"ssh_config",
"starlark",
"strace",
"styled",
"supercollider",
"superhtml",
"surface",
"svelte",
"sway",
"swift",
"sxhkdrc",
"systemtap",
"t32",
"tablegen",
"tact",
"tcl",
"teal",
"templ",
"tera",
"terraform",
"textproto",
"thrift",
"tiger",
"tlaplus",
"tmux",
"todotxt",
"tsv",
"tsx",
"turtle",
"twig",
"typespec",
"typoscript",
"udev",
"ungrammar",
"unison",
"usd",
"uxntal",
"v",
"vala",
"vento",
"verilog",
"vhdl",
"vhs",
"vim",
"vimdoc",
"vrl",
"wgsl",
"wgsl_bevy",
"wing",
"wit",
"xcompose",
"xml",
"xresources",
"yang",
"yuck",
"zathurarc",
"zig",
"ziggy",
"ziggy_schema",
},
},
}
Languages = languages