1// RUN: mlir-lsp-server -lit-test < %s | FileCheck -strict-whitespace %s 2{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"mlir","capabilities":{},"trace":"off"}} 3// ----- 4{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{ 5 "uri":"test:///foo.mlir", 6 "languageId":"mlir", 7 "version":1, 8 "text":"func.func @foo(%arg: i1) {\n%value = arith.constant true\ncf.br ^bb2\n^bb2:\nreturn\n}" 9}}} 10// ----- 11// Hover on an operation. 12{"jsonrpc":"2.0","id":1,"method":"textDocument/hover","params":{ 13 "textDocument":{"uri":"test:///foo.mlir"}, 14 "position":{"line":1,"character":12} 15}} 16// CHECK: "id": 1, 17// CHECK-NEXT: "jsonrpc": "2.0", 18// CHECK-NEXT: "result": { 19// CHECK-NEXT: "contents": { 20// CHECK-NEXT: "kind": "markdown", 21// CHECK-NEXT: "value": "\"arith.constant\"\n\nGeneric Form:\n\n```mlir\n%0 = \"arith.constant\"() <{value = true}> : () -> i1\n```\n" 22// CHECK-NEXT: }, 23// CHECK-NEXT: "range": { 24// CHECK-NEXT: "end": { 25// CHECK-NEXT: "character": 23, 26// CHECK-NEXT: "line": 1 27// CHECK-NEXT: }, 28// CHECK-NEXT: "start": { 29// CHECK-NEXT: "character": 9, 30// CHECK-NEXT: "line": 1 31// CHECK-NEXT: } 32// CHECK-NEXT: } 33// CHECK-NEXT: } 34// ----- 35// Hover on an operation result. 36{"jsonrpc":"2.0","id":2,"method":"textDocument/hover","params":{ 37 "textDocument":{"uri":"test:///foo.mlir"}, 38 "position":{"line":1,"character":2} 39}} 40// CHECK: "id": 2, 41// CHECK-NEXT: "jsonrpc": "2.0", 42// CHECK-NEXT: "result": { 43// CHECK-NEXT: "contents": { 44// CHECK-NEXT: "kind": "markdown", 45// CHECK-NEXT: "value": "Operation: \"arith.constant\"\n\nResult #0\n\nType: `i1`\n\n" 46// CHECK-NEXT: }, 47// CHECK-NEXT: "range": { 48// CHECK-NEXT: "end": { 49// CHECK-NEXT: "character": 6, 50// CHECK-NEXT: "line": 1 51// CHECK-NEXT: }, 52// CHECK-NEXT: "start": { 53// CHECK-NEXT: "character": 0, 54// CHECK-NEXT: "line": 1 55// CHECK-NEXT: } 56// CHECK-NEXT: } 57// CHECK-NEXT: } 58// ----- 59// Hover on a Block. 60{"jsonrpc":"2.0","id":3,"method":"textDocument/hover","params":{ 61 "textDocument":{"uri":"test:///foo.mlir"}, 62 "position":{"line":3,"character":2} 63}} 64// CHECK: "id": 3, 65// CHECK-NEXT: "jsonrpc": "2.0", 66// CHECK-NEXT: "result": { 67// CHECK-NEXT: "contents": { 68// CHECK-NEXT: "kind": "markdown", 69// CHECK-NEXT: "value": "Operation: \"func.func\"\n\nBlock #1\n\nPredecessors: <Block #0>\n\n" 70// CHECK-NEXT: }, 71// CHECK-NEXT: "range": { 72// CHECK-NEXT: "end": { 73// CHECK-NEXT: "character": 4, 74// CHECK-NEXT: "line": 3 75// CHECK-NEXT: }, 76// CHECK-NEXT: "start": { 77// CHECK-NEXT: "character": 0, 78// CHECK-NEXT: "line": 3 79// CHECK-NEXT: } 80// CHECK-NEXT: } 81// CHECK-NEXT: } 82// ----- 83// Hover on a Block argument. 84{"jsonrpc":"2.0","id":4,"method":"textDocument/hover","params":{ 85 "textDocument":{"uri":"test:///foo.mlir"}, 86 "position":{"line":0,"character":17} 87}} 88// CHECK: "id": 4, 89// CHECK-NEXT: "jsonrpc": "2.0", 90// CHECK-NEXT: "result": { 91// CHECK-NEXT: "contents": { 92// CHECK-NEXT: "kind": "markdown", 93// CHECK-NEXT: "value": "Operation: \"func.func\"\n\nBlock: <Block #0>\n\nArgument #0\n\nType: `i1`\n\n" 94// CHECK-NEXT: }, 95// CHECK-NEXT: "range": { 96// CHECK-NEXT: "end": { 97// CHECK-NEXT: "character": 19, 98// CHECK-NEXT: "line": 0 99// CHECK-NEXT: }, 100// CHECK-NEXT: "start": { 101// CHECK-NEXT: "character": 15, 102// CHECK-NEXT: "line": 0 103// CHECK-NEXT: } 104// CHECK-NEXT: } 105// CHECK-NEXT: } 106// ----- 107// Hover on a region operation. 108{"jsonrpc":"2.0","id":5,"method":"textDocument/hover","params":{ 109 "textDocument":{"uri":"test:///foo.mlir"}, 110 "position":{"line":0,"character":1} 111}} 112// CHECK: "id": 5, 113// CHECK-NEXT: "jsonrpc": "2.0", 114// CHECK-NEXT: "result": { 115// CHECK-NEXT: "contents": { 116// CHECK-NEXT: "kind": "markdown", 117// CHECK-NEXT: "value": "\"func.func\" : public @foo\n\nGeneric Form:\n\n```mlir\n\"func.func\"() <{function_type = (i1) -> (), sym_name = \"foo\"}> ({...}) : () -> ()\n```\n" 118// CHECK-NEXT: }, 119// CHECK-NEXT: "range": { 120// CHECK-NEXT: "end": { 121// CHECK-NEXT: "character": 9, 122// CHECK-NEXT: "line": 0 123// CHECK-NEXT: }, 124// CHECK-NEXT: "start": { 125// CHECK-NEXT: "character": 0, 126// CHECK-NEXT: "line": 0 127// CHECK-NEXT: } 128// CHECK-NEXT: } 129// CHECK-NEXT: } 130// ----- 131// Hover on a symbol reference. 132{"jsonrpc":"2.0","id":6,"method":"textDocument/hover","params":{ 133 "textDocument":{"uri":"test:///foo.mlir"}, 134 "position":{"line":0,"character":13} 135}} 136// CHECK: "id": 6, 137// CHECK-NEXT: "jsonrpc": "2.0", 138// CHECK-NEXT: "result": { 139// CHECK-NEXT: "contents": { 140// CHECK-NEXT: "kind": "markdown", 141// CHECK-NEXT: "value": "\"func.func\" : public @foo\n\nGeneric Form:\n\n```mlir\n\"func.func\"() <{function_type = (i1) -> (), sym_name = \"foo\"}> ({...}) : () -> ()\n```\n" 142// CHECK-NEXT: }, 143// CHECK-NEXT: "range": { 144// CHECK-NEXT: "end": { 145// CHECK-NEXT: "character": 14, 146// CHECK-NEXT: "line": 0 147// CHECK-NEXT: }, 148// CHECK-NEXT: "start": { 149// CHECK-NEXT: "character": 10, 150// CHECK-NEXT: "line": 0 151// CHECK-NEXT: } 152// CHECK-NEXT: } 153// CHECK-NEXT: } 154// ----- 155{"jsonrpc":"2.0","id":7,"method":"shutdown"} 156// ----- 157{"jsonrpc":"2.0","method":"exit"} 158