From c951fd8c3cfb4037bf166ab54dfc7564e7eb2d79 Mon Sep 17 00:00:00 2001 From: Lars Reimann Date: Mon, 8 Apr 2024 19:07:56 +0200 Subject: [PATCH] feat: semantic highlighting of block lambda results --- .../language/lsp/safe-ds-semantic-token-provider.ts | 7 +++++++ .../lsp/safe-ds-semantic-token-provider.test.ts | 11 +++++++++++ 2 files changed, 18 insertions(+) diff --git a/packages/safe-ds-lang/src/language/lsp/safe-ds-semantic-token-provider.ts b/packages/safe-ds-lang/src/language/lsp/safe-ds-semantic-token-provider.ts index a35a6bd1f..19f0a0f99 100644 --- a/packages/safe-ds-lang/src/language/lsp/safe-ds-semantic-token-provider.ts +++ b/packages/safe-ds-lang/src/language/lsp/safe-ds-semantic-token-provider.ts @@ -7,6 +7,7 @@ import { isSdsAnnotationCall, isSdsArgument, isSdsAttribute, + isSdsBlockLambdaResult, isSdsClass, isSdsDeclaration, isSdsEnum, @@ -150,6 +151,12 @@ export class SafeDsSemanticTokenProvider extends AbstractSemanticTokenProvider { type: SemanticTokenTypes.property, modifier, }; + } else if (isSdsBlockLambdaResult(node)) { + return { + // For lack of a better option, we use the token type for parameters here + type: SemanticTokenTypes.parameter, + modifier: additionalModifiers, + }; } else if (isSdsClass(node)) { const isBuiltinClass = this.builtinClasses.isBuiltinClass(node); return { diff --git a/packages/safe-ds-lang/tests/language/lsp/safe-ds-semantic-token-provider.test.ts b/packages/safe-ds-lang/tests/language/lsp/safe-ds-semantic-token-provider.test.ts index a6314b606..99c456942 100644 --- a/packages/safe-ds-lang/tests/language/lsp/safe-ds-semantic-token-provider.test.ts +++ b/packages/safe-ds-lang/tests/language/lsp/safe-ds-semantic-token-provider.test.ts @@ -40,6 +40,17 @@ describe('SafeDsSemanticTokenProvider', async () => { `, expectedTokenTypes: [SemanticTokenTypes.property, SemanticTokenTypes.property], }, + { + testName: 'block lambda result declaration', + code: ` + pipeline myPipeline { + () { + yield <|result|> = 1; + }; + } + `, + expectedTokenTypes: [SemanticTokenTypes.parameter], + }, { testName: 'class declaration', code: 'class <|C|>',