cmd/gofmt: align renamed imports

8ulbf1ek  于 6个月前  发布在  Go
关注(0)|答案(4)|浏览(57)

目前,我的导入块看起来像这样:

import (
	"bytes"
	"math"
	"reflect"
	"testing"

	"github.com/google/go-cmp/cmp"
	"github.com/google/go-cmp/cmp/cmpopts"
	"google.golang.org/protobuf/internal/encoding/pack"
	pimpl "google.golang.org/protobuf/internal/impl"
	"google.golang.org/protobuf/internal/pragma"
	ptype "google.golang.org/protobuf/internal/prototype"
	"google.golang.org/protobuf/internal/scalar"
	pref "google.golang.org/protobuf/reflect/protoreflect"
	preg "google.golang.org/protobuf/reflect/protoregistry"
	piface "google.golang.org/protobuf/runtime/protoiface"

	proto2_20180125 "google.golang.org/protobuf/internal/testprotos/legacy/proto2.v1.0.0-20180125-92554152"
)

大多数导入路径具有共享前缀,但缺乏对齐使得这很难看出来。最好的情况下,gofmt 会像这样对齐导入:

import (
	"bytes"
	"math"
	"reflect"
	"testing"

	       "github.com/google/go-cmp/cmp"
	       "github.com/google/go-cmp/cmp/cmpopts"
	       "google.golang.org/protobuf/internal/encoding/pack"
	pimpl  "google.golang.org/protobuf/internal/impl"
	       "google.golang.org/protobuf/internal/pragma"
	ptype  "google.golang.org/protobuf/internal/prototype"
	       "google.golang.org/protobuf/internal/scalar"
	pref   "google.golang.org/protobuf/reflect/protoreflect"
	preg   "google.golang.org/protobuf/reflect/protoregistry"
	piface "google.golang.org/protobuf/runtime/protoiface"

	proto2_20180125 "google.golang.org/protobuf/internal/testprotos/legacy/proto2.v1.0.0-20180125-92554152"
)
dxxyhpgq

dxxyhpgq2#

如果我们决定进行这个更改,我对此没有异议。标记为Go 1.14,待定决定。

vmdwslir

vmdwslir3#

我正在进行一些大规模的变更(LSCs),并观察到频繁的合并冲突是由于对齐更改了比更改严格意义上涉及的行数更多的行(我经常遇到这个问题,尤其是在使用GoMap字面量和尾随注解时)。

我应该指出,虽然对齐提高了可读性,但它也带来了一个负面影响,即当两个作者修改同一个文件并添加/删除一些导入时,合并冲突的可能性更高。

b09cbbtk

b09cbbtk4#

我只是顺便提一下,在Slack上的#tools中讨论过这个问题:
https://gophers.slack.com/archives/C0VPK4Z5E/p1580142385130500
@josharian在his response中提到,他之前曾经以https://github.com/whatsnu/semdiffstat的形式研究过这个问题。
我从未着手研究如何在合并/变基过程中使用类似semdiffstat的工具(这是我的主要用途,与你的用途非常相似)。

相关问题