UNPKG

eslint-plugin-vue-scoped-css

Version:
69 lines (68 loc) 2.43 kB
"use strict"; const context_1 = require("../styles/context"); const selectors_1 = require("../styles/utils/selectors"); const compat_1 = require("../utils/compat"); module.exports = { meta: { docs: { description: "disallow using deprecated deep combinators", categories: ["vue3-recommended"], default: "warn", url: "https://future-architect.github.io/eslint-plugin-vue-scoped-css/rules/no-deprecated-deep-combinator.html", }, fixable: "code", messages: { deprecated: "The deep combinator `{{value}}` is deprecated.", }, schema: [], type: "suggestion", }, create(context) { const styles = (0, context_1.getStyleContexts)(context) .filter(context_1.isValidStyleContext) .filter((style) => style.scoped); if (!styles.length) { return {}; } const reporter = (0, context_1.getCommentDirectivesReporter)(context); function report(node) { reporter.report({ node, loc: node.loc, messageId: "deprecated", data: { value: node.value.trim(), }, fix(fixer) { var _a, _b; const sourceCodeText = (0, compat_1.getSourceCode)(context).text; const range = [...node.range]; let newText = "::v-deep"; if ((_a = sourceCodeText[range[0] - 1]) === null || _a === void 0 ? void 0 : _a.trim()) { newText = ` ${newText}`; } if ((_b = sourceCodeText[range[1]]) === null || _b === void 0 ? void 0 : _b.trim()) { newText = `${newText} `; } return fixer.replaceTextRange(range, newText); }, }); } function verify(style) { style.traverseSelectorNodes({ enterNode(node) { if ((0, selectors_1.isDeepCombinator)(node)) { report(node); } }, }); } return { "Program:exit"() { for (const style of styles) { verify(style); } }, }; }, };