diff --git a/server/handlers/fstab/handlers/signature_help.go b/server/handlers/fstab/handlers/signature_help.go new file mode 100644 index 0000000..2182fcc --- /dev/null +++ b/server/handlers/fstab/handlers/signature_help.go @@ -0,0 +1,85 @@ +package handlers + +import ( + "config-lsp/common" + "config-lsp/handlers/fstab/ast" + + protocol "github.com/tliron/glsp/protocol_3_16" +) + +func GetEntrySignatureHelp( + entry *ast.FstabEntry, + cursor common.CursorPosition, +) *protocol.SignatureHelp { + var index uint32 + + if entry == nil || entry.Fields.Spec == nil || entry.Fields.Spec.ContainsPosition(cursor) { + index = 0 + } else if entry.Fields.MountPoint == nil && entry.Fields.MountPoint.ContainsPosition(cursor) { + index = 1 + } else if entry.Fields.FilesystemType == nil && entry.Fields.FilesystemType.ContainsPosition(cursor) { + index = 2 + } else if entry.Fields.Options == nil || entry.Fields.Options.ContainsPosition(cursor) { + index = 3 + } else if entry.Fields.Freq == nil || entry.Fields.Freq.ContainsPosition(cursor) { + index = 4 + } else { + index = 5 + } + + signature := uint32(0) + + return &protocol.SignatureHelp{ + ActiveSignature: &signature, + Signatures: []protocol.SignatureInformation{ + { + Label: " ", + ActiveParameter: &index, + Parameters: []protocol.ParameterInformation{ + { + Label: []uint32{ + 0, + uint32(len("")), + }, + Documentation: "The device or remote filesystem to mount", + }, + { + Label: []uint32{ + uint32(len("")), + uint32(len(" ") + len("")), + }, + Documentation: "The directory to mount the device or remote filesystem", + }, + { + Label: []uint32{ + uint32(len(" ")), + uint32(len(" ") + len("")), + }, + Documentation: "The type of filesystem", + }, + { + Label: []uint32{ + uint32(len(" ")), + uint32(len(" ") + len("")), + }, + Documentation: "Mount options", + }, + { + Label: []uint32{ + uint32(len(" ")), + uint32(len(" ") + len("")), + }, + Documentation: "Used by dump(8) to determine which filesystems need to be dumped", + }, + { + Label: []uint32{ + uint32(len(" ")), + uint32(len(" ") + len("")), + }, + Documentation: "Used by fsck(8) to determine the order in which filesystem checks are done at boot time", + }, + }, + }, + }, + } +} diff --git a/server/handlers/fstab/lsp/text-document-signature-help.go b/server/handlers/fstab/lsp/text-document-signature-help.go new file mode 100644 index 0000000..44242ff --- /dev/null +++ b/server/handlers/fstab/lsp/text-document-signature-help.go @@ -0,0 +1,31 @@ +package lsp + +import ( + "config-lsp/common" + "config-lsp/handlers/fstab/ast" + "config-lsp/handlers/fstab/handlers" + fstab "config-lsp/handlers/fstab/shared" + + "github.com/tliron/glsp" + protocol "github.com/tliron/glsp/protocol_3_16" +) + +func TextDocumentSignatureHelp(context *glsp.Context, params *protocol.SignatureHelpParams) (*protocol.SignatureHelp, error) { + document := fstab.DocumentParserMap[params.TextDocument.URI] + + line := uint32(params.Position.Line) + cursor := common.LSPCharacterAsCursorPosition(params.Position.Character) + + if _, found := document.Config.CommentLines[line]; found { + // Comment + return nil, nil + } + + entry, found := document.Config.Entries.Get(line) + + if !found { + return handlers.GetEntrySignatureHelp(nil, cursor), nil + } else { + return handlers.GetEntrySignatureHelp(entry.(*ast.FstabEntry), cursor), nil + } +} diff --git a/server/handlers/hosts/lsp/text-document-signature.go b/server/handlers/hosts/lsp/text-document-signature-help.go similarity index 100% rename from server/handlers/hosts/lsp/text-document-signature.go rename to server/handlers/hosts/lsp/text-document-signature-help.go diff --git a/server/root-handler/text-document-signature-help.go b/server/root-handler/text-document-signature-help.go index df0a382..2be884a 100644 --- a/server/root-handler/text-document-signature-help.go +++ b/server/root-handler/text-document-signature-help.go @@ -2,6 +2,7 @@ package roothandler import ( aliases "config-lsp/handlers/aliases/lsp" + fstab "config-lsp/handlers/fstab/lsp" hosts "config-lsp/handlers/hosts/lsp" sshconfig "config-lsp/handlers/ssh_config/lsp" sshdconfig "config-lsp/handlers/sshd_config/lsp" @@ -31,7 +32,7 @@ func TextDocumentSignatureHelp(context *glsp.Context, params *protocol.Signature case LanguageSSHConfig: return sshconfig.TextDocumentSignatureHelp(context, params) case LanguageFstab: - return nil, nil + return fstab.TextDocumentSignatureHelp(context, params) case LanguageWireguard: return nil, nil case LanguageAliases: