7 个版本

0.3.1 2021 年 10 月 6 日
0.3.0 2021 年 9 月 16 日
0.2.1 2020 年 10 月 21 日
0.1.2 2020 年 10 月 8 日

#181 in 配置

每月 29 次下载

MIT 许可协议

1MB
29K SLoC

RSLint

A fast, customizable, and easy to use JavaScript and TypeScript linter

build status Documentation Status

指南 | 贡献 | 网站 | Linter 规则

⚠️ RSLint 处于早期开发阶段,不应在生产环境中使用,可能会有错误!🐛

安装

通过 Cargo

$ cargo install rslint_cli
$ rslint --help

预构建二进制文件

我们为每个版本发布 Windows、Linux 和 MacOS 的预构建二进制文件,您可以在这里找到。

从源代码构建

$ git clone https://github.com/rslint/rslint.git
$ cd rslint
$ cargo run --release -- --help

用法

要使用此代码检查器,只需将需要检查的文件传递给 CLI 即可

$ echo "let a = foo.hasOwnProperty('bar');" > foo.js
$ rslint ./foo.js
error[no-prototype-builtins]: do not access the object property `hasOwnProperty` directly from `foo`
  ┌─ ./foo.js:1:9
  
1 │ let a = foo.hasOwnProperty('bar');
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  
help: get the function from the prototype of `Object` and call it
  
1 │ let a = Object.prototype.hasOwnProperty.call(foo, 'bar');
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  
   note: the method may be shadowed and cause random bugs and denial of service vulnerabilities

Outcome: 1 fail, 0 warn, 0 success

help: for more information about the errors try the explain command: `rslint explain <rules>`

RSLint CLI 无需配置文件即可运行,并会自动选择推荐的非样式规则。

功能

速度。RSLint 利用并行性利用多个线程来加速代码检查,并且是编译成原生代码。

内存占用低。RSLint 的语法树利用了内部化和其他方法来显著减少内存使用,同时进行代码检查。

合理的默认值。如果未指定配置文件,CLI 假设推荐的非样式规则,并忽略如 node_modules 这样的目录。

错误恢复。RSLint 的自定义解析器可以从语法错误中恢复,即使在语句的某些部分缺失的情况下也能生成可用的语法树。允许在键入时进行准确的即时代码检查。

无混淆选项。解析器的 ECMAScript 版本无需配置,解析器假定使用最新语法,并假定 *.js 为脚本和 *.mjs 为模块。

原生TypeScript支持。以*.ts为后缀的文件会自动进行代码检查,无需对不同解析器或规则进行配置。

规则组。规则根据作用域分组,便于配置、理解和项目文件结构的清洁。

易于理解的错误。代码检查器产生的每个错误都会以清晰易懂的方式指出源代码中的问题区域,并包含标签、注释和建议,说明如何修复每个问题。同时,还提供了一个类似于ESLint格式化器的替代格式化工具,可以使用-F标志或配置中的formatter键来使用。

强类型规则配置。RSLint提供了一个JSON模式,并将其链接到.json,以在Visual Studio Code中为配置文件提供自动完成功能。JSON模式详细描述了规则配置选项,便于配置。此外,RSLint的语言服务器协议实现也为rslintrc.toml文件提供了自动完成功能。

强大的指令。指令(通过注释传递的命令)使用基于内部JavaScript词法分析器的解析器,允许我们提供

  • 语言服务器协议中指令的自动完成,如// rslint-ignore no-empty
  • 对指令的支持悬停,以提供有关命令的详细信息。
  • 对错误指令的可理解性错误。

独立。RSLint编译成一个独立的二进制文件,无需Node、v8或其他运行时。RSLint可以在任何可以被LLVM定位的平台运行。

强大的自动修复。提供了一些错误的自动修复功能,可以通过--fix标志或在IDE中的操作应用。即使文件包含语法错误,也可以通过--dirty标志应用修复。

内置文档。RSLint在其二进制文件中包含规则文档,允许通过explain子命令在终端中显示文档,例如:rslint explain no-empty, for-direction

内部功能

整洁清晰的项目布局。RSLint项目在一个单仓库中布局,每个crate有明确的功能,每个crate都可以在其他Rust项目中使用,并且每个crate都有良好的文档和API。

易于声明规则。使用declare_lint!宏声明规则。该宏接受文档注释、结构名称、组名称、规则代码和配置选项。宏生成结构定义和Rule实现,并将文档注释处理为结构体的文档以及每个规则上docs()方法上的静态字符串。所有内容都简洁且集中在一个地方。

全保真语法树。与ESTree不同,RSLint的自定义语法树保留了

  • 所有空白字符
  • 所有注释
  • 所有令牌

允许它在不需要依赖于如ESLint的SourceCode等单独结构的情况下进行强大的分析。

未类型化语法树。RSLint的语法树在底层由未类型化的节点和未类型化的标记组成,这允许对树进行强大而高效的遍历,例如:if_stmt.cons()?.child_with_ast::<SwitchStmt>()

简单API。RSLint使用易于使用的构建器来处理其复杂的错误,以及用于自动修复的构建器。所有这些都被安排好,以最大限度地减少实现规则所需的工作量。

性能

基准测试可以在benchmarks目录中找到。您可以使用以下命令在您的机器上运行它们:deno run -A --quiet benchmarks/bench.ts。它们也在CI上运行,如果您点击最新的GitHub Actions运行,您可以看到最新的结果。

项目 RSLint eslint
engine262 (~42k LOC JavaScript) 414ms 46.9s
Oak (~11k LOC TypeScript) 53ms 399ms

(这些基准测试是在AMD Ryzen 7 2700x,8核3.9MHz上运行的)

许可证

本项目采用MIT许可证

依赖项

~9–18MB
~231K SLoC