refactor: consolidate 6 identical hasStringKey copies into pkg/setutil.Contains#40534
Merged
Merged
Conversation
- Add pkg/setutil with generic Contains[K comparable] function - Replace 217 hasStringKey call sites across 6 packages with setutil.Contains - Delete 6 per-package seenmapbool_helpers.go copies Closes #40531 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Refactor: consolidate hasStringKey copies into a shared generic set helper
refactor: consolidate 6 identical hasStringKey copies into pkg/setutil.Contains
Jun 21, 2026
Contributor
There was a problem hiding this comment.
Pull request overview
This PR removes six byte-identical per-package hasStringKey(map[string]struct{}, string) bool helpers and consolidates their usage into a shared, generic set membership helper (pkg/setutil.Contains). This aligns with the existing “leaf util package” approach (e.g., sliceutil) while keeping call sites simple and consistent.
Changes:
- Added
pkg/setutilwith a genericContains[K comparable](map[K]struct{}, K) bool. - Updated call sites across
constants,agentdrain,linters/ssljson,parser,workflow, andclito usesetutil.Contains. - Deleted the duplicated
seenmapbool_helpers.gofiles that previously definedhasStringKey.
Show a summary per file
| File | Description |
|---|---|
| pkg/workflow/trigger_parser.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/tools_validation_github_toolsets.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/tools_parser.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/time_delta.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/template.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/submit_pr_review.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/strict_mode_env_validation.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/side_repo_maintenance.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/shell.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/seenmapbool_helpers.go | Remove duplicated hasStringKey helper. |
| pkg/workflow/safe_update_manifest.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/safe_update_enforcement.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/safe_outputs_needs_validation.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/safe_jobs_needs_validation.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/safe_jobs_needs_validation_test.go | Update tests to use setutil.Contains. |
| pkg/workflow/runtime_import_validation.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/runtime_deduplication.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/run_step_sanitizer.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/publish_artifacts_test.go | Update tests to use setutil.Contains. |
| pkg/workflow/permissions_validation.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/package_extraction.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/on_needs_validation.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/model_alias_validation.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/mcp_setup_generator.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/mcp_github_config.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/mcp_config_validation.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/mcp_config_custom.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/map_helpers.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/known_needs_expressions.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/imports.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/github_toolsets.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/git_configuration_steps.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/frontmatter_extraction_yaml.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/expression_extraction.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/engine_helpers.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/engine_auth_test.go | Update tests to use setutil.Contains. |
| pkg/workflow/docker.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/dependabot.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/dependabot_test.go | Update tests to use setutil.Contains. |
| pkg/workflow/copilot_engine_tools.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/compiler_safe_outputs_job.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/compiler_pre_activation_job.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/compiler_orchestrator_workflow.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/compiler_orchestrator_tools.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/compiler_main_job.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/compiler_jobs.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/compiler_activation_job.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/command.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/checkout_manager.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/bot_aliases.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/awf_helpers.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/awf_config.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/agentic_engine.go | Switch set membership checks to setutil.Contains. |
| pkg/workflow/action_cache.go | Switch set membership checks to setutil.Contains. |
| pkg/setutil/setutil.go | Add generic Contains helper for map[K]struct{} sets. |
| pkg/setutil/setutil_test.go | Add unit/spec tests for Contains. |
| pkg/setutil/README.md | Document setutil public API and usage. |
| pkg/parser/tools_merger.go | Switch set membership checks to setutil.Contains. |
| pkg/parser/seenmapbool_helpers.go | Remove duplicated hasStringKey helper. |
| pkg/parser/schema_validation.go | Switch set membership checks to setutil.Contains. |
| pkg/parser/schema_suggestions.go | Switch set membership checks to setutil.Contains. |
| pkg/parser/schema_errors.go | Switch set membership checks to setutil.Contains. |
| pkg/parser/include_processor.go | Switch set membership checks to setutil.Contains. |
| pkg/parser/import_topological.go | Switch set membership checks to setutil.Contains. |
| pkg/parser/import_field_extractor.go | Switch set membership checks to setutil.Contains. |
| pkg/parser/import_cycle.go | Switch set membership checks to setutil.Contains. |
| pkg/parser/import_bfs.go | Switch set membership checks to setutil.Contains. |
| pkg/parser/frontmatter_hash.go | Switch set membership checks to setutil.Contains. |
| pkg/linters/ssljson/ssljson.go | Switch set membership checks to setutil.Contains. |
| pkg/linters/ssljson/seenmapbool_helpers.go | Remove duplicated hasStringKey helper. |
| pkg/constants/seenmapbool_helpers.go | Remove duplicated hasStringKey helper. |
| pkg/constants/engine_constants.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/zizmor.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/workflows.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/workflow_secrets.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/seenmapbool_helpers.go | Remove duplicated hasStringKey helper. |
| pkg/cli/secrets.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/run_push.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/remove_command.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/packages.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/mcp_tool_table.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/mcp_inspect_mcp.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/logs_safe_output_chains.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/logs_report_test.go | Update tests to use setutil.Contains. |
| pkg/cli/logs_artifact_set.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/jsonworkflow_to_markdown.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/interactive.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/includes.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/imports.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/generate_action_metadata_command.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/gateway_logs_rpc.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/experiments_command.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/engine_secrets.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/engine_secrets_test.go | Update tests to use setutil.Contains. |
| pkg/cli/enable.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/drain3_integration.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/devcontainer.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/dependency_graph.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/compile_workflow_processor.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/compile_post_processing.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/compile_file_operations.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/codemod_steps_run_secrets_env.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/codemod_safe_output_require_title_prefix.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/codemod_engine_env_secrets.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/add_interactive_engine.go | Switch set membership checks to setutil.Contains. |
| pkg/cli/access_log.go | Switch set membership checks to setutil.Contains. |
| pkg/agentdrain/seenmapbool_helpers.go | Remove duplicated hasStringKey helper. |
| pkg/agentdrain/mask.go | Switch set membership checks to setutil.Contains. |
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 108/108 changed files
- Comments generated: 1
Collaborator
|
@copilot Run pr-finisher skill |
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Contributor
Author
Fixed in the latest commit — updated the README table to use the correct full signature |
This was referenced Jun 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Six packages each carried a byte-identical 4-line
hasStringKeyhelper in per-packageseenmapbool_helpers.gofiles — a side-effect of themap[string]bool→map[string]struct{}migration codemod. This PR consolidates all 217 call sites into a single shared generic helper.Changes
pkg/setutil— new dependency-free leaf package (matchingsliceutil/typeutilconventions) with a genericContains[K comparable]:constants,agentdrain,linters/ssljson,parser,workflow,cli—hasStringKey(replaced withsetutil.Contains(; imports added viagoimportsseenmapbool_helpers.gofiles deleted —pkg/{constants,agentdrain,linters/ssljson,parser,workflow,cli}/seenmapbool_helpers.goThe generic signature covers future non-string key sets at no extra cost.