AI 加持的代码编写实战:快速实现 Nginx 配置格式化工具( 二 )


然而,生态下,并没有类似或者生态的格式化工具库,所以我们需要手动实现一个格式化工具库,或者让社区的或者代码能够在我们的程序中运行,内化为我们程序的一部分 。
相比较前者,后者的代码实现更少一些,实现速度更快一些,所以我们就用这个方式来玩吧 。
实战:询问 GPT 如何实现基础功能
在前文中,我们提到了开源社区现在的各种实现,以及我们计划使用的方案 。在实际的时候,我们可以借助来完成逻辑 。
为了演示最低成本的实现,这里我们虽然能够使用 GPT-4,但是考虑到多数人还是有使用限制,我们用 GPT 3.5 来实现我们所需要的东西 。
调整版的格式化程序实现
虽然版的格式化程序有用户吐槽,但其实,只要我们修正其中的“ cases”,程序还是能够使用的 。完整代码在项目中的 /nginx-///.js,两百行出头 。整体结构如下:
/*** - Soulteary Modify the JavaScript version for golang execution, under [Apache-2.0 license], 18/04/2023:*- simplify the program, fix bugs, improve running speed, and allow running in golang*- https://github.com/soulteary/nginx-formatter** History:* - Yosef Ported the JavaScript beautifier under [Apache-2.0 license], 24/08/2016*- https://github.com/vasilevich/nginxbeautifier* - Slomkowski Created a beautifier for nginx config files with Python under [Apache-2.0 license], 24/06/2016*- https://github.com/1connect/nginx-config-formatter (https://github.com/slomkowski/nginx-config-formatter)*//*** Grabs text in between two seperators seperator1 thetextIwant seperator2* @param {string} input String to seperate* @param {string} seperator1 The first seperator to use* @param {string} seperator2 The second seperator to use* @return {string}*/function extractTextBySeperator(input, seperator1, seperator2) {...}/*** Grabs text in between two seperators seperator1 thetextIwant seperator2* @param {string} input String to seperate* @param {string} seperator1 The first seperator to use* @param {string} seperator2 The second seperator to use* @return {object}*/function extractAllPossibleText(input, seperator1, seperator2) {...}/*** @param {string} single_line the whole nginx config* @return {string} stripped out string without multi spaces*/function strip_line(single_line) {...}/*** @param {string} configContents the whole nginx config*/function clean_lines(configContents) {...}function join_opening_bracket(lines) {...}function fold_empty_brackets(lines) {...}function add_empty_line_after_nginx_directives(lines) {...}function fixDollarVar(lines) {...}var options = { INDENTATION: "\t" };function perform_indentation(lines) {...}function FormatNginxConf(text, indentSize = 2, indentChar = " ") {...}
在实现的过程中,你有任何懒得动手的地方,都可以交给,比如张贴之前的老代码,询问它这段代码的含义:
尤其是对于陈旧的老代码(特别是别人写的),我们可以通过来进行含义解读,并且要求它来一些代码的单元测试 。这样可以极大的缩短我们在阅读代码上花费的时间 。

AI 加持的代码编写实战:快速实现 Nginx 配置格式化工具

文章插图
当然,很多时候,它生成的内容是有问题的,需要我们进行仔细甄别或进行额外的测试验证 。但即使如此,也会比我们从零到一自己搞来的快 。
让能够在中运行
前文提到,因为中没有类似或者类似的工具库,所以最快完成我们需求的方式,除了切换技术栈之外,就是将这些不同语言的程序,在中直接运行 。
这里我们询问下 :“如何在中运行代码” 。
能够看到,在的回答中,推荐我们使用 goja,并给出了最简单的实现 。这个项目确实是一个有趣的项目,使用纯 Go 实现的 ECMA 5.1 解析引擎,能让我们在中直接运行代码 。