74 个版本
新 0.8.1 | 2024 年 8 月 17 日 |
---|---|
0.7.9 | 2024 年 7 月 21 日 |
0.6.20 | 2024 年 3 月 7 日 |
0.6.17 | 2023 年 12 月 3 日 |
0.2.4 | 2022 年 7 月 17 日 |
4 在 文本编辑器
每月下载量 5,739
3.5MB
5.5K SLoC
基于 Tower 和 Tree-sitter 的 CMake LSP 实现
智能代码补全:通过深度分析 CMake 文件提供精确的代码补全建议,提高开发效率。
- 实时错误检测:集成代码检查功能,检查代码中的潜在问题,帮助保持代码质量。
- 支持 Neovim Emacs VSCode Helix:兼容这些流行编辑器,满足不同开发者的需求。
- 简单配置:易于设置和使用,最小化配置时间,以便您可以专注于开发。
- CLI 工具集成:不仅是一个 LSP,还包括用于代码格式化的命令行工具,方便不同环境。
目录
安装
cargo install neocmakelsp
编辑器支持
neovim 配置
neocmakelsp 的配置位于 nvim-lsp-config
中,因此只需遵循 nvim-lsp-config
来设置它
neocmakelsp 有两种启动方式:stdio
和 Tcp
。 Tcp
用于调试。如果您想帮助我并调试,应该使用 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
helix 配置
Tcp
[[language]]
name = "neocmake"
auto-format = true
language-servers = [{ name = "neocmakelsp" }]
[language-server.neocmakelsp]
command = "nc"
args = ["localhost", "9257"]
Stdio
[[language]]
name = "cmake"
auto-format = true
language-servers = [{ name = "neocmakelsp" }]
[language-server.neocmakelsp]
command = "neocmakelsp"
args = ["--stdio"]
emacs 配置
使用 eglot 与 neocmakelsp
(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))))
功能
- watchfile
- complete
- symbol_provider
- 悬停
- 格式化
- 转到定义
- find_package
- include
- 搜索 CLI
- 获取项目结构
- 它也是一个用于格式化的 CLI 工具
- 代码检查
代码检查 6.0.27 版本
在项目的根目录下放置一个名为 .neocmakelint.toml
的文件。
command_upcase = "ignore" # "lowercase", "upcase"
然后它会检查命令是否全部为大写。
外部cmake-lint
当cmake-lint被安装时,neocmakelsp
会利用它在每次文件保存时提供代码检查和分析。此功能可以在.neocmakelint.toml
文件中启用或禁用
enable_external_cmake_lint = true # true to use external cmake-lint, or false to disable it
如果enable_external_cmake_lint
被打开但cmake-lint
未安装,外部代码检查不会报告任何错误信息。
如果您想在neovim中使用watchfile,设置
capabilities = {
workspace = {
didChangeWatchedFiles = {
dynamicRegistration = true,
relative_pattern_support = true,
},
},
}
它将检查CMakeCache.txt,并获取包是否存在
代码片段支持
capabilities = {
textDocument = {
completion = {
completionItem = {
snippetSupport = true
}
}
}
}
lsp初始化选项
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
}
待办事项
- 未定义函数检查
视觉示例
搜索
符号
完成和符号支持
悬停
转到定义
树
格式化命令行工具
注意:当格式化文件时,请确保您的.editorconfig文件位于工作目录中
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
它将读取.editorconfig文件来格式化文件,只需设置如下
[CMakeLists.txt]
indent_style = space
indent_size = 4
注意
格式只做最小的事情,只做trim
,并通过您设置的缩进来将第一行放置在正确的位置,这意味着
function(A)
set(A
B
C
)
endfunction()
它将变成
function(A)
set(A
B
C
)
endfunction()
它只删除结尾的空格,将每一行的开头\t
替换为
,如果设置了indent_size
为空格,并将第一行格式化到正确的位置。它做得很少,但我认为这已经足够了。
用户反馈
- 我不知道所有功能是否都能在mac和windows上工作,所以如果有人在mac或windows上使用,请帮助我并向此项目发送pr。
- 我想找一个熟悉mac、windows和lsp的comaintainer。
依赖关系
~16-28MB
~415K SLoC