From cc92cacd481b5348fef4c056468514cd2156def4 Mon Sep 17 00:00:00 2001 From: Myzel394 Date: Mon, 3 Mar 2025 22:38:37 +0100 Subject: [PATCH] fix(server): Fix didChange and didOpen --- server/common/diagnostics.go | 5 +- .../lsp/text-document-did-change.go | 63 +++++++++---------- .../lsp/text-document-did-open.go | 3 - 3 files changed, 32 insertions(+), 39 deletions(-) diff --git a/server/common/diagnostics.go b/server/common/diagnostics.go index fbd5fdb..5ebd92d 100644 --- a/server/common/diagnostics.go +++ b/server/common/diagnostics.go @@ -6,7 +6,10 @@ import ( ) func ClearDiagnostics(context *glsp.Context, uri protocol.DocumentUri) { - go context.Notify( + // Diagnostics are sent synchronously, as sending them async + // could result in a race condition when we send diagnostics + // to the client. + context.Notify( protocol.ServerTextDocumentPublishDiagnostics, protocol.PublishDiagnosticsParams{ URI: uri, diff --git a/server/root-handler/lsp/text-document-did-change.go b/server/root-handler/lsp/text-document-did-change.go index dc30ca7..b879ff2 100644 --- a/server/root-handler/lsp/text-document-did-change.go +++ b/server/root-handler/lsp/text-document-did-change.go @@ -18,46 +18,39 @@ func TextDocumentDidChange(context *glsp.Context, params *protocol.DidChangeText language := shared.Handler.GetLanguageForDocument(params.TextDocument.URI) content := params.ContentChanges[0].(protocol.TextDocumentContentChangeEventWhole).Text - newLanguage, err := initFile( - context, - content, - params.TextDocument.URI, - "", - ) - if err != nil { - if common.ServerOptions.NoUndetectableErrors { - return nil - } else { - return err - } - } + if _, found := shared.OpenedFiles[params.TextDocument.URI]; !found { + // The file couldn't be initialized when opening it, + // so we will try it again here - if newLanguage != language { - language = newLanguage + newLanguage, err := initFile( + context, + content, + params.TextDocument.URI, + "", + ) - params := &protocol.DidOpenTextDocumentParams{ - TextDocument: protocol.TextDocumentItem{ - URI: params.TextDocument.URI, - Text: content, - Version: params.TextDocument.Version, - LanguageID: string(*language), - }, + if err != nil { + if common.ServerOptions.NoUndetectableErrors { + return nil + } else { + return err + } } - switch *language { - case shared.LanguageFstab: - return fstab.TextDocumentDidOpen(context, params) - case shared.LanguageSSHDConfig: - return sshdconfig.TextDocumentDidOpen(context, params) - case shared.LanguageSSHConfig: - return sshconfig.TextDocumentDidOpen(context, params) - case shared.LanguageWireguard: - return wireguard.TextDocumentDidOpen(context, params) - case shared.LanguageHosts: - return hosts.TextDocumentDidOpen(context, params) - case shared.LanguageAliases: - return aliases.TextDocumentDidOpen(context, params) + if newLanguage != language { + language = newLanguage + + params := &protocol.DidOpenTextDocumentParams{ + TextDocument: protocol.TextDocumentItem{ + URI: params.TextDocument.URI, + Text: content, + Version: params.TextDocument.Version, + LanguageID: string(*language), + }, + } + + return TextDocumentDidOpen(context, params) } } diff --git a/server/root-handler/lsp/text-document-did-open.go b/server/root-handler/lsp/text-document-did-open.go index e1ddd28..842d136 100644 --- a/server/root-handler/lsp/text-document-did-open.go +++ b/server/root-handler/lsp/text-document-did-open.go @@ -61,9 +61,6 @@ func initFile( uri protocol.DocumentUri, advertisedLanguage string, ) (*shared.SupportedLanguage, error) { - println("Initializing the file") - println(advertisedLanguage) - println(uri) language, err := utils.DetectLanguage(content, advertisedLanguage, uri) if err != nil {