11 个不稳定版本 (3 个破坏性更新)
0.4.0 | 2024年1月26日 |
---|---|
0.3.1 | 2024年1月16日 |
0.2.0 | 2024年1月1日 |
0.1.7 | 2023年12月28日 |
#921 in 开发工具
每月 57 次下载
21KB
253 行
⚠️ 此工具仍在早期开发阶段,预计会有破坏性更改。
⏳️ 请参阅 CHANGELOG.md 了解最新更改和 路线图。
安装
使用 Cargo 安装
请确保已安装 Cargo 并配置 PATH。请参阅 《Rust 编程语言》- 使用 cargo install 安装二进制文件。
从 crates.io 安装
cargo install psource
从 GitHub 源安装
cargo install --git https://github.com/frederikstroem/psource.git
从本地源安装
cargo install --path .
Arch Linux
通过 Arch 用户仓库 (AUR) 安装
使用您喜欢的 AUR 辅助工具安装,例如 paru
paru -S psource-git
配置
可以使用配置文件配置此工具。配置文件是一个简单的 TOML 文件,具有以下结构
# Copy the source code to the clipboard instead of printing it to stdout (default: false)
clipboard_is_default_output_target = false
psource 将在以下位置查找配置文件 $HOME/.config/psource/config.toml
。
入门指南
获取帮助
$ psource --help
CLI tool to pretty print source code to stdout or directly to the clipboard. Skips binary files.
Usage: psource [OPTIONS] <INPUT>...
Arguments:
<INPUT>... Input files and directories
Options:
-s, --stdout Print the source code to stdout
-c, --copy Copy the source code to the clipboard
-a, --ancestry <ANCESTRY> Display the file's ancestry in the output path by including the specified number of parent directories relative to the current working directory, or 0 to omit the ancestry [default: 1]
-g, --git-ancestry Display the file's ancestry in the output path, including parent directories from the current working directory within a Git repository to its root, unlike the fixed number specified by the 'ancestry' option
-e, --exclude <EXCLUDE> Exclude files and directories matching the specified glob pattern
-h, --help Print help
-V, --version Print version
示例:向 Rust 项目添加 to_uppercase 工具函数
我们创建了一个简单的 Rust 项目,包含一个 lib.rs
文件和一个 main.rs
文件。
main.rs
mod lib;
fn main() {
let message = lib::greet("Rustacean");
println!("{}", message);
}
lib.rs
pub fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}
我们希望在新的 utils.rs
文件中添加一个 to_uppercase
函数,并在 lib.rs
中使用它。我们可以使用 psource
工具快速将相关代码复制到剪贴板。
使用 cd
进入项目根目录并运行
psource -c src
此命令将以下内容放置到您的剪贴板中
⚫ /simple_rust_program/src/main.rs
mod lib;
fn main() {
let message = lib::greet("Rustacean");
println!("{}", message);
}
⚫ /simple_rust_program/src/lib.rs
pub fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}
现在您可以使用以下内容提示 LLM
Please add a to_uppercase function to a new utils.rs file. Modify the greet function in lib.rs to use the to_uppercase function.
Source code:
⚫ /simple_rust_program/src/main.rs
mod lib;
fn main() {
let message = lib::greet("Rustacean");
println!("{}", message);
}
⚫ /simple_rust_program/src/lib.rs
pub fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}
LLM 应该能够帮助您完成任务。
注意:这是一个非常简单的示例,但可以很好地扩展到大型项目。限制很大程度上取决于 LLM 的能力和其上下文窗口。我已经在使用 OpenAI 的 GPT-4 Turbo 时取得了很大的成功,该模型与使用 API 的替代前端一起使用,我可以推荐 ChatGPT-web。GPT-4 Turbo 的上下文窗口为 128,000 个令牌,我还发现将样本温度设置为 ±0.6 对代码开发任务非常有效。
提示:文件树结构有时可以帮助 LLM 更好地理解代码的上下文。对于此类任务,我建议使用 eza 与 --tree
选项。要将它管道到剪贴板,可以使用 xsel 等工具,例如 eza --tree | xsel -b
。
已知问题
加快复制到剪贴板的过程
由于软件供应链中的错误,-c
选项需要 psource 等待一段时间后才退出,否则某些系统上的剪贴板将不会更新(在运行 X11 的 KDE Plasma 上发现)。[1][2] 为了加快进程,可以将 psource 的 stdout 管道到剪贴板工具,例如 xsel,例如 psource src | xsel -b
。
排除选项不起作用
排除选项目前有一些粗糙的边缘,并计划进行改进。
如果排除模式 *
不按预期工作,请尝试引用模式,例如 psource Cargo.toml README.md -e 'Cargo*'
如果您需要排除子目录中的文件,请考虑使用类似于 psource src -'*/main.rs'
的 glob 模式来定位任何直接子目录中的 main.rs
,或使用 psource src -'**/main.rs'
来匹配所有级别的子目录中的所有 main.rs
文件。
依赖关系
~12–24MB
~439K SLoC