1
0
mirror of https://github.com/thangisme/notes.git synced 2024-06-28 14:55:29 +00:00
notes/node_modules/stylelint/lib/rules/declaration-block-no-ignored-properties/index.js
Patrick Marsceill b7b0d0d7bf
Initial commit
2017-03-09 13:16:08 -05:00

183 lines
4.0 KiB
JavaScript

"use strict"
const matchesStringOrRegExp = require("../../utils/matchesStringOrRegExp")
const postcss = require("postcss")
const report = require("../../utils/report")
const ruleMessages = require("../../utils/ruleMessages")
const validateOptions = require("../../utils/validateOptions")
const ruleName = "declaration-block-no-ignored-properties"
const messages = ruleMessages(ruleName, {
rejected: (ignored, cause) => `Unexpected "${ignored}" with "${cause}"`,
})
const ignored = [
{
property: "display",
value: "inline",
ignoredProperties: [
"width",
"min-width",
"max-width",
"height",
"min-height",
"max-height",
"margin",
"margin-top",
"margin-bottom",
"overflow",
"overflow-x",
"overflow-y",
],
},
{
property: "display",
value: "list-item",
ignoredProperties: ["vertical-align"],
},
{
property: "display",
value: "block",
ignoredProperties: ["vertical-align"],
},
{
property: "display",
value: "flex",
ignoredProperties: ["vertical-align"],
},
{
property: "display",
value: "table",
ignoredProperties: ["vertical-align"],
},
{
property: "display",
value: "/^table-.*$/",
ignoredProperties: [
"margin",
"margin-top",
"margin-right",
"margin-bottom",
"margin-left",
],
},
{
property: "display",
value: "/^table-(row|row-group|column|column-group|header-group|footer-group|caption).*$/",
ignoredProperties: ["vertical-align"],
},
{
property: "display",
value: "/^table-(row|row-group).*$/",
ignoredProperties: [
"width",
"min-width",
"max-width",
],
},
{
property: "display",
value: "/^table-(column|column-group).*$/",
ignoredProperties: [
"height",
"min-height",
"max-height",
],
},
{
property: "float",
value: "left",
ignoredProperties: ["vertical-align"],
},
{
property: "float",
value: "right",
ignoredProperties: ["vertical-align"],
},
{
property: "position",
value: "static",
ignoredProperties: [
"top",
"right",
"bottom",
"left",
],
},
{
property: "position",
value: "absolute",
ignoredProperties: [
"float",
"clear",
"vertical-align",
],
},
{
property: "position",
value: "fixed",
ignoredProperties: [
"float",
"clear",
"vertical-align",
],
},
]
const rule = function (actual) {
return (root, result) => {
const validOptions = validateOptions(result, ruleName, { actual })
if (!validOptions) {
return
}
result.warn((
"'declaration-block-no-ignored-properties' has been deprecated and in 8.0 will be removed."
), {
stylelintType: "deprecation",
stylelintReference: "https://stylelint.io/user-guide/rules/declaration-block-no-ignored-properties/",
})
const uniqueDecls = {}
root.walkDecls(decl => {
uniqueDecls[decl.prop] = decl
})
Object.keys(uniqueDecls).forEach((prop, index) => {
const decl = uniqueDecls[prop]
const unprefixedProp = postcss.vendor.unprefixed(prop)
const unprefixedValue = postcss.vendor.unprefixed(decl.value)
ignored.forEach(ignore => {
const matchProperty = matchesStringOrRegExp(unprefixedProp.toLowerCase(), ignore.property)
const matchValue = matchesStringOrRegExp(unprefixedValue.toLowerCase(), ignore.value)
if (!matchProperty || !matchValue) {
return
}
const ignoredProperties = ignore.ignoredProperties
decl.parent.nodes.forEach((node, nodeIndex) => {
if (!node.prop || ignoredProperties.indexOf(node.prop.toLowerCase()) === -1 || index === nodeIndex) {
return
}
report({
message: messages.rejected(node.prop, decl.toString()),
node,
result,
ruleName,
})
})
})
})
}
}
rule.ruleName = ruleName
rule.messages = messages
module.exports = rule