Skip to content

Conversation

@rentziass
Copy link
Member

This PR adds CodeAction capabilities to the language server and sets up the inner loop for them, using workflow files where to define expected diagnostics and golden files to specify expected results. This also adds a CodeActionKind.QuickFix for when an action is used but it's missing required inputs:

CleanShot 2025-12-16 at 13 40 17

Copilot AI review requested due to automatic review settings December 16, 2025 13:44
@rentziass rentziass requested a review from a team as a code owner December 16, 2025 13:44
@rentziass rentziass force-pushed the rentziass/codeactions2 branch from c66abfd to b6bd0ad Compare December 16, 2025 13:48
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces CodeAction capabilities to the GitHub Actions language server, specifically implementing a quickfix feature for automatically adding missing required action inputs. The implementation includes:

  • A new code action infrastructure with a provider-based architecture
  • A quickfix provider that generates edits to add missing required inputs
  • Test infrastructure using golden files to validate code action behavior
  • Enhanced diagnostic data to support code actions

Reviewed changes

Copilot reviewed 16 out of 16 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
languageservice/src/code-actions/index.ts Main entry point for code actions, implementing provider aggregation and filtering logic
languageservice/src/code-actions/types.ts Type definitions for code action context and provider interface
languageservice/src/code-actions/quickfix/index.ts Exports quickfix providers array
languageservice/src/code-actions/quickfix/add-missing-inputs.ts Implementation of the quickfix provider for adding missing required inputs
languageservice/src/code-actions/tests/runner.ts Test infrastructure for running golden file tests
languageservice/src/code-actions/tests/runner.test.ts Test suite using the golden file runner
languageservice/src/code-actions/tests/testdata/quickfix/*.yml Test input files with markers for expected diagnostics and fixes
languageservice/src/code-actions/tests/testdata/quickfix/*.golden.yml Expected output files after applying code actions
languageservice/src/validate-action.ts Enhanced validation to include diagnostic data needed for code actions
languageservice/src/validate.actions.test.ts Updated tests to verify new diagnostic data fields
languageservice/src/index.ts Exports the new getCodeActions function
languageserver/src/connection.ts Registers code action handler and declares CodeActionKind.QuickFix capability

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@rentziass rentziass force-pushed the rentziass/codeactions2 branch 2 times, most recently from 81fed48 to 1b0264b Compare December 16, 2025 14:06
@rentziass rentziass force-pushed the rentziass/codeactions2 branch from 1b0264b to f35d847 Compare December 16, 2025 14:09

if (data.hasWithKey && data.withIndent !== undefined) {
// `with:` exists - use its indentation + 2 for inputs
const inputIndent = " ".repeat(data.withIndent + 2);
Copy link
Collaborator

@ericsciple ericsciple Dec 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of assuming 2, have you considered matching the customer's indent? You could detect this based on the indent amount of the first job. For example:

function detectIndentSize(rootToken: MappingToken): number {
  const jobsValue = rootToken.find("jobs");
  if (jobsValue && isMapping(jobsValue) && jobsValue.count > 0) {
    const firstJob = jobsValue.get(0);
    if (firstJob?.key.range && jobsValue.range) {
      return firstJob.key.range.start.column - jobsValue.range.start.column;
    }
  }
  return 2; // fallback
}

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done, thank you ❤️ I wonder if indent size is something we wanna carry around with WorkflowTemplate itself, I suspect it'll keep coming in use 🤔

ericsciple
ericsciple previously approved these changes Dec 17, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants