implements PLN-0080

This commit is contained in:
bQUARKz 2026-05-14 07:43:35 +01:00
parent eab763fd21
commit db8c5147db
Signed by: bquarkz
SSH Key Fingerprint: SHA256:Z7dgqoglWwoK6j6u4QC87OveEq74WOhFN+gitsxtkf8
2 changed files with 61 additions and 1 deletions

View File

@ -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();

View File

@ -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());
}
}