背景

本人是个一线码农,专科毕业,且非计算机专业毕业,后端辣鸡程序猿,公司项目需要一个前端解析 MySQL 语句的功能,但是前端不熟悉 MySQL,所以使用了正则去匹配,简单的语句确实没有问题,但是复杂的语句,正则就很吃力了。所以,前端不行就后端凑,因为功能是前端交互,所以,我 GitHub 找到了一个 150 star 的前端库(其实这么多里面只有这个库满足我们的大部分要求)。

代码贡献之路

本来这个在前期确实没毛病,很多复杂的 SQL 都能解析,但是当使用了到了SQL时间单位的时候,项目无法解析,最开是的思路其实还是通过更换 npm 包的方式,看看有没有其他合适的包可以解决这个问题,毕竟有轮子,谁TM闲的去造轮子,试了好几个 npm 包的时候,都是解析错误,说实在的,我当时崩溃了(T_T),于是我尝试去看一下代码,希望我能修改代码,添加我需要的功能,然而,我发现我干不动,打开源码,发现只有三个文件。

两个 js 和一个 jison,眨眼一看,以为是 json,当我点开 jison 文件的时候我傻眼了,别说百度,google 关于 jison 的资料也不多,后面通过看了几篇文章,终于知道,原来 jison 是编译原理前端库,好了,我一 "九流" 程序猿也没有学过这玩意啊,但是工作确实需要,没办法,然后开始了自己的作死之路了。

学习编译原理

为了完成工作,就算是刀山也要上啊,最开始,被各种概念给整懵逼了:

  • 词法分析
  • 语法分析
  • 抽象语法树
  • 静态单赋值
  • ....

然后简单的入门了一下编译原理,便开始了魔改之路了,我不敢说我现在真的会编译原理,但是通过学习编译原理,发现作为一个 "九流" 程序猿,要走的路还很长。

通过不断的试错,终于看懂了源码,然后结合了MySQL的语法,完善了功能,并按照作者的要求,写了测试代码,提了 PR,说实在的,我也没有想到我的代码也能合到 master,毕竟第一次提 PR。

本次共提了两个 PR,一个是 bug,一个是 feature,仅此记录一下我的第一次代码贡献之路。

总结

通过这次经历,收获了太多第一次了,有些许的兴奋,激动。
收获经验:

  • 不管你是 "三流",还是 "九流" 程序猿,不用妄自菲薄,做自己感兴趣的事情。
  • 勇于尝试,很多人都说想要贡献自己的代码,却一直说不知道怎么贡献代码,其实,凡事都有第一步,勇敢的踏出这一步吧。
  • 通过这次经历,发现需要学习的东西还有很多很多,共勉吧。

最后,感谢一下作者的 JavaScriptor/js-sql-parser 的库,让我保住了饭碗(T_T)。。。。


潇尘渊
77 声望19 粉丝

会点php,java,go的菜鸡程序猿