Skip to content

Instantly share code, notes, and snippets.

@ZacLN
Created May 21, 2020 14:39
Show Gist options
  • Save ZacLN/973bed1747f8ecaca8901b7e0418fb89 to your computer and use it in GitHub Desktop.
Save ZacLN/973bed1747f8ecaca8901b7e0418fb89 to your computer and use it in GitHub Desktop.
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