/** * Rule: consistent-dark-mode * * Ensures consistent dark mode theming in Tailwind CSS classes. * - Error: When some color classes have dark: variants but others don't within the same element * - Warning: When Tailwind color classes are used in a file but no dark: theming exists */ import { createRule, defineRuleMeta } from "../utils/create-rule.js"; import type { TSESTree } from "@typescript-eslint/utils"; type MessageIds = "inconsistentDarkMode" | "missingDarkMode"; type Options = [ { /** Whether to warn when no dark mode classes are found in a file that uses Tailwind colors. Default: true */ warnOnMissingDarkMode?: boolean; }? ]; /** * Rule metadata - colocated with implementation for maintainability */ export const meta = defineRuleMeta({ id: "consistent-dark-mode", version: "1.0.0", name: "Consistent Dark Mode", description: "Ensure consistent dark: theming (error on mix, warn on missing)", defaultSeverity: "error", category: "static", icon: "🌓", hint: "Ensures dark mode consistency", defaultEnabled: true, defaultOptions: [{ warnOnMissingDarkMode: true }], optionSchema: { fields: [ { key: "warnOnMissingDarkMode", label: "Warn when elements lack dark: variant", type: "boolean", defaultValue: true, description: "Enable warnings for elements missing dark mode variants", }, ], }, docs: ` ## What it does Detects inconsistent dark mode theming in Tailwind CSS classes. Reports errors when some color classes in an element have \`dark:\` variants but others don't, and optionally warns when a file uses color classes without any dark mode theming. ## Why it's useful - **Prevents broken dark mode**: Catches cases where some colors change in dark mode but others don't - **Encourages completeness**: Prompts you to add dark mode support where it's missing - **No false positives**: Only flags explicit Tailwind colors, not custom/CSS variable colors ## Examples ### ❌ Incorrect \`\`\`tsx // Some colors have dark variants, others don't
// ^^^^^^^^^ missing dark: variant // Mix of themed and unthemed