diff --git a/prometeu-lsp/prometeu-lsp-v1/src/test/java/p/studio/lsp/services/compiler/CompilerLanguageServiceBridgeTest.java b/prometeu-lsp/prometeu-lsp-v1/src/test/java/p/studio/lsp/services/compiler/CompilerLanguageServiceBridgeTest.java index 319dc6ef..bf8f6ba4 100644 --- a/prometeu-lsp/prometeu-lsp-v1/src/test/java/p/studio/lsp/services/compiler/CompilerLanguageServiceBridgeTest.java +++ b/prometeu-lsp/prometeu-lsp-v1/src/test/java/p/studio/lsp/services/compiler/CompilerLanguageServiceBridgeTest.java @@ -6,6 +6,7 @@ import p.studio.lsp.messages.LspProjectContext; import java.nio.file.Files; import java.nio.file.Path; +import java.util.List; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -142,8 +143,9 @@ class CompilerLanguageServiceBridgeTest { overlay, hoverPosition.line(), hoverPosition.character()); - assertTrue(hover.markdown().contains("blend(arg0: int, arg1: int) -> int")); + assertTrue(hover.markdown().contains("blend(dx: int, dy: int) -> int")); assertTrue(hover.markdown().contains("**method**")); + assertFalse(hover.markdown().contains("arg0")); final var functionSignatureHelp = bridge.signatureHelp( context, @@ -163,6 +165,60 @@ class CompilerLanguageServiceBridgeTest { assertEquals("Vec()", constructorSignatureHelp.signatures().getFirst().label()); } + @Test + void completionHoverAndSignatureHelpUseStdlibSemanticParameterNames() { + final Path projectRoot = findRepoRoot(Path.of("").toAbsolutePath().normalize()) + .resolve("test-projects") + .resolve("main") + .toAbsolutePath() + .normalize(); + final Path documentPath = projectRoot.resolve("src").resolve("main.pbs"); + final String overlay = """ + import { Gfx } from @sdk:gfx; + + fn frame() -> void { + Gfx.clear_565(5); + } + """; + final CompilerLanguageServiceBridge bridge = new CompilerLanguageServiceBridge(); + final LspProjectContext context = new LspProjectContext("main", "pbs", projectRoot); + final DocumentPositionMapper mapper = new DocumentPositionMapper(overlay); + final var memberPosition = mapper.positionOf(overlay.indexOf("clear_565")); + final var signaturePosition = mapper.positionOf(overlay.indexOf("5);")); + + final var completion = bridge.completion( + context, + documentPath.toUri().toString(), + overlay, + memberPosition.line(), + memberPosition.character()); + final var clear565Completion = completion.items().stream() + .filter(item -> item.label().equals("clear_565")) + .findFirst() + .orElseThrow(); + assertEquals("clear_565(color_565: int) -> void", clear565Completion.detail()); + assertFalse(clear565Completion.detail().contains("arg0")); + + final var hover = bridge.hover( + context, + documentPath.toUri().toString(), + overlay, + memberPosition.line(), + memberPosition.character()); + assertTrue(hover.markdown().contains("clear_565(color_565: int) -> void")); + assertFalse(hover.markdown().contains("arg0")); + + final var signatureHelp = bridge.signatureHelp( + context, + documentPath.toUri().toString(), + overlay, + signaturePosition.line(), + signaturePosition.character()); + assertEquals("clear_565(color_565: int) -> void", signatureHelp.signatures().getFirst().label()); + assertEquals(List.of("color_565: int"), signatureHelp.signatures().getFirst().parameters()); + assertFalse(signatureHelp.signatures().getFirst().label().contains("arg0")); + } + @Test void describeServerPublishesFrontendVisualThemes() { final CompilerLanguageServiceBridge bridge = new CompilerLanguageServiceBridge(); diff --git a/prometeu-lsp/prometeu-lsp-v1/src/test/java/p/studio/lsp/services/protocol/mapping/Lsp4jProtocolMessageMapperTest.java b/prometeu-lsp/prometeu-lsp-v1/src/test/java/p/studio/lsp/services/protocol/mapping/Lsp4jProtocolMessageMapperTest.java index 78516e5b..80e91e7f 100644 --- a/prometeu-lsp/prometeu-lsp-v1/src/test/java/p/studio/lsp/services/protocol/mapping/Lsp4jProtocolMessageMapperTest.java +++ b/prometeu-lsp/prometeu-lsp-v1/src/test/java/p/studio/lsp/services/protocol/mapping/Lsp4jProtocolMessageMapperTest.java @@ -19,6 +19,7 @@ import java.util.List; import java.util.Map; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -86,6 +87,7 @@ final class Lsp4jProtocolMessageMapperTest { assertEquals(1, completion.getItems().size()); assertEquals("blend", completion.getItems().getFirst().getLabel()); assertEquals("blend(dx: int, dy: int) -> int", completion.getItems().getFirst().getDetail()); + assertFalse(completion.getItems().getFirst().getDetail().contains("arg0")); final var documentation = assertInstanceOf(Either.class, completion.getItems().getFirst().getDocumentation()); assertTrue(documentation.isRight()); @@ -98,6 +100,8 @@ final class Lsp4jProtocolMessageMapperTest { 1)); assertEquals(1, signatureHelp.getSignatures().size()); assertEquals("mix(left: int, right: int) -> int", signatureHelp.getSignatures().getFirst().getLabel()); + assertFalse(signatureHelp.getSignatures().getFirst().getLabel().contains("arg0")); + assertEquals("left: int", signatureHelp.getSignatures().getFirst().getParameters().getFirst().getLabel().getLeft()); assertEquals(1, signatureHelp.getActiveParameter()); } }