Merge pull request #58 from github/joshmgross/deprecated-values

Show deprecation status when suggesting action inputs
This commit is contained in:
Josh Gross
2022-12-14 14:56:00 -05:00
committed by GitHub
3 changed files with 14 additions and 17 deletions
@@ -44,7 +44,8 @@ export async function getActionInputValues(
return Object.entries(inputs).map(([inputName, input]) => { return Object.entries(inputs).map(([inputName, input]) => {
return { return {
label: inputName, label: inputName,
description: input.description description: input.description,
deprecated: input.deprecationMessage !== undefined
}; };
}); });
} }
@@ -100,14 +101,6 @@ type ActionMetadata = {
inputs?: ActionInputs; inputs?: ActionInputs;
}; };
// https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#inputs
type ActionInput = {
description: string;
required?: boolean;
default?: string;
deprecationMessage?: string;
};
// https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions // https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions
async function parseActionMetadata(content: string): Promise<ActionInputs> { async function parseActionMetadata(content: string): Promise<ActionInputs> {
const metadata: ActionMetadata = parse(content); const metadata: ActionMetadata = parse(content);
+11 -8
View File
@@ -9,7 +9,7 @@ import {MappingToken} from "@github/actions-workflow-parser/templates/tokens/map
import {TokenType} from "@github/actions-workflow-parser/templates/tokens/types"; import {TokenType} from "@github/actions-workflow-parser/templates/tokens/types";
import {File} from "@github/actions-workflow-parser/workflows/file"; import {File} from "@github/actions-workflow-parser/workflows/file";
import {Position, TextDocument} from "vscode-languageserver-textdocument"; import {Position, TextDocument} from "vscode-languageserver-textdocument";
import {CompletionItem, Range, TextEdit} from "vscode-languageserver-types"; import {CompletionItem, CompletionItemTag, Range, TextEdit} from "vscode-languageserver-types";
import {ContextProviderConfig} from "./context-providers/config"; import {ContextProviderConfig} from "./context-providers/config";
import {getContext, Mode} from "./context-providers/default"; import {getContext, Mode} from "./context-providers/default";
import {getWorkflowContext, WorkflowContext} from "./context/workflow-context"; import {getWorkflowContext, WorkflowContext} from "./context/workflow-context";
@@ -106,11 +106,12 @@ export async function complete(
} }
return values.map(value => { return values.map(value => {
const item = CompletionItem.create(value.label); const item: CompletionItem = {
item.detail = value.description; label: value.label,
if (replaceRange) { detail: value.description,
item.textEdit = TextEdit.replace(replaceRange, value.label); tags: value.deprecated ? [CompletionItemTag.Deprecated] : undefined,
} textEdit: replaceRange ? TextEdit.replace(replaceRange, value.label) : undefined
};
return item; return item;
}); });
@@ -132,7 +133,8 @@ async function getValues(
// Use the value providers from the parent if the current key is null // Use the value providers from the parent if the current key is null
const valueProviderToken = keyToken || parent; const valueProviderToken = keyToken || parent;
const customValueProvider = valueProviderToken?.definition?.key && valueProviderConfig?.[valueProviderToken.definition.key] const customValueProvider =
valueProviderToken?.definition?.key && valueProviderConfig?.[valueProviderToken.definition.key];
if (customValueProvider) { if (customValueProvider) {
const customValues = await customValueProvider.get(workflowContext); const customValues = await customValueProvider.get(workflowContext);
if (customValues) { if (customValues) {
@@ -140,7 +142,8 @@ async function getValues(
} }
} }
const defaultValueProvider = valueProviderToken?.definition?.key && defaultValueProviders[valueProviderToken.definition.key] const defaultValueProvider =
valueProviderToken?.definition?.key && defaultValueProviders[valueProviderToken.definition.key];
if (defaultValueProvider) { if (defaultValueProvider) {
const values = await defaultValueProvider.get(workflowContext); const values = await defaultValueProvider.get(workflowContext);
return filterAndSortCompletionOptions(values, existingValues); return filterAndSortCompletionOptions(values, existingValues);
@@ -3,6 +3,7 @@ import {WorkflowContext} from "../context/workflow-context";
export interface Value { export interface Value {
label: string; label: string;
description?: string; description?: string;
deprecated?: boolean;
} }
export enum ValueProviderKind { export enum ValueProviderKind {