#clipboard #pretty-print #llm #text #cli-tool #language-model #config-file

bin+lib psource

CLI 工具,将源代码格式化输出到标准输出或直接复制到剪贴板

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 开发工具

Download history 7/week @ 2024-07-01 50/week @ 2024-07-29

每月 57 次下载

MIT 许可证

21KB
253

psource

print source code

CLI 工具,将源代码格式化输出到标准输出或直接复制到剪贴板。

该工具创建的目的是为大型语言模型 (LLM) 快速提供源代码上下文。

crates.io version AUR version

build and test docs.rs


⚠️ 此工具仍在早期开发阶段,预计会有破坏性更改。

⏳️ 请参阅 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