我从头开始构建了自己的 VS Code 语法高亮器,以下是我学到的东西。
Redshift 语法高亮器
背景/目的
所以...!
我是 AWS Redshift SQL 环境中的数据分析师。
就上下文而言,现场分析师倾向于使用的环境按受欢迎程度排序为: 1
TSQL/SQL Server
2 Oracle
3 PostgreSQL
4 电子表格/Google Sheet
5 废纸
6 Crystal Reports
7 Lotus Notes
...... 40 使用算盘 41 洞穴绘画 42 Redshift AWS
因此可以说,在互联网上很难找到 Redshift 特定的技术。
当我在 VS Code 扩展商店中搜索 Redshift 时,什么也没有!!!!
嗯,这是一个小谎言,有一个,但这也是一个谎言,它只是因为 SEO 而被标记为 Redshift......
现在这对我来说已经不是什么大问题了。
Redshift 与 PostgreSQL 和 Oracle 非常相似,因此我一直在使用基于 Oracle 的扩展。
然而,我一直在使用的 Oracle Extension 随着时间的推移变得越来越大并且错误越来越多。
该扩展程序还可以做 60 件不同的事情,而我只用了其中 2 件。
因此,似乎我需要的只是 SQL 语法高亮和一个代码片段库,我想我可以尝试制作自己的语法高亮器扩展,这样我就可以摆脱 bloaty-mcbloat 的困扰。
(我只会使用内部全局代码片段文件)
以下是我一路走来学到的经验教训。
第一课:没有人建造我可以偷的东西。
所以我完全认为我可以通过 git-bash 来获得成功。
我百分之百地认为我可以使用 Oracle Extension 并取出我需要的部分,并且可以在晚餐前完成。
我大错特错。
有两种方法可以实现语法高亮。
方法一要求你使用 REGEX 表达式在 JSON 包中声明要高亮的内容。VSCode 文档中已经提到了这一点。
方法二只需要下载 TextMate 语言包,无需其他操作。就这样,大功告成。无需任何开发工作。
我看过的每个扩展都使用了 TextMate 语言包方法。我能找到 Redshift 的语言包吗?找不到。我能修改现有的语言包吗?目前我还没找到。
所以这是第一次精神崩溃,git-hub 上的每个人都选择了简单的方法,因为他们支持的语言足够主流,可以有一个易于获取的语言包。
我感觉我正在为我的摩托罗拉手机寻找一个手机壳,但我所能找到的只有三星和苹果手机壳。
所以我不得不选择第一种方案,自己开发一些东西。
第 2 课:它并不像我想象的那样自由。
所以语法高亮不仅仅是高亮所有非自由文本。你可以这样做,但我也可以把所有变量都命名为 VAR,虽然能完成任务,但效率不高。
良好的语法高亮可以使函数的颜色与变量的颜色不同,注释的颜色与字符串的颜色不同。
通过不同的突出显示区域,您的眼睛可以捕捉到您正在寻找的代码位。
我知道对于 SQL,我想突出显示以下内容:
命令,例如“select”和“where”
数据类型,例如“varchar”
单引号和双引号字符串
单注释和块注释
函数,例如“row_number”和“upper”
特殊词,例如 distkey
特殊字符,例如“<>”
数字
活动词,例如“and”、“or”、“else”
当我写出我想要从 AWS 规范中突出显示的每个对象时,它已经是一个很长的列表,大约有 300 个。
现在我只是假设我会按照我想要的方式对它们进行分组,然后应用规则。
我又错了……
由于 Visual Studio Code 的主题设置方式多种多样,因此我们预先设置了相应的组供您选择。这使得主题设计人员的工作变得轻松,他们只需指定某个组的颜色即可。无论您使用的是 87547868545874 种编程语言中的哪一种,只要与预定义的组匹配,它就会随着主题的变化而变化。
这意味着我必须将我计划好的组塞进我可用的组中。
这并不像我想象的那么糟糕,我最终使用了十个组,结果接近我最初想要的效果,只是不是我预期的那样。
第 3 课:它并不像我想象的那么难。
我不是开发人员,我懂基本的 HTML/CSS 和 SQL,而且我已经把这些技能磨练得炉火纯青了。我就像那些木工,能做出超赞的信箱,却不会让我做椅子或栅栏。
我不懂 Javascript、TypeScript 之类的东西,也不知道这些东西是怎么工作的。为了做一个 VS Code 扩展,我看了 YouTube 视频,拉了 git,每次都哭上整整五分钟。你知道含着泪水读 ReadMe.md 文件有多难吗?
但我只是继续笨手笨脚地前进,发现以我的技术水平,这很容易做到。
下一分钟,我正在编译扩展,它现在在我的工作机器上运行。
Git Hub 仓库
Visual Studio Code 扩展支持在 Redshift (AWS) SQL 环境中工作
Redshift 语法高亮器
简而言之,Visual Studio 代码中没有针对 Redshift AWS SQL 的语法突出显示,因此我制作了自己的它,它并不华丽,也永远不会华丽。
特征
语法高亮显示:
- SQL 命令,如 Select、Abort、Begin...
- SQL 关键字如 Date_trunc、Distkey、lower...
- 单行注释
- 双行注释
- 单引号字符串
- 双引号字符串
- SQL 数据类型,例如 BIGINT、BOOL、VARCHAR
- SQL 常量,例如 AND、BETWEEN、ILIKE
- 支持数字高亮
- 特殊字符,例如 =、<>、=!
技术信息
语法突出显示是通过对应文本元素来完成的。
关键词
与keyword.control匹配的模式:
中止、修改、分析、开始、调用、取消、关闭、评论、提交、复制、创建、释放、声明、删除、丢弃、结束、执行、解释、获取、授予、插入、锁定、准备、重置、撤销、回滚、选择、设置、显示、开始、截断、卸载、更新、真空
与关键字.other匹配的模式:
ABS、ACOS、ADD_MONTHS、APPROXIMATE、PERCENTILE_DISC、ASIN、ATAN、ATAN2、AVG BIT_AND、BIT_OR、BIT-WISE……
我是谁?
链接浏览:https://dev.to/alexantra/i-built-my-own-vs-code-syntax-highlighter-from-scratch-and-here-s-what-i-learned-1h98