-
Notifications
You must be signed in to change notification settings - Fork 1
/
vue-attribute-linebreak.js
47 lines (41 loc) · 1.18 KB
/
vue-attribute-linebreak.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
module.exports = {
meta: {
type: "layout",
docs: {
description: "enforce the location of first and last attributes",
category: "Stylistic Issues",
recommended: false,
},
fixable: null
},
create(context) {
function report(attribute, location) {
context.report({
node: attribute,
message: `Expected a linebreak ${location} this attribute.`
})
}
return context.parserServices.defineTemplateBodyVisitor({
VStartTag(node) {
// Skip 'template' tags
if (node.parent.name === "template") {
return;
}
// No attributes
if (node.attributes.length === 0) {
return;
}
const firstAttribute = node.attributes[0];
const lastAttribute = node.attributes[node.attributes.length - 1];
// Enforce line-break before first attribute
if (node.loc.start.line === firstAttribute.loc.start.line) {
report(firstAttribute, "above");
}
// Enforce line-break after last attribute
if (node.loc.end.line === lastAttribute.loc.start.line) {
report(lastAttribute, "below");
}
}
})
}
};