Linter
O Linter do Biome analisa de forma estática o seu código para encontrar erros comuns e ajudar você a escrever códigos idiomáticos.
300Usar o Linter via CLI
Section titled Usar o Linter via CLIVocê pode começar executando a CLI para verificar possíveis erros usando o seguinte comando:
Para mais informações sobre todas as opções disponíveis, veja a página sobre o CLI
Princípios das Regras
Section titled Princípios das RegrasNós acreditamos que as regras devem ser informativas e que expliquem ao usuário porque uma regra é acionada, além de orientar o usuário sobre o que deve ser feito para corrigí-lo. Uma regra deve seguir esses princípios:
- Explicar o erro para o usuário. Geralmente, essa é a mensagem do diagnóstico.
- Explicar para o usuário porque o erro foi acionado. Geralmente, isso é implementado com um parâmetro adicional.
- Falar para o usuário o que ele precisa fazer. Geralmente, isso é implementado usando uma ação no código. Se uma ação no código não for aplicável uma nota deve dizer o que o usuário precisa fazer para arrumar o erro.
Se você acha que uma regra não siga esses princípios, por favor abra uma Issue.
Correções de código
Section titled Correções de códigoAs regras de Lint podem fornecer correções automáticas de código. O Biome classifica as correções em dois tipos.
Correções seguras
Section titled Correções segurasAs correções seguras não alteram a semântica do seu código. Elas podem ser aplicadas sem uma análise explicita.
Para aplicar correções seguras, utilize o parâmetro --write
:
Correções não seguras
Section titled Correções não segurasCorreções não seguras podem alterar a semântica do seu código. Portanto, é aconselhável revisar manualmente as alterações.
Para aplicar correções não seguras, utilize o parâmetro --write --unsafe
:
Regras recomendadas
Section titled Regras recomendadasQuando o Linter está ativado, ele recomenda uma série de regras. Essas regras emitirão diagnósticos de erro. Veja as regras recomendadas logo abaixo:
- noAccessKey
- noAriaHiddenOnFocusable
- noAriaUnsupportedElements
- noAutofocus
- noBlankTarget
- noDistractingElements
- noHeaderScope
- noInteractiveElementToNoninteractiveRole
- noLabelWithoutControl
- noNoninteractiveElementToInteractiveRole
- noNoninteractiveTabindex
- noPositiveTabindex
- noRedundantAlt
- noRedundantRoles
- noSvgWithoutTitle
- useAltText
- useAnchorContent
- useAriaActivedescendantWithTabindex
- useAriaPropsForRole
- useButtonType
- useFocusableInteractive
- useGenericFontNames
- useHeadingContent
- useHtmlLang
- useIframeTitle
- useKeyWithClickEvents
- useKeyWithMouseEvents
- useMediaCaption
- useSemanticElements
- useValidAnchor
- useValidAriaProps
- useValidAriaRole
- useValidAriaValues
- useValidLang
- noBannedTypes
- noEmptyTypeParameters
- noExcessiveNestedTestSuites
- noExtraBooleanCast
- noForEach
- noMultipleSpacesInRegularExpressionLiterals
- noStaticOnlyClass
- noThisInStatic
- noUselessCatch
- noUselessConstructor
- noUselessEmptyExport
- noUselessFragments
- noUselessLabel
- noUselessLoneBlockStatements
- noUselessRename
- noUselessSwitchCase
- noUselessTernary
- noUselessThisAlias
- noUselessTypeConstraint
- noWith
- useArrowFunction
- useFlatMap
- useLiteralKeys
- useOptionalChain
- useRegexLiterals
- useSimpleNumberKeys
- noChildrenProp
- noConstAssign
- noConstantCondition
- noConstructorReturn
- noEmptyCharacterClassInRegex
- noEmptyPattern
- noFlatMapIdentity
- noGlobalObjectCalls
- noInnerDeclarations
- noInvalidBuiltinInstantiation
- noInvalidConstructorSuper
- noInvalidDirectionInLinearGradient
- noInvalidGridAreas
- noInvalidPositionAtImportRule
- noInvalidUseBeforeDeclaration
- noNonoctalDecimalEscape
- noPrecisionLoss
- noRenderReturnValue
- noSelfAssign
- noSetterReturn
- noStringCaseMismatch
- noSwitchDeclarations
- noUnknownFunction
- noUnknownMediaFeatureName
- noUnknownProperty
- noUnknownUnit
- noUnmatchableAnbSelector
- noUnnecessaryContinue
- noUnreachable
- noUnreachableSuper
- noUnsafeFinally
- noUnsafeOptionalChaining
- noUnusedLabels
- noVoidElementsWithChildren
- noVoidTypeReturn
- useExhaustiveDependencies
- useIsNan
- useJsxKeyInIterable
- useValidForDirection
- useYield
- noAccumulatingSpread
- noDelete
- noDangerouslySetInnerHtml
- noDangerouslySetInnerHtmlWithChildren
- noGlobalEval
- noArguments
- noCommaOperator
- noInferrableTypes
- noNonNullAssertion
- noParameterAssign
- noUnusedTemplateLiteral
- noUselessElse
- noVar
- useAsConstAssertion
- useConst
- useDefaultParameterLast
- useEnumInitializers
- useExponentiationOperator
- useExportType
- useImportType
- useLiteralEnumMembers
- useNodejsImportProtocol
- useNumberNamespace
- useNumericLiterals
- useSelfClosingElements
- useShorthandFunctionType
- useSingleVarDeclarator
- useTemplate
- useWhile
- noApproximativeNumericConstant
- noArrayIndexKey
- noAssignInExpressions
- noAsyncPromiseExecutor
- noCatchAssign
- noClassAssign
- noCommentText
- noCompareNegZero
- noConfusingLabels
- noConfusingVoidType
- noConstEnum
- noControlCharactersInRegex
- noDebugger
- noDoubleEquals
- noDuplicateAtImportRules
- noDuplicateCase
- noDuplicateClassMembers
- noDuplicateFontNames
- noDuplicateJsxProps
- noDuplicateObjectKeys
- noDuplicateObjectKeys
- noDuplicateParameters
- noDuplicateSelectorsKeyframeBlock
- noDuplicateTestHooks
- noEmptyBlock
- noEmptyInterface
- noExplicitAny
- noExportsInTest
- noExtraNonNullAssertion
- noFallthroughSwitchClause
- noFocusedTests
- noFunctionAssign
- noGlobalAssign
- noGlobalIsFinite
- noGlobalIsNan
- noImplicitAnyLet
- noImportAssign
- noImportantInKeyframe
- noLabelVar
- noMisleadingCharacterClass
- noMisleadingInstantiator
- noMisrefactoredShorthandAssign
- noPrototypeBuiltins
- noRedeclare
- noRedundantUseStrict
- noSelfCompare
- noShadowRestrictedNames
- noShorthandPropertyOverrides
- noSparseArray
- noSuspiciousSemicolonInJsx
- noThenProperty
- noUnsafeDeclarationMerging
- noUnsafeNegation
- useDefaultSwitchClauseLast
- useGetterReturn
- useIsArray
- useNamespaceKeyword
- useValidTypeof
Ignorando um erro
Section titled Ignorando um erroAs vezes você só quer ignorar um erro de lint em uma linha específica de código. Você pode fazer isso usando um comentário de supressão acima da linha que emite o diagnóstico.
Os comentários de supressão segue o seguinte formato:
Onde
biome-ignore
é o começo de um comentário de supressão;lint
desativa o linter;/suspicious/noDebugger
: opcional, grupo e o nome da regra que você quer desativar;<explanation>
explicação do motivo pelo qual a regra está desativada
Aqui está um exemplo:
Configuração
Section titled ConfiguraçãoAtivar uma regra do Lint
Section titled Ativar uma regra do LintAs regras recomendadas são ativadas por padrão e emitem diagnósticos com a severidade do erro. Regras que não são recomendadas são desativadas por padrão, mas podem ser ativadas pelo arquivo de configuração. Os diagnósticos emitidos por essas regras são mostrados com a gravidade de aviso (warning) na documentação.
Para ativar essas regras, você precisa alterar a gravidade do diagnóstico baseado nas suas necessidades:
Desativar uma regra do Lint
Section titled Desativar uma regra do LintApenas adicione "off"
como um valor dentro da configuração da regra. Por exemplo:
Alterar a gravidade do diagnóstico
Section titled Alterar a gravidade do diagnósticoA maioria das regras do Biome vão emitir um erro, mas você pode alterar isso.
Apenas adicione "warn"
como um valor da regra. Exemplo:
Isso é útil em casos onde está rolando uma refatoração e é necessário fazer com que o CI seja aprovado.
Configurações de regras
Section titled Configurações de regrasAlgumas regras tem configurações. Quando elas aceitam, você pode contorná-las ajustando o valor da regra de uma forma diferente.
level
indica a gravidade do diagnóstico, os valores válidos são:"off"
,"warn"
e"error"
;options
vai mudar dependendo da regra.