diff --git a/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/SchemaBasedYamlASTReconciler.java b/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/SchemaBasedYamlASTReconciler.java index d951b522a..a55994066 100644 --- a/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/SchemaBasedYamlASTReconciler.java +++ b/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/SchemaBasedYamlASTReconciler.java @@ -69,7 +69,6 @@ public class SchemaBasedYamlASTReconciler implements YamlASTReconciler { this.quickfixes = quickfixes; } - @Override public void reconcile(YamlFileAST ast) { if (typeCollector!=null) typeCollector.beginCollecting(ast); diff --git a/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/Editor.java b/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/Editor.java index 78edaad4b..cb7f057b4 100644 --- a/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/Editor.java +++ b/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/Editor.java @@ -18,6 +18,7 @@ import static org.springframework.ide.vscode.languageserver.testharness.TestAsse import static org.springframework.ide.vscode.languageserver.testharness.TestAsserts.assertDoesNotContain; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; @@ -38,12 +39,14 @@ import org.eclipse.lsp4j.MarkedString; import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.PublishDiagnosticsParams; import org.eclipse.lsp4j.Range; +import org.eclipse.lsp4j.SymbolInformation; import org.eclipse.lsp4j.TextDocumentIdentifier; import org.eclipse.lsp4j.TextDocumentPositionParams; import org.eclipse.lsp4j.TextEdit; import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.junit.Assert; import org.springframework.ide.vscode.commons.util.CollectionUtil; +import org.springframework.ide.vscode.commons.util.StringUtil; import com.google.common.collect.ImmutableList; @@ -647,4 +650,31 @@ public class Editor { assertEquals(expectedText, getRawText()); } + public void assertDocumentSymbols(String... symbolsAndContainers) throws Exception { + Arrays.sort(symbolsAndContainers); + StringBuilder expected = new StringBuilder(); + for (String string : symbolsAndContainers) { + expected.append(string+"\n"); + } + + List actualSymbols = getDocumentSymbols(); + List actuals = new ArrayList<>(); + for (SymbolInformation actualSymbol : actualSymbols) { + assertEquals(document.getUri(), actualSymbol.getLocation().getUri()); + String coveredText = getText(actualSymbol.getLocation().getRange()); + assertEquals(actualSymbol.getName(), coveredText); + actuals.add(coveredText + "|" + actualSymbol.getContainerName()); + } + Collections.sort(actuals); + StringBuilder actual = new StringBuilder(); + for (String string : actuals) { + actual.append(string+"\n"); + } + assertEquals(expected.toString(), actual.toString()); + } + + private List getDocumentSymbols() throws Exception { + return harness.getDocumentSymbols(this.document); + } + } diff --git a/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/LanguageServerHarness.java b/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/LanguageServerHarness.java index 88c9a7d17..c96de28af 100644 --- a/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/LanguageServerHarness.java +++ b/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/LanguageServerHarness.java @@ -41,6 +41,7 @@ import org.eclipse.lsp4j.Diagnostic; import org.eclipse.lsp4j.DiagnosticSeverity; import org.eclipse.lsp4j.DidChangeTextDocumentParams; import org.eclipse.lsp4j.DidOpenTextDocumentParams; +import org.eclipse.lsp4j.DocumentSymbolParams; import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.InitializeParams; import org.eclipse.lsp4j.InitializeResult; @@ -51,7 +52,9 @@ import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.PublishDiagnosticsParams; import org.eclipse.lsp4j.Range; import org.eclipse.lsp4j.ShowMessageRequestParams; +import org.eclipse.lsp4j.SymbolInformation; import org.eclipse.lsp4j.TextDocumentContentChangeEvent; +import org.eclipse.lsp4j.TextDocumentIdentifier; import org.eclipse.lsp4j.TextDocumentItem; import org.eclipse.lsp4j.TextDocumentPositionParams; import org.eclipse.lsp4j.TextDocumentSyncKind; @@ -495,5 +498,9 @@ public class LanguageServerHarness { .collect(Collectors.toList()); } - + public List getDocumentSymbols(TextDocumentInfo document) throws Exception { + server.waitForReconcile(); //TODO: if the server works properly this shouldn't be needed it should do that internally itself somehow. + DocumentSymbolParams params = new DocumentSymbolParams(document.getId()); + return server.getTextDocumentService().documentSymbol(params).get(); + } } diff --git a/headless-services/concourse-language-server/src/test/java/org/springframework/ide/vscode/concourse/ConcourseEditorTest.java b/headless-services/concourse-language-server/src/test/java/org/springframework/ide/vscode/concourse/ConcourseEditorTest.java index 1201c964e..dc1775031 100644 --- a/headless-services/concourse-language-server/src/test/java/org/springframework/ide/vscode/concourse/ConcourseEditorTest.java +++ b/headless-services/concourse-language-server/src/test/java/org/springframework/ide/vscode/concourse/ConcourseEditorTest.java @@ -2964,6 +2964,26 @@ public class ConcourseEditorTest { ); } + @Test public void gotoSymbolInPipeline() throws Exception { + Editor editor = harness.newEditor( + "resource_types:\n" + + "- name: some-resource-type\n" + + "resources:\n" + + "- name: foo-resource\n" + + "- name: bar-resource\n" + + "jobs:\n" + + "- name: do-some-stuff\n" + + "- name: do-more-stuff\n" + ); + + editor.assertDocumentSymbols( + "some-resource-type|ResourceType", + "foo-resource|Resource", + "bar-resource|Resource", + "do-some-stuff|Job", + "do-more-stuff|Job" + ); + } //////////////////////////////////////////////////////////////////////////////