I’m running into a problem that may be due to my inexperience with Javascript.
I’ve implemented C/C++ language server extension and am working on support global symbol renaming (via clangd), but I find that this doesn’t work if the calculated position of the symbol to rename is at character 0 or 1 (and I suspect also at line 0 or 1.). The reason for this appears to be that when I send the parameter object to clangd, those two specific values get converted to boolean “false” or “true”, which clangd definitely objects to. These are supposed to be JSON numbers.
For example:
const params = {
newName: newName,
position: {
line: Number(selectedPos.line),
character: Number(selectedPos.character),
},
textDocument: { uri: editor.document.uri },
};
console.error("Sending", JSON.stringify(params));
const response = await client.sendRequest("textDocument/rename", params);
From clangd, I see the following:
C-Dragon[10:17:48.360000] Sending {"newName":"nng_version2","position":{"line":2002,"character":0},"textDocument":{"uri":"file:///Users/garrettdamore/Projects/nng/src/nng.c"}}
clang Language Server[10:17:48.382000] V[10:17:48.381] <<< {"id":12,"jsonrpc":"2.0","method":"textDocument/rename","params":{"newName":"nng_version2","position":{"character":false,"line":2002},"textDocument":{"uri":"file:///Users/garrettdamore/Projects/nng/src/nng.c"}}}
clang Language Server[10:17:48.382000]
clang Language Server[10:17:48.382000] I[10:17:48.381] <-- textDocument/rename(12)
clang Language Server[10:17:48.382000] E[10:17:48.381] Failed to decode textDocument/rename request: expected integer at (root).position.character
clang Language Server[10:17:48.382000] V[10:17:48.381] {
clang Language Server[10:17:48.382000] "newName": "nng_version2",
clang Language Server[10:17:48.382000] "position": {
clang Language Server[10:17:48.382000] "character": /* error: expected integer */ false,
clang Language Server[10:17:48.382000] "line": 2002
clang Language Server[10:17:48.382000] },
clang Language Server[10:17:48.382000] "textDocument": { ... }
clang Language Server[10:17:48.382000] }
clang Language Server[10:17:48.382000] I[10:17:48.381] --> reply:textDocument/rename(12) 0 ms, error: -32602: failed to decode textDocument/rename request: expected integer at (root).position.character
clang Language Server[10:17:48.382000] V[10:17:48.381] >>> {"error":{"code":-32602,"message":"failed to decode textDocument/rename request: expected integer at (root).position.character"},"id":12,"jsonrpc":"2.0"}
Is there any way I can prevent Nova from turning these fields into booleans?