# Rename Symbol

> Rename a code symbol (variable, function, class) across a specified scope.

- **Type:** Skill
- **Install:** `agentstack add skill-davila7-claude-with-skills-03-rename-symbol`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [davila7](https://agentstack.voostack.com/s/davila7)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [davila7](https://github.com/davila7)
- **Source:** https://github.com/davila7/claude-with-skills/tree/main/src/content/docs/02-intermediate/exercises/solutions/03-rename-symbol
- **Website:** https://claude-with-skills.vercel.app

## Install

```sh
agentstack add skill-davila7-claude-with-skills-03-rename-symbol
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

## Rename symbol

Rename `$old-name` to `$new-name` within scope: `$scope`.

Valid scopes: `file`, `module`, `project`. If `$scope` is not one of these three values, stop and report: "Invalid scope '$scope'. Use file, module, or project."

### Step 1: Determine the search area

**`file` scope**: Search only the current file being edited, or the specific file the user mentioned in the task context. If the file cannot be determined, ask the user for the path before proceeding.

**`module` scope**: Search the directory containing the current file and its immediate subdirectories (one level deep). Exclude `node_modules/`, `__pycache__/`, `.git/`, `dist/`, and `build/`.

**`project` scope**: Search the entire project from the root. Exclude `node_modules/`, `__pycache__/`, `.git/`, `dist/`, `build/`, and any directory listed in `.gitignore` that represents build output.

### Step 2: Search for all occurrences

Use grep with a word-boundary pattern to find occurrences of `$old-name`. The pattern must match whole words only — it must not match `$old-name` when it appears as part of a longer identifier.

For most languages, use:
```
grep -rn "\b$old-name\b"  --include="*.ts" --include="*.tsx" --include="*.js" --include="*.jsx" --include="*.py" --include="*.go" --include="*.rb" --include="*.java"
```

Adjust the `--include` flags based on the file types in the project. Check which extensions are present before running grep.

If zero occurrences are found, stop and report: "No occurrences of '$old-name' found in the $scope scope."

### Step 3: Show a preview

Before making any changes, show the user the full list of files and lines that will be modified:

```
Found N occurrences of '$old-name' in M files:

src/auth/login.ts:14:  function $old-name(user: User) {
src/auth/login.ts:28:  return $old-name(currentUser);
src/auth/index.ts:3:   export { $old-name } from './login';
```

Then ask: "Rename all occurrences? (yes/no)"

Wait for confirmation before proceeding. If the user says no or provides any response other than yes, stop and report: "Rename cancelled."

### Step 4: Make the replacements

For each file that contains occurrences, apply the substitution using a word-boundary-aware sed pattern:

```
sed -i '' "s/\b$old-name\b/$new-name/g" 
```

On Linux, omit the empty string after `-i`:
```
sed -i "s/\b$old-name\b/$new-name/g" 
```

Process files one at a time. If sed fails for a specific file, report the error for that file and continue with the remaining files.

### Step 5: Show the diff

After all replacements are made, run:
```
git diff
```

Show the output so the user can verify the changes are correct.

Report a summary:
```
Renamed '$old-name' to '$new-name'.
Files modified: M
Total occurrences replaced: N
```

### Notes

- Do not rename occurrences in comments or string literals unless they are clearly references to the symbol (e.g., JSDoc `@param oldName` references). When in doubt, flag the occurrence in the preview and let the user decide.
- Do not rename file names even if they contain the symbol name. File renaming requires separate handling.
- If the project uses TypeScript, a language server rename via the editor is safer for type-checked renames. Note this at the end of the summary.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [davila7](https://github.com/davila7)
- **Source:** [davila7/claude-with-skills](https://github.com/davila7/claude-with-skills)
- **License:** MIT
- **Homepage:** https://claude-with-skills.vercel.app

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-davila7-claude-with-skills-03-rename-symbol
- Seller: https://agentstack.voostack.com/s/davila7
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
