diff --git a/actions-languageservice/src/complete.test.ts b/actions-languageservice/src/complete.test.ts index 9d8124b..ddf3a2c 100644 --- a/actions-languageservice/src/complete.test.ts +++ b/actions-languageservice/src/complete.test.ts @@ -263,6 +263,31 @@ jobs: expect(result).toHaveLength(0); }); + it("empty step", async () => { + const input = `on: push +jobs: + build: + runs-on: ubuntu-latest + steps: + - run: echo + - |`; + const result = await complete(...getPositionFromCursor(input)); + expect(result).toHaveLength(11); + expect(result.map(x => x.label)).toEqual([ + "continue-on-error", + "env", + "id", + "if", + "name", + "run", + "shell", + "timeout-minutes", + "uses", + "with", + "working-directory" + ]); + }); + it("loose mapping keys have no completion suggestions", async () => { const input = ` on: diff --git a/actions-languageservice/src/value-providers/definition.ts b/actions-languageservice/src/value-providers/definition.ts index ad3e5d2..65c5149 100644 --- a/actions-languageservice/src/value-providers/definition.ts +++ b/actions-languageservice/src/value-providers/definition.ts @@ -2,6 +2,7 @@ import {BooleanDefinition} from "@github/actions-workflow-parser/templates/schem import {Definition} from "@github/actions-workflow-parser/templates/schema/definition"; import {MappingDefinition} from "@github/actions-workflow-parser/templates/schema/mapping-definition"; import {OneOfDefinition} from "@github/actions-workflow-parser/templates/schema/one-of-definition"; +import {SequenceDefinition} from "@github/actions-workflow-parser/templates/schema/sequence-definition"; import {StringDefinition} from "@github/actions-workflow-parser/templates/schema/string-definition"; import {getWorkflowSchema} from "@github/actions-workflow-parser/workflows/workflow-schema"; import {Value} from "./config"; @@ -26,6 +27,13 @@ export function definitionValues(def: Definition): Value[] { return stringsToValues([def.constant]); } + if (def instanceof SequenceDefinition) { + const itemDef = schema.getDefinition(def.itemType); + if (itemDef) { + return definitionValues(itemDef); + } + } + return []; }