xref: /llvm-project/mlir/test/mlir-lsp-server/completion.test (revision 87d02e0dfd760de38d092ef69f8a9164f28f2221)
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":"#attr = i32\n!alias = i32\nfunc.func private @foo(%arg: i32) -> i32 {\n%cast = \"builtin.unrealized_conversion_cast\"() : () -> (!pdl.value)\nreturn %"
9}}}
10// -----
11{"jsonrpc":"2.0","id":1,"method":"textDocument/completion","params":{
12  "textDocument":{"uri":"test:///foo.mlir"},
13  "position":{"line":2,"character":0}
14}}
15// CHECK-LABEL: "id": 1
16// CHECK-NEXT:  "jsonrpc": "2.0",
17// CHECK-NEXT:  "result": {
18// CHECK-NEXT:    "isIncomplete": false,
19// CHECK-NEXT:    "items": [
20// CHECK:           {
21// CHECK:             "detail": "dialect",
22// CHECK:             "insertTextFormat": 1,
23// CHECK:             "kind": 9,
24// CHECK:             "label": "builtin",
25// CHECK:             "sortText": "3"
26// CHECK:           },
27// CHECK:           {
28// CHECK:             "detail": "operation",
29// CHECK:             "insertTextFormat": 1,
30// CHECK:             "kind": 5,
31// CHECK:             "label": "module",
32// CHECK:             "sortText": "1"
33// CHECK:           }
34// CHECK:         ]
35// CHECK-NEXT:  }
36// -----
37{"jsonrpc":"2.0","id":2,"method":"textDocument/completion","params":{
38  "textDocument":{"uri":"test:///foo.mlir"},
39  "position":{"line":3,"character":9}
40}}
41// CHECK-LABEL: "id": 2
42// CHECK-NEXT:  "jsonrpc": "2.0",
43// CHECK-NEXT:  "result": {
44// CHECK-NEXT:    "isIncomplete": false,
45// CHECK-NEXT:    "items": [
46// CHECK:           {
47// CHECK:             "detail": "dialect",
48// CHECK:             "insertTextFormat": 1,
49// CHECK:             "kind": 9,
50// CHECK:             "label": "builtin",
51// CHECK:             "sortText": "3"
52// CHECK:           },
53// CHECK-NOT:       "detail": "operation",
54// CHECK:         ]
55// CHECK-NEXT:  }
56// -----
57{"jsonrpc":"2.0","id":3,"method":"textDocument/completion","params":{
58  "textDocument":{"uri":"test:///foo.mlir"},
59  "position":{"line":3,"character":17}
60}}
61// CHECK-LABEL: "id": 3
62// CHECK-NEXT:  "jsonrpc": "2.0",
63// CHECK-NEXT:  "result": {
64// CHECK-NEXT:    "isIncomplete": false,
65// CHECK-NEXT:    "items": [
66// CHECK-NOT:       "detail": "dialect",
67// CHECK:           {
68// CHECK:             "detail": "operation",
69// CHECK:             "insertTextFormat": 1,
70// CHECK:             "kind": 5,
71// CHECK:             "label": "module",
72// CHECK:             "sortText": "1"
73// CHECK:           }
74// CHECK:         ]
75// CHECK-NEXT:  }
76// -----
77{"jsonrpc":"2.0","id":4,"method":"textDocument/completion","params":{
78  "textDocument":{"uri":"test:///foo.mlir"},
79  "position":{"line":4,"character":8}
80}}
81// CHECK-LABEL: "id": 4
82// CHECK-NEXT:  "jsonrpc": "2.0",
83// CHECK-NEXT:  "result": {
84// CHECK-NEXT:    "isIncomplete": false,
85// CHECK-NEXT:    "items": [
86// CHECK-NEXT:      {
87// CHECK-NEXT:        "detail": "arg #0: i32",
88// CHECK-NEXT:        "insertText": "arg",
89// CHECK-NEXT:        "insertTextFormat": 1,
90// CHECK-NEXT:        "kind": 6,
91// CHECK-NEXT:        "label": "%arg"
92// CHECK-NEXT:      },
93// CHECK-NEXT:      {
94// CHECK-NEXT:        "detail": "builtin.unrealized_conversion_cast: !pdl.value",
95// CHECK-NEXT:        "insertText": "cast",
96// CHECK-NEXT:        "insertTextFormat": 1,
97// CHECK-NEXT:        "kind": 6,
98// CHECK-NEXT:        "label": "%cast"
99// CHECK-NEXT:      }
100// CHECK:         ]
101// CHECK-NEXT:  }
102// -----
103{"jsonrpc":"2.0","id":5,"method":"textDocument/completion","params":{
104  "textDocument":{"uri":"test:///foo.mlir"},
105  "position":{"line":2,"character":10}
106}}
107// CHECK-LABEL: "id": 5
108// CHECK-NEXT:  "jsonrpc": "2.0",
109// CHECK-NEXT:  "result": {
110// CHECK-NEXT:    "isIncomplete": false,
111// CHECK-NEXT:    "items": [
112// CHECK-NEXT:      {
113// CHECK-NEXT:        "detail": "optional",
114// CHECK-NEXT:        "insertTextFormat": 1,
115// CHECK-NEXT:        "kind": 14,
116// CHECK-NEXT:        "label": "public",
117// CHECK-NEXT:        "sortText": "0"
118// CHECK-NEXT:      },
119// CHECK-NEXT:      {
120// CHECK-NEXT:        "detail": "optional",
121// CHECK-NEXT:        "insertTextFormat": 1,
122// CHECK-NEXT:        "kind": 14,
123// CHECK-NEXT:        "label": "private",
124// CHECK-NEXT:        "sortText": "0"
125// CHECK-NEXT:      },
126// CHECK-NEXT:      {
127// CHECK-NEXT:        "detail": "optional",
128// CHECK-NEXT:        "insertTextFormat": 1,
129// CHECK-NEXT:        "kind": 14,
130// CHECK-NEXT:        "label": "nested",
131// CHECK-NEXT:        "sortText": "0"
132// CHECK-NEXT:      }
133// CHECK-NEXT:    ]
134// CHECK-NEXT:  }
135// -----
136{"jsonrpc":"2.0","id":6,"method":"textDocument/completion","params":{
137  "textDocument":{"uri":"test:///foo.mlir"},
138  "position":{"line":0,"character":8}
139}}
140// CHECK-LABEL: "id": 6
141// CHECK-NEXT:  "jsonrpc": "2.0",
142// CHECK-NEXT:  "result": {
143// CHECK-NEXT:    "isIncomplete": false,
144// CHECK-NEXT:    "items": [
145// CHECK:           {
146// CHECK:             "insertTextFormat": 1,
147// CHECK:             "kind": 5,
148// CHECK:             "label": "false"
149// CHECK:           },
150// CHECK:           {
151// CHECK:             "insertTextFormat": 1,
152// CHECK:             "kind": 5,
153// CHECK:             "label": "loc"
154// CHECK:           },
155// CHECK:           {
156// CHECK:             "insertTextFormat": 1,
157// CHECK:             "kind": 5,
158// CHECK:             "label": "true"
159// CHECK:           },
160// CHECK:           {
161// CHECK:             "insertTextFormat": 1,
162// CHECK:             "kind": 5,
163// CHECK:             "label": "unit"
164// CHECK:           }
165// CHECK:    ]
166// CHECK:  }
167// -----
168{"jsonrpc":"2.0","id":7,"method":"textDocument/completion","params":{
169  "textDocument":{"uri":"test:///foo.mlir"},
170  "position":{"line":3,"character":56}
171}}
172// CHECK-LABEL: "id": 7
173// CHECK-NEXT:  "jsonrpc": "2.0",
174// CHECK-NEXT:  "result": {
175// CHECK-NEXT:    "isIncomplete": false,
176// CHECK-NEXT:    "items": [
177// CHECK:           {
178// CHECK:              "insertTextFormat": 1,
179// CHECK:              "kind": 5,
180// CHECK:             "label": "index"
181// CHECK:           },
182// CHECK:           {
183// CHECK:             "insertTextFormat": 1,
184// CHECK:             "kind": 5,
185// CHECK:             "label": "none"
186// CHECK:           },
187// CHECK:           {
188// CHECK:             "insertText": "i",
189// CHECK:             "insertTextFormat": 1,
190// CHECK:             "kind": 5,
191// CHECK:             "label": "i<N>"
192// CHECK:           }
193// CHECK:         ]
194// CHECK-NEXT:  }
195// -----
196{"jsonrpc":"2.0","id":8,"method":"textDocument/completion","params":{
197  "textDocument":{"uri":"test:///foo.mlir"},
198  "position":{"line":3,"character":57}
199}}
200// CHECK-LABEL: "id": 8
201// CHECK-NEXT:  "jsonrpc": "2.0",
202// CHECK-NEXT:  "result": {
203// CHECK-NEXT:    "isIncomplete": false,
204// CHECK-NEXT:    "items": [
205// CHECK:           {
206// CHECK:             "detail": "dialect",
207// CHECK:             "insertTextFormat": 1,
208// CHECK:             "kind": 9,
209// CHECK:             "label": "builtin",
210// CHECK:             "sortText": "3"
211// CHECK:           },
212// CHECK:           {
213// CHECK:             "detail": "alias: i32",
214// CHECK:             "insertTextFormat": 1,
215// CHECK:             "kind": 5,
216// CHECK:             "label": "alias",
217// CHECK:             "sortText": "2"
218// CHECK:           }
219// CHECK:         ]
220// CHECK-NEXT:  }
221// -----
222{"jsonrpc":"2.0","id":9,"method":"textDocument/completion","params":{
223  "textDocument":{"uri":"test:///foo.mlir"},
224  "position":{"line":3,"character":61}
225}}
226// CHECK-LABEL: "id": 9
227// CHECK-NEXT:  "jsonrpc": "2.0",
228// CHECK-NEXT:  "result": {
229// CHECK-NEXT:    "isIncomplete": false,
230// CHECK-NEXT:    "items": [
231// CHECK-NEXT:      {
232// CHECK-NEXT:        "insertTextFormat": 1,
233// CHECK-NEXT:        "kind": 14,
234// CHECK-NEXT:        "label": "attribute",
235// CHECK-NEXT:        "sortText": "0"
236// CHECK-NEXT:      },
237// CHECK-NEXT:      {
238// CHECK-NEXT:        "insertTextFormat": 1,
239// CHECK-NEXT:        "kind": 14,
240// CHECK-NEXT:        "label": "operation",
241// CHECK-NEXT:        "sortText": "0"
242// CHECK-NEXT:      },
243// CHECK-NEXT:      {
244// CHECK-NEXT:        "insertTextFormat": 1,
245// CHECK-NEXT:        "kind": 14,
246// CHECK-NEXT:        "label": "range",
247// CHECK-NEXT:        "sortText": "0"
248// CHECK-NEXT:      },
249// CHECK-NEXT:      {
250// CHECK-NEXT:        "insertTextFormat": 1,
251// CHECK-NEXT:        "kind": 14,
252// CHECK-NEXT:        "label": "type",
253// CHECK-NEXT:        "sortText": "0"
254// CHECK-NEXT:      },
255// CHECK-NEXT:      {
256// CHECK-NEXT:        "insertTextFormat": 1,
257// CHECK-NEXT:        "kind": 14,
258// CHECK-NEXT:        "label": "value",
259// CHECK-NEXT:        "sortText": "0"
260// CHECK-NEXT:      }
261// CHECK-NEXT:    ]
262// CHECK-NEXT:  }
263// -----
264{"jsonrpc":"2.0","id":10,"method":"shutdown"}
265// -----
266{"jsonrpc":"2.0","method":"exit"}
267