5 个版本
0.1.4 | 2021 年 9 月 16 日 |
---|---|
0.1.3 | 2020 年 10 月 21 日 |
0.1.2 | 2020 年 10 月 8 日 |
0.1.1 | 2020 年 10 月 3 日 |
0.1.0 | 2020 年 10 月 2 日 |
#280 在 配置
312 每月下载量
用于 8 个包 (2 个直接)
21KB
539 行
RSLint
一个快速、可自定义且易于使用的 JavaScript 和 TypeScript 代码检查器
指南 | 贡献 | 网站 | 代码检查规则
⚠️ 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 的语法树利用了 intern 和其他方法在代码检查时大幅减少内存使用。
合理的默认值。CLI 假设推荐的非风格规则,如果没有指定配置文件,并且会忽略例如 node_modules
这样的目录。
错误恢复。RSLint 的自定义解析器可以从语法错误中恢复,并在语句的部分缺失时生成可用的语法树。允许在键入时进行准确的即时代码检查。
无混淆的选项。解析器的 ECMAScript 版本无需配置,解析器假设最新的语法,并假设 *.js
为脚本,*.mjs
为模块。
原生 TypeScript 支持。*.ts
文件会自动进行检查,无需为不同的解析器或规则进行配置。
规则组。规则根据范围分组,以便于配置、理解和项目文件结构的整洁。
易于理解的错误。代码检查器发出的每个错误都会以易懂和整洁的方式指出源代码中的区域,并包含标签、注释和建议,解释如何修复每个问题。还可以使用 -F
标志或配置中的 formatter
键使用类似 ESLint 的格式化器。
强类型规则配置。RSLint 提供了一个 JSON 模式,并将其链接到 rslintrc.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 项目在单一代码库中布局,每个代码库都有一个独特的任务,每个代码库都可以在 Rust 项目中使用,并且每个代码库都有良好的文档和 API。
易于规则声明。使用宏 // rslint-ignore no-empty
声明规则。该宏接受文档注释、结构名、组名、规则代码和配置选项。该宏生成结构定义和 Rule
实现并处理文档注释,将其作为结构体的文档以及每个规则 .src-rs
方法中的静态字符串。
完整的语法树。与 ESTree 不同,RSLint 的自定义语法树保留了
- 所有空白
- 所有注释
- 所有标记
允许它进行强大的分析,而无需依赖于 ESLint 的 SourceCode
等单独的结构。
未类型化的语法树。RSLint 的语法树由低级别的未类型化节点和未类型化标记组成,这允许通过树进行强大、高效的遍历,例如 if_stmt// rslint-ignore no-empty
。
易于使用的 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 许可协议。
lib.rs
:
这是一个用于生成语法节点定义和实用宏的 crate。rslint_lexer 和 rslint_parser 都依赖于这些定义,因此它们被封装在这个 crate 中,以避免循环依赖。