diff --git a/expressions/src/features.test.ts b/expressions/src/features.test.ts index 4ccbd59..f280c14 100644 --- a/expressions/src/features.test.ts +++ b/expressions/src/features.test.ts @@ -54,7 +54,6 @@ describe("FeatureFlags", () => { expect(flags.getEnabledFeatures()).toEqual([ "missingInputsQuickfix", "blockScalarChompingWarning", - "actionScaffoldingSnippets", "allowCaseFunction" ]); }); diff --git a/expressions/src/features.ts b/expressions/src/features.ts index fee0135..e142aac 100644 --- a/expressions/src/features.ts +++ b/expressions/src/features.ts @@ -29,13 +29,6 @@ export interface ExperimentalFeatures { */ blockScalarChompingWarning?: boolean; - /** - * Enable action scaffolding snippets in action.yml files. - * Offers Node.js, Composite, and Docker action scaffolds. - * @default false - */ - actionScaffoldingSnippets?: boolean; - /** * Enable the case() function in expressions. * @default false @@ -55,7 +48,6 @@ export type ExperimentalFeatureKey = Exclude; const allFeatureKeys: ExperimentalFeatureKey[] = [ "missingInputsQuickfix", "blockScalarChompingWarning", - "actionScaffoldingSnippets", "allowCaseFunction" ]; diff --git a/languageservice/src/complete-action.test.ts b/languageservice/src/complete-action.test.ts index 30f9094..87e24ef 100644 --- a/languageservice/src/complete-action.test.ts +++ b/languageservice/src/complete-action.test.ts @@ -1,17 +1,11 @@ -import {FeatureFlags} from "@actions/expressions"; import {TextDocument} from "vscode-languageserver-textdocument"; -import {complete, CompletionConfig} from "./complete"; +import {complete} from "./complete"; import {clearCache} from "./utils/workflow-cache"; beforeEach(() => { clearCache(); }); -// Config to enable action scaffolding snippets -const scaffoldingConfig: CompletionConfig = { - featureFlags: new FeatureFlags({actionScaffoldingSnippets: true}) -}; - describe("complete action files", () => { function createActionDocument( content: string, @@ -403,7 +397,7 @@ runs: describe("action scaffolding snippets", () => { it("offers full scaffolding snippets in empty file", async () => { const [doc, position] = createActionDocument(`|`); - const completions = await complete(doc, position, scaffoldingConfig); + const completions = await complete(doc, position); const labels = completions.map(c => c.label); expect(labels).toContain("Node.js Action"); @@ -419,7 +413,7 @@ runs: it("offers full scaffolding snippets when no name or description exists", async () => { const [doc, position] = createActionDocument(`author: me |`); - const completions = await complete(doc, position, scaffoldingConfig); + const completions = await complete(doc, position); const nodeSnippet = completions.find(c => c.label === "Node.js Action"); expect(nodeSnippet).toBeDefined(); @@ -430,7 +424,7 @@ runs: it("offers runs-only snippets when name exists", async () => { const [doc, position] = createActionDocument(`name: My Action |`); - const completions = await complete(doc, position, scaffoldingConfig); + const completions = await complete(doc, position); const nodeSnippet = completions.find(c => c.label === "Node.js Action"); expect(nodeSnippet).toBeDefined(); @@ -442,7 +436,7 @@ runs: it("offers runs-only snippets when description exists", async () => { const [doc, position] = createActionDocument(`description: Does something |`); - const completions = await complete(doc, position, scaffoldingConfig); + const completions = await complete(doc, position); const compositeSnippet = completions.find(c => c.label === "Composite Action"); expect(compositeSnippet).toBeDefined(); @@ -457,7 +451,7 @@ description: Test runs: using: composite |`); - const completions = await complete(doc, position, scaffoldingConfig); + const completions = await complete(doc, position); const labels = completions.map(c => c.label); expect(labels).not.toContain("Node.js Action"); @@ -470,7 +464,7 @@ runs: description: Test runs: |`); - const completions = await complete(doc, position, scaffoldingConfig); + const completions = await complete(doc, position); const labels = completions.map(c => c.label); expect(labels).toContain("Node.js Action"); @@ -484,7 +478,7 @@ description: Test runs: steps: [] |`); - const completions = await complete(doc, position, scaffoldingConfig); + const completions = await complete(doc, position); const labels = completions.map(c => c.label); expect(labels).not.toContain("Node.js Action"); @@ -499,7 +493,7 @@ runs: using: composite steps: - |`); - const completions = await complete(doc, position, scaffoldingConfig); + const completions = await complete(doc, position); const labels = completions.map(c => c.label); expect(labels).not.toContain("Node.js Action"); @@ -509,7 +503,7 @@ runs: it("Node.js snippet contains expected content", async () => { const [doc, position] = createActionDocument(`|`); - const completions = await complete(doc, position, scaffoldingConfig); + const completions = await complete(doc, position); const nodeSnippet = completions.find(c => c.label === "Node.js Action"); const text = (nodeSnippet?.textEdit as {newText: string})?.newText; @@ -522,7 +516,7 @@ runs: it("Composite snippet contains expected content", async () => { const [doc, position] = createActionDocument(`|`); - const completions = await complete(doc, position, scaffoldingConfig); + const completions = await complete(doc, position); const compositeSnippet = completions.find(c => c.label === "Composite Action"); const text = (compositeSnippet?.textEdit as {newText: string})?.newText; @@ -534,7 +528,7 @@ runs: it("Docker snippet contains expected content", async () => { const [doc, position] = createActionDocument(`|`); - const completions = await complete(doc, position, scaffoldingConfig); + const completions = await complete(doc, position); const dockerSnippet = completions.find(c => c.label === "Docker Action"); const text = (dockerSnippet?.textEdit as {newText: string})?.newText; @@ -544,20 +538,10 @@ runs: expect(text).toContain("entrypoint:"); }); - it("does not offer snippets when feature flag is disabled", async () => { - const [doc, position] = createActionDocument(`|`); - const completions = await complete(doc, position); - const labels = completions.map(c => c.label); - - expect(labels).not.toContain("Node.js Action"); - expect(labels).not.toContain("Composite Action"); - expect(labels).not.toContain("Docker Action"); - }); - it("replaces typed text when selecting scaffolding snippet", async () => { // User typed "compo" and then triggered completion const [doc, position] = createActionDocument(`compo|`); - const completions = await complete(doc, position, scaffoldingConfig); + const completions = await complete(doc, position); const compositeSnippet = completions.find(c => c.label === "Composite Action"); expect(compositeSnippet).toBeDefined(); @@ -570,7 +554,7 @@ runs: it("handles empty file with no typed text", async () => { const [doc, position] = createActionDocument(`|`); - const completions = await complete(doc, position, scaffoldingConfig); + const completions = await complete(doc, position); const compositeSnippet = completions.find(c => c.label === "Composite Action"); const textEdit = compositeSnippet?.textEdit as {range: {start: {character: number}; end: {character: number}}}; diff --git a/languageservice/src/complete-action.ts b/languageservice/src/complete-action.ts index 190d667..cf03f17 100644 --- a/languageservice/src/complete-action.ts +++ b/languageservice/src/complete-action.ts @@ -53,9 +53,6 @@ runs: # const greeting = \\\`Hello \\\${name}\\\`; # console.log(greeting); # fs.appendFileSync(process.env.GITHUB_OUTPUT, \\\`greeting=\\\${greeting}\\\\n\\\`); - # - # For JavaScript actions with @actions/toolkit, see: - # https://docs.github.com/en/actions/sharing-automations/creating-actions/creating-a-javascript-action `; const ACTION_SNIPPET_NODEJS_RUNS = `inputs: diff --git a/languageservice/src/complete.ts b/languageservice/src/complete.ts index ee65055..41ce5ab 100644 --- a/languageservice/src/complete.ts +++ b/languageservice/src/complete.ts @@ -187,7 +187,7 @@ export async function complete( // Get action scaffolding snippets if applicable let actionSnippets: CompletionItem[] = []; - if (isAction && config?.featureFlags?.isEnabled("actionScaffoldingSnippets")) { + if (isAction) { actionSnippets = getActionScaffoldingSnippets(parsedTemplate.value, path, position, replaceRange); }