Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,7 @@ private static CompletionItem createCompletion(
DocumentId id
) {
CompletionItem completionItem = new CompletionItem(label);
completionItem.setDetail(shapeId.toString());
completionItem.setKind(CompletionItemKind.Class);
TextEdit textEdit = new TextEdit(id.range(), label);
completionItem.setTextEdit(Either.forLeft(textEdit));
Expand Down
15 changes: 15 additions & 0 deletions src/test/java/software/amazon/smithy/lsp/LspMatchers.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,21 @@ public void describeMismatchSafely(CompletionItem item, Description description)
};
}

public static Matcher<CompletionItem> hasDetail(String detail) {
return new CustomTypeSafeMatcher<>("a completion item with the detail + `" + detail + "`") {
@Override
protected boolean matchesSafely(CompletionItem item) {
return item.getDetail().equals(detail);
}

@Override
public void describeMismatchSafely(CompletionItem item, Description description) {
description.appendText("Expected completion item with detail '"
+ detail + "' but was '" + item.getDetail() + "'");
}
};
}

public static Matcher<TextEdit> makesEditedDocument(Document document, String expected) {
return new CustomTypeSafeMatcher<>("makes an edited document " + expected) {
@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package software.amazon.smithy.lsp;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.anEmptyMap;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.containsInAnyOrder;
Expand All @@ -19,6 +20,7 @@
import static org.hamcrest.Matchers.startsWith;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static software.amazon.smithy.lsp.LspMatchers.diagnosticWithMessage;
import static software.amazon.smithy.lsp.LspMatchers.hasDetail;
import static software.amazon.smithy.lsp.LspMatchers.hasLabel;
import static software.amazon.smithy.lsp.LspMatchers.hasText;
import static software.amazon.smithy.lsp.LspMatchers.makesEditedDocument;
Expand Down Expand Up @@ -137,8 +139,8 @@ public void completion() throws Exception {
List<CompletionItem> traitCompletions = server.completion(traitParams).get().getLeft();
List<CompletionItem> wsCompletions = server.completion(wsParams).get().getLeft();

assertThat(memberTargetCompletions, containsInAnyOrder(hasLabel("String")));
assertThat(traitCompletions, containsInAnyOrder(hasLabel("default")));
assertThat(memberTargetCompletions, containsInAnyOrder(allOf(hasLabel("String"), hasDetail("smithy.api#String"))));
assertThat(traitCompletions, containsInAnyOrder(allOf(hasLabel("default"), hasDetail("smithy.api#default"))));
assertThat(wsCompletions, empty());
}

Expand Down Expand Up @@ -189,7 +191,7 @@ public void completionImports() throws Exception {
.buildCompletion();
List<CompletionItem> completions = server.completion(completionParams).get().getLeft();

assertThat(completions, containsInAnyOrder(hasLabel("Bar")));
assertThat(completions, containsInAnyOrder(allOf(hasLabel("Bar"), hasDetail("com.bar#Bar"))));

Document document = server.getFirstProject().getDocument(uri);
// TODO: The server puts the 'use' on the wrong line
Expand Down Expand Up @@ -491,7 +493,7 @@ public void didChange() throws Exception {
.buildCompletion();
List<CompletionItem> completions = server.completion(completionParams).get().getLeft();

assertThat(completions, hasItem(hasLabel("GetFooInput")));
assertThat(completions, hasItem(allOf(hasLabel("GetFooInput"), hasDetail("com.foo#GetFooInput"))));
}

@Test
Expand Down Expand Up @@ -715,7 +717,7 @@ public void newShapeMixinCompletion() throws Exception {

List<CompletionItem> completions = server.completion(completionParams).get().getLeft();

assertThat(completions, containsInAnyOrder(hasLabel("Foo")));
assertThat(completions, containsInAnyOrder(allOf(hasLabel("Foo"), hasDetail("com.foo#Foo"))));
}

@Test
Expand Down Expand Up @@ -775,7 +777,7 @@ public void existingShapeMixinCompletion() throws Exception {

List<CompletionItem> completions = server.completion(completionParams).get().getLeft();

assertThat(completions, containsInAnyOrder(hasLabel("Foo")));
assertThat(completions, containsInAnyOrder(allOf(hasLabel("Foo"), hasDetail("com.foo#Foo"))));
}

@Test
Expand Down Expand Up @@ -807,7 +809,7 @@ public void diagnosticsOnInvalidStructureMember() {
String model = safeString("""
$version: "2"
namespace com.foo

structure Foo {
abc
}
Expand Down Expand Up @@ -836,7 +838,7 @@ public void diagnosticsOnUse() {
String model = safeString("""
$version: "2"
namespace com.foo

use mything#SomeUnknownThing
""");
TestWorkspace workspace = TestWorkspace.singleModel(model);
Expand Down Expand Up @@ -1768,9 +1770,9 @@ public void completionHoverDefinitionWithAbsoluteIds() throws Exception {
List<CompletionItem> traitCompletions = server.completion(trait.buildCompletion()).get().getLeft();
List<CompletionItem> memberTargetCompletions = server.completion(memberTarget.buildCompletion()).get().getLeft();

assertThat(useTargetCompletions, containsInAnyOrder(hasLabel("com.bar#Bar2"))); // won't match 'Bar' because its already imported
assertThat(traitCompletions, containsInAnyOrder(hasLabel("com.bar#baz")));
assertThat(memberTargetCompletions, containsInAnyOrder(hasLabel("com.bar#Bar"), hasLabel("com.bar#Bar2")));
assertThat(useTargetCompletions, containsInAnyOrder(allOf(hasLabel("com.bar#Bar2"), hasDetail("com.bar#Bar2")))); // won't match 'Bar' because its already imported
assertThat(traitCompletions, containsInAnyOrder(allOf(hasLabel("com.bar#baz"), hasDetail("com.bar#baz"))));
assertThat(memberTargetCompletions, containsInAnyOrder(hasLabel("com.bar#Bar"), hasDetail("com.bar#Bar2")));

List<? extends Location> useTargetLocations = server.definition(useTarget.buildDefinition()).get().getLeft();
List<? extends Location> traitLocations = server.definition(trait.buildDefinition()).get().getLeft();
Expand Down Expand Up @@ -1832,7 +1834,7 @@ public void useCompletionDoesntAutoImport() throws Exception {
.get()
.getLeft();

assertThat(completions, containsInAnyOrder(hasLabel("com.bar#Bar")));
assertThat(completions, containsInAnyOrder(allOf(hasLabel("com.bar#Bar"), hasDetail("com.bar#Bar"))));
assertThat(completions.get(0).getAdditionalTextEdits(), nullValue());
}

Expand Down Expand Up @@ -1990,7 +1992,7 @@ public void multiRootAddingWatchedFile() throws Exception {
server.didChange(RequestBuilders.didChange()
.uri(fooUri)
.text("""

structure Bar {}""")
.range(LspAdapter.point(3, 0))
.build());
Expand Down