biome-linting

安装量: 50
排名: #14685

安装

npx skills add https://github.com/thebushidocollective/han --skill biome-linting

Biome Linting Expert knowledge of Biome's linting capabilities, rule categories, and code quality enforcement for JavaScript and TypeScript projects. Overview Biome's linter provides fast, comprehensive code quality checks with a focus on correctness, performance, security, and best practices. It's designed to catch common bugs and enforce consistent code patterns. Core Commands Basic Linting

Check files without fixing

biome check .

Check and auto-fix

biome check --write .

Check specific files

biome check src/*/.ts

CI mode (strict, fails on warnings)

biome ci . Command Options

Verbose output

biome check --verbose .

JSON output

biome check --json .

Only lint (skip formatting)

biome lint .

Apply safe fixes only

biome check
--write
--unsafe
=
false
.
Rule Categories
Accessibility (a11y)
Rules for web accessibility and WCAG compliance:
{
"linter"
:
{
"rules"
:
{
"a11y"
:
{
"recommended"
:
true
,
"noAccessKey"
:
"error"
,
"noAriaHiddenOnFocusable"
:
"error"
,
"noAutofocus"
:
"warn"
,
"noBlankTarget"
:
"error"
,
"noPositiveTabindex"
:
"error"
,
"useAltText"
:
"error"
,
"useAnchorContent"
:
"error"
,
"useButtonType"
:
"error"
,
"useValidAriaProps"
:
"error"
}
}
}
}
Common violations:
Missing alt text on images
Autofocus on form elements
Positive tabindex values
Links without content
Invalid ARIA properties
Complexity
Rules to reduce code complexity:
{
"linter"
:
{
"rules"
:
{
"complexity"
:
{
"recommended"
:
true
,
"noBannedTypes"
:
"error"
,
"noExcessiveCognitiveComplexity"
:
"warn"
,
"noExtraBooleanCast"
:
"error"
,
"noMultipleSpacesInRegularExpressionLiterals"
:
"error"
,
"noUselessCatch"
:
"error"
,
"noUselessConstructor"
:
"error"
,
"noUselessEmptyExport"
:
"error"
,
"noUselessFragments"
:
"error"
,
"noUselessLabel"
:
"error"
,
"noUselessRename"
:
"error"
,
"noUselessSwitchCase"
:
"error"
,
"noWith"
:
"error"
}
}
}
}
Correctness
Rules for code correctness and bug prevention:
{
"linter"
:
{
"rules"
:
{
"correctness"
:
{
"recommended"
:
true
,
"noChildrenProp"
:
"error"
,
"noConstAssign"
:
"error"
,
"noConstantCondition"
:
"error"
,
"noConstructorReturn"
:
"error"
,
"noEmptyPattern"
:
"error"
,
"noGlobalObjectCalls"
:
"error"
,
"noInnerDeclarations"
:
"error"
,
"noInvalidConstructorSuper"
:
"error"
,
"noNewSymbol"
:
"error"
,
"noNonoctalDecimalEscape"
:
"error"
,
"noPrecisionLoss"
:
"error"
,
"noSelfAssign"
:
"error"
,
"noSetterReturn"
:
"error"
,
"noSwitchDeclarations"
:
"error"
,
"noUndeclaredVariables"
:
"error"
,
"noUnreachable"
:
"error"
,
"noUnreachableSuper"
:
"error"
,
"noUnsafeFinally"
:
"error"
,
"noUnsafeOptionalChaining"
:
"error"
,
"noUnusedLabels"
:
"error"
,
"noUnusedVariables"
:
"error"
,
"useIsNan"
:
"error"
,
"useValidForDirection"
:
"error"
,
"useYield"
:
"error"
}
}
}
}
Critical rules:
noUndeclaredVariables
Catch undeclared variables
noUnusedVariables
Remove unused code
noConstAssign
Prevent const reassignment
noUnreachable
Detect unreachable code
useIsNan
Use isNaN() for NaN checks
Performance
Rules for performance optimization:
{
"linter"
:
{
"rules"
:
{
"performance"
:
{
"recommended"
:
true
,
"noAccumulatingSpread"
:
"warn"
,
"noDelete"
:
"error"
}
}
}
}
Security
Rules for security best practices:
{
"linter"
:
{
"rules"
:
{
"security"
:
{
"recommended"
:
true
,
"noDangerouslySetInnerHtml"
:
"error"
,
"noDangerouslySetInnerHtmlWithChildren"
:
"error"
,
"noGlobalEval"
:
"error"
}
}
}
}
Critical security rules:
Prevent XSS via innerHTML
Block eval() usage
Detect security vulnerabilities
Style
Code style and consistency rules:
{
"linter"
:
{
"rules"
:
{
"style"
:
{
"recommended"
:
true
,
"noArguments"
:
"error"
,
"noCommaOperator"
:
"error"
,
"noImplicitBoolean"
:
"warn"
,
"noNegationElse"
:
"warn"
,
"noNonNullAssertion"
:
"warn"
,
"noParameterAssign"
:
"error"
,
"noRestrictedGlobals"
:
"error"
,
"noShoutyConstants"
:
"warn"
,
"noUnusedTemplateLiteral"
:
"error"
,
"noVar"
:
"error"
,
"useBlockStatements"
:
"warn"
,
"useCollapsedElseIf"
:
"warn"
,
"useConst"
:
"error"
,
"useDefaultParameterLast"
:
"error"
,
"useEnumInitializers"
:
"warn"
,
"useExponentiationOperator"
:
"error"
,
"useFragmentSyntax"
:
"error"
,
"useNumericLiterals"
:
"error"
,
"useSelfClosingElements"
:
"error"
,
"useShorthandArrayType"
:
"error"
,
"useSingleVarDeclarator"
:
"error"
,
"useTemplate"
:
"warn"
,
"useWhile"
:
"error"
}
}
}
}
Key style rules:
noVar
Use let/const instead of var
useConst
Prefer const for immutable bindings
noNonNullAssertion
Avoid ! assertions in TypeScript
useTemplate
Prefer template literals
Suspicious
Rules for suspicious code patterns:
{
"linter"
:
{
"rules"
:
{
"suspicious"
:
{
"recommended"
:
true
,
"noArrayIndexKey"
:
"warn"
,
"noAssignInExpressions"
:
"error"
,
"noAsyncPromiseExecutor"
:
"error"
,
"noCatchAssign"
:
"error"
,
"noClassAssign"
:
"error"
,
"noCommentText"
:
"error"
,
"noCompareNegZero"
:
"error"
,
"noConsoleLog"
:
"warn"
,
"noControlCharactersInRegex"
:
"error"
,
"noDebugger"
:
"error"
,
"noDoubleEquals"
:
"error"
,
"noDuplicateCase"
:
"error"
,
"noDuplicateClassMembers"
:
"error"
,
"noDuplicateObjectKeys"
:
"error"
,
"noDuplicateParameters"
:
"error"
,
"noEmptyBlockStatements"
:
"warn"
,
"noExplicitAny"
:
"warn"
,
"noExtraNonNullAssertion"
:
"error"
,
"noFallthroughSwitchClause"
:
"error"
,
"noFunctionAssign"
:
"error"
,
"noGlobalAssign"
:
"error"
,
"noImportAssign"
:
"error"
,
"noLabelVar"
:
"error"
,
"noMisleadingCharacterClass"
:
"error"
,
"noPrototypeBuiltins"
:
"error"
,
"noRedeclare"
:
"error"
,
"noSelfCompare"
:
"error"
,
"noShadowRestrictedNames"
:
"error"
,
"noUnsafeNegation"
:
"error"
,
"useDefaultSwitchClauseLast"
:
"error"
,
"useGetterReturn"
:
"error"
,
"useValidTypeof"
:
"error"
}
}
}
}
Critical suspicious patterns:
noExplicitAny
Avoid any in TypeScript
noConsoleLog
Remove console.log in production
noDebugger
Remove debugger statements
noDoubleEquals
Use === instead of ==
noDuplicateObjectKeys
Catch duplicate keys
Rule Configuration Patterns
Strict Configuration
Maximum strictness for high-quality codebases:
{
"linter"
:
{
"enabled"
:
true
,
"rules"
:
{
"recommended"
:
true
,
"a11y"
:
{
"recommended"
:
true
}
,
"complexity"
:
{
"recommended"
:
true
}
,
"correctness"
:
{
"recommended"
:
true
}
,
"performance"
:
{
"recommended"
:
true
}
,
"security"
:
{
"recommended"
:
true
}
,
"style"
:
{
"recommended"
:
true
}
,
"suspicious"
:
{
"recommended"
:
true
,
"noExplicitAny"
:
"error"
,
"noConsoleLog"
:
"error"
}
}
}
}
Gradual Adoption
Start lenient and progressively tighten:
{
"linter"
:
{
"enabled"
:
true
,
"rules"
:
{
"recommended"
:
true
,
"suspicious"
:
{
"noExplicitAny"
:
"warn"
,
"noConsoleLog"
:
"warn"
}
,
"style"
:
{
"noVar"
:
"error"
,
"useConst"
:
"warn"
}
}
}
}
Framework-Specific
React configuration example:
{
"linter"
:
{
"rules"
:
{
"recommended"
:
true
,
"a11y"
:
{
"recommended"
:
true
}
,
"correctness"
:
{
"recommended"
:
true
,
"noChildrenProp"
:
"error"
}
,
"security"
:
{
"noDangerouslySetInnerHtml"
:
"error"
}
,
"suspicious"
:
{
"noArrayIndexKey"
:
"error"
}
}
}
}
Ignoring Violations
Inline Comments
Suppress specific violations:
// biome-ignore lint/suspicious/noExplicitAny: Legacy code
function
legacyFunction
(
data
:
any
)
{
return
data
;
}
// biome-ignore lint/suspicious/noConsoleLog: Debug logging
console
.
log
(
'Debug info'
)
;
// Multiple rules
// biome-ignore lint/suspicious/noExplicitAny lint/style/useConst: Migration
var
config
:
any
=
{
}
;
File-Level Ignores
Ignore entire file:
/ biome-ignore-file /
// Legacy file, skip all linting
Configuration Ignores
Ignore patterns in biome.json:
{
"files"
:
{
"ignore"
:
[
"/generated/"
,
"*/.config.js"
,
"/vendor/"
]
}
}
Best Practices
Enable Recommended Rules
- Start with
"recommended": true
Progressive Enhancement
- Add stricter rules gradually
Document Exceptions
- Explain why rules are disabled
Use Inline Ignores Sparingly
- Prefer fixing over ignoring
Security First
- Never disable security rules
CI Enforcement
- Use
biome ci
in pipelines
Pre-commit Hooks
- Catch issues before commit
Team Agreement
- Discuss rule changes with team
Regular Review
- Periodically review disabled rules
Fix Warnings
- Don't let warnings accumulate
Common Pitfalls
Ignoring Errors
- Using biome-ignore instead of fixing
Disabling Security
- Turning off security rules
No CI Check
- Not enforcing in continuous integration
Too Lenient
- Setting everything to "warn"
No Documentation
- Not explaining disabled rules
Inconsistent Config
- Different rules per package
Ignoring Warnings
- Treating warnings as optional
Wrong Rule Names
- Typos in rule configuration
Overly Strict
- Blocking team productivity
No Migration Plan
- Enabling all rules at once
Advanced Topics
Custom Rule Sets
Create shared rule sets for organization:
{
"extends"
:
[
"@company/biome-config"
]
,
"linter"
:
{
"rules"
:
{
"suspicious"
:
{
"noConsoleLog"
:
"error"
}
}
}
}
Per-Directory Rules
Use overrides for different code areas:
{
"overrides"
:
[
{
"include"
:
[
"src/*/.ts"
]
,
"linter"
:
{
"rules"
:
{
"suspicious"
:
{
"noExplicitAny"
:
"error"
}
}
}
}
,
{
"include"
:
[
"scripts/*/.js"
]
,
"linter"
:
{
"rules"
:
{
"suspicious"
:
{
"noConsoleLog"
:
"off"
}
}
}
}
]
}
Migration Strategy
Migrating from ESLint:
Install Biome
:
npm install -D @biomejs/biome
Initialize
:
npx biome init
Run Check
:
npx biome check .
to see violations
Fix Automatically
:
npx biome check --write .
Address Remaining
Fix issues that can't auto-fix
Tune Rules
Adjust rules based on team needs
Update CI
Replace ESLint with Biome
Remove ESLint
After validation period Integration Patterns Package.json Scripts { "scripts" : { "lint" : "biome check ." , "lint:fix" : "biome check --write ." , "lint:ci" : "biome ci ." } } Pre-commit Hook Using husky: { "husky" : { "hooks" : { "pre-commit" : "biome check --write --changed" } } } GitHub Actions - name : Run Biome run : npx biome ci . Troubleshooting False Positives If rule triggers incorrectly: Verify rule is appropriate for your code Check if bug in Biome (report upstream) Use biome-ignore with explanation Consider disabling rule if widespread Performance Issues If linting is slow: Update to latest Biome version Use VCS integration Ignore large generated directories Check for file pattern issues Rules Not Applied Verify: Linter is enabled in config Rule category is enabled Rule name is spelled correctly No overrides disabling it Files are not ignored When to Use This Skill Setting up linting for new projects Migrating from ESLint to Biome Configuring rule sets for teams Troubleshooting linting errors Optimizing code quality checks Establishing code standards Training team on Biome linting Integrating linting into CI/CD
返回排行榜