-
Notifications
You must be signed in to change notification settings - Fork 27.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add project-specific lints with ast-grep (vercel/turborepo#5637)
ast-grep[0] is a tool that uses tree-sitter[1] and a pattern language to match against code using its ast. It implements code transformation, querying, and linting. Since clippy isn't extensible for project-specific lints, this adds a first ast-grep lint disallowing `context` as a variable name. Currently it's set to warning as usage is addressed. To run, install ast-grep, then run `ast-grep scan`. Example output: ``` warning[no-context]: Don't name variables `context`. ┌─ ./crates/turbopack-ecmascript-hmr-protocol/src/lib.rs:132:9 │ 132 │ pub context: &'a str, │ ----^^^^^^^--------- │ = Use a more specific name, such as chunking_context, asset_context, etc. ``` [0] https://ast-grep.github.io [1] https://tree-sitter.github.io/tree-sitter/
- Loading branch information
1 parent
92fc159
commit 6baba7e
Showing
5 changed files
with
79 additions
and
0 deletions.
There are no files selected for viewing
42 changes: 42 additions & 0 deletions
42
.config/ast-grep/rule-tests/__snapshots__/no-context-snapshot.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
id: no-context | ||
snapshots: | ||
"fn foo(context: ChunkingContext) -> u32 { 5 };": | ||
labels: | ||
- source: context | ||
style: primary | ||
start: 7 | ||
end: 14 | ||
- source: "context: ChunkingContext" | ||
style: secondary | ||
start: 7 | ||
end: 31 | ||
foo(|context| context): | ||
labels: | ||
- source: context | ||
style: primary | ||
start: 5 | ||
end: 12 | ||
- source: "|context|" | ||
style: secondary | ||
start: 4 | ||
end: 13 | ||
let context = ChunkingContext::new();: | ||
labels: | ||
- source: context | ||
style: primary | ||
start: 4 | ||
end: 11 | ||
- source: let context = ChunkingContext::new(); | ||
style: secondary | ||
start: 0 | ||
end: 37 | ||
"struct Foo { context: Context };": | ||
labels: | ||
- source: context | ||
style: primary | ||
start: 13 | ||
end: 20 | ||
- source: "context: Context" | ||
style: secondary | ||
start: 13 | ||
end: 29 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
id: no-context | ||
valid: | ||
- "let chunking_context = ChunkingContext::new();" | ||
- "struct Foo { chunking_context: Context };" | ||
- "foo(|chunking_context| context)" | ||
- "fn foo(chunking_context: ChunkingContext) -> u32 { 5 };" | ||
invalid: | ||
- "let context = ChunkingContext::new();" | ||
- "struct Foo { context: Context };" | ||
- "foo(|context| context)" | ||
- "fn foo(context: ChunkingContext) -> u32 { 5 };" |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
id: no-context | ||
message: Don't name variables `context`. | ||
note: Use a more specific name, such as chunking_context, asset_context, etc. | ||
severity: warning | ||
language: Rust | ||
rule: | ||
regex: \bcontext\b | ||
any: | ||
- all: | ||
- inside: | ||
any: | ||
- kind: closure_parameters | ||
- kind: parameter | ||
- kind: function_type | ||
- kind: let_declaration | ||
- kind: identifier | ||
- all: | ||
- kind: field_identifier | ||
- inside: | ||
kind: field_declaration |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
ruleDirs: | ||
- .config/ast-grep/rules | ||
testConfigs: | ||
- testDir: .config/ast-grep/rule-tests | ||
utilDirs: | ||
- .config/ast-grep/rule-utils |