It is a CMake lsp based on tower-lsp and treesitter
cargo install neocmakelsp
The config of neocmakelsp is in nvim-lsp-config
, so just follow nvim-lsp-config
to setup it
neocmakelsp has two start ways: stdio
and Tcp
. Tcp
is for debug. If you want to help me and debug is , you should start it with Tcp
way.
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
}
scan_cmake_in_package = true -- default is true
}
}
}
nvim_lsp.neocmake.setup({})
end
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
[[language]]
name = "neocmake"
auto-format = true
language-servers = [{ name = "neocmakelsp" }]
[language-server.neocmakelsp]
command = "nc"
args = ["localhost", "9257"]
[[language]]
name = "cmake"
auto-format = true
language-servers = [{ name = "neocmakelsp" }]
[language-server.neocmakelsp]
command = "neocmakelsp"
args = ["--stdio"]
new version will not work on mac and windows, so I need your help
- watchfile
- complete
- symbol_provider
- On hover
- Format
- GO TO Definitation
- find_package
- include
- Search cli
- Get the project struct
- It is also a cli tool to format
capabilities = {
workspace = {
didChangeWatchedFiles = {
dynamicRegistration = true,
},
},
}
It will check CMakeCache.txt, and get weather the package is exist
- Undefined function check
Note: When formating 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.