-
-
Notifications
You must be signed in to change notification settings - Fork 949
linter: unicorn/filename-case doesn't register changing case on windows #12404
Copy link
Copy link
Closed
Copy link
Labels
A-editorArea - Editor and Language ServerArea - Editor and Language ServerA-linterArea - LinterArea - Linter
Description
What version of Oxlint are you using?
1.7.0
What command did you run?
VSCode extension only, doesn't happen with CLI
What does your .oxlintrc.json config file look like?
What happened?
I previously had a file named Ticket.ts. Oxlint notified me that this doesn't abide my unicorn/filename-case setting, this is a correct report.
I renamed the file to ticket.ts but the issue is still being reported.
I assume this could be due to how Windows / NTFS handles filename cases. The oxlint trace shows the parsed file as Ticket.ts.
Full unedited content from the `Output` panel while having `ticket.ts` open and restarting Oxc once
2025-07-20 12:09:41.690 [info] [Trace - 12:09:41 PM] Sending request 'shutdown - (1)'.
2025-07-20 12:09:41.692 [info] [Trace - 12:09:41 PM] Received notification 'textDocument/publishDiagnostics'.
2025-07-20 12:09:41.692 [info] Params: {
"uri": "file:///c%3A/Users/Function/Desktop/jankbox/d2x-lib/Ticket.ts",
"diagnostics": []
}
2025-07-20 12:09:41.692 [info] [Trace - 12:09:41 PM] Received notification 'textDocument/publishDiagnostics'.
2025-07-20 12:09:41.692 [info] Params: {
"uri": "file:///c%3A/Users/Function/Desktop/jankbox/d2x-lib/ciosmaps-schema.ts",
"diagnostics": []
}
2025-07-20 12:09:41.692 [info] [Trace - 12:09:41 PM] Received response 'shutdown - (1)' in 1ms.
2025-07-20 12:09:41.692 [info] No result returned.
2025-07-20 12:09:41.692 [info] [Trace - 12:09:41 PM] Sending notification 'exit'.
2025-07-20 12:09:41.692 [info] No parameters provided.
2025-07-20 12:09:41.697 [info] [Trace - 12:09:41 PM] Sending request 'initialize - (0)'.
2025-07-20 12:09:41.698 [info] Params: {
"processId": 10120,
"clientInfo": {
"name": "VSCodium",
"version": "1.102.0"
},
"locale": "en",
"rootPath": "c:\\Users\\Function\\Desktop\\jankbox",
"rootUri": "file:///c%3A/Users/Function/Desktop/jankbox",
"capabilities": {
"workspace": {
"applyEdit": true,
"workspaceEdit": {
"documentChanges": true,
"resourceOperations": [
"create",
"rename",
"delete"
],
"failureHandling": "textOnlyTransactional",
"normalizesLineEndings": true,
"changeAnnotationSupport": {
"groupsOnLabel": true
}
},
"configuration": true,
"didChangeWatchedFiles": {
"dynamicRegistration": true,
"relativePatternSupport": true
},
"symbol": {
"dynamicRegistration": true,
"symbolKind": {
"valueSet": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
]
},
"tagSupport": {
"valueSet": [
1
]
},
"resolveSupport": {
"properties": [
"location.range"
]
}
},
"codeLens": {
"refreshSupport": true
},
"executeCommand": {
"dynamicRegistration": true
},
"didChangeConfiguration": {
"dynamicRegistration": true
},
"workspaceFolders": true,
"foldingRange": {
"refreshSupport": true
},
"semanticTokens": {
"refreshSupport": true
},
"fileOperations": {
"dynamicRegistration": true,
"didCreate": true,
"didRename": true,
"didDelete": true,
"willCreate": true,
"willRename": true,
"willDelete": true
},
"inlineValue": {
"refreshSupport": true
},
"inlayHint": {
"refreshSupport": true
},
"diagnostics": {
"refreshSupport": true
}
},
"textDocument": {
"publishDiagnostics": {
"relatedInformation": true,
"versionSupport": false,
"tagSupport": {
"valueSet": [
1,
2
]
},
"codeDescriptionSupport": true,
"dataSupport": true
},
"synchronization": {
"dynamicRegistration": true,
"willSave": true,
"willSaveWaitUntil": true,
"didSave": true
},
"completion": {
"dynamicRegistration": true,
"contextSupport": true,
"completionItem": {
"snippetSupport": true,
"commitCharactersSupport": true,
"documentationFormat": [
"markdown",
"plaintext"
],
"deprecatedSupport": true,
"preselectSupport": true,
"tagSupport": {
"valueSet": [
1
]
},
"insertReplaceSupport": true,
"resolveSupport": {
"properties": [
"documentation",
"detail",
"additionalTextEdits"
]
},
"insertTextModeSupport": {
"valueSet": [
1,
2
]
},
"labelDetailsSupport": true
},
"insertTextMode": 2,
"completionItemKind": {
"valueSet": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25
]
},
"completionList": {
"itemDefaults": [
"commitCharacters",
"editRange",
"insertTextFormat",
"insertTextMode",
"data"
]
}
},
"hover": {
"dynamicRegistration": true,
"contentFormat": [
"markdown",
"plaintext"
]
},
"signatureHelp": {
"dynamicRegistration": true,
"signatureInformation": {
"documentationFormat": [
"markdown",
"plaintext"
],
"parameterInformation": {
"labelOffsetSupport": true
},
"activeParameterSupport": true
},
"contextSupport": true
},
"definition": {
"dynamicRegistration": true,
"linkSupport": true
},
"references": {
"dynamicRegistration": true
},
"documentHighlight": {
"dynamicRegistration": true
},
"documentSymbol": {
"dynamicRegistration": true,
"symbolKind": {
"valueSet": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
]
},
"hierarchicalDocumentSymbolSupport": true,
"tagSupport": {
"valueSet": [
1
]
},
"labelSupport": true
},
"codeAction": {
"dynamicRegistration": true,
"isPreferredSupport": true,
"disabledSupport": true,
"dataSupport": true,
"resolveSupport": {
"properties": [
"edit"
]
},
"codeActionLiteralSupport": {
"codeActionKind": {
"valueSet": [
"",
"quickfix",
"refactor",
"refactor.extract",
"refactor.inline",
"refactor.rewrite",
"source",
"source.organizeImports"
]
}
},
"honorsChangeAnnotations": true
},
"codeLens": {
"dynamicRegistration": true
},
"formatting": {
"dynamicRegistration": true
},
"rangeFormatting": {
"dynamicRegistration": true,
"rangesSupport": true
},
"onTypeFormatting": {
"dynamicRegistration": true
},
"rename": {
"dynamicRegistration": true,
"prepareSupport": true,
"prepareSupportDefaultBehavior": 1,
"honorsChangeAnnotations": true
},
"documentLink": {
"dynamicRegistration": true,
"tooltipSupport": true
},
"typeDefinition": {
"dynamicRegistration": true,
"linkSupport": true
},
"implementation": {
"dynamicRegistration": true,
"linkSupport": true
},
"colorProvider": {
"dynamicRegistration": true
},
"foldingRange": {
"dynamicRegistration": true,
"rangeLimit": 5000,
"lineFoldingOnly": true,
"foldingRangeKind": {
"valueSet": [
"comment",
"imports",
"region"
]
},
"foldingRange": {
"collapsedText": false
}
},
"declaration": {
"dynamicRegistration": true,
"linkSupport": true
},
"selectionRange": {
"dynamicRegistration": true
},
"callHierarchy": {
"dynamicRegistration": true
},
"semanticTokens": {
"dynamicRegistration": true,
"tokenTypes": [
"namespace",
"type",
"class",
"enum",
"interface",
"struct",
"typeParameter",
"parameter",
"variable",
"property",
"enumMember",
"event",
"function",
"method",
"macro",
"keyword",
"modifier",
"comment",
"string",
"number",
"regexp",
"operator",
"decorator"
],
"tokenModifiers": [
"declaration",
"definition",
"readonly",
"static",
"deprecated",
"abstract",
"async",
"modification",
"documentation",
"defaultLibrary"
],
"formats": [
"relative"
],
"requests": {
"range": true,
"full": {
"delta": true
}
},
"multilineTokenSupport": false,
"overlappingTokenSupport": false,
"serverCancelSupport": true,
"augmentsSyntaxTokens": true
},
"linkedEditingRange": {
"dynamicRegistration": true
},
"typeHierarchy": {
"dynamicRegistration": true
},
"inlineValue": {
"dynamicRegistration": true
},
"inlayHint": {
"dynamicRegistration": true,
"resolveSupport": {
"properties": [
"tooltip",
"textEdits",
"label.tooltip",
"label.location",
"label.command"
]
}
},
"diagnostic": {
"dynamicRegistration": true,
"relatedDocumentSupport": false
}
},
"window": {
"showMessage": {
"messageActionItem": {
"additionalPropertiesSupport": true
}
},
"showDocument": {
"support": true
},
"workDoneProgress": true
},
"general": {
"staleRequestSupport": {
"cancel": true,
"retryOnContentModified": [
"textDocument/semanticTokens/full",
"textDocument/semanticTokens/range",
"textDocument/semanticTokens/full/delta"
]
},
"regularExpressions": {
"engine": "ECMAScript",
"version": "ES2020"
},
"markdown": {
"parser": "marked",
"version": "1.1.0"
},
"positionEncodings": [
"utf-16"
]
},
"notebookDocument": {
"synchronization": {
"dynamicRegistration": true,
"executionSummarySupport": true
}
}
},
"initializationOptions": [
{
"workspaceUri": "file:///c%3A/Users/Function/Desktop/jankbox",
"options": {
"run": "onType",
"configPath": null,
"unusedDisableDirectives": "allow",
"flags": {}
}
}
],
"trace": "verbose",
"workspaceFolders": [
{
"uri": "file:///c%3A/Users/Function/Desktop/jankbox",
"name": "jankbox"
}
]
}
2025-07-20 12:09:41.698 [info] [Error - 12:09:41 PM] Server process exited with code 0.
2025-07-20 12:09:41.711 [info] [2025-07-20T10:09:41Z INFO oxc_language_server] initialize: Some([WorkspaceOption { workspace_uri: Uri(Uri { scheme: Some("file"), authority: Some(Authority { userinfo: None, host: Host { text: "", data: RegName("") }, port: None }), path: "/c%3A/Users/Function/Desktop/jankbox", query: None, fragment: None }), options: Options { run: OnType, config_path: None, unused_disable_directives: Allow, flags: {} } }])
[2025-07-20T10:09:41Z INFO oxc_language_server] language server version: 1.7.0
2025-07-20 12:09:41.726 [info] [Trace - 12:09:41 PM] Received response 'initialize - (0)' in 28ms.
2025-07-20 12:09:41.726 [info] Result: {
"capabilities": {
"textDocumentSync": {
"openClose": true,
"change": 1,
"save": {
"includeText": false
}
},
"codeActionProvider": {
"codeActionKinds": [
"quickfix",
"source.fixAll.oxc"
]
},
"executeCommandProvider": {
"commands": [
"oxc.fixAll"
]
},
"workspace": {
"workspaceFolders": {
"supported": true,
"changeNotifications": true
}
}
},
"serverInfo": {
"name": "oxc",
"version": "1.7.0"
}
}
2025-07-20 12:09:41.726 [info] [Trace - 12:09:41 PM] Sending notification 'initialized'.
2025-07-20 12:09:41.726 [info] Params: {}
2025-07-20 12:09:41.727 [info] [Trace - 12:09:41 PM] Sending notification 'textDocument/didOpen'.
2025-07-20 12:09:41.727 [info] Params: {
"textDocument": {
"uri": "file:///c%3A/Users/Function/Desktop/jankbox/d2x-lib/ciosmaps-schema.ts",
"languageId": "typescript",
"version": 275,
"text": "import { XMLParser } from \"fast-xml-parser\";\r\nimport { z } from \"zod/v4\";\r\n\r\ninterface Zodable {\r\n att: Record<string, string>;\r\n children: Record<string, Zodable[]>;\r\n}\r\n\r\nconst elementToZodable = (element: Element): Zodable => {\r\n const att: Record<string, string> = {};\r\n\r\n for (const attName of element.getAttributeNames()) {\r\n const attVal = element.getAttribute(attName);\r\n\r\n if (attVal !== null) {\r\n att[attName] = attVal;\r\n }\r\n }\r\n\r\n const children: Record<string, Zodable[]> = {};\r\n\r\n for (const child of element.children) {\r\n if (child.tagName in children) {\r\n children[child.tagName] = [elementToZodable(child)];\r\n } else {\r\n children[child.tagName].push(elementToZodable(child));\r\n }\r\n }\r\n\r\n return { att, children };\r\n};\r\n\r\nconst byteStringSchema = z\r\n .string()\r\n .transform((byteString): number => Number.parseInt(byteString, 16));\r\n\r\nconst byteListSchema = z.string().transform((byteListString): Uint8Array => {\r\n const bytes = byteListString\r\n .split(\",\")\r\n .map((byteString): number => byteStringSchema.parse(byteString));\r\n\r\n return Uint8Array.from(bytes);\r\n});\r\n\r\nconst patchSchema = z.object({\r\n att: z.object({\r\n newbytes: byteListSchema,\r\n offset: byteStringSchema,\r\n originalbytes: byteListSchema,\r\n size: z.coerce.number(),\r\n }),\r\n});\r\n\r\nconst contentSchema = z.object({\r\n att: z.object({\r\n id: byteStringSchema,\r\n module: z.string().optional(),\r\n patchscount: z.coerce.number().optional(),\r\n tmdmoduleid: z.coerce.number().optional(),\r\n }),\r\n children: z.object({\r\n patch: z.array(patchSchema),\r\n }),\r\n});\r\n\r\nexport type Content = z.infer<typeof contentSchema>;\r\n\r\nconst baseSchema = z.object({\r\n att: z.object({\r\n contentscount: z.coerce.number(),\r\n ios: z.coerce.number(),\r\n modulescount: z.coerce.number(),\r\n version: z.coerce.number(),\r\n }),\r\n children: z.object({\r\n content: z.array(contentSchema),\r\n }),\r\n});\r\n\r\nexport type Base = z.infer<typeof baseSchema>;\r\n\r\nconst ciosgroupSchema = z.object({\r\n att: z.object({\r\n basescount: z.coerce.number(),\r\n name: z.string(),\r\n version: z.string(),\r\n }),\r\n children: z.object({\r\n base: z.array(baseSchema),\r\n }),\r\n});\r\n\r\nconst ciosmapsSchema = z.object({\r\n att: z.object({\r\n ciosgroupscount: z.coerce.number(),\r\n }),\r\n children: z.object({\r\n ciosgroup: z.array(ciosgroupSchema),\r\n }),\r\n});\r\n\r\ntype CiosMaps = z.infer<typeof ciosmapsSchema>;\r\n\r\nexport const parseXML = (xmlString: string): CiosMaps => {\r\n if (!(\"DOMParser\" in globalThis)) {\r\n const parser = new XMLParser({\r\n attributesGroupName: \"att\",\r\n ignoreAttributes: false,\r\n isArray: (): boolean => true\r\n });\r\n\r\n const obj = parser.parse(xmlString)\r\n }\r\n const document = new globalThis.DOMParser().parseFromString(\r\n xmlString,\r\n \"text/xml\",\r\n );\r\n const zodable = elementToZodable(document.documentElement);\r\n return ciosmapsSchema.parse(zodable);\r\n};\r\n"
}
}
2025-07-20 12:09:41.727 [info] [Trace - 12:09:41 PM] Sending notification 'textDocument/didOpen'.
2025-07-20 12:09:41.727 [info] Params: {
"textDocument": {
"uri": "file:///c%3A/Users/Function/Desktop/jankbox/d2x-lib/Ticket.ts",
"languageId": "typescript",
"version": 2889,
"text": "import { ABW } from \"../src/preload/nus/array-buffer-wrapper.ts\";\r\nimport { commonKeys } from \"./common-keys.ts\";\r\nimport { titleCrypto } from \"./crypto.ts\";\r\n\r\ninterface TitleLimit {\r\n limit_type: number;\r\n maximum_usage: number;\r\n}\r\n\r\nexport class Ticket {\r\n commonKey = commonKeys.common;\r\n /** TID/IV used for AES-CBC encryption. */\r\n titleId;\r\n /** The title key of the ticket's respective title, encrypted by a common key. */\r\n titleKeyEncrypted;\r\n private signature;\r\n private unknown2;\r\n private signatureType;\r\n private signatureIssuer;\r\n private ecdhData;\r\n private ticketVersion: number;\r\n private ticketId;\r\n private consoleId;\r\n private unknown1;\r\n private titleVersion;\r\n private permittedTitles;\r\n private permitMask;\r\n private titleExportAllowed;\r\n private commonKeyIndex;\r\n private contentAccessPermissions;\r\n private titleLimitsList;\r\n\r\n constructor(buf: ABW) {\r\n const view = new DataView(buf.buf.buffer);\r\n\r\n this.signatureType = buf.read(0, 4);\r\n this.signature = buf.read(4, 256);\r\n this.signatureIssuer = buf.read(0x140, 64);\r\n this.ecdhData = buf.read(0x180, 60);\r\n this.ticketVersion = view.getUint8(0x1bc);\r\n\r\n if (this.ticketVersion !== 0) {\r\n throw new Error(\"Only v0 tickets are supported\");\r\n }\r\n\r\n this.titleKeyEncrypted = buf.read(0x1bf, 16);\r\n this.ticketId = buf.read(0x1d0, 8);\r\n this.consoleId = view.getInt32(0x1d8);\r\n this.titleId = buf.read(0x1dc, 8);\r\n this.unknown1 = buf.read(0x1e4, 2);\r\n this.titleVersion = view.getUint16(0x1e6);\r\n this.permittedTitles = buf.read(0x1e8, 4);\r\n this.permitMask = buf.read(0x1ec, 4);\r\n this.titleExportAllowed = view.getUint8(0x1f0);\r\n this.commonKeyIndex = view.getUint8(0x1f1);\r\n this.unknown2 = buf.slice(0x1f2, 48);\r\n this.contentAccessPermissions = buf.slice(0x222, 64);\r\n\r\n // TODO unsure about this implementation! libWiiPy is weird here\r\n this.titleLimitsList = Array.from({ length: 8 }).map(\r\n (_blank, index): TitleLimit => ({\r\n limit_type: view.getUint32(0x264 + index * 8),\r\n maximum_usage: view.getUint32(0x264 + 4 + index * 8),\r\n }),\r\n );\r\n\r\n const issuerText = new TextDecoder().decode(this.signatureIssuer.buf);\r\n\r\n if (\r\n issuerText.includes(\"Root-CA00000002-XS00000006\") ||\r\n issuerText.includes(\"Root-CA00000002-XS00000004\")\r\n ) {\r\n throw new Error(\"dev tickets not supported yet\");\r\n }\r\n }\r\n\r\n async getTitleKey(): Promise<ABW> {\r\n return await titleCrypto(\"decrypt\", {\r\n data: this.titleKeyEncrypted,\r\n iv: this.titleId.pad(16),\r\n key: this.commonKey,\r\n });\r\n }\r\n\r\n async fakeSign(): Promise<void> {\r\n this.signature = new ABW(new Uint8Array(256));\r\n let currentInt = 0;\r\n let testHash = new ABW();\r\n\r\n while (testHash.buf[0] !== 0x00 && testHash.buf[1] !== 0x00) {\r\n currentInt += 1;\r\n this.unknown2 = ABW.fromInt(2, currentInt).concatenate(\r\n this.unknown2.slice(2),\r\n );\r\n\r\n // oxlint-disable-next-line no-await-in-loop\r\n const sha1 = await this.dump().sha1();\r\n testHash = sha1.slice(320);\r\n // TODO overflow check?\r\n }\r\n }\r\n\r\n dump(): ABW {\r\n const signaturePart = this.signatureType.concatenate(this.signature);\r\n\r\n return signaturePart\r\n .pad(64)\r\n .concatenate(\r\n this.signatureIssuer.pad(64),\r\n this.ecdhData,\r\n ABW.fromInt(1, this.ticketVersion),\r\n ABW.fromInt(2, 0),\r\n this.titleKeyEncrypted,\r\n ABW.fromInt(1, 0),\r\n this.ticketId,\r\n ABW.fromInt(this.consoleId, 4),\r\n this.titleId,\r\n this.unknown1,\r\n ABW.fromInt(2, this.titleVersion),\r\n this.permittedTitles,\r\n this.permitMask,\r\n ABW.fromInt(1, this.titleExportAllowed),\r\n ABW.fromInt(1, this.commonKeyIndex),\r\n this.unknown2,\r\n this.contentAccessPermissions,\r\n ABW.fromInt(2, 0),\r\n ...this.titleLimitsList.map(\r\n (limit): ABW =>\r\n ABW.fromInt(4, limit.limit_type).concatenate(\r\n ABW.fromInt(4, limit.maximum_usage),\r\n ),\r\n ),\r\n );\r\n }\r\n}\r\n"
}
}
2025-07-20 12:09:41.727 [info] [Trace - 12:09:41 PM] Received request 'client/registerCapability - (0)'.
2025-07-20 12:09:41.727 [info] Params: {
"registrations": [
{
"id": "watcher-file:///c%3A/Users/Function/Desktop/jankbox",
"method": "workspace/didChangeWatchedFiles",
"registerOptions": {
"watchers": [
{
"globPattern": {
"baseUri": "file:///c%3A/Users/Function/Desktop/jankbox",
"pattern": "**/.oxlintrc.json"
},
"kind": 7
}
]
}
}
]
}
2025-07-20 12:09:41.728 [info] [Trace - 12:09:41 PM] Sending response 'client/registerCapability - (0)'. Processing request took 0ms
2025-07-20 12:09:41.728 [info] No result returned.
2025-07-20 12:09:41.729 [info] [Trace - 12:09:41 PM] Received notification 'textDocument/publishDiagnostics'.
2025-07-20 12:09:41.729 [info] Params: {
"uri": "file:///c%3A/Users/Function/Desktop/jankbox/d2x-lib/ciosmaps-schema.ts",
"diagnostics": [
{
"range": {
"start": {
"line": 111,
"character": 10
},
"end": {
"line": 111,
"character": 13
}
},
"severity": 1,
"code": "eslint(no-unused-vars)",
"codeDescription": {
"href": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unused-vars.html"
},
"source": "oxc",
"message": "Variable 'obj' is declared but never used. Unused variables should start with a '_'.\nhelp: Consider removing this declaration.",
"relatedInformation": [
{
"location": {
"uri": "file:///c%3A/Users/Function/Desktop/jankbox/d2x-lib/ciosmaps-schema.ts",
"range": {
"start": {
"line": 111,
"character": 10
},
"end": {
"line": 111,
"character": 13
}
}
},
"message": "'obj' is declared here"
}
]
}
],
"version": 275
}
2025-07-20 12:09:41.730 [info] [Trace - 12:09:41 PM] Received notification 'textDocument/publishDiagnostics'.
2025-07-20 12:09:41.730 [info] Params: {
"uri": "file:///c%3A/Users/Function/Desktop/jankbox/d2x-lib/Ticket.ts",
"diagnostics": [
{
"range": {
"start": {
"line": 0,
"character": 0
},
"end": {
"line": 0,
"character": 0
}
},
"severity": 1,
"code": "eslint-plugin-unicorn(filename-case)",
"codeDescription": {
"href": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/filename-case.html"
},
"source": "oxc",
"message": "Filename should be in kebab case\nhelp: Rename the file to 'ticket.ts'",
"relatedInformation": [
{
"location": {
"uri": "file:///c%3A/Users/Function/Desktop/jankbox/d2x-lib/Ticket.ts",
"range": {
"start": {
"line": 0,
"character": 0
},
"end": {
"line": 0,
"character": 0
}
}
},
"message": ""
}
]
}
],
"version": 2889
}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
A-editorArea - Editor and Language ServerArea - Editor and Language ServerA-linterArea - LinterArea - Linter
Type
Fields
Give feedbackPriority
None yet
Effort
None yet
{ "categories": { "correctness": "error", "suspicious": "error", "pedantic": "error", "perf": "error", "restriction": "error", "style": "error" }, "rules": { "oxc/no-async-await": "off", "eslint/no-console": "off", "eslint/yoda": "error", "unicorn/filename-case": "error", "eslint/no-magic-numbers": "off", "unicorn/number-literal-case": "off", "unicorn/no-null": "off", "eslint/max-params": "off", "eslint/no-await-in-loop": "off", "unicorn/numeric-separators-style": "off" } }