lsp-edit-symbol
Edit a named symbol without knowing its file or position. Use when you want to change a function, type, or variable by name and don't have exact coordinates. Resolves the symbol to its definition, retrieves its full range, and applies the edit.
How do I install this agent skill?
npx skills add https://github.com/blackwell-systems/agent-lsp --skill lsp-edit-symbolIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The skill provides instructions for editing code symbols such as functions and variables using LSP tools. It describes a standard workflow for locating symbols and applying edits without identifying any security risks.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
What does this agent skill do?
lsp-edit-symbol
Edit a named symbol (function, type, variable) without needing its exact file path
or line/column. Primary path uses replace_symbol_body for direct symbol replacement.
Falls back to find_symbol + list_symbols + apply_edit when
the server does not support document symbols well.
Workflow
Step 1 — Locate the file
{ "tool": "find_symbol", "query": "MyFunc" }
Returns a list of matching symbols with file URI and position. Pick the definition (not a test file, not a stub). If multiple matches, use the container name or file path to disambiguate.
Step 2 — Replace the symbol body (primary path)
Use replace_symbol_body to replace the entire function/method/type body by name:
{
"tool": "replace_symbol_body",
"file_path": "/path/to/file.go",
"symbol_path": "MyFunc",
"new_body": "func MyFunc() error {\n\treturn nil\n}"
}
For methods, use dot notation: "MyStruct.Method".
This resolves the symbol by name within the file, finds its full range, and replaces it atomically. No position math required.
If replace_symbol_body fails (e.g., the server cannot resolve document symbols
for this file), fall back to the manual path below.
Fallback — Manual resolution via document symbols
Step 2b — Get the full range:
{
"tool": "list_symbols",
"file_path": "/path/to/file.go",
"language_id": "go"
}
Find MyFunc in the returned tree. The range field covers the entire symbol
including its body; selectionRange covers only the name.
Step 3b — Apply the edit:
Option A (text-match, recommended when you have the old text):
{
"tool": "apply_edit",
"file_path": "/path/to/file.go",
"old_text": "func MyFunc() {",
"new_text": "func MyFunc() error {"
}
Option B (positional, when you have the exact range):
{
"tool": "apply_edit",
"workspace_edit": {
"changes": {
"file:///path/to/file.go": [{
"range": { "start": {"line": 12, "character": 0}, "end": {"line": 18, "character": 1} },
"newText": "func MyFunc() error {\n\treturn nil\n}"
}]
}
}
}
Decision guide
| Situation | Approach |
|---|---|
| Replacing full body | replace_symbol_body (primary path) |
| Changing signature only | Step 1 + apply_edit with one-line old_text |
| Symbol name ambiguous | Use find_symbol query + container name filter |
| Server lacks document symbols | Fallback path (Step 2b + 3b) |
| After edit | Run get_diagnostics to verify no errors introduced |
Notes
replace_symbol_bodyis the preferred path for full-body replacements. It handles symbol resolution and range calculation internally.find_symbolreturns declaration sites, not all references. The first non-test result is usually the definition.- Positions in
list_symbolsare 1-based (shifted from LSP convention).apply_editworkspace_editexpects 0-based; subtract 1 when using positional mode (Option B). Text-match mode (Option A) requires no position math. - For renames (not edits), use
/lsp-renameinstead; it updates all call sites.
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/blackwell-systems/agent-lsp/lsp-edit-symbol">View lsp-edit-symbol on skillZs</a>