mirror of
https://github.com/apple/sourcekit-lsp.git
synced 2026-03-02 18:23:24 +01:00
This avoids depending on the absolute path to the INPUTS and allows looking it up at run time even if the tests have moved.
101 lines
3.1 KiB
Python
Executable File
101 lines
3.1 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import json
|
|
import sys
|
|
|
|
|
|
while True:
|
|
line = sys.stdin.readline()
|
|
if len(line) == 0:
|
|
break
|
|
|
|
assert line.startswith('Content-Length:')
|
|
length = int(line[len('Content-Length:'):])
|
|
sys.stdin.readline()
|
|
message = json.loads(sys.stdin.read(length))
|
|
|
|
response = None
|
|
if message["method"] == "build/initialize":
|
|
response = {
|
|
"jsonrpc": "2.0",
|
|
"id": message["id"],
|
|
"result": {
|
|
"displayName": "test server",
|
|
"version": "0.1",
|
|
"bspVersion": "2.0",
|
|
"rootUri": "blah",
|
|
"capabilities": {"languageIds": ["a", "b"]},
|
|
"data": {
|
|
"indexStorePath": "some/index/store/path"
|
|
}
|
|
}
|
|
}
|
|
elif message["method"] == "build/initialized":
|
|
continue
|
|
elif message["method"] == "build/shutdown":
|
|
response = {
|
|
"jsonrpc": "2.0",
|
|
"id": message["id"],
|
|
"result": None
|
|
}
|
|
elif message["method"] == "build/exit":
|
|
break
|
|
elif message["method"] == "buildTarget/sources":
|
|
response = {
|
|
"jsonrpc": "2.0",
|
|
"id": message["id"],
|
|
"result": {
|
|
"items": [
|
|
{
|
|
"target": {"uri": "build://target/a"},
|
|
"sources": [
|
|
{
|
|
"uri": "file:///path/to/a/file",
|
|
"kind": 1,
|
|
"generated": False
|
|
},
|
|
{
|
|
"uri": "file:///path/to/a/folder/",
|
|
"kind": 2,
|
|
"generated": False
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"target": {"uri": "build://target/b"},
|
|
"sources": [
|
|
{
|
|
"uri": "file:///path/to/b/file",
|
|
"kind": 1,
|
|
"generated": False
|
|
},
|
|
{
|
|
"uri": "file:///path/to/b/folder/",
|
|
"kind": 2,
|
|
"generated": False
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|
|
# ignore other notifications
|
|
elif "id" in message:
|
|
response = {
|
|
"jsonrpc": "2.0",
|
|
"id": message["id"],
|
|
"error": {
|
|
"code": 123,
|
|
"message": "unhandled method {}".format(message["method"]),
|
|
}
|
|
}
|
|
|
|
if response:
|
|
responseStr = json.dumps(response)
|
|
try:
|
|
sys.stdout.write("Content-Length: {}\r\n\r\n{}".format(len(responseStr), responseStr))
|
|
sys.stdout.flush()
|
|
except IOError:
|
|
# stdout closed, time to quit
|
|
break
|