You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by sk...@apache.org on 2020/04/09 13:06:07 UTC
[netbeans] branch master updated: Improving LSP client: ability to
share language servers across different mime-types;
improving span of hyperlinks based on TextMate grammars, if available.
This is an automated email from the ASF dual-hosted git repository.
skygo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new fe18ae4 Improving LSP client: ability to share language servers across different mime-types; improving span of hyperlinks based on TextMate grammars, if available.
new 6d25b27 Merge pull request #2052 from jlahoda/improve-lsp-client-march-2020
fe18ae4 is described below
commit fe18ae4b99bceb566749df3a72e7fd312b4f45c3
Author: Jan Lahoda <jl...@netbeans.org>
AuthorDate: Sun Mar 29 22:23:40 2020 +0200
Improving LSP client: ability to share language servers across different mime-types; improving span of hyperlinks based on TextMate grammars, if available.
---
.../org/netbeans/modules/lsp/client/LSPBindings.java | 9 +++++++--
.../lsp/client/LanguageServerProviderAccessor.java | 2 ++
.../lsp/client/bindings/HyperlinkProviderImpl.java | 17 ++++++++++++++++-
.../modules/lsp/client/spi/LanguageServerProvider.java | 12 ++++++++++++
4 files changed, 37 insertions(+), 3 deletions(-)
diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/LSPBindings.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/LSPBindings.java
index c45b117..f641477 100644
--- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/LSPBindings.java
+++ b/ide/lsp.client/src/org/netbeans/modules/lsp/client/LSPBindings.java
@@ -120,7 +120,7 @@ public class LSPBindings {
if (p != null) {
LSPBindings b = project2MimeType2Server.getOrDefault(p, Collections.emptyMap()).remove(mimeType);
- if (b != null) {
+ if (b != null && b.process != null) {
b.process.destroy();
}
}
@@ -131,6 +131,10 @@ public class LSPBindings {
LanguageServerDescription desc = provider.startServer(Lookups.fixed(prj, mimeTypeInfo, restarter));
if (desc != null) {
+ LSPBindings b = LanguageServerProviderAccessor.getINSTANCE().getBindings(desc);
+ if (b != null) {
+ return b;
+ }
try {
LanguageClientImpl lci = new LanguageClientImpl();
InputStream in = LanguageServerProviderAccessor.getINSTANCE().getInputStream(desc);
@@ -140,8 +144,9 @@ public class LSPBindings {
launcher.startListening();
LanguageServer server = launcher.getRemoteProxy();
InitializeResult result = initServer(p, server, prj.getProjectDirectory()); //XXX: what if a different root is expected????
- LSPBindings b = new LSPBindings(server, result, LanguageServerProviderAccessor.getINSTANCE().getProcess(desc));
+ b = new LSPBindings(server, result, LanguageServerProviderAccessor.getINSTANCE().getProcess(desc));
lci.setBindings(b);
+ LanguageServerProviderAccessor.getINSTANCE().setBindings(desc, b);
return b;
} catch (InterruptedException | ExecutionException ex) {
LOG.log(Level.WARNING, null, ex);
diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/LanguageServerProviderAccessor.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/LanguageServerProviderAccessor.java
index 42d7234..e62d4e6 100644
--- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/LanguageServerProviderAccessor.java
+++ b/ide/lsp.client/src/org/netbeans/modules/lsp/client/LanguageServerProviderAccessor.java
@@ -51,4 +51,6 @@ public abstract class LanguageServerProviderAccessor {
public abstract InputStream getInputStream(LanguageServerDescription desc);
public abstract OutputStream getOutputStream(LanguageServerDescription desc);
public abstract Process getProcess(LanguageServerDescription desc);
+ public abstract LSPBindings getBindings(LanguageServerDescription desc);
+ public abstract void setBindings(LanguageServerDescription desc, LSPBindings bindings);
}
diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/HyperlinkProviderImpl.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/HyperlinkProviderImpl.java
index c652743..34c7dfa 100644
--- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/HyperlinkProviderImpl.java
+++ b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/HyperlinkProviderImpl.java
@@ -35,6 +35,9 @@ import org.eclipse.lsp4j.TextDocumentIdentifier;
import org.eclipse.lsp4j.TextDocumentPositionParams;
import org.eclipse.lsp4j.jsonrpc.messages.Either;
import org.netbeans.api.editor.mimelookup.MimeRegistration;
+import org.netbeans.api.lexer.Language;
+import org.netbeans.api.lexer.TokenHierarchy;
+import org.netbeans.api.lexer.TokenSequence;
import org.netbeans.editor.BaseDocument;
import org.netbeans.editor.Utilities;
import org.netbeans.lib.editor.hyperlink.spi.HyperlinkProviderExt;
@@ -42,6 +45,8 @@ import org.netbeans.lib.editor.hyperlink.spi.HyperlinkType;
import org.netbeans.modules.editor.NbEditorUtilities;
import org.netbeans.modules.lsp.client.LSPBindings;
import org.netbeans.modules.lsp.client.Utils;
+import org.netbeans.modules.textmate.lexer.TextmateTokenId;
+import org.netbeans.spi.lexer.LanguageHierarchy;
import org.openide.cookies.LineCookie;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.URLMapper;
@@ -76,7 +81,17 @@ public class HyperlinkProviderImpl implements HyperlinkProviderExt {
try {
//XXX: not really using the server, are we?
- return Utilities.getIdentifierBlock((BaseDocument) doc, offset);
+ int[] ident = Utilities.getIdentifierBlock((BaseDocument) doc, offset);
+ TokenSequence<?> ts = TokenHierarchy.get(doc).tokenSequence();
+ ts.move(offset);
+ if (ts.moveNext() && ts.token().id() == TextmateTokenId.TEXTMATE) {
+ if (ident != null) {
+ return new int[] {ts.offset(), ts.offset() + ts.token().length()};
+ } else {
+ return null;
+ }
+ }
+ return ident;
} catch (BadLocationException ex) {
return null;
}
diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/spi/LanguageServerProvider.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/spi/LanguageServerProvider.java
index 5282617..6ad31d2 100644
--- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/spi/LanguageServerProvider.java
+++ b/ide/lsp.client/src/org/netbeans/modules/lsp/client/spi/LanguageServerProvider.java
@@ -23,6 +23,7 @@ import java.io.OutputStream;
import org.netbeans.api.annotations.common.CheckForNull;
import org.netbeans.api.annotations.common.NonNull;
import org.netbeans.api.annotations.common.NullAllowed;
+import org.netbeans.modules.lsp.client.LSPBindings;
import org.netbeans.modules.lsp.client.LanguageServerProviderAccessor;
import org.openide.util.Lookup;
@@ -62,6 +63,7 @@ public interface LanguageServerProvider {
private final InputStream in;
private final OutputStream out;
private final Process process;
+ private LSPBindings bindings;
private LanguageServerDescription(InputStream in, OutputStream out, Process process) {
this.in = in;
@@ -85,6 +87,16 @@ public interface LanguageServerProvider {
public Process getProcess(LanguageServerDescription desc) {
return desc.process;
}
+
+ @Override
+ public LSPBindings getBindings(LanguageServerDescription desc) {
+ return desc.bindings;
+ }
+
+ @Override
+ public void setBindings(LanguageServerDescription desc, LSPBindings bindings) {
+ desc.bindings = bindings;
+ }
});
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists