Desenvolvo um projeto Angular e utilizo o ESLint com uma regra para modificadores protected readonly
como segue strictCamelCase
:
{
"selector": ["classProperty"],
"format": ["strictCamelCase"],
"leadingUnderscore": "forbid",
"trailingUnderscore": "forbid",
"modifiers": ["protected", "readonly"]
}
Eu uso algumas enumerações no meu projeto, como EnumButtonSize, e costumo declará-las assim:
protected readonly EnumButtonSize = EnumButtonSize;
- O modificador
readonly
deve ser suficiente, mas eu uso o Storybook no meu projeto e então tenho que adicionar oprotected
modificador para fazer com que essa variável não esteja presente na documentação do Storybook (a alternativa é adicionar um comentário/** */
com@internal
decorador acima da variável) - Esta variável deve ser usada no modelo como
<my-button [buttonSize]="EnumButtonSize.LARGE">
Gostaria de adicionar uma regra ESLint específica para suportar essas enumerações em PascalCase (além da regra anterior). Tentei algo assim, sem sucesso:
{
"selector": ["classProperty"],
"format": ["StrictPascalCase"],
"leadingUnderscore": "forbid",
"trailingUnderscore": "forbid",
"modifiers": ["protected", "readonly"],
"filter": {
"regex": "^Enum.*",
"match": true
}
},
Alguém pode me ajudar ou tem uma ideia diferente?
Convenção de nomenclatura: Convenção de nomenclatura ESLint
O ESLint aplica essas regras em ordem. Portanto, se uma propriedade corresponder à primeira regra, ela não será verificada em relação à segunda. A primeira regra captura propriedades de classe como EnumButtonSize, protegido somente leitura, e as permite em PascalCase somente se corresponderem a ^Enum[AZ]. A segunda regra é um fallback para todas as outras propriedades de classe protegidas somente leitura e aplica strictCamelCase.