xref: /llvm-project/mlir/test/mlir-lsp-server/code-action.test (revision ed344c88774a46aa1f1eed6b7e36f42e73031c69)
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 = 42 : f32\n// -----\nfunc.func @foo(%arg: i32) -> i64 {\nreturn %arg : i64\n}\n"
9}}}
10// -----
11{"jsonrpc":"2.0","id":1,"method":"textDocument/codeAction","params":{
12  "textDocument":{
13    "uri":"file:///foo.mlir"
14  },
15  "range":{
16    "start":{"line":0,"character":8}, "end":{"line":0,"character":10}
17  },
18  "context":{
19    "diagnostics":[{
20      "range":{"start":{"line":0,"character":8}, "end":{"line":0,"character":10}},
21      "message":"unexpected decimal integer literal for a floating point value",
22      "severity":1,
23      "relatedInformation":[{
24        "message":"add a trailing dot to make the literal a float",
25        "location":{
26          "uri":"file:///foo.mlir",
27          "range":{"start":{"line":0,"character":8}, "end":{"line":0,"character":10}}
28        }
29      }],
30      "source":"mlir"
31    }],
32    "only":["quickfix"],
33    "triggerKind":1
34  }
35}}
36// CHECK-LABEL: "id": 1
37// CHECK-NEXT:  "jsonrpc": "2.0",
38// CHECK-NEXT:  "result": [
39// CHECK-NEXT:    {
40// CHECK-NEXT:      "diagnostics": [
41// CHECK-NEXT:        {
42// CHECK-NEXT:          "message": "unexpected decimal integer literal for a floating point value",
43// CHECK-NEXT:          "range": {
44// CHECK-NEXT:            "end": {
45// CHECK-NEXT:              "character": 10,
46// CHECK-NEXT:              "line": 0
47// CHECK-NEXT:            },
48// CHECK-NEXT:            "start": {
49// CHECK-NEXT:              "character": 8,
50// CHECK-NEXT:              "line": 0
51// CHECK-NEXT:            }
52// CHECK-NEXT:          },
53// CHECK-NEXT:          "relatedInformation": [
54// CHECK-NEXT:            {
55// CHECK-NEXT:              "location": {
56// CHECK-NEXT:                "range": {
57// CHECK-NEXT:                  "end": {
58// CHECK-NEXT:                    "character": 10,
59// CHECK-NEXT:                    "line": 0
60// CHECK-NEXT:                  },
61// CHECK-NEXT:                  "start": {
62// CHECK-NEXT:                    "character": 8,
63// CHECK-NEXT:                    "line": 0
64// CHECK-NEXT:                  }
65// CHECK-NEXT:                },
66// CHECK-NEXT:                "uri": "file:///foo.mlir"
67// CHECK-NEXT:              },
68// CHECK-NEXT:              "message": "add a trailing dot to make the literal a float"
69// CHECK-NEXT:            }
70// CHECK-NEXT:          ],
71// CHECK-NEXT:          "severity": 1,
72// CHECK-NEXT:          "source": "mlir"
73// CHECK-NEXT:        }
74// CHECK-NEXT:      ],
75// CHECK-NEXT:      "edit": {
76// CHECK-NEXT:        "changes": {
77// CHECK-NEXT:          "file:///foo.mlir": [
78// CHECK-NEXT:            {
79// CHECK-LITERAL:             "newText": "// expected-error @below {{unexpected decimal integer literal for a floating point value}}\n"
80// CHECK:                     "range": {
81// CHECK-NEXT:                "end": {
82// CHECK-NEXT:                  "character": 0,
83// CHECK-NEXT:                  "line": 0
84// CHECK-NEXT:                },
85// CHECK-NEXT:                "start": {
86// CHECK-NEXT:                  "character": 0,
87// CHECK-NEXT:                  "line": 0
88// CHECK-NEXT:                }
89// CHECK-NEXT:              }
90// CHECK-NEXT:            },
91// CHECK-NEXT:            {
92// CHECK-NEXT-LITERAL:      "newText": "// expected-note @below {{add a trailing dot to make the literal a float}}\n",
93// CHECK:                   "range": {
94// CHECK-NEXT:                "end": {
95// CHECK-NEXT:                  "character": 0,
96// CHECK-NEXT:                  "line": 0
97// CHECK-NEXT:                },
98// CHECK-NEXT:                "start": {
99// CHECK-NEXT:                  "character": 0,
100// CHECK-NEXT:                  "line": 0
101// CHECK-NEXT:                }
102// CHECK-NEXT:              }
103// CHECK-NEXT:            }
104// CHECK-NEXT:          ]
105// CHECK-NEXT:        }
106// CHECK-NEXT:      },
107// CHECK-NEXT:      "kind": "quickfix",
108// CHECK-NEXT:      "title": "Add expected-* diagnostic checks"
109// CHECK-NEXT:    }
110// CHECK-NEXT:  ]
111// -----
112{"jsonrpc":"2.0","id":2,"method":"textDocument/codeAction","params":{
113  "textDocument":{"uri":"file:///foo.mlir"},
114  "range":{"start":{"line":3,"character":9},"end":{"line":3,"character":13}},
115  "context":{
116    "diagnostics":[{
117      "range":{"start":{"line":3,"character":9},"end":{"line":3,"character":13}},
118      "message":"use of value '%arg' expects different type than prior uses: 'i64' vs 'i32'",
119      "severity":1,
120      "relatedInformation":[{
121        "message":"prior use here",
122        "location":{
123          "uri":"file:///foo.mlir",
124          "range":{"start":{"line":2,"character":15},"end":{"line":2,"character":19}}
125        }
126      }],
127      "source":"mlir"
128    }],
129    "only":["quickfix"],
130    "triggerKind":1
131  }
132}}
133// CHECK-LABEL: "id": 2
134// CHECK-NEXT:  "jsonrpc": "2.0",
135// CHECK-NEXT:  "result": [
136// CHECK-NEXT:     {
137// CHECK:            "edit": {
138// CHECK-NEXT:       "changes": {
139// CHECK-NEXT:         "file:///foo.mlir": [
140// CHECK-NEXT:           {
141// CHECK-NEXT-LITERAL:     "newText": "// expected-error @below {{use of value '%arg' expects different type than prior uses: 'i64' vs 'i32'}}\n",
142// CHECK:                  "range": {
143// CHECK-NEXT:               "end": {
144// CHECK-NEXT:                 "character": 0,
145// CHECK-NEXT:                 "line": 3
146// CHECK-NEXT:               },
147// CHECK-NEXT:               "start": {
148// CHECK-NEXT:                 "character": 0,
149// CHECK-NEXT:                 "line": 3
150// CHECK-NEXT:               }
151// CHECK-NEXT:             }
152// CHECK-NEXT:           },
153// CHECK-NEXT:           {
154// CHECK-NEXT-LITERAL:     "newText": "// expected-note @below {{prior use here}}\n",
155// CHECK:                  "range": {
156// CHECK-NEXT:               "end": {
157// CHECK-NEXT:                 "character": 0,
158// CHECK-NEXT:                 "line": 2
159// CHECK-NEXT:               },
160// CHECK-NEXT:               "start": {
161// CHECK-NEXT:                 "character": 0,
162// CHECK-NEXT:                 "line": 2
163// CHECK-NEXT:               }
164// CHECK-NEXT:             }
165// CHECK-NEXT:           }
166// CHECK-NEXT:         ]
167// CHECK-NEXT:       }
168// CHECK-NEXT:     },
169// CHECK-NEXT:     "kind": "quickfix",
170// CHECK-NEXT:     "title": "Add expected-* diagnostic checks"
171// CHECK-NEXT:   }
172// CHECK-NEXT: ]
173// -----
174{"jsonrpc":"2.0","id":10,"method":"shutdown"}
175// -----
176{"jsonrpc":"2.0","method":"exit"}
177