3 const _ = require("lodash");
4 const isCustomProperty = require("../../utils/isCustomProperty");
5 const isStandardSyntaxDeclaration = require("../../utils/isStandardSyntaxDeclaration");
6 const isStandardSyntaxProperty = require("../../utils/isStandardSyntaxProperty");
7 const optionsMatches = require("../../utils/optionsMatches");
8 const postcss = require("postcss");
9 const properties = require("known-css-properties").all;
10 const report = require("../../utils/report");
11 const ruleMessages = require("../../utils/ruleMessages");
12 const validateOptions = require("../../utils/validateOptions");
14 const ruleName = "property-no-unknown";
16 const messages = ruleMessages(ruleName, {
17 rejected: property => `Unexpected unknown property "${property}"`
20 const rule = function(actual, options) {
21 return (root, result) => {
22 const validOptions = validateOptions(
29 ignoreProperties: [_.isString],
30 checkPrefixed: _.isBoolean
40 const shouldCheckPrefixed = _.get(options, "checkPrefixed");
42 root.walkDecls(decl => {
43 const prop = decl.prop;
45 if (!isStandardSyntaxProperty(prop)) {
48 if (!isStandardSyntaxDeclaration(decl)) {
51 if (isCustomProperty(prop)) {
55 if (!shouldCheckPrefixed && postcss.vendor.prefix(prop)) {
59 if (optionsMatches(options, "ignoreProperties", prop)) {
63 if (properties.indexOf(prop.toLowerCase()) !== -1) {
68 message: messages.rejected(prop),
77 rule.ruleName = ruleName;
78 rule.messages = messages;
79 module.exports = rule;