mirror of
https://github.com/thangisme/notes.git
synced 2024-11-01 04:27:17 -04:00
183 lines
4.0 KiB
JavaScript
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
|