|  | # RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s -implicit-check-not=semanticHighlight | 
|  | # Send capabilities for both Theia semanticHighlight & standard semanticTokens. | 
|  | # clangd should not use/acknowledge the Theia protocol. | 
|  | {"jsonrpc":"2.0","id":0,"method":"initialize","params":{"capabilities":{"textDocument":{ | 
|  | "semanticHighlightingCapabilities":{"semanticHighlighting":true}, | 
|  | "semanticTokens":{"dynamicRegistration":true} | 
|  | }}}} | 
|  | --- | 
|  | {"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{ | 
|  | "uri": "test:///foo.cpp", | 
|  | "languageId": "cpp", | 
|  | "text": "int x = 2;" | 
|  | }}} | 
|  | --- | 
|  | # Non-incremental token request. | 
|  | {"jsonrpc":"2.0","id":1,"method":"textDocument/semanticTokens/full","params":{"textDocument":{"uri":"test:///foo.cpp"}}} | 
|  | # CHECK:       "id": 1, | 
|  | # CHECK-NEXT:  "jsonrpc": "2.0", | 
|  | # CHECK-NEXT:  "result": { | 
|  | # CHECK-NEXT:    "data": [ | 
|  | #                  First line, char 5, variable, declaration+globalScope | 
|  | # CHECK-NEXT:      0, | 
|  | # CHECK-NEXT:      4, | 
|  | # CHECK-NEXT:      1, | 
|  | # CHECK-NEXT:      0, | 
|  | # CHECK-NEXT:      131075 | 
|  | # CHECK-NEXT:    ], | 
|  | # CHECK-NEXT:    "resultId": "1" | 
|  | # CHECK-NEXT:  } | 
|  | --- | 
|  | {"jsonrpc":"2.0","method":"textDocument/didChange","params":{ | 
|  | "textDocument": {"uri":"test:///foo.cpp","version":2}, | 
|  | "contentChanges":[{"text":"int x = 2;\nint y = 3;"}] | 
|  | }} | 
|  | --- | 
|  | # Incremental token request, based on previous response. | 
|  | {"jsonrpc":"2.0","id":2,"method":"textDocument/semanticTokens/full/delta","params":{ | 
|  | "textDocument": {"uri":"test:///foo.cpp"}, | 
|  | "previousResultId": "1" | 
|  | }} | 
|  | # CHECK:       "id": 2, | 
|  | # CHECK-NEXT:  "jsonrpc": "2.0", | 
|  | # CHECK-NEXT:  "result": { | 
|  | # CHECK-NEXT:    "edits": [ | 
|  | # CHECK-NEXT:      { | 
|  | # CHECK-NEXT:        "data": [ | 
|  | #                      Next line, char 5, variable, declaration+globalScope | 
|  | # CHECK-NEXT:          1, | 
|  | # CHECK-NEXT:          4, | 
|  | # CHECK-NEXT:          1, | 
|  | # CHECK-NEXT:          0, | 
|  | # CHECK-NEXT:          131075 | 
|  | # CHECK-NEXT:        ], | 
|  | #                    Inserted at position 1 | 
|  | # CHECK-NEXT:        "deleteCount": 0, | 
|  | # CHECK-NEXT:        "start": 5 | 
|  | # CHECK-NEXT:      } | 
|  | # CHECK-NEXT:    ], | 
|  | # CHECK-NEXT:    "resultId": "2" | 
|  | # CHECK-NEXT:  } | 
|  | --- | 
|  | # Incremental token request with incorrect baseline => full tokens list. | 
|  | {"jsonrpc":"2.0","id":2,"method":"textDocument/semanticTokens/full/delta","params":{ | 
|  | "textDocument": {"uri":"test:///foo.cpp"}, | 
|  | "previousResultId": "bogus" | 
|  | }} | 
|  | # CHECK:       "id": 2, | 
|  | # CHECK-NEXT:  "jsonrpc": "2.0", | 
|  | # CHECK-NEXT:  "result": { | 
|  | # CHECK-NEXT:    "data": [ | 
|  | # CHECK-NEXT:      0, | 
|  | # CHECK-NEXT:      4, | 
|  | # CHECK-NEXT:      1, | 
|  | # CHECK-NEXT:      0, | 
|  | # CHECK-NEXT:      131075, | 
|  | # CHECK-NEXT:      1, | 
|  | # CHECK-NEXT:      4, | 
|  | # CHECK-NEXT:      1, | 
|  | # CHECK-NEXT:      0, | 
|  | # CHECK-NEXT:      131075 | 
|  | # CHECK-NEXT:    ], | 
|  | # CHECK-NEXT:    "resultId": "3" | 
|  | # CHECK-NEXT:  } | 
|  | --- | 
|  | {"jsonrpc":"2.0","id":3,"method":"shutdown"} | 
|  | --- | 
|  | {"jsonrpc":"2.0","method":"exit"} |