aboutsummaryrefslogtreecommitdiff
path: root/mingling_cli/about_mling_lint.md
blob: 87fedc8375dfd415d5760a8b391fcb7f6ea62a2e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 关于 Mingling Linter 设计

Mingling Linter 是独立于 `clippy``check` 之外的检查器,用于检查 Mingling 项目的代码质量

## 关于 Linter 定义

已完成!所有的定义都被输出到 registry.json 中,可以读取

## 忽略规则

Linter 在检查时,会检查开头的 mlint 标识,用局部读写直到没有#![.*]这样的结构为止,判断当前文件需要参与的 Linter

默认来讲,一个文件所有默认为 deny、warn 的 linter 都会参与,直到被显式 allow 覆盖。

```rust
#![mlint(allow(linter))]
#![mlint(warn(linter))]
#![mlint(deny(linter))]
```

## 检查阶段

1. 为每个包的内部 rs 文件(必须被包含)检查,并按照忽略规则,计算每个文件需要哪些 linter 检查(仅 file 级别的)
2. 使用 tokio 并行检查
3. 同时,在检查过程中,计算更细粒度的哪些 Linter 需要在哪些行(或 AST 层级,待定)检查,检查的程度是什么 (warn还是deny)
4. 使用 tokio 并行检查 所有 细粒度的 Linter
5. 输出检查结果

## 性能

请使用 tokio 并行化执行 linter,但是结果放在缓冲区,计算完成后按照文件层级(主:文件深度,次:名字 a-Z,辅:名字 0-9)排序,后输出

## 关于架构层面

第一版可以直接使用 tokio 并行化,这不会很难