Skip to content

rinchsan/gosimports

Repository files navigation

Note APIs are likely to change a few times before we reach 1.0.0

gosimports - simpler goimports

  • 🚀 Drop-in replacement for goimports
  • 💯 Prettier than goimports
  • 🔨 Originally forked from golang.org/x/tools/cmd/goimports

Motivation

This gosimports provides one solution to the goimports grouping/ordering problem.

Installation

Go

go install github.com/rinchsan/gosimports/cmd/gosimports@latest

Homebrew

brew install rinchsan/tap/gosimports

Binary

Download binaries from GitHub Releases

Example

import (
	"bufio"

	// basic comments

	/*
		block comments
	*/

	"github.com/rinchsan/gosimports/internal/imports"

	"errors"
	gocmd "github.com/rinchsan/gosimports/internal/gocommand"
	"flag"

	"runtime"
	_ "runtime/pprof" // trailing inline comments
	"strings"

)

$ gosimports -w 👍

import (
	"bufio"
	"errors"
	"flag"
	"runtime"
	_ "runtime/pprof" // trailing inline comments
	"strings"

	gocmd "github.com/rinchsan/gosimports/internal/gocommand"
	"github.com/rinchsan/gosimports/internal/imports"
)

while goimports formatting like below 👎

import (
	"bufio"

	// basic comments

	/*
		block comments
	*/

	"github.com/rinchsan/gosimports/internal/imports"

	"errors"
	"flag"

	gocmd "github.com/rinchsan/gosimports/internal/gocommand"

	"runtime"
	_ "runtime/pprof" // trailing inline comments
	"strings"
)

Module Usage

Installation

go get github.com/rinchsan/gosimports

Example

package main

import (
	"os"

	"github.com/rinchsan/gosimports"
)

func main() {
	src, err := os.ReadFile("gosimports.go")
	if err != nil {
		// error handling
	}

	formatted, err := gosimports.Process("", src, nil)
	if err != nil {
		// error handling
	}

	if err := os.WriteFile("gosimports.go", formatted, 0644); err != nil {
		// error handling
	}
}

License

Copyright 2013 The Go Authors. All rights reserved.

Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.