askill
syntax

syntaxSafety 90Repository

Edits that never fail. Find functions by name, not text matching.

0 stars
1.2k downloads
Updated 2/5/2026

Package Files

Loading files...
SKILL.md

syntax

Edit code by function name, not text matching. The Edit tool fails when text isn't unique. This never does.

First: list_symbols

Before any edit, know what's in the file:

list_symbols({ file_path: 'src/api.ts' })

Why This Wins

The ProblemBuilt-in Failuresyntax Solution
Edit a functionEdit fails if code appears twiceedit_symbol finds by AST
Find definitionGrep matches comments/stringssearch_symbols finds actual symbols
Rename everywhereMiss references, break importsrename_symbol handles all refs
Move fileBroken imports everywheremove_file updates all imports

Quick Reference

TaskTool
See file structurelist_symbols
Read one functionread_symbol
Change a functionedit_symbol
Change multiple symbols atomicallybatch_edit_symbols
Find a symbolsearch_symbols
Find all usagesfind_references
Rename everywhererename_symbol
Move file safelymove_file
Move functionmove_symbol
Who calls this?get_callers
What does this call?get_callees
Trace call chainstrace
Find dead codefind_dead_code

Common Workflows

Edit a Function

list_symbols({ file_path: 'src/utils.ts' })
read_symbol({ file_path: 'src/utils.ts', name_path: 'formatDate' })
edit_symbol({ file_path: 'src/utils.ts', name_path: 'formatDate', new_body: '...' })

Edit Multiple Symbols Atomically

When you need to change a function signature AND update all callers:

batch_edit_symbols({
  edits: [
    { file_path: 'src/api.ts', name_path: 'fetchUser', new_body: 'async function fetchUser(id: string, options?: Options) {...}' },
    { file_path: 'src/handlers.ts', name_path: 'handleUser', new_body: 'function handleUser() { fetchUser(id, { cache: true }); }' },
    { file_path: 'src/tests.ts', name_path: 'testFetchUser', new_body: 'test(...) { await fetchUser("123", {}); }' }
  ],
  dry_run: true  // Always preview first!
})

Why batch_edit_symbols?

  • All edits validated BEFORE any are applied
  • If one edit fails, NONE are applied (atomic)
  • Prevents half-updated code that doesn't compile

Safe Rename

rename_symbol({ old_name: 'oldName', new_name: 'newName', dry_run: true })
rename_symbol({ old_name: 'oldName', new_name: 'newName' })

Move File Without Breaking Imports

move_file({ source: 'src/utils.ts', destination: 'src/lib/utils.ts', dry_run: true })
move_file({ source: 'src/utils.ts', destination: 'src/lib/utils.ts' })

Understand Impact Before Changes

get_callers({ symbol_name: 'saveUser' })
trace({ symbol: 'handleRequest', direction: 'backward', depth: 3 })

Clean Up After Refactoring

remove_unused_imports({ file_path: 'src/handler.ts' })
organize_imports({ file_path: 'src/handler.ts' })

After Editing

  1. types.check_file() - verify no type errors
  2. test-runner.run_tests() - verify behavior unchanged

Supports

TypeScript, JavaScript, Python, Go, Rust

Install

Download ZIP
Requires askill CLI v1.0+

AI Quality Score

95/100Analyzed 2/13/2026

An exceptional skill definition for an AST-based code editing toolset. It effectively contrasts itself with standard text-based editing, provides a comprehensive reference of available tools, and details specific, safe workflows (including dry runs and atomic batch edits) for common refactoring tasks.

90
95
90
95
95

Metadata

Licenseunknown
Version-
Updated2/5/2026
Publishermajiayu000

Tags

apitesting