UNPKG

1.36 kBJavaScriptView Raw
1'use strict';
2
3const _ = require('lodash');
4const containsString = require('../../utils/containsString');
5const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp');
6const report = require('../../utils/report');
7const ruleMessages = require('../../utils/ruleMessages');
8const validateOptions = require('../../utils/validateOptions');
9
10const ruleName = 'comment-word-blacklist';
11
12const messages = ruleMessages(ruleName, {
13 rejected: (pattern) => `Unexpected word matching pattern "${pattern}"`,
14});
15
16function rule(blacklist) {
17 return (root, result) => {
18 const validOptions = validateOptions(result, ruleName, {
19 actual: blacklist,
20 possible: [_.isString, _.isRegExp],
21 });
22
23 if (!validOptions) {
24 return;
25 }
26
27 root.walkComments((comment) => {
28 const text = comment.text;
29 const rawComment = comment.toString();
30 const firstFourChars = rawComment.substr(0, 4);
31
32 // Return early if sourcemap
33 if (firstFourChars === '/*# ') {
34 return;
35 }
36
37 const matchesWord = matchesStringOrRegExp(text, blacklist) || containsString(text, blacklist);
38
39 if (!matchesWord) {
40 return;
41 }
42
43 report({
44 message: messages.rejected(matchesWord.pattern),
45 node: comment,
46 result,
47 ruleName,
48 });
49 });
50 };
51}
52
53rule.primaryOptionArray = true;
54
55rule.ruleName = ruleName;
56rule.messages = messages;
57module.exports = rule;