Skip to content

Commit 9436b5e

Browse files
fix: add config cheat sheet
1 parent 1166cfe commit 9436b5e

File tree

2 files changed

+241
-0
lines changed

2 files changed

+241
-0
lines changed

website/.vitepress/config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ const sidebar: DefaultTheme.Sidebar = [
7676
text: 'Cheat Sheet',
7777
items: [
7878
{ text: 'Rule Cheat Sheet', link: '/cheatsheet/rule.html' },
79+
{ text: 'Config Cheat Sheet', link: '/cheatsheet/yaml.html' },
7980
],
8081
collapsed: true,
8182
},

website/cheatsheet/yaml.md

Lines changed: 240 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,240 @@
1+
# Config Cheat Sheet
2+
3+
This cheat sheet provides a concise overview of ast-grep's linter rule YAML configuration. It's designed as a handy reference for common usage.
4+
5+
<script setup>
6+
import CheatSheet from '../src/cheatsheet/SheetTable.vue'
7+
import Item from '../src/cheatsheet/Item.vue'
8+
</script>
9+
10+
11+
## Basic Information
12+
13+
Core details that identify and define your rule and miscellaneous keys for documentation and custom data.
14+
15+
<CheatSheet title="ℹ️ Basic Information" variant="info">
16+
<Item>
17+
18+
```yaml
19+
id: no-console-log
20+
```
21+
22+
🆔 A unique, descriptive identifier for the rule.
23+
24+
</Item>
25+
26+
<Item>
27+
28+
```yaml
29+
language: JavaScript
30+
```
31+
32+
🌐 The programming language the rule applies to.
33+
34+
</Item>
35+
36+
37+
<Item>
38+
39+
```yaml
40+
url: 'https://doc.link/'
41+
```
42+
🔗 A URL to the rule's documentation.
43+
44+
</Item>
45+
46+
47+
<Item>
48+
49+
```yaml
50+
metadata: { author: 'John Doe' }
51+
```
52+
53+
📓 metadata A dictionary for custom data related to the rule.
54+
55+
</Item>
56+
57+
</CheatSheet>
58+
59+
## Finding
60+
61+
Keys for specifying what code to search for.
62+
63+
<CheatSheet title="🔍 Finding Code" variant="danger">
64+
65+
<Item>
66+
67+
```yaml
68+
rule:
69+
pattern: 'console.log($$$ARGS)'
70+
```
71+
72+
🎯 The core `rule` to find matching AST nodes.
73+
74+
</Item>
75+
76+
<Item>
77+
78+
```yaml
79+
constraints:
80+
ARG: { kind: 'string' } }
81+
```
82+
83+
⚙️ Additional `constraints` rules to filter meta-variable matches.
84+
85+
</Item>
86+
87+
<Item>
88+
89+
```yaml
90+
utils:
91+
is-react:
92+
kind: function_declaration
93+
has: { kind: jsx_element }
94+
```
95+
96+
🛠️ A dictionary of reusable utility rules. Use them in `matches` to modularize your rules.
97+
98+
</Item>
99+
100+
</CheatSheet>
101+
102+
103+
## Patching
104+
105+
Keys for defining how to automatically fix the found code.
106+
107+
108+
<CheatSheet title="🛠️ Patching Code" variant="tip">
109+
110+
<Item>
111+
112+
```yaml
113+
transform:
114+
NEW_VAR:
115+
substring: {endChar: 1, source: $V}
116+
```
117+
118+
🎩 `transform` meta-variables before they are used in `fix`.
119+
120+
</Item>
121+
122+
<Item>
123+
124+
```yaml
125+
transform:
126+
NEW_VAR: substring($V, endChar=1)
127+
```
128+
129+
🎩 `transform` also accepts string form.
130+
131+
</Item>
132+
133+
<Item>
134+
135+
```yaml
136+
fix: "logger.log($$$ARGS)"
137+
```
138+
139+
🔧 A `fix` string to auto-fix the matched code.
140+
141+
</Item>
142+
143+
<Item>
144+
145+
```yaml
146+
fix:
147+
template: "logger.log($$$ARGS)"
148+
expandEnd: rule
149+
```
150+
151+
🔧 Fix also accepts `FixConfig` object.
152+
153+
</Item>
154+
155+
<Item>
156+
157+
```yaml
158+
rewriters:
159+
- id: remove-quotes
160+
rule: { pattern: "'$A'" }
161+
fix: "$A"
162+
```
163+
164+
✍️ A list of `rewriters` for complex transformations.
165+
166+
</Item>
167+
168+
</CheatSheet>
169+
170+
## Linting
171+
172+
Keys for configuring the messages and severity of reported issues.
173+
174+
<CheatSheet title="🚦 Linting" variant="warning">
175+
176+
<Item>
177+
178+
```yaml
179+
severity: warning
180+
```
181+
182+
⚠️ The `severity` level of the linting message.
183+
184+
</Item>
185+
186+
<Item>
187+
188+
```yaml
189+
message: "Avoid using $MATCH in production."
190+
```
191+
192+
💬 A concise `message` explaining the rule. Matched $VAR can be used.
193+
194+
</Item>
195+
196+
<Item>
197+
198+
```yaml
199+
note:
200+
Use a _logger_ instead of `console`
201+
```
202+
203+
📌 More detailed `note`. It supports Markdown format.
204+
205+
</Item>
206+
207+
<Item>
208+
209+
```yaml
210+
labels:
211+
ARG:
212+
style: 'primary'
213+
message: 'The argument to log'
214+
```
215+
216+
🎨 Customized `labels` for highlighting parts of the matched code.
217+
218+
</Item>
219+
220+
<Item>
221+
222+
```yaml
223+
files: ['src/**/*.js']
224+
```
225+
226+
✅ Glob `files` patterns to include files for the rule.
227+
228+
</Item>
229+
230+
<Item>
231+
232+
```yaml
233+
ignores: ['test/**/*.js']
234+
```
235+
236+
❌ Glob patterns to exclude files from the rule.
237+
238+
</Item>
239+
240+
</CheatSheet>

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy