main commit
This commit is contained in:
@@ -0,0 +1,176 @@
|
||||
/* eslint-disable @typescript-eslint/naming-convention */
|
||||
// @ts-check
|
||||
import cspellESLint from "@cspell/eslint-plugin/recommended";
|
||||
import js from "@eslint/js";
|
||||
import checkFile from "eslint-plugin-check-file";
|
||||
import perfectionist from "eslint-plugin-perfectionist";
|
||||
import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended";
|
||||
import roblox from "eslint-plugin-roblox-ts";
|
||||
import unusedImports from "eslint-plugin-unused-imports";
|
||||
import { defineConfig, globalIgnores } from "eslint/config";
|
||||
import ts from "typescript-eslint";
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
const { "sort-arrays": _, ...perfectionistRules } = perfectionist.rules; // eslint-disable-line @typescript-eslint/no-unused-vars
|
||||
|
||||
export default defineConfig(
|
||||
js.configs.recommended,
|
||||
ts.configs.recommended,
|
||||
roblox.configs.recommended,
|
||||
{
|
||||
...perfectionist.configs["recommended-natural"],
|
||||
rules: Object.fromEntries(
|
||||
Object.keys(perfectionistRules).map((ruleName) => [
|
||||
`perfectionist/${ruleName}`,
|
||||
[
|
||||
"warn",
|
||||
{
|
||||
order: "asc",
|
||||
type: "natural",
|
||||
},
|
||||
],
|
||||
]),
|
||||
),
|
||||
},
|
||||
eslintPluginPrettierRecommended,
|
||||
cspellESLint,
|
||||
{
|
||||
plugins: {
|
||||
"check-file": checkFile,
|
||||
"unused-imports": unusedImports,
|
||||
},
|
||||
rules: {
|
||||
"@typescript-eslint/naming-convention": [
|
||||
"warn",
|
||||
{
|
||||
format: ["PascalCase"],
|
||||
selector: "class",
|
||||
},
|
||||
{
|
||||
format: ["camelCase"],
|
||||
selector: "classMethod",
|
||||
},
|
||||
{
|
||||
format: ["camelCase"],
|
||||
selector: "classProperty",
|
||||
},
|
||||
{
|
||||
format: ["PascalCase"],
|
||||
selector: "enum",
|
||||
},
|
||||
{
|
||||
format: ["PascalCase"],
|
||||
selector: "enumMember",
|
||||
},
|
||||
{
|
||||
custom: {
|
||||
match: true,
|
||||
regex: "^(use[A-Z][a-zA-Z0-9]*|select[A-Z][a-zA-Z0-9]*|[A-Z][a-zA-Z0-9]*)$",
|
||||
},
|
||||
format: ["PascalCase", "camelCase"],
|
||||
modifiers: ["exported"],
|
||||
selector: "function",
|
||||
},
|
||||
{
|
||||
format: ["PascalCase"],
|
||||
leadingUnderscore: "allowSingleOrDouble",
|
||||
selector: "interface",
|
||||
trailingUnderscore: "allowSingleOrDouble",
|
||||
},
|
||||
{
|
||||
format: ["PascalCase", "camelCase"],
|
||||
selector: "objectLiteralMethod",
|
||||
},
|
||||
{
|
||||
format: ["PascalCase", "camelCase"],
|
||||
selector: "objectLiteralProperty",
|
||||
},
|
||||
{
|
||||
format: ["PascalCase", "camelCase"],
|
||||
selector: "objectLiteralProperty",
|
||||
},
|
||||
{
|
||||
format: ["camelCase"],
|
||||
selector: "parameter",
|
||||
},
|
||||
{
|
||||
format: ["camelCase", "PascalCase"],
|
||||
modifiers: ["destructured"],
|
||||
selector: "parameter",
|
||||
},
|
||||
{
|
||||
format: ["camelCase"],
|
||||
selector: "parameterProperty",
|
||||
},
|
||||
{
|
||||
format: ["StrictPascalCase"],
|
||||
selector: "typeAlias",
|
||||
},
|
||||
{
|
||||
custom: {
|
||||
match: true,
|
||||
regex: "^(on[A-Z][a-zA-Z0-9]*|[A-Z][a-zA-Z0-9]*)$",
|
||||
},
|
||||
format: ["StrictPascalCase", "strictCamelCase"],
|
||||
selector: "typeMethod",
|
||||
},
|
||||
{
|
||||
format: ["StrictPascalCase"],
|
||||
selector: "typeParameter",
|
||||
},
|
||||
{
|
||||
format: ["strictCamelCase", "StrictPascalCase", "UPPER_CASE"],
|
||||
leadingUnderscore: "allowSingleOrDouble",
|
||||
selector: "typeProperty",
|
||||
trailingUnderscore: "allowSingleOrDouble",
|
||||
},
|
||||
{
|
||||
format: ["strictCamelCase", "StrictPascalCase", "UPPER_CASE"],
|
||||
leadingUnderscore: "allowSingleOrDouble",
|
||||
selector: "typeProperty",
|
||||
trailingUnderscore: "allowSingleOrDouble",
|
||||
},
|
||||
{
|
||||
format: ["UPPER_CASE", "PascalCase"],
|
||||
modifiers: ["exported", "const"],
|
||||
selector: "variable",
|
||||
},
|
||||
{
|
||||
custom: {
|
||||
match: true,
|
||||
regex: "^(use[A-Z][a-zA-Z0-9]*|get[A-Z][a-zA-Z0-9]*|[A-Z][a-zA-Z0-9]*|[a-z][a-zA-Z0-9]*Atom)$",
|
||||
},
|
||||
format: ["PascalCase", "camelCase"],
|
||||
modifiers: ["exported", "const"],
|
||||
selector: "variable",
|
||||
types: ["function"],
|
||||
},
|
||||
{
|
||||
format: ["UPPER_CASE"],
|
||||
modifiers: ["exported", "const"],
|
||||
selector: "variable",
|
||||
types: ["boolean", "number", "string"],
|
||||
},
|
||||
],
|
||||
"@typescript-eslint/no-array-constructor": "off",
|
||||
"@typescript-eslint/no-empty-object-type": "off",
|
||||
"@typescript-eslint/no-require-imports": "off",
|
||||
"@typescript-eslint/no-unused-vars": [
|
||||
"error",
|
||||
{
|
||||
varsIgnorePattern: "^[A-Z].*(Service|Controller|Component)$",
|
||||
},
|
||||
],
|
||||
"check-file/filename-naming-convention": [
|
||||
"error",
|
||||
{ "**/*": "KEBAB_CASE" },
|
||||
{ ignoreMiddleExtensions: true },
|
||||
],
|
||||
"check-file/folder-naming-convention": ["error", { "**/": "KEBAB_CASE" }],
|
||||
"no-array-constructor": "off",
|
||||
"prettier/prettier": "warn",
|
||||
},
|
||||
},
|
||||
globalIgnores(["/out", "**/assets.d.ts", "scripts"]),
|
||||
);
|
||||
Reference in New Issue
Block a user