-
Notifications
You must be signed in to change notification settings - Fork 40
/
plopfile.js
93 lines (93 loc) · 2.64 KB
/
plopfile.js
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// configuration for plop to generate a new Squawk rule.
// use `s/new-rule` to call this.
// You must install `plop` via `npm install -g plop`.
//
// https://github.com/plopjs/plop
module.exports = function (plop) {
plop.setGenerator("rule", {
description: "Create a new rule",
prompts: [
{
name: "name",
type: "input",
message: "Name for the rule",
},
],
actions: function (data) {
data.RuleNameKebab = plop.getHelper("kebabCase")(data.name)
data.RuleNameSnake = plop.getHelper("snakeCase")(data.name)
data.RuleNameCamel = plop.getHelper("camelCase")(data.name)
data.RuleNamePascal = plop.getHelper("pascalCase")(data.name)
return [
{
type: "add",
path: `linter/src/rules/{{RuleNameSnake}}.rs`,
templateFile: `templates/new_rule.rs.template`,
},
{
type: "add",
path: `docs/docs/{{RuleNameKebab}}.md`,
templateFile: `templates/new_rule.md.template`,
},
{
type: "modify",
path: "linter/src/rules/mod.rs",
pattern: /$/,
template: `pub mod {{RuleNameSnake}};
pub use {{RuleNameSnake}}::*;`,
},
{
type: "modify",
path: "linter/src/violations.rs",
pattern: /\/\/\sgenerator::new-rule-above/,
template: `#[serde(rename = "{{RuleNameKebab}}")]
{{RuleNamePascal}},
// generator::new-rule-above`,
},
{
type: "modify",
path: "linter/src/lib.rs",
pattern: /\/\/\sgenerator::new-rule-above/,
template: `SquawkRule {
name: RuleViolationKind::{{RuleNamePascal}},
func: {{RuleNameSnake}},
messages: vec![
ViolationMessage::Note(
"TODO".into()
),
ViolationMessage::Help(
"TODO".into()
),
],
},
// generator::new-rule-above`,
},
{
type: "modify",
path: "linter/src/lib.rs",
pattern: /use crate::rules/,
template: `use crate::rules::{{RuleNameSnake}};
use crate::rules`,
},
{
type: "modify",
path: "docs/sidebars.js",
pattern: /\/\/\sgenerator::new-rule-above/,
template: `"{{RuleNameKebab}}",
// generator::new-rule-above`,
},
{
type: "modify",
path: "docs/src/pages/index.js",
pattern: /\/\/\sgenerator::new-rule-above/,
template: `{
name: "{{RuleNameKebab}}",
tags: ["TODO"],
description: "TODO",
},
// generator::new-rule-above`,
},
]
},
})
}