UNPKG

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