mirror of
https://github.com/antebudimir/eslint-plugin-vanilla-extract.git
synced 2026-01-02 09:33:33 +00:00
56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
|
|
import type { Rule } from 'eslint';
|
||
|
|
import { availableGroups } from '../concentric-order/concentric-groups.js';
|
||
|
|
import { createNodeVisitors } from '../shared-utils/order-strategy-visitor-creator.js';
|
||
|
|
|
||
|
|
interface CustomGroupRuleConfiguration {
|
||
|
|
groupOrder?: string[];
|
||
|
|
sortRemainingProperties: 'alphabetical' | 'concentric';
|
||
|
|
}
|
||
|
|
|
||
|
|
const customGroupOrderRule: Rule.RuleModule = {
|
||
|
|
meta: {
|
||
|
|
type: 'suggestion',
|
||
|
|
docs: {
|
||
|
|
description: 'enforce custom group CSS property ordering in vanilla-extract styles',
|
||
|
|
category: 'Stylistic Issues',
|
||
|
|
recommended: true,
|
||
|
|
},
|
||
|
|
fixable: 'code',
|
||
|
|
schema: [
|
||
|
|
{
|
||
|
|
type: 'object',
|
||
|
|
properties: {
|
||
|
|
groupOrder: {
|
||
|
|
type: 'array',
|
||
|
|
items: {
|
||
|
|
enum: availableGroups,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
sortRemainingProperties: {
|
||
|
|
enum: ['alphabetical', 'concentric'],
|
||
|
|
},
|
||
|
|
},
|
||
|
|
additionalProperties: false,
|
||
|
|
},
|
||
|
|
],
|
||
|
|
messages: {
|
||
|
|
incorrectOrder:
|
||
|
|
"Property '{{nextProperty}}' should come before '{{currentProperty}}' according to custom CSS group ordering.",
|
||
|
|
},
|
||
|
|
},
|
||
|
|
create(ruleContext: Rule.RuleContext) {
|
||
|
|
const ruleConfiguration = ruleContext.options[0] as CustomGroupRuleConfiguration;
|
||
|
|
const userDefinedGroupOrder = ruleConfiguration?.groupOrder ?? [];
|
||
|
|
const sortRemainingPropertiesMethod = ruleConfiguration?.sortRemainingProperties ?? 'alphabetical';
|
||
|
|
|
||
|
|
return createNodeVisitors(
|
||
|
|
ruleContext,
|
||
|
|
'userDefinedGroupOrder',
|
||
|
|
userDefinedGroupOrder,
|
||
|
|
sortRemainingPropertiesMethod,
|
||
|
|
);
|
||
|
|
},
|
||
|
|
};
|
||
|
|
|
||
|
|
export default customGroupOrderRule;
|