UNPKG

eslint-plugin-vue-scoped-css

Version:
82 lines (81 loc) 3.01 kB
"use strict"; const context_1 = require("../styles/context"); const compat_1 = require("../utils/compat"); module.exports = { meta: { deprecated: true, docs: { description: "enforce the `<style>` tags to has the `scoped` attribute", categories: ["vue2-recommended", "vue3-recommended"], default: "warn", url: "https://future-architect.github.io/eslint-plugin-vue-scoped-css/rules/require-scoped.html", suggestion: true, replacedBy: ["enforce-style-type"], }, fixable: null, messages: { missing: "Missing `scoped` attribute.", forbidden: "`scoped` attribute are forbidden.", add: "Add `scoped` attribute.", remove: "Remove `scoped` attribute.", }, schema: [{ enum: ["always", "never"] }], type: "suggestion", hasSuggestions: true, }, create(context) { var _a, _b; const always = context.options[0] !== "never"; const styles = (0, context_1.getStyleContexts)(context).filter(context_1.isValidStyleContext); if (!styles.length) { return {}; } const reporter = (0, context_1.getCommentDirectivesReporter)(context); const sourceCode = (0, compat_1.getSourceCode)(context); const tokenStore = (_b = (_a = sourceCode.parserServices).getTemplateBodyTokenStore) === null || _b === void 0 ? void 0 : _b.call(_a); function reportAlways(node) { reporter.report({ node: node.startTag, messageId: "missing", data: {}, suggest: [ { messageId: "add", fix(fixer) { const close = tokenStore.getLastToken(node.startTag); return close && fixer.insertTextBefore(close, " scoped"); }, }, ], }); } function reportNever(node) { const scopedAttr = node.startTag.attributes.find((attr) => attr.key.name === "scoped"); reporter.report({ node: scopedAttr, messageId: "forbidden", data: {}, suggest: [ { messageId: "remove", fix(fixer) { return fixer.remove(scopedAttr); }, }, ], }); } return { "Program:exit"() { for (const style of styles) { if (always && !style.scoped) { reportAlways(style.styleElement); } else if (!always && style.scoped) { reportNever(style.styleElement); } } }, }; }, };