diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 53eed883..fc01182b 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -3,6 +3,11 @@ description: Suggest a new feature title: "feature: " labels: [enhancement] body: + - type: markdown + attributes: + value: | + **IMPORTANT:** ideas or requests related to extras, should go in the [Extra Requests](https://github.com/LazyVim/LazyVim/discussions/categories/extra-requests) + discussion forum. - type: checkboxes attributes: label: Did you check the docs? @@ -10,6 +15,8 @@ body: options: - label: I have read all the LazyVim docs required: true + - label: This is not a request for a new or existing extra (see above) + required: true - type: textarea validations: required: true diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e2899c6..0ee7de6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,35 @@ # Changelog +## [12.5.0](https://github.com/LazyVim/LazyVim/compare/v12.4.0...v12.5.0) (2024-06-05) + + +### Features + +* **bufferline:** add keymaps for BufferLineMovePrev / BufferLineMoveNext ([#1935](https://github.com/LazyVim/LazyVim/issues/1935)) ([1806ea7](https://github.com/LazyVim/LazyVim/commit/1806ea710fe391d5b00c1916ed9331bf58cfdb49)) +* **editor:** added extra for inc-rename.nvim ([#3432](https://github.com/LazyVim/LazyVim/issues/3432)) ([c50018b](https://github.com/LazyVim/LazyVim/commit/c50018b791a6295fb0f3219fe637209a381db4c4)) +* enabled `ts-plugin` support for `astro` and `svelte` ([d64d761](https://github.com/LazyVim/LazyVim/commit/d64d7615392d70c2ca1957f66725856d0a306b87)) +* **extras:** Add extra for angular lspconfig ([#2806](https://github.com/LazyVim/LazyVim/issues/2806)) ([987bd22](https://github.com/LazyVim/LazyVim/commit/987bd2207f7f2f7f72f65b0e7e811ec04c03aa32)) +* **keymaps:** add keymap to close all tab pages except the current one ([#2975](https://github.com/LazyVim/LazyVim/issues/2975)) ([de9e337](https://github.com/LazyVim/LazyVim/commit/de9e337f0dcd27a7621f6ab741ad3a5d769dbd7c)) +* **lazydev:** use lazydev with neodev types (not the plugin) on Neovim 0.9.x ([1677b3b](https://github.com/LazyVim/LazyVim/commit/1677b3b84f53d410d50c5a2aca32ca7c5e900917)) +* **python:** switch to regexp branch for a rewrite the venv selector plugin ([#3301](https://github.com/LazyVim/LazyVim/issues/3301)) ([1cdb5bd](https://github.com/LazyVim/LazyVim/commit/1cdb5bdf412933bb1be44a3ae5905202124718d9)) +* **statuscol:** statuscolumn options for open fold indicator and fold hl ([#2923](https://github.com/LazyVim/LazyVim/issues/2923)) ([fa706b3](https://github.com/LazyVim/LazyVim/commit/fa706b320b4c94da28136bdbab2ee1841974707c)) + + +### Bug Fixes + +* cleanup unnecessary treesitter langs and mason lsp servers ([f8268fa](https://github.com/LazyVim/LazyVim/commit/f8268faa7c705cca7047fbaef5984905b47a7324)) +* **extra.lang.scala:** Fix the always initializing regardless of file… ([#3455](https://github.com/LazyVim/LazyVim/issues/3455)) ([c1f5fcf](https://github.com/LazyVim/LazyVim/commit/c1f5fcf9c7ed2659c9d5ac41b3bb8a93e0a3c6a0)) +* **extras:** added recommended for helm/haskell ([ca0b9ee](https://github.com/LazyVim/LazyVim/commit/ca0b9ee915c7e5ddc4ca828688c2cb87f4f0c438)) +* **keymaps:** use root dir for git log ([662e2ff](https://github.com/LazyVim/LazyVim/commit/662e2ffe0ff8f43e15cf97029a5e1ec84bb1e376)) +* **lazydev:** add cmd ([ae0d94e](https://github.com/LazyVim/LazyVim/commit/ae0d94e048423903743b657be3a827d9685761c3)) +* **lsp:** Enable using `deno.enablePaths` in denols settings ([#3446](https://github.com/LazyVim/LazyVim/issues/3446)) ([9a635ef](https://github.com/LazyVim/LazyVim/commit/9a635ef8d690a3cfcf6d3bf54e8ad61156b9d150)) +* **python:** removed the `python-semshi` extra ([e32d191](https://github.com/LazyVim/LazyVim/commit/e32d1918ae676dbab3f5f121a9fa623cb4ee20bd)) +* **tex:** remove latex treesitter support since it's not needed with vimtex and it needs treesitter-cli ([3df8af3](https://github.com/LazyVim/LazyVim/commit/3df8af369c49e13763a7c8962a005aef7604d018)) +* **toggle:** Restore width/height values when closing while maximized is toggled on ([#3453](https://github.com/LazyVim/LazyVim/issues/3453)) ([8971ea2](https://github.com/LazyVim/LazyVim/commit/8971ea25f953f778c8db999da4de240a07713aaa)) +* **toggle:** slightly better maximize ([452b70a](https://github.com/LazyVim/LazyVim/commit/452b70ad15714593a91bed90448313228dd5135a)) +* **toggle:** un-maximize when quiting Neovim ([1c58365](https://github.com/LazyVim/LazyVim/commit/1c583650e66b6f468e8ece4292bfe8bd3f7e1c94)) +* **util:** don't print warning message in headless ([73c767c](https://github.com/LazyVim/LazyVim/commit/73c767c2f3e43cf7edd2964f951b7e574ee5b283)) + ## [12.4.0](https://github.com/LazyVim/LazyVim/compare/v12.3.0...v12.4.0) (2024-06-04) diff --git a/lua/lazyvim/plugins/extras/editor/mini-files.lua b/lua/lazyvim/plugins/extras/editor/mini-files.lua index 344981c3..8f0a4954 100644 --- a/lua/lazyvim/plugins/extras/editor/mini-files.lua +++ b/lua/lazyvim/plugins/extras/editor/mini-files.lua @@ -45,12 +45,59 @@ return { require("mini.files").refresh({ content = { filter = new_filter } }) end + local map_split = function(buf_id, lhs, direction, close_on_file) + local rhs = function() + local new_target_window + local cur_target_window = require("mini.files").get_target_window() + if cur_target_window ~= nil then + vim.api.nvim_win_call(cur_target_window, function() + vim.cmd("belowright " .. direction .. " split") + new_target_window = vim.api.nvim_get_current_win() + end) + + require("mini.files").set_target_window(new_target_window) + require("mini.files").go_in({ close_on_file = close_on_file }) + end + end + + local desc = "Open in " .. direction .. " split" + if close_on_file then + desc = desc .. " and close" + end + vim.keymap.set("n", lhs, rhs, { buffer = buf_id, desc = desc }) + end + + local files_set_cwd = function() + local cur_entry_path = MiniFiles.get_fs_entry().path + local cur_directory = vim.fs.dirname(cur_entry_path) + if cur_directory ~= nil then + vim.fn.chdir(cur_directory) + end + end + vim.api.nvim_create_autocmd("User", { pattern = "MiniFilesBufferCreate", callback = function(args) local buf_id = args.data.buf_id - -- Tweak left-hand side of mapping to your liking - vim.keymap.set("n", "g.", toggle_dotfiles, { buffer = buf_id, desc = "Toggle Hidden Files" }) + + vim.keymap.set( + "n", + opts.mappings.toggle_hidden or "g.", + toggle_dotfiles, + { buffer = buf_id, desc = "Toggle hidden files" } + ) + + vim.keymap.set( + "n", + opts.mappings.change_cwd or "gc", + files_set_cwd, + { buffer = args.data.buf_id, desc = "Set cwd" } + ) + + map_split(buf_id, opts.mappings.go_in_horizontal or "s", "horizontal", false) + map_split(buf_id, opts.mappings.go_in_vertical or "v", "vertical", false) + map_split(buf_id, opts.mappings.go_in_horizontal_plus or "S", "horizontal", true) + map_split(buf_id, opts.mappings.go_in_vertical_plus or "V", "vertical", true) end, }) diff --git a/lua/lazyvim/plugins/extras/formatting/prettier.lua b/lua/lazyvim/plugins/extras/formatting/prettier.lua index a93f6ecf..3d9755e3 100644 --- a/lua/lazyvim/plugins/extras/formatting/prettier.lua +++ b/lua/lazyvim/plugins/extras/formatting/prettier.lua @@ -1,3 +1,16 @@ +if lazyvim_docs then + -- By default, prettier will only be used for formatting + -- if a prettier configuration file is found in the project. + -- Set to `false` to always use prettier for supported filetypes. + vim.g.lazyvim_prettier_needs_config = true +end + +local needs_config = vim.g.lazyvim_prettier_needs_config ~= false + +-- local check = vim.g.lazyvim_prettier + +local enabled = {} ---@type table + return { { "williamboman/mason.nvim", @@ -35,6 +48,22 @@ return { ["markdown.mdx"] = { "prettier" }, ["graphql"] = { "prettier" }, ["handlebars"] = { "prettier" }, + ["svelte"] = { "prettier" }, + }, + formatters = { + prettier = { + condition = function(_, ctx) + if not needs_config then + return true + end + if enabled[ctx.filename] == nil then + enabled[ctx.filename] = vim.fs.find(function(name, path) + return name:match("^%.prettierrc%.") or name:match("^prettier%.config%.") + end, { path = ctx.filename, upward = true })[1] ~= nil + end + return enabled[ctx.filename] + end, + }, }, }, }, diff --git a/lua/lazyvim/plugins/extras/lang/angular.lua b/lua/lazyvim/plugins/extras/lang/angular.lua index ce8a62e4..9ae55961 100644 --- a/lua/lazyvim/plugins/extras/lang/angular.lua +++ b/lua/lazyvim/plugins/extras/lang/angular.lua @@ -14,6 +14,13 @@ return { if type(opts.ensure_installed) == "table" then vim.list_extend(opts.ensure_installed, { "angular", "scss" }) end + vim.filetype.add({ + pattern = { + [".*%.component%.html"] = "angular.html", + [".*%.container%.html"] = "angular.html", + }, + }) + vim.treesitter.language.register("angular", "angular.html") end, }, diff --git a/lua/lazyvim/plugins/extras/lang/nix.lua b/lua/lazyvim/plugins/extras/lang/nix.lua new file mode 100644 index 00000000..b349bb2c --- /dev/null +++ b/lua/lazyvim/plugins/extras/lang/nix.lua @@ -0,0 +1,30 @@ +return { + recommended = { + ft = "nix", + root = "flake.nix", + }, + { + "nvim-treesitter/nvim-treesitter", + opts = function(_, opts) + opts.ensure_installed = opts.ensure_installed or {} + vim.list_extend(opts.ensure_installed, { "nix" }) + end, + }, + { + "neovim/nvim-lspconfig", + opts = { + servers = { + nil_ls = {}, + }, + }, + }, + { + "stevearc/conform.nvim", + optional = true, + opts = { + formatters_by_ft = { + nix = { "nixfmt" }, + }, + }, + }, +} diff --git a/lua/lazyvim/plugins/extras/lang/nushell.lua b/lua/lazyvim/plugins/extras/lang/nushell.lua new file mode 100644 index 00000000..d025112e --- /dev/null +++ b/lua/lazyvim/plugins/extras/lang/nushell.lua @@ -0,0 +1,34 @@ +return { + recommended = { + ft = "nu", + }, + { + "neovim/nvim-lspconfig", + opts = { + servers = { + nushell = {}, + }, + }, + }, + { + "nvim-treesitter/nvim-treesitter", + dependencies = { + { "nushell/tree-sitter-nu" }, + }, + opts = function(_, opts) + ---@diagnostic disable-next-line: inject-field + require("nvim-treesitter.parsers").get_parser_configs().nu = { + install_info = { + url = "https://github.com/nushell/tree-sitter-nu", + files = { "src/parser.c" }, + branch = "main", + }, + filetype = "nu", + } + + if type(opts.ensure_installed) == "table" then + vim.list_extend(opts.ensure_installed, { "nu" }) + end + end, + }, +} diff --git a/lua/lazyvim/plugins/extras/lang/python.lua b/lua/lazyvim/plugins/extras/lang/python.lua index 8e4f942d..811bd27f 100644 --- a/lua/lazyvim/plugins/extras/lang/python.lua +++ b/lua/lazyvim/plugins/extras/lang/python.lua @@ -53,15 +53,7 @@ return { keys = { { "co", - function() - vim.lsp.buf.code_action({ - apply = true, - context = { - only = { "source.organizeImports" }, - diagnostics = {}, - }, - }) - end, + LazyVim.lsp.action["source.organizeImports"], desc = "Organize Imports", }, }, diff --git a/lua/lazyvim/plugins/extras/lang/svelte.lua b/lua/lazyvim/plugins/extras/lang/svelte.lua index 4319b509..e7954137 100644 --- a/lua/lazyvim/plugins/extras/lang/svelte.lua +++ b/lua/lazyvim/plugins/extras/lang/svelte.lua @@ -27,7 +27,20 @@ return { "neovim/nvim-lspconfig", opts = { servers = { - svelte = {}, + svelte = { + keys = { + { + "co", + LazyVim.lsp.action["source.organizeImports"], + desc = "Organize Imports", + }, + }, + capabilities = { + workspace = { + didChangeWatchedFiles = vim.fn.has("nvim-0.10") == 0 and { dynamicRegistration = true }, + }, + }, + }, }, }, }, diff --git a/lua/lazyvim/plugins/extras/lang/typescript.lua b/lua/lazyvim/plugins/extras/lang/typescript.lua index 482af408..97c3353c 100644 --- a/lua/lazyvim/plugins/extras/lang/typescript.lua +++ b/lua/lazyvim/plugins/extras/lang/typescript.lua @@ -13,15 +13,6 @@ return { }) end, - { - "yioneko/nvim-vtsls", - lazy = true, - opts = {}, - config = function(_, opts) - require("vtsls").config(opts) - end, - }, - -- correctly setup lspconfig { "neovim/nvim-lspconfig", @@ -72,49 +63,50 @@ return { { "gD", function() - require("vtsls").commands.goto_source_definition(0) + local params = vim.lsp.util.make_position_params() + LazyVim.lsp.execute({ + command = "typescript.goToSourceDefinition", + arguments = { params.textDocument.uri, params.position }, + open = true, + }) end, desc = "Goto Source Definition", }, { "gR", function() - require("vtsls").commands.file_references(0) + LazyVim.lsp.execute({ + command = "typescript.findAllFileReferences", + arguments = { vim.uri_from_bufnr(0) }, + open = true, + }) end, desc = "File References", }, { "co", - function() - require("vtsls").commands.organize_imports(0) - end, + LazyVim.lsp.action["source.organizeImports"], desc = "Organize Imports", }, { "cM", - function() - require("vtsls").commands.add_missing_imports(0) - end, + LazyVim.lsp.action["source.addMissingImports.ts"], desc = "Add missing imports", }, { "cu", - function() - require("vtsls").commands.remove_unused_imports(0) - end, + LazyVim.lsp.action["source.removeUnused.ts"], desc = "Remove unused imports", }, { "cD", - function() - require("vtsls").commands.fix_all(0) - end, + LazyVim.lsp.action["source.fixAll.ts"], desc = "Fix all diagnostics", }, { "cV", function() - require("vtsls").commands.select_ts_version(0) + LazyVim.lsp.execute({ command = "typescript.selectTypeScriptVersion" }) end, desc = "Select TS workspace version", }, diff --git a/lua/lazyvim/plugins/extras/test/core.lua b/lua/lazyvim/plugins/extras/test/core.lua index 9a91ccc3..973adafe 100644 --- a/lua/lazyvim/plugins/extras/test/core.lua +++ b/lua/lazyvim/plugins/extras/test/core.lua @@ -118,6 +118,7 @@ return { { "to", function() require("neotest").output.open({ enter = true, auto_close = true }) end, desc = "Show Output" }, { "tO", function() require("neotest").output_panel.toggle() end, desc = "Toggle Output Panel" }, { "tS", function() require("neotest").run.stop() end, desc = "Stop" }, + { "tw", function() require("neotest").watch.toggle(vim.fn.expand("%")) end, desc = "Toggle Watch" }, }, }, { diff --git a/lua/lazyvim/plugins/linting.lua b/lua/lazyvim/plugins/linting.lua index c532e59b..7b5b3be3 100644 --- a/lua/lazyvim/plugins/linting.lua +++ b/lua/lazyvim/plugins/linting.lua @@ -34,6 +34,9 @@ return { for name, linter in pairs(opts.linters) do if type(linter) == "table" and type(lint.linters[name]) == "table" then lint.linters[name] = vim.tbl_deep_extend("force", lint.linters[name], linter) + if type(linter.prepend_args) == "table" then + vim.list_extend(lint.linters[name].args, linter.prepend_args) + end else lint.linters[name] = linter end diff --git a/lua/lazyvim/plugins/lsp/keymaps.lua b/lua/lazyvim/plugins/lsp/keymaps.lua index 3f2bd690..403c3db9 100644 --- a/lua/lazyvim/plugins/lsp/keymaps.lua +++ b/lua/lazyvim/plugins/lsp/keymaps.lua @@ -27,21 +27,7 @@ function M.get() { "cC", vim.lsp.codelens.refresh, desc = "Refresh & Display Codelens", mode = { "n" }, has = "codeLens" }, { "cR", LazyVim.lsp.rename_file, desc = "Rename File", mode ={"n"}, has = { "workspace/didRenameFiles", "workspace/willRenameFiles" } }, { "cr", vim.lsp.buf.rename, desc = "Rename", has = "rename" }, - { - "cA", - function() - vim.lsp.buf.code_action({ - context = { - only = { - "source", - }, - diagnostics = {}, - }, - }) - end, - desc = "Source Action", - has = "codeAction", - }, + { "cA", LazyVim.lsp.action.source, desc = "Source Action", has = "codeAction" }, { "]]", function() LazyVim.lsp.words.jump(vim.v.count1) end, has = "documentHighlight", desc = "Next Reference", cond = function() return LazyVim.lsp.words.enabled end }, { "[[", function() LazyVim.lsp.words.jump(-vim.v.count1) end, has = "documentHighlight", diff --git a/lua/lazyvim/util/extras.lua b/lua/lazyvim/util/extras.lua index 9cd16a3e..415879fc 100644 --- a/lua/lazyvim/util/extras.lua +++ b/lua/lazyvim/util/extras.lua @@ -37,7 +37,9 @@ M.ns = vim.api.nvim_create_namespace("lazyvim.extras") ---@type string[] M.state = nil ----@param opts {ft?: string|string[], root?: string|string[]} +---@alias WantsOpts {ft?: string|string[], root?: string|string[]} + +---@param opts WantsOpts ---@return boolean function M.wants(opts) if opts.ft then @@ -105,10 +107,12 @@ function M.get_extra(source, modname) table.sort(plugins) table.sort(optional) - ---@type boolean|(fun():boolean?)|nil + ---@type boolean|(fun():boolean?)|nil|WantsOpts local recommended = require(modname).recommended or false if type(recommended) == "function" then recommended = recommended() or false + elseif type(recommended) == "table" then + recommended = M.wants(recommended) end ---@type LazyExtra diff --git a/lua/lazyvim/util/lsp.lua b/lua/lazyvim/util/lsp.lua index b68f7349..f1be8801 100644 --- a/lua/lazyvim/util/lsp.lua +++ b/lua/lazyvim/util/lsp.lua @@ -324,4 +324,37 @@ function M.words.jump(count, cycle) end end +M.action = setmetatable({}, { + __index = function(_, action) + return function() + vim.lsp.buf.code_action({ + apply = true, + context = { + only = { action }, + diagnostics = {}, + }, + }) + end + end, +}) + +---@class LspCommand: lsp.ExecuteCommandParams +---@field open? boolean + +---@param opts LspCommand +function M.execute(opts) + local params = { + command = opts.command, + arguments = opts.arguments, + } + if opts.open then + require("trouble").open({ + mode = "lsp_command", + params = params, + }) + else + return vim.lsp.buf_request(0, "workspace/executeCommand", params) + end +end + return M diff --git a/tests/extras/lang_spec.lua b/tests/extras/lang_spec.lua index faa43250..86cd0823 100644 --- a/tests/extras/lang_spec.lua +++ b/tests/extras/lang_spec.lua @@ -5,7 +5,6 @@ _G.LazyVim = require("lazyvim.util") describe("Extra", function() local Config = require("lazy.core.config") - local Loader = require("lazy.core.loader") assert(vim.tbl_count(Config.plugins) > 0, "Lazy not properly setup") ---@type {modname:string, modpath:string}[] @@ -19,8 +18,13 @@ describe("Extra", function() return name:match("%.lua$") end, { limit = math.huge, type = "file", path = "lua/lazyvim/plugins/extras" }) ) + + local ignore = { "lazyvim.plugins.extras.ui.treesitter-rewrite" } + extras = vim.tbl_filter(function(extra) + return not vim.tbl_contains(ignore, extra.modname) + end, extras) + local lsp_to_pkg = require("mason-lspconfig.mappings.server").lspconfig_to_package - local pkg_to_lsp = require("mason-lspconfig.mappings.server").package_to_lspconfig local tsspec = Plugin.Spec.new({ import = "lazyvim.plugins.treesitter", @@ -32,27 +36,37 @@ describe("Extra", function() assert(type(tsensure) == "table", "No ensure_installed in nvim-treesitter spec") for _, extra in ipairs(extras) do - it(extra.modname .. " is valid", function() - local mod = require(extra.modname) - local spec = Plugin.Spec.new({ - { "williamboman/mason.nvim", opts = { ensure_installed = {} } }, - { "nvim-treesitter/nvim-treesitter", opts = { ensure_installed = {} } }, - mod, - }, { optional = true }) - assert.is_not_nil(mod) - assert(#spec.notifs == 0, "Invalid spec: " .. vim.inspect(spec.notifs)) + local name = extra.modname:sub(#"lazyvim.plugins.extras" + 2) + describe(name, function() + ---@type any, LazySpecLoader + local mod, spec + + it("spec is valid", function() + mod = require(extra.modname) + assert.is_not_nil(mod) + spec = Plugin.Spec.new({ + { "williamboman/mason.nvim", opts = { ensure_installed = {} } }, + { "nvim-treesitter/nvim-treesitter", opts = { ensure_installed = {} } }, + mod, + }, { optional = true }) + assert(#spec.notifs == 0, "Invalid spec: " .. vim.inspect(spec.notifs)) + end) if extra.modname:find("%.lang%.") then - assert(mod.recommended, "`recommended` not set for " .. extra.modname) - local lspconfig = spec.plugins["nvim-lspconfig"] + it("has recommended set", function() + assert(mod.recommended, "`recommended` not set for " .. extra.modname) + end) + end - if lspconfig then + local lspconfig = spec.plugins["nvim-lspconfig"] + if lspconfig then + it("does not install LSP servers with mason.nvim", function() local lspconfig_opts = Plugin.values(lspconfig, "opts", false) local mason = spec.plugins["mason.nvim"] local mason_opts = Plugin.values(mason, "opts", false) for lsp in pairs(lspconfig_opts.servers or {}) do - local lsp_pkg = pkg_to_lsp[lsp] + local lsp_pkg = lsp_to_pkg[lsp] assert( not (lsp_pkg and vim.tbl_contains(mason_opts.ensure_installed, lsp_pkg)), "LSP server " @@ -62,15 +76,23 @@ describe("Extra", function() .. " is installed automatically. Please remove from the mason.nvim spec" ) end - end - local ts = spec.plugins["nvim-treesitter"] - local opts = Plugin.values(ts, "opts", false) - for _, v in ipairs(opts.ensure_installed) do - assert( - not vim.tbl_contains(tsensure, v), - "TS lang " .. v .. " is already a default. Please remove from the mason.nvim spec" + end) + end + + local ts = spec.plugins["nvim-treesitter"] + local opts = Plugin.values(ts, "opts", false) + + if not vim.tbl_isempty(opts.ensure_installed) then + it("does not install defaut Treesitter langs", function() + local invalid = vim.tbl_filter(function(v) + return vim.tbl_contains(tsensure, v) + end, opts.ensure_installed or {}) + assert.same( + {}, + invalid, + "These Treesitter langs are installed by default. Please remove them from the extra." ) - end + end) end end) end diff --git a/tests/init.lua b/tests/init.lua index ca44aab6..85deca35 100644 --- a/tests/init.lua +++ b/tests/init.lua @@ -21,6 +21,7 @@ local plugins = { { "folke/lazy.nvim" }, "williamboman/mason-lspconfig.nvim", "williamboman/mason.nvim", + "nvim-treesitter/nvim-treesitter", } local function main()