1# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s 2{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{"textDocument":{"codeAction":{"codeActionLiteralSupport":{}}},"workspace":{"workspaceEdit":{"documentChanges":true}}},"trace":"off"}} 3--- 4{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.c","languageId":"c","version":1,"text":"int main(int i, char **a) { if (i = 2) {}}"}}} 5# CHECK: "method": "textDocument/publishDiagnostics", 6# CHECK-NEXT: "params": { 7# CHECK-NEXT: "diagnostics": [ 8# CHECK-NEXT: { 9# CHECK-NEXT: "code": "-Wparentheses", 10# CHECK-NEXT: "message": "Using the result of an assignment as a condition without parentheses (fixes available)", 11# CHECK-NEXT: "range": { 12# CHECK-NEXT: "end": { 13# CHECK-NEXT: "character": 37, 14# CHECK-NEXT: "line": 0 15# CHECK-NEXT: }, 16# CHECK-NEXT: "start": { 17# CHECK-NEXT: "character": 32, 18# CHECK-NEXT: "line": 0 19# CHECK-NEXT: } 20# CHECK-NEXT: }, 21# CHECK-NEXT: "severity": 2, 22# CHECK-NEXT: "source": "clang" 23# CHECK-NEXT: } 24# CHECK-NEXT: ], 25# CHECK-NEXT: "uri": "file://{{.*}}/foo.c", 26# CHECK-NEXT: "version": 1 27# CHECK-NEXT: } 28--- 29{"jsonrpc":"2.0","id":2,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"test:///foo.c"},"range":{"start":{"line":0,"character":13},"end":{"line":0,"character":35}},"context":{"diagnostics":[{"range":{"start": {"line": 0, "character": 32}, "end": {"line": 0, "character": 37}},"severity":2,"message":"Using the result of an assignment as a condition without parentheses (fixes available)", "code": "-Wparentheses", "source": "clang"}]}}} 30# CHECK: "id": 2, 31# CHECK-NEXT: "jsonrpc": "2.0", 32# CHECK-NEXT: "result": [ 33# CHECK-NEXT: { 34# CHECK-NEXT: "diagnostics": [ 35# CHECK-NEXT: { 36# CHECK-NEXT: "code": "-Wparentheses", 37# CHECK-NEXT: "message": "Using the result of an assignment as a condition without parentheses (fixes available)", 38# CHECK-NEXT: "range": { 39# CHECK-NEXT: "end": { 40# CHECK-NEXT: "character": 37, 41# CHECK-NEXT: "line": 0 42# CHECK-NEXT: }, 43# CHECK-NEXT: "start": { 44# CHECK-NEXT: "character": 32, 45# CHECK-NEXT: "line": 0 46# CHECK-NEXT: } 47# CHECK-NEXT: }, 48# CHECK-NEXT: "severity": 2, 49# CHECK-NEXT: "source": "clang" 50# CHECK-NEXT: } 51# CHECK-NEXT: ], 52# CHECK-NEXT: "edit": { 53# CHECK-NEXT: "documentChanges": [ 54# CHECK-NEXT: { 55# CHECK-NEXT: "edits": [ 56# CHECK-NEXT: { 57# CHECK-NEXT: "newText": "(", 58# CHECK-NEXT: "range": { 59# CHECK-NEXT: "end": { 60# CHECK-NEXT: "character": 32, 61# CHECK-NEXT: "line": 0 62# CHECK-NEXT: }, 63# CHECK-NEXT: "start": { 64# CHECK-NEXT: "character": 32, 65# CHECK-NEXT: "line": 0 66# CHECK-NEXT: } 67# CHECK-NEXT: } 68# CHECK-NEXT: }, 69# CHECK-NEXT: { 70# CHECK-NEXT: "newText": ")", 71# CHECK-NEXT: "range": { 72# CHECK-NEXT: "end": { 73# CHECK-NEXT: "character": 37, 74# CHECK-NEXT: "line": 0 75# CHECK-NEXT: }, 76# CHECK-NEXT: "start": { 77# CHECK-NEXT: "character": 37, 78# CHECK-NEXT: "line": 0 79# CHECK-NEXT: } 80# CHECK-NEXT: } 81# CHECK-NEXT: } 82# CHECK-NEXT: ], 83# CHECK-NEXT: "textDocument": { 84# CHECK-NEXT: "uri": "file://{{.*}}/foo.c", 85# CHECK-NEXT: "version": 1 86# CHECK-NEXT: } 87# CHECK-NEXT: } 88# CHECK-NEXT: ] 89# CHECK-NEXT: }, 90# CHECK-NEXT: "kind": "quickfix", 91# CHECK-NEXT: "title": "place parentheses around the assignment to silence this warning" 92# CHECK-NEXT: }, 93# CHECK-NEXT: { 94# CHECK-NEXT: "diagnostics": [ 95# CHECK-NEXT: { 96# CHECK-NEXT: "code": "-Wparentheses", 97# CHECK-NEXT: "message": "Using the result of an assignment as a condition without parentheses (fixes available)", 98# CHECK-NEXT: "range": { 99# CHECK-NEXT: "end": { 100# CHECK-NEXT: "character": 37, 101# CHECK-NEXT: "line": 0 102# CHECK-NEXT: }, 103# CHECK-NEXT: "start": { 104# CHECK-NEXT: "character": 32, 105# CHECK-NEXT: "line": 0 106# CHECK-NEXT: } 107# CHECK-NEXT: }, 108# CHECK-NEXT: "severity": 2, 109# CHECK-NEXT: "source": "clang" 110# CHECK-NEXT: } 111# CHECK-NEXT: ], 112# CHECK-NEXT: "edit": { 113# CHECK-NEXT: "documentChanges": [ 114# CHECK-NEXT: { 115# CHECK-NEXT: "edits": [ 116# CHECK-NEXT: { 117# CHECK-NEXT: "newText": "==", 118# CHECK-NEXT: "range": { 119# CHECK-NEXT: "end": { 120# CHECK-NEXT: "character": 35, 121# CHECK-NEXT: "line": 0 122# CHECK-NEXT: }, 123# CHECK-NEXT: "start": { 124# CHECK-NEXT: "character": 34, 125# CHECK-NEXT: "line": 0 126# CHECK-NEXT: } 127# CHECK-NEXT: } 128# CHECK-NEXT: } 129# CHECK-NEXT: ], 130# CHECK-NEXT: "textDocument": { 131# CHECK-NEXT: "uri": "file://{{.*}}/foo.c", 132# CHECK-NEXT: "version": 1 133# CHECK-NEXT: } 134# CHECK-NEXT: } 135# CHECK-NEXT: ] 136# CHECK-NEXT: }, 137# CHECK-NEXT: "kind": "quickfix", 138# CHECK-NEXT: "title": "use '==' to turn this assignment into an equality comparison" 139# CHECK-NEXT: } 140# CHECK-NEXT: ] 141--- 142{"jsonrpc":"2.0","id":4,"method":"shutdown"} 143--- 144{"jsonrpc":"2.0","method":"exit"} 145 146