diff --git a/packages/lsp/src/server/completion.ts b/packages/lsp/src/server/completion.ts index 8c4892074..8c883f275 100644 --- a/packages/lsp/src/server/completion.ts +++ b/packages/lsp/src/server/completion.ts @@ -6,6 +6,7 @@ import { durationChangeProperties, noteProperties, scoreMetaData, + staffMetaData, structuralMetaData } from '@coderline/alphatab-alphatex/definitions'; import type { @@ -37,6 +38,7 @@ interface CompletionItemWithData extends CompletionItem { const topLevelCompletions = [ ...createMetaDataDocCompletions(structuralMetaData), + ...createMetaDataDocCompletions(staffMetaData), ...createMetaDataDocCompletions(scoreMetaData), ...createMetaDataDocCompletions(barMetaData) ]; diff --git a/packages/monaco/src/lsp.ts b/packages/monaco/src/lsp.ts index 8e3446a2f..e0ba59cd8 100644 --- a/packages/monaco/src/lsp.ts +++ b/packages/monaco/src/lsp.ts @@ -16,6 +16,8 @@ import { CompletionResolveRequest, DidChangeTextDocumentNotification, DidOpenTextDocumentNotification, + type DocumentDiagnosticParams, + DocumentDiagnosticRequest, type HoverParams, HoverRequest, type InitializeParams, @@ -24,7 +26,6 @@ import { type Logger, PositionEncodingKind, type ProtocolConnection, - PublishDiagnosticsNotification, type SignatureHelpParams, SignatureHelpRequest } from 'vscode-languageserver-protocol'; @@ -131,18 +132,32 @@ export async function basicEditorLspIntegration( } }); - setupDocumentHandling(editor, documentUri, connection); - setupDiagnostics(editor, connection); + setupDocumentHandlingAndDiagnostics(editor, documentUri, connection); setupCompletion(documentUri, info.languageId, connection, initResponse); setupHover(documentUri, info.languageId, connection, initResponse); setupSignatureHelp(documentUri, info.languageId, connection, initResponse); } -function setupDocumentHandling( +function setupDocumentHandlingAndDiagnostics( editor: monaco.editor.IStandaloneCodeEditor, documentUri: string, connection: ProtocolConnection ) { + async function updateDiagnostics() { + const params: DocumentDiagnosticParams = { + textDocument: { + uri: documentUri + } + }; + const result = await connection.sendRequest(DocumentDiagnosticRequest.type, params); + if (result.kind === 'unchanged') { + return; + } + + monaco.editor.setModelMarkers(editor.getModel()!, 'lsp', result.items.map(lspToMonacoMarker)); + } + updateDiagnostics(); + editor.onDidChangeModelContent(async e => { await connection.sendNotification(DidChangeTextDocumentNotification.type, { textDocument: { @@ -151,15 +166,8 @@ function setupDocumentHandling( }, contentChanges: e.changes.map(monacoToLspContentChange) }); - }); -} -function setupDiagnostics( - editor: monaco.editor.IStandaloneCodeEditor, - connection: ProtocolConnection -) { - connection.onNotification(PublishDiagnosticsNotification.type, e => { - monaco.editor.setModelMarkers(editor.getModel()!, 'lsp', e.diagnostics.map(lspToMonacoMarker)); + await updateDiagnostics(); }); }