use of org.eclipse.lsp4j.services.LanguageClient in project xtext-core by eclipse.
the class AbstractIdeQuickfixTest method quickfixesAreOffered.
private void quickfixesAreOffered(EObject target, String issueCode, String originalText, QuickfixExpectation... expected) {
List<QuickfixExpectation> expectedSorted = IterableExtensions.sortBy(Arrays.asList(expected), it -> it.label);
ICompositeNode elementNode = NodeModelUtils.getNode(target);
LineAndColumn elementStartPosition = NodeModelUtils.getLineAndColumn(elementNode, elementNode.getOffset());
LineAndColumn elementEndPosition = NodeModelUtils.getLineAndColumn(elementNode, elementNode.getEndOffset());
Position startPos = new Position(elementStartPosition.getLine() - 1, elementStartPosition.getColumn() - 1);
Position endPos = new Position(elementEndPosition.getLine() - 1, elementEndPosition.getColumn() - 1);
Diagnostic issue = new Diagnostic();
issue.setCode(issueCode);
issue.setMessage("error");
issue.setSeverity(DiagnosticSeverity.Error);
issue.setSource("source");
issue.setRange(new Range(startPos, endPos));
ICodeActionService2.Options options = new ICodeActionService2.Options();
options.setCancelIndicator(CancelIndicator.NullImpl);
options.setDocument(new Document(Integer.valueOf(0), originalText));
options.setResource((XtextResource) target.eResource());
options.setLanguageServerAccess(new ILanguageServerAccess() {
@Override
public void addBuildListener(ILanguageServerAccess.IBuildListener listener) {
throw new UnsupportedOperationException();
}
@Override
public <T extends Object> CompletableFuture<T> doRead(String uri, Function<ILanguageServerAccess.Context, T> function) {
ILanguageServerAccess.Context ctx = new ILanguageServerAccess.Context(options.getResource(), options.getDocument(), true, CancelIndicator.NullImpl);
return CompletableFuture.completedFuture(function.apply(ctx));
}
@Override
public <T extends Object> CompletableFuture<T> doReadIndex(Function<? super ILanguageServerAccess.IndexContext, ? extends T> function) {
return null;
}
@Override
public InitializeParams getInitializeParams() {
return null;
}
@Override
public InitializeResult getInitializeResult() {
return null;
}
@Override
public LanguageClient getLanguageClient() {
return null;
}
@Override
public ResourceSet newLiveScopeResourceSet(URI uri) {
// re-using the existing ResourceSet because it contains the URI protocol mapping for "inmemory" resources.
ResourceSet resourceSet = options.getResource().getResourceSet();
return resourceSet;
}
});
CodeActionParams codeActionParams = new CodeActionParams();
codeActionParams.setRange(new Range(startPos, endPos));
codeActionParams.setTextDocument(new TextDocumentIdentifier(target.eResource().getURI().toString()));
CodeActionContext codeActionContext = new CodeActionContext();
codeActionContext.setDiagnostics(Collections.singletonList(issue));
codeActionParams.setContext(codeActionContext);
options.setCodeActionParams(codeActionParams);
List<DiagnosticResolution> actualIssueResolutions = IterableExtensions.sortBy(quickFixProvider.getResolutions(options, issue), DiagnosticResolution::getLabel);
assertEquals("The number of quickfixes does not match!", expectedSorted.size(), actualIssueResolutions.size());
for (int i = 0; i < actualIssueResolutions.size(); i++) {
DiagnosticResolution actualIssueResolution = actualIssueResolutions.get(i);
QuickfixExpectation expectedIssueResolution = expectedSorted.get(i);
assertEquals(expectedIssueResolution.label, actualIssueResolution.getLabel());
assertEquals(expectedIssueResolution.description, actualIssueResolution.getLabel());
assertIssueResolutionResult(toUnixLineSeparator(expectedIssueResolution.getExpectedResult()), actualIssueResolution, originalText, options.getDocument());
}
}
use of org.eclipse.lsp4j.services.LanguageClient in project xtext-core by eclipse.
the class SocketServerLauncher method launch.
public void launch(String[] args) {
Injector injector = Guice.createInjector(getServerModule());
try (AsynchronousServerSocketChannel serverSocket = AsynchronousServerSocketChannel.open().bind(getSocketAddress(args))) {
LOG.info("Started server socket at " + getSocketAddress(args));
while (true) {
AsynchronousSocketChannel socketChannel = serverSocket.accept().get();
InputStream in = Channels.newInputStream(socketChannel);
OutputStream out = Channels.newOutputStream(socketChannel);
PrintWriter trace = getTrace(args);
boolean validate = shouldValidate(args);
LanguageServerImpl languageServer = injector.getInstance(LanguageServerImpl.class);
LOG.info("Starting Xtext Language Server for client " + socketChannel.getRemoteAddress());
Launcher<LanguageClient> launcher = Launcher.createLauncher(languageServer, LanguageClient.class, in, out, validate, trace);
languageServer.connect(launcher.getRemoteProxy());
launcher.startListening();
LOG.info("Xtext Language Server has been started.");
}
} catch (Throwable t) {
t.printStackTrace();
}
}
use of org.eclipse.lsp4j.services.LanguageClient in project ballerina by ballerina-lang.
the class BallerinaLangServerService method onOpen.
@OnOpen
public void onOpen(Session session) {
sessions.add(session);
if (launcher != null) {
return;
}
this.launcher = this.launchRPCServer(server, LanguageClient.class);
LanguageClient client = launcher.getRemoteProxy();
server.connect(client);
Future<?> startListening = launcher.startListening();
try {
startListening.get();
} catch (InterruptedException | ExecutionException e) {
LOGGER.error("Error starting language server", e);
}
}
use of org.eclipse.lsp4j.services.LanguageClient in project sts4 by spring-projects.
the class SimpleLanguageServer method onError.
public void onError(String message, Throwable error) {
LanguageClient cl = this.client;
if (cl != null) {
if (error instanceof ShowMessageException)
client.showMessage(((ShowMessageException) error).message);
else {
Log.log(message, error);
MessageParams m = new MessageParams();
m.setMessage(message);
m.setType(MessageType.Error);
client.showMessage(m);
}
}
}
use of org.eclipse.lsp4j.services.LanguageClient in project smarthome by eclipse.
the class ModelServer method handleConnection.
private void handleConnection(final Socket client) {
logger.debug("Client {} connected", client.getRemoteSocketAddress());
try {
LanguageServerImpl languageServer = injector.getInstance(LanguageServerImpl.class);
Launcher<LanguageClient> launcher = LSPLauncher.createServerLauncher(languageServer, client.getInputStream(), client.getOutputStream());
languageServer.connect(launcher.getRemoteProxy());
Future<?> future = launcher.startListening();
future.get();
} catch (IOException e) {
logger.warn("Error communicating with LSP client {}", client.getRemoteSocketAddress());
} catch (InterruptedException e) {
// go on, let the thread finish
} catch (ExecutionException e) {
logger.error("Error running the Language Server", e);
}
logger.debug("Client {} disconnected", client.getRemoteSocketAddress());
}
Aggregations