{ "$schema": "https://biomejs.dev/schemas/2.0.0/schema.json", "vcs": { "enabled": false, "clientKind": "git", "useIgnoreFile": true, "defaultBranch": "beta" }, "formatter": { "enabled": true, "useEditorconfig": true, "indentStyle": "space", "includes": ["**", "!**/src/enums/**/*", "!**/src/data/balance/**/*"], "lineWidth": 120 }, "files": { "ignoreUnknown": true, // Adding folders to the ignore list is GREAT for performance because it prevents biome from descending into them // and having to verify whether each individual file is ignored "includes": [ "**", "!**/*.d.ts", "!**/dist/**/*", "!**/build/**/*", "!**/coverage/**/*", "!**/public/**/*", "!**/.github/**/*", "!**/node_modules/**/*", "!**/.vscode/**/*", // TODO: lint css and html? "!**/*.css", "!**/*.html", // TODO: enable linting this file "!**/src/data/moves/move.ts", // this file is too big "!**/src/data/balance/tms.ts" ] }, // TODO: Configure and enable import sorting "assist": { "actions": { "source": { "organizeImports": { "level": "off", "options": { "groups": [] } } } } }, "linter": { "enabled": true, "rules": { "recommended": true, "correctness": { "noUndeclaredVariables": "off", "noUnusedVariables": "error", "noSwitchDeclarations": "error", "noVoidTypeReturn": "error", "noUnusedImports": { "level": "error", "fix": "safe" }, "noUnusedFunctionParameters": "error", "noUnusedLabels": "error", "noPrivateImports": "error" }, "style": { "useEnumInitializers": "off", // large enums like Moves/Species would make this cumbersome "useBlockStatements": "error", "useConst": "error", "useImportType": "error", "noNonNullAssertion": "off", // TODO: Turn this on ASAP and fix all non-null assertions in non-test files "noParameterAssign": "off", "useExponentiationOperator": "off", // Too typo-prone and easy to mixup with standard multiplication (* vs **) "useDefaultParameterLast": { // TODO: Fix spots in the codebase where this flag would be triggered // and then set to "error" and re-enable the fixer "level": "warn", "fix": "none" }, "useSingleVarDeclarator": "off", "useNodejsImportProtocol": "off", "useTemplate": "off", // string concatenation is faster: https://stackoverflow.com/questions/29055518/are-es6-template-literals-faster-than-string-concatenation "useAsConstAssertion": "error", "noUnusedTemplateLiteral": "error", "useNumberNamespace": "error", "noInferrableTypes": "error", "noUselessElse": "error", "noRestrictedTypes": { "level": "error", "options": { "types": { "integer": { "message": "This is an alias for 'number' that can provide false impressions of what values can actually be contained in this variable. Use 'number' instead.", "use": "number" } } } } }, "suspicious": { "noDoubleEquals": "error", // While this would be a nice rule to enable, the current structure of the codebase makes this infeasible // due to being used for move/ability `args` params and save data-related code. // This can likely be enabled for all non-utils files once these are eventually reworked, but until then we leave it off. "noExplicitAny": "off", "noAssignInExpressions": "off", "noPrototypeBuiltins": "off", "noFallthroughSwitchClause": "error", // Prevents accidental automatic fallthroughs in switch cases (use disable comment if needed) "noImplicitAnyLet": "warn", // TODO: Refactor and make this an error "noRedeclare": "info", // TODO: Refactor and make this an error "noGlobalIsNan": "off", "noAsyncPromiseExecutor": "warn", // TODO: Refactor and make this an error "noVar": "error", "noDocumentCookie": "off" // Firefox has minimal support for the "Cookie Store API" }, "complexity": { "noExcessiveCognitiveComplexity": "info", // TODO: Refactor and make this an error "useLiteralKeys": "off", "noForEach": "off", // Foreach vs for of is not that simple. "noUselessSwitchCase": "off", // Explicit > Implicit "noUselessConstructor": "error", "noBannedTypes": "warn", // TODO: Refactor and make this an error "noThisInStatic": "error", "noUselessThisAlias": "error", "noUselessTernary": "error" }, "performance": { "noNamespaceImport": "error", "noDelete": "error" }, "nursery": { "useAdjacentGetterSetter": "error", "noConstantBinaryExpression": "error", "noTsIgnore": "error", "noAwaitInLoop": "warn", "useJsonImportAttribute": "off", // "Import attributes are only supported when the '--module' option is set to 'esnext', 'node18', 'nodenext', or 'preserve'. ts(2823)" "useIndexOf": "error", "useObjectSpread": "error", "useNumericSeparators": "off", // TODO: enable? "useIterableCallbackReturn": "warn", // TODO: refactor and make "error" "noShadow": "warn" // TODO: refactor and make "error" } } }, "javascript": { "formatter": { "quoteStyle": "double", "arrowParentheses": "asNeeded" }, "parser": { "jsxEverywhere": false } }, "overrides": [ { "includes": ["**/test/**/*.test.ts"], "linter": { "rules": { "performance": { "noDelete": "off", // TODO: evaluate if this is necessary for the test(s) to function "noNamespaceImport": "off" // this is required for `vi.spyOn` to work in some tests }, "style": { "noNonNullAssertion": "off" }, "nursery": { "noFloatingPromises": "error" } } } }, // Overrides to prevent unused import removal inside `overrides.ts` and enums files (for TSDoc linkcodes) { "includes": ["**/src/overrides.ts", "**/src/enums/**/*"], "linter": { "rules": { "correctness": { "noUnusedImports": "off" } } } }, { "includes": ["**/src/overrides.ts"], "linter": { "rules": { "style": { "useImportType": "off" } } } } ] }