Created
May 21, 2020 14:39
-
-
Save ZacLN/973bed1747f8ecaca8901b7e0418fb89 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using LanguageServer, CSTParser, StaticLint, SymbolServer | |
server = LanguageServerInstance(IOBuffer(), IOBuffer(), "/home/zac/.julia/environments/v1.5/", "") | |
@async run(server) | |
for n in names(LanguageServer, all = true) eval(:(import LanguageServer.$n)) end | |
for n in names(StaticLint, all = true) eval(:(import StaticLint.$n)) end | |
# paths to change on lines: 17, 18, 310 | |
workingdir = "/home/zac/.julia/dev/StaticLint" | |
initstr = """ | |
{"jsonrpc":"2.0","id":0,"method":"initialize","params":{ | |
"processId": 235349, | |
"clientInfo": { | |
"name": "vscode", | |
"version": "1.42.0" | |
}, | |
"rootPath": "$workingdir", | |
"rootUri": "file://$workingdir", | |
"capabilities": { | |
"workspace": { | |
"applyEdit": true, | |
"workspaceEdit": { | |
"documentChanges": true, | |
"resourceOperations": [ | |
"create", | |
"rename", | |
"delete" | |
], | |
"failureHandling": "textOnlyTransactional" | |
}, | |
"didChangeConfiguration": { | |
"dynamicRegistration": true | |
}, | |
"didChangeWatchedFiles": { | |
"dynamicRegistration": true | |
}, | |
"symbol": { | |
"dynamicRegistration": true, | |
"symbolKind": { | |
"valueSet": [ | |
1, | |
2, | |
3, | |
4, | |
5, | |
6, | |
7, | |
8, | |
9, | |
10, | |
11, | |
12, | |
13, | |
14, | |
15, | |
16, | |
17, | |
18, | |
19, | |
20, | |
21, | |
22, | |
23, | |
24, | |
25, | |
26 | |
] | |
} | |
}, | |
"executeCommand": { | |
"dynamicRegistration": true | |
}, | |
"configuration": true, | |
"workspaceFolders": true | |
}, | |
"textDocument": { | |
"publishDiagnostics": { | |
"relatedInformation": true, | |
"versionSupport": false, | |
"tagSupport": { | |
"valueSet": [ | |
1, | |
2 | |
] | |
} | |
}, | |
"synchronization": { | |
"dynamicRegistration": true, | |
"willSave": true, | |
"willSaveWaitUntil": true, | |
"didSave": true | |
}, | |
"completion": { | |
"dynamicRegistration": true, | |
"contextSupport": true, | |
"completionItem": { | |
"snippetSupport": true, | |
"commitCharactersSupport": true, | |
"documentationFormat": [ | |
"markdown", | |
"plaintext" | |
], | |
"deprecatedSupport": true, | |
"preselectSupport": true, | |
"tagSupport": { | |
"valueSet": [ | |
1 | |
] | |
} | |
}, | |
"completionItemKind": { | |
"valueSet": [ | |
1, | |
2, | |
3, | |
4, | |
5, | |
6, | |
7, | |
8, | |
9, | |
10, | |
11, | |
12, | |
13, | |
14, | |
15, | |
16, | |
17, | |
18, | |
19, | |
20, | |
21, | |
22, | |
23, | |
24, | |
25 | |
] | |
} | |
}, | |
"hover": { | |
"dynamicRegistration": true, | |
"contentFormat": [ | |
"markdown", | |
"plaintext" | |
] | |
}, | |
"signatureHelp": { | |
"dynamicRegistration": true, | |
"signatureInformation": { | |
"documentationFormat": [ | |
"markdown", | |
"plaintext" | |
], | |
"parameterInformation": { | |
"labelOffsetSupport": true | |
} | |
}, | |
"contextSupport": true | |
}, | |
"definition": { | |
"dynamicRegistration": true, | |
"linkSupport": true | |
}, | |
"references": { | |
"dynamicRegistration": true | |
}, | |
"documentHighlight": { | |
"dynamicRegistration": true | |
}, | |
"documentSymbol": { | |
"dynamicRegistration": true, | |
"symbolKind": { | |
"valueSet": [ | |
1, | |
2, | |
3, | |
4, | |
5, | |
6, | |
7, | |
8, | |
9, | |
10, | |
11, | |
12, | |
13, | |
14, | |
15, | |
16, | |
17, | |
18, | |
19, | |
20, | |
21, | |
22, | |
23, | |
24, | |
25, | |
26 | |
] | |
}, | |
"hierarchicalDocumentSymbolSupport": true | |
}, | |
"codeAction": { | |
"dynamicRegistration": true, | |
"isPreferredSupport": true, | |
"codeActionLiteralSupport": { | |
"codeActionKind": { | |
"valueSet": [ | |
"", | |
"quickfix", | |
"refactor", | |
"refactor.extract", | |
"refactor.inline", | |
"refactor.rewrite", | |
"source", | |
"source.organizeImports" | |
] | |
} | |
} | |
}, | |
"codeLens": { | |
"dynamicRegistration": true | |
}, | |
"formatting": { | |
"dynamicRegistration": true | |
}, | |
"rangeFormatting": { | |
"dynamicRegistration": true | |
}, | |
"onTypeFormatting": { | |
"dynamicRegistration": true | |
}, | |
"rename": { | |
"dynamicRegistration": true, | |
"prepareSupport": true | |
}, | |
"documentLink": { | |
"dynamicRegistration": true, | |
"tooltipSupport": true | |
}, | |
"typeDefinition": { | |
"dynamicRegistration": true, | |
"linkSupport": true | |
}, | |
"implementation": { | |
"dynamicRegistration": true, | |
"linkSupport": true | |
}, | |
"colorProvider": { | |
"dynamicRegistration": true | |
}, | |
"foldingRange": { | |
"dynamicRegistration": true, | |
"rangeLimit": 5000, | |
"lineFoldingOnly": true | |
}, | |
"declaration": { | |
"dynamicRegistration": true, | |
"linkSupport": true | |
}, | |
"selectionRange": { | |
"dynamicRegistration": true | |
}, | |
"callHierarchy": { | |
"dynamicRegistration": true | |
}, | |
"semanticTokens": { | |
"dynamicRegistration": true, | |
"tokenTypes": [ | |
"comment", | |
"keyword", | |
"number", | |
"regexp", | |
"operator", | |
"namespace", | |
"type", | |
"struct", | |
"class", | |
"interface", | |
"enum", | |
"typeParameter", | |
"function", | |
"member", | |
"macro", | |
"variable", | |
"parameter", | |
"property", | |
"label" | |
], | |
"tokenModifiers": [ | |
"declaration", | |
"documentation", | |
"static", | |
"abstract", | |
"deprecated", | |
"async", | |
"readonly" | |
] | |
} | |
}, | |
"window": { | |
"workDoneProgress": true | |
} | |
}, | |
"trace": "verbose", | |
"workspaceFolders": [ | |
{ | |
"uri": "file://$workingdir", | |
"name": "StaticLint" | |
} | |
] | |
}} | |
""" | |
# Startup | |
LanguageServer.process(parse(LanguageServer.JSONRPC.Request, LanguageServer.JSON.parse(initstr)), server) | |
LanguageServer.process(LanguageServer.JSONRPC.Request{Val{Symbol("initialized")},Any}(0, nothing), server) | |
################################################################################ | |
# Load an existing file | |
doc = server._documents[LanguageServer.URI2(LanguageServer.filepath2uri("/home/zac/.julia/dev/StaticLint/src/utils.jl"))] | |
################################################################################ | |
# Add a new working file | |
text = """ | |
function f(ex) | |
ex.head | |
ex | |
end | |
""" | |
LanguageServer.process(LanguageServer.JSONRPC.Request{Val{Symbol("textDocument/didOpen")},LanguageServer.DidOpenTextDocumentParams}(0, LanguageServer.DidOpenTextDocumentParams(LanguageServer.TextDocumentItem("none", "julia", 0, text))), server) | |
doc = LanguageServer.getdocument(server, LanguageServer.URI2("none")) | |
################################################################################ | |
################################################################################ | |
# Some requests | |
LanguageServer.process(LanguageServer.JSONRPC.Request{Val{Symbol("textDocument/didOpen")},LanguageServer.DidOpenTextDocumentParams}(0, LanguageServer.DidOpenTextDocumentParams(LanguageServer.TextDocumentItem(LanguageServer.filepath2uri("/home/zac/tmp/F2.jl"), "julia", 0, String(read("/home/zac/tmp/F2.jl"))))), server) | |
r = LanguageServer.JSONRPC.Request{Val{Symbol("julia/getCurrentBlockRange")},LanguageServer.TextDocumentPositionParams}(0, LanguageServer.TextDocumentPositionParams(LanguageServer.TextDocumentIdentifier(doc._uri), LanguageServer.Position(1, 0))) | |
LanguageServer.process(r, server) | |
r = LanguageServer.JSONRPC.Request{Val{Symbol("textDocument/didChange")},LanguageServer.DidChangeTextDocumentParams}(0, LanguageServer.DidChangeTextDocumentParams(LanguageServer.VersionedTextDocumentIdentifier(doc._uri, 10000), [LanguageServer.TextDocumentContentChangeEvent(LanguageServer.Range(LanguageServer.Position(0, 6),LanguageServer.Position(0, 15)), 9, "")])) | |
LanguageServer.process(r, server) | |
## | |
r = LanguageServer.JSONRPC.Request{Val{Symbol("textDocument/documentHighlight")},LanguageServer.DocumentHighlightParams}(0, LanguageServer.DocumentHighlightParams(LanguageServer.TextDocumentIdentifier(doc._uri), LanguageServer.Position(0, 10))) | |
LanguageServer.process(r, server) | |
## | |
r = LanguageServer.JSONRPC.Request{Val{Symbol("textDocument/rename")},LanguageServer.RenameParams}(0, LanguageServer.RenameParams(LanguageServer.TextDocumentIdentifier(doc._uri), LanguageServer.Position(0, 3), "aaa")) | |
LanguageServer.process(r, server) | |
params = LanguageServer.CodeActionParams(LanguageServer.TextDocumentIdentifier("none"), LanguageServer.Range(3,8,3,8), LanguageServer.CodeActionContext([], missing)) | |
r = LanguageServer.JSONRPC.Request{Val{Symbol("textDocument/codeAction")}, LanguageServer.CodeActionParams}(1, params) | |
LanguageServer.process(r, server) | |
r = LanguageServer.JSONRPC.Request{Val{Symbol("textDocument/didChange")},LanguageServer.DidChangeTextDocumentParams}(0, LanguageServer.DidChangeTextDocumentParams(LanguageServer.VersionedTextDocumentIdentifier(doc._uri, 10000), [LanguageServer.TextDocumentContentChangeEvent(LanguageServer.Range(LanguageServer.Position(1, 1),LanguageServer.Position(1, 1)), 0, "d")])) | |
LanguageServer.process(r, server) | |
r = LanguageServer.JSONRPC.Request{Val{Symbol("textDocument/completion")},LanguageServer.CompletionParams}(0, LanguageServer.CompletionParams(LanguageServer.TextDocumentIdentifier(doc._uri), LanguageServer.Position(2,7), LanguageServer.CompletionContext(1, missing))) | |
LanguageServer.process(r, server) | |
r = LanguageServer.JSONRPC.Request{Val{Symbol("textDocument/hover")},LanguageServer.TextDocumentPositionParams}(0, LanguageServer.TextDocumentPositionParams(LanguageServer.TextDocumentIdentifier(doc._uri), LanguageServer.Position(4, 11))) | |
LanguageServer.process(r, server) | |
r = LanguageServer.JSONRPC.Request{Val{Symbol("textDocument/definition")},LanguageServer.TextDocumentPositionParams}(0, LanguageServer.TextDocumentPositionParams(LanguageServer.TextDocumentIdentifier(doc._uri), LanguageServer.Position(4, 11))) | |
LanguageServer.process(r, server) | |
r = LanguageServer.JSONRPC.Request{Val{Symbol("textDocument/rename")},LanguageServer.RenameParams}(0, LanguageServer.RenameParams(LanguageServer.TextDocumentIdentifier(doc._uri), LanguageServer.Position(0, 10), missing, "name1")) | |
LanguageServer.process(r, server) | |
r = LanguageServer.JSONRPC.Request{Val{Symbol("textDocument/rename")},LanguageServer.RenameParams}(0, LanguageServer.ReferenceParams(LanguageServer.TextDocumentIdentifier(doc._uri), LanguageServer.Position(0, 10), "GRAPH")) | |
LanguageServer.process(r, server) | |
r = LanguageServer.JSONRPC.Request{Val{Symbol("textDocument/signatureHelp")},LanguageServer.TextDocumentPositionParams}(0, LanguageServer.TextDocumentPositionParams(LanguageServer.TextDocumentIdentifier(doc._uri), LanguageServer.Position(0,5))) | |
LanguageServer.process(r, server) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment