mirror of
https://github.com/Myzel394/config-lsp.git
synced 2025-06-18 23:15:26 +02:00
fix(wireguard): Improve root completions
This commit is contained in:
parent
9eedc063a2
commit
32ffbb8dbf
@ -20,13 +20,13 @@ func (p wireguardParser) checkForDuplicateProperties() []protocol.Diagnostic {
|
||||
diagnostics := []protocol.Diagnostic{}
|
||||
|
||||
for _, section := range p.Sections {
|
||||
diagnostics = append(diagnostics, section.analyDuplicateProperties()...)
|
||||
diagnostics = append(diagnostics, section.analyzeDuplicateProperties()...)
|
||||
}
|
||||
|
||||
return diagnostics
|
||||
}
|
||||
|
||||
func (p wireguardSection) analyDuplicateProperties() []protocol.Diagnostic {
|
||||
func (p wireguardSection) analyzeDuplicateProperties() []protocol.Diagnostic {
|
||||
diagnostics := []protocol.Diagnostic{}
|
||||
|
||||
existingProperties := make(map[string]uint32)
|
||||
|
@ -146,3 +146,24 @@ DNS
|
||||
t.Fatalf("getCompletionsForPropertyLine: Expected completion to be '= ', but got '%v'", completions[0].Label)
|
||||
}
|
||||
}
|
||||
|
||||
func TestHeaderButNoProperty(
|
||||
t *testing.T,
|
||||
) {
|
||||
sample := dedent(`
|
||||
[Interface]
|
||||
|
||||
`)
|
||||
parser := createWireguardParser()
|
||||
parser.parseFromString(sample)
|
||||
|
||||
completions, err := parser.Sections[0].getCompletionsForEmptyLine()
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("getCompletionsForEmptyLine failed with error: %v", err)
|
||||
}
|
||||
|
||||
if len(completions) != len(interfaceOptions) {
|
||||
t.Fatalf("getCompletionsForEmptyLine: Expected %v completions, but got %v", len(interfaceOptions), len(completions))
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,8 @@ func TextDocumentCompletion(context *glsp.Context, params *protocol.CompletionPa
|
||||
case LineTypeHeader:
|
||||
return parser.getRootCompletionsForEmptyLine(), nil
|
||||
case LineTypeEmpty:
|
||||
if section == nil {
|
||||
if section.Name == nil {
|
||||
// Root completions
|
||||
return parser.getRootCompletionsForEmptyLine(), nil
|
||||
}
|
||||
|
||||
|
@ -49,14 +49,29 @@ func (p wireguardParser) getInterfaceSection() (*wireguardSection, bool) {
|
||||
return nil, false
|
||||
}
|
||||
|
||||
func getHeaderCompletion(name string, documentation string) protocol.CompletionItem {
|
||||
textFormat := protocol.InsertTextFormatPlainText
|
||||
kind := protocol.CompletionItemKindEnum
|
||||
|
||||
insertText := "[" + name + "]\n"
|
||||
|
||||
return protocol.CompletionItem{
|
||||
Label: "[" + name + "]",
|
||||
InsertTextFormat: &textFormat,
|
||||
InsertText: &insertText,
|
||||
Kind: &kind,
|
||||
Documentation: &documentation,
|
||||
}
|
||||
}
|
||||
|
||||
func (p wireguardParser) getRootCompletionsForEmptyLine() []protocol.CompletionItem {
|
||||
completions := []protocol.CompletionItem{}
|
||||
|
||||
if _, found := p.getInterfaceSection(); !found {
|
||||
completions = append(completions, headerInterfaceEnum.ToCompletionItem())
|
||||
completions = append(completions, getHeaderCompletion("Interface", headerInterfaceEnum.Documentation))
|
||||
}
|
||||
|
||||
completions = append(completions, headerPeerEnum.ToCompletionItem())
|
||||
completions = append(completions, getHeaderCompletion("Peer", headerPeerEnum.Documentation))
|
||||
|
||||
return completions
|
||||
}
|
||||
@ -175,9 +190,17 @@ func (p *wireguardParser) parseFromString(input string) []common.ParseError {
|
||||
var emptySection *wireguardSection
|
||||
|
||||
if len(collectedProperties) > 0 {
|
||||
var endLine uint32
|
||||
|
||||
if len(p.Sections) == 0 {
|
||||
endLine = uint32(len(lines))
|
||||
} else {
|
||||
endLine = p.Sections[len(p.Sections)-1].StartLine
|
||||
}
|
||||
|
||||
emptySection = &wireguardSection{
|
||||
StartLine: 0,
|
||||
EndLine: p.Sections[len(p.Sections)-1].StartLine - 1,
|
||||
EndLine: endLine,
|
||||
Properties: collectedProperties,
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user