Merge pull request #894 from eclipse/dh-server-initialize

Initial Diagnostics can never arrive to the client
This commit is contained in:
Dennis Huebner 2018-10-08 16:42:17 +02:00 committed by GitHub
commit a92e9b1dfb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 82 additions and 22 deletions

View file

@ -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( '''

View file

@ -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();

View file

@ -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) {

View file

@ -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

View file

@ -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() {

View file

@ -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);
}

View file

@ -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) {

View file

@ -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);
}