乐于分享
好东西不私藏

又一个国产开源狠货:软著文档一键生成,源码全程不出本机!

又一个国产开源狠货:软著文档一键生成,源码全程不出本机!

申请过软著的朋友都知道,登记的时候要交一份源程序鉴别材料。这份材料的要求还挺细的,前后要各连续 30 页,每页不能少于 50 行,页眉上得标注软件全称和版本号。第一页必须是程序的开头,最后一页必须是程序的结尾。这些格式上一处不对,就可能被退回来补正,来回折腾,时间都耗在这上面了。

手工整理这份材料,就算做得熟练,没几个小时也下不来。网上倒是有一些在线生成工具,但用它们得把整个项目的源码传上去,说实话,很多人不敢这么干。

最近发现一个开源项目 CodeSucker,就是干这件事的。它是个装在电脑上的本地工具,代码不出本机,整理完直接导出一份排好版的 Word 文档,下面详细聊聊。

CodeSucker 是什么

CodeSucker 是一个开源的软著代码抽取工具,桌面应用,支持 macOS 和 Windows,Apache-2.0 协议,完全免费。

用法很直接,把项目文件夹拖进去就行。它会把代码扫一遍,清掉注释和空行,然后按软著申报的格式要求自动截取分页,最后给你导出一份 60 页的 docx 文档。页眉页码这些都是排好的,另外还会附带一份 txt 备查。

这个项目出来的时间还不长,Star 数也不算多。不过我翻了下更新记录,作者基本每隔几天就发一版,修的东西都很细,不是那种丢上去就不管的仓库。

功能详情

项目导入:文件夹拖进去,目录树里勾选文件

导入就是拖文件夹,很简单。拖进去之后它会递归扫描整个项目,然后用真实的目录树展示出来,目录和文件都可以勾选。想偷懒的话也有全选、清空、反选这几个按钮。

文件多的项目,可以用关键字实时筛选,按目录名、文件名或者相对路径都能搜。界面右边还有文件类型的构成统计,可以按代码行或者文件数来看占比。

举个例子,你的项目里混了一堆前端文件,但只想交 Java 代码,那就可以按后缀一键只保留 .java 文件参与导出,这个功能我觉得挺实用。

扫描排除规则可以自己在设置页里维护,默认还会叠加项目里的 .gitignore,所以像 node_modules 这种目录根本不会被扫进来。如果项目文件在外面改过了,点一下重新扫描就行,之前填的配置不会丢。

代码清洗:删注释、删空行,还能自动脱敏

清洗这一步干的事不复杂,删注释、删空行、把 Tab 转成空格,太长的行会自动折断。支持的后缀有 30 多种,常见的语言基本都覆盖了,Java、Python、Go、JS、TS、C、C++、PHP、Vue、SQL 这些都在里面。

删注释这块它做得比较认真,是逐字符去认代码的,不是简单匹配符号。比如代码里写了个 "https://..." 这样的地址,里面的 // 不会被当成注释误删,很多简单工具就在这种地方出错。

另外它还会自动脱敏,代码里写的 API 密钥、密码、内网 IP、手机号这些,都会被替换成占位符再导出。也就是说交出去的材料里不会带这些敏感信息,这一点考虑得挺周到的。

截取分页:自动取前1500行加后1500行,凑成标准60页

软著材料要求前后各 30 页,这个工具是这么处理的:代码超过 3000 行,就自动截取前 1500 行,再加上后 1500 行。每 50 行它会打一个显式的分页符,不靠排版去硬凑页数,所以每页的行数是实打实够的。

第一页固定从入选文件的开头开始,第 60 页固定以最后一个文件的结尾收束。这样正好对上那个要求,首页是程序开头,末页是程序结尾。

分页预览那一步做得像 A4 纸一样,60 页都有缩略图,可以一页页翻着看。前后两段的分界也标出来了,导出之前检查起来很方便。

导出:docx 带页眉页码,另附一份 txt

导出的是标准 docx 文档。页眉会自动写入软件全称加版本号,右上角自动编页码,正文是宋体 10.5pt 加固定行距。这套格式就是照着申报材料的要求来的,导出来基本不用再自己调排版。

除了 docx,还会生成一份 txt,留着备查用。

导出前校验:先帮你过一遍审查

我觉得这一点是它比普通拼接工具强的地方,导出之前,它会自动跑一遍风险校验,查的东西还挺全,有效内容够不够、每页行数够不够、最后一页有没有满三分之二、页眉信息对不对,这些都会查。它还会全文扫 @author 和 Copyright 这类署名信息,如果代码里留的署名和申报的著作权人对不上,会标出来提醒你。

校验跑完会给出三种结论:通过警告,或者退回风险,有问题的文件可以直接点击定位到项目里的源文件,改完重新生成就行。

完全离线:代码不出本机

最后单独说下这点,从扫描代码开始,到清洗、排版、导出,整个过程没有任何网络请求,源代码不会离开你的电脑。它唯一联网的地方是启动的时候查一下 GitHub 上有没有新版本,只拿公开的版本号,不会上传任何项目内容。

对很多公司来说,这一条就决定了能不能用。在线工具再方便,源码传出去了,内部规定那关就过不了。

快速开始

去 GitHub Releases 下载对应系统的安装包就行:

  • • macOS M 系列芯片:CodeSucker-mac-arm64.dmg
  • • macOS Intel:CodeSucker-mac-x64.dmg
  • • Windows x64:CodeSucker-win-x64.exe

每个安装包旁边都有 SHA256 校验文件,下载完可以核对一下。

macOS 用户注意一下,目前的安装包还没做苹果签名和公证,第一次打开可能被系统拦截。遇到这种情况,先去「系统设置 → 隐私与安全性」里选「仍要打开」。如果还是提示已损坏,在终端执行下面两条命令,移除下载隔离标记:

xattr -rd com.apple.quarantine /Applications/CodeSucker.appopen /Applications/CodeSucker.app

装好之后就是五步走:

  1. 1. 导入项目: 把文件夹拖进去
  2. 2. 文件与排序: 勾选要纳入的文件,入口文件可以置顶,顺序可以拖拽调整
  3. 3. 清洗与排版: 填软件全称和版本号,开关清洗规则,有实时前后对比
  4. 4. 分页预览: A4 仿真翻页检查
  5. 5. 校验与导出: 看合规报告,没问题就生成 docx 和 txt

想从源码跑的话也不复杂:

git clone https://github.com/fanbuz/codesucker.gitcd codesuckernpm installnpm run dev

安装完成后,页面非常简单,就是一个项目导入:

适合什么人用

个人开发者给自己的软件申请软著,这是最常见的场景,自己整理一次材料的时间,拿来写代码都能写半天了。

公司里批量申报的更适合,有些公司一年要申报好几项软著,每份材料的格式要求都一样,这种重复劳动交给工具走流程,能省不少事。

还有一种情况,代码涉及商业项目,不能上传到任何在线服务,这个工具全程离线,刚好满足这个前提。

最后聊聊

这个工具解决的问题很实用,软著材料的格式要求是死的,手工整理纯粹是体力活,整理完还容易被退回来返工。CodeSucker 把这套规则直接内置成了流程,导出的文档按它的说法可以当申报材料的准备稿。当然,最终还是要以登记机构的要求为准,提交之前最好再对照最新的规定核一遍。

全离线是我最看重的地方,市面上不是没同类工具,但大多是在线的,把整套源码交给一个陌生网站,这个风险多数人不愿意承担。本地跑就没这个顾虑了,而且它连注释剥离、敏感信息脱敏这种细节都做了,能看出来是认真研究过申报材料那些坑的,不是简单把代码拼起来凑页数。

项目现在还很年轻,看作者的规划,后面还有 Linux 安装包、命令行版本、用户手册模板生成这些东西要做。如果你最近正好要申报软著,可以装一个试试,反正免费。

开源地址

https://github.com/fanbuz/codesucker

点击下方卡片,关注极客之家

这个公众号长期分享实用开源项目。如果你不想逐篇翻阅历史文章,可以直接关注微信公众号“极客之家”,通过后台留言与我们互动交流。