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',
        })
      }
    },
  }),
})