xref: /llvm-project/mlir/test/mlir-lsp-server/hover.test (revision 9fbe3b511bf703d0d24b83dfee155d88dbe9ce12)
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