Skip to contentView the source on GitHub

prefer-class-list

Use class:list directive for conditional or dynamic class names.

Best Practiceswarning by default ESLint rule

astro-doctor/prefer-class-list

Why it matters

Template-literal class composition is error-prone (extra spaces, false-y values leaking). class:list is Astro's idiomatic way to build class strings — it handles objects, arrays, and conditionals correctly.

See the difference

Incorrect

String concatenation / template literals

astroIncorrect example
---
const isActive = true
---
<button class={`btn ${isActive ? 'btn-active' : ''}`}>
  Click me
</button>

Correct

class:list directive

astroCorrect example
---
const isActive = true
---
<button class:list={['btn', { 'btn-active': isActive }]}>
  Click me
</button>

Configure this check

Override the default severity in your ESLint config:

javascripteslint.config.js
import astroDoctorPlugin from '@santi020k/eslint-plugin-astro-doctor'

export default [
  astroDoctorPlugin.configs.recommended,
  {
    rules: {
      'astro-doctor/prefer-class-list': 'error',
    },
  },
]

Or set the severity for CLI scans in doctor.config.ts:

typescriptdoctor.config.ts
export default {
  rules: {
    'astro-doctor/prefer-class-list': 'error',
  },
}

Use 'error', 'warn', or 'off'. The configuration guide covers presets and per-file overrides.

Keep exploring best practices

Browse every rule and project audit