diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 6cc4959a..67ff2e28 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "15.7.1" + ".": "15.9.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c7935c1..91539d23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,73 @@ # Changelog +## [15.9.0](https://github.com/LazyVim/LazyVim/compare/v15.8.1...v15.9.0) (2025-10-19) + + +### Features + +* **docker:** associate 'Containerfile' with 'dockerfile' filetype ([#5974](https://github.com/LazyVim/LazyVim/issues/5974)) ([97af4a2](https://github.com/LazyVim/LazyVim/commit/97af4a23bccac85eb02e489f573db68863d6ed33)) +* **extras.rest:** add keymap for changing environment ([#5678](https://github.com/LazyVim/LazyVim/issues/5678)) ([1da659d](https://github.com/LazyVim/LazyVim/commit/1da659db4a3fbcd6d171f3b38d0092ced0887e61)) +* **java:** enable `blink.cmp` capabilities to show signature documentation ([#5218](https://github.com/LazyVim/LazyVim/issues/5218)) ([9618e32](https://github.com/LazyVim/LazyVim/commit/9618e327edfb79d9cbb037a2039c4315a95df63f)) +* **lang/omnisharp:** switch neotest adapter to vstest ([#6540](https://github.com/LazyVim/LazyVim/issues/6540)) ([4086d44](https://github.com/LazyVim/LazyVim/commit/4086d44a0b5c576630c603c7b71c6be5198d9eaf)) +* **neotest:** extra keymap to attach to a test ([#6198](https://github.com/LazyVim/LazyVim/issues/6198)) ([66e927f](https://github.com/LazyVim/LazyVim/commit/66e927fd9d0b0ff2886b9fe1465d9396461a2665)) + + +### Bug Fixes + +* **blink:** remove snippet expand override (no longer needed). Closes [#6044](https://github.com/LazyVim/LazyVim/issues/6044) ([336e2c3](https://github.com/LazyVim/LazyVim/commit/336e2c3ea67636c4eea3cf8f7538feb86b5a0610)) +* **chezmoi:** add `hidden=false` to fzf picker ([#6095](https://github.com/LazyVim/LazyVim/issues/6095)) ([1aa1b59](https://github.com/LazyVim/LazyVim/commit/1aa1b59a7ec7cab61fa7b096db53df15ec5008e7)) +* **copilot-chat:** use up to date config for chat headers ([#6543](https://github.com/LazyVim/LazyVim/issues/6543)) ([2c5eef7](https://github.com/LazyVim/LazyVim/commit/2c5eef7df7520fbc6fe0d90150cd26ac9e4f325b)) +* **extras/rust:** fix config key for files.exclude ([#5664](https://github.com/LazyVim/LazyVim/issues/5664)) ([762a34d](https://github.com/LazyVim/LazyVim/commit/762a34d5ad95447b241287e8d540b657a699d141)) +* **extras:** adjust switch source/header shortcut ([#6567](https://github.com/LazyVim/LazyVim/issues/6567)) ([b36b858](https://github.com/LazyVim/LazyVim/commit/b36b8589b62f55b181367afe954606c73233c0a1)) +* **extras:** remove procMacro ignored ([#6117](https://github.com/LazyVim/LazyVim/issues/6117)) ([4a3702e](https://github.com/LazyVim/LazyVim/commit/4a3702e050881fea262ccae980ae1ff9e849d275)) +* **lang.omnisharp:** update CSharpier command and arguments for Mason compatibility ([#6156](https://github.com/LazyVim/LazyVim/issues/6156)) ([dfebe70](https://github.com/LazyVim/LazyVim/commit/dfebe70b8d09514dd3ee85e12463f266f93c5dd7)) +* **lang.rust:** rust-analyzer hanging on root scanned ([#6178](https://github.com/LazyVim/LazyVim/issues/6178)) ([7bf8c22](https://github.com/LazyVim/LazyVim/commit/7bf8c22c56283fa6d5d35246dcd0f49d37a5c709)) +* **latex:** ensure tex extra installs latex tree-sitter parser ([#6357](https://github.com/LazyVim/LazyVim/issues/6357)) ([ae74622](https://github.com/LazyVim/LazyVim/commit/ae74622e6666ea4c3e6c58c4ef2d3f313d8e8f20)) +* **mini.animate:** schedule the toggle mapping to correctly take effect ([#6483](https://github.com/LazyVim/LazyVim/issues/6483)) ([bd23357](https://github.com/LazyVim/LazyVim/commit/bd233579a66018f526b6b0970e33afde4cde399e)) +* **sql:** fix autocomplete when `omni` is used as a `blink.cmp` source ([#5652](https://github.com/LazyVim/LazyVim/issues/5652)) ([f6f72b9](https://github.com/LazyVim/LazyVim/commit/f6f72b90d41d9347b93a07d0b680195541f64c55)) +* **treesitter:** attach textobject keymaps to existing buffers on load. Closes [#6642](https://github.com/LazyVim/LazyVim/issues/6642). Closes [#6639](https://github.com/LazyVim/LazyVim/issues/6639) ([92a7728](https://github.com/LazyVim/LazyVim/commit/92a77287321236f52ff38648a38cf314ab223137)) +* **typescript:** make_position_params with offset encoding. ([#6277](https://github.com/LazyVim/LazyVim/issues/6277)) ([22152e9](https://github.com/LazyVim/LazyVim/commit/22152e958f3f7c2b732cb6429ccc90541e0ad17f)) +* **ui:** ignore sidekick_terminal in mini-indentscope ([#6619](https://github.com/LazyVim/LazyVim/issues/6619)) ([f0b32b5](https://github.com/LazyVim/LazyVim/commit/f0b32b5955889d4d2d3636a52d2ddf5d113646df)) +* **util:** add some kulala keymaps back to global ([#5960](https://github.com/LazyVim/LazyVim/issues/5960)) ([a16739e](https://github.com/LazyVim/LazyVim/commit/a16739e3328c2687d96f868839c575765c49baad)) +* **vscode:** don't sync undo/redo with vscode ([#5957](https://github.com/LazyVim/LazyVim/issues/5957)) ([706ec44](https://github.com/LazyVim/LazyVim/commit/706ec4443a33ec474f2329b5b806e9cdb85cce43)) + +## [15.8.1](https://github.com/LazyVim/LazyVim/compare/v15.8.0...v15.8.1) (2025-10-18) + + +### Bug Fixes + +* **treesitter:** reload lazyvim.tresitter.util to prevent issues with stale modules when upgrading ([62ce8a2](https://github.com/LazyVim/LazyVim/commit/62ce8a23d89fa766956447a3df01d9f3448e9a66)) + +## [15.8.0](https://github.com/LazyVim/LazyVim/compare/v15.7.1...v15.8.0) (2025-10-17) + + +### Features + +* **gleam:** add conform ([#5640](https://github.com/LazyVim/LazyVim/issues/5640)) ([02b8dd3](https://github.com/LazyVim/LazyVim/commit/02b8dd3f4bd55f06be133471fad027f3131238f4)) +* **sidekick:** added `ad` to close/detach a terminal/session ([f8b062b](https://github.com/LazyVim/LazyVim/commit/f8b062b130177f07d3c1c13b642402d42e980df5)) +* **sidekick:** changed default keymaps for sidekick. Please check updated docs at sidekick.nvim ([a3e52dd](https://github.com/LazyVim/LazyVim/commit/a3e52dd346ea35db5521b66e46dca95d32f00cb4)) +* **sidekick:** use `` in any snacks picker to send the (selected) results to an AI tool ([26c43a9](https://github.com/LazyVim/LazyVim/commit/26c43a9b931f3ab04a8c449671250182ac9ddca6)) +* **treesitter:** add installation instructions to get a C compiler on windows ([37032da](https://github.com/LazyVim/LazyVim/commit/37032dabd657ae567011e7ab4f881ecbf476eb76)) +* **treesitter:** added support for `disable` langs to indent/highlight/folds. Closes [#6608](https://github.com/LazyVim/LazyVim/issues/6608) ([0e8069c](https://github.com/LazyVim/LazyVim/commit/0e8069c78ee92279055236388df8c2019476767a)) +* **treesitter:** better health checks for treesitter requirements ([413b9d5](https://github.com/LazyVim/LazyVim/commit/413b9d5fa91c5bd5088b28c6d1764caa88542cb1)) +* **treesitter:** on windows, use `gcc` if available and `cl.exe` is not available for building parsers ([2a1f3c3](https://github.com/LazyVim/LazyVim/commit/2a1f3c370145c3465c0142deade3e3b2660ce829)) + + +### Bug Fixes + +* **blink:** disable blink left/right key in the cmdline ([94c4603](https://github.com/LazyVim/LazyVim/commit/94c4603b6838fbe75343b6e3342b4343744157dc)) +* **keymaps:** update deprecated diagnostic keymap to latest api change ([#6574](https://github.com/LazyVim/LazyVim/issues/6574)) ([b9d38f6](https://github.com/LazyVim/LazyVim/commit/b9d38f692015fecaa72d55282b74a3d601e4c9fa)) +* **sidekick:** only add copilot to lspconfig when `opts.nes.enabled ~= false` ([049db39](https://github.com/LazyVim/LazyVim/commit/049db39de0f272e8368a4b3881ac5a13f0d04b09)) +* **terminal:** term toggle keymaps now only work for snacks terminals. Closes [#6573](https://github.com/LazyVim/LazyVim/issues/6573) ([4efd0e2](https://github.com/LazyVim/LazyVim/commit/4efd0e2bea2a387d6fcdea8cf36a62049e8bafed)) +* **treesiter:** check that `disable` options are tables ([e8c5fa7](https://github.com/LazyVim/LazyVim/commit/e8c5fa7eae06539c883699507caeadb46d74f401)) +* **treesitter:** better check on windows if microsoft build tools is installed ([5effc77](https://github.com/LazyVim/LazyVim/commit/5effc77185f94f557809375b5650d427e7171c32)) +* **xtras:** load `copilot-native` before `blink` ([#6588](https://github.com/LazyVim/LazyVim/issues/6588)) ([aa2c436](https://github.com/LazyVim/LazyVim/commit/aa2c43633adee0f80faf8d743d6476ea4f8ba5ca)) + + +### Performance Improvements + +* **ansible:** load on ft=yaml and run should only be mapped on ft=yaml.ansible ([ebdcf1b](https://github.com/LazyVim/LazyVim/commit/ebdcf1ba7ef18daa8c897c8922a5ef770e8bcffb)) + ## [15.7.1](https://github.com/LazyVim/LazyVim/compare/v15.7.0...v15.7.1) (2025-10-02) diff --git a/README-CN.md b/README-CN.md index 83e5abfd..67132e59 100644 --- a/README-CN.md +++ b/README-CN.md @@ -54,7 +54,7 @@ LazyVim 是一个基于 [💤 lazy.nvim](https://github.com/folke/lazy.nvim) 的 ## ⚡️ 环境要求 -- Neovim >= **0.9.0** (需要用 **LuaJIT** 构建) +- Neovim >= **0.11.2** (需要用 **LuaJIT** 构建) - Git >= **2.19.0** (用于部分克隆支持) - 一个 [Nerd Font](https://www.nerdfonts.com/) 字体 **_(可选)_** - 一个用于 `nvim-treesitter` 的 **C** 编译器。看 [这里](https://github.com/nvim-treesitter/nvim-treesitter#requirements) diff --git a/README-DE.md b/README-DE.md index c087d7c6..a46aba0a 100644 --- a/README-DE.md +++ b/README-DE.md @@ -56,7 +56,7 @@ und die Einfachheit von einem vorgefertigten Setup. ## ⚡️ Vorraussetzungen -- Neovim >= **0.8.0** (gebraucht um mit **LuaJIT** zu bauen) +- Neovim >= **0.11.2** (gebraucht um mit **LuaJIT** zu bauen) - Git >= **2.19.0** (um Teil-Klone zu unterstützen) - eine [Nerd Font](https://www.nerdfonts.com/) **_(optional)_** diff --git a/README-ES.md b/README-ES.md index 06e64f96..3dd7f108 100644 --- a/README-ES.md +++ b/README-ES.md @@ -52,7 +52,7 @@ LazyVim es una configuración de Neovim impulsada por [💤 lazy.nvim](https://g ## ⚡️ Requisitos -- Neovim >= **0.9.0** (debe ser compilado con **LuaJIT**) +- Neovim >= **0.11.2** (debe ser compilado con **LuaJIT**) - Git >= **2.19.0** (para soporte de clones parciales) - una [Fuente Nerd](https://www.nerdfonts.com/) **_(opcional)_** - un compilador **C** para `nvim-treesitter`. Consulta [aquí](https://github.com/nvim-treesitter/nvim-treesitter#requirements) diff --git a/README-IT.md b/README-IT.md index 3ab7419a..3bf82a9c 100644 --- a/README-IT.md +++ b/README-IT.md @@ -57,7 +57,7 @@ insieme alla comodità di un setup preconfigurato. ## ⚡️ Requisiti -- Neovim >= **0.9.0** (deve essere compilato con **LuaJIT**) +- Neovim >= **0.11.2** (deve essere compilato con **LuaJIT**) - Git >= **2.19.0** (per supportare cloni parziali) - a [Nerd Font](https://www.nerdfonts.com/) **_(opzionale)_** - un compilatore **C** per `nvim-treesitter`. Leggi [qui](https://github.com/nvim-treesitter/nvim-treesitter#requirements) diff --git a/README-JP.md b/README-JP.md index d81f2cb9..e7a2da3d 100644 --- a/README-JP.md +++ b/README-JP.md @@ -54,7 +54,7 @@ LazyVimは、ゼロから始めるか、あらかじめ作成されたディス ## ⚡️ 必要要件 -- Neovim >= **0.9.0** (**LuaJIT**でビルドされている必要があります) +- Neovim >= **0.11.2** (**LuaJIT**でビルドされている必要があります) - Git >= **2.19.0** (部分的なcloneサポートのため) - [Nerd Font](https://www.nerdfonts.com/) **_(任意)_** - `nvim-treesitter`用の**C**コンパイラ。詳細は[こちら](https://github.com/nvim-treesitter/nvim-treesitter#requirements) diff --git a/README-KO.md b/README-KO.md index 84d28017..25ac67ef 100644 --- a/README-KO.md +++ b/README-KO.md @@ -52,7 +52,7 @@ LazyVim은 [💤 lazy.nvim](https://github.com/folke/lazy.nvim)를 기반으로 ## ⚡️ 요구사항 -- **0.9.0**이상의 Neovim (LuaJIT과 함께 개발이 되어져있어야함니다.) +- **0.11.2**이상의 Neovim (LuaJIT과 함께 개발이 되어져있어야함니다.) - **2.19.0**이상의 Git (이것은 부분적인 클론기능을 지원하기 위함입니다.) - [Nerd Font](https://www.nerdfonts.com/) **_(옵션)_** - `nvim-treesitter`를 위한 **C** 컴파일러. [이 문서](https://github.com/nvim-treesitter/nvim-treesitter#requirements)를 확인해주시기바랍니다. diff --git a/README-PT.md b/README-PT.md index 65d8c625..67bd6fb1 100644 --- a/README-PT.md +++ b/README-PT.md @@ -57,7 +57,7 @@ como necessário, junto com a conveniência de um setup pré-configurado. ## ⚡️ Requesitos -- Neovim >= **0.9.0** (preciso fazer build com **LuaJIT**) +- Neovim >= **0.11.2** (preciso fazer build com **LuaJIT**) - Git >= **2.19.0** (para suporte parcial de clones) - uma [Nerd Font](https://www.nerdfonts.com/) **_(opcional)_** - um compilador de **C** para `nvim-treesitter`. Mais informações [aqui](https://github.com/nvim-treesitter/nvim-treesitter#requirements) diff --git a/doc/LazyVim.txt b/doc/LazyVim.txt index 091b0880..f8a92ea3 100644 --- a/doc/LazyVim.txt +++ b/doc/LazyVim.txt @@ -1,4 +1,4 @@ -*LazyVim.txt* For Neovim Last change: 2025 October 02 +*LazyVim.txt* For Neovim Last change: 2025 October 19 ============================================================================== Table of Contents *LazyVim-table-of-contents* diff --git a/lua/lazyvim/config/init.lua b/lua/lazyvim/config/init.lua index 233328d5..dc8972c7 100644 --- a/lua/lazyvim/config/init.lua +++ b/lua/lazyvim/config/init.lua @@ -3,7 +3,7 @@ _G.LazyVim = require("lazyvim.util") ---@class LazyVimConfig: LazyVimOptions local M = {} -M.version = "15.7.1" -- x-release-please-version +M.version = "15.9.0" -- x-release-please-version LazyVim.config = M ---@class LazyVimOptions diff --git a/lua/lazyvim/config/keymaps.lua b/lua/lazyvim/config/keymaps.lua index 938a2333..d8d7a10f 100644 --- a/lua/lazyvim/config/keymaps.lua +++ b/lua/lazyvim/config/keymaps.lua @@ -120,10 +120,12 @@ end, { desc = "Format" }) -- diagnostic local diagnostic_goto = function(next, severity) - local go = next and vim.diagnostic.goto_next or vim.diagnostic.goto_prev - severity = severity and vim.diagnostic.severity[severity] or nil return function() - go({ severity = severity }) + vim.diagnostic.jump({ + count = (next and 1 or -1) * vim.v.count1, + severity = severity and vim.diagnostic.severity[severity] or nil, + float = true, + }) end end map("n", "cd", vim.diagnostic.open_float, { desc = "Line Diagnostics" }) @@ -187,12 +189,8 @@ map("n", "L", function() LazyVim.news.changelog() end, { desc = "LazyVim -- floating terminal map("n", "fT", function() Snacks.terminal() end, { desc = "Terminal (cwd)" }) map("n", "ft", function() Snacks.terminal(nil, { cwd = LazyVim.root() }) end, { desc = "Terminal (Root Dir)" }) -map("n", "", function() Snacks.terminal(nil, { cwd = LazyVim.root() }) end, { desc = "Terminal (Root Dir)" }) -map("n", "", function() Snacks.terminal(nil, { cwd = LazyVim.root() }) end, { desc = "which_key_ignore" }) - --- Terminal Mappings -map("t", "", "close", { desc = "Hide Terminal" }) -map("t", "", "close", { desc = "which_key_ignore" }) +map({"n","t"}, "",function() Snacks.terminal(nil, { cwd = LazyVim.root() }) end, { desc = "Terminal (Root Dir)" }) +map({"n","t"}, "",function() Snacks.terminal(nil, { cwd = LazyVim.root() }) end, { desc = "which_key_ignore" }) -- windows map("n", "-", "s", { desc = "Split Window Below", remap = true }) diff --git a/lua/lazyvim/health.lua b/lua/lazyvim/health.lua index d1632e75..2542c150 100644 --- a/lua/lazyvim/health.lua +++ b/lua/lazyvim/health.lua @@ -4,6 +4,7 @@ local start = vim.health.start or vim.health.report_start local ok = vim.health.ok or vim.health.report_ok local warn = vim.health.warn or vim.health.report_warn local error = vim.health.error or vim.health.report_error +local info = vim.health.info or vim.health.report_info function M.check() start("LazyVim") @@ -33,6 +34,23 @@ function M.check() warn(("`%s` is not installed"):format(name)) end end + + start("LazyVim nvim-treesitter") + local tsok, health = LazyVim.treesitter.check() + local keys = vim.tbl_keys(health) ---@type string[] + table.sort(keys) + for _, k in pairs(keys) do + (health[k] and ok or error)(("`%s` is %s"):format(k, health[k] and "installed" or "not installed")) + end + if not tsok then + info( + "See the requirements at [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter/tree/main?tab=readme-ov-file#requirements)" + ) + info("Run `:checkhealth nvim-treesitter` for more information.") + if vim.fn.has("win32") == 1 and not health["C compiler"] then + info("Install a C compiler with `winget install --id=BrechtSanders.WinLibs.POSIX.UCRT -e`") + end + end end return M diff --git a/lua/lazyvim/plugins/extras/ai/copilot-chat.lua b/lua/lazyvim/plugins/extras/ai/copilot-chat.lua index fbf4ee39..4c350b4e 100644 --- a/lua/lazyvim/plugins/extras/ai/copilot-chat.lua +++ b/lua/lazyvim/plugins/extras/ai/copilot-chat.lua @@ -8,8 +8,11 @@ return { user = user:sub(1, 1):upper() .. user:sub(2) return { auto_insert_mode = true, - question_header = " " .. user .. " ", - answer_header = " Copilot ", + headers = { + user = " " .. user .. " ", + assistant = " Copilot ", + tool = "󰊳 Tool ", + }, window = { width = 0.4, }, diff --git a/lua/lazyvim/plugins/extras/ai/sidekick.lua b/lua/lazyvim/plugins/extras/ai/sidekick.lua index 6e80ba47..d0451fce 100644 --- a/lua/lazyvim/plugins/extras/ai/sidekick.lua +++ b/lua/lazyvim/plugins/extras/ai/sidekick.lua @@ -4,11 +4,13 @@ return { -- copilot-language-server { "neovim/nvim-lspconfig", - opts = { - servers = { - copilot = {}, - }, - }, + opts = function(_, opts) + local sk = LazyVim.opts("sidekick.nvim") ---@type sidekick.Config|{} + if vim.tbl_get(sk, "nes", "enabled") ~= false then + opts.servers = opts.servers or {} + opts.servers.copilot = opts.servers.copilot or {} + end + end, }, -- lualine @@ -56,6 +58,12 @@ return { -- nes is also useful in normal mode { "", LazyVim.cmp.map({ "ai_nes" }, ""), mode = { "n" }, expr = true }, { "a", "", desc = "+ai", mode = { "n", "v" } }, + { + "", + function() require("sidekick.cli").toggle() end, + desc = "Sidekick Toggle", + mode = { "n", "t", "i", "x" }, + }, { "aa", function() require("sidekick.cli").toggle() end, @@ -68,12 +76,22 @@ return { -- require("sidekick.cli").select({ filter = { installed = true } }) desc = "Select CLI", }, + { + "ad", + function() require("sidekick.cli").close() end, + desc = "Detach a CLI Session", + }, { "at", function() require("sidekick.cli").send({ msg = "{this}" }) end, mode = { "x", "n" }, desc = "Send This", }, + { + "af", + function() require("sidekick.cli").send({ msg = "{file}" }) end, + desc = "Send File", + }, { "av", function() require("sidekick.cli").send({ msg = "{selection}" }) end, @@ -86,17 +104,29 @@ return { mode = { "n", "x" }, desc = "Sidekick Select Prompt", }, - { - "", - function() require("sidekick.cli").focus() end, - mode = { "n", "x", "i", "t" }, - desc = "Sidekick Switch Focus", - }, - -- Example of a keybinding to open Claude directly - { - "ac", - function() require("sidekick.cli").toggle({ name = "claude", focus = true }) end, - desc = "Sidekick Claude Toggle", + }, + }, + + { + "folke/snacks.nvim", + optional = true, + opts = { + picker = { + actions = { + sidekick_send = function(...) + return require("sidekick.cli.snacks").send(...) + end, + }, + win = { + input = { + keys = { + [""] = { + "sidekick_send", + mode = { "n", "i" }, + }, + }, + }, + }, }, }, }, diff --git a/lua/lazyvim/plugins/extras/coding/blink.lua b/lua/lazyvim/plugins/extras/coding/blink.lua index 790808b1..ccee9d79 100644 --- a/lua/lazyvim/plugins/extras/coding/blink.lua +++ b/lua/lazyvim/plugins/extras/coding/blink.lua @@ -37,9 +37,7 @@ return { ---@type blink.cmp.Config opts = { snippets = { - expand = function(snippet, _) - return LazyVim.cmp.expand(snippet) - end, + preset = "default", }, appearance = { @@ -85,7 +83,11 @@ return { cmdline = { enabled = true, - keymap = { preset = "cmdline" }, + keymap = { + preset = "cmdline", + [""] = false, + [""] = false, + }, completion = { list = { selection = { preselect = false } }, menu = { diff --git a/lua/lazyvim/plugins/extras/coding/mini-snippets.lua b/lua/lazyvim/plugins/extras/coding/mini-snippets.lua index 714d867d..0262c388 100644 --- a/lua/lazyvim/plugins/extras/coding/mini-snippets.lua +++ b/lua/lazyvim/plugins/extras/coding/mini-snippets.lua @@ -1,6 +1,6 @@ if lazyvim_docs then -- Set to `false` to prevent "non-lsp snippets"" from appearing inside completion windows - -- Motivation: Less clutter in completion windows and a more direct usage of snippits + -- Motivation: Less clutter in completion windows and a more direct usage of snippets vim.g.lazyvim_mini_snippets_in_completion = true -- NOTE: Please also read: diff --git a/lua/lazyvim/plugins/extras/lang/ansible.lua b/lua/lazyvim/plugins/extras/lang/ansible.lua index 0d20b02a..c093f278 100644 --- a/lua/lazyvim/plugins/extras/lang/ansible.lua +++ b/lua/lazyvim/plugins/extras/lang/ansible.lua @@ -19,13 +19,14 @@ return { }, { "mfussenegger/nvim-ansible", - ft = {}, + ft = { "yaml" }, keys = { { "ta", function() require("ansible").run() end, + ft = "yaml.ansible", desc = "Ansible Run Playbook/Role", silent = true, }, diff --git a/lua/lazyvim/plugins/extras/lang/clangd.lua b/lua/lazyvim/plugins/extras/lang/clangd.lua index 0ba58aca..cac83194 100644 --- a/lua/lazyvim/plugins/extras/lang/clangd.lua +++ b/lua/lazyvim/plugins/extras/lang/clangd.lua @@ -60,7 +60,7 @@ return { -- Ensure mason installs the server clangd = { keys = { - { "ch", "ClangdSwitchSourceHeader", desc = "Switch Source/Header (C/C++)" }, + { "ch", "LspClangdSwitchSourceHeader", desc = "Switch Source/Header (C/C++)" }, }, root_markers = { "compile_commands.json", diff --git a/lua/lazyvim/plugins/extras/lang/docker.lua b/lua/lazyvim/plugins/extras/lang/docker.lua index ea26b013..a3c48c10 100644 --- a/lua/lazyvim/plugins/extras/lang/docker.lua +++ b/lua/lazyvim/plugins/extras/lang/docker.lua @@ -2,7 +2,14 @@ return { recommended = function() return LazyVim.extras.wants({ ft = "dockerfile", - root = { "Dockerfile", "docker-compose.yml", "compose.yml", "docker-compose.yaml", "compose.yaml" }, + root = { + "Dockerfile", + "Containerfile", + "docker-compose.yml", + "compose.yml", + "docker-compose.yaml", + "compose.yaml", + }, }) end, { diff --git a/lua/lazyvim/plugins/extras/lang/gleam.lua b/lua/lazyvim/plugins/extras/lang/gleam.lua index 956d2882..a41a6054 100644 --- a/lua/lazyvim/plugins/extras/lang/gleam.lua +++ b/lua/lazyvim/plugins/extras/lang/gleam.lua @@ -17,4 +17,13 @@ return { }, }, }, + { + "conform.nvim", + optional = true, + opts = { + formatters_by_ft = { + gleam = { "gleam" }, + }, + }, + }, } diff --git a/lua/lazyvim/plugins/extras/lang/java.lua b/lua/lazyvim/plugins/extras/lang/java.lua index 4dd1d77f..72f31a63 100644 --- a/lua/lazyvim/plugins/extras/lang/java.lua +++ b/lua/lazyvim/plugins/extras/lang/java.lua @@ -169,7 +169,9 @@ return { }, settings = opts.settings, -- enable CMP capabilities - capabilities = LazyVim.has("cmp-nvim-lsp") and require("cmp_nvim_lsp").default_capabilities() or nil, + capabilities = LazyVim.has("blink.cmp") and require("blink.cmp").get_lsp_capabilities() or LazyVim.has( + "cmp-nvim-lsp" + ) and require("cmp_nvim_lsp").default_capabilities() or nil, }, opts.jdtls) -- Existing server will be reused if the root_dir matches. diff --git a/lua/lazyvim/plugins/extras/lang/lean.lua b/lua/lazyvim/plugins/extras/lang/lean.lua index 58488372..76db7ecb 100644 --- a/lua/lazyvim/plugins/extras/lang/lean.lua +++ b/lua/lazyvim/plugins/extras/lang/lean.lua @@ -108,7 +108,7 @@ return { priority = 10, }, - -- Redirect Lean's stderr messages somehwere (to a buffer by default) + -- Redirect Lean's stderr messages somewhere (to a buffer by default) stderr = { enable = true, -- height of the window diff --git a/lua/lazyvim/plugins/extras/lang/markdown.lua b/lua/lazyvim/plugins/extras/lang/markdown.lua index 33e9e457..ac5405e3 100644 --- a/lua/lazyvim/plugins/extras/lang/markdown.lua +++ b/lua/lazyvim/plugins/extras/lang/markdown.lua @@ -113,17 +113,8 @@ return { require("render-markdown").setup(opts) Snacks.toggle({ name = "Render Markdown", - get = function() - return require("render-markdown.state").enabled - end, - set = function(enabled) - local m = require("render-markdown") - if enabled then - m.enable() - else - m.disable() - end - end, + get = require("render-markdown").get, + set = require("render-markdown").set, }):map("um") end, }, diff --git a/lua/lazyvim/plugins/extras/lang/omnisharp.lua b/lua/lazyvim/plugins/extras/lang/omnisharp.lua index 754094ca..ae25e17f 100644 --- a/lua/lazyvim/plugins/extras/lang/omnisharp.lua +++ b/lua/lazyvim/plugins/extras/lang/omnisharp.lua @@ -27,12 +27,6 @@ return { formatters_by_ft = { cs = { "csharpier" }, }, - formatters = { - csharpier = { - command = "dotnet-csharpier", - args = { "--write-stdout" }, - }, - }, }, }, { @@ -109,12 +103,12 @@ return { "nvim-neotest/neotest", optional = true, dependencies = { - "Issafalcon/neotest-dotnet", + "Nsidorenco/neotest-vstest", }, opts = { adapters = { - ["neotest-dotnet"] = { - -- Here we can set options for neotest-dotnet + ["neotest-vstest"] = { + -- Here we can set options for neotest-vstest }, }, }, diff --git a/lua/lazyvim/plugins/extras/lang/python.lua b/lua/lazyvim/plugins/extras/lang/python.lua index a02ded1f..7a77cbc6 100644 --- a/lua/lazyvim/plugins/extras/lang/python.lua +++ b/lua/lazyvim/plugins/extras/lang/python.lua @@ -103,11 +103,7 @@ return { { "dPc", function() require('dap-python').test_class() end, desc = "Debug Class", ft = "python" }, }, config = function() - if vim.fn.has("win32") == 1 then - require("dap-python").setup(LazyVim.get_pkg_path("debugpy", "/venv/Scripts/pythonw.exe")) - else - require("dap-python").setup(LazyVim.get_pkg_path("debugpy", "/venv/bin/python")) - end + require("dap-python").setup("debugpy-adapter") end, }, }, diff --git a/lua/lazyvim/plugins/extras/lang/rust.lua b/lua/lazyvim/plugins/extras/lang/rust.lua index b66dde9b..5586f9e2 100644 --- a/lua/lazyvim/plugins/extras/lang/rust.lua +++ b/lua/lazyvim/plugins/extras/lang/rust.lua @@ -85,16 +85,12 @@ return { }, procMacro = { enable = true, - ignored = { - ["async-trait"] = { "async_trait" }, - ["napi-derive"] = { "napi" }, - ["async-recursion"] = { "async_recursion" }, - }, }, files = { - excludeDirs = { + exclude = { ".direnv", ".git", + ".jj", ".github", ".gitlab", "bin", @@ -103,6 +99,8 @@ return { "venv", ".venv", }, + -- Avoid Roots Scanned hanging, see https://github.com/rust-lang/rust-analyzer/issues/12613#issuecomment-2096386344 + watcher = "client", }, }, }, diff --git a/lua/lazyvim/plugins/extras/lang/sql.lua b/lua/lazyvim/plugins/extras/lang/sql.lua index 070d26ff..955e228c 100644 --- a/lua/lazyvim/plugins/extras/lang/sql.lua +++ b/lua/lazyvim/plugins/extras/lang/sql.lua @@ -28,6 +28,11 @@ end local sql_ft = { "sql", "mysql", "plsql" } +-- disable nvim default `sql_completion` plugin to be compatible with blink.cmp's omni +-- while still showing some keywords from the syntax autocomplete sources +vim.g.omni_sql_default_compl_type = "syntax" +vim.g.loaded_sql_completion = true + return { recommended = function() return LazyVim.extras.wants({ diff --git a/lua/lazyvim/plugins/extras/lang/tex.lua b/lua/lazyvim/plugins/extras/lang/tex.lua index 9ced69e1..7af026c2 100644 --- a/lua/lazyvim/plugins/extras/lang/tex.lua +++ b/lua/lazyvim/plugins/extras/lang/tex.lua @@ -12,7 +12,7 @@ return { opts = function(_, opts) opts.highlight = opts.highlight or {} if type(opts.ensure_installed) == "table" then - vim.list_extend(opts.ensure_installed, { "bibtex" }) + vim.list_extend(opts.ensure_installed, { "bibtex", "latex" }) end if type(opts.highlight.disable) == "table" then vim.list_extend(opts.highlight.disable, { "latex" }) diff --git a/lua/lazyvim/plugins/extras/lang/typescript.lua b/lua/lazyvim/plugins/extras/lang/typescript.lua index 6896b78c..36b8d067 100644 --- a/lua/lazyvim/plugins/extras/lang/typescript.lua +++ b/lua/lazyvim/plugins/extras/lang/typescript.lua @@ -86,7 +86,8 @@ return { { "gD", function() - local params = vim.lsp.util.make_position_params() + local win = vim.api.nvim_get_current_win() + local params = vim.lsp.util.make_position_params(win, "utf-16") LazyVim.lsp.execute({ command = "typescript.goToSourceDefinition", arguments = { params.textDocument.uri, params.position }, diff --git a/lua/lazyvim/plugins/extras/test/core.lua b/lua/lazyvim/plugins/extras/test/core.lua index 48f886ad..99d4969e 100644 --- a/lua/lazyvim/plugins/extras/test/core.lua +++ b/lua/lazyvim/plugins/extras/test/core.lua @@ -106,6 +106,7 @@ return { -- stylua: ignore keys = { {"t", "", desc = "+test"}, + { "ta", function() require("neotest").run.attach() end, desc = "Attach to Test (Neotest)" }, { "tt", function() require("neotest").run.run(vim.fn.expand("%")) end, desc = "Run File (Neotest)" }, { "tT", function() require("neotest").run.run(vim.uv.cwd()) end, desc = "Run All Test Files (Neotest)" }, { "tr", function() require("neotest").run.run() end, desc = "Run Nearest (Neotest)" }, diff --git a/lua/lazyvim/plugins/extras/ui/mini-animate.lua b/lua/lazyvim/plugins/extras/ui/mini-animate.lua index b71c19a9..11a13cc1 100644 --- a/lua/lazyvim/plugins/extras/ui/mini-animate.lua +++ b/lua/lazyvim/plugins/extras/ui/mini-animate.lua @@ -32,15 +32,19 @@ return { end, }) - Snacks.toggle({ - name = "Mini Animate", - get = function() - return not vim.g.minianimate_disable - end, - set = function(state) - vim.g.minianimate_disable = not state - end, - }):map("ua") + -- schedule setting the mapping to override the default mapping from `keymaps.lua` + -- seems `keymaps.lua` is the last event to execute on `VeryLazy` and it overwrites it + vim.schedule(function() + Snacks.toggle({ + name = "Mini Animate", + get = function() + return not vim.g.minianimate_disable + end, + set = function(state) + vim.g.minianimate_disable = not state + end, + }):map("ua") + end) local animate = require("mini.animate") return vim.tbl_deep_extend("force", opts, { diff --git a/lua/lazyvim/plugins/extras/ui/mini-indentscope.lua b/lua/lazyvim/plugins/extras/ui/mini-indentscope.lua index ea266b24..e043432c 100644 --- a/lua/lazyvim/plugins/extras/ui/mini-indentscope.lua +++ b/lua/lazyvim/plugins/extras/ui/mini-indentscope.lua @@ -23,6 +23,7 @@ return { "mason", "neo-tree", "notify", + "sidekick_terminal", "snacks_dashboard", "snacks_notif", "snacks_terminal", @@ -44,7 +45,7 @@ return { end, }, - -- disable inent-blankline scope when mini-indentscope is enabled + -- disable indent-blankline scope when mini-indentscope is enabled { "lukas-reineke/indent-blankline.nvim", optional = true, diff --git a/lua/lazyvim/plugins/extras/util/chezmoi.lua b/lua/lazyvim/plugins/extras/util/chezmoi.lua index 2c1b2f31..ff4501db 100644 --- a/lua/lazyvim/plugins/extras/util/chezmoi.lua +++ b/lua/lazyvim/plugins/extras/util/chezmoi.lua @@ -8,7 +8,7 @@ local pick_chezmoi = function() fzf_lua.actions.vimcmd_entry("ChezmoiEdit", selected, { cwd = os.getenv("HOME") }) end, } - fzf_lua.files({ cmd = "chezmoi managed --include=files,symlinks", actions = actions }) + fzf_lua.files({ cmd = "chezmoi managed --include=files,symlinks", actions = actions, hidden = false }) elseif LazyVim.pick.picker.name == "snacks" then local results = require("chezmoi.commands").list({ args = { diff --git a/lua/lazyvim/plugins/extras/util/rest.lua b/lua/lazyvim/plugins/extras/util/rest.lua index 9f2e6d67..0fc08ced 100644 --- a/lua/lazyvim/plugins/extras/util/rest.lua +++ b/lua/lazyvim/plugins/extras/util/rest.lua @@ -8,10 +8,11 @@ return { "mistweaverco/kulala.nvim", ft = "http", keys = { - { "R", "", desc = "+Rest", ft = "http" }, - { "Rb", "lua require('kulala').scratchpad()", desc = "Open scratchpad", ft = "http" }, + { "R", "", desc = "+Rest" }, + { "Rb", "lua require('kulala').scratchpad()", desc = "Open scratchpad" }, { "Rc", "lua require('kulala').copy()", desc = "Copy as cURL", ft = "http" }, { "RC", "lua require('kulala').from_curl()", desc = "Paste from curl", ft = "http" }, + { "Re", "lua require('kulala').set_selected_env()", desc = "Set environment", ft = "http" }, { "Rg", "lua require('kulala').download_graphql_schema()", @@ -22,7 +23,7 @@ return { { "Rn", "lua require('kulala').jump_next()", desc = "Jump to next request", ft = "http" }, { "Rp", "lua require('kulala').jump_prev()", desc = "Jump to previous request", ft = "http" }, { "Rq", "lua require('kulala').close()", desc = "Close window", ft = "http" }, - { "Rr", "lua require('kulala').replay()", desc = "Replay the last request", ft = "http" }, + { "Rr", "lua require('kulala').replay()", desc = "Replay the last request" }, { "Rs", "lua require('kulala').run()", desc = "Send the request", ft = "http" }, { "RS", "lua require('kulala').show_stats()", desc = "Show stats", ft = "http" }, { "Rt", "lua require('kulala').toggle_view()", desc = "Toggle headers/body", ft = "http" }, diff --git a/lua/lazyvim/plugins/extras/vscode.lua b/lua/lazyvim/plugins/extras/vscode.lua index 5115a2b4..92b7f9f0 100644 --- a/lua/lazyvim/plugins/extras/vscode.lua +++ b/lua/lazyvim/plugins/extras/vscode.lua @@ -39,10 +39,6 @@ vim.api.nvim_create_autocmd("User", { vim.keymap.set("n", "/", [[lua require('vscode').action('workbench.action.findInFiles')]]) vim.keymap.set("n", "ss", [[lua require('vscode').action('workbench.action.gotoSymbol')]]) - -- Keep undo/redo lists in sync with VsCode - vim.keymap.set("n", "u", "call VSCodeNotify('undo')") - vim.keymap.set("n", "", "call VSCodeNotify('redo')") - -- Navigate VSCode tabs like lazyvim buffers vim.keymap.set("n", "", "call VSCodeNotify('workbench.action.previousEditor')") vim.keymap.set("n", "", "call VSCodeNotify('workbench.action.nextEditor')") diff --git a/lua/lazyvim/plugins/treesitter.lua b/lua/lazyvim/plugins/treesitter.lua index 78f1b3b2..2a4fa567 100644 --- a/lua/lazyvim/plugins/treesitter.lua +++ b/lua/lazyvim/plugins/treesitter.lua @@ -13,20 +13,22 @@ return { LazyVim.error("Please restart Neovim and run `:TSUpdate` to use the `nvim-treesitter` **main** branch.") return end - LazyVim.treesitter.ensure_treesitter_cli(function() + -- make sure we're using the latest treesitter util + package.loaded["lazyvim.util.treesitter"] = nil + LazyVim.treesitter.build(function() TS.update(nil, { summary = true }) end) end, - lazy = vim.fn.argc(-1) == 0, -- load treesitter early when opening a file from the cmdline event = { "LazyFile", "VeryLazy" }, cmd = { "TSUpdate", "TSInstall", "TSLog", "TSUninstall" }, opts_extend = { "ensure_installed" }, + ---@alias lazyvim.TSFeat { enable?: boolean, disable?: string[] } ---@class lazyvim.TSConfig: TSConfig opts = { -- LazyVim config for treesitter - indent = { enable = true }, - highlight = { enable = true }, - folds = { enable = true }, + indent = { enable = true }, ---@type lazyvim.TSFeat + highlight = { enable = true }, ---@type lazyvim.TSFeat + folds = { enable = true }, ---@type lazyvim.TSFeat ensure_installed = { "bash", "c", @@ -89,7 +91,7 @@ return { return not LazyVim.treesitter.have(lang) end, opts.ensure_installed or {}) if #install > 0 then - LazyVim.treesitter.ensure_treesitter_cli(function() + LazyVim.treesitter.build(function() TS.install(install, { summary = true }):await(function() LazyVim.treesitter.get_installed(true) -- refresh the installed langs end) @@ -99,22 +101,32 @@ return { vim.api.nvim_create_autocmd("FileType", { group = vim.api.nvim_create_augroup("lazyvim_treesitter", { clear = true }), callback = function(ev) - if not LazyVim.treesitter.have(ev.match) then + local ft, lang = ev.match, vim.treesitter.language.get_lang(ev.match) + if not LazyVim.treesitter.have(ft) then return end + ---@param feat string + ---@param query string + local function enabled(feat, query) + local f = opts[feat] or {} ---@type lazyvim.TSFeat + return f.enable ~= false + and not (type(f.disable) == "table" and vim.tbl_contains(f.disable, lang)) + and LazyVim.treesitter.have(ft, query) + end + -- highlighting - if vim.tbl_get(opts, "highlight", "enable") ~= false then + if enabled("highlight", "highlights") then pcall(vim.treesitter.start) end -- indents - if vim.tbl_get(opts, "indent", "enable") ~= false and LazyVim.treesitter.have(ev.match, "indents") then + if enabled("indent", "indents") then LazyVim.set_default("indentexpr", "v:lua.LazyVim.treesitter.indentexpr()") end -- folds - if vim.tbl_get(opts, "folds", "enable") ~= false and LazyVim.treesitter.have(ev.match, "folds") then + if enabled("folds", "folds") then if LazyVim.set_default("foldmethod", "expr") then LazyVim.set_default("foldexpr", "v:lua.LazyVim.treesitter.foldexpr()") end @@ -149,34 +161,40 @@ return { end TS.setup(opts) + local function attach(buf) + local ft = vim.bo[buf].filetype + if not (vim.tbl_get(opts, "move", "enable") and LazyVim.treesitter.have(ft, "textobjects")) then + return + end + ---@type table> + local moves = vim.tbl_get(opts, "move", "keys") or {} + + for method, keymaps in pairs(moves) do + for key, query in pairs(keymaps) do + local desc = query:gsub("@", ""):gsub("%..*", "") + desc = desc:sub(1, 1):upper() .. desc:sub(2) + desc = (key:sub(1, 1) == "[" and "Prev " or "Next ") .. desc + desc = desc .. (key:sub(2, 2) == key:sub(2, 2):upper() and " End" or " Start") + if not (vim.wo.diff and key:find("[cC]")) then + vim.keymap.set({ "n", "x", "o" }, key, function() + require("nvim-treesitter-textobjects.move")[method](query, "textobjects") + end, { + buffer = buf, + desc = desc, + silent = true, + }) + end + end + end + end + vim.api.nvim_create_autocmd("FileType", { group = vim.api.nvim_create_augroup("lazyvim_treesitter_textobjects", { clear = true }), callback = function(ev) - if not (vim.tbl_get(opts, "move", "enable") and LazyVim.treesitter.have(ev.match, "textobjects")) then - return - end - ---@type table> - local moves = vim.tbl_get(opts, "move", "keys") or {} - - for method, keymaps in pairs(moves) do - for key, query in pairs(keymaps) do - local desc = query:gsub("@", ""):gsub("%..*", "") - desc = desc:sub(1, 1):upper() .. desc:sub(2) - desc = (key:sub(1, 1) == "[" and "Prev " or "Next ") .. desc - desc = desc .. (key:sub(2, 2) == key:sub(2, 2):upper() and " End" or " Start") - if not (vim.wo.diff and key:find("[cC]")) then - vim.keymap.set({ "n", "x", "o" }, key, function() - require("nvim-treesitter-textobjects.move")[method](query, "textobjects") - end, { - buffer = ev.buf, - desc = desc, - silent = true, - }) - end - end - end + attach(ev.buf) end, }) + vim.tbl_map(attach, vim.api.nvim_list_bufs()) end, }, diff --git a/lua/lazyvim/plugins/util.lua b/lua/lazyvim/plugins/util.lua index 8d8aa220..0357c3fb 100644 --- a/lua/lazyvim/plugins/util.lua +++ b/lua/lazyvim/plugins/util.lua @@ -23,6 +23,8 @@ return { nav_j = { "", term_nav("j"), desc = "Go to Lower Window", expr = true, mode = "t" }, nav_k = { "", term_nav("k"), desc = "Go to Upper Window", expr = true, mode = "t" }, nav_l = { "", term_nav("l"), desc = "Go to Right Window", expr = true, mode = "t" }, + hide_slash = { "", "hide", desc = "Hide Terminal", mode = { "t", "n" } }, + hide_underscore = { "", "hide", desc = "which_key_ignore", mode = { "t", "n" } }, }, }, }, diff --git a/lua/lazyvim/plugins/xtras.lua b/lua/lazyvim/plugins/xtras.lua index 19a5c6da..5db08ef1 100644 --- a/lua/lazyvim/plugins/xtras.lua +++ b/lua/lazyvim/plugins/xtras.lua @@ -5,8 +5,9 @@ local prios = { ["lazyvim.plugins.extras.coding.nvim-cmp"] = 2, ["lazyvim.plugins.extras.editor.neo-tree"] = 2, ["lazyvim.plugins.extras.ui.edgy"] = 3, - ["lazyvim.plugins.extras.lang.typescript"] = 5, + ["lazyvim.plugins.extras.ai.copilot-native"] = 4, ["lazyvim.plugins.extras.coding.blink"] = 5, + ["lazyvim.plugins.extras.lang.typescript"] = 5, ["lazyvim.plugins.extras.formatting.prettier"] = 10, -- default core extra priority is 20 -- default priority is 50 diff --git a/lua/lazyvim/util/treesitter.lua b/lua/lazyvim/util/treesitter.lua index b1d647e8..e8688a6f 100644 --- a/lua/lazyvim/util/treesitter.lua +++ b/lua/lazyvim/util/treesitter.lua @@ -51,31 +51,85 @@ function M.indentexpr() return M.have(nil, "indents") and require("nvim-treesitter").indentexpr() or -1 end ----@param cb fun() -function M.ensure_treesitter_cli(cb) - if vim.fn.executable("tree-sitter") == 1 then - return cb() +---@return string? +local function win_find_cl() + local path = "C:/Program Files (x86)/Microsoft Visual Studio" + local pattern = "*/*/VC/Tools/MSVC/*/bin/Hostx64/x64/cl.exe" + return vim.fn.globpath(path, pattern, true, true)[1] +end + +---@return boolean ok, lazyvim.util.treesitter.Health health +function M.check() + local is_win = vim.fn.has("win32") == 1 + ---@param tool string + ---@param win boolean? + local function have(tool, win) + return (win == nil or is_win == win) and vim.fn.executable(tool) == 1 end - ---@param msg? string - local function fail(msg) - return LazyVim.error({ - "**treesitter-nvim** `main` requires the `tree-sitter` CLI executable to be installed.", - "Please install it manually from https://github.com/tree-sitter/tree-sitter/tree/master/crates/cli or", - "use your system package manager.", - "Run `:checkhealth nvim-treesitter` for more information.", - msg, - }) + local have_cc = vim.env.CC ~= nil or have("cc", false) or have("cl", true) or (is_win and win_find_cl() ~= nil) + + if not have_cc and is_win and vim.fn.executable("gcc") == 1 then + vim.env.CC = "gcc" + have_cc = true + end + + ---@class lazyvim.util.treesitter.Health: table + local ret = { + ["tree-sitter (CLI)"] = have("tree-sitter"), + ["C compiler"] = have_cc, + tar = have("tar"), + curl = have("curl"), + node = have("node"), + } + local ok = true + for _, v in pairs(ret) do + ok = ok and v + end + return ok, ret +end + +---@param cb fun() +function M.build(cb) + M.ensure_treesitter_cli(function(_, err) + local ok, health = M.check() + if ok then + return cb() + else + local lines = { "Unmet requirements for **nvim-treesitter** `main`:" } + local keys = vim.tbl_keys(health) ---@type string[] + table.sort(keys) + for _, k in pairs(keys) do + lines[#lines + 1] = ("- %s `%s`"):format(health[k] and "✅" or "❌", k) + end + vim.list_extend(lines, { + "", + "See the requirements at [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter/tree/main?tab=readme-ov-file#requirements)", + "Run `:checkhealth nvim-treesitter` for more information.", + }) + if vim.fn.has("win32") == 1 and not health["C compiler"] then + lines[#lines + 1] = "Install a C compiler with `winget install --id=BrechtSanders.WinLibs.POSIX.UCRT -e`" + end + vim.list_extend(lines, err and { "", err } or {}) + LazyVim.error(lines, { title = "LazyVim Treesitter" }) + end + end) +end + +---@param cb fun(ok:boolean, err?:string) +function M.ensure_treesitter_cli(cb) + if vim.fn.executable("tree-sitter") == 1 then + return cb(true) end -- try installing with mason if not pcall(require, "mason") then - return fail("`mason.nvim` is disabled in your config, so we cannot install it automatically.") + return cb(false, "`mason.nvim` is disabled in your config, so we cannot install it automatically.") end -- check again since we might have installed it already if vim.fn.executable("tree-sitter") == 1 then - return cb() + return cb(true) end local mr = require("mason-registry") @@ -88,9 +142,9 @@ function M.ensure_treesitter_cli(cb) vim.schedule_wrap(function(success) if success then LazyVim.info("Installed `tree-sitter-cli` with `mason.nvim`.") - cb() + cb(true) else - fail("Failed to install `tree-sitter-cli` with `mason.nvim`.") + cb(false, "Failed to install `tree-sitter-cli` with `mason.nvim`.") end end) ) diff --git a/scripts/test b/scripts/test index ffbb5405..354a1a1c 100755 --- a/scripts/test +++ b/scripts/test @@ -1,3 +1,3 @@ -#!/bin/env bash +#!/usr/bin/env bash -nvim -l tests/minit.lua --minitest +nvim -l tests/minit.lua --minitest "$@" diff --git a/tests/minit.lua b/tests/minit.lua index 41907e75..37d7e1c8 100644 --- a/tests/minit.lua +++ b/tests/minit.lua @@ -1,7 +1,13 @@ #!/usr/bin/env -S nvim -l vim.env.LAZY_STDPATH = ".tests" -load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() +vim.env.LAZY_PATH = vim.fs.normalize("~/projects/lazy.nvim") + +if vim.fn.isdirectory(vim.env.LAZY_PATH) == 1 then + loadfile(vim.env.LAZY_PATH .. "/bootstrap.lua")() +else + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"), "bootstrap.lua")() +end -- Setup lazy.nvim require("lazy.minit").setup({ diff --git a/vim.toml b/vim.toml deleted file mode 100644 index df7e67e6..00000000 --- a/vim.toml +++ /dev/null @@ -1,21 +0,0 @@ -[selene] -base = "lua51" -name = "vim" - -[vim] -any = true - -[jit] -any = true - -[assert] -any = true - -[describe] -any = true - -[it] -any = true - -[before_each.args] -any = true diff --git a/vim.yml b/vim.yml new file mode 100644 index 00000000..eb58a874 --- /dev/null +++ b/vim.yml @@ -0,0 +1,19 @@ +base: lua51 +lua_versions: + - luajit + +globals: + Snacks: + any: true + vim: + any: true + jit: + any: true + assert: + any: true + describe: + any: true + it: + any: true + before_each: + any: true