2025-03-04 20:16:50 +02:00
|
|
|
import type { Rule } from 'eslint';
|
|
|
|
|
import { TSESTree } from '@typescript-eslint/utils';
|
|
|
|
|
import { processRecipeProperties } from '../shared-utils/recipe-property-processor.js';
|
|
|
|
|
import { processStyleNode } from '../shared-utils/style-node-processor.js';
|
|
|
|
|
import { enforceAlphabeticalCSSOrderInStyleObject } from './style-object-processor.js';
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Enforces alphabetical ordering of CSS properties within a recipe function call.
|
|
|
|
|
*
|
|
|
|
|
* @param node The CallExpression node representing the recipe function call.
|
|
|
|
|
* @param context The ESLint rule context.
|
|
|
|
|
*
|
|
|
|
|
* This function does the following:
|
|
|
|
|
* 1. Checks if the first argument of the recipe function is an ObjectExpression.
|
|
|
|
|
* 2. If valid, processes the recipe object's properties.
|
|
|
|
|
* 3. For each relevant property (e.g., 'base', 'variants'), it applies alphabetical ordering to the CSS properties.
|
|
|
|
|
*/
|
|
|
|
|
export const enforceAlphabeticalCSSOrderInRecipe = (node: TSESTree.CallExpression, context: Rule.RuleContext): void => {
|
2025-03-12 06:06:40 +02:00
|
|
|
if (node.arguments[0]?.type === 'ObjectExpression') {
|
|
|
|
|
const recipeObject = node.arguments[0];
|
2025-03-04 20:16:50 +02:00
|
|
|
|
2025-03-12 06:06:40 +02:00
|
|
|
processRecipeProperties(context, recipeObject, (context, object) =>
|
|
|
|
|
processStyleNode(context, object, enforceAlphabeticalCSSOrderInStyleObject),
|
|
|
|
|
);
|
|
|
|
|
}
|
2025-03-04 20:16:50 +02:00
|
|
|
};
|