All files / src/rules/style-property-no-unknown index.js

95.83% Statements 23/24
92.86% Branches 13/14
100% Functions 4/4
95.83% Lines 23/24

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79                        3x   3x 32x     3x     38x 38x                             38x       38x 50x 50x   50x 5x     45x 5x     40x 1x     39x 1x     38x 3x     35x 19x     16x                  
import { allProps } from "react-native-known-styling-properties";
import { utils } from "stylelint";
import {
  isCustomProperty,
  isStandardSyntaxDeclaration,
  isStandardSyntaxProperty,
  isString,
  kebabCase,
  namespace,
  optionsMatches
} from "../../utils";
 
export const ruleName = namespace("style-property-no-unknown");
 
export const messages = utils.ruleMessages(ruleName, {
  rejected: (property) => `Unexpected unknown property "${property}"`
});
 
const props = allProps.map(kebabCase);
 
export default function (actual, options) {
  return function (root, result) {
    const validOptions = utils.validateOptions(
      result,
      ruleName,
      {
        actual
      },
      {
        actual: options,
        possible: {
          ignoreProperties: [isString]
        },
        optional: true
      }
    );
 
    Iif (!validOptions) {
      return;
    }
 
    root.walkDecls((decl) => {
      const prop = decl.prop;
      const value = decl.value;
 
      if (kebabCase(prop) === kebabCase(value)) {
        return;
      }
 
      if (!isStandardSyntaxProperty(prop)) {
        return;
      }
 
      if (!isStandardSyntaxDeclaration(decl)) {
        return;
      }
 
      if (isCustomProperty(prop)) {
        return;
      }
 
      if (optionsMatches(options, "ignoreProperties", prop)) {
        return;
      }
 
      if (props.indexOf(prop.toLowerCase()) !== -1) {
        return;
      }
 
      utils.report({
        message: messages.rejected(prop),
        node: decl,
        result,
        ruleName
      });
    });
  };
}