mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-15 16:28:56 +00:00
Merge pull request #894 from eclipse/dh-server-initialize
Initial Diagnostics can never arrive to the client
This commit is contained in:
commit
a92e9b1dfb
8 changed files with 82 additions and 22 deletions
|
@ -51,6 +51,17 @@ class ServerTest extends AbstractTestLangLanguageServerTest {
|
|||
assertEquals(15, diagnostics.values.head.head.range.end.character)
|
||||
}
|
||||
|
||||
@Test
|
||||
def void testPublishDiagnosticsAfterInitialized() {
|
||||
'MyType1.testlang'.writeFile( '''
|
||||
type Test {
|
||||
NonExisting foo
|
||||
}
|
||||
''')
|
||||
initialize(null, false)
|
||||
assertTrue("Diagnostics produced before 'initialized' was called", diagnostics.empty)
|
||||
}
|
||||
|
||||
@Test
|
||||
def void testIncrementalBuildWithError() {
|
||||
'MyType1.testlang'.writeFile( '''
|
||||
|
|
|
@ -74,6 +74,21 @@ public class ServerTest extends AbstractTestLangLanguageServerTest {
|
|||
Assert.assertEquals(15, IterableExtensions.<Diagnostic>head(IterableExtensions.<List<Diagnostic>>head(this.getDiagnostics().values())).getRange().getEnd().getCharacter());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPublishDiagnosticsAfterInitialized() {
|
||||
StringConcatenation _builder = new StringConcatenation();
|
||||
_builder.append("type Test {");
|
||||
_builder.newLine();
|
||||
_builder.append(" ");
|
||||
_builder.append("NonExisting foo");
|
||||
_builder.newLine();
|
||||
_builder.append("}");
|
||||
_builder.newLine();
|
||||
this.writeFile("MyType1.testlang", _builder);
|
||||
this.initialize(null, false);
|
||||
Assert.assertTrue("Diagnostics produced before \'initialized\' was called", this.getDiagnostics().isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIncrementalBuildWithError() {
|
||||
StringConcatenation _builder = new StringConcatenation();
|
||||
|
|
|
@ -97,6 +97,7 @@ import org.eclipse.xtext.util.internal.Log
|
|||
import org.eclipse.xtext.validation.Issue
|
||||
|
||||
import static org.eclipse.xtext.diagnostics.Severity.*
|
||||
import org.eclipse.lsp4j.InitializedParams
|
||||
|
||||
/**
|
||||
* @author Sven Efftinge - Initial contribution and API
|
||||
|
@ -114,6 +115,7 @@ import static org.eclipse.xtext.diagnostics.Severity.*
|
|||
// injected below
|
||||
WorkspaceManager workspaceManager
|
||||
InitializeParams params
|
||||
CompletableFuture<InitializedParams> initialized = new CompletableFuture
|
||||
|
||||
boolean hasShutdownBeenCalled = false;
|
||||
|
||||
|
@ -194,6 +196,10 @@ import static org.eclipse.xtext.diagnostics.Severity.*
|
|||
], []).thenApply [result]
|
||||
}
|
||||
|
||||
override void initialized(InitializedParams params) {
|
||||
initialized.complete(params)
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
private def URI deprecatedToBaseDir(InitializeParams params) {
|
||||
if (params.rootPath !== null) {
|
||||
|
@ -298,11 +304,13 @@ import static org.eclipse.xtext.diagnostics.Severity.*
|
|||
LanguageClient client
|
||||
|
||||
private def void publishDiagnostics(URI uri, Iterable<? extends Issue> issues) {
|
||||
val diagnostics = new PublishDiagnosticsParams => [
|
||||
it.uri = toUriString(uri)
|
||||
it.diagnostics = issues.filter[severity !== IGNORE].map[toDiagnostic].toList
|
||||
]
|
||||
client.publishDiagnostics(diagnostics)
|
||||
initialized.thenAccept([
|
||||
val diagnostics = new PublishDiagnosticsParams => [
|
||||
it.uri = toUriString(uri)
|
||||
it.diagnostics = issues.filter[severity !== IGNORE].map[toDiagnostic].toList
|
||||
]
|
||||
client.publishDiagnostics(diagnostics)
|
||||
])
|
||||
}
|
||||
|
||||
private def Diagnostic toDiagnostic(Issue issue) {
|
||||
|
|
|
@ -86,7 +86,7 @@ import org.eclipse.xtext.workspace.IWorkspaceConfig
|
|||
this.issueAcceptor = issueAcceptor
|
||||
refreshWorkspaceConfig(cancelIndicator)
|
||||
}
|
||||
|
||||
|
||||
protected def void refreshWorkspaceConfig(CancelIndicator cancelIndicator) {
|
||||
workspaceConfig = workspaceConfigFactory.getWorkspaceConfig(baseDir)
|
||||
val newProjects = newArrayList
|
||||
|
|
|
@ -61,6 +61,7 @@ import org.eclipse.lsp4j.FileEvent;
|
|||
import org.eclipse.lsp4j.Hover;
|
||||
import org.eclipse.lsp4j.InitializeParams;
|
||||
import org.eclipse.lsp4j.InitializeResult;
|
||||
import org.eclipse.lsp4j.InitializedParams;
|
||||
import org.eclipse.lsp4j.Location;
|
||||
import org.eclipse.lsp4j.Position;
|
||||
import org.eclipse.lsp4j.PublishDiagnosticsParams;
|
||||
|
@ -193,6 +194,8 @@ public class LanguageServerImpl implements LanguageServer, WorkspaceService, Tex
|
|||
|
||||
private InitializeParams params;
|
||||
|
||||
private CompletableFuture<InitializedParams> initialized = new CompletableFuture<InitializedParams>();
|
||||
|
||||
private boolean hasShutdownBeenCalled = false;
|
||||
|
||||
@Inject
|
||||
|
@ -319,6 +322,11 @@ public class LanguageServerImpl implements LanguageServer, WorkspaceService, Tex
|
|||
return this.requestManager.<Object, Object>runWrite(_function_1, _function_2).<InitializeResult>thenApply(_function_3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialized(final InitializedParams params) {
|
||||
this.initialized.complete(params);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
private URI deprecatedToBaseDir(final InitializeParams params) {
|
||||
String _rootPath = params.getRootPath();
|
||||
|
@ -457,20 +465,23 @@ public class LanguageServerImpl implements LanguageServer, WorkspaceService, Tex
|
|||
private LanguageClient client;
|
||||
|
||||
private void publishDiagnostics(final URI uri, final Iterable<? extends Issue> issues) {
|
||||
PublishDiagnosticsParams _publishDiagnosticsParams = new PublishDiagnosticsParams();
|
||||
final Procedure1<PublishDiagnosticsParams> _function = (PublishDiagnosticsParams it) -> {
|
||||
it.setUri(this._uriExtensions.toUriString(uri));
|
||||
final Function1<Issue, Boolean> _function_1 = (Issue it_1) -> {
|
||||
Severity _severity = it_1.getSeverity();
|
||||
return Boolean.valueOf((_severity != Severity.IGNORE));
|
||||
final Consumer<InitializedParams> _function = (InitializedParams it) -> {
|
||||
PublishDiagnosticsParams _publishDiagnosticsParams = new PublishDiagnosticsParams();
|
||||
final Procedure1<PublishDiagnosticsParams> _function_1 = (PublishDiagnosticsParams it_1) -> {
|
||||
it_1.setUri(this._uriExtensions.toUriString(uri));
|
||||
final Function1<Issue, Boolean> _function_2 = (Issue it_2) -> {
|
||||
Severity _severity = it_2.getSeverity();
|
||||
return Boolean.valueOf((_severity != Severity.IGNORE));
|
||||
};
|
||||
final Function1<Issue, Diagnostic> _function_3 = (Issue it_2) -> {
|
||||
return this.toDiagnostic(it_2);
|
||||
};
|
||||
it_1.setDiagnostics(IterableExtensions.<Diagnostic>toList(IterableExtensions.map(IterableExtensions.filter(issues, _function_2), _function_3)));
|
||||
};
|
||||
final Function1<Issue, Diagnostic> _function_2 = (Issue it_1) -> {
|
||||
return this.toDiagnostic(it_1);
|
||||
};
|
||||
it.setDiagnostics(IterableExtensions.<Diagnostic>toList(IterableExtensions.map(IterableExtensions.filter(issues, _function_1), _function_2)));
|
||||
final PublishDiagnosticsParams diagnostics = ObjectExtensions.<PublishDiagnosticsParams>operator_doubleArrow(_publishDiagnosticsParams, _function_1);
|
||||
this.client.publishDiagnostics(diagnostics);
|
||||
};
|
||||
final PublishDiagnosticsParams diagnostics = ObjectExtensions.<PublishDiagnosticsParams>operator_doubleArrow(_publishDiagnosticsParams, _function);
|
||||
this.client.publishDiagnostics(diagnostics);
|
||||
this.initialized.thenAccept(_function);
|
||||
}
|
||||
|
||||
private Diagnostic toDiagnostic(final Issue issue) {
|
||||
|
@ -1096,7 +1107,7 @@ public class LanguageServerImpl implements LanguageServer, WorkspaceService, Tex
|
|||
IterableExtensions.<IResourceDescription.Delta, String>map(IterableExtensions.<IResourceDescription.Delta>filter(deltas, _function), _function_1).forEach(_function_2);
|
||||
}
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(LanguageServerImpl.class);
|
||||
private final static Logger LOG = Logger.getLogger(LanguageServerImpl.class);
|
||||
|
||||
@Pure
|
||||
public RequestManager getRequestManager() {
|
||||
|
|
|
@ -300,5 +300,5 @@ public class WorkspaceManager {
|
|||
return this.openDocuments.containsKey(uri);
|
||||
}
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(WorkspaceManager.class);
|
||||
private final static Logger LOG = Logger.getLogger(WorkspaceManager.class);
|
||||
}
|
||||
|
|
|
@ -165,6 +165,10 @@ abstract class AbstractLanguageServerTest implements Endpoint {
|
|||
}
|
||||
|
||||
protected def InitializeResult initialize((InitializeParams)=>void initializer) {
|
||||
initialize(initializer, true)
|
||||
}
|
||||
|
||||
protected def InitializeResult initialize((InitializeParams)=>void initializer, boolean callInitialized) {
|
||||
val params = new InitializeParams => [
|
||||
processId = 1
|
||||
rootUri = root.toURI.normalize.toUriString
|
||||
|
@ -172,7 +176,10 @@ abstract class AbstractLanguageServerTest implements Endpoint {
|
|||
initializer?.apply(params)
|
||||
hierarchicalDocumentSymbolSupport = params.capabilities?.textDocument?.documentSymbol?.
|
||||
hierarchicalDocumentSymbolSupport ?: false;
|
||||
return languageServer.initialize(params).get
|
||||
val result = languageServer.initialize(params).get
|
||||
if(callInitialized)
|
||||
languageServer.initialized(null)
|
||||
return result
|
||||
}
|
||||
|
||||
protected def void open(String fileUri, String model) {
|
||||
|
|
|
@ -295,6 +295,10 @@ public abstract class AbstractLanguageServerTest implements Endpoint {
|
|||
}
|
||||
|
||||
protected InitializeResult initialize(final Procedure1<? super InitializeParams> initializer) {
|
||||
return this.initialize(initializer, true);
|
||||
}
|
||||
|
||||
protected InitializeResult initialize(final Procedure1<? super InitializeParams> initializer, final boolean callInitialized) {
|
||||
try {
|
||||
InitializeParams _initializeParams = new InitializeParams();
|
||||
final Procedure1<InitializeParams> _function = (InitializeParams it) -> {
|
||||
|
@ -325,7 +329,11 @@ public abstract class AbstractLanguageServerTest implements Endpoint {
|
|||
_elvis = Boolean.valueOf(false);
|
||||
}
|
||||
this.hierarchicalDocumentSymbolSupport = (_elvis).booleanValue();
|
||||
return this.languageServer.initialize(params).get();
|
||||
final InitializeResult result = this.languageServer.initialize(params).get();
|
||||
if (callInitialized) {
|
||||
this.languageServer.initialized(null);
|
||||
}
|
||||
return result;
|
||||
} catch (Throwable _e) {
|
||||
throw Exceptions.sneakyThrow(_e);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue