Skip to content

Commit a47c1fc

Browse files
committed
implemented diagnostics
1 parent da62566 commit a47c1fc

5 files changed

+67
-7
lines changed

analysis/state.go

+22-2
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@ func NewState() State {
2020
}
2121
}
2222

23-
func (state *State) OpenDocument(path string, contents string) {
23+
func (state *State) OpenDocument(logger *log.Logger, path string, contents string) [] lsp.Diagnostic {
2424
state.Documents[path] = contents
25+
return getDiagnostics(logger, contents)
2526
}
2627

27-
func (state *State) UpdateDocument(path string, contents string) {
28+
func (state *State) UpdateDocument(logger *log.Logger, path string, contents string) [] lsp.Diagnostic {
2829
state.Documents[path] = contents
30+
return getDiagnostics(logger, contents)
2931
}
3032

3133
func (state *State) Hover(id int, path string) lsp.HoverResponse {
@@ -126,6 +128,24 @@ func (state *State) Completion(logger *log.Logger, id int, filePath string) lsp.
126128
return completionsResponse
127129
}
128130

131+
func getDiagnostics(logger *log.Logger, contents string) [] lsp.Diagnostic {
132+
diagnostics := [] lsp.Diagnostic{}
133+
logger.Printf("DIAGNOSTIC content %s", contents)
134+
for row, line := range strings.Split(contents, "\n") {
135+
if strings.Contains(line, "VS Code") {
136+
idx := strings.Index(line, "VS Code")
137+
logger.Print("-------------FOUND FOUND FOUND-------------")
138+
diagnostics = append(diagnostics, lsp.Diagnostic{
139+
Range: LineRange(row, idx, idx + len("VS Code")),
140+
Serverity: 1,
141+
Source: "Elitism",
142+
Message: "One should ALWAYS use superior editors ONLY",
143+
})
144+
}
145+
}
146+
return diagnostics
147+
}
148+
129149
func LineRange (line, start, end int) lsp.Range {
130150
return lsp.Range{
131151
Start: lsp.Position{Line: line, Character: start},

lsp/textDocument_codeActionRequest.go

-3
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,6 @@ type Kind struct {
3030
Refactor string
3131
}
3232

33-
type Diagnostic struct {
34-
}
35-
3633
type Command struct {
3734
Title string `json:"title"`
3835
Command string `json:"command"`

lsp/textDocument_diagnostics.go

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package lsp
2+
3+
type PublishDiagnosticsNotification struct {
4+
Notification
5+
Params PublishDiagnosticParams `json:"params"`
6+
}
7+
8+
type PublishDiagnosticParams struct {
9+
URI string
10+
Diagnostics []Diagnostic `json:"diagnostics"`
11+
}
12+
13+
type Diagnostic struct {
14+
Source string `json:"source"`
15+
Message string `json:"message"`
16+
Serverity int `json:"severity"`
17+
Range Range `json:"range"`
18+
}
19+

main.go

+25-2
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,18 @@ func handleMessage(logger *log.Logger, writer io.Writer, state analysis.State, m
6767
logger.Printf("[textdoc/didOpen]received contents cannot be parsed : %s %s", content, err)
6868
}
6969
logger.Printf("[textdoc/didOpen] OPENED loaded file at: [ %s ]", request.DidOpenTextDocumentParams.TextDocumentItem.Uri)
70-
state.OpenDocument(request.DidOpenTextDocumentParams.TextDocumentItem.Uri, request.DidOpenTextDocumentParams.TextDocumentItem.Text)
70+
71+
diagnostics := state.OpenDocument(logger, request.DidOpenTextDocumentParams.TextDocumentItem.Uri, request.DidOpenTextDocumentParams.TextDocumentItem.Text)
72+
writeResponse(logger, lsp.PublishDiagnosticsNotification{
73+
Notification: lsp.Notification{
74+
RPC: "2.0",
75+
Method: "textDocument/publishDiagnostics",
76+
},
77+
Params: lsp.PublishDiagnosticParams{
78+
URI: request.DidOpenTextDocumentParams.TextDocumentItem.Uri,
79+
Diagnostics: diagnostics,
80+
},
81+
}, writer)
7182

7283
case "textDocument/didChange":
7384
var request lsp.DidChangeTextDocumentNotification
@@ -77,7 +88,19 @@ func handleMessage(logger *log.Logger, writer io.Writer, state analysis.State, m
7788
logger.Printf("[textdoc/didChange] UPDATED loaded file at: [ %s ]", request.Params.TextDocument.Uri)
7889

7990
for _, change := range request.Params.Changes {
80-
state.UpdateDocument(request.Params.TextDocument.Uri, change.Text)
91+
diagnostics := state.UpdateDocument(logger, request.Params.TextDocument.Uri, change.Text)
92+
writeResponse(logger, lsp.PublishDiagnosticsNotification{
93+
Notification: lsp.Notification{
94+
RPC: "2.0",
95+
Method: "textDocument/publishDiagnostics",
96+
},
97+
Params: lsp.PublishDiagnosticParams {
98+
URI: request.Params.TextDocument.Uri,
99+
Diagnostics: diagnostics,
100+
},
101+
},
102+
writer,
103+
)
81104
}
82105

83106
case "textDocument/hover":

readme.md

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ helloooo
33
heyyDidOpenTextDocumentParams
44

55
VS C*de is an excellent editor
6+
VS Code neovim Neovim

0 commit comments

Comments
 (0)