Refactor Go code using Comby


This campaign uses Sourcegraph's structural search and Comby to rewrite Go statements from

fmt.Sprintf("%d", number)



The statements are semantically equivalent, but the latter is clearer.

Since the replacements could require importing the strconv package, it uses goimports to update the list of imported packages in all *.go files.


We recommend that use the latest version of Sourcegraph when working with campaigns and that you have a basic understanding of how to create campaign specs and run them. See the following documents for more information:

  1. "Quickstart"
  2. "Introduction to campaigns"

Create the campaign spec

Save the following campaign spec YAML as sprintf-to-itoa.campaign.yaml:

name: sprintf-to-itoa
description: |
  This campaign uses [Comby]( to replace `fmt.Sprintf` calls
  in Go code with the equivalent but clearer `strconv.Iota` call.  

  - repositoriesMatchingQuery: lang:go fmt.Sprintf("%d", :[v]) patterntype:structural

  - 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

  title: Replace fmt.Sprintf with equivalent strconv.Itoa
  body: This campaign replaces `fmt.Sprintf` with `strconv.Itoa`
  branch: campaigns/sprintf-to-itoa
    message: Replacing fmt.Sprintf with strconv.Iota
  published: false

Create the campaign

  1. In your terminal, run this command:

    src campaign preview -f sprintf-to-itoa.campaign.yaml
  2. Wait for it to run and compute the changes for each repository.

  3. Open the preview URL that the command printed out.

  4. Examine the preview. Confirm that the changesets are the ones you intended to track. If not, edit the campaign spec and then rerun the command above.

  5. Click the Apply spec button to create the campaign.

  6. Feel free to then publish the changesets (i.e. create pull requests and merge requests) by modifying the published attribute in the campaign spec and re-running the src campaign preview command.