internal/langserver/handlers/initialize.go (88 lines of code) (raw):

package handlers import ( "context" "github.com/Azure/azapi-lsp/internal/azure" lsctx "github.com/Azure/azapi-lsp/internal/context" ilsp "github.com/Azure/azapi-lsp/internal/lsp" lsp "github.com/Azure/azapi-lsp/internal/protocol" "github.com/creachadair/jrpc2" ) func (svc *service) Initialize(ctx context.Context, params lsp.InitializeParams) (lsp.InitializeResult, error) { serverCaps := lsp.InitializeResult{ Capabilities: lsp.ServerCapabilities{ TextDocumentSync: lsp.TextDocumentSyncOptions{ OpenClose: true, Change: lsp.Incremental, }, CompletionProvider: lsp.CompletionOptions{ ResolveProvider: false, TriggerCharacters: []string{ ` `, `.`, `/`, `@`, `{`, `"`, }, }, CodeActionProvider: lsp.CodeActionOptions{ CodeActionKinds: ilsp.SupportedCodeActions.AsSlice(), ResolveProvider: false, }, HoverProvider: true, DeclarationProvider: false, DefinitionProvider: false, CodeLensProvider: nil, ReferencesProvider: false, DocumentFormattingProvider: false, DocumentSymbolProvider: false, WorkspaceSymbolProvider: false, Workspace: nil, ExecuteCommandProvider: &lsp.ExecuteCommandOptions{ Commands: availableCommands(), WorkDoneProgressOptions: lsp.WorkDoneProgressOptions{ WorkDoneProgress: true, }, }, }, } serverCaps.ServerInfo.Name = "azapi-lsp" version, ok := lsctx.LanguageServerVersion(ctx) if ok { serverCaps.ServerInfo.Version = version } clientCaps := params.Capabilities expClientCaps := lsp.ExperimentalClientCapabilities(clientCaps.Experimental) svc.server = jrpc2.ServerFromContext(ctx) err := svc.configureSessionDependencies() if err != nil { return serverCaps, err } if tv, ok := expClientCaps.TelemetryVersion(); ok { svc.logger.Printf("enabling telemetry (version: %d)", tv) err := svc.setupTelemetry(tv, svc.server) if err != nil { svc.logger.Printf("failed to setup telemetry: %s", err) } svc.logger.Printf("telemetry enabled (version: %d)", tv) } if params.ClientInfo.Name != "" { err := ilsp.SetClientName(ctx, params.ClientInfo.Name) if err != nil { return serverCaps, err } } err = ilsp.SetClientCapabilities(ctx, &clientCaps) if err != nil { return serverCaps, err } if !clientCaps.Workspace.WorkspaceFolders && len(params.WorkspaceFolders) > 0 { _ = jrpc2.ServerFromContext(ctx).Notify(ctx, "window/showMessage", &lsp.ShowMessageParams{ Type: lsp.Warning, Message: "Client sent workspace folders despite not declaring support. " + "Please report this as a bug.", }) } // initialize embedded azurerm schema azure.GetAzureSchema() return serverCaps, nil }