mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-12-14 13:55:20 +01:00
311 lines
11 KiB
Plaintext
311 lines
11 KiB
Plaintext
/*
|
|
* SPDX-FileCopyrightText: 2024-2025 Pagefault Games
|
|
*
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
|
|
{
|
|
"$schema": "https://biomejs.dev/schemas/2.3.8/schema.json",
|
|
"vcs": {
|
|
"enabled": true,
|
|
"clientKind": "git",
|
|
"useIgnoreFile": true,
|
|
"defaultBranch": "beta"
|
|
},
|
|
"formatter": {
|
|
"enabled": true,
|
|
"useEditorconfig": true,
|
|
"indentStyle": "space",
|
|
"includes": ["**", "!src/data/balance/**"], // TODO: enable formatting of balance folder
|
|
"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": [
|
|
"**",
|
|
"!!.github",
|
|
"!!assets",
|
|
"!!coverage",
|
|
"!!dist",
|
|
"!!docs",
|
|
"!!locales",
|
|
"!!typedoc",
|
|
// TODO: lint css and html?
|
|
"!!*.css",
|
|
"!!*.html",
|
|
// this file is too big
|
|
"!src/data/balance/tm-species-map.ts",
|
|
// there's some sort of bug when Biome parses this file
|
|
// relating to recursive variable assignment
|
|
// cf https://github.com/biomejs/biome/issues/8204
|
|
// TODO: remove this exclusion when the bug is fixed
|
|
"!!test/test-utils/setup/test-end-log.ts"
|
|
]
|
|
},
|
|
"assist": {
|
|
"actions": {
|
|
"source": {
|
|
"organizeImports": {
|
|
"level": "on",
|
|
"options": {
|
|
"groups": [":ALIAS:", ":NODE:", ":PACKAGE_WITH_PROTOCOL:", ":PACKAGE:", ":PATH:"]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
// TODO: Remove unneeded `options` blocks once biome's JSON schema is fixed to not require them
|
|
"linter": {
|
|
"enabled": true,
|
|
"rules": {
|
|
"recommended": true,
|
|
"correctness": {
|
|
"noUndeclaredVariables": "error",
|
|
"useParseIntRadix": "off",
|
|
"noUnusedVariables": "error",
|
|
"noSwitchDeclarations": "error",
|
|
"noVoidTypeReturn": "error",
|
|
"noUnusedImports": {
|
|
"level": "error",
|
|
"fix": "safe",
|
|
"options": {}
|
|
},
|
|
"noUnusedFunctionParameters": "error",
|
|
"noUnusedLabels": "error",
|
|
"noPrivateImports": "error",
|
|
"useSingleJsDocAsterisk": "error",
|
|
"useJsonImportAttributes": "off" // "Import attributes are only supported when the '--module' option is set to 'esnext', 'node18', 'nodenext', or 'preserve'. ts(2823)"
|
|
},
|
|
"style": {
|
|
"useExplicitLengthCheck": {
|
|
"level": "error",
|
|
"fix": "safe",
|
|
"options": {}
|
|
},
|
|
"useAtIndex": "error",
|
|
"noNegationElse": {
|
|
"level": "info", // TODO: Promote to error eventually
|
|
"fix": "unsafe", // duplicates else blocks
|
|
"options": {}
|
|
},
|
|
// TODO: Fix all instances of this and promote to `error` - this and enums are the 2 things
|
|
// barring us from `esModuleInterop`
|
|
"noParameterProperties": "warn",
|
|
"useConsistentBuiltinInstantiation": {
|
|
"level": "error",
|
|
"fix": "safe",
|
|
"options": {}
|
|
},
|
|
"noDefaultExport": "warn", // TODO: Fix `overrides.ts` and enable
|
|
"noShoutyConstants": "error",
|
|
"useThrowNewError": {
|
|
"level": "error",
|
|
"fix": "safe",
|
|
"options": {}
|
|
},
|
|
"useThrowOnlyError": "error",
|
|
"useTrimStartEnd": "error",
|
|
"useReadonlyClassProperties": {
|
|
"level": "info", // TODO: Graduate to error eventually
|
|
// NOTE: "checkAllProperties" has an immature implementation that
|
|
// causes many false positives across files. Enable if/when maturity improves
|
|
"options": { "checkAllProperties": false }
|
|
},
|
|
"useConsistentObjectDefinitions": {
|
|
"level": "error",
|
|
"options": { "syntax": "shorthand" }
|
|
},
|
|
"useCollapsedIf": "error",
|
|
"useCollapsedElseIf": "error",
|
|
"useDeprecatedReason": "error",
|
|
"useConsistentArrayType": {
|
|
"level": "error",
|
|
"fix": "safe",
|
|
"options": {}
|
|
},
|
|
"useShorthandAssign": {
|
|
"level": "error",
|
|
"fix": "safe",
|
|
"options": {}
|
|
},
|
|
"noSubstr": "error",
|
|
"noYodaExpression": "error",
|
|
"useForOf": "error",
|
|
"useEnumInitializers": "off", // large enums like MoveId/SpeciesId would make this cumbersome
|
|
"useBlockStatements": {
|
|
"level": "error",
|
|
"fix": "safe",
|
|
"options": {}
|
|
},
|
|
"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",
|
|
"options": {}
|
|
},
|
|
"useSingleVarDeclarator": {
|
|
"level": "error",
|
|
"fix": "safe",
|
|
"options": {}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
// TODO: Wait until the rule gets options for ignoring doc comments and/or different parameter names,
|
|
// and THEN enable it codebase-wide
|
|
"useUnifiedTypeSignatures": {
|
|
"level": "info",
|
|
"fix": "none",
|
|
"options": {}
|
|
},
|
|
"useGroupedAccessorPairs": "error",
|
|
"useObjectSpread": "error",
|
|
"useNumericSeparators": "off" // TODO: Consider enabling?
|
|
},
|
|
"suspicious": {
|
|
"useErrorMessage": "error",
|
|
"noEvolvingTypes": "warn", // TODO: Review and enable ASAP - this is VERY VERY BAD
|
|
"useNumberToFixedDigitsArgument": "error",
|
|
"useGuardForIn": "warn", // TODO: Review and enable ASAP - this is EVEN FRICKING WORSE
|
|
"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", // TODO: enable this
|
|
"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": "error",
|
|
"noAsyncPromiseExecutor": "warn", // TODO: Refactor and make this an error
|
|
"noVar": "error",
|
|
"noDocumentCookie": "off", // Firefox has minimal support for the "Cookie Store API"
|
|
"noConstantBinaryExpressions": "error",
|
|
"noTsIgnore": "error",
|
|
"useIterableCallbackReturn": "warn", // TODO: Refactor and change to error
|
|
"noNonNullAssertedOptionalChain": "warn" // TODO: Refactor and change to error
|
|
},
|
|
"complexity": {
|
|
"useWhile": "error",
|
|
"noVoid": "warn", // TODO: Review and enable ASAP - this is also bad
|
|
"noUselessStringConcat": "error",
|
|
"noExcessiveCognitiveComplexity": "info", // TODO: Refactor and make this an error
|
|
"useLiteralKeys": "off", // TODO: enable?
|
|
"noForEach": "off", // Foreach vs for of is not that simple.
|
|
"noUselessSwitchCase": "off", // Explicit > Implicit
|
|
"noUselessConstructor": "error",
|
|
"noBannedTypes": "error",
|
|
"noThisInStatic": "error",
|
|
"noUselessThisAlias": "error",
|
|
"noUselessTernary": "error",
|
|
"useIndexOf": "error"
|
|
},
|
|
"performance": {
|
|
"noNamespaceImport": "error",
|
|
"noDelete": "error",
|
|
"noBarrelFile": "error"
|
|
},
|
|
"nursery": {
|
|
"noUselessUndefined": "error",
|
|
"useMaxParams": {
|
|
"level": "info", // TODO: Change to "error"... eventually...
|
|
"options": { "max": 7 }
|
|
},
|
|
"noShadow": "warn", // TODO: refactor and make "error"
|
|
"noDuplicateDependencies": "error",
|
|
"noImportCycles": "error",
|
|
// TODO: Change to error once promises are used properly
|
|
"noMisusedPromises": "info"
|
|
}
|
|
}
|
|
},
|
|
"javascript": {
|
|
"formatter": {
|
|
"quoteStyle": "double",
|
|
"arrowParentheses": "asNeeded",
|
|
"operatorLinebreak": "before"
|
|
},
|
|
"globals": ["Phaser"],
|
|
"parser": {
|
|
"jsxEverywhere": false
|
|
}
|
|
},
|
|
"overrides": [
|
|
{
|
|
"includes": ["**/scripts/**/*.js"],
|
|
"linter": {
|
|
"rules": {
|
|
"nursery": {
|
|
"noFloatingPromises": "error"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"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" // tedious in some tests
|
|
},
|
|
"nursery": {
|
|
"noFloatingPromises": "error"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
// Overrides to prevent unused import removal inside `overrides.ts`, enums & `.d.ts` files (for TSDoc linkcodes),
|
|
// as well as inside script boilerplate files (whose imports will _presumably_ be used in the generated file).
|
|
{
|
|
"includes": ["**/src/overrides.ts", "**/src/enums/**/*", "**/*.d.ts", "scripts/**/*.boilerplate.ts"],
|
|
"linter": {
|
|
"rules": {
|
|
"correctness": {
|
|
"noUnusedImports": "off"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"includes": ["**/src/overrides.ts"],
|
|
"linter": {
|
|
"rules": {
|
|
"style": {
|
|
"useImportType": "off"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|