Skip to content

Commit b49ae2a

Browse files
committed
reflect differences between the two libraries
1 parent ce61c48 commit b49ae2a

23 files changed

+195
-165
lines changed

commands/completion_command.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ func (c *CompletionCommand) Run(args []string) int {
7777
c.Ui.Error(fmt.Sprintf("Error parsing column: %s (expected number)", err))
7878
return 1
7979
}
80-
lspPos := lsp.Position{Line: line, Character: col}
80+
lspPos := lsp.Position{Line: float64(line), Character: float64(col)}
8181

8282
logger := logging.NewLogger(os.Stderr)
8383

internal/lsp/completion.go

Lines changed: 19 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,17 @@ import (
66
lsp "github.com/hashicorp/terraform-ls/internal/protocol"
77
)
88

9-
type CompletionList struct {
10-
IsIncomplete bool `json:"isIncomplete"`
11-
Items []CompletionItem `json:"items"`
12-
}
13-
14-
type CompletionItem struct {
15-
lsp.CompletionItem
16-
Command *lsp.Command `json:"command,omitempty"`
17-
}
18-
19-
func ToCompletionList(candidates lang.Candidates, caps lsp.TextDocumentClientCapabilities) CompletionList {
20-
list := CompletionList{
21-
Items: make([]CompletionItem, len(candidates.List)),
9+
func ToCompletionList(candidates lang.Candidates, caps lsp.TextDocumentClientCapabilities) lsp.CompletionList {
10+
list := lsp.CompletionList{
11+
Items: make([]lsp.CompletionItem, len(candidates.List)),
2212
IsIncomplete: !candidates.IsComplete,
2313
}
2414

2515
snippetSupport := caps.Completion.CompletionItem.SnippetSupport
2616

2717
markdown := false
2818
docsFormat := caps.Completion.CompletionItem.DocumentationFormat
29-
if len(docsFormat) > 0 && docsFormat[0] == "markdown" {
19+
if len(docsFormat) > 0 && docsFormat[0] == lsp.Markdown {
3020
markdown = true
3121
}
3222

@@ -37,23 +27,23 @@ func ToCompletionList(candidates lang.Candidates, caps lsp.TextDocumentClientCap
3727
return list
3828
}
3929

40-
func toCompletionItem(candidate lang.Candidate, snippet, markdown bool) CompletionItem {
30+
func toCompletionItem(candidate lang.Candidate, snippet, markdown bool) lsp.CompletionItem {
4131
doc := candidate.Description.Value
4232

43-
// TODO: revisit once go-lsp supports markdown in CompletionItem
33+
// TODO: Revisit when MarkupContent is allowed as Documentation
34+
// https://github.com/golang/tools/blob/4783bc9b/internal/lsp/protocol/tsprotocol.go#L753
4435
doc = mdplain.Clean(doc)
4536

4637
var kind lsp.CompletionItemKind
4738
switch candidate.Kind {
4839
case lang.AttributeCandidateKind:
49-
kind = lsp.CIKProperty
40+
kind = lsp.PropertyCompletion
5041
case lang.BlockCandidateKind:
51-
kind = lsp.CIKClass
42+
kind = lsp.ClassCompletion
5243
case lang.LabelCandidateKind:
53-
kind = lsp.CIKField
44+
kind = lsp.FieldCompletion
5445
}
5546

56-
te, format := textEdit(candidate.TextEdit, snippet)
5747
var cmd *lsp.Command
5848
if candidate.TriggerSuggest {
5949
cmd = &lsp.Command{
@@ -62,29 +52,14 @@ func toCompletionItem(candidate lang.Candidate, snippet, markdown bool) Completi
6252
}
6353
}
6454

65-
return CompletionItem{
66-
CompletionItem: lsp.CompletionItem{
67-
Label: candidate.Label,
68-
Kind: kind,
69-
InsertTextFormat: format,
70-
Detail: candidate.Detail,
71-
Documentation: doc,
72-
TextEdit: te,
73-
},
74-
Command: cmd,
55+
return lsp.CompletionItem{
56+
Label: candidate.Label,
57+
Kind: kind,
58+
InsertTextFormat: insertTextFormat(snippet),
59+
Detail: candidate.Detail,
60+
Documentation: doc,
61+
TextEdit: textEdit(candidate.TextEdit, snippet),
62+
Command: cmd,
63+
AdditionalTextEdits: textEdits(candidate.AdditionalTextEdits, snippet),
7564
}
7665
}
77-
78-
func textEdit(te lang.TextEdit, snippetSupport bool) (*lsp.TextEdit, lsp.InsertTextFormat) {
79-
if snippetSupport {
80-
return &lsp.TextEdit{
81-
NewText: te.Snippet,
82-
Range: HCLRangeToLSP(te.Range),
83-
}, lsp.ITFSnippet
84-
}
85-
86-
return &lsp.TextEdit{
87-
NewText: te.NewText,
88-
Range: HCLRangeToLSP(te.Range),
89-
}, lsp.ITFPlainText
90-
}

internal/lsp/diagnostics.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ func HCLSeverityToLSP(severity hcl.DiagnosticSeverity) lsp.DiagnosticSeverity {
99
var sev lsp.DiagnosticSeverity
1010
switch severity {
1111
case hcl.DiagError:
12-
sev = lsp.Error
12+
sev = lsp.SeverityError
1313
case hcl.DiagWarning:
14-
sev = lsp.Warning
14+
sev = lsp.SeverityWarning
1515
case hcl.DiagInvalid:
1616
panic("invalid diagnostic")
1717
}

internal/lsp/file.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,6 @@ func FileFromDocumentItem(doc lsp.TextDocumentItem) *file {
5959
return &file{
6060
fh: FileHandlerFromDocumentURI(doc.URI),
6161
text: []byte(doc.Text),
62-
version: doc.Version,
62+
version: int(doc.Version),
6363
}
6464
}

internal/lsp/file_change.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,6 @@ func DocumentChanges(events []lsp.TextDocumentContentChangeEvent, f File) (files
2626
return changes, nil
2727
}
2828

29-
func TextEdits(changes filesystem.DocumentChanges) []lsp.TextEdit {
30-
edits := make([]lsp.TextEdit, len(changes))
31-
32-
for i, change := range changes {
33-
edits[i] = lsp.TextEdit{
34-
Range: fsRangeToLSP(change.Range()),
35-
NewText: change.Text(),
36-
}
37-
}
38-
39-
return edits
40-
}
41-
4229
func (fc *contentChange) Text() string {
4330
return fc.text
4431
}

internal/lsp/file_handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ type versionedFileHandler struct {
8686
func VersionedFileHandler(doc lsp.VersionedTextDocumentIdentifier) *versionedFileHandler {
8787
return &versionedFileHandler{
8888
fileHandler: fileHandler{uri: string(doc.URI)},
89-
v: doc.Version,
89+
v: int(doc.Version),
9090
}
9191
}
9292

internal/lsp/hover.go

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,21 @@ package lsp
22

33
import (
44
"github.com/hashicorp/hcl-lang/lang"
5-
"github.com/hashicorp/terraform-ls/internal/mdplain"
65
lsp "github.com/hashicorp/terraform-ls/internal/protocol"
76
)
87

98
func HoverData(data *lang.HoverData, cc lsp.TextDocumentClientCapabilities) lsp.Hover {
10-
mdSupported := cc.Hover != nil &&
11-
len(cc.Hover.ContentFormat) > 0 &&
9+
mdSupported := len(cc.Hover.ContentFormat) > 0 &&
1210
cc.Hover.ContentFormat[0] == "markdown"
1311

14-
value := data.Content.Value
15-
if data.Content.Kind == lang.MarkdownKind && !mdSupported {
16-
value = mdplain.Clean(value)
17-
}
18-
19-
content := lsp.RawMarkedString(value)
20-
rng := HCLRangeToLSP(data.Range)
12+
// In theory we should be sending lsp.MarkedString (for old clients)
13+
// when len(cc.Hover.ContentFormat) == 0, but that's not possible
14+
// without changing lsp.Hover.Content field type to interface{}
15+
//
16+
// We choose to follow gopls' approach (i.e. cut off old clients).
2117

2218
return lsp.Hover{
23-
Contents: []lsp.MarkedString{content},
24-
Range: &rng,
19+
Contents: markupContent(data.Content, mdSupported),
20+
Range: HCLRangeToLSP(data.Range),
2521
}
2622
}

internal/lsp/markup_content.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package lsp
2+
3+
import (
4+
"github.com/hashicorp/hcl-lang/lang"
5+
"github.com/hashicorp/terraform-ls/internal/mdplain"
6+
lsp "github.com/hashicorp/terraform-ls/internal/protocol"
7+
)
8+
9+
func markupContent(content lang.MarkupContent, mdSupported bool) lsp.MarkupContent {
10+
value := content.Value
11+
12+
kind := lsp.PlainText
13+
if content.Kind == lang.MarkdownKind {
14+
if mdSupported {
15+
kind = lsp.Markdown
16+
} else {
17+
value = mdplain.Clean(value)
18+
}
19+
}
20+
21+
return lsp.MarkupContent{
22+
Kind: kind,
23+
Value: value,
24+
}
25+
}

internal/lsp/position.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,16 @@ func FilePositionFromDocumentPosition(params lsp.TextDocumentPositionParams, f F
4040
return &filePosition{
4141
fh: FileHandlerFromDocumentURI(params.TextDocument.URI),
4242
pos: hcl.Pos{
43-
Line: params.Position.Line + 1,
44-
Column: params.Position.Character + 1,
43+
Line: int(params.Position.Line) + 1,
44+
Column: int(params.Position.Character) + 1,
4545
Byte: byteOffset,
4646
},
4747
}, nil
4848
}
4949

5050
func lspPosToFsPos(pos lsp.Position) filesystem.Pos {
5151
return filesystem.Pos{
52-
Line: pos.Line,
53-
Column: pos.Character,
52+
Line: int(pos.Line),
53+
Column: int(pos.Character),
5454
}
5555
}

internal/lsp/range.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ func fsRangeToLSP(fsRng *filesystem.Range) lsp.Range {
1313

1414
return lsp.Range{
1515
Start: lsp.Position{
16-
Character: fsRng.Start.Column,
17-
Line: fsRng.Start.Line,
16+
Character: float64(fsRng.Start.Column),
17+
Line: float64(fsRng.Start.Line),
1818
},
1919
End: lsp.Position{
20-
Character: fsRng.End.Column,
21-
Line: fsRng.End.Line,
20+
Character: float64(fsRng.End.Column),
21+
Line: float64(fsRng.End.Line),
2222
},
2323
}
2424
}
@@ -30,25 +30,25 @@ func lspRangeToFsRange(rng *lsp.Range) *filesystem.Range {
3030

3131
return &filesystem.Range{
3232
Start: filesystem.Pos{
33-
Line: rng.Start.Line,
34-
Column: rng.Start.Character,
33+
Line: int(rng.Start.Line),
34+
Column: int(rng.Start.Character),
3535
},
3636
End: filesystem.Pos{
37-
Line: rng.End.Line,
38-
Column: rng.End.Character,
37+
Line: int(rng.End.Line),
38+
Column: int(rng.End.Character),
3939
},
4040
}
4141
}
4242

4343
func HCLRangeToLSP(rng hcl.Range) lsp.Range {
4444
return lsp.Range{
4545
Start: lsp.Position{
46-
Line: rng.Start.Line - 1,
47-
Character: rng.Start.Column - 1,
46+
Line: float64(rng.Start.Line - 1),
47+
Character: float64(rng.Start.Column - 1),
4848
},
4949
End: lsp.Position{
50-
Line: rng.End.Line - 1,
51-
Character: rng.End.Column - 1,
50+
Line: float64(rng.End.Line - 1),
51+
Character: float64(rng.End.Column - 1),
5252
},
5353
}
5454
}

0 commit comments

Comments
 (0)