Skip to content

[WIP] Refactor code organization for Go files based on semantic analysis#11679

Closed
Copilot wants to merge 1 commit intomainfrom
copilot/refactor-semantic-function-clustering-please-work
Closed

[WIP] Refactor code organization for Go files based on semantic analysis#11679
Copilot wants to merge 1 commit intomainfrom
copilot/refactor-semantic-function-clustering-please-work

Conversation

Copy link
Contributor

Copilot AI commented Jan 24, 2026

Thanks for assigning this issue to me. I'm starting to work on it and will keep this PR's description up to date as I form a plan and make progress.

Original prompt

This section details on the original issue you should resolve

<issue_title>[refactor] Semantic Function Clustering Analysis - Code Organization and Refactoring Opportunities</issue_title>
<issue_description>A comprehensive semantic analysis of 462 non-test Go files across the pkg/ directory identified significant opportunities for improving code organization through function clustering, consolidation, and refactoring.

Executive Summary

Analysis Scope:

  • 462 Go files analyzed (454 initially discovered + 8 additional)
  • ~3,500+ total functions cataloged (2000+ exported, 1500+ unexported)
  • Primary packages:
    • pkg/workflow/: 241 files (52% of codebase)
    • pkg/cli/: 151 files (33%)
    • pkg/parser/: 29 files (6%)
    • pkg/campaign/: 11 files (2%)
    • Utility packages: 30 files (7%)

Key Findings:

  • Excellent patterns: Parser, console, and campaign packages show strong organization
  • ⚠️ Fragmentation issues: Workflow and CLI packages have 100+ small files that could consolidate
  • 🔄 Duplicate code: Multiple implementations of parsing and validation logic detected
  • 📁 Helper scatter: Format/parse/validate helpers spread across 40+ files

Critical Issues Identified

Issue #1: Compiler Safe Outputs Fragmentation (14 files → 4 files)

Current structure: 14 separate files for safe outputs compilation

  • compiler_safe_outputs.go, compiler_safe_outputs_core.go
  • compiler_safe_outputs_config.go, compiler_safe_outputs_env.go
  • compiler_safe_outputs_job.go, compiler_safe_outputs_jobs.go, compiler_safe_outputs_steps.go
  • compiler_safe_outputs_shared.go, compiler_safe_outputs_specialized.go
  • compiler_safe_outputs_discussions.go
  • Plus 4 additional config files

Issue: Related functions split across too many files (6-12 functions per file), making code navigation difficult.

Recommendation:

Consolidate to 4 focused files:
1. compiler_safe_outputs.go - Main orchestration
2. compiler_safe_outputs_config.go - Config generation (merge 5 config files)
3. compiler_safe_outputs_env.go - Environment setup
4. compiler_safe_outputs_jobs.go - Job/step generation (merge 6 job-related files)
``````

**Estimated Impact:** Reduced file count, improved discoverability, easier maintenance

---

#### Issue githubnext/gh-aw#2: Safe Outputs Config Generation Split (8 files → 2 files)

**Current structure:** Configuration generation fragmented across:
- `safe_outputs_config.go` (6 functions)
- `safe_outputs_config_generation.go` (8 functions)
- `safe_outputs_config_generation_helpers.go` (10 functions)
- `safe_outputs_config_helpers.go` (9 functions)
- `safe_outputs_config_helpers_reflection.go` (6 functions)
- `safe_outputs_config_messages.go` (4 functions)

**Issue:** Semantically related config generation logic scattered across 6 files.

**Recommendation:**
``````
Consolidate to 2 files:
1. safe_outputs_config.go - Main types and core functions
2. safe_outputs_config_generation.go - All generation logic + helpers
``````

**Files to merge:** Generation, generation_helpers, config_helpers, helpers_reflection, messages

---

#### Issue githubnext/gh-aw#3: Permissions.go Overly Large (36 functions → 2-3 files)

**File:** `pkg/workflow/permissions.go` (36 functions - 800+ lines)

**Current mix:**
- **Parsing:** `NewPermissionsParser()`, `parse()`, `IsShorthand()`, `GetPermissions()`
- **Building:** `NewPermissions()`, `NewPermissionsReadAll()`, 10+ builder constructors
- **Utilities:** `ContainsCheckout()`, `GetAllPermissionScopes()`, conversion functions

**Issue:** Single file handles parsing, building, and utility functions - violates Single Responsibility Principle.

**Recommendation:**
``````
Split into focused files:
1. permissions_parser.go - Parsing logic (NewPermissionsParser, parse, getters)
2. permissions_builder.go - Builder/constructor functions (New* methods)
3. permissions_utilities.go - Utility functions (scope getters, converters)

Keep: permissions_validator.go (already exists)
``````

**Location:** pkg/workflow/permissions.go:1

---

#### Issue githubnext/gh-aw#4: Duplicate GitHub URL/Repo Parsing Functions

**Duplicate implementations detected:**

<details>
<summary><b>Locations with similar parsing logic</b></summary>

1. **extractBaseRepo()** - appears in multiple locations:
   - pkg/workflow/action_pins.go (~line 150)
   - pkg/workflow/action_resolver.go (~line 80)
   - Both parse GitHub action repo strings identically

2. **GitHub URL parsing** scattered across:
   - pkg/parser/github.go - `ParseGitHubURL()`
   - pkg/parser/github_urls.go - `ParseGitHubURL()` variants, `ParsePRURL()`, `ParseRunURL()`
   - pkg/workflow/github_tool_to_toolset.go - Custom GitHub parsing
   - pkg/repoutil/repoutil.go - Repository slug parsing

3. **Target repo parsing** duplicated:
   - `parseTargetRepo()` functions in 3+ different files
   - Similar logic, different contexts

</details>

**Recommendation:**
```...

</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

- Fixes githubnext/gh-aw#11675

<!-- START COPILOT CODING AGENT TIPS -->
---

✨ Let Copilot coding agent [set things up for you](https://github.com/githubnext/gh-aw/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo.

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.

2 participants