Linter
Biome 的 linter 静态分析你的代码以捕获常见错误并帮助编写符合规范的代码。
297通过 CLI 使用 linter
Section titled 通过 CLI 使用 linter你可以通过运行 CLI 来开始,使用以下命令来检查可能的错误:
有关所有可用选项的更多信息,请查看 CLI 页面
我们认为规则应该是有信息量的,并向用户解释为什么一个规则被触发,并告诉用户他们应该做什么来修复错误。规则应遵循这些支柱:
- 向用户解释错误。通常,这是诊断消息。
- 向用户解释为什么错误被触发。通常,这是通过附加节点实现的。
- 告诉用户他们应该做什么。通常,这是通过代码操作实现的。如果代码操作不适用,注释应告诉用户他们应该做什么来修复错误。
如果你认为规则没有遵循这些支柱,请提交一个问题。
lint规则可能提供自动代码修复。Biome 区分两种类型的修复。
安全修复保证不会改变你的代码的语义。他们可以在没有明确审查的情况下应用。
要应用 安全修复,使用 --write
:
不安全的修复
Section titled 不安全的修复不安全的修复可能改变你的程序的语义。因此,建议手动审查更改。
要应用 不安全的修复,使用 --write --unsafe
:
推荐的规则
Section titled 推荐的规则当 linter 启用时,它会推荐一些规则。推荐的规则将发出错误诊断。以下是推荐规则的列表:
- 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
有时,开发者希望忽略代码中的某一行的 lint 规则。 你可以通过在发出 lint 诊断的行上方添加一个抑制注释来实现这一点。
抑制注释的格式如下:
其中
biome-ignore
是抑制注释的开始;lint
抑制 linter;/suspicious/noDebugger
: 可选, 你想要抑制的规则的组和名称;<explanation>
解释为什么禁用规则
这里有一个例子:
启用 lint 规则
Section titled 启用 lint 规则推荐的规则默认启用,并发出错误严重性的诊断。 默认情况下禁用不推荐的规则,但可以通过配置启用它们。 这些规则发出的诊断在文档中以警告严重性显示。
要启用规则,你需要根据你的需要改变它们的诊断严重性:
禁用 lint 规则
Section titled 禁用 lint 规则只需在其配置中添加 "off"
作为值。例如:
改变诊断严重性
Section titled 改变诊断严重性Biome 的大多数规则会发出一个错误,但你可以自由改变它们的严重性。
只需添加 "warn"
作为规则的值。例如:
这在需要进行重构并需要使 CI 通过的情况下很有用。
一些规则有选项。 当他们确实接受一些选项时,你可以通过改变规则的值方式传递它们。
level
将指示诊断的严重性,有效值为:“off”、“warn” 和 “error”;options
将根据规则改变。