mirror of
https://github.com/Myzel394/config-lsp.git
synced 2025-06-18 23:15:26 +02:00
45 lines
1021 B
Go
45 lines
1021 B
Go
package analyzer
|
|
|
|
import (
|
|
"cmp"
|
|
"config-lsp/common"
|
|
"config-lsp/handlers/ssh_config/ast"
|
|
hostparser "config-lsp/handlers/ssh_config/host-parser"
|
|
"fmt"
|
|
"slices"
|
|
|
|
protocol "github.com/tliron/glsp/protocol_3_16"
|
|
)
|
|
|
|
func analyzeHostBlock(
|
|
ctx *analyzerContext,
|
|
) {
|
|
hosts := make(map[string]*hostparser.HostValue, 0)
|
|
|
|
blocks := ctx.document.GetAllHostBlocks()
|
|
slices.SortFunc(
|
|
blocks,
|
|
func(a, b *ast.SSHHostBlock) int {
|
|
return cmp.Compare(a.Start.Line, b.Start.Line)
|
|
},
|
|
)
|
|
|
|
for _, block := range blocks {
|
|
if block == nil || block.HostValue == nil {
|
|
continue
|
|
}
|
|
|
|
for _, host := range block.HostValue.Hosts {
|
|
if _, found := hosts[host.Value.Value]; found {
|
|
ctx.diagnostics = append(ctx.diagnostics, protocol.Diagnostic{
|
|
Range: host.ToLSPRange(),
|
|
Message: fmt.Sprintf("Host %s has already been defined on line %d", host.Value.Value, hosts[host.Value.Value].Start.Line+1),
|
|
Severity: &common.SeverityError,
|
|
})
|
|
} else {
|
|
hosts[host.Value.Value] = host
|
|
}
|
|
}
|
|
}
|
|
}
|