readability-sweep
Three-pass readability cleanup of application source: remove inline comments, extract cohesive blocks into intent-named private methods, and challenge every class and method name. Use whenever the use
Files1
View on GitHubSKILL.mdskills/readability-sweep/SKILL.md
GitHubReadability Sweep — Three Passes
Code must read through its names, not through narration. Run the passes in order, report per pass. Scope: application source directories only — leave tests, config, and vendor code alone unless explicitly included.
Pass A — Comments
- Find every inline
//and/* */comment in scope. - Apply per comment:
- What-comment (restates the next line) → delete.
- Genuine why (race condition, idempotency gate, security rationale, external quirk, legal constraint) → lift into the enclosing method PHPDoc/docstring, then delete the inline form.
- Commented-out code → delete outright.
- Bare
//placeholders and trailing data annotations → delete; move rationale to class doc if it matters.
- Class-level doc blocks always stay. Method-level docs only where they carry a why or a non-obvious contract.
Pass B — Extract Method
- Inside each method, find self-contained blocks of 4+ lines that take input → transform → produce one output.
- Extract each into a
privatemethod with an intent name — the name states what comes out, not how (priorComposites,buildRequestLine,advanceStatus). - Do NOT extract — over-extraction reads worse than inline code:
- guard clauses and early returns
- single statements or simple assignments
- blocks mutating two or more enclosing-scope locals
- Keep paired classes symmetric: if two sibling drivers/paths share a shape, give both the same extractions.
Pass C — Naming
- For every class and public method in scope: read what it actually does, then judge the name against it.
- Enforce the house rules:
- class names carry type suffixes (
Controller,Job,Service,Event,Listener,Factory) - queued classes carry the
Jobsuffix; trigger-listeners are{Verb}On{Event}Listener - plain services use intent-named primary methods (
check,create,process,store) — neverhandle(), which is reserved for framework contracts - enum cases are
ALL_CAPS_SNAKE_CASE
- class names carry type suffixes (
- Where a better name exists, propose current → suggested with a one-line justification. Apply renames only after the user picks; a rename is never silent.
- Renames rot static-analysis baselines (entries embed symbol + path). After any applied rename, flag that the baseline needs regenerating.
Post-flight
Run the project's formatter and full test suite. Both must be clean before reporting.
Output Contract
Per pass: files touched and a compact change list (Pass A: comments deleted/lifted; Pass B: methods extracted with names; Pass C: renames proposed vs applied). Then: formatter + test results, and any baseline-regeneration flag. No essays.