From 5bcafe0bee86b0eaf6dba93da32978867364e235 Mon Sep 17 00:00:00 2001 From: Jordan Isaacs Date: Mon, 4 Sep 2023 23:01:59 -0700 Subject: [PATCH] languages (clang): add ccls.nvim --- .gitignore | 2 ++ flake.lock | 17 +++++++++++++++++ flake.nix | 4 ++++ modules/languages/clang.nix | 29 +++++++++++++++++++++++++---- 4 files changed, 48 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 121ea04..6f11c9e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ result .config +lang-tests +.ccls-cache diff --git a/flake.lock b/flake.lock index 481668f..b367c95 100644 --- a/flake.lock +++ b/flake.lock @@ -160,6 +160,22 @@ "type": "github" } }, + "plugin-ccls-nvim": { + "flake": false, + "locked": { + "lastModified": 1693106648, + "narHash": "sha256-GQkBm3B3v0Xb37uWN/Baqmqh1TMLds7t+DCiJ/vUZKA=", + "owner": "MCGHH", + "repo": "ccls.nvim", + "rev": "f79b041353d5bb4b439cf5d3b00353c362428007", + "type": "github" + }, + "original": { + "owner": "MCGHH", + "repo": "ccls.nvim", + "type": "github" + } + }, "plugin-cmp-buffer": { "flake": false, "locked": { @@ -993,6 +1009,7 @@ "nmd": "nmd", "plugin-bufdelete-nvim": "plugin-bufdelete-nvim", "plugin-catppuccin": "plugin-catppuccin", + "plugin-ccls-nvim": "plugin-ccls-nvim", "plugin-cmp-buffer": "plugin-cmp-buffer", "plugin-cmp-dap": "plugin-cmp-dap", "plugin-cmp-nvim-lsp": "plugin-cmp-nvim-lsp", diff --git a/flake.nix b/flake.nix index 806fe68..c61e559 100644 --- a/flake.nix +++ b/flake.nix @@ -60,6 +60,10 @@ plugin-rust-tools.url = "github:simrat39/rust-tools.nvim"; plugin-rust-tools.flake = false; + # Not primary repo, waiting on PR + plugin-ccls-nvim.url = "github:MCGHH/ccls.nvim"; + plugin-ccls-nvim.flake = false; + # Debugger plugin-nvim-dap.url = "github:mfussenegger/nvim-dap"; plugin-nvim-dap.flake = false; diff --git a/modules/languages/clang.nix b/modules/languages/clang.nix index df9cf08..6ea2d94 100644 --- a/modules/languages/clang.nix +++ b/modules/languages/clang.nix @@ -65,6 +65,13 @@ in type = with types; nullOr str; default = null; }; + cclsNvim = { + enable = mkOption { + description = "Enable support for extra ccls extensions through ccls.nvim"; + default = cfg.lsp.server == "ccls"; + defaultText = nvim.nmd.literalAsciiDoc ''`config.vim.languages.clang.lsp.server == "ccls"`''; + }; + }; }; }; @@ -78,10 +85,24 @@ in vim.treesitter.grammars = [ cfg.treesitter.cPackage cfg.treesitter.cppPackage ]; }) - (mkIf cfg.lsp.enable { - vim.lsp.lspconfig.enable = true; + (mkIf cfg.lsp.enable (mkMerge [ + { + vim.lsp.lspconfig.enable = true; + vim.lsp.lspconfig.sources.clang-lsp = servers.${cfg.lsp.server}.lspConfig; + } - vim.lsp.lspconfig.sources.clang-lsp = servers.${cfg.lsp.server}.lspConfig; - }) + (mkIf cfg.lsp.cclsNvim.enable { + assertions = [{ + assertion = cfg.lsp.server == "ccls"; + message = "To enable cclsNvim, lsp must be enabled and set to ccls"; + }]; + + vim.startPlugins = [ "ccls-nvim" ]; + + vim.luaConfigRC.ccls-nvim = nvim.dag.entryAnywhere '' + require("ccls").setup({}) + ''; + }) + ])) ]); }