@actions/languageservice 0.3.36 → 0.3.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/code-actions/code-actions.d.ts +12 -0
  2. package/dist/code-actions/code-actions.d.ts.map +1 -0
  3. package/dist/code-actions/code-actions.js +39 -0
  4. package/dist/code-actions/code-actions.js.map +1 -0
  5. package/dist/code-actions/quickfix/add-missing-inputs.d.ts +3 -0
  6. package/dist/code-actions/quickfix/add-missing-inputs.d.ts.map +1 -0
  7. package/dist/code-actions/quickfix/add-missing-inputs.js +192 -0
  8. package/dist/code-actions/quickfix/add-missing-inputs.js.map +1 -0
  9. package/dist/code-actions/quickfix/quickfix-providers.d.ts +4 -0
  10. package/dist/code-actions/quickfix/quickfix-providers.d.ts.map +1 -0
  11. package/dist/code-actions/quickfix/quickfix-providers.js +9 -0
  12. package/dist/code-actions/quickfix/quickfix-providers.js.map +1 -0
  13. package/dist/code-actions/tests/runner.d.ts +43 -0
  14. package/dist/code-actions/tests/runner.d.ts.map +1 -0
  15. package/dist/code-actions/tests/runner.js +170 -0
  16. package/dist/code-actions/tests/runner.js.map +1 -0
  17. package/dist/code-actions/types.d.ts +21 -0
  18. package/dist/code-actions/types.d.ts.map +1 -0
  19. package/dist/code-actions/types.js +2 -0
  20. package/dist/code-actions/types.js.map +1 -0
  21. package/dist/complete-action.js +35 -35
  22. package/dist/complete-action.js.map +1 -1
  23. package/dist/index.d.ts +1 -0
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/validate-action-reference.d.ts +11 -0
  28. package/dist/validate-action-reference.d.ts.map +1 -1
  29. package/dist/validate-action-reference.js +14 -1
  30. package/dist/validate-action-reference.js.map +1 -1
  31. package/package.json +4 -4
@@ -0,0 +1,12 @@
1
+ import { FeatureFlags } from "@actions/expressions";
2
+ import { CodeAction, Diagnostic } from "vscode-languageserver-types";
3
+ export interface CodeActionParams {
4
+ uri: string;
5
+ documentContent: string;
6
+ diagnostics: Diagnostic[];
7
+ only?: string[];
8
+ featureFlags?: FeatureFlags;
9
+ }
10
+ export declare function getCodeActions(params: CodeActionParams): CodeAction[];
11
+ export type { CodeActionContext, CodeActionProvider } from "./types.js";
12
+ //# sourceMappingURL=code-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-actions.d.ts","sourceRoot":"","sources":["../../src/code-actions/code-actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAC,UAAU,EAAkB,UAAU,EAAC,MAAM,6BAA6B,CAAC;AAInF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,EAAE,CAuCrE;AAED,YAAY,EAAC,iBAAiB,EAAE,kBAAkB,EAAC,MAAM,YAAY,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { CodeActionKind } from "vscode-languageserver-types";
2
+ import { getQuickfixProviders } from "./quickfix/quickfix-providers.js";
3
+ export function getCodeActions(params) {
4
+ const actions = [];
5
+ const context = {
6
+ uri: params.uri,
7
+ documentContent: params.documentContent,
8
+ featureFlags: params.featureFlags
9
+ };
10
+ // Build providers map based on feature flags
11
+ const providersByKind = new Map([
12
+ [CodeActionKind.QuickFix, getQuickfixProviders(params.featureFlags)]
13
+ // [CodeActionKind.Refactor, getRefactorProviders(params.featureFlags)],
14
+ // [CodeActionKind.Source, getSourceProviders(params.featureFlags)],
15
+ // etc
16
+ ]);
17
+ // Filter to requested kinds, or use all if none specified
18
+ const requestedKinds = params.only;
19
+ const kindsToCheck = requestedKinds
20
+ ? [...providersByKind.keys()].filter(kind => requestedKinds.some(requested => kind.startsWith(requested)))
21
+ : [...providersByKind.keys()];
22
+ for (const diagnostic of params.diagnostics) {
23
+ for (const kind of kindsToCheck) {
24
+ const providers = providersByKind.get(kind) ?? [];
25
+ for (const provider of providers) {
26
+ if (provider.diagnosticCodes.includes(diagnostic.code)) {
27
+ const action = provider.createCodeAction(context, diagnostic);
28
+ if (action) {
29
+ action.kind = kind;
30
+ action.diagnostics = [diagnostic];
31
+ actions.push(action);
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
37
+ return actions;
38
+ }
39
+ //# sourceMappingURL=code-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-actions.js","sourceRoot":"","sources":["../../src/code-actions/code-actions.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,cAAc,EAAa,MAAM,6BAA6B,CAAC;AAEnF,OAAO,EAAC,oBAAoB,EAAC,MAAM,kCAAkC,CAAC;AAUtE,MAAM,UAAU,cAAc,CAAC,MAAwB;IACrD,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAsB;QACjC,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC;IAEF,6CAA6C;IAC7C,MAAM,eAAe,GAAsC,IAAI,GAAG,CAAC;QACjE,CAAC,cAAc,CAAC,QAAQ,EAAE,oBAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACpE,wEAAwE;QACxE,oEAAoE;QACpE,MAAM;KACP,CAAC,CAAC;IAEH,0DAA0D;IAC1D,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC;IACnC,MAAM,YAAY,GAAG,cAAc;QACjC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1G,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;IAEhC,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE;QAC3C,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE;YAC/B,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAClD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAChC,IAAI,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;oBACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;oBAC9D,IAAI,MAAM,EAAE;wBACV,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;wBACnB,MAAM,CAAC,WAAW,GAAG,CAAC,UAAU,CAAC,CAAC;wBAClC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;qBACtB;iBACF;aACF;SACF;KACF;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { CodeActionProvider } from "../types.js";
2
+ export declare const addMissingInputsProvider: CodeActionProvider;
3
+ //# sourceMappingURL=add-missing-inputs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-missing-inputs.d.ts","sourceRoot":"","sources":["../../../src/code-actions/quickfix/add-missing-inputs.ts"],"names":[],"mappings":"AASA,OAAO,EAAoB,kBAAkB,EAAC,MAAM,aAAa,CAAC;AAuBlE,eAAO,MAAM,wBAAwB,EAAE,kBA+BtC,CAAC"}
@@ -0,0 +1,192 @@
1
+ import { isMapping } from "@actions/workflow-parser";
2
+ import { error } from "../../log.js";
3
+ import { findToken } from "../../utils/find-token.js";
4
+ import { getOrParseWorkflow } from "../../utils/workflow-cache.js";
5
+ import { DiagnosticCode } from "../../validate-action-reference.js";
6
+ export const addMissingInputsProvider = {
7
+ diagnosticCodes: [DiagnosticCode.MissingRequiredInputs],
8
+ createCodeAction(context, diagnostic) {
9
+ const data = diagnostic.data;
10
+ if (!data) {
11
+ return undefined;
12
+ }
13
+ // Parse the document to get the step token
14
+ const stepInfo = getStepInfo(context, diagnostic.range.start);
15
+ if (!stepInfo) {
16
+ return undefined;
17
+ }
18
+ const edits = createInputEdits(data.missingInputs, stepInfo);
19
+ if (!edits || edits.length === 0) {
20
+ return undefined;
21
+ }
22
+ const inputNames = data.missingInputs.map(i => i.name).join(", ");
23
+ return {
24
+ title: `Add missing input${data.missingInputs.length > 1 ? "s" : ""}: ${inputNames}`,
25
+ edit: {
26
+ changes: {
27
+ [context.uri]: edits
28
+ }
29
+ }
30
+ };
31
+ }
32
+ };
33
+ /**
34
+ * Parse the document and extract step information needed for generating edits.
35
+ * Returns undefined if parsing fails or the step token cannot be found.
36
+ */
37
+ function getStepInfo(context, diagnosticPosition) {
38
+ // Parse the document (uses cache if available from validation)
39
+ const file = { name: context.uri, content: context.documentContent };
40
+ const parseResult = getOrParseWorkflow(file, context.uri);
41
+ if (!parseResult.value) {
42
+ error("Failed to parse workflow for missing inputs quickfix");
43
+ return undefined;
44
+ }
45
+ // Find the token at the diagnostic position
46
+ const { path } = findToken(diagnosticPosition, parseResult.value);
47
+ // Walk up the path to find the step token (regular-step)
48
+ const stepToken = findStepInPath(path);
49
+ if (!stepToken) {
50
+ error("Could not find step token for missing inputs quickfix");
51
+ return undefined;
52
+ }
53
+ return extractStepInfo(stepToken);
54
+ }
55
+ /**
56
+ * Find the step token (regular-step) in the token path
57
+ */
58
+ function findStepInPath(path) {
59
+ // Walk backwards through path to find the step
60
+ for (let i = path.length - 1; i >= 0; i--) {
61
+ if (path[i].definition?.key === "regular-step" && isMapping(path[i])) {
62
+ return path[i];
63
+ }
64
+ }
65
+ return undefined;
66
+ }
67
+ /**
68
+ * Extract position and indentation info from a step token
69
+ */
70
+ function extractStepInfo(stepToken) {
71
+ if (!stepToken.range) {
72
+ return undefined;
73
+ }
74
+ // Get the column of the first key in the step
75
+ let stepKeyColumn = stepToken.range.start.column;
76
+ if (stepToken.count > 0) {
77
+ const firstEntry = stepToken.get(0);
78
+ if (firstEntry?.key.range) {
79
+ stepKeyColumn = firstEntry.key.range.start.column;
80
+ }
81
+ }
82
+ // Find the with: block if present
83
+ let withKey;
84
+ let withToken;
85
+ for (const { key, value } of stepToken) {
86
+ if (key.toString() === "with") {
87
+ withKey = key;
88
+ withToken = value;
89
+ break;
90
+ }
91
+ }
92
+ // Calculate indent size
93
+ let indentSize = 2; // Default
94
+ let withInfo;
95
+ if (withKey?.range && withToken?.range) {
96
+ // Has with: block - extract its info
97
+ const hasChildren = isMapping(withToken) && withToken.count > 0;
98
+ let firstChildColumn;
99
+ if (hasChildren) {
100
+ const firstChild = withToken.get(0);
101
+ if (firstChild?.key.range) {
102
+ firstChildColumn = firstChild.key.range.start.column;
103
+ // Detect indent size from with: children
104
+ indentSize = firstChildColumn - withKey.range.start.column;
105
+ }
106
+ }
107
+ withInfo = {
108
+ keyColumn: withKey.range.start.column,
109
+ keyEndLine: withKey.range.end.line,
110
+ valueEndLine: withToken.range.end.line,
111
+ hasChildren,
112
+ firstChildColumn
113
+ };
114
+ }
115
+ else {
116
+ // No with: block - detect indent size using heuristics
117
+ // Based on the step key column position, estimate indent size
118
+ // 2-space indent files typically have step keys at column 7
119
+ // 4-space indent files typically have step keys at column 15
120
+ const zeroIndexedCol = stepKeyColumn - 1;
121
+ if (zeroIndexedCol >= 10) {
122
+ indentSize = 4;
123
+ }
124
+ }
125
+ return {
126
+ stepKeyColumn,
127
+ stepEndLine: stepToken.range.end.line,
128
+ indentSize,
129
+ withInfo
130
+ };
131
+ }
132
+ /**
133
+ * Generate text edits to add missing inputs
134
+ */
135
+ function createInputEdits(missingInputs, stepInfo) {
136
+ const formatInputLines = (indent) => missingInputs.map(input => {
137
+ const value = input.default ?? '""';
138
+ return `${indent}${input.name}: ${value}`;
139
+ });
140
+ if (stepInfo.withInfo) {
141
+ // `with:` exists - add inputs to existing block
142
+ const withIndent = stepInfo.withInfo.keyColumn - 1; // 0-indexed
143
+ const inputIndentSize = stepInfo.withInfo.firstChildColumn
144
+ ? stepInfo.withInfo.firstChildColumn - stepInfo.withInfo.keyColumn
145
+ : stepInfo.indentSize;
146
+ const inputIndent = " ".repeat(withIndent + inputIndentSize);
147
+ const inputLines = formatInputLines(inputIndent);
148
+ // Calculate insert position
149
+ let insertLine;
150
+ if (stepInfo.withInfo.hasChildren) {
151
+ // Insert after the last child (at end of with: block)
152
+ // valueEndLine is 1-indexed, we want 0-indexed for Position
153
+ insertLine = stepInfo.withInfo.valueEndLine - 1;
154
+ }
155
+ else {
156
+ // Empty with: block - insert on the next line after with:
157
+ // keyEndLine is 1-indexed, convert to 0-indexed and go to next line
158
+ insertLine = stepInfo.withInfo.keyEndLine;
159
+ }
160
+ const insertPosition = {
161
+ line: insertLine,
162
+ character: 0
163
+ };
164
+ return [
165
+ {
166
+ range: { start: insertPosition, end: insertPosition },
167
+ newText: inputLines.map(line => line + "\n").join("")
168
+ }
169
+ ];
170
+ }
171
+ else {
172
+ // No `with:` key - add `with:` at the same level as other step keys
173
+ const withKeyIndent = stepInfo.stepKeyColumn - 1; // 0-indexed (columns are 1-based)
174
+ const withIndent = " ".repeat(withKeyIndent);
175
+ const inputIndent = " ".repeat(withKeyIndent + stepInfo.indentSize);
176
+ const inputLines = formatInputLines(inputIndent);
177
+ const newText = `${withIndent}with:\n` + inputLines.map(line => `${line}\n`).join("");
178
+ // Insert at end of step
179
+ // stepEndLine is 1-indexed, we want 0-indexed and insert before the line after
180
+ const insertPosition = {
181
+ line: stepInfo.stepEndLine - 1,
182
+ character: 0
183
+ };
184
+ return [
185
+ {
186
+ range: { start: insertPosition, end: insertPosition },
187
+ newText
188
+ }
189
+ ];
190
+ }
191
+ }
192
+ //# sourceMappingURL=add-missing-inputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-missing-inputs.js","sourceRoot":"","sources":["../../../src/code-actions/quickfix/add-missing-inputs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { FeatureFlags } from "@actions/expressions";
2
+ import { CodeActionProvider } from "../types.js";
3
+ export declare function getQuickfixProviders(featureFlags?: FeatureFlags): CodeActionProvider[];
4
+ //# sourceMappingURL=quickfix-providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickfix-providers.d.ts","sourceRoot":"","sources":["../../../src/code-actions/quickfix/quickfix-providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAC,kBAAkB,EAAC,MAAM,aAAa,CAAC;AAG/C,wBAAgB,oBAAoB,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,kBAAkB,EAAE,CAQtF"}
@@ -0,0 +1,9 @@
1
+ import { addMissingInputsProvider } from "./add-missing-inputs.js";
2
+ export function getQuickfixProviders(featureFlags) {
3
+ const providers = [];
4
+ if (featureFlags?.isEnabled("missingInputsQuickfix")) {
5
+ providers.push(addMissingInputsProvider);
6
+ }
7
+ return providers;
8
+ }
9
+ //# sourceMappingURL=quickfix-providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickfix-providers.js","sourceRoot":"","sources":["../../../src/code-actions/quickfix/quickfix-providers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,wBAAwB,EAAC,MAAM,yBAAyB,CAAC;AAEjE,MAAM,UAAU,oBAAoB,CAAC,YAA2B;IAC9D,MAAM,SAAS,GAAyB,EAAE,CAAC;IAE3C,IAAI,YAAY,EAAE,SAAS,CAAC,uBAAuB,CAAC,EAAE;QACpD,SAAS,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;KAC1C;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { TextEdit } from "vscode-languageserver-types";
2
+ import { ValidationConfig } from "../../validate.js";
3
+ export interface TestCase {
4
+ name: string;
5
+ inputPath: string;
6
+ goldenPath: string;
7
+ input: string;
8
+ golden: string;
9
+ markers: Marker[];
10
+ }
11
+ export interface Marker {
12
+ line: number;
13
+ message: string;
14
+ fix?: string;
15
+ }
16
+ export interface TestResult {
17
+ name: string;
18
+ passed: boolean;
19
+ error?: string;
20
+ expected?: string;
21
+ actual?: string;
22
+ }
23
+ /**
24
+ * Parse markers from input file content
25
+ */
26
+ export declare function parseMarkers(content: string): Marker[];
27
+ /**
28
+ * Strip markers from content (for processing)
29
+ */
30
+ export declare function stripMarkers(content: string): string;
31
+ /**
32
+ * Load all test cases from a testdata directory
33
+ */
34
+ export declare function loadTestCases(testdataDir: string): TestCase[];
35
+ /**
36
+ * Apply text edits to a document
37
+ */
38
+ export declare function applyEdits(content: string, edits: TextEdit[]): string;
39
+ /**
40
+ * Run a single test case
41
+ */
42
+ export declare function runTestCase(testCase: TestCase, validationConfig: ValidationConfig): Promise<TestResult>;
43
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/code-actions/tests/runner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAC,MAAM,6BAA6B,CAAC;AAGrD,OAAO,EAAW,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAM7D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBtD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,EAAE,CAiC7D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CA4BrE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CA2F7G"}
@@ -0,0 +1,170 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ import { TextDocument } from "vscode-languageserver-textdocument";
4
+ import { FeatureFlags } from "@actions/expressions";
5
+ import { validate } from "../../validate.js";
6
+ import { getCodeActions } from "../code-actions.js";
7
+ // Marker pattern: # want "diagnostic message" fix="code-action-name"
8
+ const MARKER_PATTERN = /#\s*want\s+"([^"]+)"(?:\s+fix="([^"]+)")?/;
9
+ /**
10
+ * Parse markers from input file content
11
+ */
12
+ export function parseMarkers(content) {
13
+ const lines = content.split("\n");
14
+ const markers = [];
15
+ for (let i = 0; i < lines.length; i++) {
16
+ const match = lines[i].match(MARKER_PATTERN);
17
+ if (match) {
18
+ markers.push({
19
+ line: i,
20
+ message: match[1],
21
+ fix: match[2]
22
+ });
23
+ }
24
+ }
25
+ return markers;
26
+ }
27
+ /**
28
+ * Strip markers from content (for processing)
29
+ */
30
+ export function stripMarkers(content) {
31
+ return content
32
+ .split("\n")
33
+ .map(line => line.replace(MARKER_PATTERN, "").trimEnd())
34
+ .join("\n");
35
+ }
36
+ /**
37
+ * Load all test cases from a testdata directory
38
+ */
39
+ export function loadTestCases(testdataDir) {
40
+ const testCases = [];
41
+ function walkDir(dir) {
42
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
43
+ for (const entry of entries) {
44
+ const fullPath = path.join(dir, entry.name);
45
+ if (entry.isDirectory()) {
46
+ walkDir(fullPath);
47
+ }
48
+ else if (entry.isFile() && entry.name.endsWith(".yml") && !entry.name.endsWith(".golden.yml")) {
49
+ const goldenPath = fullPath.replace(".yml", ".golden.yml");
50
+ if (fs.existsSync(goldenPath)) {
51
+ const input = fs.readFileSync(fullPath, "utf-8");
52
+ const golden = fs.readFileSync(goldenPath, "utf-8");
53
+ testCases.push({
54
+ name: path.relative(testdataDir, fullPath),
55
+ inputPath: fullPath,
56
+ goldenPath,
57
+ input,
58
+ golden,
59
+ markers: parseMarkers(input)
60
+ });
61
+ }
62
+ }
63
+ }
64
+ }
65
+ walkDir(testdataDir);
66
+ return testCases;
67
+ }
68
+ /**
69
+ * Apply text edits to a document
70
+ */
71
+ export function applyEdits(content, edits) {
72
+ // Sort edits in reverse order by position to apply from bottom to top
73
+ const sortedEdits = [...edits].sort((a, b) => {
74
+ if (b.range.start.line !== a.range.start.line) {
75
+ return b.range.start.line - a.range.start.line;
76
+ }
77
+ return b.range.start.character - a.range.start.character;
78
+ });
79
+ const lines = content.split("\n");
80
+ for (const edit of sortedEdits) {
81
+ const startLine = edit.range.start.line;
82
+ const startChar = edit.range.start.character;
83
+ const endLine = edit.range.end.line;
84
+ const endChar = edit.range.end.character;
85
+ const before = lines[startLine].slice(0, startChar);
86
+ const after = lines[endLine].slice(endChar);
87
+ const newLines = edit.newText.split("\n");
88
+ newLines[0] = before + newLines[0];
89
+ newLines[newLines.length - 1] = newLines[newLines.length - 1] + after;
90
+ lines.splice(startLine, endLine - startLine + 1, ...newLines);
91
+ }
92
+ return lines.join("\n");
93
+ }
94
+ /**
95
+ * Run a single test case
96
+ */
97
+ export async function runTestCase(testCase, validationConfig) {
98
+ const strippedInput = stripMarkers(testCase.input);
99
+ const document = TextDocument.create("file:///test.yml", "yaml", 1, strippedInput);
100
+ // 1. Validate and get diagnostics
101
+ const diagnostics = await validate(document, validationConfig);
102
+ // 2. Verify all expected diagnostics are present
103
+ const missingDiagnostics = [];
104
+ for (const marker of testCase.markers) {
105
+ const found = diagnostics.find(d => d.range.start.line === marker.line && d.message.includes(marker.message));
106
+ if (!found) {
107
+ missingDiagnostics.push(`line ${marker.line}: "${marker.message}"`);
108
+ }
109
+ }
110
+ if (missingDiagnostics.length > 0) {
111
+ return {
112
+ name: testCase.name,
113
+ passed: false,
114
+ error: `Missing expected diagnostics:\n ${missingDiagnostics.join("\n ")}\n\nActual diagnostics:\n ${diagnostics.map(d => `line ${d.range.start.line}: "${d.message}"`).join("\n ")}`
115
+ };
116
+ }
117
+ // 3. Collect all edits from all matching code actions
118
+ const allEdits = [];
119
+ for (const marker of testCase.markers) {
120
+ if (!marker.fix) {
121
+ continue;
122
+ }
123
+ const diagnostic = diagnostics.find(d => d.range.start.line === marker.line && d.message.includes(marker.message));
124
+ if (!diagnostic) {
125
+ continue; // Already reported above
126
+ }
127
+ const params = {
128
+ uri: document.uri,
129
+ documentContent: strippedInput,
130
+ diagnostics: [diagnostic],
131
+ featureFlags: new FeatureFlags({ all: true })
132
+ };
133
+ const actions = getCodeActions(params);
134
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- marker.fix is checked at the start of the loop
135
+ const matchingAction = actions.find(a => a.title.toLowerCase().includes(marker.fix.toLowerCase()));
136
+ if (!matchingAction) {
137
+ return {
138
+ name: testCase.name,
139
+ passed: false,
140
+ error: `Code action "${marker.fix}" not found for diagnostic on line ${marker.line}.\nAvailable actions: ${actions.map(a => a.title).join(", ") || "(none)"}`
141
+ };
142
+ }
143
+ if (!matchingAction.edit?.changes) {
144
+ return {
145
+ name: testCase.name,
146
+ passed: false,
147
+ error: `Code action "${marker.fix}" has no edits`
148
+ };
149
+ }
150
+ const edits = matchingAction.edit.changes[document.uri] || [];
151
+ allEdits.push(...edits);
152
+ }
153
+ // 4. Apply all edits and compare to golden file
154
+ const actualOutput = applyEdits(strippedInput, allEdits);
155
+ const expectedOutput = testCase.golden;
156
+ if (actualOutput.trim() !== expectedOutput.trim()) {
157
+ return {
158
+ name: testCase.name,
159
+ passed: false,
160
+ error: "Output does not match golden file",
161
+ expected: expectedOutput,
162
+ actual: actualOutput
163
+ };
164
+ }
165
+ return {
166
+ name: testCase.name,
167
+ passed: true
168
+ };
169
+ }
170
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/code-actions/tests/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { FeatureFlags } from "@actions/expressions";
2
+ import { CodeAction, Diagnostic } from "vscode-languageserver-types";
3
+ export interface CodeActionContext {
4
+ uri: string;
5
+ documentContent: string;
6
+ featureFlags?: FeatureFlags;
7
+ }
8
+ /**
9
+ * A provider that can produce a code action for a given diagnostic
10
+ */
11
+ export interface CodeActionProvider {
12
+ /**
13
+ * The diagnostic codes this provider handles
14
+ */
15
+ diagnosticCodes: (string | number | undefined)[];
16
+ /**
17
+ * Create a code action for the diagnostic, if applicable
18
+ */
19
+ createCodeAction(context: CodeActionContext, diagnostic: Diagnostic): CodeAction | undefined;
20
+ }
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/code-actions/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAC,UAAU,EAAE,UAAU,EAAC,MAAM,6BAA6B,CAAC;AAEnE,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,eAAe,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IAEjD;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;CAC9F"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/code-actions/types.ts"],"names":[],"mappings":""}
@@ -76,12 +76,12 @@ runs:
76
76
  # fs.appendFileSync(process.env.GITHUB_OUTPUT, \\\`greeting=\\\${greeting}\\\\n\\\`);
77
77
  `;
78
78
  const ACTION_SNIPPET_NODEJS_USING = `# For more on JavaScript actions (including @actions/toolkit), see:
79
- # https://docs.github.com/en/actions/sharing-automations/creating-actions/creating-a-javascript-action
80
- using: node24
81
- main: index.js
82
- # Sample index.js (vanilla JS, no build required):
83
- #
84
- # console.log('Hello World');
79
+ # https://docs.github.com/en/actions/sharing-automations/creating-actions/creating-a-javascript-action
80
+ using: node24
81
+ main: index.js
82
+ # Sample index.js (vanilla JS, no build required):
83
+ #
84
+ # console.log('Hello World');
85
85
  `;
86
86
  const ACTION_SNIPPET_COMPOSITE_FULL = `name: '\${1:Action Name}'
87
87
  description: '\${2:What this action does}'
@@ -107,9 +107,9 @@ runs:
107
107
  env:
108
108
  INPUT_NAME: \\\${{ inputs.name }}
109
109
  run: |
110
- GREETING="Hello $INPUT_NAME"
111
- echo "$GREETING"
112
- echo "greeting=$GREETING" >> $GITHUB_OUTPUT
110
+ GREETING="Hello \\$INPUT_NAME"
111
+ echo "\\$GREETING"
112
+ echo "greeting=\\$GREETING" >> \\$GITHUB_OUTPUT
113
113
  `;
114
114
  const ACTION_SNIPPET_COMPOSITE_RUNS = `inputs:
115
115
  name:
@@ -132,16 +132,16 @@ runs:
132
132
  env:
133
133
  INPUT_NAME: \\\${{ inputs.name }}
134
134
  run: |
135
- GREETING="Hello $INPUT_NAME"
136
- echo "$GREETING"
137
- echo "greeting=$GREETING" >> $GITHUB_OUTPUT
135
+ GREETING="Hello \\$INPUT_NAME"
136
+ echo "\\$GREETING"
137
+ echo "greeting=\\$GREETING" >> \\$GITHUB_OUTPUT
138
138
  `;
139
139
  const ACTION_SNIPPET_COMPOSITE_USING = `# For more on composite actions, see:
140
- # https://docs.github.com/en/actions/sharing-automations/creating-actions/creating-a-composite-action
141
- using: composite
142
- steps:
143
- - shell: bash
144
- run: echo "Hello World"
140
+ # https://docs.github.com/en/actions/sharing-automations/creating-actions/creating-a-composite-action
141
+ using: composite
142
+ steps:
143
+ - shell: bash
144
+ run: echo "Hello World"
145
145
  `;
146
146
  const ACTION_SNIPPET_DOCKER_FULL = `name: '\${1:Action Name}'
147
147
  description: '\${2:What this action does}'
@@ -168,9 +168,9 @@ runs:
168
168
  args:
169
169
  - -c
170
170
  - |
171
- GREETING="Hello $INPUT_NAME"
172
- echo "$GREETING"
173
- echo "greeting=$GREETING" >> $GITHUB_OUTPUT
171
+ GREETING="Hello \\$INPUT_NAME"
172
+ echo "\\$GREETING"
173
+ echo "greeting=\\$GREETING" >> \\$GITHUB_OUTPUT
174
174
  `;
175
175
  const ACTION_SNIPPET_DOCKER_RUNS = `inputs:
176
176
  name:
@@ -194,19 +194,19 @@ runs:
194
194
  args:
195
195
  - -c
196
196
  - |
197
- GREETING="Hello $INPUT_NAME"
198
- echo "$GREETING"
199
- echo "greeting=$GREETING" >> $GITHUB_OUTPUT
197
+ GREETING="Hello \\$INPUT_NAME"
198
+ echo "\\$GREETING"
199
+ echo "greeting=\\$GREETING" >> \\$GITHUB_OUTPUT
200
200
  `;
201
201
  const ACTION_SNIPPET_DOCKER_USING = `# For more on Docker actions, see:
202
- # https://docs.github.com/en/actions/sharing-automations/creating-actions/creating-a-docker-container-action
203
- using: docker
204
- # 'docker://image:tag' uses pre-built image, 'Dockerfile' builds locally
205
- image: '\${1:docker://alpine:3.20}'
206
- entrypoint: '\${2:sh}'
207
- args:
208
- - -c
209
- - echo "Hello World"
202
+ # https://docs.github.com/en/actions/sharing-automations/creating-actions/creating-a-docker-container-action
203
+ using: docker
204
+ # 'docker://image:tag' uses pre-built image, 'Dockerfile' builds locally
205
+ image: '\${1:docker://alpine:3.20}'
206
+ entrypoint: '\${2:sh}'
207
+ args:
208
+ - -c
209
+ - echo "Hello World"
210
210
  `;
211
211
  /**
212
212
  * Filters action.yml `runs:` completions based on the `using:` value.
@@ -262,7 +262,7 @@ export function filterActionRunsCompletions(values, path, root) {
262
262
  // No using value set - show all keys but prioritize "using"
263
263
  return values.map(v => {
264
264
  if (v.label.toLowerCase() === "using") {
265
- return { ...v, sortText: "0_using" }; // Sort first
265
+ return { ...v, sortText: "9_using" }; // Sort after snippets (0_, 1_, 2_)
266
266
  }
267
267
  return v;
268
268
  });
@@ -325,9 +325,9 @@ export function getActionScaffoldingSnippets(root, path, position) {
325
325
  const isDirectlyInsideRuns = runsMappingIndex !== -1 && runsMappingIndex === path.length - 1;
326
326
  if (isDirectlyInsideRuns) {
327
327
  return [
328
- createSnippetCompletion("Node.js Action", "Scaffold a Node.js action", ACTION_SNIPPET_NODEJS_USING, position, "1_nodejs"),
329
- createSnippetCompletion("Composite Action", "Scaffold a composite action", ACTION_SNIPPET_COMPOSITE_USING, position, "2_composite"),
330
- createSnippetCompletion("Docker Action", "Scaffold a Docker action", ACTION_SNIPPET_DOCKER_USING, position, "3_docker")
328
+ createSnippetCompletion("Node.js Action", "Scaffold a Node.js action", ACTION_SNIPPET_NODEJS_USING, position, "0_nodejs"),
329
+ createSnippetCompletion("Composite Action", "Scaffold a composite action", ACTION_SNIPPET_COMPOSITE_USING, position, "1_composite"),
330
+ createSnippetCompletion("Docker Action", "Scaffold a Docker action", ACTION_SNIPPET_DOCKER_USING, position, "2_docker")
331
331
  ];
332
332
  }
333
333
  // Not at root or `runs` already exists?
@@ -1 +1 @@
1
- {"version":3,"file":"complete-action.js","sourceRoot":"","sources":["../src/complete-action.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"complete-action.js","sourceRoot":"","sources":["../src/complete-action.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,4 +6,5 @@ export { getInlayHints } from "./inlay-hints.js";
6
6
  export { Logger, LogLevel, registerLogger, setLogLevel } from "./log.js";
7
7
  export { validate, ValidationConfig, ActionsMetadataProvider } from "./validate.js";
8
8
  export { ValueProviderConfig, ValueProviderKind } from "./value-providers/config.js";
9
+ export { getCodeActions, CodeActionParams } from "./code-actions/code-actions.js";
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC;AACzD,OAAO,EAAC,qBAAqB,EAAC,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACjC,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAC,MAAM,UAAU,CAAC;AACvE,OAAO,EAAC,QAAQ,EAAE,gBAAgB,EAAE,uBAAuB,EAAC,MAAM,eAAe,CAAC;AAClF,OAAO,EAAC,mBAAmB,EAAE,iBAAiB,EAAC,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC;AACzD,OAAO,EAAC,qBAAqB,EAAC,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACjC,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAC,MAAM,UAAU,CAAC;AACvE,OAAO,EAAC,QAAQ,EAAE,gBAAgB,EAAE,uBAAuB,EAAC,MAAM,eAAe,CAAC;AAClF,OAAO,EAAC,mBAAmB,EAAE,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,gCAAgC,CAAC"}
package/dist/index.js CHANGED
@@ -5,4 +5,5 @@ export { getInlayHints } from "./inlay-hints.js";
5
5
  export { LogLevel, registerLogger, setLogLevel } from "./log.js";
6
6
  export { validate } from "./validate.js";
7
7
  export { ValueProviderKind } from "./value-providers/config.js";
8
+ export { getCodeActions } from "./code-actions/code-actions.js";
8
9
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAmB,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACjC,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAS,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAC,MAAM,UAAU,CAAC;AACvE,OAAO,EAAC,QAAQ,EAA4C,MAAM,eAAe,CAAC;AAClF,OAAO,EAAsB,iBAAiB,EAAC,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAmB,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACjC,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAS,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAC,MAAM,UAAU,CAAC;AACvE,OAAO,EAAC,QAAQ,EAA4C,MAAM,eAAe,CAAC;AAClF,OAAO,EAAsB,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAC,cAAc,EAAmB,MAAM,gCAAgC,CAAC"}
@@ -1,7 +1,18 @@
1
1
  import { Step } from "@actions/workflow-parser/model/workflow-template";
2
2
  import { TemplateToken } from "@actions/workflow-parser/templates/tokens/template-token";
3
3
  import { Diagnostic } from "vscode-languageserver-types";
4
+ import { ActionReference } from "./action.js";
4
5
  import { ValidationConfig } from "./validate.js";
6
+ export declare const DiagnosticCode: {
7
+ readonly MissingRequiredInputs: "missing-required-inputs";
8
+ };
9
+ export interface MissingInputsDiagnosticData {
10
+ action: ActionReference;
11
+ missingInputs: Array<{
12
+ name: string;
13
+ default?: string;
14
+ }>;
15
+ }
5
16
  /**
6
17
  * Validates action references in workflow steps, checking for valid inputs and required inputs.
7
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"validate-action-reference.d.ts","sourceRoot":"","sources":["../src/validate-action-reference.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,IAAI,EAAC,MAAM,kDAAkD,CAAC;AAEtE,OAAO,EAAC,aAAa,EAAC,MAAM,0DAA0D,CAAC;AACvF,OAAO,EAAC,UAAU,EAAqB,MAAM,6BAA6B,CAAC;AAG3E,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAE/C;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,UAAU,EAAE,EACzB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,IAAI,GAAG,SAAS,EACtB,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,OAAO,CAAC,IAAI,CAAC,CAoFf"}
1
+ {"version":3,"file":"validate-action-reference.d.ts","sourceRoot":"","sources":["../src/validate-action-reference.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,IAAI,EAAC,MAAM,kDAAkD,CAAC;AAEtE,OAAO,EAAC,aAAa,EAAC,MAAM,0DAA0D,CAAC;AACvF,OAAO,EAAC,UAAU,EAAqB,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAC,eAAe,EAAuB,MAAM,aAAa,CAAC;AAElE,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAE/C,eAAO,MAAM,cAAc;;CAEjB,CAAC;AAEX,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,eAAe,CAAC;IACxB,aAAa,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,UAAU,EAAE,EACzB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,IAAI,GAAG,SAAS,EACtB,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,OAAO,CAAC,IAAI,CAAC,CAgGf"}
@@ -3,6 +3,9 @@ import { isActionStep } from "@actions/workflow-parser/model/type-guards";
3
3
  import { DiagnosticSeverity } from "vscode-languageserver-types";
4
4
  import { parseActionReference } from "./action.js";
5
5
  import { mapRange } from "./utils/range.js";
6
+ export const DiagnosticCode = {
7
+ MissingRequiredInputs: "missing-required-inputs"
8
+ };
6
9
  /**
7
10
  * Validates action references in workflow steps, checking for valid inputs and required inputs.
8
11
  */
@@ -72,10 +75,20 @@ export async function validateActionReference(diagnostics, stepToken, step, conf
72
75
  const message = missingRequiredInputs.length === 1
73
76
  ? `Missing required input \`${missingRequiredInputs[0][0]}\``
74
77
  : `Missing required inputs: ${missingRequiredInputs.map(input => `\`${input[0]}\``).join(", ")}`;
78
+ // Build minimal diagnostic data - position calculation happens in the quickfix
79
+ const diagnosticData = {
80
+ action,
81
+ missingInputs: missingRequiredInputs.map(([name, input]) => ({
82
+ name,
83
+ default: input.default
84
+ }))
85
+ };
75
86
  diagnostics.push({
76
87
  severity: DiagnosticSeverity.Error,
77
88
  range: mapRange((withKey || stepToken).range),
78
- message: message
89
+ message: message,
90
+ code: DiagnosticCode.MissingRequiredInputs,
91
+ data: diagnosticData
79
92
  });
80
93
  }
81
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validate-action-reference.js","sourceRoot":"","sources":["../src/validate-action-reference.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate-action-reference.js","sourceRoot":"","sources":["../src/validate-action-reference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAC,YAAY,EAAC,MAAM,4CAA4C,CAAC;AAIxE,OAAO,EAAa,kBAAkB,EAAC,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAkB,oBAAoB,EAAC,MAAM,aAAa,CAAC;AAClE,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAG1C,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,qBAAqB,EAAE,yBAAyB;CACxC,CAAC;AAUX;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,WAAyB,EACzB,SAAwB,EACxB,IAAsB,EACtB,MAAoC;IAEpC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,uBAAuB,EAAE;QAC7F,OAAO;KACR;IAED,iFAAiF;IACjF,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,EAAE;QACX,OAAO;KACR;IAED,oEAAoE;IACpE,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACxF,IAAI,cAAc,KAAK,SAAS,EAAE;QAChC,WAAW,CAAC,IAAI,CAAC;YACf,QAAQ,EAAE,kBAAkB,CAAC,KAAK;YAClC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAChC,OAAO,EAAE,8BAA8B,IAAI,CAAC,IAAI,CAAC,KAAK,qCAAqC;SAC5F,CAAC,CAAC;QACH,OAAO;KACR;IAED,+EAA+E;IAC/E,IAAI,OAAgC,CAAC;IACrC,IAAI,SAAoC,CAAC;IACzC,KAAK,MAAM,EAAC,GAAG,EAAE,KAAK,EAAC,IAAI,SAAS,EAAE;QACpC,IAAI,GAAG,CAAC,QAAQ,EAAE,KAAK,MAAM,EAAE;YAC7B,OAAO,GAAG,GAAG,CAAC;YACd,SAAS,GAAG,KAAK,CAAC;YAClB,MAAM;SACP;KACF;IAED,yDAAyD;IACzD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;IAClD,IAAI,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE;QACrC,KAAK,MAAM,EAAC,GAAG,EAAC,IAAI,SAAS,EAAE;YAC7B,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;SACrC;KACF;IAED,0DAA0D;IAC1D,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC;IAC3C,IAAI,YAAY,KAAK,SAAS,EAAE;QAC9B,OAAO;KACR;IAED,wDAAwD;IACxD,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,UAAU,EAAE;QAC5C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YACxB,WAAW,CAAC,IAAI,CAAC;gBACf,QAAQ,EAAE,kBAAkB,CAAC,KAAK;gBAClC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;gBACjC,OAAO,EAAE,yBAAyB,KAAK,GAAG;aAC3C,CAAC,CAAC;SACJ;QAED,MAAM,kBAAkB,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC;QACnE,IAAI,kBAAkB,EAAE;YACtB,WAAW,CAAC,IAAI,CAAC;gBACf,QAAQ,EAAE,kBAAkB,CAAC,OAAO;gBACpC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;gBACjC,OAAO,EAAE,kBAAkB;aAC5B,CAAC,CAAC;SACJ;KACF;IAED,0EAA0E;IAC1E,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAC/D,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,CACpG,CAAC;IAEF,iCAAiC;IACjC,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE;QACpC,MAAM,OAAO,GACX,qBAAqB,CAAC,MAAM,KAAK,CAAC;YAChC,CAAC,CAAC,4BAA4B,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;YAC7D,CAAC,CAAC,4BAA4B,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAErG,+EAA+E;QAC/E,MAAM,cAAc,GAAgC;YAClD,MAAM;YACN,aAAa,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3D,IAAI;gBACJ,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;SACJ,CAAC;QAEF,WAAW,CAAC,IAAI,CAAC;YACf,QAAQ,EAAE,kBAAkB,CAAC,KAAK;YAClC,KAAK,EAAE,QAAQ,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC,KAAK,CAAC;YAC7C,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,cAAc,CAAC,qBAAqB;YAC1C,IAAI,EAAE,cAAc;SACrB,CAAC,CAAC;KACJ;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actions/languageservice",
3
- "version": "0.3.36",
3
+ "version": "0.3.38",
4
4
  "description": "Language service for GitHub Actions",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -47,8 +47,8 @@
47
47
  "watch": "tsc --build tsconfig.build.json --watch"
48
48
  },
49
49
  "dependencies": {
50
- "@actions/expressions": "^0.3.36",
51
- "@actions/workflow-parser": "^0.3.36",
50
+ "@actions/expressions": "^0.3.38",
51
+ "@actions/workflow-parser": "^0.3.38",
52
52
  "vscode-languageserver-textdocument": "^1.0.7",
53
53
  "vscode-languageserver-types": "^3.17.2",
54
54
  "vscode-uri": "^3.0.8",
@@ -76,5 +76,5 @@
76
76
  "ts-node": "^10.9.1",
77
77
  "typescript": "^4.8.4"
78
78
  },
79
- "gitHead": "67dd4fbd61b5077780774c13cf834a5a39286a9f"
79
+ "gitHead": "a8bfe742564ae5ccd57cead8f8d458480db13a01"
80
80
  }