in test-sourcekit-lsp/test-sourcekit-lsp.py [0:0]
def main():
parser = argparse.ArgumentParser()
parser.add_argument('sourcekit_lsp')
parser.add_argument('package')
args = parser.parse_args()
lsp = LspScript()
lsp.request('initialize', {
'rootPath': args.package,
'capabilities': {},
'initializationOptions': {
'listenToUnitEvents': False,
}
})
main_swift = os.path.join(args.package, 'Sources', 'exec', 'main.swift')
with open(main_swift, 'r') as f:
main_swift_content = f.read()
lsp.note('textDocument/didOpen', {
'textDocument': {
'uri': 'file://' + main_swift,
'languageId': 'swift',
'version': 0,
'text': main_swift_content,
}
})
lsp.request('workspace/_pollIndex', {})
lsp.request('textDocument/definition', {
'textDocument': { 'uri': 'file://' + main_swift },
'position': { 'line': 3, 'character': 6}, ## zero-based
})
# CHECK: "result":[
# CHECK-DAG: lib.swift
# CHECK-DAG: "line":1
# CHECK-DAG: "character":14
# CHECK: ]
lsp.request('textDocument/definition', {
'textDocument': { 'uri': 'file://' + main_swift },
'position': { 'line': 4, 'character': 0}, ## zero-based
})
# CHECK: "result":[
# CHECK-DAG: clib.c
# CHECK-DAG: "line":2
# CHECK-DAG: "character":5
# CHECK: ]
lsp.request('textDocument/completion', {
'textDocument': { 'uri': 'file://' + main_swift },
'position': { 'line': 3, 'character': 6}, ## zero-based
})
# CHECK: "items":[
# CHECK-DAG: "label":"foo()"
# CHECK-DAG: "label":"self"
# CHECK: ]
clib_c = os.path.join(args.package, 'Sources', 'clib', 'clib.c')
with open(clib_c, 'r') as f:
clib_c_content = f.read()
lsp.note('textDocument/didOpen', {
'textDocument': {
'uri': 'file://' + clib_c,
'languageId': 'c',
'version': 0,
'text': clib_c_content,
}
})
lsp.request('textDocument/completion', {
'textDocument': { 'uri': 'file://' + clib_c },
'position': { 'line': 2, 'character': 22}, ## zero-based
})
# CHECK: "items":[
# CHECK-DAG: "insertText":"clib_func"
# Missing "clib_other" from clangd on rebranch - rdar://73762053
# DISABLED-DAG: "insertText":"clib_other"
# CHECK: ]
lsp.request('shutdown', {})
lsp.note('exit', {})
print('==== INPUT ====')
print(lsp.script)
print('')
print('==== OUTPUT ====')
skargs = [args.sourcekit_lsp, '--sync', '-Xclangd', '-sync']
p = subprocess.Popen(skargs, stdin=subprocess.PIPE, stdout=subprocess.PIPE, universal_newlines=True)
out, _ = p.communicate(lsp.script)
print(out)
print('')
if p.returncode == 0:
print('OK')
else:
print('error: sourcekit-lsp exited with code {}'.format(p.returncode))
sys.exit(1)