sort-classes
Enforce sorted class members.
Organizing class members in a consistent order improves readability and maintainability. This rule helps developers quickly locate class members and understand the overall structure of the class.
Config
ts
pluginRules: {
sort-classes: [warn, { type: alphabetical, order: asc, ignoreCase: true }],
}Options:
type: alphabetical | natural | line-length | custom | unsorted (default: alphabetical)order: asc | desc (default: asc)ignoreCase: boolean (default: true)specialCharacters: keep | trim | remove (default: keep)alphabet: string (default: ) — only when type=custompartitionByNewLine: boolean (default: false) — respect blank-line groups and do not sort across them
Note: This is a heuristic rule; it does not parse full TypeScript syntax trees.
Example
Before:
ts
class User {
constructor(username: string, email: string, isActive: boolean) {
this.username = username
this.email = email
this.isActive = isActive
this.roles = []
}
addRole(role: string) {
this.roles.push(role)
}
deactivate() {
this.isActive = false
}
setEmail(newEmail: string) {
this.email = newEmail
}
activate() {
this.isActive = true
}
removeRole(role: string) {
this.roles = this.roles.filter(r => r !== role)
}
getProfile() {
return {
username: this.username,
email: this.email,
isActive: this.isActive,
roles: this.roles,
}
}
}After (alphabetical asc):
ts
class User {
activate() { this.isActive = true }
addRole(role: string) { this.roles.push(role) }
constructor(username: string, email: string, isActive: boolean) { /* ... */ }
deactivate() { this.isActive = false }
getProfile() { /* ... */ }
removeRole(role: string) { /* ... */ }
setEmail(newEmail: string) { /* ... */ }
}Best practices
- Choose
naturalwhen member names include numeric suffixes (e.g.,step2,step10) - Use
partitionByNewLine: trueto preserve intentional manual grouping - Keep the rule at
warninitially to catch problematic cases without blocking - Combine with code review guidelines for constructor-first or accessors-first conventions as needed