diff --git a/actions-languageservice/jest.config.js b/actions-languageservice/jest.config.js index 58f936b..f8c93bb 100644 --- a/actions-languageservice/jest.config.js +++ b/actions-languageservice/jest.config.js @@ -12,5 +12,6 @@ export default { }, ], }, - moduleFileExtensions: ["ts", "js"] + moduleFileExtensions: ["ts", "js"], + reporters: ["default", "github-actions"] }; diff --git a/actions-languageservice/src/complete.test.ts b/actions-languageservice/src/complete.test.ts index 08d73e7..bf10a08 100644 --- a/actions-languageservice/src/complete.test.ts +++ b/actions-languageservice/src/complete.test.ts @@ -25,7 +25,7 @@ describe("completion", () => { const input = `on: push jobs: build: - runs-on: [self-hosted, u|]`; + runs-on: [self-hosted, u|]`; const result = await complete(...getPositionFromCursor(input)); expect(result).not.toBeUndefined(); @@ -57,6 +57,39 @@ jobs: expect(result.length).toEqual(20); }); + it("string definition completion in sequence", async () => { + const input = `on: + release: + types: + - |`; + const result = await complete(...getPositionFromCursor(input)); + expect(result.map(x => x.label)).toEqual([ + "created", + "deleted", + "edited", + "prereleased", + "published", + "released", + "unpublished" + ]); + }); + + it("string definition completion", async () => { + const input = `on: + release: + types: |`; + const result = await complete(...getPositionFromCursor(input)); + expect(result.map(x => x.label)).toEqual([ + "created", + "deleted", + "edited", + "prereleased", + "published", + "released", + "unpublished" + ]); + }); + it("map keys filter out existing values", async () => { const input = `on: push jobs: diff --git a/actions-languageservice/src/value-providers/default.ts b/actions-languageservice/src/value-providers/default.ts index 342b479..f0398b2 100644 --- a/actions-languageservice/src/value-providers/default.ts +++ b/actions-languageservice/src/value-providers/default.ts @@ -1,7 +1,8 @@ -import {Definition} from "@github/actions-workflow-parser/templates/schema/definition"; import {BooleanDefinition} from "@github/actions-workflow-parser/templates/schema/boolean-definition"; +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 {StringDefinition} from "@github/actions-workflow-parser/templates/schema/string-definition"; import {getWorkflowSchema} from "@github/actions-workflow-parser/workflows/workflow-schema"; import {Value, ValueProvider} from "./config"; @@ -37,13 +38,22 @@ export function defaultValueProviders(): {[key: string]: ValueProvider} { function definitionValueProvider(key: string, definitions: {[key: string]: Definition}): ValueProvider | undefined { const def = definitions[key]; + if (def instanceof MappingDefinition) { return mappingValueProvider(def); - } else if (def instanceof OneOfDefinition) { + } + + if (def instanceof OneOfDefinition) { return oneOfValueProvider(def, definitions); - } else if (def instanceof BooleanDefinition) { + } + + if (def instanceof BooleanDefinition) { return () => stringsToValues(["true", "false"]); } + + if (def instanceof StringDefinition && def.constant) { + return () => stringsToValues([def.constant]); + } } function mappingValueProvider(mappingDefinition: MappingDefinition): ValueProvider { diff --git a/package-lock.json b/package-lock.json index 29b5216..60c8303 100644 --- a/package-lock.json +++ b/package-lock.json @@ -665,9 +665,9 @@ "link": true }, "node_modules/@github/actions-workflow-parser": { - "version": "0.0.12", - "resolved": "https://npm.pkg.github.com/download/@github/actions-workflow-parser/0.0.12/b7b753fe96c1be36cc6f7952be76301ee3a10f12", - "integrity": "sha512-tPtIiRpCilAGUygpCCBv7yEamw9/Te0SF1lBN5BljxLE0atb34bLMGR3yyKjE+S3R3xUf3jmNNcTiGRLIqnAfw==", + "version": "0.0.13", + "resolved": "https://npm.pkg.github.com/download/@github/actions-workflow-parser/0.0.13/ff0fdf35ecf25145c56cb7d6d6b93b5a6b0774de", + "integrity": "sha512-kQGTQZUrBqK0qK2AlSrljyhzjPh/LPcX+cg6Tc3ZmQmoLlqgIm9bN30iC5JDKzsY7j3otedQQ2YfniFmCRBWRA==", "license": "MIT", "dependencies": { "@github/actions-expressions": "*", @@ -10927,9 +10927,9 @@ } }, "@github/actions-workflow-parser": { - "version": "0.0.12", - "resolved": "https://npm.pkg.github.com/download/@github/actions-workflow-parser/0.0.12/b7b753fe96c1be36cc6f7952be76301ee3a10f12", - "integrity": "sha512-tPtIiRpCilAGUygpCCBv7yEamw9/Te0SF1lBN5BljxLE0atb34bLMGR3yyKjE+S3R3xUf3jmNNcTiGRLIqnAfw==", + "version": "0.0.13", + "resolved": "https://npm.pkg.github.com/download/@github/actions-workflow-parser/0.0.13/ff0fdf35ecf25145c56cb7d6d6b93b5a6b0774de", + "integrity": "sha512-kQGTQZUrBqK0qK2AlSrljyhzjPh/LPcX+cg6Tc3ZmQmoLlqgIm9bN30iC5JDKzsY7j3otedQQ2YfniFmCRBWRA==", "requires": { "@github/actions-expressions": "*", "yaml": "^2.0.0-8"