| # Copy over the server file into test workspace |
| # RUN: rm -rf %t |
| # RUN: cp -r %S/Inputs/path-mappings %t |
| # |
| # RUN: clangd --path-mappings 'C:\client=%t/server' -lit-test < %s | FileCheck -strict-whitespace %s |
| {"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}} |
| --- |
| { |
| "jsonrpc": "2.0", |
| "method": "textDocument/didOpen", |
| "params": { |
| "textDocument": { |
| "uri": "file:///C:/client/bar.cpp", |
| "languageId": "cpp", |
| "text": "#include \"foo.h\"\nint main(){\nreturn foo();\n}" |
| } |
| } |
| } |
| # Ensure that the client gets back the same client path (clangd thinks it edited %t/server/bar.cpp) |
| # CHECK: "method": "textDocument/publishDiagnostics", |
| # CHECK-NEXT: "params": { |
| # CHECK-NEXT: "diagnostics": [], |
| # CHECK-NEXT: "uri": "file:///C:/client/bar.cpp", |
| # CHECK-NEXT: "version": 0 |
| # CHECK-NEXT: } |
| --- |
| # We're editing bar.cpp, which includes foo.h, where foo.h "exists" at a server location |
| # With path mappings, when we go to definition on foo(), we get back a client file uri |
| { |
| "jsonrpc": "2.0", |
| "id": 1, |
| "method": "textDocument/definition", |
| "params": { |
| "textDocument": { |
| "uri": "file:///C:/client/bar.cpp" |
| }, |
| "position": { |
| "line": 2, |
| "character": 8 |
| } |
| } |
| } |
| # CHECK: "id": 1, |
| # CHECK-NEXT: "jsonrpc": "2.0", |
| # CHECK-NEXT: "result": [ |
| # CHECK-NEXT: { |
| # CHECK-NEXT: "range": { |
| # CHECK-NEXT: "end": { |
| # CHECK-NEXT: "character": {{[0-9]+}}, |
| # CHECK-NEXT: "line": {{[0-9]+}} |
| # CHECK-NEXT: }, |
| # CHECK-NEXT: "start": { |
| # CHECK-NEXT: "character": {{[0-9]+}}, |
| # CHECK-NEXT: "line": {{[0-9]+}} |
| # CHECK-NEXT: } |
| # CHECK-NEXT: }, |
| # CHECK-NEXT: "uri": "file:///C:/client/foo.h" |
| # CHECK-NEXT: } |
| # CHECK-NEXT: ] |
| # |
| --- |
| {"jsonrpc":"2.0","id":2,"method":"shutdown"} |
| --- |
| {"jsonrpc":"2.0","method":"exit"} |