Parse reusable workflows up to a depth of 1

This commit is contained in:
Josh Gross
2023-02-06 15:10:34 -05:00
parent b9a01ed5aa
commit 13aaa381c8
22 changed files with 356 additions and 183 deletions
+1 -1
View File
@@ -71,7 +71,7 @@ export async function complete(
}
const {token, keyToken, parent, path} = findToken(newPos, result.value);
const template = convertWorkflowTemplate(result.context, result.value, ErrorPolicy.TryConversion);
const template = await convertWorkflowTemplate(result.context, result.value, ErrorPolicy.TryConversion);
const workflowContext = getWorkflowContext(textDocument.uri, template, path);
// If we are inside an expression, take a different code-path. The workflow parser does not correctly create
@@ -5,7 +5,7 @@ import {getPositionFromCursor} from "../test-utils/cursor-position";
import {findToken} from "../utils/find-token";
import {getWorkflowContext, WorkflowContext} from "./workflow-context";
function testGetWorkflowContext(input: string): WorkflowContext {
async function testGetWorkflowContext(input: string): Promise<WorkflowContext> {
const [textDocument, pos] = getPositionFromCursor(input);
const result = parseWorkflow(
{
@@ -18,7 +18,7 @@ function testGetWorkflowContext(input: string): WorkflowContext {
let template: WorkflowTemplate | undefined;
if (result.value) {
template = convertWorkflowTemplate(result.context, result.value);
template = await convertWorkflowTemplate(result.context, result.value);
}
const {path} = findToken(pos, result.value);
@@ -27,8 +27,8 @@ function testGetWorkflowContext(input: string): WorkflowContext {
}
describe("getWorkflowContext", () => {
it("context for workflow", () => {
const context = testGetWorkflowContext(`on: push
it("context for workflow", async () => {
const context = await testGetWorkflowContext(`on: push
name: te|st
jobs:
build:
@@ -41,8 +41,8 @@ jobs:
expect(context.step).toBeUndefined();
});
it("context for workflow job", () => {
const context = testGetWorkflowContext(`on: push
it("context for workflow job", async () => {
const context = await testGetWorkflowContext(`on: push
jobs:
build:
runs-on: ubuntu-lat|est
@@ -54,8 +54,8 @@ jobs:
expect(context.step).toBeUndefined();
});
it("context for workflow run step", () => {
const context = testGetWorkflowContext(`on: push
it("context for workflow run step", async () => {
const context = await testGetWorkflowContext(`on: push
jobs:
build:
runs-on: ubuntu-latest
@@ -71,8 +71,8 @@ jobs:
expect(step.run.toDisplayString()).toBe("echo Hello");
});
it("context for workflow uses step", () => {
const context = testGetWorkflowContext(`on: push
it("context for workflow uses step", async () => {
const context = await testGetWorkflowContext(`on: push
jobs:
build:
runs-on: ubuntu-latest
@@ -19,7 +19,7 @@ export async function documentLinks(document: TextDocument): Promise<DocumentLin
return [];
}
const template = convertWorkflowTemplate(result.context, result.value!, ErrorPolicy.TryConversion);
const template = await convertWorkflowTemplate(result.context, result.value!, ErrorPolicy.TryConversion);
// Add links to referenced actions
const actionLinks: DocumentLink[] = [];
@@ -110,7 +110,7 @@ async function hoverExpression(input: string) {
return undefined;
}
const template = convertWorkflowTemplate(result.context, result.value, ErrorPolicy.TryConversion);
const template = await convertWorkflowTemplate(result.context, result.value, ErrorPolicy.TryConversion);
const workflowContext = getWorkflowContext(td.uri, template, []);
const context = await getContext(allowedContext, contextProviderConfig, workflowContext, Mode.Completion);
+2 -2
View File
@@ -53,7 +53,7 @@ export async function hover(document: TextDocument, position: Position, config?:
const allowedContext = tokenDefinitionInfo.allowedContext || [];
const {namedContexts, functions} = splitAllowedContext(allowedContext);
const template = convertWorkflowTemplate(result.context, result.value, ErrorPolicy.TryConversion);
const template = await convertWorkflowTemplate(result.context, result.value, ErrorPolicy.TryConversion);
const workflowContext = getWorkflowContext(document.uri, template, tokenResult.path);
const context = await getContext(namedContexts, config?.contextProviderConfig, workflowContext, Mode.Completion);
@@ -107,7 +107,7 @@ async function getDescription(
return defaultDescription;
}
const template = convertWorkflowTemplate(result.context, result.value, ErrorPolicy.TryConversion);
const template = await convertWorkflowTemplate(result.context, result.value, ErrorPolicy.TryConversion);
const workflowContext = getWorkflowContext(document.uri, template, path);
const description = await config.descriptionProvider.getDescription(workflowContext, token, path);
return description || defaultDescription;
+1 -1
View File
@@ -59,7 +59,7 @@ export async function validate(
const result: ParseWorkflowResult = parseWorkflow(file, nullTrace);
if (result.value) {
// Errors will be updated in the context. Attempt to do the conversion anyway in order to give the user more information
const template = convertWorkflowTemplate(result.context, result.value, ErrorPolicy.TryConversion);
const template = await convertWorkflowTemplate(result.context, result.value, ErrorPolicy.TryConversion);
// Validate expressions and value providers
await additionalValidations(diagnostics, textDocument.uri, template, result.value, config);