From 2d7a05c0491f3fda14edea5a66f063e0435b54a6 Mon Sep 17 00:00:00 2001 From: Josh Gross Date: Wed, 14 Dec 2022 11:18:38 -0500 Subject: [PATCH 1/6] Use the allowed context from the definition info --- actions-languageservice/src/complete.ts | 3 +-- .../src/utils/allowed-context.ts | 15 --------------- actions-languageservice/src/validate.ts | 5 +---- 3 files changed, 2 insertions(+), 21 deletions(-) delete mode 100644 actions-languageservice/src/utils/allowed-context.ts diff --git a/actions-languageservice/src/complete.ts b/actions-languageservice/src/complete.ts index 16b50dc..1617f70 100644 --- a/actions-languageservice/src/complete.ts +++ b/actions-languageservice/src/complete.ts @@ -14,7 +14,6 @@ import {ContextProviderConfig} from "./context-providers/config"; import {getContext, Mode} from "./context-providers/default"; import {getWorkflowContext, WorkflowContext} from "./context/workflow-context"; import {nullTrace} from "./nulltrace"; -import {getAllowedContext} from "./utils/allowed-context"; import {findToken} from "./utils/find-token"; import {mapRange} from "./utils/range"; import {transform} from "./utils/transform"; @@ -92,7 +91,7 @@ export async function complete( const expressionInput = (getExpressionInput(currentInput, relCharPos) || "").trim(); - const allowedContext = getAllowedContext(token, parent); + const allowedContext = token.definitionInfo?.allowedContext || []; const context = await getContext(allowedContext, contextProviderConfig, workflowContext, Mode.Completion); return completeExpression(expressionInput, context, []); diff --git a/actions-languageservice/src/utils/allowed-context.ts b/actions-languageservice/src/utils/allowed-context.ts deleted file mode 100644 index 36a5d91..0000000 --- a/actions-languageservice/src/utils/allowed-context.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {TemplateToken} from "@github/actions-workflow-parser/templates/tokens/template-token"; - -export function getAllowedContext(token: TemplateToken, parent: TemplateToken | null | undefined): string[] { - // Workaround for https://github.com/github/c2c-actions-experience/issues/6876 - // Context is inherited from the parent - const allowedContext = new Set(); - for (const t of [token, parent]) { - if (t?.definition?.readerContext) { - for (const context of t.definition.readerContext) { - allowedContext.add(context); - } - } - } - return Array.from(allowedContext); -} diff --git a/actions-languageservice/src/validate.ts b/actions-languageservice/src/validate.ts index 8d2a0b4..d5e9884 100644 --- a/actions-languageservice/src/validate.ts +++ b/actions-languageservice/src/validate.ts @@ -24,7 +24,6 @@ import {getWorkflowContext, WorkflowContext} from "./context/workflow-context"; import {AccessError, wrapDictionary} from "./expression-validation/error-dictionary"; import {error} from "./log"; import {nullTrace} from "./nulltrace"; -import {getAllowedContext} from "./utils/allowed-context"; import {findToken} from "./utils/find-token"; import {mapRange} from "./utils/range"; import {validateAction} from "./validate-action"; @@ -94,14 +93,12 @@ async function additionalValidations( const validationToken = key || parent || token; const validationDefinition = validationToken.definition; - const allowedContext = getAllowedContext(validationToken, parent); - // If this is an expression, validate it if (isBasicExpression(token)) { await validateExpression( diagnostics, token, - allowedContext, + validationToken.definitionInfo?.allowedContext || [], config?.contextProviderConfig, getProviderContext(documentUri, template, root, token) ); From 6a19aa0a5eed6dc7e918045da1bfe98bd4182ec5 Mon Sep 17 00:00:00 2001 From: Josh Gross Date: Wed, 14 Dec 2022 14:55:19 -0500 Subject: [PATCH 2/6] Bump parser version --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index ded6b64..1337178 100644 --- a/package-lock.json +++ b/package-lock.json @@ -700,9 +700,9 @@ "link": true }, "node_modules/@github/actions-workflow-parser": { - "version": "0.0.34", - "resolved": "https://npm.pkg.github.com/download/@github/actions-workflow-parser/0.0.34/e369bdaca17cde594ad7420cd0df0efcd2804dc0", - "integrity": "sha512-ttjYUoO2bvi5v/SR267QpDhWJ+I4tXQlSMnscjqUp76IDLxS73I7nCD3KP7g4VxzHmT5j8AxSdjEE25UWpl43g==", + "version": "0.0.35", + "resolved": "https://npm.pkg.github.com/download/@github/actions-workflow-parser/0.0.35/0e88d541486f7c8772c5640fc13fac630cfaeaa8", + "integrity": "sha512-OuNEuqUH4AOfWd2xb8VRl7KwJrtiZu1ic0b27lmadwvK8qgRhPHxvS+QICEc+JtFbbVWpAA2ymh8I1U35639mA==", "license": "MIT", "dependencies": { "@github/actions-expressions": "*", @@ -13537,9 +13537,9 @@ } }, "@github/actions-workflow-parser": { - "version": "0.0.34", - "resolved": "https://npm.pkg.github.com/download/@github/actions-workflow-parser/0.0.34/e369bdaca17cde594ad7420cd0df0efcd2804dc0", - "integrity": "sha512-ttjYUoO2bvi5v/SR267QpDhWJ+I4tXQlSMnscjqUp76IDLxS73I7nCD3KP7g4VxzHmT5j8AxSdjEE25UWpl43g==", + "version": "0.0.35", + "resolved": "https://npm.pkg.github.com/download/@github/actions-workflow-parser/0.0.35/0e88d541486f7c8772c5640fc13fac630cfaeaa8", + "integrity": "sha512-OuNEuqUH4AOfWd2xb8VRl7KwJrtiZu1ic0b27lmadwvK8qgRhPHxvS+QICEc+JtFbbVWpAA2ymh8I1U35639mA==", "requires": { "@github/actions-expressions": "*", "yaml": "^2.0.0-8" From 3cbafc3177f79716fc3864e3ea011c02d9a64d71 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 15 Dec 2022 00:16:40 +0000 Subject: [PATCH 3/6] Update @github/actions-workflow-parser --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3553df5..818e19c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -700,9 +700,9 @@ "link": true }, "node_modules/@github/actions-workflow-parser": { - "version": "0.0.34", - "resolved": "https://npm.pkg.github.com/download/@github/actions-workflow-parser/0.0.34/e369bdaca17cde594ad7420cd0df0efcd2804dc0", - "integrity": "sha512-ttjYUoO2bvi5v/SR267QpDhWJ+I4tXQlSMnscjqUp76IDLxS73I7nCD3KP7g4VxzHmT5j8AxSdjEE25UWpl43g==", + "version": "0.0.35", + "resolved": "https://npm.pkg.github.com/download/@github/actions-workflow-parser/0.0.35/0e88d541486f7c8772c5640fc13fac630cfaeaa8", + "integrity": "sha512-OuNEuqUH4AOfWd2xb8VRl7KwJrtiZu1ic0b27lmadwvK8qgRhPHxvS+QICEc+JtFbbVWpAA2ymh8I1U35639mA==", "license": "MIT", "dependencies": { "@github/actions-expressions": "*", @@ -13537,9 +13537,9 @@ } }, "@github/actions-workflow-parser": { - "version": "0.0.34", - "resolved": "https://npm.pkg.github.com/download/@github/actions-workflow-parser/0.0.34/e369bdaca17cde594ad7420cd0df0efcd2804dc0", - "integrity": "sha512-ttjYUoO2bvi5v/SR267QpDhWJ+I4tXQlSMnscjqUp76IDLxS73I7nCD3KP7g4VxzHmT5j8AxSdjEE25UWpl43g==", + "version": "0.0.35", + "resolved": "https://npm.pkg.github.com/download/@github/actions-workflow-parser/0.0.35/0e88d541486f7c8772c5640fc13fac630cfaeaa8", + "integrity": "sha512-OuNEuqUH4AOfWd2xb8VRl7KwJrtiZu1ic0b27lmadwvK8qgRhPHxvS+QICEc+JtFbbVWpAA2ymh8I1U35639mA==", "requires": { "@github/actions-expressions": "*", "yaml": "^2.0.0-8" From 45764915bc64d7617bb5fbb3e98ebe2b89ba0b45 Mon Sep 17 00:00:00 2001 From: Christopher Schleiden Date: Thu, 15 Dec 2022 15:18:59 +0100 Subject: [PATCH 4/6] Account for cursor and newline during expression auto-completeion --- .../src/complete.expressions.test.ts | 40 +++++++++++++++++++ actions-languageservice/src/complete.ts | 15 ++----- 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/actions-languageservice/src/complete.expressions.test.ts b/actions-languageservice/src/complete.expressions.test.ts index 6af1866..fb2df57 100644 --- a/actions-languageservice/src/complete.expressions.test.ts +++ b/actions-languageservice/src/complete.expressions.test.ts @@ -30,6 +30,10 @@ describe("expressions", () => { expect(test("${{ gh |")).toBe(" gh "); expect(test("${{ gh |}}")).toBe(" gh "); + expect(test("${{ vars| == 'test' }}")).toBe(" vars"); + expect(test("${{ fromJso|('test').bar == 'test' }}")).toBe(" fromJso"); + expect(test("${{ github.| == 'test' }}")).toBe(" github."); + expect(test("test ${{ github.| == 'test' }}")).toBe(" github."); expect(test("${{ vars }} ${{ gh |}}")).toBe(" gh "); }); @@ -70,6 +74,42 @@ describe("expressions", () => { ]); }); + it("single region with existing condition", async () => { + const input = "run-name: ${{ g| == 'test' }}"; + const result = await complete(...getPositionFromCursor(input), undefined, contextProviderConfig); + + expect(result.map(x => x.label)).toEqual([ + "github", + "inputs", + "vars", + "contains", + "endsWith", + "format", + "fromJson", + "join", + "startsWith", + "toJson" + ]); + }); + + it("multiple regions with partial function", async () => { + const input = "run-name: Run a ${{ inputs.test }} one-line script ${{ from|('test') == inputs.name }}"; + const result = await complete(...getPositionFromCursor(input), undefined, contextProviderConfig); + + expect(result.map(x => x.label)).toEqual([ + "github", + "inputs", + "vars", + "contains", + "endsWith", + "format", + "fromJson", + "join", + "startsWith", + "toJson" + ]); + }); + it("multiple regions", async () => { const input = "run-name: test-${{ github }}-${{ | }}"; const result = await complete(...getPositionFromCursor(input), undefined, contextProviderConfig); diff --git a/actions-languageservice/src/complete.ts b/actions-languageservice/src/complete.ts index cc714ab..3074a45 100644 --- a/actions-languageservice/src/complete.ts +++ b/actions-languageservice/src/complete.ts @@ -3,7 +3,7 @@ import {convertWorkflowTemplate, isSequence, isString, parseWorkflow} from "@git import {ErrorPolicy} from "@github/actions-workflow-parser/model/convert"; import {DefinitionType} from "@github/actions-workflow-parser/templates/schema/definition-type"; import {StringDefinition} from "@github/actions-workflow-parser/templates/schema/string-definition"; -import {CLOSE_EXPRESSION, OPEN_EXPRESSION} from "@github/actions-workflow-parser/templates/template-constants"; +import {OPEN_EXPRESSION} from "@github/actions-workflow-parser/templates/template-constants"; import {TemplateToken} from "@github/actions-workflow-parser/templates/tokens/index"; import {MappingToken} from "@github/actions-workflow-parser/templates/tokens/mapping-token"; import {TokenType} from "@github/actions-workflow-parser/templates/tokens/types"; @@ -29,14 +29,7 @@ export function getExpressionInput(input: string, pos: number): string { return input; } - // Find end marker after the cursor position - let endPos = input.indexOf(CLOSE_EXPRESSION, pos); - if (endPos === -1) { - // Assume an unfinished expression like "${{ someinput.|" - endPos = input.length; - } - - return input.substring(startPos + OPEN_EXPRESSION.length, endPos); + return input.substring(startPos + OPEN_EXPRESSION.length, pos); } export async function complete( @@ -85,9 +78,9 @@ export async function complete( if (token.range!.start[0] !== token.range!.end[0]) { const lines = currentInput.split("\n"); const linesBeforeCusor = lines.slice(0, lineDiff); - relCharPos = linesBeforeCusor.join("\n").length + newPos.character; + relCharPos = linesBeforeCusor.join("\n").length + 1 + newPos.character; } else { - relCharPos = newPos.character - token.range!.start[1]; + relCharPos = newPos.character - token.range!.start[1] + 1; } const expressionInput = (getExpressionInput(currentInput, relCharPos) || "").trim(); From 1227a124161905f2332624b4838259cdcfd0756c Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 15 Dec 2022 15:07:54 +0000 Subject: [PATCH 5/6] v0.1.56 --- actions-languageserver/package.json | 4 ++-- actions-languageservice/package.json | 2 +- browser-playground/package.json | 4 ++-- lerna.json | 2 +- package-lock.json | 14 +++++++------- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/actions-languageserver/package.json b/actions-languageserver/package.json index b38e4c5..e1d65a7 100644 --- a/actions-languageserver/package.json +++ b/actions-languageserver/package.json @@ -1,6 +1,6 @@ { "name": "@github/actions-languageserver", - "version": "0.1.55", + "version": "0.1.56", "description": "Language server for GitHub Actions", "license": "MIT", "type": "module", @@ -38,7 +38,7 @@ "prettier-fix": "prettier --write ." }, "dependencies": { - "@github/actions-languageservice": "^0.1.55", + "@github/actions-languageservice": "^0.1.56", "@github/actions-workflow-parser": "*", "@octokit/rest": "^19.0.5", "vscode-languageserver": "^8.0.2", diff --git a/actions-languageservice/package.json b/actions-languageservice/package.json index e441757..5ab20fe 100644 --- a/actions-languageservice/package.json +++ b/actions-languageservice/package.json @@ -1,6 +1,6 @@ { "name": "@github/actions-languageservice", - "version": "0.1.55", + "version": "0.1.56", "description": "Language service for GitHub Actions", "license": "MIT", "type": "module", diff --git a/browser-playground/package.json b/browser-playground/package.json index db7adea..d4857e6 100644 --- a/browser-playground/package.json +++ b/browser-playground/package.json @@ -1,12 +1,12 @@ { "name": "browser-playground", - "version": "0.1.55", + "version": "0.1.56", "description": "", "private": true, "main": "index.js", "type": "module", "dependencies": { - "@github/actions-languageserver": "^0.1.55", + "@github/actions-languageserver": "^0.1.56", "monaco-editor-webpack-plugin": "^7.0.1", "monaco-editor-workers": "^0.34.2", "monaco-languageclient": "^4.0.3", diff --git a/lerna.json b/lerna.json index 62b0ac4..dbdf586 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useWorkspaces": true, - "version": "0.1.55" + "version": "0.1.56" } diff --git a/package-lock.json b/package-lock.json index 818e19c..ec6e2dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,10 +16,10 @@ }, "actions-languageserver": { "name": "@github/actions-languageserver", - "version": "0.1.55", + "version": "0.1.56", "license": "MIT", "dependencies": { - "@github/actions-languageservice": "^0.1.55", + "@github/actions-languageservice": "^0.1.56", "@github/actions-workflow-parser": "*", "@octokit/rest": "^19.0.5", "vscode-languageserver": "^8.0.2", @@ -40,7 +40,7 @@ }, "actions-languageservice": { "name": "@github/actions-languageservice", - "version": "0.1.55", + "version": "0.1.56", "license": "MIT", "dependencies": { "@github/actions-workflow-parser": "*", @@ -61,10 +61,10 @@ } }, "browser-playground": { - "version": "0.1.55", + "version": "0.1.56", "license": "MIT", "dependencies": { - "@github/actions-languageserver": "^0.1.55", + "@github/actions-languageserver": "^0.1.56", "monaco-editor-webpack-plugin": "^7.0.1", "monaco-editor-workers": "^0.34.2", "monaco-languageclient": "^4.0.3", @@ -13507,7 +13507,7 @@ "@github/actions-languageserver": { "version": "file:actions-languageserver", "requires": { - "@github/actions-languageservice": "^0.1.55", + "@github/actions-languageservice": "^0.1.56", "@github/actions-workflow-parser": "*", "@octokit/rest": "^19.0.5", "@types/jest": "^29.0.3", @@ -16292,7 +16292,7 @@ "browser-playground": { "version": "file:browser-playground", "requires": { - "@github/actions-languageserver": "^0.1.55", + "@github/actions-languageserver": "^0.1.56", "css-loader": "^6.7.2", "monaco-editor-webpack-plugin": "^7.0.1", "monaco-editor-workers": "^0.34.2", From ce03d6347ea08b06e53878ec6c3a8376d1326b15 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 15 Dec 2022 15:32:09 +0000 Subject: [PATCH 6/6] v0.1.57 --- actions-languageserver/package.json | 4 ++-- actions-languageservice/package.json | 2 +- browser-playground/package.json | 4 ++-- lerna.json | 2 +- package-lock.json | 14 +++++++------- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/actions-languageserver/package.json b/actions-languageserver/package.json index e1d65a7..d6e9bed 100644 --- a/actions-languageserver/package.json +++ b/actions-languageserver/package.json @@ -1,6 +1,6 @@ { "name": "@github/actions-languageserver", - "version": "0.1.56", + "version": "0.1.57", "description": "Language server for GitHub Actions", "license": "MIT", "type": "module", @@ -38,7 +38,7 @@ "prettier-fix": "prettier --write ." }, "dependencies": { - "@github/actions-languageservice": "^0.1.56", + "@github/actions-languageservice": "^0.1.57", "@github/actions-workflow-parser": "*", "@octokit/rest": "^19.0.5", "vscode-languageserver": "^8.0.2", diff --git a/actions-languageservice/package.json b/actions-languageservice/package.json index 5ab20fe..bba26e8 100644 --- a/actions-languageservice/package.json +++ b/actions-languageservice/package.json @@ -1,6 +1,6 @@ { "name": "@github/actions-languageservice", - "version": "0.1.56", + "version": "0.1.57", "description": "Language service for GitHub Actions", "license": "MIT", "type": "module", diff --git a/browser-playground/package.json b/browser-playground/package.json index d4857e6..57e65b9 100644 --- a/browser-playground/package.json +++ b/browser-playground/package.json @@ -1,12 +1,12 @@ { "name": "browser-playground", - "version": "0.1.56", + "version": "0.1.57", "description": "", "private": true, "main": "index.js", "type": "module", "dependencies": { - "@github/actions-languageserver": "^0.1.56", + "@github/actions-languageserver": "^0.1.57", "monaco-editor-webpack-plugin": "^7.0.1", "monaco-editor-workers": "^0.34.2", "monaco-languageclient": "^4.0.3", diff --git a/lerna.json b/lerna.json index dbdf586..0a1897d 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useWorkspaces": true, - "version": "0.1.56" + "version": "0.1.57" } diff --git a/package-lock.json b/package-lock.json index ec6e2dd..f48743b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,10 +16,10 @@ }, "actions-languageserver": { "name": "@github/actions-languageserver", - "version": "0.1.56", + "version": "0.1.57", "license": "MIT", "dependencies": { - "@github/actions-languageservice": "^0.1.56", + "@github/actions-languageservice": "^0.1.57", "@github/actions-workflow-parser": "*", "@octokit/rest": "^19.0.5", "vscode-languageserver": "^8.0.2", @@ -40,7 +40,7 @@ }, "actions-languageservice": { "name": "@github/actions-languageservice", - "version": "0.1.56", + "version": "0.1.57", "license": "MIT", "dependencies": { "@github/actions-workflow-parser": "*", @@ -61,10 +61,10 @@ } }, "browser-playground": { - "version": "0.1.56", + "version": "0.1.57", "license": "MIT", "dependencies": { - "@github/actions-languageserver": "^0.1.56", + "@github/actions-languageserver": "^0.1.57", "monaco-editor-webpack-plugin": "^7.0.1", "monaco-editor-workers": "^0.34.2", "monaco-languageclient": "^4.0.3", @@ -13507,7 +13507,7 @@ "@github/actions-languageserver": { "version": "file:actions-languageserver", "requires": { - "@github/actions-languageservice": "^0.1.56", + "@github/actions-languageservice": "^0.1.57", "@github/actions-workflow-parser": "*", "@octokit/rest": "^19.0.5", "@types/jest": "^29.0.3", @@ -16292,7 +16292,7 @@ "browser-playground": { "version": "file:browser-playground", "requires": { - "@github/actions-languageserver": "^0.1.56", + "@github/actions-languageserver": "^0.1.57", "css-loader": "^6.7.2", "monaco-editor-webpack-plugin": "^7.0.1", "monaco-editor-workers": "^0.34.2",