From bad0d693c472a3332e840b1e1d01054903515dc7 Mon Sep 17 00:00:00 2001 From: francoismassart Date: Wed, 5 Jan 2022 22:58:57 +0100 Subject: [PATCH 1/7] WIP --- docs/rules/enforces-shorthand.md | 67 +++++ lib/config/groups.js | 112 ++++++++ lib/index.js | 2 + lib/rules/enforces-shorthand.js | 363 +++++++++++++++++++++++++ lib/util/groupMethods.js | 92 +++++++ package.json | 1 + tests/lib/rules/enforces-shorthand.js | 135 +++++++++ tests/lib/rules/no-custom-classname.js | 2 +- tests/lib/rules/wip.js | 150 ++++++++++ tests/lib/util/groupMethods.js | 180 ++++++++++++ 10 files changed, 1103 insertions(+), 1 deletion(-) create mode 100644 docs/rules/enforces-shorthand.md create mode 100644 lib/rules/enforces-shorthand.js create mode 100644 tests/lib/rules/enforces-shorthand.js create mode 100644 tests/lib/rules/wip.js create mode 100644 tests/lib/util/groupMethods.js diff --git a/docs/rules/enforces-shorthand.md b/docs/rules/enforces-shorthand.md new file mode 100644 index 00000000..4b108ca6 --- /dev/null +++ b/docs/rules/enforces-shorthand.md @@ -0,0 +1,67 @@ +# Replaces multiple Tailwind CSS classnames by their shorthand (enforces-shorthand) + +This rule will help you reduce the number of [Tailwind CSS](https://tailwindcss.com/) classnames by using shorthands. + +## Rule Details + +Examples of **incorrect** code for this rule: + +```html +
border shorthand
+``` + +Examples of **correct** code for this rule: + +```html +
border shorthand
+``` + +#### Limitations + +At the moment, the rule will not merge mixed classnames (e.g. using regular values AND arbitrary value). + +```html +
+ won't be converted to boredr-0 shorthand +
+``` + +### Options + +```js +... +"tailwindcss/no-custom-classname": [, { + "callees": Array, + "config": |, + "tags": Array, +}] +... +``` + +### `callees` (default: `["classnames", "clsx", "ctl"]`) + +If you use some utility library like [@netlify/classnames-template-literals](https://github.com/netlify/classnames-template-literals), you can add its name to the list to make sure it gets parsed by this rule. + +For best results, gather the declarative classnames together, avoid mixing conditional classnames in between, move them at the end. + +### `config` (default: `"tailwind.config.js"`) + +By default the plugin will try to load the file `tailwind.config.js` at the root of your project. + +This allows the plugin to use your customized `colors`, `spacing`, `screens`... + +You can provide another path or filename for your Tailwind CSS config file like `"config/tailwind.js"`. + +If the external file cannot be loaded (e.g. incorrect path or deleted file), an empty object `{}` will be used instead. + +It is also possible to directly inject a configuration as plain `object` like `{ prefix: "tw-", theme: { ... } }`. + +Finally, the plugin will [merge the provided configuration](https://tailwindcss.com/docs/configuration#referencing-in-java-script) with [Tailwind CSS's default configuration](https://github.com/tailwindlabs/tailwindcss/blob/master/stubs/defaultConfig.stub.js). + +### `tags` (default: `[]`) + +Optional, if you are using tagged templates, you should provide the tags in this array. + +## Further Reading + +This rule will not fix the issue but will let you know about the issue. diff --git a/lib/config/groups.js b/lib/config/groups.js index bc2105d1..96ade485 100644 --- a/lib/config/groups.js +++ b/lib/config/groups.js @@ -98,14 +98,20 @@ module.exports.groups = [ { type: 'overflow', members: 'overflow\\-(?auto|hidden|clip|visible|scroll)', + shorthand: 'all', + body: 'overflow', }, { type: 'overflow-x', members: 'overflow\\-x\\-(?auto|hidden|clip|visible|scroll)', + shorthand: 'x', + body: 'overflow-x', }, { type: 'overflow-y', members: 'overflow\\-y\\-(?auto|hidden|clip|visible|scroll)', + shorthand: 'y', + body: 'overflow-y', }, ], }, @@ -115,14 +121,20 @@ module.exports.groups = [ { type: 'overscroll', members: 'overscroll\\-(?auto|contain|none)', + shorthand: 'all', + body: 'overscroll', }, { type: 'overscroll-x', members: 'overscroll\\-x\\-(?auto|contain|none)', + shorthand: 'x', + body: 'overscroll-x', }, { type: 'overscroll-y', members: 'overscroll\\-y\\-(?auto|contain|none)', + shorthand: 'y', + body: 'overscroll-y', }, ], }, @@ -136,30 +148,44 @@ module.exports.groups = [ { type: 'inset', members: '(inset\\-(?${inset})|\\-inset\\-(?${-inset}))', + shorthand: 'all', + body: 'inset', }, { type: 'inset-y', members: '(inset\\-y\\-(?${inset})|\\-inset\\-y\\-(?${-inset}))', + shorthand: 'y', + body: 'inset-y', }, { type: 'inset-x', members: '(inset\\-x\\-(?${inset})|\\-inset\\-x\\-(?${-inset}))', + shorthand: 'x', + body: 'inset-x', }, { type: 'top', members: '(top\\-(?${inset})|\\-top\\-(?${-inset}))', + shorthand: 't', + body: 'top', }, { type: 'right', members: '(right\\-(?${inset})|\\-right\\-(?${-inset}))', + shorthand: 'r', + body: 'right', }, { type: 'bottom', members: '(bottom\\-(?${inset})|\\-bottom\\-(?${-inset}))', + shorthand: 'b', + body: 'bottom', }, { type: 'left', members: '(left\\-(?${inset})|\\-left\\-(?${-inset}))', + shorthand: 'l', + body: 'left', }, ], }, @@ -264,14 +290,20 @@ module.exports.groups = [ { type: 'gap', members: 'gap\\-(?${gap})', + shorthand: 'all', + body: 'gap', }, { type: 'column-gap', members: 'gap\\-x\\-(?${gap})', + shorthand: 'x', + body: 'gap-x', }, { type: 'row-gap', members: 'gap\\-y\\-(?${gap})', + shorthand: 'y', + body: 'gap-y', }, ], }, @@ -322,30 +354,44 @@ module.exports.groups = [ { type: 'p', members: 'p\\-(?${padding})', + shorthand: 'all', + body: 'p', }, { type: 'py', members: 'py\\-(?${padding})', + shorthand: 'y', + body: 'py', }, { type: 'px', members: 'px\\-(?${padding})', + shorthand: 'x', + body: 'px', }, { type: 'pt', members: 'pt\\-(?${padding})', + shorthand: 't', + body: 'pt', }, { type: 'pr', members: 'pr\\-(?${padding})', + shorthand: 'r', + body: 'pr', }, { type: 'pb', members: 'pb\\-(?${padding})', + shorthand: 'b', + body: 'pb', }, { type: 'pl', members: 'pl\\-(?${padding})', + shorthand: 'l', + body: 'pl', }, ], }, @@ -355,30 +401,44 @@ module.exports.groups = [ { type: 'm', members: '(m\\-(?${margin})|\\-m\\-(?${-margin}))', + shorthand: 'all', + body: 'm', }, { type: 'my', members: '(my\\-(?${margin})|\\-my\\-(?${-margin}))', + shorthand: 'y', + body: 'my', }, { type: 'mx', members: '(mx\\-(?${margin})|\\-mx\\-(?${-margin}))', + shorthand: 'x', + body: 'mx', }, { type: 'mt', members: '(mt\\-(?${margin})|\\-mt\\-(?${-margin}))', + shorthand: 't', + body: 'mt', }, { type: 'mr', members: '(mr\\-(?${margin})|\\-mr\\-(?${-margin}))', + shorthand: 'r', + body: 'mr', }, { type: 'mb', members: '(mb\\-(?${margin})|\\-mb\\-(?${-margin}))', + shorthand: 'b', + body: 'mb', }, { type: 'ml', members: '(ml\\-(?${margin})|\\-ml\\-(?${-margin}))', + shorthand: 'l', + body: 'ml', }, ], }, @@ -599,38 +659,56 @@ module.exports.groups = [ { type: 'border-radius', members: 'rounded(\\-(?${borderRadius}))?', + shorthand: 'all', + body: 'rounded', }, { type: 'border-radius-top', members: 'rounded\\-t(\\-(?${borderRadius}))?', + shorthand: 't', + body: 'rounded-t', }, { type: 'border-radius-right', members: 'rounded\\-r(\\-(?${borderRadius}))?', + shorthand: 'r', + body: 'rounded-r', }, { type: 'border-radius-bottom', members: 'rounded\\-b(\\-(?${borderRadius}))?', + shorthand: 'b', + body: 'rounded-b', }, { type: 'border-radius-left', members: 'rounded\\-l(\\-(?${borderRadius}))?', + shorthand: 'l', + body: 'rounded-l', }, { type: 'border-radius-top-left', members: 'rounded\\-tl(\\-(?${borderRadius}))?', + shorthand: 'tl', + body: 'rounded-tl', }, { type: 'border-radius-top-right', members: 'rounded\\-tr(\\-(?${borderRadius}))?', + shorthand: 'tr', + body: 'rounded-tr', }, { type: 'border-radius-bottom-right', members: 'rounded\\-br(\\-(?${borderRadius}))?', + shorthand: 'br', + body: 'rounded-br', }, { type: 'border-radius-bottom-left', members: 'rounded\\-bl(\\-(?${borderRadius}))?', + shorthand: 'bl', + body: 'rounded-bl', }, ], }, @@ -640,30 +718,44 @@ module.exports.groups = [ { type: 'border-width', members: 'border(\\-(?${borderWidth}))?', + shorthand: 'all', + body: 'border', }, { type: 'border-y-width', members: 'border\\-y(\\-(?${borderWidth}))?', + shorthand: 'y', + body: 'border-y', }, { type: 'border-x-width', members: 'border\\-x(\\-(?${borderWidth}))?', + shorthand: 'x', + body: 'border-x', }, { type: 'border-top-width', members: 'border\\-t(\\-(?${borderWidth}))?', + shorthand: 't', + body: 'border-t', }, { type: 'border-right-width', members: 'border\\-r(\\-(?${borderWidth}))?', + shorthand: 'r', + body: 'border-r', }, { type: 'border-bottom-width', members: 'border\\-b(\\-(?${borderWidth}))?', + shorthand: 'b', + body: 'border-b', }, { type: 'border-left-width', members: 'border\\-l(\\-(?${borderWidth}))?', + shorthand: 'l', + body: 'border-l', }, ], }, @@ -673,30 +765,44 @@ module.exports.groups = [ { type: 'border-color', members: 'border\\-(?${borderColor})', + shorthand: 'all', + body: 'border', }, { type: 'border-y-color', members: 'border\\-y\\-(?${borderColor})', + shorthand: 'y', + body: 'border-y', }, { type: 'border-x-color', members: 'border\\-x\\-(?${borderColor})', + shorthand: 'x', + body: 'border-x', }, { type: 'border-top-color', members: 'border\\-t\\-(?${borderColor})', + shorthand: 't', + body: 'border-t', }, { type: 'border-right-color', members: 'border\\-r\\-(?${borderColor})', + shorthand: 'r', + body: 'border-r', }, { type: 'border-bottom-color', members: 'border\\-b\\-(?${borderColor})', + shorthand: 'b', + body: 'border-b', }, { type: 'border-left-color', members: 'border\\-l\\-(?${borderColor})', + shorthand: 'l', + body: 'border-l', }, ], }, @@ -951,14 +1057,20 @@ module.exports.groups = [ { type: 'scale', members: 'scale\\-(?${scale})', + shorthand: 'all', + body: 'scale', }, { type: 'scale-y', members: 'scale\\-y\\-(?${scale})', + shorthand: 'y', + body: 'scale-y', }, { type: 'scale-x', members: 'scale\\-x\\-(?${scale})', + shorthand: 'x', + body: 'scale-x', }, ], }, diff --git a/lib/index.js b/lib/index.js index 2c68739f..81654643 100644 --- a/lib/index.js +++ b/lib/index.js @@ -13,6 +13,7 @@ var base = __dirname + '/rules/'; module.exports = { rules: { 'classnames-order': require(base + 'classnames-order'), + 'enforces-shorthand': require(base + 'enforces-shorthand'), 'migration-from-tailwind-2': require(base + 'migration-from-tailwind-2'), 'no-contradicting-classname': require(base + 'no-contradicting-classname'), 'no-custom-classname': require(base + 'no-custom-classname'), @@ -27,6 +28,7 @@ module.exports = { }, rules: { 'tailwindcss/classnames-order': 'warn', + 'tailwindcss/enforces-shorthand': 'warn', 'tailwindcss/migration-from-tailwind-2': 'warn', 'tailwindcss/no-custom-classname': 'warn', 'tailwindcss/no-contradicting-classname': 'error', diff --git a/lib/rules/enforces-shorthand.js b/lib/rules/enforces-shorthand.js new file mode 100644 index 00000000..b0363d0a --- /dev/null +++ b/lib/rules/enforces-shorthand.js @@ -0,0 +1,363 @@ +/** + * @fileoverview Avoid using multiple Tailwind CSS classnames when not required (e.g. "mx-3 my-3" could be replaced by "m-3") + * @author François Massart + */ +'use strict'; + +const docsUrl = require('../util/docsUrl'); +const defaultGroups = require('../config/groups').groups; +const customConfig = require('../util/customConfig'); +const astUtil = require('../util/ast'); +const attrUtil = require('../util/attr'); +const groupUtil = require('../util/groupMethods'); +const getOption = require('../util/settings'); +const parserUtil = require('../util/parser'); + +//------------------------------------------------------------------------------ +// Rule Definition +//------------------------------------------------------------------------------ + +// Predefine message for use in context.report conditional. +// messageId will still be usable in tests. +const SHORTHAND_CANDIDATE_CLASSNAMES_DETECTED_MSG = `Classnames '{{classnames}}' could be replaced by the '{{shorthand}}' shorthand!`; + +module.exports = { + meta: { + docs: { + description: 'Enforces the usage of shorthand Tailwind CSS classnames', + category: 'Best Practices', + recommended: true, + url: docsUrl('enforces-shorthand'), + }, + messages: { + shorthandCandidateDetected: SHORTHAND_CANDIDATE_CLASSNAMES_DETECTED_MSG, + }, + fixable: 'code', + schema: [ + { + type: 'object', + properties: { + callees: { + type: 'array', + items: { type: 'string', minLength: 0 }, + uniqueItems: true, + }, + config: { + default: 'tailwind.config.js', + type: ['string', 'object'], + }, + tags: { + type: 'array', + items: { type: 'string', minLength: 0 }, + uniqueItems: true, + }, + }, + }, + ], + }, + + create: function (context) { + const callees = getOption(context, 'callees'); + const tags = getOption(context, 'tags'); + const twConfig = getOption(context, 'config'); + + const mergedConfig = customConfig.resolve(twConfig); + + //---------------------------------------------------------------------- + // Helpers + //---------------------------------------------------------------------- + + // Init assets + const targetProperties = { + Layout: ['Overflow', 'Overscroll Behavior', 'Top / Right / Bottom / Left'], + 'Flexbox & Grid': ['Gap'], + Spacing: ['Padding', 'Margin'], + Borders: ['Border Radius', 'Border Width', 'Border Color'], + Transforms: ['Scale'], + }; + // We don't want to affect other rules by object reference + const cloned = JSON.parse(JSON.stringify(defaultGroups)); + const targetGroups = cloned.filter((g) => Object.keys(targetProperties).includes(g.type)); + targetGroups.forEach((g) => { + // Without using the clone, other rules would be affected by this `filter()` + g.members = g.members.filter((sub) => targetProperties[g.type].includes(sub.type)); + }); + + /** + * Retrieve the main part of a classname base on its shorthand scope + * @param {Object} targetGroups A specific subset of the groups + * @param {String} parentType The name of the parent e.g. 'Border Radius' + * @param {String} shorthand The searched shorthand e.g. 'all', 'y', 't', 'tr' + * @returns + */ + const getBodyByShorthand = (targetGroups, parentType, shorthand) => { + const findByMemberType = (obj) => obj.members.find((m) => m.type === parentType); + const mainGroup = targetGroups.find(findByMemberType); + if (!mainGroup) { + return ''; + } + const typeGroup = mainGroup.members.find((m) => m.type === parentType); + // const typeGroup = mainGroup.find(findByMemberType); + if (!typeGroup) { + return ''; + } + const type = typeGroup.members.find((m) => m.shorthand === shorthand); + return !type ? '' : type.body; + }; + + /** + * Parse the classnames and report found shorthand candidates + * @param {ASTNode} node The root node of the current parsing + * @param {ASTNode} arg The child node of node + * @returns {void} + */ + const parseForShorthandCandidates = (node, arg = null) => { + let originalClassNamesValue = null; + let start = null; + let end = null; + let prefix = ''; + let suffix = ''; + let trim = false; + const troubles = []; + if (arg === null) { + originalClassNamesValue = astUtil.extractValueFromNode(node); + const range = astUtil.extractRangeFromNode(node); + start = range[0] + 1; + end = range[1] - 1; + } else { + switch (arg.type) { + case 'TemplateLiteral': + arg.expressions.forEach((exp) => { + parseForShorthandCandidates(node, exp); + }); + arg.quasis.forEach((quasis) => { + parseForShorthandCandidates(node, quasis); + }); + return; + case 'ConditionalExpression': + parseForShorthandCandidates(node, arg.consequent); + parseForShorthandCandidates(node, arg.alternate); + return; + case 'LogicalExpression': + parseForShorthandCandidates(node, arg.right); + return; + case 'Literal': + trim = true; + originalClassNamesValue = arg.value; + start = arg.range[0] + 1; + end = arg.range[1] - 1; + break; + case 'TemplateElement': + originalClassNamesValue = arg.value.raw; + start = arg.range[0]; + end = arg.range[1]; + // https://github.com/eslint/eslint/issues/13360 + // The problem is that range computation includes the backticks (`test`) + // but value.raw does not include them, so there is a mismatch. + // start/end does not include the backticks, therefore it matches value.raw. + const txt = context.getSourceCode().getText(arg); + prefix = astUtil.getTemplateElementPrefix(txt, originalClassNamesValue); + suffix = astUtil.getTemplateElementSuffix(txt, originalClassNamesValue); + break; + } + } + + let classNames = attrUtil.getClassNamesFromAttribute(originalClassNamesValue, trim); + const isSingleLine = attrUtil.isSingleLine(originalClassNamesValue); + let before = null; + let after = null; + + if (!isSingleLine) { + const spacesOnly = /^(\s)*$/; + if (spacesOnly.test(classNames[0])) { + before = classNames.shift(); + } + if (spacesOnly.test(classNames[classNames.length - 1])) { + after = classNames.pop(); + } + } + + if (classNames.length <= 1) { + // Don't run sorting for a single or empty className + return; + } + + classNames = attrUtil.sanitizeClassnames(classNames); + // Init assets before sorting + const parsed = []; + // Move each classname inside its dedicated group + classNames.forEach((className, index) => { + parsed.push(groupUtil.parseClassname(className, targetGroups, mergedConfig, index)); + }); + + const validated = []; + // Each group parentType + const checkedGroups = []; + parsed.forEach((classname) => { + // Valid candidate + if (classname.parentType === '') { + validated.push(classname); + } else if (!checkedGroups.includes(classname.parentType)) { + checkedGroups.push(classname.parentType); + const sameType = parsed.filter((cls) => cls.parentType === classname.parentType); + // Comparing same parentType classnames + const checkedVariantsValue = []; + sameType.forEach((cls) => { + const key = cls.variants + cls.value; + if (!checkedVariantsValue.includes(key)) { + checkedVariantsValue.push(key); + const sameVariantAndValue = sameType.filter((v) => { + return v.variants === cls.variants && v.value === cls.value; + }); + if (sameVariantAndValue.length === 1) { + validated.push(cls); + } else if (sameVariantAndValue.length) { + const supportCorners = ['Border Radius'].includes(classname.parentType); + const hasTL = + supportCorners && sameVariantAndValue.some((c) => ['tl', 't', 'all'].includes(c.shorthand)); + const hasTR = + supportCorners && sameVariantAndValue.some((c) => ['tr', 't', 'all'].includes(c.shorthand)); + const hasBR = + supportCorners && sameVariantAndValue.some((c) => ['br', 'b', 'all'].includes(c.shorthand)); + const hasBL = + supportCorners && sameVariantAndValue.some((c) => ['bl', 'b', 'all'].includes(c.shorthand)); + const hasT = sameVariantAndValue.some((c) => c.shorthand === 't') || (hasTL && hasTR); + const hasR = sameVariantAndValue.some((c) => c.shorthand === 'r') || (hasTR && hasBR); + const hasB = sameVariantAndValue.some((c) => c.shorthand === 'b') || (hasBL && hasBR); + const hasL = sameVariantAndValue.some((c) => c.shorthand === 'l') || (hasTL && hasBL); + const hasX = sameVariantAndValue.some((c) => c.shorthand === 'x') || (hasL && hasR); + const hasY = sameVariantAndValue.some((c) => c.shorthand === 'y') || (hasT && hasB); + const hasAll = sameVariantAndValue.some((c) => c.shorthand === 'all') || (hasY && hasX); + + if (hasAll) { + const all = getBodyByShorthand(targetGroups, classname.parentType, 'all'); + // const patchedName = `${cls.variants}${all}-${cls.value}`; + const patchedName = `${cls.variants}${all}${cls.value.length ? '-' + cls.value : ''}`; + troubles.push([sameVariantAndValue.map((c) => c.name), patchedName]); + cls.name = patchedName; + cls.shorthand = 'all'; + validated.push(cls); + } else if (hasY || hasX) { + const xOrY = hasX ? 'x' : 'y'; + const xOrYType = getBodyByShorthand(targetGroups, classname.parentType, xOrY); + // const patchedName = `${cls.variants}${xOrYType}-${cls.value}`; + const patchedName = `${cls.variants}${xOrYType}${cls.value.length ? '-' + cls.value : ''}`; + const toBeReplaced = sameVariantAndValue + .filter((c) => { + const candidates = hasX ? ['l', 'r'] : ['t', 'b']; + return candidates.includes(c.shorthand); + }) + .map((c) => c.name); + const toBeKept = sameVariantAndValue.filter((c) => { + const candidates = hasY ? ['l', 'r'] : ['t', 'b']; + return candidates.includes(c.shorthand); + }); + + troubles.push([toBeReplaced, patchedName]); + cls.name = patchedName; + cls.shorthand = xOrY; + validated.push(cls); + if (toBeKept.length) { + validated.push(...toBeKept); + } + } else if (supportCorners && (hasT || hasR || hasB || hasL)) { + const side = hasT ? 't' : hasR ? 'r' : hasB ? 'b' : 'l'; + const sideBody = getBodyByShorthand(targetGroups, classname.parentType, side); + const patchedName = `${cls.variants}${sideBody}${cls.value.length ? '-' + cls.value : ''}`; + const toBeReplaced = sameVariantAndValue + .filter((c) => { + const candidates = hasT ? ['tl', 'tr'] : hasR ? ['tr', 'br'] : hasB ? ['bl', 'br'] : ['tl', 'bl']; + return candidates.includes(c.shorthand); + }) + .map((c) => c.name); + const toBeKept = sameVariantAndValue.filter((c) => { + const candidates = hasT ? ['bl', 'br'] : hasR ? ['tl', 'bl'] : hasB ? ['tl', 'tr'] : ['tr', 'br']; + return candidates.includes(c.shorthand); + }); + + troubles.push([toBeReplaced, patchedName]); + cls.name = patchedName; + cls.shorthand = side; + validated.push(cls); + if (toBeKept.length) { + validated.push(...toBeKept); + } + } else { + validated.push(...sameVariantAndValue); + } + } + } + }); + } + }); + + // Generates the validated attribute value + const union = validated.map((val) => val.name); + + if (before !== null) { + union.unshift(before); + } + if (after !== null) { + union.push(after); + } + let validatedClassNamesValue = union.join(isSingleLine ? ' ' : '\n'); + const originalPatched = isSingleLine ? originalClassNamesValue.trim() : originalClassNamesValue; + troubles.forEach((issue) => { + if (originalPatched !== validatedClassNamesValue) { + validatedClassNamesValue = prefix + validatedClassNamesValue + suffix; + context.report({ + node: node, + messageId: 'shorthandCandidateDetected', + data: { + classnames: issue[0].join(', '), + shorthand: issue[1], + }, + fix: function (fixer) { + return fixer.replaceTextRange([start, end], validatedClassNamesValue); + }, + }); + } + }); + }; + + //---------------------------------------------------------------------- + // Public + //---------------------------------------------------------------------- + + const scriptVisitor = { + JSXAttribute: function (node) { + if (!astUtil.isValidJSXAttribute(node)) { + return; + } + parseForShorthandCandidates(node); + }, + CallExpression: function (node) { + if (callees.findIndex((name) => node.callee.name === name) === -1) { + return; + } + + node.arguments.forEach((arg) => { + parseForShorthandCandidates(node, arg); + }); + }, + TaggedTemplateExpression: function (node) { + if (!tags.includes(node.tag.name)) { + return; + } + + parseForShorthandCandidates(node, node.quasi); + }, + }; + + const templateVisitor = { + VAttribute: function (node) { + if (!astUtil.isValidVueAttribute(node)) { + return; + } + parseForShorthandCandidates(node); + }, + }; + + return parserUtil.defineTemplateBodyVisitor(context, templateVisitor, scriptVisitor); + }, +}; diff --git a/lib/util/groupMethods.js b/lib/util/groupMethods.js index 54a2920b..adfd148f 100644 --- a/lib/util/groupMethods.js +++ b/lib/util/groupMethods.js @@ -407,6 +407,17 @@ function getGroupIndex(name, arr, separator = ':') { return idx; } +/** + * Get the prefixes of the full classname + * + * @param {String} className The target classname + * @param {String} separator The delimiter to be used between variants + * @returns {String} The variants + */ +function getPrefixes(className, separator = ':') { + return className.split(separator).slice(0, -1).join(separator); +} + /** * Get the last part of the full classname * @@ -431,9 +442,90 @@ function getSuffix(className, separator = ':') { return arbitraryArr[0].split(separator).pop() + '-[' + arbitraryArr[1]; } +/** + * Find the group of a classname + * + * @param {String} name Classname to be find using patterns + * @param {Array} group The group bein tested + * @param {Object} config TailwindCSS config + * @param {String} parentType The name of the parent group + * @returns {Object} The infos + */ +function findInGroup(name, group, config, parentType = null) { + if (typeof group.members === 'string') { + const pattern = patchRegex(group.members, config); + const classRe = new RegExp(`^(${pattern})$`); + if (classRe.test(name)) { + const res = classRe.exec(name); + let value = ''; + if (res && res.groups) { + if (res.groups.value) { + value = res.groups.value; + } + if (res.groups.negativeValue) { + value = '-' + res.groups.negativeValue; + } + } + return { + group: parentType, + ...group, + value: value, + }; + } else { + return null; + } + } else { + const innerGroup = group.members.find((v) => findInGroup(name, v, config, group.type)); + if (!innerGroup) { + return null; + } else { + return findInGroup(name, innerGroup, config, group.type); + } + } +} + +/** + * Returns an object with parsed properties + * + * @param {String} name Classname to be parsed + * @param {Array} arr The flatten array containing the regex + * @param {Object} config The TailwindCSS config + * @param {Number} index The index + * @returns {Object} Parsed infos + */ +function parseClassname(name, arr, config, index = null) { + const classPrefixes = getPrefixes(name, config.separator); + const classSuffix = getSuffix(name, config.separator); + let slot = null; + arr.forEach((group) => { + if (slot === null) { + const found = findInGroup(classSuffix, group, config); + if (found) { + slot = found; + } + } + }); + const variants = classPrefixes ? classPrefixes + config.separator : ''; + const value = slot ? slot.value : ''; + const isNegative = value[0] === '-'; + const off = isNegative ? 1 : 0; + const body = name.substr(0, name.length - value.length + off).substr(variants.length + off); + return { + index: index, + name: name, + variants: variants, + parentType: slot ? slot.group : '', + body: body, + value: value, + shorthand: slot ? slot.shorthand : '', + }; +} + module.exports = { initGroupSlots, getGroups, getGroupIndex, + getPrefixes, getSuffix, + parseClassname, }; diff --git a/package.json b/package.json index 56891387..0d2a3471 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "bugs": "https://github.com/francoismassart/eslint-plugin-tailwindcss/issues", "main": "lib/index.js", "scripts": { + "wip": "mocha tests/lib/rules/wip.js", "test": "mocha tests --recursive" }, "files": [ diff --git a/tests/lib/rules/enforces-shorthand.js b/tests/lib/rules/enforces-shorthand.js new file mode 100644 index 00000000..08a034cf --- /dev/null +++ b/tests/lib/rules/enforces-shorthand.js @@ -0,0 +1,135 @@ +/** + * @fileoverview Detect classname candidates for shorthand replacement + * @description E.g. `mx-4 my-4` can be replaced by `m-4` + * @author François Massart + */ +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +var rule = require("../../../lib/rules/enforces-shorthand"); +var RuleTester = require("eslint").RuleTester; + +//------------------------------------------------------------------------------ +// Tests +//------------------------------------------------------------------------------ + +var parserOptions = { + ecmaVersion: 2019, + sourceType: "module", + ecmaFeatures: { + jsx: true, + }, +}; + +var generateError = (classnames, shorthand) => { + return { + messageId: "shorthandCandidateDetected", + data: { + classnames: classnames.join(", "), + shorthand: shorthand, + }, + }; +}; + +var ruleTester = new RuleTester({ parserOptions }); + +ruleTester.run("shorthands", rule, { + valid: [ + { + code: ` +
+ No shorthand possible for overflow +
+ `, + }, + { + code: ` +
+ No shorthand possible for margin +
+ `, + }, + { + code: ` +
+ No shorthand possible +
`, + }, + ], + + invalid: [ + { + code: ` +
+ Possible shorthand for overflow +
+ `, + output: ` +
+ Possible shorthand for overflow +
+ `, + errors: [generateError(["overflow-x-auto", "overflow-y-auto"], "overflow-auto")], + }, + { + code: ` +
+ Possible shorthand for margin +
+ `, + output: ` +
+ Possible shorthand for margin +
+ `, + errors: [generateError(["mt-0", "mb-0"], "my-0")], + }, + { + code: ` +
+ Possible shorthand for margin +
+ `, + output: ` +
+ Possible shorthand for margin +
+ `, + errors: [ + generateError(["mt-0", "mb-0"], "my-0"), + generateError(["md:mx-2", "md:my-2"], "md:m-2"), + generateError(["py-0", "px-0"], "p-0"), + ], + }, + { + code: ` +
+ Possible shorthand for border-radius +
+ `, + output: ` +
+ Possible shorthand for border-radius +
+ `, + errors: [ + generateError(["rounded-tl-sm", "rounded-tr-sm"], "rounded-t-sm"), + generateError(["md:rounded-t-md", "md:rounded-b-md"], "md:rounded-md"), + ], + }, + // { + // code: ` + //
+ // No shorthand possible + //
`, + // output: ` + //
+ // No shorthand possible + //
`, + // errors: generateErrors("top-[0] bottom-[0] right-[var(--some-value)] left-[var(--some-value)]"), + // }, + ], +}); diff --git a/tests/lib/rules/no-custom-classname.js b/tests/lib/rules/no-custom-classname.js index b2f150a6..fef59eb3 100644 --- a/tests/lib/rules/no-custom-classname.js +++ b/tests/lib/rules/no-custom-classname.js @@ -1,6 +1,6 @@ /** * @fileoverview Detect classnames which do not belong to Tailwind CSS - * @author no-custom-classname + * @author François Massart */ "use strict"; diff --git a/tests/lib/rules/wip.js b/tests/lib/rules/wip.js new file mode 100644 index 00000000..18358de1 --- /dev/null +++ b/tests/lib/rules/wip.js @@ -0,0 +1,150 @@ +/** + * @fileoverview Detect classname candidates for shorthand replacement + * @description E.g. `mx-4 my-4` can be replaced by `m-4` + * @author François Massart + */ +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +var rule = require("../../../lib/rules/enforces-shorthand"); +var RuleTester = require("eslint").RuleTester; + +//------------------------------------------------------------------------------ +// Tests +//------------------------------------------------------------------------------ + +var parserOptions = { + ecmaVersion: 2019, + sourceType: "module", + ecmaFeatures: { + jsx: true, + }, +}; + +var generateError = (classnames, shorthand) => { + return { + messageId: "shorthandCandidateDetected", + data: { + classnames: classnames.join(", "), + shorthand: shorthand, + }, + }; +}; + +var ruleTester = new RuleTester({ parserOptions }); + +ruleTester.run("shorthands", rule, { + valid: [ + { + code: ` +
+ Cannot merge mixed values +
`, + }, + ], + + invalid: [ + { + code: ` +
+ Possible shorthand for border-radius +
+ `, + output: ` +
+ Possible shorthand for border-radius +
+ `, + errors: [generateError(["rounded-tl", "rounded-tr", "rounded-b"], "rounded")], + }, + { + code: ` +
+ Possible shorthand for border-radius +
+ `, + output: ` +
+ Possible shorthand for border-radius +
+ `, + errors: [generateError(["rounded-tl-sm", "rounded-tr-sm", "rounded-b-sm"], "rounded-sm")], + }, + { + code: ` +
+ Possible shorthand for border-radius +
+ `, + output: ` +
+ Possible shorthand for border-radius +
+ `, + errors: [generateError(["rounded-tl-sm", "rounded-tr-sm"], "rounded-t-sm")], + }, + { + code: ` +
+ Possible shorthand for border-radius +
+ `, + output: ` +
+ Possible shorthand for border-radius +
+ `, + errors: [ + generateError(["rounded-tl-sm", "rounded-tr-sm"], "rounded-t-sm"), + generateError(["md:rounded-t-md", "md:rounded-b-md"], "md:rounded-md"), + ], + }, + { + code: ` +
+ Possible shorthand for border +
+ `, + output: ` +
+ Possible shorthand for border +
+ `, + errors: [ + generateError(["border-t-4", "border-b-4"], "border-y-4"), + generateError(["md:border-t-0", "md:border-b-0"], "md:border-y-0"), + generateError(["lg:border-y", "lg:border-l", "lg:border-r"], "lg:border"), + ], + }, + { + code: ` +
+ Possible shorthand for border +
+ `, + output: ` +
+ Possible shorthand for border +
+ `, + errors: [generateError(["border-t-4", "border-b-4"], "border-y-4")], + }, + { + code: ` +
+ No shorthand possible +
`, + output: ` +
+ No shorthand possible +
`, + errors: [ + generateError(["top-[0]", "bottom-[0]"], "inset-y-[0]"), + generateError(["right-[var(--some-value)]", "left-[var(--some-value)]"], "inset-x-[var(--some-value)]"), + ], + }, + ], +}); diff --git a/tests/lib/util/groupMethods.js b/tests/lib/util/groupMethods.js new file mode 100644 index 00000000..799bb858 --- /dev/null +++ b/tests/lib/util/groupMethods.js @@ -0,0 +1,180 @@ +/** + * @fileoverview Test groupMethods utilities + * @author François Massart + */ +"use strict"; + +var assert = require("assert"); +var defaultGroups = require("../../../lib/config/groups").groups; +var customConfig = require("../../../lib/util/customConfig"); +var groupUtil = require("../../../lib/util/groupMethods"); +var mergedConfig = customConfig.resolve({}); + +describe("parseClassname", function () { + const targetProperties = { + Layout: ["Overflow", "Overscroll Behavior", "Top / Right / Bottom / Left"], + "Flexbox & Grid": ["Gap"], + Spacing: ["Padding", "Margin"], + Borders: ["Border Radius", "Border Width", "Border Color"], + Transforms: ["Scale"], + }; + const targetGroups = defaultGroups.filter((g) => Object.keys(targetProperties).includes(g.type)); + + it("should have filtered `targetGroups`", function () { + assert.equal(targetGroups.length, Object.keys(targetProperties).length); + }); + + it(`should parse classnames`, function () { + let name, actual, expected; + name = "overflow-x-auto"; + actual = groupUtil.parseClassname(name, targetGroups, mergedConfig, 0); + expected = { + index: 0, + name: name, + variants: "", + parentType: "Overflow", + body: "overflow-x-", + value: "auto", + shorthand: "x", + }; + assert.deepEqual(actual, expected); + name = "md:overflow-y-auto"; + actual = groupUtil.parseClassname(name, targetGroups, mergedConfig, 1); + expected.index = 1; + expected.name = name; + expected.body = "overflow-y-"; + expected.shorthand = "y"; + expected.variants = "md:"; + assert.deepEqual(actual, expected); + name = "lg:dark:overflow-auto"; + actual = groupUtil.parseClassname(name, targetGroups, mergedConfig, 2); + expected.index = 2; + expected.name = name; + expected.body = "overflow-"; + expected.shorthand = "all"; + expected.variants = "lg:dark:"; + assert.deepEqual(actual, expected); + name = "sm:dark:overscroll-x-none"; + actual = groupUtil.parseClassname(name, targetGroups, mergedConfig, 3); + expected.index = 3; + expected.name = name; + expected.shorthand = "x"; + expected.variants = "sm:dark:"; + expected.parentType = "Overscroll Behavior"; + expected.body = "overscroll-x-"; + expected.value = "none"; + assert.deepEqual(actual, expected); + name = "inset-0"; + actual = groupUtil.parseClassname(name, targetGroups, mergedConfig, 4); + expected.index = 4; + expected.name = name; + expected.shorthand = "all"; + expected.variants = ""; + expected.parentType = "Top / Right / Bottom / Left"; + expected.body = "inset-"; + expected.value = "0"; + assert.deepEqual(actual, expected); + name = "sm:-inset-x-1"; + actual = groupUtil.parseClassname(name, targetGroups, mergedConfig, 5); + expected.index = 5; + expected.name = name; + expected.shorthand = "x"; + expected.variants = "sm:"; + expected.body = "inset-x-"; + expected.value = "-1"; + assert.deepEqual(actual, expected); + name = "sm:-inset-x-1"; + actual = groupUtil.parseClassname(name, targetGroups, mergedConfig, 6); + expected.index = 6; + expected.name = name; + expected.shorthand = "x"; + expected.variants = "sm:"; + expected.body = "inset-x-"; + expected.value = "-1"; + assert.deepEqual(actual, expected); + name = "gap-px"; + actual = groupUtil.parseClassname(name, targetGroups, mergedConfig, 7); + expected.index = 7; + expected.name = name; + expected.shorthand = "all"; + expected.variants = ""; + expected.parentType = "Gap"; + expected.body = "gap-"; + expected.value = "px"; + assert.deepEqual(actual, expected); + name = "p-5"; + actual = groupUtil.parseClassname(name, targetGroups, mergedConfig, 8); + expected.index = 8; + expected.name = name; + expected.shorthand = "all"; + expected.variants = ""; + expected.parentType = "Padding"; + expected.body = "p-"; + expected.value = "5"; + assert.deepEqual(actual, expected); + name = "-my-px"; + actual = groupUtil.parseClassname(name, targetGroups, mergedConfig, 9); + expected.index = 9; + expected.name = name; + expected.shorthand = "y"; + expected.variants = ""; + expected.parentType = "Margin"; + expected.body = "my-"; + expected.value = "-px"; + assert.deepEqual(actual, expected); + + // "Border Radius" + name = "rounded-tl-lg"; + actual = groupUtil.parseClassname(name, targetGroups, mergedConfig, 13); + expected.index = 13; + expected.name = name; + expected.shorthand = "tl"; + expected.variants = ""; + expected.parentType = "Border Radius"; + expected.body = "rounded-tl-"; + expected.value = "lg"; + assert.deepEqual(actual, expected); + + // "Border Width" + name = "border-t-4"; + actual = groupUtil.parseClassname(name, targetGroups, mergedConfig, 14); + expected.index = 14; + expected.name = name; + expected.shorthand = "t"; + expected.variants = ""; + expected.parentType = "Border Width"; + expected.body = "border-t-"; + expected.value = "4"; + assert.deepEqual(actual, expected); + + // "Scale" + name = "scale-x-150"; + actual = groupUtil.parseClassname(name, targetGroups, mergedConfig, 16); + expected.index = 16; + expected.name = name; + expected.shorthand = "x"; + expected.variants = ""; + expected.parentType = "Scale"; + expected.body = "scale-x-"; + expected.value = "150"; + assert.deepEqual(actual, expected); + + // Margin arbitrary value + name = "m-[0]"; + actual = groupUtil.parseClassname(name, targetGroups, mergedConfig, 99); + expected.index = 99; + expected.name = name; + expected.shorthand = "all"; + expected.variants = ""; + expected.parentType = "Margin"; + expected.body = "m-"; + expected.value = "[0]"; + assert.deepEqual(actual, expected); + }); + + it("should support named capture group", function () { + const regex1 = /^((inset\-(?0|1|2|3)|\-inset\-(?0|1|2|3)))$/; + const str1 = "-inset-0"; + assert.equal(regex1.exec(str1).groups.negPos, "0"); + }); +}); From 02ef9aeb86b0e2bf192ff7108ce430df120cca21 Mon Sep 17 00:00:00 2001 From: francoismassart Date: Thu, 6 Jan 2022 10:21:26 +0100 Subject: [PATCH 2/7] fix: issue with negative values shorthand --- README.md | 2 + docs/rules/enforces-shorthand.md | 3 + lib/config/groups.js | 6 +- lib/rules/enforces-shorthand.js | 15 +- package.json | 1 - tests/lib/rules/enforces-shorthand.js | 214 ++++++++++++++++++++++++-- tests/lib/rules/wip.js | 150 ------------------ 7 files changed, 220 insertions(+), 171 deletions(-) delete mode 100644 tests/lib/rules/wip.js diff --git a/README.md b/README.md index 240b72df..6f10914a 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,8 @@ If you enjoy my work you can: ## Latest changelog +- New rule: [`enforces-shorthand`](docs/rules/enforces-shorthand.md) merging multiple classnames when possible + - FIX: [correctly handle number values in config](https://github.com/francoismassart/eslint-plugin-tailwindcss/issues/86) (by [patrikholcak](https://github.com/patrikholcak) 🙏) - FIX: [`transform-none` not allowed](https://github.com/francoismassart/eslint-plugin-tailwindcss/issues/84) diff --git a/docs/rules/enforces-shorthand.md b/docs/rules/enforces-shorthand.md index 4b108ca6..ed3b6809 100644 --- a/docs/rules/enforces-shorthand.md +++ b/docs/rules/enforces-shorthand.md @@ -26,6 +26,9 @@ At the moment, the rule will not merge mixed classnames (e.g. using regular valu ``` +Also, unless you are using the `classnames-order` rule, the order of your classnames may be affected by the fix. +If indeed, you are using the `classnames-order` rule, then it'll be automatically re-ordered during the next lint process (depending on your autofix preferences) and you won't notice any order issue. + ### Options ```js diff --git a/lib/config/groups.js b/lib/config/groups.js index 96ade485..fca08ec8 100644 --- a/lib/config/groups.js +++ b/lib/config/groups.js @@ -1056,19 +1056,19 @@ module.exports.groups = [ members: [ { type: 'scale', - members: 'scale\\-(?${scale})', + members: 'scale\\-(?${scale})|\\-scale\\-(?${-scale})', shorthand: 'all', body: 'scale', }, { type: 'scale-y', - members: 'scale\\-y\\-(?${scale})', + members: 'scale\\-y\\-(?${scale})|\\-scale\\-y\\-(?${-scale})', shorthand: 'y', body: 'scale-y', }, { type: 'scale-x', - members: 'scale\\-x\\-(?${scale})', + members: 'scale\\-x\\-(?${scale})|\\-scale\\-x\\-(?${-scale})', shorthand: 'x', body: 'scale-x', }, diff --git a/lib/rules/enforces-shorthand.js b/lib/rules/enforces-shorthand.js index b0363d0a..e544fbb8 100644 --- a/lib/rules/enforces-shorthand.js +++ b/lib/rules/enforces-shorthand.js @@ -228,11 +228,13 @@ module.exports = { const hasX = sameVariantAndValue.some((c) => c.shorthand === 'x') || (hasL && hasR); const hasY = sameVariantAndValue.some((c) => c.shorthand === 'y') || (hasT && hasB); const hasAll = sameVariantAndValue.some((c) => c.shorthand === 'all') || (hasY && hasX); + const isNegative = ('' + cls.value).substring(0, 1) === '-'; + const minus = isNegative ? '-' : ''; + const absoluteVal = isNegative ? ('' + cls.value).substring(1) : cls.value; if (hasAll) { const all = getBodyByShorthand(targetGroups, classname.parentType, 'all'); - // const patchedName = `${cls.variants}${all}-${cls.value}`; - const patchedName = `${cls.variants}${all}${cls.value.length ? '-' + cls.value : ''}`; + const patchedName = `${cls.variants}${minus}${all}${absoluteVal.length ? '-' + absoluteVal : ''}`; troubles.push([sameVariantAndValue.map((c) => c.name), patchedName]); cls.name = patchedName; cls.shorthand = 'all'; @@ -240,8 +242,9 @@ module.exports = { } else if (hasY || hasX) { const xOrY = hasX ? 'x' : 'y'; const xOrYType = getBodyByShorthand(targetGroups, classname.parentType, xOrY); - // const patchedName = `${cls.variants}${xOrYType}-${cls.value}`; - const patchedName = `${cls.variants}${xOrYType}${cls.value.length ? '-' + cls.value : ''}`; + const patchedName = `${cls.variants}${minus}${xOrYType}${ + absoluteVal.length ? '-' + absoluteVal : '' + }`; const toBeReplaced = sameVariantAndValue .filter((c) => { const candidates = hasX ? ['l', 'r'] : ['t', 'b']; @@ -263,7 +266,9 @@ module.exports = { } else if (supportCorners && (hasT || hasR || hasB || hasL)) { const side = hasT ? 't' : hasR ? 'r' : hasB ? 'b' : 'l'; const sideBody = getBodyByShorthand(targetGroups, classname.parentType, side); - const patchedName = `${cls.variants}${sideBody}${cls.value.length ? '-' + cls.value : ''}`; + const patchedName = `${cls.variants}${minus}${sideBody}${ + absoluteVal.length ? '-' + absoluteVal : '' + }`; const toBeReplaced = sameVariantAndValue .filter((c) => { const candidates = hasT ? ['tl', 'tr'] : hasR ? ['tr', 'br'] : hasB ? ['bl', 'br'] : ['tl', 'bl']; diff --git a/package.json b/package.json index 0d2a3471..56891387 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,6 @@ "bugs": "https://github.com/francoismassart/eslint-plugin-tailwindcss/issues", "main": "lib/index.js", "scripts": { - "wip": "mocha tests/lib/rules/wip.js", "test": "mocha tests --recursive" }, "files": [ diff --git a/tests/lib/rules/enforces-shorthand.js b/tests/lib/rules/enforces-shorthand.js index 08a034cf..979119d3 100644 --- a/tests/lib/rules/enforces-shorthand.js +++ b/tests/lib/rules/enforces-shorthand.js @@ -45,6 +45,13 @@ ruleTester.run("shorthands", rule, { `, }, + { + code: ` +
+ No shorthand possible for overscroll +
+ `, + }, { code: `
@@ -55,9 +62,24 @@ ruleTester.run("shorthands", rule, { { code: `
- No shorthand possible + No shorthand possible for inset
`, }, + { + code: ` +
+ Cannot merge mixed values (arbitrary + regular) +
`, + }, + { + code: ` +
+ No shorthand possible for gap +
`, + }, + { + code: ``, + }, ], invalid: [ @@ -74,6 +96,19 @@ ruleTester.run("shorthands", rule, { `, errors: [generateError(["overflow-x-auto", "overflow-y-auto"], "overflow-auto")], }, + { + code: ` +
+ Possible shorthand for overscroll +
+ `, + output: ` +
+ Possible shorthand for overscroll +
+ `, + errors: [generateError(["overscroll-x-contain", "overscroll-y-contain"], "overscroll-contain")], + }, { code: `
@@ -87,6 +122,19 @@ ruleTester.run("shorthands", rule, { `, errors: [generateError(["mt-0", "mb-0"], "my-0")], }, + { + code: ` +
+ Possible shorthand for negative margin +
+ `, + output: ` +
+ Possible shorthand for negative margin +
+ `, + errors: [generateError(["-mt-1", "-mb-1"], "-my-1")], + }, { code: `
@@ -120,16 +168,158 @@ ruleTester.run("shorthands", rule, { generateError(["md:rounded-t-md", "md:rounded-b-md"], "md:rounded-md"), ], }, - // { - // code: ` - //
- // No shorthand possible - //
`, - // output: ` - //
- // No shorthand possible - //
`, - // errors: generateErrors("top-[0] bottom-[0] right-[var(--some-value)] left-[var(--some-value)]"), - // }, + { + code: ` +
+ Possible shorthand for border-radius +
+ `, + output: ` +
+ Possible shorthand for border-radius +
+ `, + errors: [generateError(["rounded-tl", "rounded-tr", "rounded-b"], "rounded")], + }, + { + code: ` +
+ Possible shorthand for border-radius +
+ `, + output: ` +
+ Possible shorthand for border-radius +
+ `, + errors: [generateError(["rounded-tl-sm", "rounded-tr-sm", "rounded-b-sm"], "rounded-sm")], + }, + { + code: ` +
+ Possible shorthand for border-radius +
+ `, + output: ` +
+ Possible shorthand for border-radius +
+ `, + errors: [generateError(["rounded-tl-sm", "rounded-tr-sm"], "rounded-t-sm")], + }, + { + code: ` +
+ Possible shorthand for border-radius +
+ `, + output: ` +
+ Possible shorthand for border-radius +
+ `, + errors: [ + generateError(["rounded-tl-sm", "rounded-tr-sm"], "rounded-t-sm"), + generateError(["md:rounded-t-md", "md:rounded-b-md"], "md:rounded-md"), + ], + }, + { + code: ` +
+ Possible shorthand for border-width +
+ `, + output: ` +
+ Possible shorthand for border-width +
+ `, + errors: [ + generateError(["border-t-4", "border-b-4"], "border-y-4"), + generateError(["md:border-t-0", "md:border-b-0"], "md:border-y-0"), + generateError(["lg:border-y", "lg:border-l", "lg:border-r"], "lg:border"), + ], + }, + { + code: ` +
+ Possible shorthand for border-width +
+ `, + output: ` +
+ Possible shorthand for border-width +
+ `, + errors: [generateError(["border-t-4", "border-b-4"], "border-y-4")], + }, + { + code: ` +
+ No shorthand possible +
`, + output: ` +
+ No shorthand possible +
`, + errors: [ + generateError(["top-[0]", "bottom-[0]"], "inset-y-[0]"), + generateError(["right-[var(--some-value)]", "left-[var(--some-value)]"], "inset-x-[var(--some-value)]"), + ], + }, + { + code: ` +
+ Randomized classnames order +
+ `, + output: ` +
+ Randomized classnames order +
+ `, + errors: [ + generateError(["rounded-tr-sm", "rounded-tl-sm"], "rounded-t-sm"), + generateError(["md:rounded-b-md", "md:rounded-t-md"], "md:rounded-md"), + generateError(["border-t-4", "border-b-4"], "border-y-4"), + ], + }, + { + code: ` +
+ Possible shorthand for gap +
`, + output: ` +
+ Possible shorthand for gap +
`, + errors: [generateError(["gap-x-4", "gap-y-4"], "gap-4")], + }, + { + code: ` +
+ Possible shorthand for border-color +
`, + output: ` +
+ Possible shorthand for border-color +
`, + errors: [ + generateError( + ["border-t-indigo-200/50", "border-x-indigo-200/50", "border-b-indigo-200/50"], + "border-indigo-200/50" + ), + ], + }, + { + code: ``, + output: ``, + errors: [generateError(["scale-x-75", "scale-y-75"], "scale-75")], + }, + { + code: ``, + output: ``, + errors: [generateError(["-scale-x-50", "-scale-y-50"], "-scale-50")], + }, ], }); diff --git a/tests/lib/rules/wip.js b/tests/lib/rules/wip.js deleted file mode 100644 index 18358de1..00000000 --- a/tests/lib/rules/wip.js +++ /dev/null @@ -1,150 +0,0 @@ -/** - * @fileoverview Detect classname candidates for shorthand replacement - * @description E.g. `mx-4 my-4` can be replaced by `m-4` - * @author François Massart - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -var rule = require("../../../lib/rules/enforces-shorthand"); -var RuleTester = require("eslint").RuleTester; - -//------------------------------------------------------------------------------ -// Tests -//------------------------------------------------------------------------------ - -var parserOptions = { - ecmaVersion: 2019, - sourceType: "module", - ecmaFeatures: { - jsx: true, - }, -}; - -var generateError = (classnames, shorthand) => { - return { - messageId: "shorthandCandidateDetected", - data: { - classnames: classnames.join(", "), - shorthand: shorthand, - }, - }; -}; - -var ruleTester = new RuleTester({ parserOptions }); - -ruleTester.run("shorthands", rule, { - valid: [ - { - code: ` -
- Cannot merge mixed values -
`, - }, - ], - - invalid: [ - { - code: ` -
- Possible shorthand for border-radius -
- `, - output: ` -
- Possible shorthand for border-radius -
- `, - errors: [generateError(["rounded-tl", "rounded-tr", "rounded-b"], "rounded")], - }, - { - code: ` -
- Possible shorthand for border-radius -
- `, - output: ` -
- Possible shorthand for border-radius -
- `, - errors: [generateError(["rounded-tl-sm", "rounded-tr-sm", "rounded-b-sm"], "rounded-sm")], - }, - { - code: ` -
- Possible shorthand for border-radius -
- `, - output: ` -
- Possible shorthand for border-radius -
- `, - errors: [generateError(["rounded-tl-sm", "rounded-tr-sm"], "rounded-t-sm")], - }, - { - code: ` -
- Possible shorthand for border-radius -
- `, - output: ` -
- Possible shorthand for border-radius -
- `, - errors: [ - generateError(["rounded-tl-sm", "rounded-tr-sm"], "rounded-t-sm"), - generateError(["md:rounded-t-md", "md:rounded-b-md"], "md:rounded-md"), - ], - }, - { - code: ` -
- Possible shorthand for border -
- `, - output: ` -
- Possible shorthand for border -
- `, - errors: [ - generateError(["border-t-4", "border-b-4"], "border-y-4"), - generateError(["md:border-t-0", "md:border-b-0"], "md:border-y-0"), - generateError(["lg:border-y", "lg:border-l", "lg:border-r"], "lg:border"), - ], - }, - { - code: ` -
- Possible shorthand for border -
- `, - output: ` -
- Possible shorthand for border -
- `, - errors: [generateError(["border-t-4", "border-b-4"], "border-y-4")], - }, - { - code: ` -
- No shorthand possible -
`, - output: ` -
- No shorthand possible -
`, - errors: [ - generateError(["top-[0]", "bottom-[0]"], "inset-y-[0]"), - generateError(["right-[var(--some-value)]", "left-[var(--some-value)]"], "inset-x-[var(--some-value)]"), - ], - }, - ], -}); From 1b54e49f0e8a69a057e69648889fa2dcfb457ebf Mon Sep 17 00:00:00 2001 From: francoismassart Date: Thu, 6 Jan 2022 10:22:14 +0100 Subject: [PATCH 3/7] 3.1.0-beta.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index efdfbe71..93fba689 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-tailwindcss", - "version": "3.0.4", + "version": "3.1.0-beta.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 56891387..41363acc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-tailwindcss", - "version": "3.0.4", + "version": "3.1.0-beta.0", "description": "Rules enforcing best practices while using Tailwind CSS", "keywords": [ "eslint", From b1a5a2e1837d85361e2cd4d613156a94b31abbf1 Mon Sep 17 00:00:00 2001 From: francoismassart Date: Thu, 6 Jan 2022 10:32:59 +0100 Subject: [PATCH 4/7] README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6f10914a..6236c673 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,7 @@ If you enjoy my work you can: Learn more about each supported rules by reading their documentation: - [`classnames-order`](docs/rules/classnames-order.md): order classnames by target properties then by variants (`[size:][theme:][state:]`) +- [`enforces-shorthand`](docs/rules/enforces-shorthand.md): merge multiple classnames into shorthand if possible e.g. `mx-5 my-5` should become `m-5` - [`migration-from-tailwind-2`](docs/rules/migration-from-tailwind-2.md) for easy upgrade from TailwindCSS `v2` to `v3` - [`no-custom-classname`](docs/rules/no-custom-classname.md): only allow classnames from Tailwind CSS and the values from the `whitelist` option - [`no-contradicting-classname`](docs/rules/no-contradicting-classname.md): e.g. avoid `p-2 p-3`, different Tailwind CSS classnames (`pt-2` & `pt-3`) but targeting the same property several times for the same variant. @@ -123,6 +124,7 @@ Configure the rules you want to use under the rules section. { "rules": { "tailwindcss/classnames-order": "warn", + "tailwindcss/enforces-shorthand": "warn", "tailwindcss/migration-from-tailwind-2": "warn", "tailwindcss/no-custom-classname": "warn", "tailwindcss/no-contradicting-classname": "error" @@ -167,8 +169,6 @@ The plugin will look for each setting value in this order and stop looking as so ## Upcoming Rules -- `enforces-shorthand`: Make sure you group properties inside a shorthand when possible e.g. `mx-5 my-5` should become `m-5` - - `validate-modifiers`: I don't know if possible, but I'd like to make sure all the modifiers prefixes of a classname are valid e.g. `yolo:bg-red` should throw an error... - `no-redundant-variant`: e.g. avoid `mx-5 sm:mx-5`, no need to redefine `mx` in `sm:` variant as it uses the same value (`5`) From 0714fc635c8300ec3386a100c8162f53def94fcc Mon Sep 17 00:00:00 2001 From: francoismassart Date: Thu, 6 Jan 2022 13:55:59 +0100 Subject: [PATCH 5/7] fix: issue with leading/trailing spaces (multiline) --- lib/rules/enforces-shorthand.js | 6 +- lib/util/groupMethods.js | 24 +- package.json | 1 + tests/lib/rules/enforces-shorthand.js | 587 ++++++++++++++------------ tests/lib/util/groupMethods.js | 16 + 5 files changed, 352 insertions(+), 282 deletions(-) diff --git a/lib/rules/enforces-shorthand.js b/lib/rules/enforces-shorthand.js index e544fbb8..9b61365f 100644 --- a/lib/rules/enforces-shorthand.js +++ b/lib/rules/enforces-shorthand.js @@ -182,10 +182,8 @@ module.exports = { return; } - classNames = attrUtil.sanitizeClassnames(classNames); - // Init assets before sorting const parsed = []; - // Move each classname inside its dedicated group + classNames.forEach((className, index) => { parsed.push(groupUtil.parseClassname(className, targetGroups, mergedConfig, index)); }); @@ -297,7 +295,7 @@ module.exports = { }); // Generates the validated attribute value - const union = validated.map((val) => val.name); + const union = validated.map((val) => val.leading + val.name + val.trailing); if (before !== null) { union.unshift(before); diff --git a/lib/util/groupMethods.js b/lib/util/groupMethods.js index adfd148f..3e3e39e8 100644 --- a/lib/util/groupMethods.js +++ b/lib/util/groupMethods.js @@ -494,8 +494,22 @@ function findInGroup(name, group, config, parentType = null) { * @returns {Object} Parsed infos */ function parseClassname(name, arr, config, index = null) { - const classPrefixes = getPrefixes(name, config.separator); - const classSuffix = getSuffix(name, config.separator); + const leadingRe = new RegExp('^(?\\s*)'); + const trailingRe = new RegExp('(?\\s*)$'); + let leading = ''; + let core = ''; + let trailing = ''; + const leadingRes = leadingRe.exec(name); + if (leadingRes && leadingRes.groups) { + leading = leadingRes.groups.leading || ''; + } + const trailingRes = trailingRe.exec(name); + if (trailingRes && trailingRes.groups) { + trailing = trailingRes.groups.trailing || ''; + } + core = name.substring(leading.length, name.length - trailing.length); + const classPrefixes = getPrefixes(core, config.separator); + const classSuffix = getSuffix(core, config.separator); let slot = null; arr.forEach((group) => { if (slot === null) { @@ -509,15 +523,17 @@ function parseClassname(name, arr, config, index = null) { const value = slot ? slot.value : ''; const isNegative = value[0] === '-'; const off = isNegative ? 1 : 0; - const body = name.substr(0, name.length - value.length + off).substr(variants.length + off); + const body = core.substr(0, core.length - value.length + off).substr(variants.length + off); return { index: index, - name: name, + name: core, variants: variants, parentType: slot ? slot.group : '', body: body, value: value, shorthand: slot ? slot.shorthand : '', + leading: leading, + trailing: trailing, }; } diff --git a/package.json b/package.json index 41363acc..abea47f4 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "bugs": "https://github.com/francoismassart/eslint-plugin-tailwindcss/issues", "main": "lib/index.js", "scripts": { + "wip": "mocha tests/lib/rules/enforces-shorthand.js", "test": "mocha tests --recursive" }, "files": [ diff --git a/tests/lib/rules/enforces-shorthand.js b/tests/lib/rules/enforces-shorthand.js index 979119d3..3f1d92be 100644 --- a/tests/lib/rules/enforces-shorthand.js +++ b/tests/lib/rules/enforces-shorthand.js @@ -38,288 +38,327 @@ var ruleTester = new RuleTester({ parserOptions }); ruleTester.run("shorthands", rule, { valid: [ - { - code: ` -
- No shorthand possible for overflow -
- `, - }, - { - code: ` -
- No shorthand possible for overscroll -
- `, - }, - { - code: ` -
- No shorthand possible for margin -
- `, - }, - { - code: ` -
- No shorthand possible for inset -
`, - }, - { - code: ` -
- Cannot merge mixed values (arbitrary + regular) -
`, - }, - { - code: ` -
- No shorthand possible for gap -
`, - }, - { - code: ``, - }, + // { + // code: ` + //
+ // No shorthand possible for overflow + //
+ // `, + // }, + // { + // code: ` + //
+ // No shorthand possible for overscroll + //
+ // `, + // }, + // { + // code: ` + //
+ // No shorthand possible for margin + //
+ // `, + // }, + // { + // code: ` + //
+ // No shorthand possible for inset + //
`, + // }, + // { + // code: ` + //
+ // Cannot merge mixed values (arbitrary + regular) + //
`, + // }, + // { + // code: ` + //
+ // No shorthand possible for gap + //
`, + // }, + // { + // code: ``, + // }, ], invalid: [ + // { + // code: ` + //
+ // Possible shorthand for overflow + //
+ // `, + // output: ` + //
+ // Possible shorthand for overflow + //
+ // `, + // errors: [generateError(["overflow-x-auto", "overflow-y-auto"], "overflow-auto")], + // }, + // { + // code: ` + //
+ // Possible shorthand for overscroll + //
+ // `, + // output: ` + //
+ // Possible shorthand for overscroll + //
+ // `, + // errors: [generateError(["overscroll-x-contain", "overscroll-y-contain"], "overscroll-contain")], + // }, + // { + // code: ` + //
+ // Possible shorthand for margin + //
+ // `, + // output: ` + //
+ // Possible shorthand for margin + //
+ // `, + // errors: [generateError(["mt-0", "mb-0"], "my-0")], + // }, + // { + // code: ` + //
+ // Possible shorthand for negative margin + //
+ // `, + // output: ` + //
+ // Possible shorthand for negative margin + //
+ // `, + // errors: [generateError(["-mt-1", "-mb-1"], "-my-1")], + // }, + // { + // code: ` + //
+ // Possible shorthand for margin + //
+ // `, + // output: ` + //
+ // Possible shorthand for margin + //
+ // `, + // errors: [ + // generateError(["mt-0", "mb-0"], "my-0"), + // generateError(["md:mx-2", "md:my-2"], "md:m-2"), + // generateError(["py-0", "px-0"], "p-0"), + // ], + // }, + // { + // code: ` + //
+ // Possible shorthand for border-radius + //
+ // `, + // output: ` + //
+ // Possible shorthand for border-radius + //
+ // `, + // errors: [ + // generateError(["rounded-tl-sm", "rounded-tr-sm"], "rounded-t-sm"), + // generateError(["md:rounded-t-md", "md:rounded-b-md"], "md:rounded-md"), + // ], + // }, + // { + // code: ` + //
+ // Possible shorthand for border-radius + //
+ // `, + // output: ` + //
+ // Possible shorthand for border-radius + //
+ // `, + // errors: [generateError(["rounded-tl", "rounded-tr", "rounded-b"], "rounded")], + // }, + // { + // code: ` + //
+ // Possible shorthand for border-radius + //
+ // `, + // output: ` + //
+ // Possible shorthand for border-radius + //
+ // `, + // errors: [generateError(["rounded-tl-sm", "rounded-tr-sm", "rounded-b-sm"], "rounded-sm")], + // }, + // { + // code: ` + //
+ // Possible shorthand for border-radius + //
+ // `, + // output: ` + //
+ // Possible shorthand for border-radius + //
+ // `, + // errors: [generateError(["rounded-tl-sm", "rounded-tr-sm"], "rounded-t-sm")], + // }, + // { + // code: ` + //
+ // Possible shorthand for border-radius + //
+ // `, + // output: ` + //
+ // Possible shorthand for border-radius + //
+ // `, + // errors: [ + // generateError(["rounded-tl-sm", "rounded-tr-sm"], "rounded-t-sm"), + // generateError(["md:rounded-t-md", "md:rounded-b-md"], "md:rounded-md"), + // ], + // }, + // { + // code: ` + //
+ // Possible shorthand for border-width + //
+ // `, + // output: ` + //
+ // Possible shorthand for border-width + //
+ // `, + // errors: [ + // generateError(["border-t-4", "border-b-4"], "border-y-4"), + // generateError(["md:border-t-0", "md:border-b-0"], "md:border-y-0"), + // generateError(["lg:border-y", "lg:border-l", "lg:border-r"], "lg:border"), + // ], + // }, + // { + // code: ` + //
+ // Possible shorthand for border-width + //
+ // `, + // output: ` + //
+ // Possible shorthand for border-width + //
+ // `, + // errors: [generateError(["border-t-4", "border-b-4"], "border-y-4")], + // }, + // { + // code: ` + //
+ // No shorthand possible + //
`, + // output: ` + //
+ // No shorthand possible + //
`, + // errors: [ + // generateError(["top-[0]", "bottom-[0]"], "inset-y-[0]"), + // generateError(["right-[var(--some-value)]", "left-[var(--some-value)]"], "inset-x-[var(--some-value)]"), + // ], + // }, + // { + // code: ` + //
+ // Randomized classnames order + //
+ // `, + // output: ` + //
+ // Randomized classnames order + //
+ // `, + // errors: [ + // generateError(["rounded-tr-sm", "rounded-tl-sm"], "rounded-t-sm"), + // generateError(["md:rounded-b-md", "md:rounded-t-md"], "md:rounded-md"), + // generateError(["border-t-4", "border-b-4"], "border-y-4"), + // ], + // }, + // { + // code: ` + //
+ // Possible shorthand for gap + //
`, + // output: ` + //
+ // Possible shorthand for gap + //
`, + // errors: [generateError(["gap-x-4", "gap-y-4"], "gap-4")], + // }, + // { + // code: ` + //
+ // Possible shorthand for border-color + //
`, + // output: ` + //
+ // Possible shorthand for border-color + //
`, + // errors: [ + // generateError( + // ["border-t-indigo-200/50", "border-x-indigo-200/50", "border-b-indigo-200/50"], + // "border-indigo-200/50" + // ), + // ], + // }, + // { + // code: ``, + // output: ``, + // errors: [generateError(["scale-x-75", "scale-y-75"], "scale-75")], + // }, + // { + // code: ``, + // output: ``, + // errors: [generateError(["-scale-x-50", "-scale-y-50"], "-scale-50")], + // }, { code: ` -
- Possible shorthand for overflow -
- `, - output: ` -
- Possible shorthand for overflow -
- `, - errors: [generateError(["overflow-x-auto", "overflow-y-auto"], "overflow-auto")], - }, - { - code: ` -
- Possible shorthand for overscroll -
- `, - output: ` -
- Possible shorthand for overscroll -
- `, - errors: [generateError(["overscroll-x-contain", "overscroll-y-contain"], "overscroll-contain")], - }, - { - code: ` -
- Possible shorthand for margin -
- `, - output: ` -
- Possible shorthand for margin -
- `, - errors: [generateError(["mt-0", "mb-0"], "my-0")], - }, - { - code: ` -
- Possible shorthand for negative margin -
- `, - output: ` -
- Possible shorthand for negative margin -
- `, - errors: [generateError(["-mt-1", "-mb-1"], "-my-1")], - }, - { - code: ` -
- Possible shorthand for margin -
- `, - output: ` -
- Possible shorthand for margin -
- `, - errors: [ - generateError(["mt-0", "mb-0"], "my-0"), - generateError(["md:mx-2", "md:my-2"], "md:m-2"), - generateError(["py-0", "px-0"], "p-0"), - ], - }, - { - code: ` -
- Possible shorthand for border-radius -
- `, - output: ` -
- Possible shorthand for border-radius -
- `, - errors: [ - generateError(["rounded-tl-sm", "rounded-tr-sm"], "rounded-t-sm"), - generateError(["md:rounded-t-md", "md:rounded-b-md"], "md:rounded-md"), - ], - }, - { - code: ` -
- Possible shorthand for border-radius -
- `, - output: ` -
- Possible shorthand for border-radius -
- `, - errors: [generateError(["rounded-tl", "rounded-tr", "rounded-b"], "rounded")], - }, - { - code: ` -
- Possible shorthand for border-radius -
- `, - output: ` -
- Possible shorthand for border-radius -
- `, - errors: [generateError(["rounded-tl-sm", "rounded-tr-sm", "rounded-b-sm"], "rounded-sm")], - }, - { - code: ` -
- Possible shorthand for border-radius -
- `, - output: ` -
- Possible shorthand for border-radius -
- `, - errors: [generateError(["rounded-tl-sm", "rounded-tr-sm"], "rounded-t-sm")], - }, - { - code: ` -
- Possible shorthand for border-radius -
- `, - output: ` -
- Possible shorthand for border-radius -
- `, - errors: [ - generateError(["rounded-tl-sm", "rounded-tr-sm"], "rounded-t-sm"), - generateError(["md:rounded-t-md", "md:rounded-b-md"], "md:rounded-md"), - ], - }, - { - code: ` -
- Possible shorthand for border-width -
- `, - output: ` -
- Possible shorthand for border-width -
- `, - errors: [ - generateError(["border-t-4", "border-b-4"], "border-y-4"), - generateError(["md:border-t-0", "md:border-b-0"], "md:border-y-0"), - generateError(["lg:border-y", "lg:border-l", "lg:border-r"], "lg:border"), - ], - }, - { - code: ` -
- Possible shorthand for border-width -
- `, - output: ` -
- Possible shorthand for border-width -
- `, - errors: [generateError(["border-t-4", "border-b-4"], "border-y-4")], - }, - { - code: ` -
- No shorthand possible -
`, - output: ` -
- No shorthand possible -
`, - errors: [ - generateError(["top-[0]", "bottom-[0]"], "inset-y-[0]"), - generateError(["right-[var(--some-value)]", "left-[var(--some-value)]"], "inset-x-[var(--some-value)]"), - ], - }, - { - code: ` -
- Randomized classnames order -
- `, - output: ` -
- Randomized classnames order -
- `, - errors: [ - generateError(["rounded-tr-sm", "rounded-tl-sm"], "rounded-t-sm"), - generateError(["md:rounded-b-md", "md:rounded-t-md"], "md:rounded-md"), - generateError(["border-t-4", "border-b-4"], "border-y-4"), - ], - }, - { - code: ` -
- Possible shorthand for gap +
+ Multilines
`, output: ` -
- Possible shorthand for gap +
+ Multilines
`, - errors: [generateError(["gap-x-4", "gap-y-4"], "gap-4")], - }, - { - code: ` -
- Possible shorthand for border-color -
`, - output: ` -
- Possible shorthand for border-color -
`, - errors: [ - generateError( - ["border-t-indigo-200/50", "border-x-indigo-200/50", "border-b-indigo-200/50"], - "border-indigo-200/50" - ), - ], - }, - { - code: ``, - output: ``, - errors: [generateError(["scale-x-75", "scale-y-75"], "scale-75")], - }, - { - code: ``, - output: ``, - errors: [generateError(["-scale-x-50", "-scale-y-50"], "-scale-50")], + errors: [generateError(["py-8", "px-8"], "p-8")], }, ], }); +/* + +*/ diff --git a/tests/lib/util/groupMethods.js b/tests/lib/util/groupMethods.js index 799bb858..f105b131 100644 --- a/tests/lib/util/groupMethods.js +++ b/tests/lib/util/groupMethods.js @@ -36,6 +36,8 @@ describe("parseClassname", function () { body: "overflow-x-", value: "auto", shorthand: "x", + leading: "", + trailing: "", }; assert.deepEqual(actual, expected); name = "md:overflow-y-auto"; @@ -170,6 +172,20 @@ describe("parseClassname", function () { expected.body = "m-"; expected.value = "[0]"; assert.deepEqual(actual, expected); + + // Leading / Trailing + name = " md:gap-x-2 "; + actual = groupUtil.parseClassname(name, targetGroups, mergedConfig, 100); + expected.index = 100; + expected.name = "md:gap-x-2"; + expected.shorthand = "x"; + expected.variants = "md:"; + expected.parentType = "Gap"; + expected.body = "gap-x-"; + expected.value = "2"; + expected.leading = " "; + expected.trailing = " "; + assert.deepEqual(actual, expected); }); it("should support named capture group", function () { From 3033bc839c3301388a9810dd4e594499d8bbfb54 Mon Sep 17 00:00:00 2001 From: francoismassart Date: Thu, 6 Jan 2022 13:56:13 +0100 Subject: [PATCH 6/7] 3.1.0-beta.1 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 93fba689..f6cf3075 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-tailwindcss", - "version": "3.1.0-beta.0", + "version": "3.1.0-beta.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index abea47f4..5211fa3e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-tailwindcss", - "version": "3.1.0-beta.0", + "version": "3.1.0-beta.1", "description": "Rules enforcing best practices while using Tailwind CSS", "keywords": [ "eslint", From fd7e3371cdfec6f1f72fe5b5aca57cbaae5a7310 Mon Sep 17 00:00:00 2001 From: francoismassart Date: Thu, 6 Jan 2022 20:53:11 +0100 Subject: [PATCH 7/7] README --- .github/output.png | Bin 49222 -> 128900 bytes README.md | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/output.png b/.github/output.png index 59324fcf2197c67951dd9d70c728902e5c004853..ab2c928692e712ca188c27094664cda3b0cd3c1d 100644 GIT binary patch literal 128900 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

@=^vYO65x^H_!H;|yq-1Zmgk)3yydA#J7kGnbJ< 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 literal 49222 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 z zZ4l8QZBP=u7_Xnp>oqkZfP5o=w8DX$2aIujkX#iQ#Ld#p-U@RtFjFbz$m^5!v3bc7 z>BQG>zq{;qL&MCLBM5fiFT~CX7?Zz=Re>%40>OJcH&BR#6UC0m!^W~E_l(1E!ADmZ zy?#8(e%KHRd-2c!AN9(dg$avJD(EaY(g*TIroYJHJnCWCODm6$;oe}GbHcMa6J_|= zyD)3&nh&x8TH#*oWL|ZhgGEwxnu7hqqQNg^jT?KB8}P$ZHeY-4n+B_s8ZFh>X!gdP=5BWx7;_6NkU^@Xio7JNCJF5t8%14H7_Q&z zBIC`|ljQ{QUIH z4>#k`c&0xpwTsO&dEeI8g{A+XidRo{MA<-KZmgo99En(y@{`xD3*L7x`V(7^C)=EN+n?~~j{aqKY*nyukW|%X5jB&{ z?tYOy>_!i))_)a6VVPKne|Xia?+9&~COXU+j;_r=$hf;0kZ=ex@#$VMgb)@t>D;)_ zZ(r?tnd0BBusIK12?yE z86=Aj*zA`A!&rNN56m@yu3)?YN0U^=QReg@&*5B=fke6G5TQiekn<=D>5eRoRKTy7 zgetCZ*AV5h!MAnM88+fh~FVikj zu4Gn(MiojOM{o-Quj7Mwcg_rt=Uir1?Ley>-OoU3*Y3=PdRTprF<%kTn@-UaHv4g{ zdFKr5O-i+OsThwZ{Jy#9%^&X&Dn#pmvyr&`~qN`kMRU0OyI=$&*`YPzCmwQ*fsTIaYgijLi)L(Rz6>$vqsJEmiYJ}Z(U ztN$|2mzJ}9pppwddhDm!}?_Tp$?UqdC_8k`5w%n(( zBth22g^Wmi>z!BQV!ln`nVWuVmArMF?IEg?yOlz9{hdKcF@xl2Qk2PR;J4A+D{63Q z>UT9@PtM}N@Nb5m91@1GL_n;9;SWgZEY{2Ked0t4hD}k;KPrA+t`nI&et_I$B0@=W zd;e+Y7_c?4)W7NR`N6V2V_xWX?zNq`5&VtXe~BVLO%H}K*}*4|LAqv^f`4+~J`UswC5=&9q#eJ~- zhM3|y{Jlmz{_OQ!{dU5gzVJNSqWtPFfBY^pnk&-Y<`MO^0LpoCH zdi-$fEM9vd(^MffyV-AwEw)&@rLlpIsJB+1A7AomzwzgLREW61uMFaK?60Jvrjos} zg}dt%GLWkD!s%Hn@7zaWrtri_u_leW9=iEHFb_>jVmhUfOu*Rk4U~!XrLyK-NTk38$vYvX}(LPclWSFEmvbi@tbWu{?Mm+MV0NR~sW) zqGQdg*bZ0HE|*+0#FA_d9K!@Nd(0l>MVbp(%~ zt|HH+=zt0}{(`cwq?7|9malU~=u(54M1De*)8_NKb_wHSuahz>n@N*-FUI+SM(>x8 zRGx4t#iZdpx?+&kKMJoJY0vMj(#W$3uWN}9T7AKL%BI+Y@?7eS;Uk|;>IfIvIZ*uFSwoLzf2TAD&?`mG zpEQ&;_4V}WR`crxyJOeakXF2ZIVKCL`gvKoe)Q{xj%opVB+uYL9MRJ0%5Qe$niHuP zbsMG~g+pfOa6vew-Y(8e_p`Rgl^-pkzan{2i(zFEV(g5T#|Q1_*zTKe zNV7}1RwzT<<}p9-(A8r|k4j&j%A4UA-l;qJDm31I%PLPQ)PhGqeCqDZ^Km%N zhl!UGJAB@mYzpoqh#u;(9e(dG%(=3LO%~Dgdm4K}sMmY8D%ad5@zQi<2DHZ#m&Ic__JubKJ)K|MbD%~9)5r!q zz}B8px1EbbA@yPM{L~O`V_YG-4Gq9!0+9c#zf(vKOu3+)yw|+B@-GpQjj!p!LX~-C zW`oTh2AjPKAVltI&!g3LbSll>9i)G7CLgDP*HrrExD_H$O%N2W2;Tg0V+f8J-=Ls# z5C}v*<^;q2siHhO5j#+5$B&bh+m%uECCRj3EnR@8rj{LFIzC;b?;#-eb50hj-An(C zF>|RKb6$a zt}dZ!5r*18MvbfXfY=(kocJDvGMcmeR3|N4oi6metcH5j*N3^N7VE-_s1-!rY00$Z z=X?aTmBOEi$YDM9^;e6=dg_O{yC&OOyL!u)yT4n~`QO!{2zj8o7NjM_Dz|4XXGJkQ zWc*HaKEzZQYnheqGsLnd--LOsb%0&$qPg##r5;07C}+75d(U}##By(c-_CJ!J9K(j zWqX~^9*UQhOJKAG?`8ug7r&=u>A2M=dI>tb0Zlg<&BP4$T*$as4i-qW5_JghuoM(w zQM#j`EQz8j1A8k;gKT&_Wq~UVY+R&}0wFzndeywnS`EFluo9r8wjJ7qAV-t9T5DnRY#Gv!_~RhW^hnHN$&%`a4Z)qE);@dE*yh#AI|3 zSp<%(n~$=2Ww1*w%rYrYIq@?a#sma} zgF^?Df0svnciXLW(>`4Ug23xlS=Z%&v7@?3&|$E|A_R@=Sk|zXf5aZ`U-*tyB%D}9 zI)8K9tlvvTuNR$(rT1dA>ob!pBXDg~he=>>h>2NchM3B4t z`K|g5n}+;zqA4Y1OI)!t1CwZ1i#Nlug6CSEau;1kvMwI!G2OJK1I`%F*R|yk>_c^J zSiKLvHEdz9Ce2rH-)i>*9A+8it>_%9B^PaQgk;M+BNcH%-29hr?vRLSG_(j;QjjE4 zhlaj_qg|ih8r9C)5^nY<1l|*C`54GI>;(^h7jP-)P~`=2{_I&6f@2$k=qaW?B_m0< z&4I*eoNdFV2mMs#o(vV$Df1y~9zQ2g;;rwR-VKh7HFG9RIC90=-zoJND59@3g3V;mliKCjD@jBb>%WYO*hKLes){)mHcDEj_3^91%l-Ed zb+_$Mp7(k{Od zQRy=~)VyY|f7Ty&ECQ7LpmX5yC&jgCYYi8|VA`v98b~4wT8m!A(4r{9>mNK((EkC+ zPp7F*Fm7?ZFT-S%bm#<~&OS}nPiaW(5Joi7A?HpTtnH|JyMmQ-2O1?H&{%Fuhb_?D z+VpafAg!PG=M{N|W5!o5@8<=A=p0rkV{BLRjOPfmev})V#6H29 ze@I`gFEXkvIm+wMqoo3RFpHnOfo{#Mm(v$uNG6B2LuuHym^3DP(yTuqgQ)vQa=p_x z+puXxa+RO`fPm?QCI~i9NuO{8HjQ)++_06>>5gk}aNixzZ6|vZd+1aduERXpjnB_x z`mnxcUDtErSk_5CoV-y}L5MVK(F!vhS7%(qX{YnrBtAiG@>P!hTzYc%N55gf7Ftu4 ziC}vc;Fe~yaLPX4yxqQ$?u^P-e(HzN_lUBCM48pMbc@+y18um|j?;PMCjf$0qTULO zO>zk_^|1&;i;RaJAj^0Cxs zA5w^Kx%7v&W#AW3f$)g^C^u1Ggjn`q^f{P(S#XDFQ*%Jp@nAHQeGO>K3EL3(A?m%W z>nKN-%xi20F_aBCZL2!e@1-8V~@378@IgtqvNy}BdES_-Z3`M5JMc{UB3w;mvU zg<*r9IDxd9*FZxJ@rK_`@qu0RWL)y@-c1C|P$OOw*T~(?7Kyq*MdEM%xuOOJ3M@)9 z8s{vSxX6}?(d5-=wfDuYeSaP`CRzCL=>PibBI1F#-R}v=SFK zxuMwUvKm0cl(>zqXpMX^5&XMnX=Op3kV)8w%24SUHumE~7YN1e_roTsDsAU4KjxC05c zsn&%xg_VKH0)V+(5ZIXp8=yOR3$BQ=`H)o1PIhJ{B$N+$ngvWu!75PT_xkp@fQ8i7 z3%EQwa`q%EzfD$PZ$SW|7NiOq89zSOBdXFTkN?R9*h)!}H}Zy8y?9|ZJ#H3b7%3m1 z&H`X#Q@*~S8?5en#Pa2~$89>&udIo4BzIP&!dt11mc(BJFM{e#N^ zrV%PEaN3rkR}UlBWBX|z5Q@O9-gxmUQO-nxY3sl0C~>E)D;^DhH4d#A`+6+5_NUf* zroJZ5+KoMp-be9JOGJveNKu&X%DbP=v*c-PabtR48Sc3B`D8eOJY9xuhvIR3Vt>k| z@^fCpKf-#dVq&c>Lz{xq1^Mv#%N;9i1EIdJj@g`zD_^QoafVie@faE6WFGhVp^;$Z zYRh|M91hxVR?RG@B2Svt1R-qUQwOzARIeL6k))e*B}aEQKFO1I3V0tCqMeD9tL(cha96re?U4q?T6X0%o-_ zGU6KyZ{zG__gOk}cDEdSPu52a{ELsWzR#4oevK_O-@+tG{|1VvcfBj(Z8d7L_}M!9 zycs&4Yo;$CO`vOkQdp3VpFbd#P;t|;Yw8}U;XH)hpzra?6`Wdhg|VhpJ^H7JWPyL6jqOU<4F#byqZFc z4Euup8%EhA-lC|)%WkY05&{y5 zffIOmPwU?>;D=iXmul2I-H1)E=i$MQ@V!jsP@~~A~wI|(2-|yU8C-e@MimQm#|qX#u!9V1#H&W zzd(-L1rcj32^y5n6K2_tYv}PNRE3W->o1b;?0NNW6*>Jxa}FNZM&pu6TM}k{__+Qn zW=Ze#v_wAUur~CJRnTp|yv?;+CF6NObmW$}pJNK$ z$XU-Eyp__<>pnh5_ z9Vp5b{>C#&&N@I{{N(2NMYaAS^vv83$60h5aH@;5dw7AtUVb7d~}|pF7AuX*o>nZ zZihP0NYHPa-KHT*jh^*&=??)Rr=cubzZr)#T7{Exo+T3UMX4^xc4!%2UCv0!=xN8g z#~1GsFA65*iMBs7XM!L##JA;jF)5+FKrpgj-L{2ZVzIGMZKXyJcSOFLmpJoZ_WLas#_lfccs;{22aj-1LENOMhXKfgI{K%Yl< zo2Xr5@_1C1LowP7y<@J5s8DGC%tRz+o=;l&ahr!E8u;?^W*TRDwyU_J&MWZrYI;d4 z4t&qg6=FY54}WH}-Eku@TDfYE8QyTg=F&v6`&^_7F#z~`LZ$q({IgLW&94MGyj#$_ z%pZa`@&lLMG1#e{FH^QY7V}N`QkPo^A_QGPbVjNC)gYj@t61M|AWS33xwW4R(8jb_ zo3|OH3Vf0jwlTKep*}3W1vS2*&1V__+s2;m>zhJrLiS$CQ_ zDzkB7InSHDVye<-u>{E%5 z@*2Cox^>ZmgS2u{64IZ5Pv+}9He7(S{Y6*1m6^=i&N}MgGz0E&iGYyaoTjS$X{l+O zv{vBv%f?P?JO+6a~Dne14&06_P%a7jg0k_hU9+16I} zqauROEZrgEvC;*JQpo5%AY$4}C}_Vw7kRpclV7#CsV4=Yzy^f4ME2qXhZaC^7Idl& z9_sC_vT`vDV`z^qsChx>I@i&<#S=2fw!|j6?9bM(Pp@V+5Jq+)dHMO)-NNz3=qDZE zq*K9tslqt27M3=H;Fhe87@O#&@r^lxb#i2RPRrqGM@*5;PK_{UVKIye`^2}X#)iS+ zy~W#Z(KDEu8JPwyjk5V$mnRDKvGd?}ReU6+n6#PbWavR&$j8S6AL;xQ-21dK-rfF< zP68XsHJdPt(&WAComXUvI!phzseIFyPXTX=!ZaTPCB3LiDh&3V<9@)eiw?56X>EsL zN=W_kzAgW#D@+#8QCS#%sb<7L49_TH42^N-EA-gdi*E2o7OigXV%)fDw@yD3ZoFM# z04i_={B;l7`WF_k9NsP|%}vm4R4p}`1;${x0V$7E@Kx(Qfu*hL9LM$wXYBaOHFX)~ zw_4%Y431G_Ll|T+X=(k(0%|hbIs>`#Pl3ek0*S8Ep5AZqV_&j-1zVlBy(?=4!6YF> zfE31(^CS}E&VZ3%RhGM`Qkx7#U`-rBV=_eXUY#q#fB?THZ=*^~XEgdKb}H?!1kFJk zL!>RI|6!tDJWpIUibuW47Tsv;d zO{(wm7xxs!H5Ye%GppkBGD_C&mCti&R@>q8&<+&>#&wzpFF9n%%ZR3DD!Yjv>a7== zTs95ZS1BK_c&?qeD$0chlgC@wvxS>C#C0#W9ocC#{vB9eb2B?Zvs@R%r#(_Imze((Y;WVuh%e=qu>AK zc++`F4NCs_B?||4g>Sja_!+uQcp-OX+xskD=u~S`S+NcZWE5db|EydTVSvnTz?o({ zJ!uO5MW0F}O>L7?cgWLxo+3emaYX7PaqX^D9Y>!f!uIE%XBp-#2t5qFCoiOZ#`2dj zx>YV0Suu2M*2r_ZpDiF&@tK;z-V`W&av&QWZMrF4aOS%}y3^*??`EdAb`?e!W?^~2 zm>)>D%R@-U(G?S$Uj(8#2)A1AB=PI~FH*YLgw6IBr z){IFgv#r!Sh)5}se7d}DU%%15I*p04=OxD!D>=f`uLKQQ%q@RQD8EehfB$yA7j4UD zC56>9J_N`TJ+m#e^mxhkQ9+D{)^=sWbOak8l(fDCJ8B(38!A3_f8yxZn9or`0FjQ^ zoHp>(OC~#cdnGkb_+%~i4KNv!!*sIG%OELR_)mjFJ~@@Cd;Pw1pkm(83psrkJ77uV zU|-oTV!N?1uk~3PU3Gc;HkNsU_XfQNRv{H9b3gs_GFQVowB3s^?xf$Y zUBk+-U&Z&dj-GT8Av%d!UhR7;Jw}N{1e<=;UReQ`i|##GX02H}D7tmhQ@ZBnbdSSv ztkKbyC|N~96kS=<;Z0j*9#*`lQYp=zLHCQl%He?=-Pjb($;Yr6XsuKTRcWJFd0GZ< zy_}-1;mtb*iHMhE*&8#nNUYnhn?{s`wgCrNzoLrgHNO=wHPzg2w-HtGpAnyn_5qqHjWnZ3sk-iTz=Ib{fI7PLIMGl2#7hY%y3s8 z(!R8mAD3mtLI)EGYGBYz))Ju(VBOpzsaQlnM=+DXBl@xzA>@dpR4c#LwdXe~u{P;Y zUG~678rt~V9e8Y~xiKL}xaf;Gu=3oqiU+F+HT&aL(K7OJ z5e#&PE@7GX+G>5@JEjW(UI#>{X>Yyt_#Ghd!m7zmR3%sy$mFiP+#`K|FZR&Mneo4U5V)&Q~qeLP_-$tQQg4YpbX;> zMD_KP*^Cf?K@Mvh#%^~P%5PgX|8!KDO|D4W4lGCq_^I6Czs(y|x-ehULu8=Rk_JSA zMkd!xl|e@bOEbZ$_tKMH;G$YaIcKA0&MZg9x*Ifx&>)+~iZ+FS{DeVHqy}c}DhUN08 z+2k&1yMsqsPL7Tt?h%p!>Pv!`nRPSN+$Bgx*sg(v1iVO`66D|yN_@!zo3Iu-D z90!ZFk#APCWdp|SmP+d(P=W_#;WXwwzVPen9>cEG6wg1IF#AqFT zct;EquD~a&t2fy0yLw+q$Rx#_y;H7oFcB2*oBf8WXE4s~o5bf?u-}bRL|P}P?IYzj z(z)Lz-XvDYR(GJKvD(ESX$V20p#~X{3FBFqNyaCH_62Uy({a7}TAXq%lp8O?DQC61 z%(j|E1kkl*jH@uo7(9C0T@(ug<`wrI$zh;E-A|}^IHpCZdYLh&UmW*U%5lEq30wd+ z&w8+6m)o8Tk``ajSf9WiFQR(rKPKlD-&)qqIL|g-k>5J1qj-cq!XU3un-yyC1f|ww z8!6L#BqbPBYFpH_a4kjTE9L&ef})IA{KU#az^*>yc~G#Q*Q5PO1TYgJ)nc5ca=zj34K7EH!B6|*Nm zB(eE#9;27ic5+jHBZunNAo_l6ca%XBOvX3)8KT%egW}Pq(v2lCL!5ga{C*OHKe(cR zPyBmJu)e->_TQMgoVY<$e}dOVNX+`_VY%Cna!$y3W$Cn%G%M<$WHTWD(8Wl^s`!xL zZ>?PP7xs^7x5Kvb@XXZx+wPi1lE1NZXhUF0t=YlGYJ5s2k8M5lXCF>LQ9l@Y zlILW<0r6=sr0zYW4d9_HEG>DLY{{{{a&SXflA1tfY=kM6DH`i79!jr$E`vL|mp^Su zt&pwYxKE!6Yy8;*MOSgp8(1__r%^*cOc-od#Yats8r^Q%WMJ2dpv!%1;dMW58dT_H zLUr*gsnQL1DN7X7I!oQoe^YUZXnlqrr0l*-mcM$2s!$Es@CL&!`5x+qsCDDvOf8&F z3OeWEt*h6+)#*35UMa3L8?U*Z=q`P4)DJHvB61j1&pBDSd8@w#5A6|~Tb}O@R_$lo zWWjkC|FyqeXCG5C6~BSwX7A{h)Qzo3_FJ7Hu1<-CEY6!OL+*WHeWG$NrdmdYWz(Ho zZ0Ek@)AK-qX_!s+Pn#*rdk$$>p!*gxNIy1U&_91#mn?!@GMCh?W4e|*7Z6uqd0QyK>f z2;W)-35t?*x0?MCZ$KnKBeShZDYx2fs@hzT3@e0Ll`xqLZc%7&PpzW8W1qL;=Fty=_nfkR4KP$3`(BABl+YQ&+uv%2 zimIodM`5$ct-7Dp?=spSN~A~GYnZkal@xcc<~0cQ1-i1j0L6@elJjBo>-R~m7!!Gt zzGj;0RiuMYWbmof4B{T!x~x1(Ohj{EXLq5|>aR}Op6PAN9J3n0NXvQcW9H=*7g*{? zT;BuHu3^Ug`A?@?{>0*9y~LI1W5C|S>2?-if2B>FFn(a@yt{Q49laIwxNI|ULH@b0 zI~^p5)GORk)e(b9G3X}fLW<0~8nN2Kx|?Ydc0@Emt4}Pvy5m}2+i%GxrEAQZy_0qB zbR_~O)T(%8X9W#Y#!3#JKFNP6lNr@wM zV_4vOj8pJKAe7C27YQ3oD%fM&8#8M8zF-g&x_0)rhP8_HBYr~Ow*S=p_w&gjF0_w+ zg@xno<9SjlbLCi-@edVK8(lPTZm!!V(_AeS5w0uiYfd&iq2Og3j#Yn3F4o>E4dpl1 z@8`4a)0@agH9tA*#ysw1<{@1DUZ^IMnPc@Gj3wMwxF|gDfWgrFoRusWTnKi_9^q5) z_F3S%YPhAJ#k;4t$p1zOqkWr4iU`aN;|RZAUyx#TX;YBo@${{uPMSfON;)%fUmL48 zed)1Hj)V*bhn^h0qeuz3KS2;d&@ac6Wz?VSkAQK4FtI|bhh-+y)>U%!;MXI-$vj(m zg_B{goL60G;RrC@60UGecF|x|VH4S0i&W7V#k3dAx~9x+o}PG5JP)coEgtROn_coO znrfY5Ua+`(*D>Lzy)L0BAth=`KR3VQQxfYR!}#Sm(wc)PlcGYM_$9p+&^nG+T*;y^ zUX37Mls-k}T%H8Hax%_a!we`m)QFeo`~W(>&adPdw`^l($|1N+41PGnips~}M&JTb z{DJt$_Z0$>jyI19j)iXDMdPhunLlo5k<}#Ve!Rt9snj4|gm6<_zCTcEwH&uww>}o9 zlDNt6bzAx8ZcKXnX?*l*Bf+pTc zNIzw*p(knRipX7HXl+6C*)rD}yA&BioM>_eub_z*RxG(?+0>AlP8{)*S&(mWqz_~0R-3p6?z9Cmm0wu`~=x7RV=-(n$ zmk*vttLrDV-091o^8Nf1a0Zr7s0gg}aDK0}o_u*TJ=YZS3vPWvuI--N6>9!AQ9vqU zbh`03bNeu-;S1l98DyEf30;W~+U27!)11xa+_T2`u^95&1cR!zuLi< zYj)hciSwo3Vq?TEEE$!53L31>l!|0PvB=OS;B;#gdd4;&53k!-uGY4}w0y{b$s+Bp zom7MjnlE2w7l|WWnqYF=7uBWz>kFK@jg+-Ueso)bq`vlSEg zIj!e;bV#H9xotK9D!`o`OsYcuFDyXGrnw&Cn+sJEn@-E8okq1(9B0L=`%&4wZy(xy z=68z|00M+8iZBJQCcOR-xZhR7V!Pi%qT3(}B z$mVKMIN4bRut>DsXZxOOO|3JbTk+3c!Kc)^SqAf5>vg&j24-X{QZD?y_k&cdV4v?Z zZJL}pvGkv5A!5I>)x0@6$Pk%9mT+ej-1R#i{l<#mdig->g}Ws80qDuIAD#EGU4FV`DdVB=xQOzwT1gVQecv-$Pi3KhDw_1zly+j$$!5{vPk!K zd3zdk+-AYS>mnpox`?FYgVXVuc#54m&VHt~eIq{S)Kaq+_B`tdT%cC==lGvh+WT5P z_pl8dc^~MmP`h=}+uJ)QOW&C2|Fgy&3yYe%%b3$r)x^SK4Ex?AyA5o+?=;yoSXh-< znC=3%9Xpmme+WnM|E=U(5%?G%v|sl_E7tmT*U1rm_NL_HQG$Q89{A<-@i(SYG+1Ws zx5Wdj@h_Op0QnNVb#p zf1~`5UIkjz|5HbUzr^{!dmxx}nI4nGMj7|={^za&^%4K)y$VXpw4^Ugy14%HtiOK! z`De?9|AU?a|380R-fZbVy7u!we%qH;_Nm?K0G|Bsx;)rD8zcubv}w(g4H!06>YR=l zbbXsg6PsH8c=OLz3IFO4@ZVe#b^HngWO*(**f}0+?{eRrwjlk2!MsW5vqPP-SJGGi z%`N|a;;|o_2jDEa1sW(kI1ch@sQyhL=@e^lio+*Be)qrWrt$XUM+WjF0E5$VBM*BY zBG)2absrnhu}+jtpWWm-3rn%FbD_(3@{Ac-8`G?e(&eG z?&FF3c>f#@_RQYrKKHrTxz_jdUE{X`*@wH^wr|DmYD$J&W5sS(#}47E+%a6*Zemy8 z&yy?yb|x4Z4cu2x1}(vc?SM!;5}@ea^Sz3W=4{TTG3~mh@{Riv1W)xnDn{j%Y<8R2 znFRC#GUH)?H?rX|L=wr`GYDN{FLP$Yn@T6zn;rkz(a z^t1V>>)>VDHaBzc86_zu3HOcs{5fL&-aCApUw|FYbM+|UWd7`T0R|epk&&HspW@3Y7T>TIE^ec{&ApnR|J1Bq_Z1f(j~jdn2{i9?DfpP?JcHLy_Y?h!Z%aKRW04EK923+fTr`yiERygM6 z&6e&xe~qs*s^h9G6Vr=R^k|{uxD)U%Ag;Pw3hf2mU-V0Q-ycf^aQL51ni5$CEamHL zcCIJk6G`|X*U=AG@6N044R5Yyx|l25&Kmpp1ZJ(A4tFebSRWFgkzKdD4odkKlc0Mo z-)%z#`?~}Q##pDtg862|?b&EwZ7eTB!Dh|$t4kj4D_*ClU6;J}N&P+>u(QkIybCln zz-HFt2{LPs*Imsr9oD|rYHpzqzAc54B>GBtb-JCV8re7B#e@%9Y_q#l4BWS%SR*_- z{mR2psM9sl6+^dGQF=e{j6cZtXHD>x?Vm$9N5ytx?uBdmG_SgZ=sGH4n%y4?J>LX8 z5V~I659_M1egar~o!)iuwYtS3sAa3TW_^?zo=oTtTQoJJA5GkQ80N% z@T4^Q84aJw@5xIV`%K;Ec~i|<_B5^&K@^dO_N{F!HgEyx{sp?a#ASLs_t7dK0WN+iV|ALAu&wUou(ryt`B44H z?@}1bZUilc2(mC_VTCaL0kw5yz@}F+hR#aW{VTcEG&5S(t$M+Shw6AA-}qZ*>-&u# zqEd|oiF8nj0dqe0PD;XWx85%Bg9(7EOy719X8YY?6?+K@w5FAsF>sM|I?$Z?K_`kY z;W_jO>v2Sd2G(0fMMnCaOC<;mCxe#NRd&E)k>=_=9TZHOC%E8fS^79kAp1V=HPd+} z;>LaB_3}8KEsOfpahZr(svMKd(gXkanO*IC+H;FzMw`|Z@Z4a%17C=qc|FC zVGTm7oPYc?R@*kf6mZ@7*F0r%Bz0^t4mYX6wn@%3hWqyWZA4@TGK3FfWMw5Iuk;6CYhTK16X=jn;W?qa# zW|w4~V65zPu+9{vlf;~P=ZE(OVH$X{D~@!0V3NHy2h`6d$NSr1E|jFwHhUS4U`*eJ z5~P;m`Zp5FCdaRV&^iMwIyy!|gCn+fe01!h9h4BcnyEkUiO)Ui!BtRH1vAd^zI$FTdZ5ercxkr*{oU4M$bO9Xv$okl=D{A zs6K(pY0~np4X9{e2dcw@`Sw1DyQ$`iZ9;e>d+^0;einb$ZZ5mFLcEya z)_R$8UGOLNqTBmrr$WFiK}pgRZ<5)(*{>MC+~GSDiWq($O&CFgVKrO8eA;z;^U6*# z6A&vTf_K-DvcSfBcW!k8lhyp)c(CTa;>w>GO*g!i7aRsIPnpO4a`i3MsNQ_ zR{5z8qst9VQr>=R)_Qz`Ar8#s5DM%$CoVM_A|qD(J_?oAX5!B=Shqj*LFB)GS94q+rDVQGH9GZGVRvAAtle=(RGW$+Syf2TZj ztqc`2b5w`+Z32AS-}ec~9#ja42@6&9eBLHTY0=R^4YOgWE!u+!7sl4F{015hZTt`~ z{WKUl{n3Q&DJ!5XNM=~vuIl2Zr#$o$F1;IyM02U`6(W?`FbmD%vQQR41<_p}rFLe} z@04w&0ahb9t5&9i8sMWipN)c8b+5fcw~UJ*)kfVU8u2_6Ow2$EwHlHZfiMlC-Uv?r zmXx#)MSq&A2}xZ3DapNxE!spY(v~m$?tdiwL=lfi^Ss=5=kee}kuvze)-<(;O-kE$ z&(wXe0sV<=E4rK^B3|3rcYtc;ICNyYyBM1Gvu4!9PtyWJcR)h^d1-~SfK>W{KVY+k zYqzPJang|G&TbK;_iN{k0p5!Lz0bXY|4xa;x}c#~2t6wJzTEV#^|vJHx(~vq0Y`4O zRP+-bOpMtwd0_^8dMrlG6mWMO07}6B^x`L*1-|_6++T5`bJ(Ndd}3Y3a?km@ZlI>PA7whk@Dc?_R6MT+BGDf! z+%V7()n3R;Tn!Sv)&w7{dTq8UUlNr>sv|J(GcJrRt4SXxu~0lyfOhwbiYRK;%qow`H`ge0Qx_%>?LS+`P!JK1SK&^pSrVFB5$e%X8;CPnmM|P z$82V5xZI|`rn3F!E3*at;_W&3U5no2%gG^pQ_S${jz9Y@s%bC48gbLrjHFLpr$udF}F z=VZ_T=Gxk))S#^kf;IgfW#OeP6Gfg}BRtHA2{{C>Xc>6gW3SJ#B43NmyppU&>Q0xm1{AFG6i>3}Ey{ag%>AVD4r zCaNIUOWbW21&y|Z0I?Jn=Q91x&u%(yE+-n-4i9^6@A&$8Wz&N%?LB}vVanGTUbW<)$xN=oTx1_{zbk&&+&AVVSn~iNs*fHsI&RKHHsvfHD)%Yq^?qnzZ>xr?gV5LyRP^@C{qO$iM z80vphFf(Krg%-gGir(k*i-n#Fc3mzoAI_zyU%DPr_wbnwU#e(KbSqDitKjIyo3%8{ zgD&^-JOSk~GIhnrWT$i7PvM#Iy6?Wt!+y_B4@finAX%+p*^q1Qzj8zalb~L7Ibn zK0C%*l1E8;F4oYj5h47rTC!3Yp4m}ybaZY-kYPeyLg^WGm_wPL zu^%vskR<|P8L|y9_=&8hSJ-ysqu+_`E)cv(hEj4EqMyQVOG8+pP92C6UZV^8UB}zB zPAz{;>=gbbnw;t%>^3(EkK5iPXPs<^-=xUZZp9x{Z)?_0pw{TpSGF@V4)u_boE9jr zLf4T=UkU@lx#dJ0m%Z8351yj#r1$7u#%7y|S?g6WIIdJTgZS@b>7+nzJ<_VOYaxEA z%SQE=PQZh~j(0$*IK0=@Fd)@(+gS;iWgaQ(VM$bTDdMPPVJ&RloTvO=GZD;|;QOmh zkf-IoZ^+4neD3isc?OagUcbH!Fp%;J=zJKn`A%CtW6VN&axsZbFH=)P=8=Q_o!ts` zL{e|g_1sdCm#TpMls&%X3c4`WI^n04Gis?>n(aMhPT!(=QmBA7_`M7<%ZTgqJir^} zv(yf&>7}oE=73sp<86Tfh6c1t0`FJ+p++)LXi%$c`o5* zl(|VNp!d9JvFQu&c*qEli`K;Yz}e67*gd~>tXLQFe5?ocqc@LZ0U9!dy z=B1Lhd{=B-^^I*HbD{>H;^fM*7i~tW&#Clv#j;<07!m}qE zHSIZ9Nmou-(E#AuEeA0Sc(*qYq#7s8yH-`lYZ9bwGWXc-!(7%b5~j73cf*1QwPYEuTNcd8_m^ zTBx0%%uWEV;61tpyxR0v?jP(h_2@M9S9vS{10eUF7PMu+bBB{eavHwfU9xwm{1Y+Njl0)9N%nKS+}IO zG2{F#HXf&w*jXY}igpn<&pK$f8!i!wqE&kKdgG4CpM>V*!!V-35zs-cZE49vq=J+M zI>SLCv5@g>`neg#bL3pLmR)}bX1?PgcZS`n%c8Um%YtODb z3zGb_dl%h0str~Mystxq6!>3X#u4Q$CB9|ggT0aFWnr&_Tl#Jds^jO>p}tg9+NO?l zXw80R3GIu6?Mg#B0qs_jmavzu!4Y-Dyei;rSI+CUzW)r`!Sy|J2wD6j?Z-CQUza8c zJ21i(Pg?qRLhbb#)D1Ft-u4RqrjkkPCx0yu&E%oj?JL5UT`(NBB9-3^UtGE>BxQoR~ zNXgxM{V{~Nm?c@=JRo4RSE4+jk2df8COt2J8cuH6qx?%8jvk%{r&)LJPCH={Czjz$ z|L~&x`iK*dfdOW>;h@68JwUV~b;iVgsb*V~t$uz8pTn|%Rb3Stc;!$g`gCh&li~}9 zrr<&X74&;8Z6(Kkt7Ee;>I2ASoIeX^WY-W{Zv80^D5yVon<_eK-d-9)W1}8v(=?dM z!6k7uz=&ZH7^R4m`s}R_6bm`>W*%TtmkG=&^53BVEEe{uD6Qir#*v>MWw^V|?{}2#EKNM`EYMn7{07rsu}*!myA5PmbAgfwPl9X>QyHj` zaqvyI7V6ZK>u{cGPimFC-3_D&H2yR$#ZC$$l80wM*|>ZgUR-$ezA1cbvDo)%B(yse zrr0n4;IY6?U@*61bei++-kY*65X&tyUzqo!iAm?7vM_^P>BAmsnVt;-(o3Uzurl6r z@6|8*v~I6knX~$x2MEW^+`F!Jc=jq&yBw^lb#LC@KJXc`CpY653CHX`{u1Iz=oR!W zC+Q{GCZfx(XP6wM1Np23L!n>DNu8|0SGxv!i40Q7mf4)$ybT>?*LM6;H3+6qm1IVc zr;x%+YvY!$uQPm{)#4hdr8M8Ec=1>#Uyn82TWApTEv|N+K{cD6vUb{tHquL_&kxkJ zR@TcMPKcGlTXC?zu9=DGYvsh{oxF|@W68a)=cJ2YsXr|Gr7WTr=VdhT*jD9eJ>v(! zyY!D57X&h{Lyfn2`5l&*Z|1_C84==YEmfnOs+@SJZK2p83@C-;LX>(Km#qC&WvocSx4Q<`cRyGOl#JpbceoJulr5(P z{-)#^HP55yJdwgD)_}N|gsI~OaMDWW;hZ54+R)IaQWI-8ZA(cb%!^TPveq2X)XJ)W)wGia(_jUV#nHnKu^P-_Y)4E-s z2pU;pY!V7aD;znR{w&sZJ3jjU(d8(-9JwV7Zo?+}dUV0Nk7*Tg&1)=Lv-Z(G^N1PO z7w<+>xSC`adSwE5m>Bnn8W*PF$}okJDhXIsP7elyzg06Is){*OmF>^Ao*?z(EFWq} zWH>5OSh8qDsv3M!Gp1apg-8aP6N<ip}#(u4CnM!Nj_0&?gZ|KyK zf!DeY9u{q7IW?#H9O7@};VbFYEWTUPab_Mw3CDn0tLA6Bd}GG`t(Fy6dZ`J9Wb^B0 zK%vKoEY8FV(fU*_WC-Q*93$2pWS^?t1=MruMZJNvWlcLy`SB6%9An`h;>n)lS57>< zPV}_FrJTFmGYKwrIQ0&s@?F_{*2)kXT|n~qZu9JPLI8y}iy!#bS^zaV5sOnXF1Ka8 z*LjE9CA$&s5YcKpujsx;;8BbmS5oA`XB?GN_}sNWW4u)&MqMY4YiyGjcqO#_V?D~l zxl;0g^Zp2JfdhZ{Cq&^YlpIB6kn{z`&NfoV$agMA*%2m zG_jt*m`7$0oI_UgrTMa`6g+tOUgTld?MX&imciXPIi~EroyEQC;VpZ)Ysy=4Y z^+wRJH<wiWU_GiiNPFZR+4JNlGy$HgYSjx%Q@25*`7DAQ36&6rB~PI z^0^{s;nKz!GFI~Qh0YtW*etH$c)L!GrQa>V;zyE_k$DRtkvsgX-5^pz0HACyw2=SGeVePmR_VdFNe(UB=U4cADUjUXPJl zjg^PlO)WLCrqgBapR~qL7N)U}CZZ?6UgDn``k|usan4*ay$TS$e86U1#w2D44-5y= zR8LSc7ug(HpEa_d@&nYz>}CGsFyC3bQ^Ulq6LtYEfP_D-C)7~`Xt3Ez7hE~pmBGu8 zrf$o!Y;efa)MFssOl`MXrY2Y{R_Vq^0c@?26Iw?VLo6lNNGd5ePr~0X+)%V2smC5e zik8W6m!uLtKZ^{iDKR@~h{#}RV@lPPH?UTf(+*`lItmYija{k~uTp`X&H9}1+0_+% z2UWeK78_M_{ri8<^2@eVP8PqLt1mUO_i66dzNE>3RU8)jJn%3oJWR1!xy9LayGmjM ztPJF(m$)mFeI@~@o{m(L8-p{V_rQhFS!$QEEe^f zhj8D2^nxvw*DbHQz90)UG)+glQr@X;usS6Dqy|{&yikZ$gsq_;JW2hs>9h(k75i1F zn%E?QXt*5+RxDRQi|y|KoGxt~-#}6=iGZwkMNToHy z3=U21NkeK;n%09V!Hpf;j-uAlN^M&(?K4B`f}{}#8ma8nlUf({gx@{QXW9FI6p*dN z>4bSOtD+dUC!aEM{M&Bz2C+fp1yiZC?bq)!Zd?_jXG~GgFXPWZ;#J48EJXrR;lUJd zW)F_9ie@(dV-6^z5fh4W`)wDwz#80rv%2Z+kRac;(ydEvaaF_`Bl~;`4Bq)&&l^ZFAEPJ+k2J7 zfqfe8xc%!{KP&7jmfv+BoJhX1xkAMTN#QYEjI?%d$sr=xA`I|j+k9fhP-WHSC7k^S zw))aeazKQk-yRdnXk*MTm5o)AIU=ny0EEf1$0`}wLxiB9F!t}2WCMqRf{C4V@~GR4w*OH@|NEQGWzMSicE1_v@$t@mq;PayDpZ`=0TQM1%{`0_I zSD&YC)7I0QN3TzP9WQ%2+2pUiS!x8PJfoM2cbYU+8}5i5(Y8M?NyM_)Ic|TL8$?EY zgAwcGXGQgya~jL77ixTxK{X9cdz|7jq3vl}dD=8DR1={OV#?;F_GRhZPpkx6p>+yA zJdDG@!N-rKdGsvsiCUySTj#61Qt!eih=`Uz$@(%ZUa^ao%*`xd}Uf7LBeIH%*xq>XdI(Gr9>Z05Z6?pysnBShI?6@ z{oVmVeDdmy*5XOa3V_T1E(A2|wLt<9TPMTFmi<_;+YTvXXn4K9w%OHL0Ymo>&WDMG z($<~Vqb%&z*`CjZ8&fcJmR-*Y0Ve8FfZc<^dCmmy42{F*86sVK>DTO+CtkS-036E1 z`}zBY%kW8T>xAiM$@}=O`IKWY>R719^A&>>cFDQkp7_${_x1~a(-|PLy!@Y$CD2;J z1JO(G)pFu@YA6iXvJI_MXP%rpubevLhX1yCN*hE^FJ=U7cmSS^@Ld%W&)J2RQoGIakz*1(t)UCmiNyLm zGqn20hWz|uAl1CB)_e$_zAJmDQkYh<4Q&|<`6ZA{&hQi_bcHL-keV6BWV9t(8k6FD zC3ZU+N}R}bC$yssO&2=C;n6=Y^JP3F!uZDsZpn#Zssf_vka|ENR`!>9N=He%dv|mNOl+MJUR$&)H!BuU*{=$L?Uk`2 zKV;*MtV4!reOEmR{@Dd=D_8jrEQq>@iIU1*N)LwY33 zeV>bWoxOUNw{jROvXUg3qly68ZEaY)EHJ3O9Ne@x50+U z2|V3aU;)c=NUY>N!gqo*`{1Ds~m|B;FYBt6Ui*U7(8%eif(dX^os z!KuqhNYo;@v4R!I)e79e9n?ckH`Cg7%WIQ{YD-r1k_^xKIw8*X=y)O+(n6atq zc&qk#V#AeZR9%)KOTD^$NAbhCvOT~)kR*^p^wb#UT`~)SeT}TU28Zp%>JVMNCpmyQ zL~g8b(eM>G{w2~{q{$g12_j6TEoG2|w5B*L4DPWATG(WSeK)!AC%q(dxUto+#7EAU z-p>gRUmZj79SLe;8O*0bV_*aXTfd`iBsCdAMlaPMjSEM}Gm&x?oNsUGuJtNQnS3w) z2?v?{URG~$9-3yW9TJBwNV{8shw~n1K1*FZwnNynmf_|lKjT%pb>8&y0;Zd<%CH$? zdXgN~S~c>EvvRMRZa`hQ$r?^ayA>=~o@Ha>ZA@*r+AcwWvFk;SobF3cED+B=X;r<1 z38{AJk59@liZ2y0+fTY6Qg$-_0L!wsFzo1fF@+6JbQPk+7I|_OQukxaM2b&og{Ev2NPODST>^`3twQhWJ zTKt!|BpcD!vVf^~#e99tb6FY}>~%w07r>z<6&@5_oFRJ3dQ^1teCEM{AN^>C_mV@| zx~WDrTj;l2f{xQXUr=uS;@9z^5TMvGl&GwZ`n|6Vapp=Q_d^_(oKR2v;5u|8Kn%d(=H87s#0-t@Z8RuX{x2C{P9K{#zeALf4S*fih`=s?& zJ)p^3SX|{Ztt-$Bf+7hCkbBwhB#P=D`V(|(Qw+)I#pAYA1Xc2<^yDTo56F2Tb*H*U zT&B!kW-;wKHJ=fFnM&DwH6kgwTC!emnSs{@EQ<-ngk2@MB5s%=gqlecKrM`LW>Lk% zH?C8C+F~EiC{THBBM%dldt^_&`2Kp&1&VJwd)9jrEjX_~L;_2wpOoN>nj-nGK6cU_ z4Dz#m-UkQzHH@Od8;j>Md~dG{9`@Ig7{Up>$*LS9Ot;^|xm?=aY98Ls7A)n(i1)@q zKKpIZoFM5w557m(!E)Ti{7Ih@=dqdq!5=QH#Gz&&|Kg~_v`7X3Ewws<%CSnksBb8D z4!GM?H($r%XBTR1Dm0{F_9e=xyfQOP18WuSOrrHn-JI#7q_^_M4&G>n^4hT(Lw>&v#A)s1poG5%Wb9$*Jv6Z-lYO&RHo5+Ug43W+A zuiH|P%8s$M-n`t-P8FXCYD_%bvYbz;+ls)#^U>zrk3s90H+k(aPdf5Y)PdPxqalN+ z+VsIZqfMoFn%a0_NGjz)&sLV`k?3BU<}hGq+n?LVfdU`ZYu|^}tE|~j9i0@l?sEQER*Q24|Uto%i`;`sYv-s0z^Sf~g2SLwe z2>#D08 zrhE0BS=N(XasjT()J*FFTIp6pd4US|UtiHmT$RSYHpZ?X-{k+-dVCA4$A!zkLA!yf zrhS-v+g%6q&tAM`#vd_ZLOft+EFjxf+JJgVs&C^==ZAMS+6-@#bP}V8fc_G?dvsKw zgBVqFcY3aPmHxscEL1i!lAP_QWMvS3A19-;-`k*epvZ-?-R5Pmavq{fcS8F>NS63O z`oCx8H;XHPp+0`-HDBJ^phXy~MU_4?y!G9#B>XX{3aNE0a(-8gZ|rFy%+YS%v8>qc z;NX9e$B1#N<%g1f#3W8EWOW^qxu@~5Ut+kbB47hLE{h6`E#^&pLJ1Gw$p7f4 zOW`4GTT$uQ@!udV8^OAGS5G$ufPL)oZn@YiPOgr}kFgHdA}KA>WN4H4vY0Gt{@L~E zg8~BAO13H(2I6m_b|+AcICx%B*z1w87rg}(#qD6aEoDiBRwP3srepq2nPOOzGLRQ* zhuUZP@q~7mZ%416sQRWGEx(RD(7wbV5CP|xDD^o>d?bJMxBe9w!P7(R$3xVLhLpm# z>Q3ZAi&tqq!}a+7M_bA8P2O^(@liS*fs(Lqq%ff&1FYq!h}0iEyLN?2?c#0bXCY9! zvp02)t2RD(kqkt{Lo)9Q0hiO<@D9F{K3ND28Y8>&lT$#2yVaZap(%-vK^7uKSIk(6 z|FW1#$&P5@I9vhGw8iInF0)t3$vcUXmr@z_P`>Cy0L(l#tsXpUu-mtObFP_Co2~+kM2Ja^$kIH!GYRwNJ>IDuqG*+y4mT`a)y55~H7Z|U+!3U{TuWIYoFM*&$v4{Vc^L`LTYUQ*- zA)B@#HBd!*2PPiD;L(#EyL7M(-1bm{yg)QLu^4TY{8lUNX!Px+THy1&^tp_9$Ev(L zjyc($nI!Ne2d3l)8(Y?JLV>Cg2OR9ZfoTVPK)st8_eRvAD?o$e{%%9FAMC_rV+v4~ ze%Ega%>L$d@!(|&M8 z_;tgb%~kd|tNq7QGy>YxwLI6=#F9ocRy-MYkZmDn|KNTE67F;hhPpASmF*TcTcHD) zlhr)UJDK_FvJxRb-^Qfj7KWgb20$E7Qq_4yi_YqIB%k?m^o@AWVp)HA87(1)Fdv$D zOeOyzqtRGjtiys_o66yQ=s=>fowZ_P(gO0Lq2ABMj7ji`ozmww7OsjV*W|6RkC_CcVl$n`7e>-+sCsK{%8yvwRPDg*zzvUBOI&e1oWS^2VH}*m zHyG>c0=KuY;qE0fY_LkK|6xTW%{T8d6CAu!Vj+Ws@gHG4j?8B>9eeVRh0kVhmFi$@ zb6mp`)#!TiekET|;8(jVl`dJ&VzaC1DrR+4t@rr_&I2AU9a~~E zV9uwknU#`uKQvQ9ek9w@fzkvU`_^YW6V6-a+}S!Eh3^kf2eUU@k$i@gVv~cPsO^0r zYa(1XMAitGT-1JOg{Kzo+ew8G?+stXY1X{*t&P&R$s)oK_s7!klP>S&RS~Z!4Ji ztwjB+o@^(*wrF8rOl4UX*sA36BJok_$fdZkxdq3*!1?$N8fSNk@0ICZ93RX!A#=TL z0t22bYX8S__$0N8sUNrR1BFl?%)H(|2EvQorGsMIInQzoZC|aLpSeD1OZQvNw?HRV2I*} z_qH+{lIp&Nbj;M!jJF;?3v{FS;?&=LD<~Z8XIa%OD-ux3aC1s`m432@mDlQ-=-Ky_ zz7XSy+*ryA-BH#vYbpQgXi}f_L?+I}f7BqBkxxHT5}sul54EHpFsqXgnjc&jG(c`Lz~Tm{0w)V&ZY|=sS%~;CEZWZOUN7neEU*vno>}=$TeEm& zTg_xQBD%;E|Mq3taN!(^~7Pt~Pz%*KinJ{jj4D zH^~*E?AkuH-IK5L`%zeNQJh~@??>Wc4eEOX>(>h5{OqP^emv^VR-=4hnCl*H_)^F4 zgxbHn`=mtz@YLflol}-sozhipa55qB_+$A#y@i4y2N3XIOxpqOWO1eiA2?Sqzs|jX zxTymDAYrF}w4QA147b`P+R=t#5mGSx8-J$w{>>S!CYf8}04ppD{_1OCqK;AWv}--! z+kmv{YMJsUkD}utAe%wj0tK-NwrNl#FLIz?HLZ|=r!W4l8TOv~ty`*`7>^~lhmn_z zh)X#_)<@Pyl@!gKR*KPhTtPxa`rj}l7Xmbu&kZ5hYh=fvPe*&bWz+i+pou$@O_+`- z|D4&)?sFd8^rvX}^Y=Bi>K`Hst5V8)SGX4sKFMrqdNj*xyLt;ldA~}2vQs4TU z=cpoct|cLI66EN*1cC>ep#YO7FXmdR)_lk&V)}1C{Qgm9#NVo(I~v0lG?Ktba*XQ! zr)t$UX+D(a{|G*GnSCT+wi$b~`_}1TmuWX}SF>pUj(d2KH|4HM8ujVg)A`&O{}Za( z^>EQVzK6+<$f=~NE98gt^kn$ID8OhEm4ExOf5W{-XmN}j7cI~QLd)?2GSy(zM^6)2 zf#FY61u#EX%8s2+gw^?M+~er~&px#y3=fQ>jMa}DjQ{n2T%)g=QENW60u%FK10x9# zkCH9W&h{Td;A(#TY*Y6SXeTMT>=4RSNMKTqa}Nx>j0R5C{7Y=A@4ubuWEAknlF$(> z7}F{_fR3F!^qfA}yoD@3@$2*_ibDX%Fxcj$j``jA^`iUocaZS|OPwPuKix15doJkICe&MGkQzN_Q-psnIN^!C=2gCIWc8%*Z8 ztc+G678Xp{RYvv=ja`jR+!i$)9_|6E4;7cQ6Wm2c>?Wv8qHdcqXQOT!4Bw z<@n`@?~lycj4oc=-K`yaA@qGJ(h>ERbG%*Y{{<7Q&f)^137{MR`L`kdKehzd5r1fY z9arTY$61mb8m9aM^8dPddZhnx>z?QRcVnXcA7fJfFebHpigAOng7}&{X@;Wf`W|k6N}-7Ufl+)&F`A|I0DM z*l5Z?)96b}QNA1Y5}fd68T9|I8TSt`4%=&j*4@gg&(pq_jh{w!?Hx=mB07R_a7X|A zmoNW6UC?{`S9&}ED!IM5Kz{ujbFS;wLCnD(8|TdbwC4P6@!R76(?S2M?YlI0HJ!{x zvKzkqqd7+E6L1u6DIjrihfmhY$*}ji+d$E&LecbM zc0MI_$h&5)TmrFGG};fkRykfxL^v$E9vns*2%h=eE*A)R&19R3CRQs#pEddpYSrf4 zTZ#%u_wfpgb!~8(g0;z=c|zOUR*o9%7C+!0lGqE*jLxqfAfOvMFfB&~bK-u>8(SK?I#BSd9J9KWweA;bj z5`cGYB%5za+_x*ko5_8bGHT8zA*shcgl&k z|E!yJ-P#3+bN^s(`kQB_q91YY?A0~;%su^8KXSUgVbmOomeb_3yhnJu25V`S*&v1s zVj=>pmAyM}R?X!I{4bep<~%~h9KDX)*@^Foy+pdy{a0K@d7(EyE@SU6Vlj>p_qT}A zIw%-^bBmCeBER@rAn&Bg>$I@mIo`SsqWF9z?$7Dh!)Nz;-sK!^R8#%-dv=s6s}1oT zK!wf|tc_i61B?c18rJPtQ!aTj3cwgcYHI(4_6z!3?A(Ix4(?A%g^|1al-B~!e3L)= zo|Yr5wtso8o4`aziXv>7aRXTPIop?R?er(?aWAg{A4GVY?PNP!^67^LT|oCU{M`f~ zJ?~3ID6CtrZaR-5$mGnbgs<4A%n<(Y(2NrQgC6%C>cIOmhx^5w9Zz!}MIii^NN)#GU0a^!_Gu4S^>w(@zNSv(?pk=2Z^h+dY>s_@LL|jm{j%}t9a+ZdwqRp`N+Dfr zc2;1tN7vq*VgF)VroLFfR^qmtlhBST z;~4)BzRsuDwB>IeuZ{=Df>6lFM!(+tHS>(BLmw2Bq=dQWosVer$U$3kTG01Ge7*A) z+|eH-Iva>TUCpY9R8~vk&C1TL;x(Wf;=~Wrro7W(vE$`f|90W40YS^#)zv@kK2v)R zR(lsqexnN>euerz3wGIN*^WEbc3EMDnU!v28S1__b-Vv)SE|cn4@_3A&vfmnW-lkf zYQ6&<9%F^->BWGyYg?a&*##57ih<7lPVF`s$B6u3p)Pu&=H0dSU9+D7r{HbC(U<9I z9VndKau8tnoXB3IfKgDtUkzxmy66Rvo9}pcI5}MU}xLgX@ z(45pab(Z7Cay5DVvemt((&PdfylmPUIB&AXn+rFwUM`3ocQBZOuhXH7;(A@VY>%cP zp}Ft$Idyy*62iw*J5JniZ-?oQ0obfevPVEy?#Eeq)m8%9FMXJS-+3DcDXoOE^Iq$5 z&#chu3jeOCg58J`y%azfOEezl7Tc?4hBn+O6CQiL$a@|sXmTI8wn_+13*%<2aV8a# z{)jtRKqZw+Yo?1v;0?&Z>Jzu*CC*C2J;{RN9Yw)vi(dV@O{W>Hx2-eeFTAqfE-^JU z1r|B6v9I5JX%0?o^5bODG^_rCac6%XTYkBaN-o|m7n0ao3^>$`u+uLiWC@!9f}tyG#+ zZ-iNir2Z(vjMhfC7J5lc_yxu+^Pw_9yKZEi2Sqx;-4x$&o_B!w&KK((ZN%t` za59WJ9Ol+Z0WoFeWS^z*Wv*rCOyTj>w!O_YXZ_}lx&@Y;KhUl%#;=DW1H!+&T%t7{ z38cTCyu&-0jO^gg3H&~y5j_s%#_|dDzv5u=VyRL&;#sDvL=jH6dnm$ zrPMw`W4?nU?#3h9%U))}>&LVI8=)1MOns*#LQrNbXElST zc<$_In2}b;f0qzhWk24Rbvo^7U0EF_#Eef>_0uZ+Hz|$HJH5N?kSACa#HO%a&y1u| zL)w#{x3Tv8_G6%G>7Gfh(c{lBte4hKvqdv%zu|mdXC-^71>{Dd3&vQ+w^^tILQvQQ`-Ink{8Kmr zSl@+L16d6OZId})9{gD3#U6i@EGbU-bAENjc)$ISBx#W{FfWh08 z>2%#^Q##8R1S}rHh7cJg$lCnYf*7_i0W~D=pxeJvZG;zLncg1<;bA5a7mN zx%NRqT^e$?+ApCUUvJRh@OOUz{WKEkrKb|V+>EA93y=FqHSa9LWl+L_mN0A~B+z*o zz5lW4HSb-#S$X?)?#!_gqZIJc$Q8~1a^_;<#mCt~PvdH`Ox?ukHCQN5_{|0CWh&rs zJ(OYLO;qAVm{%8dtf5~Xf(3we9dfT$vexr1pYL5mv4gO(vvidw7BRjurVfvbT}4)S zP@I}KEjZ7N%q0VrY)tzu%RiM)DQ=|q1u;SvC)w;bR-cOPzuv8>*b*;H-A~AGcmT-k zp}hTNPL3>;oBk-a?cH_zhcFEe*%fC1j`a{(`tsrHzU#PTMdlezQH2LbE1AI?;d7AR z0eAE|83WBDw)GefTc0E|!}K;Flile%Gb3ok@T&z!xO>XtikIYjmNP7UG(I$U{$%Rl z9}P(GSG+_}>dbojGtaQ?xMTLulO-4Acg2LF{Lj8W=?D4DeQQT1U>!Y*CJWIt=VTz5 zW8Ak?Wjn#_RG%O|LX2HF>q{&n)7PM2>DPpz!pXc3TynY{7hfD4I$?uzB zhJAgmbeIH}>o{4AwVKdgy-DimNCFmp4n);|!~i}tSP8!5j%*%j?NHj*+uffN2xgZ* ziOmUUkYV!6z=6!F!T0rd%H0um2=39hGgMutDQ$Gcn<91bPJuY2g*hGuujFX?J#gaY zYpvL%LEp}$?QVjc6y`a){K7Q0Slwjp2I7>9KhNb*BYCo?BBmX5MQl2qY93_-T7AJe zgzD4@QaY-jr8n;iaI#)yPyNn1(h$4-F=3Q-oscR*mZbQu)lJR$dZ=6caLz8ZBU5_O z)2MEp75{q<`Df>*c>ss|C+@8@M^gTL^UsjOjw7NrP6DNzz0SjTv@*<@D@+h-}Uh2F29ZQ$EGN&@iTyzD(CdBj;fT!=HBtBI$T zdR;!~rzm}6Y-uXw+~dN*!3xN{P_G#qo~#FYnD8kLocZj-I{}VXA6smrG7^67ljQ~5 z$nG2+`V_aH`e>Dp3s(KFR@OU+owoBe7nQa!jW>~`wG6LlAFEDQckE_cc9f*aHO^Z- z+P(9?Ef26)lVA^!eg$DhXa;8i#tSZzdRfu5(&j^>Q!tZpA3g=DG}z6Ohw7D>N|+MI zdR*~qGv~3aF;D@a&q{a|=YRx9%mxisv+*>vT$&@Xtt8j~)2}Zasg)~_#2Epi^>?`;E{PG_Ac-~|0KL9hAYn^MYbA7*`m6+X@3DV3D z!)G$)Yq=qzgf|0}Qs?fT+k4LtmJ$SdLRQ%Nh4178o`MQkYrUI;Khfm@K4|mfJIxF} z{l;`!iK=aB1q<(Xl|EWMtO+>QX?5zXbgW0GIF?X*ts0xkm`Mj~A>aDsXnMb|SuCW@ zF+V?;n$nqGBRwH+V1qc0hvi!23JW z)<36zhP6l6YGVgFJ*fvDSurWMXj%U`DjXsodd)^iY4sECQW(WqljC>LqBHO62G9(6 zr*XB;I@UDIuikNhC&i->N_JW%>eiX|<C4O)_hx+DjE2%()e&wwrd>FSJI3(uaU}VowL1bLLCbL(U4dku%4OqoHw;Ao0 z`;;v$dzoDh&B_)wN@!T%EJ-)2=VYy69O4+@9VYXV5^ho35GiuJhi%2?@Vpr6(As6f zm-cM|_5|T`VY!68zGJ!>t~D=ZS_EF8*0ROaumBL{WRjRx#ye~vdN%^cihAvf(1;IO z-l1MD!2g)xz6hhw8Jtz}jJ0)yFG%3giMlZ*O?KTHVl(LB$4J6;8A+kXZEFV_<#cnS zTmhPu<`r|YGiMJws|)o~oX!kkW$fPbX?3CiL~L-QU#>F@`u6gB-+^rx;z*;d=qgZ9 zpi^RYLFdwU6yG+g*NS}dBAUn}*v(z<9Qfp;&KCp8h7HUz-mx-yC4;cjPFBeTjMy5c z61KkXXwko*tMmFNc;WDJP-@q{op~Vc8L>Y)zT)Zi25UBLjccOdn*4(6`BZsJDZ2~w zAPj-C`nc}LEu6>VhdKAF-t*Peg+xooeg%Trr{^A-+!hGc)6=oY{67H(T@= zemwhG&q9zN#Ppv1;^Ye*=Z5n^((`_rji(P3H*eeWG$tOD)s{OBA?Fjly0u*c3%Vn{ zi{4+(_b)X6iTJJRq&^?rlszHrC~_R$$en5m$PPi)o#qhNaLa;3vkP3LhmSHzj`5$h zvVj-bt;Ou(bv^^@uR0%*HeUZefh?@tZ_QdVl*wi0Y*(s{HK~>_BDs3Dgw&xT?fvPW z02_j(L|cJDcZb;Ei?vL+4mVBO?2+Pq(`^a z)3cQzg zKTPK6Srf_;F(Hw;;nSR9_eTB+d_@-vK)4;hQ-l6Qkg)}%#7`z2l-cX@t=v9G%$77W zD1@x9sAt4~Z|3c!EAilc&$&~{{92%zNL^7|407s@l9h+o~3YYJ!cv5g1 z*zuyoog-oksveSH4xc62BB#xc!14Siidm&+SqUTi8DeK`L7r)k(GFcOlDJ}DyowB; zfE4X%buzcX&cxQpgsNVV7nl-(6&A1J0k2Nd=<=hcKPo=TP8EK}rj5tWpLo<-688>W zU^dYE%e%{Z_t*Fa?18Wy59gRdtALbBuHNL{##oT5##cMQ#>KnbN?ScvfqhN6=x5s- zlC~JWQV2&je&D8m!@L69s~Etp_tJMETMm_JQrk8CURUx1w@6E(|2C~=Ux3CF2X&6M z;#0fUCuQP`d%s4i78^1L+vA?W6dD_vj%YOV2~ZCLiimFX&NrP!%uRP+87xX1tYWWc z@F}qAp~*>3BigHZsHM(!4=v{g@J{u>FS(S$rI?CmTz`TjbT2cdV?0%* zORF6+RVupVm2q2b=_ULsgK+|)%O~@)HhFp;d*Rmo=mm=cc;iMqbL!%kGvD$UVpW=% zMqW6&`4MSvZ!{s!((kFoMJKO3A^&UpbbNV`JcI1ktPlx^M4qs1TB!HI_b4(A%^1;~ zx4K?czV( z`^AYeO`mj@)aDpVY){M8cKl71_JZX#9u+U7Grwz6$%m7)*ON}4#siG+k&3!HN4E<~ z5s^ON3Ua8a+SKswBW9+xV?9kmpr|HYW{5z7*fLTSZ>8H7Uj99P=v9K^GfR zs=LkPYc;CiSQ0OI+prgDPQv9Xqs&4V1(ARC5+_b-Vt@XCTa{~jO1hqoi21Qwmz}9aolWk8V}n?9>CAN zRmIP;tl~#Tz<)3nhWCnr7$UseaCsYMKS${=9G>5DZ~;;U)HOYCXq<(UvY5rvk{5@B z8RS_(?6;e&6rAb@IDVPlG$91{3QDXveYzAL8{UTOQ0q|r7{@IHwjd7m($(kK*0ar~IU6TqeI4A~w zkUKO*J1(>b`ZaFBnBwKUfI?fe0ua{v;JJ3YiMmQ;t0#BeLrpql(EeS(ZZ6D6x3ldt5i$ zo<71FIstPYV8Q-`B=A{iJqn}!@X^D;Qq|TJL_fRkA=(% zVaXJ#g3n`9^`6Lb-YRyw{3_z1=%hw$LF(M2vDLX@yxuQQnghiNCmK;>fSFEuiA)zY zB}S&updfUY=m2CincX-|S3i${aLRH0huc_ljUC=JzX+(o@tx@$ByIMZ}myV3HCRvjV^FK~b?yYWt zmx-@sflZE5#A-T?@@4gZFL2W7%|;#{o|O)ymCr9aG|inw_n0be5SUjO{KkClc80{| z+#TvYakOF=I41h86r%9sD;Mraw>&86^f3F6^8kL=r+6uBeZWx`zSS0SoZB3Kz#Uwx zM8bXWwY*Tzkkp`r^U*@MASi27|1GVZmRf356u(uWqbC>jhD`)3C~si+vUZZKZw_o*U)$K8slKP*#;k!U@X8xt|Ww%>g}Y7u_K#!} z@sc#-Wi*eD2Y0w_@<^Yg!Uw+{)drRJA8^cxMrf$I^f)pCX8}w`2h6vHBn~)(*ABdm z^v!m00TPncyR9LwJHs~@UTS)&_GJjzHr?)U(F6fkMVJ?(R$x-S~=Q#Zh)3-6K zf8K3~W-IZzOgLU9h%di#u*RSx6+bYFKSAE4u&eHE1!r#O!ybYBR=|ysH}K`p2n(z0 zTZQsHtE$pbEkHO#5N*ZulD&M=W+_|v=>CzP=93m;_4b@UR1gfb2k?Qboio$U@}Ukt zWimiohhBHhd6b*8148=IBH@hvT_xOQp$1C9D3e$Xt+~}}dz5Qx+c*pJ+7~ZTF>4N% z2&A1;<)GH@G)_TRJ&8DN?|_aRg4oQJT73}j)j3T)o}C}w{KoL^ zGUHYL_gISDqdcQm3BfX8N-NSixe=%)nCpUF>%y-j+$5U~I44H><9Rp^<34)k_2SZL z3F+Wi=VHyoqA;_kfC=sWJ}X{a-(5WkmH=s<7|G|a#|{5<39s=vKA#^6ZK9(LN29{E z8v=(%y(k-x7oBOf=Qvj)O@83R*yUQZJL2K*l<7h=AdXRXsbKZV5V0 z^(}@@!;RyYIiBi9QX^c3W?3Zl-g1d}`Gn}Yf|5O{&8X*FbjKwF=^k{Is=8QV+%5EuYdeLDA1)CJa56PASv3ZzZXfYNalbIj;AviDT#GjWqO&TRuvF zT8IOVR!a+V=KGvtZ%->h8}4Xo(OZ;!KOD7qHmh zbpI4wpkp-XkGYpCArZa`Z{~x&w4uREPaNhs_jubsMCW#Dr-D4wm-d4D@Z}G+Yrgs& zuV~hj7p#LAQ|miRRrkV^%bAZrer@R80S35Pc9-a9t5)&O} z-)uIx38a#zpmPT}+B=LbBGu$q4X{k)RD;MZ`bv_ z9~_xfXam@vZxfxIZ8MkvV8gnAj<32SF2Pfw$7^5f3v2DA0K?a>7R_&|Nxj%hx&bl) zU7_mExD&1!rt>KJjYDOYb+n7w#jq=!vL?=;@eMvS+*1C`O-sK9T&z;GVp8cB7T#10 z@p;!}{XlQ+g%KgV30!NB`*k3}jhMM4Jci6kTUO{-&-p-0u9xYxqZSm zR_D!q1xB;)W@sKPup}@y#qu-^%tXP-4gLV9Q)f9|p1W>I_;+XJ6M_;ux=)Jg)5pvT zW4t5kI7VaYDf~~*U}gDkJTg06q~ESo#?&qH#b|%T#cAJpTJd>qF}-)mi?@JXWA+Wn zfOpsqTD|e3`L5k+Qb1Y!wozpM;W^X1a)j3!yzR-%BEy%!&u*%j?Aqv4Lt7{Ppwv*j zQZDWlv2Z+Px7V=V^SXwkJ?-P$bqIkaCA-~&YWuQA7@M4`yKc+_xrtf6PWIEqA$=f1 z=AUDVf)gXV^T!w0trS?X z^sf*SBbyd>FM8&z%Z(K;jZ%0^M!POAXE9(UP6A5xa)%3xu8(#{l~qBQk)ZaA=pF5Z z*)z=p1C5X%#?EZ9gnbxSiM3Y9*V_>wPTHKg?fT0gB~2EEKW{MxV%@%*lQsh>&i1u_ zGiSA*bwiK*V)gT*?A1<=vAY)}Ipi$14noY$XKmk&qD7~)kCOCWHZBNk<_T4N>~Gh~ z&Tj}e2MKC|hBvlYlryQhJ!Z@Bdrq!IO#F$#*!D4BS9(CH=X?c>!kH$0yk)@Xn za_7o=;zT|h*nfg$G5nsKDn$ue#3G4r=rYGbeU6goF|u!FG|jTI1dF;{B%b}s?C-5g zWAT|ySKLbE4CF5)GJg=p%R-*efx4_(iFb;$B6yPLw8@{@T&eq!5yjx>)WmLLl3YKBlU3qwGl`R1e(mQis z4X9Xi97F3;^Aue*9dR3lfKs&gwT=F<*1p1AqU*zBb+*>Fwt|J@X1LspU0daIFyn7a zf|PhZ+#csaeM!Z4>j>%1HH@ujEF4|+|ur>>soKpDDIALT;vr%ahL)_jwO zMG=nEC3Y0wAQ#VLM+~M^WkK?b!DX!yDWlNkB7%S?YqVQK`(5OfMqS3Lwv`d&DvS>0 zJuCVG%c|j;EBnRtnM^zZAv6LmABRR50`0$4HAH>Su6qT~F+>ZzQNBr1%XI}{MdN+pgs8M?T ztsDudr`saZy>*Lm1g!MzB^jSbjCm0D>lW0k*z|LMV z7n`Pz9Y^0r5C(_y)xi-Sq&XslEV|@ogPtsjdv@bW(+xh06`2!tq)+@msHQ#L4YTDt zbD{7&-v?)TabCpiIO(!fgZ%jTsS3z)#HaNi#=;MP4K;F?0$KsP;$*@phKK!3#s%o? zP_-_OEcn4~*lyP$5Jt!@mEWPEmE=?@DSel^pWT~<8hE=IvIeP+4u`4Tk!n7Qv`=YAgqhKpoRX1;#{y_EcFD_nWc-~7I?qOHqvN{B4?&N+>Q%n4d_~riNnV7uOdGG_ z!(Tn4K_zf&Nh2zv=T{9cO<20)Ql!k|e-x+Nd3f=zpjTK~#=(Q*rh`N~pEaH4s;x*E zX{J;#m(@y~vs)RhPaL>2#&_FtR%Wb$n#X?ipJ4JGRg#`L zW!#~6LrrMHO*tr3iLHP(r^i}c2{NDS{a~pfBUCt9+1|j7rZ498hj1!^zqML8Gi(~T(!7_bo8B`m?L`<|$E7$+-&q6lGb7gU zcol*oVHvM@{lqOG`=myl%%V4QQOirv&tkcfkN-mBvOlnMDKOJuTNi!Ki z=4cUKxF^AD%#t{_%=|3&rcG;LlHYgcHO{xYK=1nJs3GE;7DdS^DJn)r zLF06%G@eTA6N z>)ce1y6Kt@YJdANajt$N;73d1Tu5|G12)-a5A(6Y6t4=;zTxNRAT;2+qj0l1Ksz?9hHq+wJd(?|HcIFpn?2s9`kNk2{jccKM4k|j&S6R%DJ!ks z;hER`f-p!Xvu8sKP=&mDsfPn&UodI4g*GN#uDHtuyx<-DHM)M8mDya zgUYkyOf=9fC)|TZnx=i`7bV@ogss*7dP2mKOkKW}Ik(BqrP)SZ6<;28&sTTz<{fam zz?vdZon+X7Ynydon$k(a*Xj}f%4sC1!bl2|fkPUhpI#{L2dq_9W$^E{d!&(_cCmR# z#~wSn#(>5rTYEY9Tyxdj=#7a$a_?`&vifwxM>#x%@_Z>bKZ93(TY>gRE@f*kc^gi1 zX|JN5H!vFMb0^_h=X`m|;EnB;EYkk|kh>K?R-a6Yk}H#sfQDlf#d4m1J#E-m)uMlv zOS5BM+pSSM$5kN#xbD+s%floYK1!D}E7*=qJ*u6hp`^P^{KF;=q+(#Qaa7dYNJ&0? z=M~J8URjV!+Y}W>lC!gm*Q7@JwppVV0ld6NKc)EJA^T(&M_MwC@i!|^r7y?zCvVp| z%c@rO`DHr;SH?^nV+1g$&~W|T@hhJ|qii z-k7hrTLC5`f`e`jR>iZWHi4yTivErlppS+c0CF`s^`yXMsJqM-I2A~sPNs)e3`(4| zX-hx*az!M8O1uNL@Ck42+Rok*Rl1L~7SVhw2pFF0(*BO&FSpZtSd`wYT9zLPaB3gE zBAcgW5lIr=tOG5Z&e7HsRpil6f&?eByjFBoho$H%q9s4De z)(*NRT_78ZXK1s{+C-yOID;WH0v*Y#M+a2AP6O%x_T9TI3N8F9QV}1)QByk{S!Wj; znfz~qsQ6I;EiQwUGnZgVT2rRVjtidtsmJu)_nn{Eitc6)9+_fe|6E9pYtMeS)1qU0 z$Oq@AMr;@ZY=--k)CK?5A?7*}(X?Zc2bQlI5Hy;(GIzAeG;|I$-$Vy zY~N0W$YV*Rw$b`K664OV81ktW6LB4J{Oxy@H2*^;#?n?oN()-y*Zl(W7BQ|=WX{AE z-DUC=7@|(yvaF0sW^(-0*DyIadUOg5(Tz2cmg{%@{ppV%o@bS_ym85v`kqi>Wb7o& zqJVGS;oQiy4dHi;KHXW*Sl;q~mo+o#bJLLGfSBf*L8QTF?vItO|1Q9<6LB-uXM}bx zNRZBY8M{O5o4YMXtDIkig=C=@TY(}-YGOXx-f#WWbFaC=zvr{4@#^*0Z!k!R_tQ&h z#j?6%=ylh~TPMbVdf?K#3^|lqKJUFN6f3zk{^B#di_vfEQ{Or)ooajZUEY(}Bv}E@ zx-npWv3cnIdgaBtPs4`CHPyN3S76JRu&F74v=TF$d`w5TWepZPWJp?#b8FW)fMNlg zO9JQ&T82{!_p1y}{1*aM7n# z8R=|wz*uq*$^4#C!k>793IT6w~qzj2JSX2xCu@=!)3Y`?ZV zZfYISC(+4Z_$FU#vb>xFr#fIp2_XWbTNevhs`?k_moIMfb%Q@9;=KU5ES6t#k!shw zD)4zdOhA9hS56bC<|^arnuIl^Pwqz8gT*psI;u1co|>q{ppUT9Df2~yO?b}b*v<1# zeupyA#H}Mi$vF?#=It!rEGlh?{5w865Q*4W5n?&6LcA$dRy??+rK1_clzpFc%e64; zee<>9KFA3UV%Z&XW(`v?~pU)1^ZBQb}<^#RLPmQ{Uel@0zF%1dUdRz`HSvg|z? zAt*N5!QQgOj`8o2;*bFVf+B)mZM$Cy7Uhy#S;nAqixh=?;w=0%GA91>HvJ{dJ@l7s zb*7aW@4<6!=e8DV%Nz8byrjJi{s|nsMeYeaL_F0>$|MrYU)~F3*;^09;Z1bVH*j&4 zxaa_4sa%mbIq%rgE1SSPcNLJ|6rvZIi@x6>h?qCjVUJK=xlf=G+c+CxUXI4vq0!*#f_K(F>{JZ%y z)SdiN=p0&^7y5MAOu=MTp7zaQ3z*beCD?D{(*=H`?L_G0uxf=3XjwUFi+vko zIQL}}3APg%tEz#KAkP6+(XuxL>*+v|&$kj*u{f>}-ttqddnAX2J;Ood&>3nH7Zf21s%{!?g zP~ozJ!bz1w-B5~~mk*a4QaMP~r^^PEX~zP$^O{vdn_Lej!i8F|O(7shhvlR|`C)N~ zR%)fS#CK)At)H}ed#yJNQKt5qD63Of);iM@am0-yd+|gTcp>8RuNT^^N49^?<|zXZ znChC0m!I#E_8M9WX(#6Guh)UF=%nfaH&s&f)rnsUYquQ-1Z7w5f3TX(CxJsb)A%N` z`m9aQpq@Qp>^gCtgqQ|57idvt$w<3NppXUH1Z=Sb2cw%&nD$RT5b0A9zJ^LrsWxc+ zf&(|4dcrU(^Qyp+^aZbYNYeVMG_XyDKwR(ixLWTAj8Hq&d~K9TQyWX4JJXMNIZ zZ0Zjo6^l8OU0>;~B9M+OY)Gp=zJXfF&Pg->=xio6pTNJr8ARyFWccv3@TR z>6X&HzqQnIztt8?08k|*-?Nr)&8@$TX)z?pQ5?e@55vg2-G~7GudAB*_a8J;PqLxF zHU9!h`hKLkX`7w z1+N8c+R{MW*h$j=7dWkmS!v_2&KvA@#!>EQjrE;oCU_v4v~Vg;%jq;+D}kNYm*q7Q8KNj8fjP)!gbU!kC2t%r{^4uOfJQ(;}p332zdox01#sD z5^qaLIh{~g-Jb?5pXhszg%CWH6=>yDZc!uR?u(e?`P*l#B<=m;QIZUfC5w?N-Pxch zXU0$`t7+?~A_o8|Pyv&1dX=YP&led5sTWq%jBZkRq3EXWFkAgRYc>AQmLI&(%N%u> z!Y#U!X5e%LE~|c*okScJO7u^#PVKTXLM1ZqlcpsTJ5s};v#`CK(kn9+SyFJ{)6+R5 z82v>CAJ>k9DFi8p`V~Ys3r+bL8l4V^#R`s9vs@^7_9sYjpsL2}LMHa`+K13=?`N%@ zZ|^!%L{bUme|(ZsY&#ops`1+H0@@^VUd*Z%mzkAc>|92=WxUEoRvR2|ex!QT4nci? z|7NNhNNYlEUs0Zlm+P)H7uzB1WHh~*t_*j{I^ZIBsq@30U_|z5cN-3w31uveB9x%& z@(^t9^fsm+P%l+5MSaHWj;@#}}xn-pMfh-2g>%%;$d_W`J-4k!=8!-dkG z%0k$;U$T<(MEI^t(c0SGQ7}<_E#-=FtY;khDR|2cIkLMH>v-b$RGgmcOY^tRYJnG{ zcXojehmJ!boDLn=O+{p+CgY@V>Nr--CHeK`=5Na;PrmcPeBF#|)zq490qRgcx(2v? z2SxL0tS36?)I?T4)c3S>U({OJD1-VdLeTlkLvMzSD3i7hA~(yGd*NH%7JHdqS*m>i z>qeU==8@{nPwAa|ce!dAv*qcuGxeUT@08XJWtf9!H|GE?WL5VT`SST$Zb8fkz0OP* zF0!__2$g_UOg!QoU8Uk$4jB4<950#~p2mK?>Y!W}S7Id(sPQXpD|nn3`?%@r>DV+N zs6dYuay!h@Tu{e|FU7iYV~=D^6PXAFBI)?L(m)76wX{ksHH=X9)ECIxfI9ZLh>o1po zguDEwh=i;KwWK=3Xe5gSH#FhdZ~QoJ^8)6scYm9G$fxI{6C8|1OTEDmN65t5K^Bra zjY(*6S*!Q{%9_&!K*HIU*xyMBY-rBu5Z@0hNf0X>O`O$?p_xY?Ow{Z`(?%cjFRgET ztqqvj(e< zrk*Y5GR(P(AMnBjWbu6Q8N020L}Z`AxIsuN5jGz?L?5FV*+LtVrRrA-j zztiBKRXm@(Jumi$zRu?r$3s&}$Nrm3hKetQ>YJ{2!?`{ zo9}J?)c{_!cKcAF)DzAB3i2$i<{`4>u##6T<8w1>cR9IbZ@=50r<> zvQ(`Ssl`Wq>yP->{M18MveP4)u2{qFi9?!~?+d{a7!g%|MzH6>kXg$7ToLV^zfFH4 z-pA@wd_uh zipjc8_C%U#D{)Tu=Zk7-e9K$fNtz<2&yByB!p@CTvH_A!dS#FM5*VKmG-21i22#;{Fx;Urb}#VP z7dF5d^I1(8tPXxC7a4z+Cv?6OV!KrU@`Jaz6For9uDOoor9$^ly;X!oCK}lpnZ6Y) zWEBWl!3*Co@pAVFS4U?09^J;~`O5oqVNG!)Iv?IpFG%&=*NP zHSS;e4AD~4aORr}Pe3=g<)J~oAyZ38J9T4*ma<;L9{02HPJH1e%}ET_^e+33*0S{K zq$uU%=%yfcI2cF%k#&84fJLApK9uk`P{DMe!IbOH{)fh~z*crXKf34IH*vl?*Vr1& zGu|wjHv%Vz+1Fnux^TLwSCTL24~(tYE1PAYG=JrKHO_j#$Umg?sZ#Unij%Xw?b%bi zqkPmkQ9K7cD__(x{Tb@vv+oGiWqHjp#>)}L&9ZnC6F2P7rfNoZ)QH`|s{)`U#s#tI%5CjbdphjQA2m=1(HLfO8QjNJt9#c3F)_m0JLah+`1bHYW+ zs%yrTV+a$#)|3AvD9=MXONx(Mb+Nm9Lyl?VN@b0u5w|2ThpKHl`QG+3i!Bn%d;TWPEicJ8 z#N9Hz=wNa!%e{>z_jI%V^{&QU(Ch>hUaR+@9e;LSYqOp#{$4RCU^?RzbUrJ(j)Hlv zFk?bb#Mlq*sF+NcI)@jTqli&|_Fhjv2H;@1f{ia8xUMoGL&* z7RTPR!!lHid60f!a5e9#Ac_gSxnm-kv(Rf&my=nzHY=GTcXXadrfvSERO5Zz{o<|) zE3)ode~xKY92z-o2T9V1KWUY1jA=#v$}L3d;eg=4zi_rYFRWgYrmXr+fXf)Wa(?Bp z48jA3uKMRb0l>X4`(um4B$*%!#P zNzhPIcYf(U1Md0GZ0$iLQDFL{{nghsZZFZu3kF1W_phi{%*-6s$0_TS7+)iOC4lws z9iXAB5IT5?T_QHGWzrkdEIZcrB6z@sMi^zjvx z$yb{I#1R}wY5b%9m6#Ww#o&+#7RX0hpZ%_&tb(u)pa*2lvi|QDhUIgt!H84d!r33m zk#b3wB_OXpcGLX#0{b>`zu2CdzT`aLKaIOJKG4~AfBCuCW~~B%S!N7SF!?o|OzS0# zwLM5ma-B8adS2$1<@H$iJduCSbA%zdU#->adKZpm|8r)&_ad?)VLt7&kBd)qKRbo- z)7x2CH5NmPizd9L#Jo{he|Cl*B)~pMcf~Ot8j(k<(StM;MI^XM>IMAk9B;r#l0( zVXSv~X3ir{f}atMG>?(U&9X}fJ25h71|bz>(*ztC&C1S4k`OSz)n>_Bjg(K(;N>9E zS}}OJ=_*NzV#7Z!5W(97^$nF?r_!gL)qE;}A{y5Hzr`_2uIo0A3=hMpjLo_DtHmI6 z7ialSaYLfh<-jOi$ym)?2%k)y_`!WYmtl?;jb&Uy7p1#azpJlrSqV9M?anWiRUenK z784Gl@6jCzHymo~osQjpUxj&4VJzB?GfzqXME?jje^A^Rg#@}fc#+Av9Us$d-V+B7+M@bVB_EX}J zkd79ldG>iE4mk9I4ulVc|Dj*FTgqcp6+WG?`?KgY9lF=76Dy^OkcKU4HX9wXjUE>o zQhlAr81K#kcRf!c!BxG^912rrKK9?)iII{ok!9Sn8FddyBPIh3 zNWBM7dw(5EtFvs2Na8#YKM?9lOP?dt^1j4VGC2;7GEZ2RKdc{x({# zpKADi>VjxVjGc|R;%42KzEAozxDQ^y^?8pj+5_l`JD8<(xvq>8E9fe@-`wchS$e#L2AY$IeeM1f901SI@aBVCBE)vLarGv(FAPuF z^CHFUq0wB5CBY1ptpw+Q=qfO8NFx zxqhVLe+4TT{Z{}2MRcGBe}j#?im`X->#Id-Se5Jn)7CTKp$Pa8Hd}=mly4vob&}$U zSVVAJUbz1K#{a{P&rJ((EC&6981ukr$Uhi_jlUcWjqfvt8ff4n1}{>`Y?R*fKQm4x z(oZx_H2&|Xgqr`?ZQkD*{<1TA3}kxj4e;B{O9cMc?=JKI|7$JRY>rFjl?+u3|2yE~ zdE`Gd6X3c0-~XzAm%RVyN&VOo1ZWu_d?$jNJ(HNOIv?o$_eT&II1&8+{%iOC++Lp! W=eF`Q8UvjEx4_EUN@WUfg8mQR`hF+? diff --git a/README.md b/README.md index 6236c673..149e27b6 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,8 @@ Learn more about each supported rules by reading their documentation: - [`classnames-order`](docs/rules/classnames-order.md): order classnames by target properties then by variants (`[size:][theme:][state:]`) - [`enforces-shorthand`](docs/rules/enforces-shorthand.md): merge multiple classnames into shorthand if possible e.g. `mx-5 my-5` should become `m-5` -- [`migration-from-tailwind-2`](docs/rules/migration-from-tailwind-2.md) for easy upgrade from TailwindCSS `v2` to `v3` +- [`migration-from-tailwind-2`](docs/rules/migration-from-tailwind-2.md) for easy upgrade from TailwindCSS `v2` to `v3`. + Warning: at the moment you should [temporary turn off the `no-custom-classname`](https://github.com/francoismassart/eslint-plugin-tailwindcss/issues/88) rule if you want to see the warning from `migration-from-tailwind-2` - [`no-custom-classname`](docs/rules/no-custom-classname.md): only allow classnames from Tailwind CSS and the values from the `whitelist` option - [`no-contradicting-classname`](docs/rules/no-contradicting-classname.md): e.g. avoid `p-2 p-3`, different Tailwind CSS classnames (`pt-2` & `pt-3`) but targeting the same property several times for the same variant.