{
// Biome config for this workspace. Comments are preserved in JSONC.
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
"root": true,
"files": {
"includes": [
"**",
// AI agents skill docs.
"!!**/.agents",
// Build intermediate artifacts.
"!!**/.cache",
"!!**/.data",
"!!**/.mf",
"!!**/.nitro",
"!!**/.nuxt",
"!!**/.output",
"!!**/.rstack",
// Test coverage reports.
"!!**/coverage",
"!!**/reports",
"!!**/test-results",
// Built artifacts.
"!!**/demo",
"!!**/dist-ssr",
"!!**/dist",
"!!**/docs",
"!!**/storybook-static",
// Node modules.
"!!**/node_modules"
],
// Ignore files that cannot be processed by biome.
"ignoreUnknown": true
},
// Enable Biome's built-in version control system (VCS) support.
"vcs": {
"clientKind": "git",
"enabled": true,
"useIgnoreFile": true
},
// Enable Biome's built-in code assist feature
// for code actions and refactoring.
"assist": {
"enabled": true,
"actions": {
"source": {
"useSortedInterfaceMembers": "on",
// Remove duplicate CSS classes.
"noDuplicateClasses": "on",
// Sort imports on save.
// This is useful for keeping import statements organized
// and consistent.
"organizeImports": "off",
// Sort stylesheet properties.
"useSortedProperties": "on",
// Sort package.json.
"useSortedPackageJson": "on",
// Sort html(like) attributes.
"useSortedAttributes": "on"
}
}
},
"formatter": {
"enabled": true,
// To prevent indentation shifts and resulting differences
// when adding or deleting items.
"attributePosition": "multiline",
"expand": "always",
"formatWithErrors": false,
"indentStyle": "space",
"indentWidth": 2,
"lineEnding": "lf",
"lineWidth": 80,
"useEditorconfig": true
},
"linter": {
// See https://biomejs.dev/linter/ for a list of all available rules.
"rules": {
"preset": "recommended",
"a11y": {
// Because they are often used for purposes that are meaningless
// to screen readers, such as icons.
"noSvgWithoutTitle": "off"
},
"complexity": {
// To remove the warning about processing long lines of code, uncomment the following line.
// "noExcessiveLinesPerFunction": "off",
// The contents of the interior should be kept secret. (The concept of the facade)
"noRedundantDefaultExport": "off"
},
"correctness": {
// Disable this rule to allow Node.js modules for configuration files and scripts.
"noNodejsModules": "off"
},
"nursery": {
// Enforce the sorting of CSS utility classes.
"useSortedClasses": "error",
// Do not use nextTick(()=>{...}), use await nextTick() in Vue.
"useVueNextTickPromise": "error"
},
"performance": {
"useVueVapor": "error"
},
"security": {},
"style": {
// For libraries, it's common to use default exports for the main entry point.
// Disable this rule to allow default exports in library code.
"noDefaultExport": "off",
// Add type to import when type only import.
"useImportType": "error",
// Do not use v-bind:foo="", use :foo="" in Vue.
"useVueConsistentVBindStyle": "error",
// Do not use v-on:foo="", use @foo="" in Vue.
"useVueConsistentVOnStyle": "error",
// Do not use camelCase attribute. use kebab-case attribute in Vue.
"useVueHyphenatedAttributes": "error"
},
"suspicious": {
// The `any` type completely destroys type safety and becomes a
// breeding ground for runtime errors.
"noExplicitAny": "warn",
// The removal of the console.* functions should be handled by the bundler.
"noConsole": "off",
// Do not use enum, use union.
"noConstEnum": "error"
}
}
},
"css": {
"formatter": {
"enabled": true,
"quoteStyle": "single"
},
"parser": {
"cssModules": true,
// If you are using Tailwind CSS, set this to true to avoid
// formatting issues with Tailwind directives.
"tailwindDirectives": false
}
},
"html": {
// If you are using a framework like React, Vue, Svelte or Angular,
// set this to true to avoid formatting issues with
// framework-specific syntax.
"experimentalFullSupportEnabled": false,
"formatter": {
"enabled": true,
// To prevent indentation shifts and resulting differences
// when adding or deleting items.
"attributePosition": "multiline",
// Do not omit the slash (/) for empty elements.
// e.g. <br /> instead of <br>
"selfCloseVoidElements": "always",
// Prioritize structure over whitespace characters.
// (This is because differences are more likely to occur.)
"whitespaceSensitivity": "css"
},
"parser": {
// If you use Vue.
"vue": false
}
},
"javascript": {
// When you use CSS-in-JS (such as styled-components) or
// GraphQL (such as Relay, Apollo etc.), you may want to enable
// this option to avoid formatting issues with embedded snippets.
"experimentalEmbeddedSnippetsEnabled": false,
"formatter": {
"enabled": true,
"quoteStyle": "single",
"trailingCommas": "all"
},
// If yu use global variable
"globals": [
// "$", // jQuery
// "_", // underscore.js
],
// JSXRuntime is set to "transparent" to allow JSX syntax in
// JavaScript files without requiring a specific JSX factory
// function.
// This is useful for projects that use React or other libraries
// that support JSX.
"jsxRuntime": "transparent"
},
"json": {
"formatter": {
"enabled": true,
// To prevent indentation shifts and resulting differences
// when adding or deleting items.
"expand": "always"
},
"parser": {
// Allow comments in JSON files. This is useful for configuration files
// that may contain comments for documentation purposes.
"allowComments": true
}
},
"overrides": [
{
// For test code rules.
"includes": [
"./**/__tests__/*"
],
"linter": {
"rules": {
"a11y": "off",
"correctness": {
"noUnusedVariables": "off"
},
"suspicious": {
// The test code allows the `any` type to verify that
// an error occurs when an invalid value is entered.
"noExplicitAny": "off"
}
}
}
}
]
}