package refactor

import "golang.org/x/tools/internal/refactor"

Package refactor provides operators to compute common textual edits for refactoring tools.

This package should not use features of the analysis API other than analysis.TextEdit.

Index

Functions

func AddImport

func AddImport(info *types.Info, file *ast.File, preferredName, pkgpath, member string, pos token.Pos) (prefix string, edits []analysis.TextEdit)

AddImport returns the prefix (either "pkg." or "") that should be used to qualify references to the desired symbol (member) imported from the specified package, plus any necessary edits to the file's import declaration to add a new import.

If the import already exists, and is accessible at pos, AddImport returns the existing name and no edits. (If the existing import is a dot import, the prefix is "".)

Otherwise, it adds a new import, using a local name derived from the preferred name. To request a blank import, use a preferredName of "_", and discard the prefix result; member is ignored in this case.

AddImport accepts the caller's implicit claim that the imported package declares member.

AddImport does not mutate its arguments.

func DeleteDecl

func DeleteDecl(tokFile *token.File, curDecl inspector.Cursor) []analysis.TextEdit

DeleteDecl returns edits to delete the ast.Decl identified by curDecl.

TODO(adonovan): add test suite.

func DeleteSpec

func DeleteSpec(tokFile *token.File, curSpec inspector.Cursor) []analysis.TextEdit

DeleteSpec returns edits to delete the ValueSpec identified by curSpec.

TODO(adonovan): add test suite. Test for consts as well.

func DeleteStmt

func DeleteStmt(tokFile *token.File, curStmt inspector.Cursor) []analysis.TextEdit

DeleteStmt returns the edits to remove the ast.Stmt identified by curStmt, if it is contained within a BlockStmt, CaseClause, CommClause, or is the STMT in switch STMT; ... {...}. It returns nil otherwise.

func DeleteVar

func DeleteVar(tokFile *token.File, info *types.Info, curId inspector.Cursor) []analysis.TextEdit

DeleteVar returns edits to delete the declaration of a variable whose defining identifier is curId.

It handles variants including: - GenDecl > ValueSpec versus AssignStmt; - RHS expression has effects, or not; - entire statement/declaration may be eliminated; and removes associated comments.

If it cannot make the necessary edits, such as for a function parameter or result, it returns nil.

func FreshName

func FreshName(scope *types.Scope, pos token.Pos, preferred string) string

FreshName returns the name of an identifier that is undefined at the specified position, based on the preferred name.

Source Files

delete.go imports.go refactor.go

Directories

PathSynopsis
internal/refactor/inlinePackage inline implements inlining of Go function calls.
Version
v0.38.0
Published
Oct 8, 2025
Platform
windows/amd64
Imports
12 packages
Last checked
11 minutes ago

Tools for package owners.