9 个版本
0.0.10 | 2023 年 1 月 14 日 |
---|---|
0.0.9 | 2021 年 10 月 14 日 |
0.0.8 | 2021 年 3 月 22 日 |
0.0.7 | 2021 年 2 月 16 日 |
0.0.2 | 2020 年 9 月 14 日 |
87 在 构建工具 中排名
117 每月下载量
用于 dawproject-rs
76KB
2K SLoC
cargo-limit
🚀 减少噪音的 Cargo
- 错误具有最高优先级
- 它们永远不会出现在警告的中间
- 默认跳过警告,直到错误被修复
- 默认跳过外部 路径依赖 的警告
- 所有消息默认按 倒序 显示
- 以避免额外的滚动
- 消息按文件名分组
- 可以限制消息的数量
- 遇到 第一个错误 后,默认限制剩余的 构建时间
- 文件可以 自动 在你的文本编辑器中打开受影响的行
此工具与 cargo-watch 结合使用特别有用。
最初这个项目只是针对 这个问题 的一个解决方案。
安装
从 crates.io
cargo install cargo-limit
从 git
cargo install --force --git https://github.com/alopatindev/cargo-limit
使用
在你的项目目录中运行以下任意命令
cargo lbench
cargo lbuild
cargo lcheck
cargo lclippy
cargo ldoc
cargo lfix
cargo lrun
cargo lrustc
cargo lrustdoc
cargo ltest
还有 llcheck
,llrun
等。
💡 环境变量 👁️
CARGO_MSG_LIMIT
- 限制编译器消息的数量
0
表示无限制,这是默认值
CARGO_TIME_LIMIT
- 遇到第一个编译错误后,
cargo
执行时间限制(以秒为单位) 1
是默认值0
表示无限制
CARGO_ASC
- 按升序显示编译器消息
false
是默认值
CARGO_FORCE_WARN
- 即使存在错误也显示警告
false
是默认值
CARGO_DEPS_WARN
- 显示外部路径依赖的警告
false
是默认值
CARGO_EDITOR
- 在外部应用程序中打开受影响的文件
- 查看 neovim 集成
- 空(
""
)表示不运行外部应用程序 "_cargo-limit-open-in-nvim"
是默认设置
文本编辑器/IDE 集成
💡 Neovim 插件 👁️
在您的 init.vim
中启用插件。例如,对于 vim-plug
Plug 'alopatindev/cargo-limit', { 'do': 'cargo install cargo-limit nvim-send' }
然后使用以下命令安装
nvim +PlugInstall +UpdateRemotePlugins +qa
可选:按 F2 保存,再次按 F2 跳转到下一个受影响的行
function! SaveAllFilesOrOpenNextLocation()
let l:all_files_are_saved = 1
for i in getbufinfo({'bufmodified': 1})
if i.name != ''
let l:all_files_are_saved = 0
break
endif
endfor
if l:all_files_are_saved
call g:CargoLimitOpenNextLocation()
else
execute 'wa'
endif
endfunction
nmap <F2> :call SaveAllFilesOrOpenNextLocation()<cr>
vmap <F2> <esc>:call SaveAllFilesOrOpenNextLocation()<cr>v
imap <F2> <esc>:call SaveAllFilesOrOpenNextLocation()<cr>i
💡 测试插件! 👁️
- 打开两个终端(或 tmux 窗口等)
- 在它们两个中都在
cd your/project/directory
- 在其中一个中运行
nvim
- 在另一个中运行
cargo lrun
- 如果出现编译错误,
nvim
将打开新或现有的标签页,显示受影响的行和列上的文件 - 修复错误,保存文件,
nvim
将跳转到下一个错误位置 cargo llrun
(cargo llcheck
等)在出现警告时也会打开它们。
⚠️ 已知限制! 👁️
1. 自动跳转只有在以下情况下才会工作
- 当前 模式是正常模式
- 当前缓冲区是空的或者包含一些现有的未修改的(已保存)文件
这是出于设计,为了 不会干扰 活跃的文本编辑或文件导航过程。
2. 在每次文件保存时的自动跳转目前不够精确
- 如果它移动了,它可能跳转到错误的行
- 如果下一行已经打算修改,它可能根本不会跳转
为了精确跳转,请重新运行 cargo ll{check,run,etc.}
。
3. 在运行 nvim
之前:当前目录应该是项目(子)目录
- 这是必需的,以便 cargo-limit 能够 确定 应该控制哪个具体的
nvim
实例 - 只有 第一个具有当前项目(子)目录的
nvim
实例才会被 cargo-limit 控制。
自定义设置
如果您想有其他 Neovim 行为,请在您的 init.vim
中添加一个 自定义打开处理程序
💡 查看示例! 👁️
在缓冲区而不是标签页中打开文件
function! g:CargoLimitOpen(editor_data)
let l:current_file = resolve(expand('%:p'))
if l:current_file != '' && !filereadable(l:current_file)
return
endif
for location in reverse(a:editor_data.files)
let l:path = fnameescape(location.path)
if mode() == 'n' && &l:modified == 0
execute 'edit ' . l:path
call cursor((location.line), (location.column))
else
break
endif
endfor
endfunction
填充快速修复列表
set errorformat =%f:%l:%c:%m
function! g:CargoLimitOpen(editor_data)
let l:winnr = winnr()
cgetexpr []
for file in a:editor_data['files']
caddexpr file['path'] . ':' . file['line'] . ':' . file['column'] . ':' . file['message']
endfor
if empty(a:editor_data['files'])
cclose
else
copen
endif
if l:winnr !=# winnr()
wincmd p
endif
endfunction
💡 其他文本编辑器/IDE 👁️
cargo-limit 可以运行外部应用程序/脚本,并以以下 JSON 格式将受影响的地址提供给 stdin
{
"workspace_root": "/full/path/to/project",
"files": [
{
"path": "/full/path/to/project/file.rs",
"line": 4,
"column": 1,
"message": "unused import: `diagnostic::DiagnosticSpan`",
"level": "warning"
}
]
}
理论上这可以用于任何文本编辑器或 IDE,特别是如果它支持客户端/服务器通信。为此,您需要一个 包装器应用程序/脚本,该脚本解析 files
并将它们提供给文本编辑器或 IDE 客户端。
💡 示例:Gedit! 👁️
- 安装
jq
- 创建
open-in-gedit.sh
#!/bin/bash
jq --raw-output '.files |= unique_by(.path) | .files[] | [
"gedit",
.path,
"+" + (.line | tostring) + ":" + (.column | tostring),
"&"
] | join(" ")' | bash
chmod +x open-in-gedit.sh
- 设置环境变量
CARGO_EDITOR=/path/to/open-in-gedit.sh
- 在您的项目目录中运行
cargo lrun
- 如果在编译过程中出现错误,
open-in-gedit.sh
将在受影响的行和列中打开gedit
文件 cargo llrun
(cargo llcheck
等)在出现警告时也会打开它们。
类似项目
bacon 是一个后台 Rust 代码检查器。
感谢所有贡献者 ❤️
感谢大家的代码贡献和错误报告。特别感谢 Casey Rodarmor 提供的 VimL 代码以快速填充 quickfix 以及 Otavio Salvador 提供的 NixOS 软件包。
想要贡献吗?
请查看 问题 和 看板。您还可以为您的操作系统发行版制作一个软件包。
支持
请通过加密货币支持本项目
🪙 比特币 👁️
1Afgvdz1oPaugFcLgDaAzCYYdHexV6tTvH
🪙 波场币 (TRX, USDT-TRC20, 等.) 👁️
TVxE2HyryNyNReMvw9HRQ3BkYePCszXSrc
🪙 以太坊 (ETH, DAI, 等.) 👁️
0xa879cdb1d7d859e6e425f8e50c4ee49f4b3a7b06
许可证
MIT/Apache-2.0
依赖项
~5–12MB
~150K SLoC