agentsclimarketplace

Refactoring

Skill kwhorne/elyra-skills/skills/refactoring

51 production-grade Agent Skills for AI coding agents — full software lifecycle (idea → spec → build → review → ship → operate → maintain) plus Laravel/TALL/VILT/Filament stack workflows. Works with Elyra, Claude Code, Cursor, and more.

Install
npx -y skills add kwhorne/elyra-skills --skill refactoring

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Refactor code safely with characterization tests first, small reversible steps, and verification after each step. Use when the user asks to refactor, restructure, clean up, simplify, extract, or rename existing code.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

4.3 KB, as published. Nobody here has run it

Refactoring

Refactoring: changing the structure of code without changing its observable behavior.

The discipline is in the without. If tests fail or behavior changes, it's no longer a refactor — it's a rewrite, and it needs to be reviewed as one.

When to use

  • "Refactor X"
  • "Clean up / simplify / restructure …"
  • "Extract this into a function/module/class"
  • "Rename / move / split …"
  • "Reduce duplication"

When NOT to use

  • The user wants new behavior → that's a feature, not a refactor
  • There are no tests and no time/permission to add them → flag the risk first
  • The code is going to be deleted soon → don't polish it

Procedure

0. Confirm scope and goal

Refactoring is open-ended. Pin it down:

  • What's the smell? (duplication, long function, unclear naming, tight coupling, …)
  • What does "done" look like?
  • What must not change? (public API, file paths, performance, …)

1. Establish a safety net

Behavior preservation needs proof. In order of preference:

  1. Existing tests that cover the affected code. Run them; they must pass before you start.
  2. Characterization tests — write tests that pin down current behavior (including warts), so you'll notice if you change it.
  3. Manual repro of key paths if tests are impossible. Document what you checked.

If you can't get to step 1 or 2, stop and tell the user. Don't refactor on faith.

2. Refactor in small steps

Each step:

  • Is one transformation (extract, rename, inline, move, …)
  • Compiles / lints / type-checks
  • Passes the test suite

Commit (or at least stash) after each green step. If a step turns red, revert it — don't pile fixes on top.

3. Common refactoring moves

MoveUse when
Extract functionA block of code has a clear single purpose and a good name suggests itself
InlineA function adds no clarity over its body
RenameThe current name lies, lags, or shrugs
MoveA function sits closer to data it doesn't use than data it does
Replace conditional with polymorphismA switch/if chain on type repeats in multiple places
Introduce parameter objectA function takes 4+ related args, or the same cluster appears together repeatedly
Replace magic value with named constantA literal appears more than once or its meaning isn't obvious
Split phaseOne function does parsing and processing, or fetch and transform

4. Verify

After all steps:

  • All tests pass (including ones you wrote in step 1)
  • Public API unchanged (or changes are deliberate and documented)
  • No dead code left over
  • Run a diff stat: large diff is fine, surprises are not

5. Stop

Refactoring is open-ended; that's why it's dangerous. Stop at the goal you set in step 0. If you spot more smells, note them, don't fix them now.

Output format

## Refactor: <short title>

**Goal:** what we set out to do.

**Approach:** sequence of small steps actually taken.

**Behavior preservation:** tests run / written / checked.

**Out of scope (noted, not fixed):** other smells you spotted.

Anti-patterns

  • ❌ "Refactor + add a feature in the same change" — split into two PRs
  • ❌ Big-bang rewrite labeled as "refactor"
  • ❌ Refactoring without running the tests after each step
  • ❌ Renaming things at the same time as moving them at the same time as changing signatures
  • ❌ Polishing code that's about to be deleted
  • ❌ Reformatting unrelated code — keep diffs reviewable

Tips

  • If the test suite is slow, scope down: pytest path/to/affected, vitest run src/affected/, etc. But run the full suite at the end.
  • Use the IDE/LSP refactor tools for renames and moves when available — they're more reliable than text search-replace.
  • If a refactor "needs" you to change a test, pause: are you changing behavior? If yes, label it as such.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.