.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / stylelint / lib / rules / font-family-no-missing-generic-family-keyword / index.js
1 "use strict";
2
3 const declarationValueIndex = require("../../utils/declarationValueIndex");
4 const findFontFamily = require("../../utils/findFontFamily");
5 const keywordSets = require("../../reference/keywordSets");
6 const report = require("../../utils/report");
7 const ruleMessages = require("../../utils/ruleMessages");
8 const validateOptions = require("../../utils/validateOptions");
9
10 const ruleName = "font-family-no-missing-generic-family-keyword";
11
12 const messages = ruleMessages(ruleName, {
13   rejected: "Unexpected missing generic font family"
14 });
15
16 const isFamilyNameKeyword = node =>
17   !node.quote && keywordSets.fontFamilyKeywords.has(node.value.toLowerCase());
18
19 const rule = function(actual) {
20   return (root, result) => {
21     const validOptions = validateOptions(result, ruleName, { actual });
22     if (!validOptions) {
23       return;
24     }
25
26     root.walkDecls(/^font(-family)?$/i, decl => {
27       // Ignore @font-face
28       if (
29         decl.parent &&
30         decl.parent.type === "atrule" &&
31         decl.parent.name.toLowerCase() === "font-face"
32       ) {
33         return;
34       }
35
36       const fontFamilies = findFontFamily(decl.value);
37
38       if (fontFamilies.length === 0) {
39         return;
40       }
41
42       if (fontFamilies.some(isFamilyNameKeyword)) {
43         return;
44       }
45
46       report({
47         result,
48         ruleName,
49         message: messages.rejected,
50         node: decl,
51         index:
52           declarationValueIndex(decl) +
53           fontFamilies[fontFamilies.length - 1].sourceIndex
54       });
55     });
56   };
57 };
58
59 rule.ruleName = ruleName;
60 rule.messages = messages;
61 module.exports = rule;