2026-03-09 20:58:50.722 [info] [Trace - 20:58:50] Sending notification 'textDocument/didOpen'.
2026-03-09 20:58:50.722 [info] Params: {
"textDocument": {
"uri": "file:///some/fs/path/test.ts",
"languageId": "typescript",
"version": 1,
"text": "export type SomeUnion = string | number | boolean;\n"
}
}
2026-03-09 20:58:50.722 [info] [Trace - 20:58:50] Sending request 'textDocument/diagnostic - (22)'.
2026-03-09 20:58:50.722 [info] Params: {
"textDocument": {
"uri": "file:///some/fs/path/test.ts"
}
}
2026-03-09 20:58:50.725 [info] [Trace - 20:58:50] Sending request 'textDocument/codeAction - (23)'.
2026-03-09 20:58:50.725 [info] Params: {
"textDocument": {
"uri": "file:///some/fs/path/test.ts"
},
"range": {
"start": {
"line": 0,
"character": 0
},
"end": {
"line": 0,
"character": 0
}
},
"context": {
"diagnostics": [],
"triggerKind": 2
}
}
2026-03-09 20:58:50.734 [info] [Trace - 20:58:50] Received response 'textDocument/diagnostic - (22)' in 12ms.
2026-03-09 20:58:50.734 [info] Result: {
"kind": "full",
"items": [
{
"range": {
"start": {
"line": 0,
"character": 33
},
"end": {
"line": 0,
"character": 39
}
},
"severity": 1,
"code": "perfectionist(sort-union-types)",
"source": "oxc",
"message": "Expected \"number\" to come before \"string\".",
"relatedInformation": [
{
"location": {
"uri": "file:///some/fs/path/test.ts",
"range": {
"start": {
"line": 0,
"character": 33
},
"end": {
"line": 0,
"character": 39
}
}
},
"message": ""
}
]
},
{
"range": {
"start": {
"line": 0,
"character": 42
},
"end": {
"line": 0,
"character": 49
}
},
"severity": 1,
"code": "perfectionist(sort-union-types)",
"source": "oxc",
"message": "Expected \"boolean\" to come before \"number\".",
"relatedInformation": [
{
"location": {
"uri": "file:///some/fs/path/test.ts",
"range": {
"start": {
"line": 0,
"character": 42
},
"end": {
"line": 0,
"character": 49
}
}
},
"message": ""
}
]
}
]
}
2026-03-09 20:58:50.738 [info] [Trace - 20:58:50] Received response 'textDocument/codeAction - (23)' in 13ms.
2026-03-09 20:58:50.738 [info] No result returned.
2026-03-09 20:58:50.830 [info] [Trace - 20:58:50] Sending request 'textDocument/codeAction - (24)'.
2026-03-09 20:58:50.830 [info] Params: {
"textDocument": {
"uri": "file:///some/fs/path/test.ts"
},
"range": {
"start": {
"line": 0,
"character": 42
},
"end": {
"line": 0,
"character": 49
}
},
"context": {
"diagnostics": [
{
"range": {
"start": {
"line": 0,
"character": 42
},
"end": {
"line": 0,
"character": 49
}
},
"message": "Expected \"boolean\" to come before \"number\".",
"code": "perfectionist(sort-union-types)",
"severity": 1,
"relatedInformation": [
{
"message": "",
"location": {
"uri": "file:///some/fs/path/test.ts",
"range": {
"start": {
"line": 0,
"character": 42
},
"end": {
"line": 0,
"character": 49
}
}
}
}
],
"source": "oxc"
}
],
"triggerKind": 2
}
}
2026-03-09 20:58:50.830 [info] [Trace - 20:58:50] Received response 'textDocument/codeAction - (24)' in 0ms.
2026-03-09 20:58:50.830 [info] Result: [
{
"title": "Fix this Expected \"boolean\" to come before \"number\". problem",
"kind": "quickfix",
"edit": {
"changes": {
"file:///some/fs/path/test.ts": [
{
"range": {
"start": {
"line": 0,
"character": 24
},
"end": {
"line": 0,
"character": 49
}
},
"newText": "boolean | number | string"
}
]
}
},
"isPreferred": true
},
{
"title": "Disable perfectionist/sort-union-types for this line",
"kind": "quickfix",
"edit": {
"changes": {
"file:///some/fs/path/test.ts": [
{
"range": {
"start": {
"line": 0,
"character": 0
},
"end": {
"line": 0,
"character": 0
}
},
"newText": "// oxlint-disable-next-line perfectionist/sort-union-types\n"
}
]
}
},
"isPreferred": false
},
{
"title": "Disable perfectionist/sort-union-types for this whole file",
"kind": "quickfix",
"edit": {
"changes": {
"file:///some/fs/path/test.ts": [
{
"range": {
"start": {
"line": 0,
"character": 0
},
"end": {
"line": 0,
"character": 0
}
},
"newText": "// oxlint-disable perfectionist/sort-union-types\n"
}
]
}
},
"isPreferred": false
}
]
2026-03-09 20:58:51.008 [info] [Trace - 20:58:51] Sending request 'textDocument/codeAction - (25)'.
2026-03-09 20:58:51.008 [info] Params: {
"textDocument": {
"uri": "file:///some/fs/path/test.ts"
},
"range": {
"start": {
"line": 0,
"character": 42
},
"end": {
"line": 0,
"character": 49
}
},
"context": {
"diagnostics": [
{
"range": {
"start": {
"line": 0,
"character": 42
},
"end": {
"line": 0,
"character": 49
}
},
"message": "Expected \"boolean\" to come before \"number\".",
"code": "perfectionist(sort-union-types)",
"severity": 1,
"relatedInformation": [
{
"message": "",
"location": {
"uri": "file:///some/fs/path/test.ts",
"range": {
"start": {
"line": 0,
"character": 42
},
"end": {
"line": 0,
"character": 49
}
}
}
}
],
"source": "oxc"
}
],
"triggerKind": 2
}
}
2026-03-09 20:58:51.008 [info] [Trace - 20:58:51] Received response 'textDocument/codeAction - (25)' in 0ms.
2026-03-09 20:58:51.008 [info] Result: [
{
"title": "Fix this Expected \"boolean\" to come before \"number\". problem",
"kind": "quickfix",
"edit": {
"changes": {
"file:///some/fs/path/test.ts": [
{
"range": {
"start": {
"line": 0,
"character": 24
},
"end": {
"line": 0,
"character": 49
}
},
"newText": "boolean | number | string"
}
]
}
},
"isPreferred": true
},
{
"title": "Disable perfectionist/sort-union-types for this line",
"kind": "quickfix",
"edit": {
"changes": {
"file:///some/fs/path/test.ts": [
{
"range": {
"start": {
"line": 0,
"character": 0
},
"end": {
"line": 0,
"character": 0
}
},
"newText": "// oxlint-disable-next-line perfectionist/sort-union-types\n"
}
]
}
},
"isPreferred": false
},
{
"title": "Disable perfectionist/sort-union-types for this whole file",
"kind": "quickfix",
"edit": {
"changes": {
"file:///some/fs/path/test.ts": [
{
"range": {
"start": {
"line": 0,
"character": 0
},
"end": {
"line": 0,
"character": 0
}
},
"newText": "// oxlint-disable perfectionist/sort-union-types\n"
}
]
}
},
"isPreferred": false
}
]
If the same block of code has more than one rule violation , where the rule(s) is(are) provided by a js plugin(s), then vscode extension does not fix the block.
Sometimes instead the fix seems to go torugh a race condition and the generated code is invalid, like if the 2 fixes got merged.
this problem does not appear for 'native' rules.
example using perfectionis sort-enums (but apply to any jsPlugin rule, even if the 2 errors come from different plugins
config:
{ "plugins": [], "jsPlugins": [ {"name": "perfectionist", "specifier": "eslint-plugin-perfectionist"} ], "rules": { "perfectionist/sort-enums": ["error", {"type": "natural"}], } }correctly highlight the error but does not fix them on save
extension trace
this instead
show the error and autofix on save
extension trace