【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

RSLint:使用 Rust 开发的 JS Linter,可以解析错误代码

  • 2020-10-25
  • 本文字数:1939 字

    阅读完需:约 6 分钟

RSLint:使用Rust开发的JS Linter,可以解析错误代码

Riccardo D’Ambrosio 最近发布了 RSLint,一个完全用 Rust 开发的 JavaScript linter。RSLint 力求尽可能快、可定制和易于使用。RSLint 仍处于开发的早期阶段,主要特色是与 Visual Studio Code 的集成。


RSLint的作者是这样描述他的动机的:


这是一个成熟的 JavaScript linter,只是用 Rust 从头开始开发。我觉得现有的 linter 功能太有限,速度太慢,于是决定尝试自己开发一个,并带有一些自己的想法:

速度:文件加载、文件检查和规则运行都是并行的;

rustc 风格且友好的错误信息(包括标签、注释);

错误恢复:不管多离谱的源代码可以检查;

……

更强大的指令。


与其他 linter 一样,RSLint 努力帮助开发人员实施良好的实践,并标记编程错误、bug、风格错误和可疑的代码。linter 通常在代码编辑器中用于在编辑时提供实时反馈。使用了大量 lint 规则的大型代码库的用户可以从更快的实时反馈中获得开发速度方面的好处。


类似地,当 lint 规则提示错误时,特别是当规则很复杂或引用了其他几个语法实体时,友好的解释性错误消息可以帮助开发人员增长经验。


D’Ambrosio 强调了 RSLint 的错误恢复能力,据称已知的 linter 不具备这个能力:


错误恢复是指解析器能够接受不正确的源代码,并且仍然能够解析出基本正确的 AST(抽象语法树)。大多数 linter 根本不会这么做,例如,espree和 swc_ecmascript(分别是ESLintdeno_lint的解析器)不会尝试进行错误恢复。当解析器遇到错误时,它们返回一个 Err 结果并停止解析,不生成 AST……这意味着 linter 不可能检查错误的代码,如果能在 IDE 中实现这个功能,将是很惊人的。


RSLint 可以解析这样的代码:


if true {  /* */} else {  /* */}
复制代码


然后检查它:


error[SyntaxError]: Expected token `L_PAREN` but instead found `TRUE_KW`  ┌─ tests\main.js:1:41 │ if true {  │    ^^^^ Unexpectederror[SyntaxError]: Expected token `R_PAREN` but instead found `L_CURLY`  ┌─ tests\main.js:1:91 │ if true {  │         ^ Unexpectederror[no-constant-condition]: Unexpected constant condition  ┌─ tests\main.js:1:41 │   if true {  │      ^^^^ this condition is always truthy...2 │     /* */3 │   } else {  │ ┌────────'4 │ │   /* */5 │ │ }  │ └─' ...which makes this unreachable
复制代码


D’Ambrosio 回顾了该项目的初期想法:


但是请注意,rslint_parser 仍处于早期开发阶段,并且错误恢复有时会有很多 bug,但是在将来会变得更好。


RSLint 速度的提升不仅是因为使用 Rust 开发(编译成机器码),也因为它使用了并行执行和特定的数据结构(不是传统的 AST)。RSLint 使用了为Rust分析器项目开发的rowan库。rowan 生成的语法树是不可变的,而不是克隆成本很高的可变 AST。


RSLint 提供了一些指令,在检查代码时可以忽略一些文件,或者在某些情况下(rsLint-ignore)忽略特定的 lint 规则。RSLint 目前实现了大约 25 条规则(例如,no-async-promise-executorno-await-in-loop或者no-dupe-keys),未来还将计划实现更多规则。开发人员可以编写自定义规则。不过,文档中提到,自定义规则必须用 Rust 宏来编写——这可能给 JavaScript 社区贡献内容造成了障碍。


RSLint 是用其他语言开发可编译为原生代码的 JavaScript 工具这一新兴趋势的一部分。InfoQ 之前曾报道过用 Go 语言开发的 JavaScript 打包器esbuild。swc 是一个基于 Rust 的 JavaScript/TypeScript 编译器。缩短 JavaScript 工具的反馈周期、利用开发者机器强大的多核功能以及对原始性能的追求推动了这一趋势。


然而,使用 compile-to-native 编程语言来编写代码并不是实现高吞吐量的唯一方法。通过减少自动化任务的作用范围,也可以提升工具的速度。在去年的一些基准测试中,JavaScript/TypeScript 编译器 Sucrase 击败了基于 Rust 的 swc 编译器。然而,Sucrase 只针对开发构建,并做了一些限制性的假设(例如,不支持 Node 6 或 Internet Explorer)。


JavaScript 社区的一些成员在 Reddit 上表达了对 RSLint 的乐观态度。一个用户提到:


这太棒了!虽然还处于早期阶段,但它很出色,我们期待看到这个项目更多的进展!


另一篇文章列举了要让社区采用需要满足的一些特性:


看起来不错。我希望能加快代码检查的速度。为了能够在工作中使用,它要非常成熟而且功能完善,并在一定程度上保证项目的维护。


RSLint 目前正处于开发的早期阶段。RSLint 路线图包括基准测试、作用域分析、自动修复、JSX 和 TypeScript 支持、JavaScript 插件,等等。已知的问题文档可以在网上找到。


RSLint 采用了 MIT 开源许可。开发者可以通过该项目的GitHub存储库参与贡献或拉取请求。


原文链接


RSLint, a New, Fast JavaScript Linter Written in Rust


2020-10-25 12:002178

评论

发布
暂无评论
发现更多内容

Android屏幕适配很难嘛其实也就那么回事,含面试题+答案

android 程序员 移动开发

android工程师面试题,大厂面试题汇总

android 程序员 移动开发

android开发入门与实战网盘,安卓面试宝典

android 程序员 移动开发

2021最新Android常用开源库总结,retrofit源码

android 程序员 移动开发

2021高级Android笔试总结,帮你解决95%以上的问题

android 程序员 移动开发

androidsdk下载安装,经验分享

android 程序员 移动开发

阿里云新基建丛书新书重磅发布

Lily

androidstudio连接手机,四面阿里Android开发岗

android 程序员 移动开发

android基础知识总结,面试复盘

android 程序员 移动开发

这4个行业用进销存管理系统是肯定不会错的

低代码小观

企业 企业管理 系统 管理系统 进销存管理系统

2021最新中高级Android面试题目,2021必看

android 程序员 移动开发

Android-Camera内存问题剖析,通用流行框架大全

android 程序员 移动开发

android开发入门与实战网盘,大佬分享开发经验

android 程序员 移动开发

Android大厂高级面试题灵魂100问,金九银十

android 程序员 移动开发

android开发入门与实战网盘,安卓开发中遇到最难的问题

android 程序员 移动开发

论文解读:ACL2021 NER | 基于模板的BART命名实体识别

华为云开发者联盟

nlp 模板 实体识别 BART命名 NER

android5.0下载,阿里Android研发岗二面

android 程序员 移动开发

DeFi质押挖矿系统DAPP开发内容(源码)

android开发入门与实战网盘,值得一读

android 程序员 移动开发

掘金万亿新IT服务大市场,联想智慧服务核心能力持续跃升

科技大数据

714页PDF的鸿蒙学习笔记,Android开发必须会的技能

android 程序员 移动开发

android学习心得,并发编程挑战

android 程序员 移动开发

4面阿里拿到P7Offer,Android开发指南

android 程序员 移动开发

android实战视频教程,高并发系统基础篇

android 程序员 移动开发

android嵌入式开发板系统盘,看完就能找到工作

android 程序员 移动开发

android开发实例论文,详解Android架构进阶面试题

android 程序员 移动开发

androidframework开发教程,安卓面试题库

android 程序员 移动开发

android实战的书籍,超通俗解析

android 程序员 移动开发

android常用面试题,顺利通过阿里Android岗面试

android 程序员 移动开发

云图说|Git云上仓库哪家好?一张图了解华为云代码托管服务

华为云开发者联盟

代码 华为云 codehub 上云 代码云托管

android开发实战经典PDF,研发4面真题解析(Android岗)

android 程序员 移动开发

RSLint:使用Rust开发的JS Linter,可以解析错误代码_语言 & 开发_Bruno Couriol_InfoQ精选文章