Skip to content

oxfmt/lsp: ignorePatterns isn't relative to .oxfmtrc.json #21552

Description

@parched

Confirm that this is a Bug for the editor extension, not the CLI

  • This bug does not happen in the Oxlint/Oxfmt CLI
  • After restarting the editor, the bug still appears

Versions used

VS Code extension: v1.52.0
oxlint: v1.16.0
oxfmt: v0.45.0
VS Code version:
Operating System and Version:
Node Version: v24.13.1
Node Manager: volta

What happened?

I have set oxc.fmt.configPath to a .oxfmtrc.json in a subdirectory.
That has some relative ignorePatterns in it which work just fine with the CLI.
However, with the VS Code extension, they seem to be interpreted with respect to the root directory.
I.e., when I hit "Format Document" on a file that should be ignored, it is not.

For now, my workaround is just to duplicate the ignorePatterns with with subdirectory prefix

Output channel log

Click to expand
2026-04-16 15:23:58.025 [info] Searching for oxfmt binary.
2026-04-16 15:23:58.219 [info] Using server binary at: /home/j/dev/vantage-2/vantage-2/node_modules/.bin/oxfmt
2026-04-16 15:23:58.973 [info] 2026-04-16T03:23:58.849641Z  INFO tokio-rt-worker oxc_language_server::backend: initialize: Some([WorkspaceOption { workspace_uri: Uri(Uri { scheme: "file", authority: Some(Authority { userinfo: None, host: "", host_parsed: RegName(""), port: None }), path: "/home/j/dev/vantage-2", query: None, fragment: None }), options: Object {"fmt.experimental": Bool(true), "fmt.configPath": String("vantage-2/.oxfmtrc.json")} }])
2026-04-16T03:23:58.849826Z  INFO tokio-rt-worker oxc_language_server::backend: oxfmt version: 0.45.0

2026-04-16 15:24:53.150 [info] 2026-04-16T03:24:53.150072Z  INFO tokio-rt-worker tower_lsp_server::service::layers: shutdown request received, shutting down

2026-04-16 15:24:53.152 [info] 2026-04-16T03:24:53.151522Z  INFO tokio-rt-worker tower_lsp_server::service::layers: exit notification received, stopping

2026-04-16 15:24:53.217 [info] [Error - 3:24:53 PM] Server process exited with code 0.
2026-04-16 15:24:53.221 [info] Using server binary at: /home/j/dev/vantage-2/vantage-2/node_modules/.bin/oxfmt
2026-04-16 15:24:53.301 [info] 2026-04-16T03:24:53.301298Z  INFO tokio-rt-worker oxc_language_server::backend: initialize: Some([WorkspaceOption { workspace_uri: Uri(Uri { scheme: "file", authority: Some(Authority { userinfo: None, host: "", host_parsed: RegName(""), port: None }), path: "/home/j/dev/vantage-2", query: None, fragment: None }), options: Object {"fmt.experimental": Bool(true), "fmt.configPath": String("vantage-2/.oxfmtrc.json")} }])
2026-04-16T03:24:53.301346Z  INFO tokio-rt-worker oxc_language_server::backend: oxfmt version: 0.45.0

2026-04-16 15:25:30.353 [info] 2026-04-16T03:25:30.353225Z  INFO tokio-rt-worker tower_lsp_server::service::layers: shutdown request received, shutting down

2026-04-16 15:25:30.354 [info] 2026-04-16T03:25:30.354390Z  INFO tokio-rt-worker tower_lsp_server::service::layers: exit notification received, stopping

2026-04-16 15:25:30.423 [info] [Error - 3:25:30 PM] Server process exited with code 0.
2026-04-16 15:25:30.425 [info] Using server binary at: /home/j/dev/vantage-2/vantage-2/node_modules/.bin/oxfmt
2026-04-16 15:25:30.490 [info] 2026-04-16T03:25:30.489786Z  INFO tokio-rt-worker oxc_language_server::backend: initialize: Some([WorkspaceOption { workspace_uri: Uri(Uri { scheme: "file", authority: Some(Authority { userinfo: None, host: "", host_parsed: RegName(""), port: None }), path: "/home/j/dev/vantage-2", query: None, fragment: None }), options: Object {"fmt.experimental": Bool(true), "fmt.configPath": String("vantage-2/.oxfmtrc.json")} }])
2026-04-16T03:25:30.489837Z  INFO tokio-rt-worker oxc_language_server::backend: oxfmt version: 0.45.0

2026-04-16 15:27:58.387 [info] [Trace - 3:27:58 PM] Sending notification '$/setTrace'.
2026-04-16 15:27:58.387 [info] Params: {
    "value": "verbose"
}


2026-04-16 15:28:09.047 [info] [Trace - 3:28:09 PM] Sending request 'shutdown - (3)'.
2026-04-16 15:28:09.049 [info] 2026-04-16T03:28:09.048814Z  INFO tokio-rt-worker tower_lsp_server::service::layers: shutdown request received, shutting down

2026-04-16 15:28:09.049 [info] [Trace - 3:28:09 PM] Received response 'shutdown - (3)' in 2ms.
2026-04-16 15:28:09.049 [info] No result returned.


2026-04-16 15:28:09.049 [info] [Trace - 3:28:09 PM] Sending notification 'exit'.
2026-04-16 15:28:09.049 [info] No parameters provided.


2026-04-16 15:28:09.050 [info] 2026-04-16T03:28:09.050296Z  INFO tokio-rt-worker tower_lsp_server::service::layers: exit notification received, stopping

2026-04-16 15:28:09.111 [info] Using server binary at: /home/j/dev/vantage-2/vantage-2/node_modules/.bin/oxfmt
2026-04-16 15:28:09.118 [info] [Trace - 3:28:09 PM] Sending request 'initialize - (0)'.
2026-04-16 15:28:09.119 [info] Params: {
    "processId": 159458,
    "clientInfo": {
        "name": "Visual Studio Code",
        "version": "1.115.0"
    },
    "locale": "en",
    "rootPath": "/home/j/dev/vantage-2",
    "rootUri": "file:///home/j/dev/vantage-2",
    "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:///home/j/dev/vantage-2",
            "options": {
                "fmt.experimental": true,
                "fmt.configPath": "vantage-2/.oxfmtrc.json"
            }
        }
    ],
    "trace": "verbose",
    "workspaceFolders": [
        {
            "uri": "file:///home/j/dev/vantage-2",
            "name": "vantage-2"
        }
    ]
}


2026-04-16 15:28:09.120 [info] [Error - 3:28:09 PM] Server process exited with code 0.
2026-04-16 15:28:09.179 [info] 2026-04-16T03:28:09.178884Z  INFO tokio-rt-worker oxc_language_server::backend: initialize: Some([WorkspaceOption { workspace_uri: Uri(Uri { scheme: "file", authority: Some(Authority { userinfo: None, host: "", host_parsed: RegName(""), port: None }), path: "/home/j/dev/vantage-2", query: None, fragment: None }), options: Object {"fmt.experimental": Bool(true), "fmt.configPath": String("vantage-2/.oxfmtrc.json")} }])
2026-04-16T03:28:09.178927Z  INFO tokio-rt-worker oxc_language_server::backend: oxfmt version: 0.45.0

2026-04-16 15:28:09.188 [info] [Trace - 3:28:09 PM] Received response 'initialize - (0)' in 70ms.
2026-04-16 15:28:09.188 [info] Result: {
    "capabilities": {
        "textDocumentSync": {
            "openClose": true,
            "change": 1,
            "save": {
                "includeText": false
            }
        },
        "documentFormattingProvider": true,
        "workspace": {
            "workspaceFolders": {
                "supported": true,
                "changeNotifications": true
            }
        }
    },
    "serverInfo": {
        "name": "oxfmt",
        "version": "0.45.0"
    }
}


2026-04-16 15:28:09.188 [info] [Trace - 3:28:09 PM] Sending notification 'initialized'.
2026-04-16 15:28:09.188 [info] Params: {}


2026-04-16 15:28:09.196 [info] [Trace - 3:28:09 PM] Sending notification 'textDocument/didOpen'.
2026-04-16 15:28:09.196 [info] Params: {
    "textDocument": {
        "uri": "file:///home/j/dev/vantage-2/vantage-2/.oxfmtrc.json",
        "languageId": "jsonc",
        "version": 6,
        "text": "[REDACTED]"
    }
}


2026-04-16 15:28:09.196 [info] [Trace - 3:28:09 PM] Sending notification 'textDocument/didOpen'.
2026-04-16 15:28:09.199 [info] Params: {
    "textDocument": {
        "uri": "file:///home/j/dev/vantage-2/vantage-2/src/excel/orca-modeller/generated/upgrades.ts",
        "languageId": "typescript",
        "version": 11,
        "text": "[REDACTED]"
    }
}


2026-04-16 15:28:09.200 [info] [Trace - 3:28:09 PM] Sending notification 'textDocument/didOpen'.
2026-04-16 15:28:09.202 [info] Params: {
    "textDocument": {
        "uri": "git:/home/j/dev/vantage-2/vantage-2/src/excel/orca-modeller/generated/upgrades.ts?%7B%22path%22%3A%22%2Fhome%2Fj%2Fdev%2Fvantage-2%2Fvantage-2%2Fsrc%2Fexcel%2Forca-modeller%2Fgenerated%2Fupgrades.ts%22%2C%22ref%22%3A%22~%22%7D",
        "languageId": "typescript",
        "version": 1,
        "text": "[REDACTED]"
    }
}


2026-04-16 15:28:09.203 [info] [Trace - 3:28:09 PM] Sending notification 'textDocument/didOpen'.
2026-04-16 15:28:09.203 [info] Params: {
    "textDocument": {
        "uri": "file:///home/j/dev/vantage-2/.vscode/settings.json",
        "languageId": "jsonc",
        "version": 19,
        "text": "[REDACTED]"
    }
}


2026-04-16 15:28:09.203 [info] [Trace - 3:28:09 PM] Sending notification 'textDocument/didOpen'.
2026-04-16 15:28:09.203 [info] Params: {
    "textDocument": {
        "uri": "ccsettings://root/schema.json",
        "languageId": "json",
        "version": 1,
        "text": "[REDACTED]"
    }
}


2026-04-16 15:28:09.214 [info] [Trace - 3:28:09 PM] Received request 'client/registerCapability - (0)'.
2026-04-16 15:28:09.215 [info] Params: {
    "registrations": [
        {
            "id": "watcher-formatter-file:///home/j/dev/vantage-2",
            "method": "workspace/didChangeWatchedFiles",
            "registerOptions": {
                "watchers": [
                    {
                        "globPattern": {
                            "baseUri": "file:///home/j/dev/vantage-2",
                            "pattern": "vantage-2/.oxfmtrc.json"
                        },
                        "kind": 7
                    },
                    {
                        "globPattern": {
                            "baseUri": "file:///home/j/dev/vantage-2",
                            "pattern": ".editorconfig"
                        },
                        "kind": 7
                    }
                ]
            }
        }
    ]
}


2026-04-16 15:28:09.215 [info] [Trace - 3:28:09 PM] Sending response 'client/registerCapability - (0)'. Processing request took 1ms
2026-04-16 15:28:09.215 [info] No result returned.


2026-04-16 15:28:35.082 [info] [Trace - 3:28:35 PM] Sending notification 'textDocument/didOpen'.
2026-04-16 15:28:35.082 [info] Params: {
    "textDocument": {
        "uri": "file:///home/j/dev/vantage-2/vantage-2/src/cdm/analytical.ts",
        "languageId": "typescript",
        "version": 1,
        "text": "[REDACTED]"
    }
}


2026-04-16 15:28:35.131 [info] [Trace - 3:28:35 PM] Sending notification 'textDocument/didOpen'.
2026-04-16 15:28:35.131 [info] Params: {
    "textDocument": {
        "uri": "git:/home/j/dev/vantage-2/vantage-2/src/cdm/analytical.ts?%7B%22path%22%3A%22%2Fhome%2Fj%2Fdev%2Fvantage-2%2Fvantage-2%2Fsrc%2Fcdm%2Fanalytical.ts%22%2C%22ref%22%3A%22~%22%7D",
        "languageId": "typescript",
        "version": 1,
        "text": "[REDACTED]"
    }
}


2026-04-16 15:28:38.661 [info] [Trace - 3:28:38 PM] Sending notification '$/setTrace'.
2026-04-16 15:28:38.661 [info] Params: {
    "value": "verbose"
}


2026-04-16 15:28:45.851 [info] [Trace - 3:28:45 PM] Sending notification 'textDocument/didChange'.
2026-04-16 15:28:45.853 [info] Params: {
    "textDocument": {
        "uri": "file:///home/j/dev/vantage-2/vantage-2/src/excel/orca-modeller/generated/upgrades.ts",
        "version": 13
    },
    "contentChanges": [
        {
            "text": "[REDACTED]"
        }
    ]
}


2026-04-16 15:28:47.929 [info] [Trace - 3:28:47 PM] Sending request 'textDocument/formatting - (1)'.
2026-04-16 15:28:47.929 [info] Params: {
    "textDocument": {
        "uri": "file:///home/j/dev/vantage-2/vantage-2/src/excel/orca-modeller/generated/upgrades.ts"
    },
    "options": {
        "tabSize": 2,
        "insertSpaces": true
    }
}


2026-04-16 15:28:48.019 [info] [Trace - 3:28:48 PM] Received response 'textDocument/formatting - (1)' in 89ms.
2026-04-16 15:28:48.019 [info] Result: [
    {
        "range": {
            "start": {
                "line": 15,
                "character": 20
            },
            "end": {
                "line": 15,
                "character": 26
            }
        },
        "newText": ""
    }
]


2026-04-16 15:28:48.210 [info] [Trace - 3:28:48 PM] Sending notification 'textDocument/didChange'.
2026-04-16 15:28:48.212 [info] Params: {
    "textDocument": {
        "uri": "file:///home/j/dev/vantage-2/vantage-2/src/excel/orca-modeller/generated/upgrades.ts",
        "version": 14
    },
    "contentChanges": [
        {
            "text": "[REDACTED]"
        }
    ]
}


2026-04-16 15:28:48.246 [info] [Trace - 3:28:48 PM] Sending notification 'textDocument/didSave'.
2026-04-16 15:28:48.246 [info] Params: {
    "textDocument": {
        "uri": "file:///home/j/dev/vantage-2/vantage-2/src/excel/orca-modeller/generated/upgrades.ts"
    }
}


2026-04-16 15:30:23.173 [info] [Trace - 3:30:23 PM] Sending notification 'textDocument/didClose'.
2026-04-16 15:30:23.173 [info] Params: {
    "textDocument": {
        "uri": "ccsettings://root/schema.json"
    }
}


2026-04-16 15:30:23.254 [info] [Trace - 3:30:23 PM] Sending notification 'textDocument/didOpen'.
2026-04-16 15:30:23.254 [info] Params: {
    "textDocument": {
        "uri": "ccsettings://root/schema.json",
        "languageId": "json",
        "version": 1,
        "text": "[REDACTED]"
    }
}


2026-04-16 15:31:22.335 [info] [Trace - 3:31:22 PM] Sending notification 'textDocument/didOpen'.
2026-04-16 15:31:22.335 [info] Params: {
    "textDocument": {
        "uri": "file:///home/j/dev/vantage-2/README.md",
        "languageId": "markdown",
        "version": 1,
        "text": "[REDACTED]"
    }
}



Metadata

Metadata

Assignees

No one assigned

    Labels

    A-editorArea - Editor and Language ServerA-formatterArea - Formatter

    Type

    Fields

    Priority

    None yet

    Effort

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions