Created
November 1, 2016 17:18
-
-
Save ZacLN/d84fd47540d83303ab6b34e10bab6525 to your computer and use it in GitHub Desktop.
This file contains 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
# Structure | |
# client sends : message::String | |
# JSON.parse() : message::String -> message_json::Dict | |
# Request() : message_json::Dict -> req::Request{method,parametertype} | |
# Respond{m,pt}() : req::Request{m,pt} -> resp::Response{m,returntype} | |
# JSON.json() : resp::Response{m,returntype} -> retmessage::String | |
# return : retmessage::String | |
# A whole load of these for all parameter structures listed in the language-server protocol | |
type Position | |
line::Int | |
character::Int | |
end | |
Position(d::Dict) = Position(d["line"],d["character"]) | |
abstract Method | |
abstract hover <: Method | |
type Hover <: Response | |
contents::String | |
range::Range #? | |
end | |
type Request{m<:Method,T} | |
id::Int | |
params::T | |
end | |
function Request(d::Dict) | |
m = d["method"] | |
if m=="textDocument/hover" | |
return Request{hover,TextDocumentPositionParams}(d["id"],TextDocumentPositionParams(d["params"])) | |
end | |
end | |
function Respond(r::Request{hover,TextDocumentPositionParams}) | |
d = documents[r.params.textDocument.uri] | |
cnt=0 | |
s=1 | |
while cnt<r.params.position.line-1 | |
cnt+=1 | |
s=search(d,'\n',s)+1 | |
end | |
line = d[s:search(d,'\n',s)] | |
word = getfullname(line,r.params.position.character) | |
try | |
d = Docs.doc(getfield(Main,Symbol(word))) | |
return Response{hover,Hover}(r.id,Hover(d,Range())) | |
catch err | |
return Response{hover,Exception}(r.id,err) | |
end | |
end | |
message = read_transport_layer(conn) | |
message_json = JSON.parse(message) | |
request = Request(message_json) | |
response = Respond(request) | |
write_transport_layer(conn,response) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment