From ba1030b6b84f810c04a82221a1b1c0a3dbf499a8 Mon Sep 17 00:00:00 2001
From: thomasmodeneis <thomas.modeneis@gmail.com>
Date: Wed, 18 Apr 2018 00:53:50 +0200
Subject: build: enable goimports and varcheck linters (#16446)

---
 Makefile                                |  3 +++
 accounts/usbwallet/ledger.go            |  2 --
 build/ci.go                             |  5 ++++-
 build/goimports.sh                      | 18 ++++++++++++++++++
 cmd/ethkey/main.go                      |  4 ----
 consensus/consensus.go                  |  3 ++-
 core/asm/compiler.go                    |  6 ------
 core/tx_pool.go                         |  2 --
 core/types/transaction.go               |  1 -
 core/vm/instructions.go                 |  1 -
 crypto/bn256/cloudflare/example_test.go | 10 +++++++++-
 les/bloombits.go                        | 10 ----------
 les/serverpool.go                       |  4 ----
 les/sync.go                             |  5 -----
 p2p/discover/udp.go                     |  1 -
 p2p/discv5/net.go                       |  4 +---
 p2p/discv5/nodeevent_string.go          | 22 ++++++----------------
 p2p/discv5/table.go                     |  1 -
 p2p/discv5/udp.go                       | 16 ++++------------
 p2p/discv5/udp_test.go                  |  7 +------
 p2p/enr/enr.go                          |  1 -
 p2p/peer.go                             |  2 --
 swarm/fuse/fuse_dir.go                  |  7 ++++---
 swarm/fuse/swarmfs.go                   |  3 ++-
 swarm/storage/dbstore.go                |  1 -
 swarm/storage/netstore.go               |  5 -----
 whisper/whisperv5/api.go                |  4 ----
 whisper/whisperv6/api.go                |  4 ----
 28 files changed, 54 insertions(+), 98 deletions(-)
 create mode 100755 build/goimports.sh

diff --git a/Makefile b/Makefile
index 3922d6015..5cb9231a1 100644
--- a/Makefile
+++ b/Makefile
@@ -37,6 +37,9 @@ ios:
 test: all
 	build/env.sh go run build/ci.go test
 
+lint: ## Run linters.
+	build/env.sh go run build/ci.go lint
+
 clean:
 	rm -fr build/_workspace/pkg/ $(GOBIN)/*
 
diff --git a/accounts/usbwallet/ledger.go b/accounts/usbwallet/ledger.go
index f5def61d2..7ad32dd1e 100644
--- a/accounts/usbwallet/ledger.go
+++ b/accounts/usbwallet/ledger.go
@@ -53,11 +53,9 @@ const (
 	ledgerOpGetConfiguration ledgerOpcode = 0x06 // Returns specific wallet application configuration
 
 	ledgerP1DirectlyFetchAddress    ledgerParam1 = 0x00 // Return address directly from the wallet
-	ledgerP1ConfirmFetchAddress     ledgerParam1 = 0x01 // Require a user confirmation before returning the address
 	ledgerP1InitTransactionData     ledgerParam1 = 0x00 // First transaction data block for signing
 	ledgerP1ContTransactionData     ledgerParam1 = 0x80 // Subsequent transaction data block for signing
 	ledgerP2DiscardAddressChainCode ledgerParam2 = 0x00 // Do not return the chain code along with the address
-	ledgerP2ReturnAddressChainCode  ledgerParam2 = 0x01 // Require a user confirmation before returning the address
 )
 
 // errLedgerReplyInvalidHeader is the error message returned by a Ledger data exchange
diff --git a/build/ci.go b/build/ci.go
index 91de4e876..5fce3c8e6 100644
--- a/build/ci.go
+++ b/build/ci.go
@@ -329,7 +329,10 @@ func doLint(cmdline []string) {
 	// Run fast linters batched together
 	configs := []string{
 		"--vendor",
+		"--tests",
 		"--disable-all",
+		"--enable=goimports",
+		"--enable=varcheck",
 		"--enable=vet",
 		"--enable=gofmt",
 		"--enable=misspell",
@@ -340,7 +343,7 @@ func doLint(cmdline []string) {
 
 	// Run slow linters one by one
 	for _, linter := range []string{"unconvert", "gosimple"} {
-		configs = []string{"--vendor", "--deadline=10m", "--disable-all", "--enable=" + linter}
+		configs = []string{"--vendor", "--tests", "--deadline=10m", "--disable-all", "--enable=" + linter}
 		build.MustRunCommand(filepath.Join(GOBIN, "gometalinter.v2"), append(configs, packages...)...)
 	}
 }
diff --git a/build/goimports.sh b/build/goimports.sh
new file mode 100755
index 000000000..6d67ef1f0
--- /dev/null
+++ b/build/goimports.sh
@@ -0,0 +1,18 @@
+#!/usr/bin/env bash
+
+find_files() {
+  find . -not \( \
+      \( \
+        -wholename '.github' \
+        -o -wholename './build/_workspace' \
+        -o -wholename './build/bin' \
+        -o -wholename './crypto/bn256' \
+        -o -wholename '*/vendor/*' \
+      \) -prune \
+    \) -name '*.go'
+}
+
+GOFMT="gofmt -s -w";
+GOIMPORTS="goimports -w";
+find_files | xargs $GOFMT;
+find_files | xargs $GOIMPORTS;
\ No newline at end of file
diff --git a/cmd/ethkey/main.go b/cmd/ethkey/main.go
index 2a9e5ee48..4127f5566 100644
--- a/cmd/ethkey/main.go
+++ b/cmd/ethkey/main.go
@@ -53,10 +53,6 @@ var (
 		Name:  "json",
 		Usage: "output JSON instead of human-readable format",
 	}
-	messageFlag = cli.StringFlag{
-		Name:  "message",
-		Usage: "the file that contains the message to sign/verify",
-	}
 )
 
 func main() {
diff --git a/consensus/consensus.go b/consensus/consensus.go
index be5e661c1..5774af1a7 100644
--- a/consensus/consensus.go
+++ b/consensus/consensus.go
@@ -18,12 +18,13 @@
 package consensus
 
 import (
+	"math/big"
+
 	"github.com/ethereum/go-ethereum/common"
 	"github.com/ethereum/go-ethereum/core/state"
 	"github.com/ethereum/go-ethereum/core/types"
 	"github.com/ethereum/go-ethereum/params"
 	"github.com/ethereum/go-ethereum/rpc"
-	"math/big"
 )
 
 // ChainReader defines a small collection of methods needed to access the local
diff --git a/core/asm/compiler.go b/core/asm/compiler.go
index 18dc0877f..3059b0a21 100644
--- a/core/asm/compiler.go
+++ b/core/asm/compiler.go
@@ -17,7 +17,6 @@
 package asm
 
 import (
-	"errors"
 	"fmt"
 	"math/big"
 	"os"
@@ -264,11 +263,6 @@ func (err compileError) Error() string {
 	return fmt.Sprintf("%d syntax error: unexpected %v, expected %v", err.lineno, err.got, err.want)
 }
 
-var (
-	errExpBol            = errors.New("expected beginning of line")
-	errExpElementOrLabel = errors.New("expected beginning of line")
-)
-
 func compileErr(c token, got, want string) error {
 	return compileError{
 		got:    got,
diff --git a/core/tx_pool.go b/core/tx_pool.go
index a554f6611..b21384458 100644
--- a/core/tx_pool.go
+++ b/core/tx_pool.go
@@ -38,8 +38,6 @@ import (
 const (
 	// chainHeadChanSize is the size of channel listening to ChainHeadEvent.
 	chainHeadChanSize = 10
-	// rmTxChanSize is the size of channel listening to RemovedTransactionEvent.
-	rmTxChanSize = 10
 )
 
 var (
diff --git a/core/types/transaction.go b/core/types/transaction.go
index 70d757c94..92fd8f898 100644
--- a/core/types/transaction.go
+++ b/core/types/transaction.go
@@ -33,7 +33,6 @@ import (
 
 var (
 	ErrInvalidSig = errors.New("invalid transaction v, r, s values")
-	errNoSigner   = errors.New("missing signing methods")
 )
 
 // deriveSigner makes a *best* guess about which signer to use.
diff --git a/core/vm/instructions.go b/core/vm/instructions.go
index 1e494a0eb..0689ee39c 100644
--- a/core/vm/instructions.go
+++ b/core/vm/instructions.go
@@ -31,7 +31,6 @@ import (
 var (
 	bigZero                  = new(big.Int)
 	tt255                    = math.BigPow(2, 255)
-	tt256                    = math.BigPow(2, 256)
 	errWriteProtection       = errors.New("evm: write protection")
 	errReturnDataOutOfBounds = errors.New("evm: return data out of bounds")
 	errExecutionReverted     = errors.New("evm: execution reverted")
diff --git a/crypto/bn256/cloudflare/example_test.go b/crypto/bn256/cloudflare/example_test.go
index b2d19807a..6c285995c 100644
--- a/crypto/bn256/cloudflare/example_test.go
+++ b/crypto/bn256/cloudflare/example_test.go
@@ -6,9 +6,12 @@ package bn256
 
 import (
 	"crypto/rand"
+	"testing"
+
+	"github.com/stretchr/testify/require"
 )
 
-func ExamplePair() {
+func TestExamplePair(t *testing.T) {
 	// This implements the tripartite Diffie-Hellman algorithm from "A One
 	// Round Protocol for Tripartite Diffie-Hellman", A. Joux.
 	// http://www.springerlink.com/content/cddc57yyva0hburb/fulltext.pdf
@@ -40,4 +43,9 @@ func ExamplePair() {
 	k3.ScalarMult(k3, c)
 
 	// k1, k2 and k3 will all be equal.
+
+	require.Equal(t, k1, k2)
+	require.Equal(t, k1, k3)
+
+	require.Equal(t, len(np), 4) //Avoid gometalinter varcheck err on np
 }
diff --git a/les/bloombits.go b/les/bloombits.go
index de233d751..2871a9006 100644
--- a/les/bloombits.go
+++ b/les/bloombits.go
@@ -72,13 +72,3 @@ func (eth *LightEthereum) startBloomHandlers() {
 		}()
 	}
 }
-
-const (
-	// bloomConfirms is the number of confirmation blocks before a bloom section is
-	// considered probably final and its rotated bits are calculated.
-	bloomConfirms = 256
-
-	// bloomThrottling is the time to wait between processing two consecutive index
-	// sections. It's useful during chain upgrades to prevent disk overload.
-	bloomThrottling = 100 * time.Millisecond
-)
diff --git a/les/serverpool.go b/les/serverpool.go
index a84c29c3a..da73b4b3c 100644
--- a/les/serverpool.go
+++ b/les/serverpool.go
@@ -73,7 +73,6 @@ const (
 	// and a short term value which is adjusted exponentially with a factor of
 	// pstatRecentAdjust with each dial/connection and also returned exponentially
 	// to the average with the time constant pstatReturnToMeanTC
-	pstatRecentAdjust   = 0.1
 	pstatReturnToMeanTC = time.Hour
 	// node address selection weight is dropped by a factor of exp(-addrFailDropLn) after
 	// each unsuccessful connection (restored after a successful one)
@@ -83,9 +82,6 @@ const (
 	responseScoreTC = time.Millisecond * 100
 	delayScoreTC    = time.Second * 5
 	timeoutPow      = 10
-	// peerSelectMinWeight is added to calculated weights at request peer selection
-	// to give poorly performing peers a little chance of coming back
-	peerSelectMinWeight = 0.005
 	// initStatsWeight is used to initialize previously unknown peers with good
 	// statistics to give a chance to prove themselves
 	initStatsWeight = 1
diff --git a/les/sync.go b/les/sync.go
index c0e17f97d..c3d37e2f3 100644
--- a/les/sync.go
+++ b/les/sync.go
@@ -25,11 +25,6 @@ import (
 	"github.com/ethereum/go-ethereum/light"
 )
 
-const (
-	//forceSyncCycle      = 10 * time.Second // Time interval to force syncs, even if few peers are available
-	minDesiredPeerCount = 5 // Amount of peers desired to start syncing
-)
-
 // syncer is responsible for periodically synchronising with the network, both
 // downloading hashes and blocks as well as handling the announcement handler.
 func (pm *ProtocolManager) syncer() {
diff --git a/p2p/discover/udp.go b/p2p/discover/udp.go
index 524c6e498..f6bcd9708 100644
--- a/p2p/discover/udp.go
+++ b/p2p/discover/udp.go
@@ -49,7 +49,6 @@ var (
 // Timeouts
 const (
 	respTimeout = 500 * time.Millisecond
-	sendTimeout = 500 * time.Millisecond
 	expiration  = 20 * time.Second
 
 	ntpFailureThreshold = 32               // Continuous timeouts after which to check NTP
diff --git a/p2p/discv5/net.go b/p2p/discv5/net.go
index 52c677b62..9b0bd0c80 100644
--- a/p2p/discv5/net.go
+++ b/p2p/discv5/net.go
@@ -36,7 +36,6 @@ import (
 var (
 	errInvalidEvent = errors.New("invalid in current state")
 	errNoQuery      = errors.New("no pending query")
-	errWrongAddress = errors.New("unknown sender address")
 )
 
 const (
@@ -828,11 +827,10 @@ type nodeEvent uint
 //go:generate stringer -type=nodeEvent
 
 const (
-	invalidEvent nodeEvent = iota // zero is reserved
 
 	// Packet type events.
 	// These correspond to packet types in the UDP protocol.
-	pingPacket
+	pingPacket = iota + 1
 	pongPacket
 	findnodePacket
 	neighborsPacket
diff --git a/p2p/discv5/nodeevent_string.go b/p2p/discv5/nodeevent_string.go
index eb696fb8b..38c1993ba 100644
--- a/p2p/discv5/nodeevent_string.go
+++ b/p2p/discv5/nodeevent_string.go
@@ -4,24 +4,14 @@ package discv5
 
 import "strconv"
 
-const (
-	_nodeEvent_name_0 = "invalidEventpingPacketpongPacketfindnodePacketneighborsPacketfindnodeHashPackettopicRegisterPackettopicQueryPackettopicNodesPacket"
-	_nodeEvent_name_1 = "pongTimeoutpingTimeoutneighboursTimeout"
-)
+const _nodeEvent_name = "pongTimeoutpingTimeoutneighboursTimeout"
 
-var (
-	_nodeEvent_index_0 = [...]uint8{0, 12, 22, 32, 46, 61, 79, 98, 114, 130}
-	_nodeEvent_index_1 = [...]uint8{0, 11, 22, 39}
-)
+var _nodeEvent_index = [...]uint8{0, 11, 22, 39}
 
 func (i nodeEvent) String() string {
-	switch {
-	case 0 <= i && i <= 8:
-		return _nodeEvent_name_0[_nodeEvent_index_0[i]:_nodeEvent_index_0[i+1]]
-	case 265 <= i && i <= 267:
-		i -= 265
-		return _nodeEvent_name_1[_nodeEvent_index_1[i]:_nodeEvent_index_1[i+1]]
-	default:
-		return "nodeEvent(" + strconv.FormatInt(int64(i), 10) + ")"
+	i -= 264
+	if i >= nodeEvent(len(_nodeEvent_index)-1) {
+		return "nodeEvent(" + strconv.FormatInt(int64(i+264), 10) + ")"
 	}
+	return _nodeEvent_name[_nodeEvent_index[i]:_nodeEvent_index[i+1]]
 }
diff --git a/p2p/discv5/table.go b/p2p/discv5/table.go
index 2cf05009c..c8d234b93 100644
--- a/p2p/discv5/table.go
+++ b/p2p/discv5/table.go
@@ -38,7 +38,6 @@ const (
 	hashBits   = len(common.Hash{}) * 8
 	nBuckets   = hashBits + 1 // Number of buckets
 
-	maxBondingPingPongs = 16
 	maxFindnodeFailures = 5
 )
 
diff --git a/p2p/discv5/udp.go b/p2p/discv5/udp.go
index 6ce72d2c1..09e5f8b37 100644
--- a/p2p/discv5/udp.go
+++ b/p2p/discv5/udp.go
@@ -36,25 +36,17 @@ const Version = 4
 
 // Errors
 var (
-	errPacketTooSmall   = errors.New("too small")
-	errBadPrefix        = errors.New("bad prefix")
-	errExpired          = errors.New("expired")
-	errUnsolicitedReply = errors.New("unsolicited reply")
-	errUnknownNode      = errors.New("unknown node")
-	errTimeout          = errors.New("RPC timeout")
-	errClockWarp        = errors.New("reply deadline too far in the future")
-	errClosed           = errors.New("socket closed")
+	errPacketTooSmall = errors.New("too small")
+	errBadPrefix      = errors.New("bad prefix")
+	errTimeout        = errors.New("RPC timeout")
 )
 
 // Timeouts
 const (
 	respTimeout = 500 * time.Millisecond
-	queryDelay  = 1000 * time.Millisecond
 	expiration  = 20 * time.Second
 
-	ntpFailureThreshold = 32               // Continuous timeouts after which to check NTP
-	ntpWarningCooldown  = 10 * time.Minute // Minimum amount of time to pass before repeating NTP warning
-	driftThreshold      = 10 * time.Second // Allowed clock drift before warning user
+	driftThreshold = 10 * time.Second // Allowed clock drift before warning user
 )
 
 // RPC request structures
diff --git a/p2p/discv5/udp_test.go b/p2p/discv5/udp_test.go
index 7d3181594..62184aa9d 100644
--- a/p2p/discv5/udp_test.go
+++ b/p2p/discv5/udp_test.go
@@ -24,7 +24,6 @@ import (
 	"reflect"
 	"sync"
 	"testing"
-	"time"
 
 	"github.com/davecgh/go-spew/spew"
 	"github.com/ethereum/go-ethereum/common"
@@ -38,11 +37,7 @@ func init() {
 
 // shared test variables
 var (
-	futureExp          = uint64(time.Now().Add(10 * time.Hour).Unix())
-	testTarget         = NodeID{0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}
-	testRemote         = rpcEndpoint{IP: net.ParseIP("1.1.1.1").To4(), UDP: 1, TCP: 2}
-	testLocalAnnounced = rpcEndpoint{IP: net.ParseIP("2.2.2.2").To4(), UDP: 3, TCP: 4}
-	testLocal          = rpcEndpoint{IP: net.ParseIP("3.3.3.3").To4(), UDP: 5, TCP: 6}
+	testLocal = rpcEndpoint{IP: net.ParseIP("3.3.3.3").To4(), UDP: 5, TCP: 6}
 )
 
 // type udpTest struct {
diff --git a/p2p/enr/enr.go b/p2p/enr/enr.go
index 2c3afb43e..c018895cc 100644
--- a/p2p/enr/enr.go
+++ b/p2p/enr/enr.go
@@ -46,7 +46,6 @@ const ID_SECP256k1_KECCAK = ID("secp256k1-keccak") // the default identity schem
 
 var (
 	errNoID           = errors.New("unknown or unspecified identity scheme")
-	errInvalidSigsize = errors.New("invalid signature size")
 	errInvalidSig     = errors.New("invalid signature")
 	errNotSorted      = errors.New("record key/value pairs are not sorted by key")
 	errDuplicateKey   = errors.New("record contains duplicate key")
diff --git a/p2p/peer.go b/p2p/peer.go
index 477d8c219..73e33418e 100644
--- a/p2p/peer.go
+++ b/p2p/peer.go
@@ -47,8 +47,6 @@ const (
 	discMsg      = 0x01
 	pingMsg      = 0x02
 	pongMsg      = 0x03
-	getPeersMsg  = 0x04
-	peersMsg     = 0x05
 )
 
 // protoHandshake is the RLP structure of the protocol handshake.
diff --git a/swarm/fuse/fuse_dir.go b/swarm/fuse/fuse_dir.go
index 91b236ae8..a7701985e 100644
--- a/swarm/fuse/fuse_dir.go
+++ b/swarm/fuse/fuse_dir.go
@@ -19,12 +19,13 @@
 package fuse
 
 import (
-	"bazil.org/fuse"
-	"bazil.org/fuse/fs"
-	"golang.org/x/net/context"
 	"os"
 	"path/filepath"
 	"sync"
+
+	"bazil.org/fuse"
+	"bazil.org/fuse/fs"
+	"golang.org/x/net/context"
 )
 
 var (
diff --git a/swarm/fuse/swarmfs.go b/swarm/fuse/swarmfs.go
index 2493bdab1..e56d0ad4e 100644
--- a/swarm/fuse/swarmfs.go
+++ b/swarm/fuse/swarmfs.go
@@ -17,9 +17,10 @@
 package fuse
 
 import (
-	"github.com/ethereum/go-ethereum/swarm/api"
 	"sync"
 	"time"
+
+	"github.com/ethereum/go-ethereum/swarm/api"
 )
 
 const (
diff --git a/swarm/storage/dbstore.go b/swarm/storage/dbstore.go
index 421bb061d..1ff42a0c0 100644
--- a/swarm/storage/dbstore.go
+++ b/swarm/storage/dbstore.go
@@ -54,7 +54,6 @@ const (
 
 	// key prefixes for leveldb storage
 	kpIndex = 0
-	kpData  = 1
 )
 
 var (
diff --git a/swarm/storage/netstore.go b/swarm/storage/netstore.go
index 5d4f17deb..0552b84ef 100644
--- a/swarm/storage/netstore.go
+++ b/swarm/storage/netstore.go
@@ -83,11 +83,6 @@ func NewNetStore(hash SwarmHasher, lstore *LocalStore, cloud CloudStore, params
 	}
 }
 
-const (
-	// maximum number of peers that a retrieved message is delivered to
-	requesterCount = 3
-)
-
 var (
 	// timeout interval before retrieval is timed out
 	searchTimeout = 3 * time.Second
diff --git a/whisper/whisperv5/api.go b/whisper/whisperv5/api.go
index ee566625c..9fb22aa75 100644
--- a/whisper/whisperv5/api.go
+++ b/whisper/whisperv5/api.go
@@ -32,10 +32,6 @@ import (
 	"github.com/ethereum/go-ethereum/rpc"
 )
 
-const (
-	filterTimeout = 300 // filters are considered timeout out after filterTimeout seconds
-)
-
 var (
 	ErrSymAsym              = errors.New("specify either a symmetric or an asymmetric key")
 	ErrInvalidSymmetricKey  = errors.New("invalid symmetric key")
diff --git a/whisper/whisperv6/api.go b/whisper/whisperv6/api.go
index 3f3a082af..3f25785fe 100644
--- a/whisper/whisperv6/api.go
+++ b/whisper/whisperv6/api.go
@@ -32,10 +32,6 @@ import (
 	"github.com/ethereum/go-ethereum/rpc"
 )
 
-const (
-	filterTimeout = 300 // filters are considered timeout out after filterTimeout seconds
-)
-
 // List of errors
 var (
 	ErrSymAsym              = errors.New("specify either a symmetric or an asymmetric key")
-- 
cgit v1.2.3