diff --git a/liberty-ls/src/main/java/io/openliberty/tools/langserver/model/propertiesfile/PropertiesEntryInstance.java b/liberty-ls/src/main/java/io/openliberty/tools/langserver/model/propertiesfile/PropertiesEntryInstance.java index 6a889f60..a4056e8f 100644 --- a/liberty-ls/src/main/java/io/openliberty/tools/langserver/model/propertiesfile/PropertiesEntryInstance.java +++ b/liberty-ls/src/main/java/io/openliberty/tools/langserver/model/propertiesfile/PropertiesEntryInstance.java @@ -1,5 +1,5 @@ /******************************************************************************* -* Copyright (c) 2022, 2023 IBM Corporation and others. +* Copyright (c) 2022, 2024 IBM Corporation and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0 which is available at @@ -102,7 +102,7 @@ public CompletableFuture getHover(Position position) { public CompletableFuture> getCompletions(Position position) { if (!isComment) { if (propertyValueInstance.toString() != null && !isOnEntryKey(position)) { - return propertyValueInstance.getCompletions(position); + return propertyValueInstance.getCompletions(propertyValueInstance.toString(), position); } return propertyKeyInstance.getCompletions(this.getKey(), position); } diff --git a/liberty-ls/src/main/java/io/openliberty/tools/langserver/model/propertiesfile/PropertiesKeyInstance.java b/liberty-ls/src/main/java/io/openliberty/tools/langserver/model/propertiesfile/PropertiesKeyInstance.java index 6e775ace..58d90da7 100644 --- a/liberty-ls/src/main/java/io/openliberty/tools/langserver/model/propertiesfile/PropertiesKeyInstance.java +++ b/liberty-ls/src/main/java/io/openliberty/tools/langserver/model/propertiesfile/PropertiesKeyInstance.java @@ -108,9 +108,21 @@ protected void setDetailsOnCompletionItems(List items, String ke } } - public List getValidValues() { + public List getValidValues(String enteredValue, Position position) { List values = ServerPropertyValues.getValidValues(textDocumentItem, propertyKey); - List results = values.stream().map(s -> new CompletionItem(s)).collect(Collectors.toList()); + List results = values.stream() + .filter(s -> s.toLowerCase().contains(enteredValue.trim().toLowerCase())) + .map(s -> { + int line = position.getLine(); + Position rangeStart = new Position(line, getEndPosition() + 2); + Position rangeEnd = new Position(line, getEndPosition() + 2 + s.length()); + Range range = new Range(rangeStart, rangeEnd); + Either edit = Either.forLeft(new TextEdit(range, s)); + CompletionItem completionItem = new CompletionItem(); + completionItem.setTextEdit(edit); + completionItem.setLabel(s); + return completionItem; + }).toList(); // Preselect the default. // This uses the first item in the List as default. // (Check ServerPropertyValues.java) Currently sorted to have confirmed/sensible values as default. diff --git a/liberty-ls/src/main/java/io/openliberty/tools/langserver/model/propertiesfile/PropertiesValueInstance.java b/liberty-ls/src/main/java/io/openliberty/tools/langserver/model/propertiesfile/PropertiesValueInstance.java index f4c9ef1e..be6c7edc 100644 --- a/liberty-ls/src/main/java/io/openliberty/tools/langserver/model/propertiesfile/PropertiesValueInstance.java +++ b/liberty-ls/src/main/java/io/openliberty/tools/langserver/model/propertiesfile/PropertiesValueInstance.java @@ -1,5 +1,5 @@ /******************************************************************************* -* Copyright (c) 2022 IBM Corporation and others. +* Copyright (c) 2022, 2024 IBM Corporation and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0 which is available at @@ -41,8 +41,8 @@ public CompletableFuture getHover() { return CompletableFuture.completedFuture(hover); } - public CompletableFuture> getCompletions(Position position) { - return CompletableFuture.completedFuture(key.getValidValues()); + public CompletableFuture> getCompletions(String enteredValue, Position position) { + return CompletableFuture.completedFuture(key.getValidValues(enteredValue, position)); } @Override diff --git a/liberty-ls/src/test/java/io/openliberty/tools/langserver/completion/BootstrapPropertyCompletionTest.java b/liberty-ls/src/test/java/io/openliberty/tools/langserver/completion/BootstrapPropertyCompletionTest.java index 0578a822..4b869e62 100644 --- a/liberty-ls/src/test/java/io/openliberty/tools/langserver/completion/BootstrapPropertyCompletionTest.java +++ b/liberty-ls/src/test/java/io/openliberty/tools/langserver/completion/BootstrapPropertyCompletionTest.java @@ -101,6 +101,22 @@ public void testValueCompletionLogProvider() throws Exception { checkCompletionsContainAllStrings(completionItems, "binaryLogging-1.0"); } + @Test + public void testValueCompletionForTraceLoggingFormatWithValidUserInput() throws Exception { + CompletableFuture, CompletionList>> completions = getCompletion("com.ibm.ws.logging.trace.format= CE ", new Position(0, 41)); + List completionItems = completions.get().getLeft(); + assertEquals(2, completionItems.size()); + + checkCompletionsContainAllStrings(completionItems, "ENHANCED", "ADVANCED"); + } + + @Test + public void testValueCompletionLogProviderUserEnteredInvalidValue() throws Exception { + CompletableFuture, CompletionList>> completions = getCompletion("websphere.log.provider=bb", new Position(0, 24)); + List completionItems = completions.get().getLeft(); + assertEquals(0, completionItems.size()); + } + protected CompletableFuture, CompletionList>> getCompletion(String enteredText, Position position) throws URISyntaxException, InterruptedException, ExecutionException { String filename = "bootstrap.properties"; File file = new File(resourcesDir, filename); diff --git a/liberty-ls/src/test/java/io/openliberty/tools/langserver/completion/ServerEnvCompletionTest.java b/liberty-ls/src/test/java/io/openliberty/tools/langserver/completion/ServerEnvCompletionTest.java index 36ce4bbe..dd933818 100644 --- a/liberty-ls/src/test/java/io/openliberty/tools/langserver/completion/ServerEnvCompletionTest.java +++ b/liberty-ls/src/test/java/io/openliberty/tools/langserver/completion/ServerEnvCompletionTest.java @@ -118,6 +118,37 @@ public void testValueCompletionForBoolean() throws Exception { checkCompletionsContainAllStrings(completionItems, ServerPropertyValues.BOOLEAN_VALUES_DEFAULT_TRUE); } + @Test + public void testValueCompletionForConsoleLoggingFormatForUserEnteredKey() throws Exception { + // also testing user entered value with trailing spaces. spaces are trimmed in code + CompletableFuture, CompletionList>> completions = getCompletion("WLP_LOGGING_CONSOLE_FORMAT= S", new Position(0, 28)); + List completionItems = completions.get().getLeft(); + assertEquals(3, completionItems.size()); + + checkCompletionsContainAllStrings(completionItems, "SIMPLE", "JSON", "TBASIC"); + + checkCompletionContainsDetail(completionItems, null, "This setting specifies the required format for the console. Valid values are `dev`, `simple`, or `json` format. By default, consoleFormat is set to `dev`."); + } + + @Test + public void testValueCompletionForConsoleLoggingFormatForUserEnteredInvalidKey() throws Exception { + CompletableFuture, CompletionList>> completions = getCompletion("WLP_LOGGING_CONSOLE_FORMAT=Asd", new Position(0, 30)); + List completionItems = completions.get().getLeft(); + assertEquals(0, completionItems.size()); + } + + @Test + public void testValueCompletionForYesNoWhenUserEnteredY() throws Exception { + //providing input in UPPERCASE to verify code is working case insensitive + //also checking ending spaces + CompletableFuture, CompletionList>> completions = getCompletion("WLP_DEBUG_SUSPEND=Y ", new Position(0, 21)); + List completionItems = completions.get().getLeft(); + assertEquals(1, completionItems.size()); + + checkCompletionsContainAllStrings(completionItems, "y"); + + } + protected CompletableFuture, CompletionList>> getCompletion(String enteredText, Position position) throws URISyntaxException, InterruptedException, ExecutionException, IOException { String filename = "server.env"; File file = new File(resourcesDir, filename);