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":{"semanticHighlightingCapabilities":{"semanticHighlighting":true}}},"trace":"off"}}
3---
4#      CHECK:  "id": 0,
5# CHECK:      "semanticHighlighting": {
6# CHECK-NEXT:        "scopes": [
7# CHECK-NEXT:          [
8# CHECK-NEXT:            "variable.other.cpp"
9# CHECK-NEXT:          ],
10# CHECK-NEXT:          [
11# CHECK-NEXT:            "variable.other.local.cpp"
12# CHECK-NEXT:          ],
13# CHECK-NEXT:          [
14# CHECK-NEXT:            "variable.parameter.cpp"
15# CHECK-NEXT:          ],
16# CHECK-NEXT:          [
17# CHECK-NEXT:            "entity.name.function.cpp"
18# CHECK-NEXT:          ],
19# CHECK-NEXT:          [
20# CHECK-NEXT:            "entity.name.function.method.cpp"
21# CHECK-NEXT:          ],
22# CHECK-NEXT:          [
23# CHECK-NEXT:            "entity.name.function.method.static.cpp"
24# CHECK-NEXT:          ],
25# CHECK-NEXT:          [
26# CHECK-NEXT:            "variable.other.field.cpp"
27# CHECK-NEXT:          ],
28# CHECK-NEXT:          [
29# CHECK-NEXT:            "variable.other.field.static.cpp"
30# CHECK-NEXT:          ],
31# CHECK-NEXT:          [
32# CHECK-NEXT:            "entity.name.type.class.cpp"
33# CHECK-NEXT:          ],
34# CHECK-NEXT:          [
35# CHECK-NEXT:            "entity.name.type.enum.cpp"
36# CHECK-NEXT:          ],
37# CHECK-NEXT:          [
38# CHECK-NEXT:            "variable.other.enummember.cpp"
39# CHECK-NEXT:          ],
40# CHECK-NEXT:          [
41# CHECK-NEXT:            "entity.name.type.typedef.cpp"
42# CHECK-NEXT:          ],
43# CHECK-NEXT:          [
44# CHECK-NEXT:            "entity.name.type.dependent.cpp"
45# CHECK-NEXT:          ],
46# CHECK-NEXT:          [
47# CHECK-NEXT:            "entity.name.other.dependent.cpp"
48# CHECK-NEXT:          ],
49# CHECK-NEXT:          [
50# CHECK-NEXT:            "entity.name.namespace.cpp"
51# CHECK-NEXT:          ],
52# CHECK-NEXT:          [
53# CHECK-NEXT:            "entity.name.type.template.cpp"
54# CHECK-NEXT:          ],
55# CHECK-NEXT:          [
56# CHECK-NEXT:            "entity.name.type.concept.cpp"
57# CHECK-NEXT:          ],
58# CHECK-NEXT:          [
59# CHECK-NEXT:            "storage.type.primitive.cpp"
60# CHECK-NEXT:          ],
61# CHECK-NEXT:          [
62# CHECK-NEXT:            "entity.name.function.preprocessor.cpp"
63# CHECK-NEXT:          ],
64# CHECK-NEXT:          [
65# CHECK-NEXT:            "meta.disabled"
66# CHECK-NEXT:          ]
67# CHECK-NEXT:        ]
68# CHECK-NEXT:      },
69---
70{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.cpp","languageId":"cpp","text":"int x = 2;"}}}
71#      CHECK:  "method": "textDocument/semanticHighlighting",
72# CHECK-NEXT:  "params": {
73# CHECK-NEXT:    "lines": [
74# CHECK-NEXT:      {
75# CHECK-NEXT:        "isInactive": false,
76# CHECK-NEXT:        "line": 0,
77# CHECK-NEXT:        "tokens": "AAAABAABAAA="
78# CHECK-NEXT:      }
79# CHECK-NEXT:    ],
80# CHECK-NEXT:    "textDocument": {
81# CHECK-NEXT:      "uri": "file://{{.*}}/clangd-test/foo.cpp",
82# CHECK-NEXT:      "version": 0
83# CHECK-NEXT:    }
84# CHECK-NEXT:  }
85# CHECK-NEXT:}
86---
87{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo2.cpp","languageId":"cpp","text":"int x = 2;\nint y = 2;"}}}
88#      CHECK:  "method": "textDocument/semanticHighlighting",
89# CHECK-NEXT:  "params": {
90# CHECK-NEXT:    "lines": [
91# CHECK-NEXT:      {
92# CHECK-NEXT:        "isInactive": false,
93# CHECK-NEXT:        "line": 0,
94# CHECK-NEXT:        "tokens": "AAAABAABAAA="
95# CHECK-NEXT:      }
96# CHECK-NEXT:      {
97# CHECK-NEXT:        "isInactive": false,
98# CHECK-NEXT:        "line": 1,
99# CHECK-NEXT:        "tokens": "AAAABAABAAA="
100# CHECK-NEXT:      }
101# CHECK-NEXT:    ],
102# CHECK-NEXT:    "textDocument": {
103# CHECK-NEXT:      "uri": "file://{{.*}}/clangd-test/foo2.cpp",
104# CHECK-NEXT:      "version": 0
105# CHECK-NEXT:    }
106# CHECK-NEXT:  }
107# CHECK-NEXT:}
108---
109{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"test:///foo.cpp"},"contentChanges": [{"range":{"start": {"line": 0,"character": 10},"end": {"line": 0,"character": 10}},"rangeLength": 0,"text": "\nint y = 2;"}]}}
110#      CHECK:  "method": "textDocument/semanticHighlighting",
111# CHECK-NEXT:  "params": {
112# CHECK-NEXT:    "lines": [
113# CHECK-NEXT:      {
114# CHECK-NEXT:        "isInactive": false,
115# CHECK-NEXT:        "line": 1,
116# CHECK-NEXT:        "tokens": "AAAABAABAAA="
117# CHECK-NEXT:      }
118# CHECK-NEXT:   ],
119# CHECK-NEXT:    "textDocument": {
120# CHECK-NEXT:      "uri": "file://{{.*}}/clangd-test/foo.cpp",
121# CHECK-NEXT:      "version": 1
122# CHECK-NEXT:    }
123# CHECK-NEXT:  }
124# CHECK-NEXT:}
125---
126{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"test:///foo.cpp"},"contentChanges": [{"range":{"start": {"line": 0,"character": 10},"end": {"line": 1,"character": 10}},"rangeLength": 11,"text": ""}]}}
127#      CHECK:  "method": "textDocument/semanticHighlighting",
128# CHECK-NEXT:  "params": {
129# CHECK-NEXT:    "lines": [
130# CHECK-NEXT:      {
131# CHECK-NEXT:        "isInactive": false,
132# CHECK-NEXT:        "line": 1,
133# CHECK-NEXT:        "tokens": ""
134# CHECK-NEXT:      }
135# CHECK-NEXT:   ],
136# CHECK-NEXT:    "textDocument": {
137# CHECK-NEXT:      "uri": "file://{{.*}}/clangd-test/foo.cpp",
138# CHECK-NEXT:      "version": 2
139# CHECK-NEXT:    }
140# CHECK-NEXT:  }
141# CHECK-NEXT:}
142---
143{"jsonrpc":"2.0","id":3,"method":"shutdown"}
144---
145{"jsonrpc":"2.0","method":"exit"}
146