Gitnexus Refactoring

abhigyanpatwari/GitNexus/gitnexus-claude-plugin/skills/gitnexus-refactoring

作者 abhigyanpatwari50aa4be3b2c2c9a1561fc44878e5d8f87b99d16e無授權條款47K 個星標收錄於 2026年10月9日更新於 2026年10月9日儲存庫今天更新

Use when the user wants to rename, extract, split, move, or restructure code safely. Examples: "Rename this function", "Extract this into a module", "Refactor this class", "Move this to a separate file"

AI 產生的概覽

指導使用 GitNexus MCP 工具安全重構程式碼,包括重新命名、擷取、拆分或搬移,並對應相依性與驗證變更。

功能
此技能提供一套使用 GitNexus MCP 工具安全重構程式碼的工作流程。內容涵蓋綁定正確的儲存庫、用 impact 對應上游相依性、用 query 尋找執行流程、用 context 檢視參照、用 rename 的 dry-run 模式預覽多檔案重新命名,並用 detect_changes 驗證結果。也包含重新命名符號、擷取模組、拆分函式或服務的檢查清單、風險規則,以及一個完整的重新命名範例。
適用情境
當使用者想要重新命名、擷取、拆分、搬移或以其他方式重構程式碼,且需要確保變更在呼叫端與測試中安全時使用。適用於重新命名函式、將程式碼擷取為模組或拆分服務等任務。
執行需求
需要 GitNexus MCP 伺服器及其工具(list_repos、impact、query、context、rename、detect_changes、cypher)以及已建立索引的儲存庫;重新分析使用 node .gitnexus/run.cjs analyze。此技能不附帶指令碼。

Refactoring with GitNexus

When to Use

  • "Rename this function safely"
  • "Extract this into a module"
  • "Split this service"
  • "Move this to a new file"
  • Any task involving renaming, extracting, splitting, or restructuring code

Bind the repository first

Refactoring writes to disk. rename with dry_run: false edits files in whichever repository was resolved, so binding identity here is a safety gate, not bookkeeping.

Call list_repos {} before the first tool call. With one indexed repository, use the examples below as written. With more than one, pass repo on every call: an omitted repo normally errors, but under an MCP policy with a configured default it resolves to that default silently. If you cannot tell which repository is meant, stop and ask. Never run rename with dry_run: false until the preview in the same bound repository has been reviewed — its returned file_path values show which checkout is about to be written, so read them as a confirmation of identity.

list_repos is paginated, so page with offset: pagination.nextOffset until hasMore is false before concluding a repository is absent.

detect_changes takes worktree when you are editing a linked worktree the MCP server was not launched from; otherwise git diff runs in the wrong checkout and reports nothing changed, which reads as a verified refactor.

Workflow

0. list_repos {}                                  → Bind repo (and worktree)1. impact({target: "X", direction: "upstream"})  → Map all dependents2. query({search_query: "X"})                            → Find execution flows involving X3. context({name: "X"})                           → See all incoming/outgoing refs4. Plan update order: interfaces → implementations → callers → tests

If "Index is stale" → run node .gitnexus/run.cjs analyze in terminal. Hot-tool staleness names which index answered (branch/lastCommit) and how fresh it is (status). Re-analyze only for behind or diverged — current is identity, unknown is unmeasurable.

Checklists

Rename Symbol

- [ ] list_repos {} — bind repo; explicit repo when >1 indexed, ask if ambiguous- [ ] rename({symbol_name: "oldName", new_name: "newName", dry_run: true}) — preview all edits- [ ] Confirm the previewed file paths are in the bound repository/worktree- [ ] Review graph edits (high confidence) and text_search edits (review carefully)- [ ] If satisfied: rename({..., dry_run: false}) — apply edits- [ ] detect_changes() — verify only expected files changed- [ ] Run tests for affected processes

Extract Module

- [ ] list_repos {} — bind repo; explicit repo when >1 indexed, ask if ambiguous- [ ] context({name: target}) — see all incoming/outgoing refs- [ ] impact({target, direction: "upstream"}) — find all external callers- [ ] Define new module interface- [ ] Extract code, update imports- [ ] detect_changes() — verify affected scope- [ ] Run tests for affected processes

Split Function/Service

- [ ] list_repos {} — bind repo; explicit repo when >1 indexed, ask if ambiguous- [ ] context({name: target}) — understand all callees- [ ] Group callees by responsibility- [ ] impact({target, direction: "upstream"}) — map callers to update- [ ] Create new functions/services- [ ] Update callers- [ ] detect_changes() — verify affected scope- [ ] Run tests for affected processes

Tools

rename — automated multi-file rename:

rename({symbol_name: "validateUser", new_name: "authenticateUser", repo: "my-app", dry_run: true})→ 12 edits across 8 files→ 10 graph edits (high confidence), 2 text_search edits (review)→ Changes: [{file_path, edits: [{line, old_text, new_text, confidence}]}]

impact — map all dependents first:

impact({target: "validateUser", repo: "my-app", direction: "upstream"})→ d=1: loginHandler, apiMiddleware, testUtils→ Affected Processes: LoginFlow, TokenRefresh

detect_changes — verify your changes after refactoring:

detect_changes({scope: "all"})→ Changed: 8 files, 12 symbols→ Affected processes: LoginFlow, TokenRefresh→ Risk: MEDIUM

partial: true (a graph query failed) or truncated: true (the changed-symbol listing was capped) means the result is short of the truth: a short or empty list is not proof that only the expected files changed. Re-run it rather than treat the refactor as verified.

A wrong-worktree zero carries neither flag and is indistinguishable from a clean verification, so confirm the diffed checkout is the one you edited.

cypher — custom reference queries:

cypher
MATCH (caller)-[:CodeRelation {type: 'CALLS'}]->(f:Function {name: "validateUser"})RETURN caller.name, caller.filePath ORDER BY caller.filePath

Risk Rules

Risk FactorMitigation
Many callers (>5)Use rename for automated updates
Cross-area refsUse detect_changes after to verify scope
String/dynamic refsquery to find them
External/public APIVersion and deprecate properly
Same name in another indexed repoBind repo; verify previewed paths before applying

Example: Rename validateUser to authenticateUser

0. list_repos {}   → total: 2 (my-app, billing-api) — both define validateUser, so bind explicitly
1. rename({symbol_name: "validateUser", new_name: "authenticateUser", repo: "my-app", dry_run: true})   → 12 edits: 10 graph (safe), 2 text_search (review)   → Files: validator.ts, login.ts, middleware.ts, config.json...
2. Review text_search edits (config.json: dynamic reference!)
3. rename({symbol_name: "validateUser", new_name: "authenticateUser", repo: "my-app", dry_run: false})   → Applied 12 edits across 8 files
4. detect_changes({scope: "all", repo: "my-app"})   → Affected: LoginFlow, TokenRefresh   → Risk: MEDIUM — run tests for these flows   Repository: my-app (/abs/path/my-app)  Worktree: same  Index: current

With a single indexed repository, step 0 returns total: 1 and the repo argument drops out of every call above.

來源與署名

來源:abhigyanpatwari/GitNexus位於gitnexus-claude-plugin/skills/gitnexus-refactoring提交50aa4be

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架