diff --git a/qute.ls/com.redhat.qute.ls/mvnw.cmd b/qute.ls/com.redhat.qute.ls/mvnw.cmd old mode 100755 new mode 100644 diff --git a/qute.ls/com.redhat.qute.ls/pom.xml b/qute.ls/com.redhat.qute.ls/pom.xml index 73026b71e..415a3f45f 100644 --- a/qute.ls/com.redhat.qute.ls/pom.xml +++ b/qute.ls/com.redhat.qute.ls/pom.xml @@ -38,7 +38,7 @@ 11 yyyyMMdd-HHmm ${maven.build.timestamp} - 0.11.0 + 0.13.0 2.7.0.Final 5.6.1 jboss-releases-repository diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/lsp4j/proposed/InlayHint.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/lsp4j/proposed/InlayHint.java deleted file mode 100644 index 479cdabc7..000000000 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/lsp4j/proposed/InlayHint.java +++ /dev/null @@ -1,110 +0,0 @@ -/******************************************************************************* -* Copyright (c) 2022 Red Hat Inc. and others. -* All rights reserved. This program and the accompanying materials -* which accompanies this distribution, and is available at -* http://www.eclipse.org/legal/epl-v20.html -* -* SPDX-License-Identifier: EPL-2.0 -* -* Contributors: -* Red Hat Inc. - initial API and implementation -*******************************************************************************/ -package com.redhat.lsp4j.proposed; - -import java.util.List; - -import org.eclipse.lsp4j.Position; -import org.eclipse.lsp4j.jsonrpc.json.adapters.JsonElementTypeAdapter; -import org.eclipse.lsp4j.jsonrpc.messages.Either; -import org.eclipse.lsp4j.jsonrpc.validation.NonNull; -import org.eclipse.lsp4j.util.Preconditions; -import org.eclipse.xtext.xbase.lib.Pure; - -import com.google.gson.annotations.JsonAdapter; - -/** - * Inlay hint information. - * - * @since 3.17.0 - proposed state - */ -public class InlayHint { - - /** - * The position of this hint. - */ - @NonNull - private Position position; - - /** - * The label of this hint. A human readable string or an array of - * InlayHintLabelPart label parts. - * - * *Note* that neither the string nor the label part can be empty. - */ - @NonNull - private Either> label; - - /** - * The kind of this hint. Can be omitted in which case the client should fall - * back to a reasonable default. - */ - private InlayHintKind kind; - - /** - * A data entry field that is preserved on a completion item between a - * completion and a completion resolve request. - */ - @JsonAdapter(JsonElementTypeAdapter.Factory.class) - private Object data; - - public InlayHint(@NonNull Position position, Either> label) { - this.position = Preconditions.checkNotNull(position, "position"); - this.label = label; - - } - - public InlayHint() { - - } - - public Position getPosition() { - return position; - } - - public void setPosition(Position position) { - this.position = position; - } - - public Either> getLabel() { - return label; - } - - public void setLabel(Either> label) { - this.label = label; - } - - public InlayHintKind getKind() { - return kind; - } - - public void setKind(InlayHintKind kind) { - this.kind = kind; - } - - /** - * A data entry field that is preserved on a completion item between a - * completion and a completion resolve request. - */ - @Pure - public Object getData() { - return this.data; - } - - /** - * A data entry field that is preserved on a completion item between a - * completion and a completion resolve request. - */ - public void setData(final Object data) { - this.data = data; - } -} diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/lsp4j/proposed/InlayHintKind.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/lsp4j/proposed/InlayHintKind.java deleted file mode 100644 index 5acc0bc25..000000000 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/lsp4j/proposed/InlayHintKind.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* -* Copyright (c) 2022 Red Hat Inc. and others. -* All rights reserved. This program and the accompanying materials -* which accompanies this distribution, and is available at -* http://www.eclipse.org/legal/epl-v20.html -* -* SPDX-License-Identifier: EPL-2.0 -* -* Contributors: -* Red Hat Inc. - initial API and implementation -*******************************************************************************/ -package com.redhat.lsp4j.proposed; - -public enum InlayHintKind { - - /** - * An inlay hint that for a type annotation. - */ - Type(1), - - /** - * An inlay hint that is for a parameter. - */ - Parameter(2); - - private final int value; - - InlayHintKind(int value) { - this.value = value; - } - - public int getValue() { - return value; - } - - public static InlayHintKind forValue(int value) { - InlayHintKind[] allValues = InlayHintKind.values(); - if (value < 1 || value > allValues.length) - throw new IllegalArgumentException("Illegal enum value: " + value); - return allValues[value - 1]; - } -} diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/lsp4j/proposed/InlayHintLabelPart.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/lsp4j/proposed/InlayHintLabelPart.java deleted file mode 100644 index 1f26ead91..000000000 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/lsp4j/proposed/InlayHintLabelPart.java +++ /dev/null @@ -1,18 +0,0 @@ -/******************************************************************************* -* Copyright (c) 2022 Red Hat Inc. and others. -* All rights reserved. This program and the accompanying materials -* which accompanies this distribution, and is available at -* http://www.eclipse.org/legal/epl-v20.html -* -* SPDX-License-Identifier: EPL-2.0 -* -* Contributors: -* Red Hat Inc. - initial API and implementation -*******************************************************************************/ -package com.redhat.lsp4j.proposed; - -public class InlayHintLabelPart { - - - -} diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/lsp4j/proposed/InlayHintParams.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/lsp4j/proposed/InlayHintParams.java deleted file mode 100644 index c0bfabe58..000000000 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/lsp4j/proposed/InlayHintParams.java +++ /dev/null @@ -1,108 +0,0 @@ -/******************************************************************************* -* Copyright (c) 2022 Red Hat Inc. and others. -* All rights reserved. This program and the accompanying materials -* which accompanies this distribution, and is available at -* http://www.eclipse.org/legal/epl-v20.html -* -* SPDX-License-Identifier: EPL-2.0 -* -* Contributors: -* Red Hat Inc. - initial API and implementation -*******************************************************************************/ -package com.redhat.lsp4j.proposed; - -import org.eclipse.lsp4j.Range; -import org.eclipse.lsp4j.TextDocumentIdentifier; -import org.eclipse.lsp4j.WorkDoneProgressParams; -import org.eclipse.lsp4j.jsonrpc.messages.Either; -import org.eclipse.lsp4j.jsonrpc.validation.NonNull; -import org.eclipse.lsp4j.util.Preconditions; -import org.eclipse.xtext.xbase.lib.Pure; - -public class InlayHintParams implements WorkDoneProgressParams { - - /** - * An optional token that a server can use to report work done progress. - */ - private Either workDoneToken; - - /** - * The document to format. - */ - @NonNull - private TextDocumentIdentifier textDocument; - - /** - * The visible document range for which inlay hints should be computed. - */ - @NonNull - private Range range; - - /** - * An optional token that a server can use to report work done progress. - */ - @Pure - @Override - public Either getWorkDoneToken() { - return this.workDoneToken; - } - - /** - * An optional token that a server can use to report work done progress. - */ - public void setWorkDoneToken(final Either workDoneToken) { - this.workDoneToken = workDoneToken; - } - - public void setWorkDoneToken(final String workDoneToken) { - if (workDoneToken == null) { - this.workDoneToken = null; - return; - } - this.workDoneToken = Either.forLeft(workDoneToken); - } - - /** - * The document to format. - */ - @Pure - @NonNull - public TextDocumentIdentifier getTextDocument() { - return this.textDocument; - } - - /** - * The document to format. - */ - public void setTextDocument(@NonNull final TextDocumentIdentifier textDocument) { - this.textDocument = Preconditions.checkNotNull(textDocument, "textDocument"); - } - - public void setWorkDoneToken(final Integer workDoneToken) { - if (workDoneToken == null) { - this.workDoneToken = null; - return; - } - this.workDoneToken = Either.forRight(workDoneToken); - } - - /** - * Returns the visible document range for which inlay hints should be computed. - * - * @return the visible document range for which inlay hints should be computed. - */ - @Pure - @NonNull - public Range getRange() { - return range; - } - - /** - * Set the visible document range for which inlay hints should be computed. - * - * @param range - */ - public void setRange(@NonNull Range range) { - this.range = Preconditions.checkNotNull(range, "range"); - } -} diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/lsp4j/proposed/QuteInlayHintProvider.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/lsp4j/proposed/QuteInlayHintProvider.java deleted file mode 100644 index 801aa4928..000000000 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/lsp4j/proposed/QuteInlayHintProvider.java +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* -* Copyright (c) 2022 Red Hat Inc. and others. -* All rights reserved. This program and the accompanying materials -* which accompanies this distribution, and is available at -* http://www.eclipse.org/legal/epl-v20.html -* -* SPDX-License-Identifier: EPL-2.0 -* -* Contributors: -* Red Hat Inc. - initial API and implementation -*******************************************************************************/ -package com.redhat.lsp4j.proposed; - -import java.util.List; -import java.util.concurrent.CompletableFuture; - -import org.eclipse.lsp4j.jsonrpc.services.JsonRequest; - -public interface QuteInlayHintProvider { - - /** - * The inlay hints request is sent from the client to the server to compute - * inlay hints for a given [text document, range] tuple that may be rendered in - * the editor in place with other text. - *

- * Since 3.17.0 - */ - @JsonRequest("textDocument/inlayHint") - default CompletableFuture> inlayHint(InlayHintParams params) { - throw new UnsupportedOperationException(); - } - - /** - * The request is sent from the client to the server to resolve additional - * information for a given inlay hint. This is usually used to compute the - * {@code tooltip}, {@code location} or {@code command} properties of an inlay - * hint's label part to avoid its unnecessary computation during the - * {@code textDocument/inlayHint} request. - *

- * Since 3.17.0 - */ - @JsonRequest(value = "inlayHint/resolve", useSegment = false) - default CompletableFuture resolveInlayHint(InlayHint unresolved) { - throw new UnsupportedOperationException(); - } - -} diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/AbstractTextDocumentService.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/AbstractTextDocumentService.java index 1ef50ee79..0c2bfbfd6 100644 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/AbstractTextDocumentService.java +++ b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/AbstractTextDocumentService.java @@ -34,6 +34,8 @@ import org.eclipse.lsp4j.DocumentSymbolParams; import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.HoverParams; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintParams; import org.eclipse.lsp4j.LinkedEditingRangeParams; import org.eclipse.lsp4j.LinkedEditingRanges; import org.eclipse.lsp4j.Location; @@ -45,8 +47,6 @@ import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.eclipse.lsp4j.services.TextDocumentService; -import com.redhat.lsp4j.proposed.InlayHint; -import com.redhat.lsp4j.proposed.InlayHintParams; import com.redhat.qute.ls.commons.client.ExtendedClientCapabilities; import com.redhat.qute.settings.SharedSettings; @@ -162,6 +162,7 @@ public CompletableFuture linkedEditingRange(LinkedEditingRa return CompletableFuture.completedFuture(null); } + @Override public CompletableFuture> inlayHint(InlayHintParams params) { return CompletableFuture.completedFuture(null); } diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/QuteLanguageServer.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/QuteLanguageServer.java index 3c0e0269b..375d6685c 100644 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/QuteLanguageServer.java +++ b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/QuteLanguageServer.java @@ -27,13 +27,11 @@ import org.eclipse.lsp4j.InitializedParams; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.ServerCapabilities; +import org.eclipse.lsp4j.SetTraceParams; import org.eclipse.lsp4j.services.LanguageClient; import org.eclipse.lsp4j.services.LanguageServer; import org.eclipse.lsp4j.services.TextDocumentService; -import com.redhat.lsp4j.proposed.InlayHint; -import com.redhat.lsp4j.proposed.InlayHintParams; -import com.redhat.lsp4j.proposed.QuteInlayHintProvider; import com.redhat.qute.commons.JavaTypeInfo; import com.redhat.qute.commons.ProjectInfo; import com.redhat.qute.commons.QuteJavaDefinitionParams; @@ -76,7 +74,7 @@ */ public class QuteLanguageServer implements LanguageServer, ProcessLanguageServer, QuteLanguageServerAPI, QuteProjectInfoProvider, QuteJavaTypesProvider, QuteResolvedJavaTypeProvider, QuteJavaDefinitionProvider, - QuteDataModelProjectProvider, QuteUserTagProvider, QuteInlayHintProvider { + QuteDataModelProjectProvider, QuteUserTagProvider { private static final Logger LOGGER = Logger.getLogger(QuteLanguageServer.class.getName()); @@ -278,7 +276,8 @@ public void didChangeWatchedFiles(DidChangeWatchedFilesParams params) { } @Override - public CompletableFuture> inlayHint(InlayHintParams params) { - return textDocumentService.inlayHint(params); + public void setTrace(SetTraceParams params) { + // to avoid having error in vscode, the method is implemented + // FIXME : implement the behavior of this method. } } diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/QuteTextDocumentService.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/QuteTextDocumentService.java index 6929a74c4..9ffba57a7 100644 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/QuteTextDocumentService.java +++ b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/QuteTextDocumentService.java @@ -39,6 +39,8 @@ import org.eclipse.lsp4j.DocumentSymbolParams; import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.HoverParams; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintParams; import org.eclipse.lsp4j.LinkedEditingRangeParams; import org.eclipse.lsp4j.LinkedEditingRanges; import org.eclipse.lsp4j.Location; @@ -52,8 +54,6 @@ import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.eclipse.lsp4j.services.TextDocumentService; -import com.redhat.lsp4j.proposed.InlayHint; -import com.redhat.lsp4j.proposed.InlayHintParams; import com.redhat.qute.commons.datamodel.JavaDataModelChangeEvent; import com.redhat.qute.ls.commons.client.ExtendedClientCapabilities; import com.redhat.qute.ls.java.JavaFileTextDocumentService; @@ -235,6 +235,7 @@ public CompletableFuture linkedEditingRange(LinkedEditingRa return CompletableFuture.completedFuture(null); } + @Override public CompletableFuture> inlayHint(InlayHintParams params) { AbstractTextDocumentService service = getTextDocumentService(params.getTextDocument()); if (service != null) { diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/api/QuteLanguageClientAPI.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/api/QuteLanguageClientAPI.java index 0b335b7ac..46025d2b5 100644 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/api/QuteLanguageClientAPI.java +++ b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/api/QuteLanguageClientAPI.java @@ -11,9 +11,6 @@ *******************************************************************************/ package com.redhat.qute.ls.api; -import java.util.concurrent.CompletableFuture; - -import org.eclipse.lsp4j.jsonrpc.services.JsonRequest; import org.eclipse.lsp4j.services.LanguageClient; /** @@ -26,10 +23,4 @@ public interface QuteLanguageClientAPI extends LanguageClient, QuteJavaTypesProv QuteJavaDefinitionProvider, QuteProjectInfoProvider, QuteDataModelProjectProvider, QuteUserTagProvider, QuteJavaCodeLensProvider, QuteJavaDiagnosticsProvider, QuteJavaDocumentLinkProvider { - // TODO : remove this method when LSP4J will provide InlayHint support. See - // https://github.com/eclipse/lsp4j/issues/570 - @JsonRequest("workspace/inlayHint/refresh") - default CompletableFuture refreshInlayHints() { - throw new UnsupportedOperationException(); - } } \ No newline at end of file diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/template/TemplateFileTextDocumentService.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/template/TemplateFileTextDocumentService.java index d5edd00a1..f412d9260 100644 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/template/TemplateFileTextDocumentService.java +++ b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/ls/template/TemplateFileTextDocumentService.java @@ -42,6 +42,8 @@ import org.eclipse.lsp4j.DocumentSymbolParams; import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.HoverParams; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintParams; import org.eclipse.lsp4j.LinkedEditingRangeParams; import org.eclipse.lsp4j.LinkedEditingRanges; import org.eclipse.lsp4j.Location; @@ -53,8 +55,6 @@ import org.eclipse.lsp4j.jsonrpc.CancelChecker; import org.eclipse.lsp4j.jsonrpc.messages.Either; -import com.redhat.lsp4j.proposed.InlayHint; -import com.redhat.lsp4j.proposed.InlayHintParams; import com.redhat.qute.commons.datamodel.JavaDataModelChangeEvent; import com.redhat.qute.ls.AbstractTextDocumentService; import com.redhat.qute.ls.QuteLanguageServer; @@ -258,9 +258,9 @@ public CompletableFuture> inlayHint(InlayHintParams params) { // retrigger the inlay hints. CompletableFuture allFutures = CompletableFuture.allOf(resolvingJavaTypeContext .toArray(new CompletableFuture[resolvingJavaTypeContext.size()])); - allFutures.thenAccept(Void -> { - // Refresh Inlay Hints when all Java type are resolved. - quteLanguageServer.getLanguageClient().refreshInlayHints(); + return allFutures.thenCompose(Void -> { + // All Java type are resolved, recompute the inlay hints. + return inlayHint(params); }); } diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/services/QuteInlayHint.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/services/QuteInlayHint.java index b5707f6b5..b4c02dc16 100644 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/services/QuteInlayHint.java +++ b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/services/QuteInlayHint.java @@ -17,10 +17,10 @@ import java.util.logging.Level; import java.util.logging.Logger; +import org.eclipse.lsp4j.InlayHint; import org.eclipse.lsp4j.Range; import org.eclipse.lsp4j.jsonrpc.CancelChecker; -import com.redhat.lsp4j.proposed.InlayHint; import com.redhat.qute.ls.commons.BadLocationException; import com.redhat.qute.parser.template.Template; import com.redhat.qute.project.datamodel.JavaDataModelCache; @@ -66,10 +66,11 @@ public CompletableFuture> getInlayHint(Template template, Range LOGGER.log(Level.SEVERE, "Error while getting offsets view port range", e); } } + cancelChecker.checkCanceled(); InlayHintASTVistor visitor = new InlayHintASTVistor(javaCache, startOffset, endOffset, settings, - resolvingJavaTypeContext, - cancelChecker); + resolvingJavaTypeContext, cancelChecker); template.accept(visitor); + cancelChecker.checkCanceled(); return visitor.getInlayHints(); }); } diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/services/QuteLanguageService.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/services/QuteLanguageService.java index 9c639f5be..70863dc1f 100644 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/services/QuteLanguageService.java +++ b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/services/QuteLanguageService.java @@ -23,6 +23,7 @@ import org.eclipse.lsp4j.DocumentLink; import org.eclipse.lsp4j.DocumentSymbol; import org.eclipse.lsp4j.Hover; +import org.eclipse.lsp4j.InlayHint; import org.eclipse.lsp4j.LinkedEditingRanges; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.LocationLink; @@ -32,7 +33,6 @@ import org.eclipse.lsp4j.SymbolInformation; import org.eclipse.lsp4j.jsonrpc.CancelChecker; -import com.redhat.lsp4j.proposed.InlayHint; import com.redhat.qute.ls.commons.snippets.Snippet; import com.redhat.qute.ls.commons.snippets.SnippetRegistry; import com.redhat.qute.ls.commons.snippets.SnippetRegistryProvider; diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/services/inlayhint/InlayHintASTVistor.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/services/inlayhint/InlayHintASTVistor.java index 339df2d2a..8057cca52 100644 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/services/inlayhint/InlayHintASTVistor.java +++ b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/services/inlayhint/InlayHintASTVistor.java @@ -20,12 +20,12 @@ import java.util.logging.Level; import java.util.logging.Logger; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintKind; import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.jsonrpc.CancelChecker; import org.eclipse.lsp4j.jsonrpc.messages.Either; -import com.redhat.lsp4j.proposed.InlayHint; -import com.redhat.lsp4j.proposed.InlayHintKind; import com.redhat.qute.commons.ResolvedJavaTypeInfo; import com.redhat.qute.parser.template.ASTVisitor; import com.redhat.qute.parser.template.Expression; diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/settings/capabilities/ClientCapabilitiesWrapper.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/settings/capabilities/ClientCapabilitiesWrapper.java index 672d1b233..50ab71d6a 100644 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/settings/capabilities/ClientCapabilitiesWrapper.java +++ b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/settings/capabilities/ClientCapabilitiesWrapper.java @@ -97,6 +97,10 @@ public boolean isLinkedEditingRangeDynamicRegistered() { return v3Supported && isDynamicRegistrationSupported(getTextDocument().getLinkedEditingRange()); } + public boolean isInlayHintDynamicRegistered() { + return v3Supported && isDynamicRegistrationSupported(getTextDocument().getInlayHint()); + } + private boolean isDynamicRegistrationSupported(DynamicRegistrationCapabilities capability) { return capability != null && capability.getDynamicRegistration() != null && capability.getDynamicRegistration().booleanValue(); diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/settings/capabilities/QuteCapabilityManager.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/settings/capabilities/QuteCapabilityManager.java index beb863bbb..d91c73838 100644 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/settings/capabilities/QuteCapabilityManager.java +++ b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/settings/capabilities/QuteCapabilityManager.java @@ -22,6 +22,7 @@ import static com.redhat.qute.settings.capabilities.ServerCapabilitiesConstants.DOCUMENT_LINK_ID; import static com.redhat.qute.settings.capabilities.ServerCapabilitiesConstants.DOCUMENT_SYMBOL_ID; import static com.redhat.qute.settings.capabilities.ServerCapabilitiesConstants.HOVER_ID; +import static com.redhat.qute.settings.capabilities.ServerCapabilitiesConstants.INLAY_HINT_ID; import static com.redhat.qute.settings.capabilities.ServerCapabilitiesConstants.LINKED_EDITING_RANGE_ID; import static com.redhat.qute.settings.capabilities.ServerCapabilitiesConstants.REFERENCES_ID; import static com.redhat.qute.settings.capabilities.ServerCapabilitiesConstants.TEXT_DOCUMENT_CODE_ACTION; @@ -31,6 +32,7 @@ import static com.redhat.qute.settings.capabilities.ServerCapabilitiesConstants.TEXT_DOCUMENT_DOCUMENT_SYMBOL; import static com.redhat.qute.settings.capabilities.ServerCapabilitiesConstants.TEXT_DOCUMENT_HIGHLIGHT; import static com.redhat.qute.settings.capabilities.ServerCapabilitiesConstants.TEXT_DOCUMENT_HOVER; +import static com.redhat.qute.settings.capabilities.ServerCapabilitiesConstants.TEXT_DOCUMENT_INLAY_HINT; import static com.redhat.qute.settings.capabilities.ServerCapabilitiesConstants.TEXT_DOCUMENT_LINK; import static com.redhat.qute.settings.capabilities.ServerCapabilitiesConstants.TEXT_DOCUMENT_LINKED_EDITING_RANGE; import static com.redhat.qute.settings.capabilities.ServerCapabilitiesConstants.TEXT_DOCUMENT_REFERENCES; @@ -51,6 +53,7 @@ import org.eclipse.lsp4j.FileSystemWatcher; import org.eclipse.lsp4j.Registration; import org.eclipse.lsp4j.RegistrationParams; +import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.eclipse.lsp4j.services.LanguageClient; import com.redhat.qute.ls.commons.client.ExtendedClientCapabilities; @@ -107,6 +110,9 @@ public void initializeCapabilities() { if (this.getClientCapabilities().isLinkedEditingRangeDynamicRegistered()) { registerCapability(LINKED_EDITING_RANGE_ID, TEXT_DOCUMENT_LINKED_EDITING_RANGE); } + if (this.getClientCapabilities().isInlayHintDynamicRegistered()) { + registerCapability(INLAY_HINT_ID, TEXT_DOCUMENT_INLAY_HINT); + } if (this.getClientCapabilities().isDidChangeWatchedFilesRegistered()) { registerWatchedFiles(); } @@ -114,8 +120,8 @@ public void initializeCapabilities() { private void registerWatchedFiles() { List watchers = new ArrayList<>(2); - watchers.add(new FileSystemWatcher("**/*.html")); - watchers.add(new FileSystemWatcher("**/*.qute.html")); + watchers.add(new FileSystemWatcher(Either.forLeft("**/*.html"))); + watchers.add(new FileSystemWatcher(Either.forLeft("**/*.qute.html"))); DidChangeWatchedFilesRegistrationOptions options = new DidChangeWatchedFilesRegistrationOptions(watchers); registerCapability(WORKSPACE_WATCHED_FILES_ID, WORKSPACE_WATCHED_FILES, options); } diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/settings/capabilities/ServerCapabilitiesConstants.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/settings/capabilities/ServerCapabilitiesConstants.java index 07811c3bb..543a4face 100644 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/settings/capabilities/ServerCapabilitiesConstants.java +++ b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/settings/capabilities/ServerCapabilitiesConstants.java @@ -41,6 +41,7 @@ private ServerCapabilitiesConstants() { public static final String TEXT_DOCUMENT_REFERENCES = "textDocument/references"; public static final String TEXT_DOCUMENT_LINKED_EDITING_RANGE = "textDocument/linkedEditingRange"; + public static final String TEXT_DOCUMENT_INLAY_HINT = "textDocument/inlayHint"; public static final String WORKSPACE_EXECUTE_COMMAND = "workspace/executeCommand"; public static final String WORKSPACE_WATCHED_FILES = "workspace/didChangeWatchedFiles"; @@ -61,6 +62,7 @@ private ServerCapabilitiesConstants() { public static final String REFERENCES_ID = UUID.randomUUID().toString(); public static final String WORKSPACE_WATCHED_FILES_ID = UUID.randomUUID().toString(); public static final String LINKED_EDITING_RANGE_ID = UUID.randomUUID().toString(); + public static final String INLAY_HINT_ID = UUID.randomUUID().toString(); public static final CompletionOptions DEFAULT_COMPLETION_OPTIONS = new CompletionOptions(false, Arrays.asList("{", "@", "#", ".", ":")); diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/settings/capabilities/ServerCapabilitiesInitializer.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/settings/capabilities/ServerCapabilitiesInitializer.java index c5b5d1b19..55fdc43c7 100644 --- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/settings/capabilities/ServerCapabilitiesInitializer.java +++ b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/settings/capabilities/ServerCapabilitiesInitializer.java @@ -55,6 +55,7 @@ public static ServerCapabilities getNonDynamicServerCapabilities(ClientCapabilit } serverCapabilities.setReferencesProvider(!clientCapabilities.isReferencesDynamicRegistrationSupported()); serverCapabilities.setLinkedEditingRangeProvider(!clientCapabilities.isLinkedEditingRangeDynamicRegistered()); + serverCapabilities.setInlayHintProvider(!clientCapabilities.isInlayHintDynamicRegistered()); return serverCapabilities; } } \ No newline at end of file diff --git a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/QuteAssert.java b/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/QuteAssert.java index 7a520a1a8..2d73ee9b9 100644 --- a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/QuteAssert.java +++ b/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/QuteAssert.java @@ -45,6 +45,7 @@ import org.eclipse.lsp4j.DocumentSymbol; import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.HoverCapabilities; +import org.eclipse.lsp4j.InlayHint; import org.eclipse.lsp4j.LinkedEditingRanges; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.LocationLink; @@ -62,7 +63,6 @@ import org.eclipse.lsp4j.WorkspaceEdit; import org.eclipse.lsp4j.jsonrpc.messages.Either; -import com.redhat.lsp4j.proposed.InlayHint; import com.redhat.qute.commons.ProjectInfo; import com.redhat.qute.ls.commons.BadLocationException; import com.redhat.qute.ls.commons.TextDocument; @@ -146,7 +146,8 @@ public static void testCompletionFor(String value, boolean snippetSupport, Strin } public static void testCompletionFor(String value, boolean snippetSupport, String fileUri, String templateId, - String projectUri, String templateBaseDir, Integer expectedCount, CompletionItem... expectedItems) throws Exception { + String projectUri, String templateBaseDir, Integer expectedCount, CompletionItem... expectedItems) + throws Exception { testCompletionFor(value, snippetSupport, fileUri, templateId, projectUri, templateBaseDir, expectedCount, new QuteNativeSettings(), expectedItems); }