UNPKG

stylelint-taro-rn

Version:

A collection of React Native specific rules for stylelint

80 lines (65 loc) 1.54 kB
import { allCSS2RNProps } from 'react-native-known-styling-properties' import { utils } from 'stylelint' import { isCustomProperty, isExportBlock, isStandardSyntaxDeclaration, isStandardSyntaxProperty, isString, kebabCase, namespace, optionsMatches } from '../../utils' export const ruleName = namespace('css-property-no-unknown') export const messages = utils.ruleMessages(ruleName, { rejected: (property) => `无效的 React Native 样式属性 "${property}"` }) const props = allCSS2RNProps.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 } ) if (!validOptions) { return } root.walkDecls((decl) => { const prop = decl.prop if (!isStandardSyntaxProperty(prop)) { return } if (!isStandardSyntaxDeclaration(decl)) { return } if (isCustomProperty(prop)) { return } if (isExportBlock(decl.parent)) { return } if (optionsMatches(options, 'ignoreProperties', prop)) { return } if (props.indexOf(prop.toLowerCase()) !== -1) { return } utils.report({ message: messages.rejected(prop), node: decl, result, ruleName }) }) } }