Crates.io | neocmakelsp |
lib.rs | neocmakelsp |
version | 0.8.12 |
source | src |
created_at | 2022-07-05 02:53:23.803787 |
updated_at | 2024-10-21 12:12:58.894074 |
description | The Lsp for cmake |
homepage | |
repository | https://github.com/neocmakelsp/neocmakelsp |
max_upload_size | |
id | 619398 |
size | 5,801,667 |
Intelligent Code Completion: Provides precise code completions by analyzing CMake files, enhancing development efficiency.
If you have any questions or want to help in other ways, feel free to join out matrix room.
cargo install neocmakelsp
The configuration of neocmakelsp
is in nvim-lspconfig
, so just follow nvim-lsp-config
to setup it
neocmakelsp
can talk to clients in two ways: stdio
and tcp
. tcp
is primarily for debugging. If you want to add a feature or find a bug, you should connect via tcp
.
stdio
local configs = require("lspconfig.configs")
local nvim_lsp = require("lspconfig")
if not configs.neocmake then
configs.neocmake = {
default_config = {
cmd = { "neocmakelsp", "--stdio" },
filetypes = { "cmake" },
root_dir = function(fname)
return nvim_lsp.util.find_git_ancestor(fname)
end,
single_file_support = true,-- suggested
on_attach = on_attach, -- on_attach is the on_attach function you defined
init_options = {
format = {
enable = true
},
lint = {
enable = true
},
scan_cmake_in_package = true -- default is true
}
}
}
nvim_lsp.neocmake.setup({})
end
tcp
if not configs.neocmake then
configs.neocmake = {
default_config = {
cmd = vim.lsp.rpc.connect('127.0.0.1','9257'),
filetypes = { "cmake" },
root_dir = function(fname)
return nvim_lsp.util.find_git_ancestor(fname)
end,
single_file_support = true,-- suggested
on_attach = on_attach, -- on_attach is the on_attach function you defined
init_options = {
format = {
enable = true
}
}
}
}
nvim_lsp.neocmake.setup({})
end
stdio
[[language]]
name = "cmake"
auto-format = true
language-servers = [{ name = "neocmakelsp" }]
[language-server.neocmakelsp]
command = "neocmakelsp"
args = ["--stdio"]
tcp
[[language]]
name = "neocmake"
auto-format = true
language-servers = [{ name = "neocmakelsp" }]
[language-server.neocmakelsp]
command = "nc"
args = ["localhost", "9257"]
To use neocmakelsp
with eglot:
(use-package cmake-ts-mode
:config
(add-hook 'cmake-ts-mode-hook
(defun setup-neocmakelsp ()
(require 'eglot)
(add-to-list 'eglot-server-programs `((cmake-ts-mode) . ("neocmakelsp" "--stdio")))
(eglot-ensure))))
Put a file named .neocmakelint.toml
under the root of the project.
command_upcase = "ignore" # "lowercase", "upcase"
This will check the case of all commands.
cmake-lint
integrationWhen cmake-lint
is installed, neocmakelsp
will utilize it to offer linting and code analysis each time the file is saved. This functionality can be enabled or disabled in the .neocmakelint.toml
file:
enable_external_cmake_lint = true # true to use external cmake-lint, or false to disable it
If enable_external_cmake_lint
is turned on but cmake-lint
is not installed, external linting will not report any error message.
capabilities = {
workspace = {
didChangeWatchedFiles = {
dynamicRegistration = true,
relative_pattern_support = true,
},
},
}
It will check CMakeCache.txt
, and get whether the package is exist
Snippet Support
capabilities = {
textDocument = {
completion = {
completionItem = {
snippetSupport = true
}
}
}
}
init_options = {
format = {
enable = true, -- to use lsp format
},
lint = {
enable = true
},
scan_cmake_in_package = false, -- it will deeply check the cmake file which found when search cmake packages.
semantic_token = false,
-- semantic_token heighlight. if you use treesitter highlight, it is suggested to set with false. it can be used to make better highlight for vscode which only has textmate highlight
}
Note: When formatting files, make sure that your .editorconfig
file is in your working directory
format the file
Usage: neocmakelsp {format|--format|-F} [OPTIONS] <FormatPath>...
Arguments:
<FormatPath>... file or folder to format
Options:
-o, --override override
-h, --help Print help
It will read .editorconfig
file to format files, just set like
[CMakeLists.txt]
indent_style = space
indent_size = 4
The format do the min things, just do trim
and place the first line to the right place by the indent you set, this means
function(A)
set(A
B
C
)
endfunction()
it will just become
function(A)
set(A
B
C
)
endfunction()
It just remove the space in the end, replace \t
at the begin of each line to
, if set indent_size
to space, and format the first line to right place. It does little, but I think it is enough.