From ba23758999f6ff8312898a97da106dd8d48d1a71 Mon Sep 17 00:00:00 2001 From: Jacob Wallraff Date: Tue, 21 Feb 2023 14:50:28 -0800 Subject: [PATCH] Add output description to hover --- .../reusable-job-inputs.ts | 2 +- .../src/hover.reusable-workflow.test.ts | 24 +++++++++++++++++++ actions-languageservice/src/hover.ts | 11 +++++---- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/actions-languageservice/src/description-providers/reusable-job-inputs.ts b/actions-languageservice/src/description-providers/reusable-job-inputs.ts index 78f823d..d9cd71c 100644 --- a/actions-languageservice/src/description-providers/reusable-job-inputs.ts +++ b/actions-languageservice/src/description-providers/reusable-job-inputs.ts @@ -1,4 +1,4 @@ -import {isMapping, isString, ParseWorkflowResult} from "@github/actions-workflow-parser"; +import {isMapping, isString} from "@github/actions-workflow-parser"; import {DESCRIPTION} from "@github/actions-workflow-parser/templates/template-constants"; import {WorkflowContext} from "../context/workflow-context"; import {TokenResult} from "../utils/find-token"; diff --git a/actions-languageservice/src/hover.reusable-workflow.test.ts b/actions-languageservice/src/hover.reusable-workflow.test.ts index b32d6fc..5d09483 100644 --- a/actions-languageservice/src/hover.reusable-workflow.test.ts +++ b/actions-languageservice/src/hover.reusable-workflow.test.ts @@ -34,4 +34,28 @@ jobs: expect(result).not.toBeUndefined(); expect(result?.contents).toEqual("**Context:** github, inputs, vars, needs, strategy, matrix"); }); + + it("hover on job output with description", async () => { + const input = ` +on: push + +jobs: + build: + uses: ./reusable-workflow-with-outputs.yaml + echo_outputs: + runs-on: ubuntu-latest + needs: build + steps: + - run: echo \${{ needs.build.outputs.bu|ild_id }} +`; + + const result = await hover( + ...getPositionFromCursor(input), + testHoverConfig("", "string-steps-context") + ); + expect(result).not.toBeUndefined(); + expect(result?.contents).toEqual( + "The resulting build ID\n\n**Context:** github, inputs, vars, needs, strategy, matrix, secrets, steps, job, runner, env, hashFiles(1,255)" + ); + }); }); diff --git a/actions-languageservice/src/hover.ts b/actions-languageservice/src/hover.ts index 99f3718..7c80e23 100644 --- a/actions-languageservice/src/hover.ts +++ b/actions-languageservice/src/hover.ts @@ -15,10 +15,7 @@ import {Hover} from "vscode-languageserver-types"; import {ContextProviderConfig} from "./context-providers/config"; import {getContext, Mode} from "./context-providers/default"; import {getWorkflowContext, WorkflowContext} from "./context/workflow-context"; -import { - isReusableWorkflowJobInput, - getReusableWorkflowInputDescription -} from "./description-providers/reusable-job-inputs"; +import {isReusableWorkflowJobInput, getReusableWorkflowInputDescription} from "./description-providers/reusable-job-inputs"; import {ExpressionPos, mapToExpressionPos} from "./expression-hover/expression-pos"; import {HoverVisitor} from "./expression-hover/visitor"; import {validatorFunctions} from "./expression-validation/functions"; @@ -67,7 +64,11 @@ export async function hover(document: TextDocument, position: Position, config?: const exprPos = mapToExpressionPos(token, position); if (exprPos) { - return expressionHover(exprPos, context, namedContexts, functions); + let hover = expressionHover(exprPos, context, namedContexts, functions); + if (hover) { + hover.contents = appendContext(token, hover.contents as string); + } + return hover; } } }