File size: 1,080 Bytes
1477a90 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import { createRule, paramMessage } from '@typespec/compiler'
import { isCamelCaseNoAcronyms, isPascalCaseNoAcronyms } from './utils.js'
export const casingRule = createRule({
name: 'casing',
severity: 'warning',
description: 'Ensure proper casing style.',
messages: {
name: paramMessage`The names of ${'type'} types must use ${'casing'}`,
value: paramMessage`The values of ${'type'} types must use ${'casing'}`,
},
create: (context) => ({
model: (model) => {
if (!isPascalCaseNoAcronyms(model.name)) {
context.reportDiagnostic({
format: { type: 'Model', casing: 'PascalCase' },
target: model,
messageId: 'name',
})
}
},
modelProperty: (property) => {
if (
(property.name !== '_' && !isCamelCaseNoAcronyms(property.name)) ||
isPascalCaseNoAcronyms(property.name)
) {
context.reportDiagnostic({
format: { type: 'Model Property', casing: 'camelCase' },
target: property,
messageId: 'name',
})
}
},
}),
})
|