之前做了一个使用 ChatGPT 来处理纯文本的工具 PTPT ( https://v2ex.com/t/927694 ),最近新添加了一个实用的功能:lint 。传统的 linter 一般只能在特定的语言上使用,而 ChatGPT 能自动适应各种语言,因此萌生了这个想法。
在实现的过程中,进行了一些思考,也提出了一些解决方法,也一并分享出来,欢迎大家交流。

存在的问题
行号问题
给 ChatGPT 提供一整个代码文件之后,line:char 会出现丢失的情况。猜想是 tokenize 的时候丢失了。如果要解决行号,在每一行开头手动补一个行号即可。char 的问题可能无法解决,但是作为 lint 来说没有 char 也还行。
输出更有用的建议
目前经常出现一些没有用的建议或者是对语言的特性不了解、对上下文不了解等,导致模型提出一些无效的建议,需要再加人工去筛选。 猜想目前使用的是 GPT3.5 的模型,在 cursor 中,使用 GPT4 的模型,在一些比较明显的问题上,能够检测出来并给出比较有用的建议。
经常性输出 undefined/undeclared/unused 等建议
GPT 是个单向的模型,相比于 BERT ,对上下文理解能力略差。这是 GPT 先天的不足,经过 prompt 的调教暂时还无法解决。
安装
go install github.com/leslieleung/ptpt@latest
或从 Release 下载
使用方法
> ptpt lint <file>
> ptpt lint -l zh <file> # 中文建议
项目地址: https://github.com/LeslieLeung/PTPT, 欢迎 star