Skip to content

Commit

Permalink
Improve completion
Browse files Browse the repository at this point in the history
Signed-off-by: azerr <[email protected]>
  • Loading branch information
angelozerr committed Jul 8, 2023
1 parent 2496768 commit 95a83c2
Show file tree
Hide file tree
Showing 37 changed files with 1,541 additions and 237 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,11 @@ public class SupportedFeatures {
textDocumentClientCapabilities.setInlayHint(new InlayHintCapabilities());
// TODO : support textDocument/colorPresentation
// textDocumentClientCapabilities.setColorProvider(new ColorProviderCapabilities());
final var completionItemCapabilities = new CompletionItemCapabilities(Boolean.TRUE);
final var completionItemCapabilities = new CompletionItemCapabilities(Boolean.FALSE);
completionItemCapabilities
.setDocumentationFormat(Arrays.asList(MarkupKind.MARKDOWN, MarkupKind.PLAINTEXT));
completionItemCapabilities.setInsertTextModeSupport(new CompletionItemInsertTextModeSupportCapabilities(List.of(InsertTextMode.AsIs, InsertTextMode.AdjustIndentation)));
completionItemCapabilities.setResolveSupport(new CompletionItemResolveSupportCapabilities(List.of("documentation", "detail", "additionalTextEdits"))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
// completionItemCapabilities.setInsertTextModeSupport(new CompletionItemInsertTextModeSupportCapabilities(List.of(InsertTextMode.AsIs, InsertTextMode.AdjustIndentation)));
// completionItemCapabilities.setResolveSupport(new CompletionItemResolveSupportCapabilities(List.of("documentation", "detail", "additionalTextEdits"))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
textDocumentClientCapabilities.setCompletion(new CompletionCapabilities(completionItemCapabilities));
final var definitionCapabilities = new DefinitionCapabilities();
definitionCapabilities.setLinkSupport(Boolean.TRUE);
Expand Down Expand Up @@ -115,11 +115,13 @@ public class SupportedFeatures {
textDocumentClientCapabilities.setOnTypeFormatting(null); // TODO
// TODO : support textDocument/rangeFormatting
// textDocumentClientCapabilities.setRangeFormatting(new RangeFormattingCapabilities());
textDocumentClientCapabilities.setReferences(new ReferencesCapabilities());
final var renameCapabilities = new RenameCapabilities();
renameCapabilities.setPrepareSupport(true);
textDocumentClientCapabilities.setRename(renameCapabilities);
// TODO
// TODO : support textDocument/references
// textDocumentClientCapabilities.setReferences(new ReferencesCapabilities());
// TODO : support textDocument/rename
//final var renameCapabilities = new RenameCapabilities();
//renameCapabilities.setPrepareSupport(true);
//textDocumentClientCapabilities.setRename(renameCapabilities);
// TODO : support textDocument/signatureHelp
// textDocumentClientCapabilities.setSignatureHelp(new SignatureHelpCapabilities());
textDocumentClientCapabilities
.setSynchronization(new SynchronizationCapabilities(Boolean.TRUE, Boolean.TRUE, Boolean.TRUE));
Expand Down Expand Up @@ -151,9 +153,9 @@ public class SupportedFeatures {

public static WindowClientCapabilities getWindowClientCapabilities() {
final var windowClientCapabilities = new WindowClientCapabilities();
windowClientCapabilities.setShowDocument(new ShowDocumentCapabilities(true));
windowClientCapabilities.setWorkDoneProgress(true);
windowClientCapabilities.setShowMessage(new WindowShowMessageRequestCapabilities());
//windowClientCapabilities.setShowDocument(new ShowDocumentCapabilities(true));
//windowClientCapabilities.setWorkDoneProgress(true);
//windowClientCapabilities.setShowMessage(new WindowShowMessageRequestCapabilities());
return windowClientCapabilities;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.redhat.devtools.intellij.lsp4ij.operations.completion;

import com.intellij.codeInsight.completion.CompletionConfidence;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.util.ThreeState;
import org.jetbrains.annotations.NotNull;

public class LSPCompletionConfidence extends CompletionConfidence {

@Override
public @NotNull ThreeState shouldSkipAutopopup(@NotNull PsiElement contextElement, @NotNull PsiFile psiFile, int offset) {
return ThreeState.NO;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package com.redhat.devtools.intellij.lsp4ij.operations.highlight;

import com.intellij.lang.ASTNode;
import com.intellij.lang.Language;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.util.NlsSafe;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.impl.PsiElementBase;
import com.redhat.devtools.intellij.lsp4ij.LSPIJUtils;
import org.eclipse.lsp4j.DocumentHighlight;
import org.eclipse.lsp4j.DocumentHighlightKind;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class LSPHighlightPsiElement extends PsiElementBase {

private final TextRange textRange;
private final DocumentHighlightKind kind;

public LSPHighlightPsiElement(DocumentHighlight highlight, Document document) {
this.textRange = LSPIJUtils.toTextRange(highlight.getRange(), document);
this.kind = highlight.getKind();
}

public DocumentHighlightKind getKind() {
return kind;
}

@Override
public @NotNull Language getLanguage() {
return null;
}

@Override
public PsiElement @NotNull [] getChildren() {
return new PsiElement[0];
}

@Override
public PsiElement getParent() {
return null;
}

@Override
public TextRange getTextRange() {
return textRange;
}

@Override
public int getStartOffsetInParent() {
return 0;
}

@Override
public int getTextLength() {
return 0;
}

@Override
public @Nullable PsiElement findElementAt(int offset) {
return null;
}

@Override
public int getTextOffset() {
return 0;
}

@Override
public @NlsSafe String getText() {
return null;
}

@Override
public char @NotNull [] textToCharArray() {
return new char[0];
}

@Override
public ASTNode getNode() {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,33 +15,41 @@
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.util.Consumer;
import org.eclipse.lsp4j.DocumentHighlightKind;
import org.jetbrains.annotations.NotNull;

import java.util.List;
import java.util.logging.Logger;

public class LSPHighlightUsagesHandler extends HighlightUsagesHandlerBase<PsiElement> {
public class LSPHighlightUsagesHandler extends HighlightUsagesHandlerBase<LSPHighlightPsiElement> {
private static final Logger LOGGER = Logger.getLogger(LSPHighlightUsagesHandler.class.getName());
private final List<PsiElement> targets;
private final List<LSPHighlightPsiElement> targets;

public LSPHighlightUsagesHandler(Editor editor, PsiFile file, List<PsiElement> targets) {
public LSPHighlightUsagesHandler(Editor editor, PsiFile file, List<LSPHighlightPsiElement> targets) {
super(editor, file);
this.targets = targets;
}

@Override
public @NotNull List<PsiElement> getTargets() {
public @NotNull List<LSPHighlightPsiElement> getTargets() {
return targets;
}

@Override
protected void selectTargets(@NotNull List<? extends PsiElement> targets,
@NotNull Consumer<? super List<? extends PsiElement>> selectionConsumer) {
protected void selectTargets(@NotNull List<? extends LSPHighlightPsiElement> targets,
@NotNull Consumer<? super List<? extends LSPHighlightPsiElement>> selectionConsumer) {
selectionConsumer.consume(targets);
}

@Override
public void computeUsages(@NotNull List<? extends PsiElement> targets) {
targets.forEach(target -> myReadUsages.add(target.getTextRange()));
public void computeUsages(@NotNull List<? extends LSPHighlightPsiElement> targets) {
targets.forEach(target ->
{
if (target.getKind() == DocumentHighlightKind.Read) {
myReadUsages.add(target.getTextRange());
} else {
myWriteUsages.add(target.getTextRange());
}
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.redhat.devtools.intellij.lsp4ij.LSPIJUtils;
Expand Down Expand Up @@ -43,12 +44,12 @@ public class LSPHighlightUsagesHandlerFactory implements HighlightUsagesHandlerF

@Override
public @Nullable HighlightUsagesHandlerBase createHighlightUsagesHandler(@NotNull Editor editor, @NotNull PsiFile file) {
List<PsiElement> targets = getTargets(editor, file);
List<LSPHighlightPsiElement> targets = getTargets(editor, file);
return targets.isEmpty()?null:new LSPHighlightUsagesHandler(editor, file, targets);
}

private List<PsiElement> getTargets(Editor editor, PsiFile file) {
List<PsiElement> elements = new ArrayList<>();
private List<LSPHighlightPsiElement> getTargets(Editor editor, PsiFile file) {
List<LSPHighlightPsiElement> elements = new ArrayList<>();
try {
int offset = TargetElementUtil.adjustOffset(file, editor.getDocument(), editor.getCaretModel().getOffset());
Document document = editor.getDocument();
Expand Down Expand Up @@ -76,11 +77,12 @@ private List<PsiElement> getTargets(Editor editor, PsiFile file) {
ProgressManager.checkCanceled();
DocumentHighlight highlight = highlights.poll(25, TimeUnit.MILLISECONDS);
if (highlight != null) {
int highlightOffset = LSPIJUtils.toOffset(highlight.getRange().getStart(), document);
elements.add(new LSPHighlightPsiElement(highlight, document));
/*int highlightOffset = LSPIJUtils.toOffset(highlight.getRange().getStart(), document);
PsiElement element = file.findElementAt(highlightOffset);
if (element != null) {
elements.add(element);
}
}*/
}
}
} catch (InterruptedException e) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.redhat.devtools.intellij.qute.lang;

import com.intellij.lang.ASTFactory;
import com.intellij.psi.impl.source.tree.LeafElement;
import com.intellij.psi.templateLanguages.OuterLanguageElementImpl;
import com.intellij.psi.tree.IElementType;
import com.redhat.devtools.intellij.qute.lang.psi.QuteToken;
import com.redhat.devtools.intellij.qute.lang.psi.tree.QuteElementType;
import com.redhat.devtools.intellij.qute.lang.psi.tree.QuteElementTypes;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class QuteASTFactory extends ASTFactory {

@Override
public @Nullable LeafElement createLeaf(@NotNull IElementType type, @NotNull CharSequence text) {
if (type == QuteElementTypes.QUTE_OUTER_ELEMENT_TYPE) {
return new OuterLanguageElementImpl(type, text);
}
return new QuteToken(type, text);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,13 @@

import javax.swing.Icon;

/**
* Qute language file type.
*/
public class QuteFileType extends LanguageFileType {
private static final Icon QUARKUS_ICON = IconLoader.findIcon("/quarkus_icon_rgb_16px_default.png", QuarkusIconProvider.class);

@NotNull
public static final QuteFileType QUTE = new QuteFileType();

private QuteFileType() {
Expand Down
Loading

0 comments on commit 95a83c2

Please sign in to comment.