Refactor Go Code using Comby
This guide explains how to use Comby to refactor Go code in a batch change.
To refactor Go code using Comby in a batch change, use Sourcegraph's structural search and Comby to rewrite Go statements.
From:
GOfmt.Sprintf("%d", number)
To:
GOstrconv.Itoa(number)
The statements are semantically equivalent, but the latter is more precise.
Since the replacements could require importing the strconv
package, it uses goimports
to update the list of imported packages in all *.go
files.
Prerequisites
It's recommended to use the latest version of Sourcegraph when working with Batch Changes.
Before you start, it's better to read the following docs:
Create the batch spec
Save the following batch spec YAML as sprintf-to-itoa.batch.yaml
:
YAMLname: sprintf-to-itoa description: | This batch change uses [Comby](https://comby.dev) to replace `fmt.Sprintf` calls in Go code with the equivalent but clearer `strconv.Iota` call. on: - repositoriesMatchingQuery: lang:go fmt.Sprintf("%d", :[v]) patterntype:structural steps: - run: comby -in-place 'fmt.Sprintf("%d", :[v])' 'strconv.Itoa(:[v])' .go -matcher .go -exclude-dir .,vendor container: comby/comby - run: goimports -w $(find . -type f -name '*.go' -not -path "./vendor/*") container: unibeautify/goimports changesetTemplate: title: Replace fmt.Sprintf with equivalent strconv.Itoa body: This batch change replaces `fmt.Sprintf` with `strconv.Itoa` branch: batch-changes/sprintf-to-itoa commit: message: Replacing fmt.Sprintf with strconv.Iota published: false
Create the batch change
- In your terminal, run the following command:
SHELLsrc batch preview -f sprintf-to-itoa.batch.yaml
- Wait for it to run and compute the changes for each repository
- Open the preview URL that the command printed out
- Examine the preview. Confirm that the changesets are the ones you intended to track. If not, edit the batch spec and then re-run the command above
- Click the Apply button to create the batch change
- Feel free to then publish the changesets (i.e., create pull requests and merge requests) by modifying the
published
attribute in the batch spec and re-running thesrc batch preview
command