Linter
Biomeのlinterはあなたのコードを静的に分析し、典型的なエラーを検出して、より自然なコードを書く手助けをします。 複数の言語をサポートし、全部で300 個のルールを提供しています。
CLI経由でlinterを使用する
Section titled CLI経由でlinterを使用するCLIから以下のコマンドを実行することで、エラーを検出できます:
オプションの詳細については、CLIページを参照してください。
ルールの基盤
Section titled ルールの基盤私たちは、ただルールを指示的に指摘するのではなく、なぜそのルールがトリガーされた理由をユーザーに説明し、エラーを修正する方法をユーザーに伝えることが大切だと考えています。ルールは以下のような重要な要素に沿って選定されています:
- ユーザーに対してエラーの説明を行います。これは基本的に診断のメッセージです。
- 次に、ユーザーに対してエラーがトリガーされた理由を説明します。これは基本的に追加のノードで実装されます。
- 最後にユーザーに何をすべきかを伝えます。これは基本的にコードアクションを使用して実装されます。コードアクションが適用できない場合は、ノートでユーザーに何をすべきかを伝えます。
もしルールがこれらの要素に従っていないと感じたのであれば、イシューを作成してください。
コード修正
Section titled コード修正lintルールは自動的なコード修正を提供する場合があります。Biomeでは、2種類の修正を区別しています。
安全な修正(Safe fixes)
Section titled 安全な修正(Safe fixes)安全な修正は、コードのセマンティクスを変更しないことが保証されています。明示的なレビューなしに適用できます。
安全な修正 を適用するには、--write
を使用します:
安全ではない修正(Unsafe fixes)
Section titled 安全ではない修正(Unsafe fixes)安全ではない修正は、プログラムのセマンティクスを変更する可能性があります。そのため、変更を手動でレビューすることをおすすめします。
安全ではない修正 を適用するには、--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
コードの無視
Section titled コードの無視特定のコード行に対するlintを無視したい場合があります。
これは、linterが指摘している行の上に抑制コメントを追加することで実現できます。
抑制コメントは、以下の形式で記述します:
ここで
biome-ignore
:抑制コメントの開始を表します;lint
:はlinterを抑制することを表します;/suspicious/noDebugger
:任意 抑制したいルールのグループと名前を表します;<explanation>
:ルールが無効になっている理由を表します;
例:
lintルールの有効化
Section titled lintルールの有効化推奨されるルールはデフォルトで有効になっており、エラーの重大度で診断を発行します。
推奨されないルールはデフォルトで無効になっていますが、設定を通じて有効にすることができます。
これらのルールによって発行される診断は、ドキュメント内で警告の重大度で表示されます。
ルールを有効にするには、診断の重大度を必要に応じて変更する必要があります:
lintルールの無効化
Section titled lintルールの無効化ルールを無効化するには無効にしたい設定の項目に"off"
という値を追加します。
例:
診断の重大度の変更
Section titled 診断の重大度の変更Biomeのほとんどのルールはエラーを発行しますが、その重大度は自由に変更することができます。
ルールの値として"warn"
を追記することで変更が適用されます。
例:
これは、リファクタリングが行われている最中や、CIをパスする必要がある場合に便利です。
ルールの設定
Section titled ルールの設定いくつかのルールには、より詳細な設定があります。
ルールに詳細な設定がある場合、ルールの値を変更することで指定できます。
level
は診断の重大度を示し、有効な値は"off"
、"warn"
、"error"
です;options
はルールに基づいて変更されます。