Как реализовать клиент LSP на Java с помощью LSP4JJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как реализовать клиент LSP на Java с помощью LSP4J

Сообщение Anonymous »

Я хочу создать языковой клиент, который мог бы получать диагностику, завершение кода и документацию при наведении курсора мыши. Я использую LSP4J, но для клиентской части он недостаточно документирован; Я попробовал код, сгенерированный ChatGPT, но он вообще не работает.
Вот код, который я пытался получить для диагностики машинописного кода с помощью tsserver, но он вообще ничего не напечатал

Код: Выделить всё

public class client {

public static void start()  {

// Start the typescript-language-server as a subprocess
ProcessBuilder processBuilder = new ProcessBuilder("typescript-language-server.cmd", "--stdio","--log-level=4" );
processBuilder.redirectErrorStream(true);
Process serverProcess = null;
try {
serverProcess = processBuilder.start();
System.out.println("Server started");
} catch (IOException exception) {
System.err.println("Failed to create process :" + exception);
System.exit(1);
}

// Obtain InputStream and OutputStream from the server process
InputStream serverInput = serverProcess.getInputStream();
OutputStream serverOutput = serverProcess.getOutputStream();

LanguageClientImpl languageClient = new LanguageClientImpl();

//  a launcher for the LSP client
Launcher launcher = Launcher.createLauncher(languageClient, LanguageServer.class,serverInput,serverOutput);
LanguageServer server = launcher.getRemoteProxy();
launcher.startListening();

InitializeParams params = new InitializeParams();
List folders = new ArrayList();
folders.add(new WorkspaceFolder("file:///E:/languaug_server/LSP4jClient/app/src/main","resources"));
params.setWorkspaceFolders(folders);
params.setCapabilities(new ClientCapabilities());

CompletableFuture initialized = server.initialize(params);

try{

initialized.get();
// System.out.println("params initialized wait passed");
// Open the document
String fileUri = Paths.get("E:/languaug_server/LSP4jClient/app/src/main/resources/sample.ts").toAbsolutePath().toUri().toString();

DidOpenTextDocumentParams openParams = new DidOpenTextDocumentParams();
TextDocumentItem textDocumentItem = new TextDocumentItem(fileUri, "typescript", 1, "const num1 = 10;\n" +
"const num2 = 5;\n" +
"\n" +
"console.log(`${num1} + ${num2} = ${calculator.add(num1, num2)}`);\n" +
"console.log(`${num1} - ${num2} = ${calculator.subtract(num1, num2)}`);\n" +
"console.log(`${num1} * ${num2} = ${calculator.multiply(num1, num2)}`);\n" +
"console.log(`${num1} / ${num2} = ${calculator.divide(num1, num2)}`);");
openParams.setTextDocument(textDocumentItem);
server.getTextDocumentService().didOpen(openParams);

// Request diagnostics
CompletableFuture diagnosticsFuture = new CompletableFuture();
languageClient.setDiagnosticsConsumer(diagnostics -> {
System.out.println("Received diagnostics: " + diagnostics);
diagnosticsFuture.complete(diagnostics);
});

// Wait for diagnostics
List diagnostics = diagnosticsFuture.get();

System.out.println("program passed diagnostics");
// Print diagnostics
System.out.println("Diagnostics for " + fileUri + ":");
for (Diagnostic diagnostic : diagnostics) {
System.out.println(diagnostic.getSeverity() + ": " + diagnostic.getMessage() + " at " + diagnostic.getRange());
}

}catch (Exception e){
System.out.println("Linting error :" + e.toString());

}

serverProcess.destroy();
}// end of start

private static class LanguageClientImpl implements LanguageClient, LanguageClientAware {
private Consumer diagnosticsConsumer;

public void setDiagnosticsConsumer(Consumer  consumer) {
this.diagnosticsConsumer = consumer;
}

@Override
public void publishDiagnostics(PublishDiagnosticsParams diagnostics) {
System.out.println("Diagnostics received: " + diagnostics.getDiagnostics().size() + " diagnostics");
if (diagnosticsConsumer != null) {
diagnosticsConsumer.accept(diagnostics.getDiagnostics());
}
}

@Override
public void telemetryEvent(Object object) {
System.out.println("telemetry called:"+object.toString());
}

@Override
public void showMessage(MessageParams messageParams) {
System.out.println("Message received: " + messageParams.getMessage());
}

@Override
public void logMessage(MessageParams messageParams) {
System.out.println("Log received: " + messageParams.getMessage());
}

@Override
public CompletableFuture showMessageRequest(ShowMessageRequestParams requestParams) {
System.out.println("showMessageRequest called:"+requestParams.getMessage());
// throw new UnsupportedOperationException("Unimplemented method 'showMessageRequest'");
return null;
}

@Override
public void connect(LanguageClient client) {
System.out.println("connect called");
}
}

}
Пожалуйста, помогите мне, любые ресурсы или любая помощь будут оценены по достоинству.


Подробнее здесь: https://stackoverflow.com/questions/790 ... sing-lsp4j
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»