implements PLN-0080
This commit is contained in:
parent
eab763fd21
commit
db8c5147db
@ -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();
|
||||
|
||||
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user