Myzel394 1cfb9bbfba
refactor(server): ssh_config improvements
Signed-off-by: Myzel394 <github.7a2op@simplelogin.co>
2025-03-16 00:23:55 +01:00

70 lines
1.4 KiB
Go

package analyzer
import (
"config-lsp/common"
sshconfig "config-lsp/handlers/ssh_config"
"config-lsp/handlers/ssh_config/indexes"
protocol "github.com/tliron/glsp/protocol_3_16"
)
type analyzerContext struct {
document *sshconfig.SSHDocument
diagnostics []protocol.Diagnostic
}
func Analyze(
d *sshconfig.SSHDocument,
) []protocol.Diagnostic {
ctx := &analyzerContext{
document: d,
diagnostics: make([]protocol.Diagnostic, 0),
}
analyzeStructureIsValid(ctx)
if len(ctx.diagnostics) > 0 {
return ctx.diagnostics
}
i, indexErrors := indexes.CreateIndexes(*d.Config)
if len(indexErrors) > 0 {
return common.ErrsToDiagnostics(indexErrors)
}
d.Indexes = i
analyzeIncludeValues(ctx)
if len(ctx.diagnostics) == 0 {
for _, include := range d.Indexes.Includes {
for _, value := range include.Values {
for _, path := range value.Paths {
_, err := parseFile(string(path))
if err != nil {
ctx.diagnostics = append(ctx.diagnostics, protocol.Diagnostic{
Range: value.LocationRange.ToLSPRange(),
Message: err.Error(),
})
}
}
}
}
}
analyzeValuesAreValid(ctx)
analyzeTokens(ctx)
analyzeIgnoreUnknownHasNoUnnecessary(ctx)
analyzeDependents(ctx)
analyzeBlocks(ctx)
analyzeMatchBlocks(ctx)
analyzeHostBlock(ctx)
analyzeBlocks(ctx)
analyzeTagOptions(ctx)
analyzeTagImports(ctx)
return ctx.diagnostics
}