/
noFlowFixMeComments.js
62 lines (52 loc) · 1.34 KB
/
noFlowFixMeComments.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
const schema = [
{
type: 'string',
},
];
const message = '$FlowFixMe is treated as `any` and must be fixed.';
const isIdentifier = function (node, name) {
return node && node.type === 'Identifier' && node.name.match(name);
};
const create = (context) => {
const allowedPattern = context.options[0] ? new RegExp(context.options[0], 'u') : null;
const extraMessage = allowedPattern ? ' Fix it or match `' + allowedPattern.toString() + '`.' : '';
const passesExtraRegex = function (value) {
if (!allowedPattern) {
return false;
}
return value.match(allowedPattern);
};
const handleComment = function (comment) {
const value = comment.value.trim();
if (/\$FlowFixMe/u.test(value) && !passesExtraRegex(value)) {
context.report({
message: message + extraMessage,
node: comment,
});
}
};
return {
GenericTypeAnnotation (node) {
if (isIdentifier(node.id, /\$FlowFixMe/u)) {
context.report({
message,
node: node.id,
});
}
},
Program () {
for (const comment of context
.getSourceCode()
.getAllComments()
.filter((node) => {
return node.type === 'Block' || node.type === 'Line';
})) {
handleComment(comment);
}
},
};
};
export default {
create,
schema,
};