From de703513e4e778f49ad361bb7ce3e22fd10d2352 Mon Sep 17 00:00:00 2001 From: 3timeslazy Date: Fri, 29 Mar 2019 17:48:51 +0300 Subject: [PATCH] Linter Cleanup (#276) * linter cleanup * fix default case --- cli/browser/browser.go | 6 +- cli/browser/flags.go | 11 +- cli/browser/helpers.go | 6 +- cli/browser/launcher.go | 2 +- cli/browser/options.go | 6 + cli/repl.go | 5 +- go.mod | 51 +++++- go.sum | 193 +++++++++++++++++++++ pkg/compiler/result.go | 4 - pkg/compiler/visitor.go | 29 +++- pkg/drivers/cdp/document.go | 4 + pkg/drivers/cdp/element.go | 12 +- pkg/drivers/cdp/events/broker.go | 21 +-- pkg/drivers/cdp/helpers.go | 28 ++- pkg/runtime/collections/collection.go | 7 +- pkg/runtime/collections/filter.go | 6 + pkg/runtime/collections/filter_test.go | 9 +- pkg/runtime/collections/sort.go | 7 +- pkg/runtime/core/errors.go | 3 +- pkg/runtime/core/scope.go | 4 +- pkg/runtime/expressions/clauses/collect.go | 17 +- pkg/runtime/expressions/clauses/limit.go | 6 +- pkg/runtime/expressions/param_test.go | 4 +- pkg/runtime/values/int.go | 14 +- pkg/stdlib/arrays/push.go | 2 +- pkg/stdlib/datetime/compare.go | 5 +- pkg/stdlib/html/document.go | 15 +- pkg/stdlib/math/median.go | 11 +- pkg/stdlib/math/percentile.go | 13 +- pkg/stdlib/math/stddev_population.go | 6 +- pkg/stdlib/math/stddev_sample.go | 6 +- pkg/stdlib/math/variance.go | 6 +- pkg/stdlib/math/variance_population.go | 2 +- pkg/stdlib/math/variance_sample.go | 2 +- pkg/stdlib/objects/zip.go | 4 +- pkg/stdlib/strings/encode.go | 2 +- pkg/stdlib/strings/find.go | 4 +- pkg/stdlib/strings/fmt.go | 6 +- pkg/stdlib/strings/like.go | 12 +- pkg/stdlib/strings/regex.go | 2 +- pkg/stdlib/strings/substr.go | 2 +- 41 files changed, 408 insertions(+), 147 deletions(-) diff --git a/cli/browser/browser.go b/cli/browser/browser.go index a28f6531..1593885c 100644 --- a/cli/browser/browser.go +++ b/cli/browser/browser.go @@ -40,12 +40,16 @@ func (b *Browser) DebuggingPort() int { func (b *Browser) Close() error { var err error - if runtime.GOOS != "windows" { + if runtime.GOOS != goosWindows { err = b.cmd.Process.Signal(os.Interrupt) } else { err = b.cmd.Process.Kill() } + if err != nil { + return err + } + _, err = b.cmd.Process.Wait() if err != nil { diff --git a/cli/browser/flags.go b/cli/browser/flags.go index da0fadf2..7288e4d1 100644 --- a/cli/browser/flags.go +++ b/cli/browser/flags.go @@ -2,9 +2,10 @@ package browser import ( "fmt" - "github.com/pkg/errors" "sort" "strings" + + "github.com/pkg/errors" ) type Flags map[string]interface{} @@ -61,8 +62,6 @@ func (flags Flags) Has(arg string) bool { } func (flags Flags) List() []string { - var list []string - orderedFlags := make([]string, 0, 10) for arg := range flags { @@ -71,7 +70,9 @@ func (flags Flags) List() []string { sort.Strings(orderedFlags) - for _, arg := range orderedFlags { + list := make([]string, len(orderedFlags)) + + for i, arg := range orderedFlags { val, err := flags.Get(arg) if err != nil { @@ -87,7 +88,7 @@ func (flags Flags) List() []string { arg = fmt.Sprintf("--%s", arg) } - list = append(list, arg) + list[i] = arg } return list diff --git a/cli/browser/helpers.go b/cli/browser/helpers.go index e92adb9b..818b82d1 100644 --- a/cli/browser/helpers.go +++ b/cli/browser/helpers.go @@ -9,7 +9,7 @@ import ( func resolveExecutablePath() (path string) { switch runtime.GOOS { - case "darwin": + case goosDarwin: for _, c := range []string{ "/Applications/Google Chrome Canary.app", "/Applications/Google Chrome.app", @@ -22,7 +22,7 @@ func resolveExecutablePath() (path string) { } } - case "linux": + case goosLinux: for _, c := range []string{ "headless_shell", "chromium", @@ -35,7 +35,7 @@ func resolveExecutablePath() (path string) { } } - case "windows": + case goosWindows: } return diff --git a/cli/browser/launcher.go b/cli/browser/launcher.go index 84420c30..afea06d2 100644 --- a/cli/browser/launcher.go +++ b/cli/browser/launcher.go @@ -41,7 +41,7 @@ func Launch(setters ...Option) (*Browser, error) { flags.SetN("mute-audio") } - if runtime.GOOS == "windows" { + if runtime.GOOS == goosWindows { flags.SetN("disable-gpu") } diff --git a/cli/browser/options.go b/cli/browser/options.go index 2f79a1ed..a714e6c9 100644 --- a/cli/browser/options.go +++ b/cli/browser/options.go @@ -18,6 +18,12 @@ type ( } ) +const ( + goosWindows = "windows" + goosLinux = "linux" + goosDarwin = "darwin" +) + func WithoutDefaultArgs() Option { return func(opts *Options) { opts.ignoreDefaultArgs = true diff --git a/cli/repl.go b/cli/repl.go index 8a7e8a94..cd50472e 100644 --- a/cli/repl.go +++ b/cli/repl.go @@ -3,11 +3,12 @@ package cli import ( "context" "fmt" - "github.com/MontFerret/ferret/pkg/parser/fql" "os" "os/signal" "strings" + "github.com/MontFerret/ferret/pkg/parser/fql" + "github.com/MontFerret/ferret/pkg/compiler" "github.com/MontFerret/ferret/pkg/runtime" "github.com/MontFerret/ferret/pkg/runtime/logging" @@ -74,7 +75,7 @@ func Repl(version string, opts Options) { line = strings.TrimSpace(line) - if len(line) == 0 { + if line == "" { continue } diff --git a/go.mod b/go.mod index 535a44fb..f3668439 100644 --- a/go.mod +++ b/go.mod @@ -3,25 +3,74 @@ module github.com/MontFerret/ferret go 1.12 require ( + github.com/OpenPeeDeeP/depguard v0.0.0-20181229194401-1f388ab2d810 // indirect github.com/PuerkitoBio/goquery v1.5.0 + github.com/StackExchange/wmi v0.0.0-20181212234831-e0a55b97c705 // indirect github.com/antlr/antlr4 v0.0.0-20190325153624-837aa60e2c47 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e + github.com/coreos/etcd v3.3.12+incompatible // indirect github.com/corpix/uarand v0.0.0 github.com/derekparker/trie v0.0.0-20190322172448-1ce4922c7ad9 + github.com/fatih/color v1.7.0 // indirect + github.com/go-critic/go-critic v0.3.4 // indirect + github.com/go-ole/go-ole v1.2.4 // indirect + github.com/go-toolsmith/astcast v1.0.0 // indirect + github.com/go-toolsmith/astcopy v1.0.0 // indirect + github.com/go-toolsmith/astfmt v1.0.0 // indirect + github.com/go-toolsmith/astp v1.0.0 // indirect + github.com/go-toolsmith/pkgload v1.0.0 // indirect + github.com/go-toolsmith/typep v1.0.0 // indirect github.com/gofrs/uuid v3.2.0+incompatible + github.com/gogo/protobuf v1.2.1 // indirect + github.com/golang/mock v1.2.0 // indirect + github.com/golang/protobuf v1.3.1 // indirect + github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6 // indirect + github.com/golangci/go-tools v0.0.0-20190124090046-35a9f45a5db0 // indirect + github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d // indirect + github.com/golangci/gofmt v0.0.0-20181222123516-0b8337e80d98 // indirect + github.com/golangci/golangci-lint v1.15.0 // indirect + github.com/golangci/gosec v0.0.0-20180901114220-8afd9cbb6cfb // indirect + github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219 // indirect + github.com/golangci/revgrep v0.0.0-20180812185044-276a5c0a1039 // indirect + github.com/gopherjs/gopherjs v0.0.0-20190328170749-bb2674552d8f // indirect github.com/gorilla/css v1.0.0 github.com/gorilla/websocket v1.4.0 // indirect + github.com/kisielk/errcheck v1.2.0 // indirect + github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect + github.com/kr/pty v1.1.4 // indirect github.com/labstack/echo v3.3.10+incompatible github.com/labstack/gommon v0.2.8 // indirect github.com/mafredri/cdp v0.22.0 github.com/mattn/go-colorable v0.1.1 // indirect github.com/mattn/go-isatty v0.0.7 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mozilla/tls-observatory v0.0.0-20190313211306-43961c0c7a1f // indirect github.com/natefinch/lumberjack v2.0.0+incompatible + github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d // indirect + github.com/onsi/ginkgo v1.8.0 // indirect + github.com/onsi/gomega v1.5.0 // indirect github.com/pkg/errors v0.8.1 + github.com/rogpeppe/go-internal v1.2.2 // indirect github.com/rs/zerolog v1.13.0 + github.com/ryanuber/go-glob v1.0.0 // indirect github.com/sethgrid/pester v0.0.0-20190127155807-68a33a018ad0 + github.com/shirou/gopsutil v2.18.12+incompatible // indirect + github.com/shurcooL/go v0.0.0-20190121191506-3fef8c783dec // indirect + github.com/sirupsen/logrus v1.4.0 // indirect + github.com/smartystreets/assertions v0.0.0-20190215210624-980c5ac6f3ac // indirect github.com/smartystreets/goconvey v0.0.0-20190306220146-200a235640ff + github.com/spf13/afero v1.2.2 // indirect + github.com/spf13/cobra v0.0.3 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/viper v1.3.2 // indirect + github.com/stretchr/testify v1.3.0 // indirect + github.com/ugorji/go/codec v0.0.0-20190320090025-2dc34c0b8780 // indirect github.com/valyala/fasttemplate v1.0.1 // indirect - golang.org/x/net v0.0.0-20190327091125-710a502c58a2 + golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c // indirect + golang.org/x/net v0.0.0-20190328230028-74de082e2cca golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 + golang.org/x/sys v0.0.0-20190322080309-f49334f85ddc // indirect + golang.org/x/tools v0.0.0-20190328211700-ab21143f2384 // indirect + mvdan.cc/unparam v0.0.0-20190310220240-1b9ccfa71afe // indirect + sourcegraph.com/sqs/pbtypes v1.0.0 // indirect ) diff --git a/go.sum b/go.sum index 1aa5fe52..9ebd9f15 100644 --- a/go.sum +++ b/go.sum @@ -1,59 +1,252 @@ +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/OpenPeeDeeP/depguard v0.0.0-20180806142446-a69c782687b2/go.mod h1:7/4sitnI9YlQgTLLk734QlzXT8DuHVnAyztLplQjk+o= +github.com/OpenPeeDeeP/depguard v0.0.0-20181229194401-1f388ab2d810/go.mod h1:7/4sitnI9YlQgTLLk734QlzXT8DuHVnAyztLplQjk+o= github.com/PuerkitoBio/goquery v1.5.0 h1:uGvmFXOA73IKluu/F84Xd1tt/z07GYm8X49XKHP7EJk= github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/StackExchange/wmi v0.0.0-20181212234831-e0a55b97c705/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRySc45o= github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/antlr/antlr4 v0.0.0-20190325153624-837aa60e2c47 h1:Lp5nUoQzppfVmfZadpzAytNyb5IMtxyOJLzoQS5dExg= github.com/antlr/antlr4 v0.0.0-20190325153624-837aa60e2c47/go.mod h1:T7PbCXFs94rrTttyxjbyT5+/1V8T2TYDejxUfHJjw1Y= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.12+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/corpix/uarand v0.0.0 h1:mNbzro1GwUcZ1hmO2rWXytkR3JBxNxxctzjyuhO+Aig= github.com/corpix/uarand v0.0.0/go.mod h1:JSm890tOkDN+M1jqN8pUGDKnzJrsVbJwSMHBY4zwz7M= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/derekparker/trie v0.0.0-20190322172448-1ce4922c7ad9 h1:aSaTVlEXc2QKl4fzXU1tMYCjlrSc2mA4DZtiVfckQHo= github.com/derekparker/trie v0.0.0-20190322172448-1ce4922c7ad9/go.mod h1:D6ICZm05D9VN1n/8iOtBxLpXtoGp6HDFUJ1RNVieOSE= +github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/go-critic/go-critic v0.0.0-20181204210945-ee9bf5809ead/go.mod h1:3MzXZKJdeXqdU9cj+rvZdNiN7SZ8V9OjybF8loZDmHU= +github.com/go-critic/go-critic v0.3.4/go.mod h1:AHR42Lk/E/aOznsrYdMYeIQS5RH10HZHSqP+rD6AJrc= +github.com/go-lintpack/lintpack v0.5.1/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= +github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= +github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= +github.com/go-toolsmith/astcast v0.0.0-20181028201508-b7a89ed70af1/go.mod h1:TEo3Ghaj7PsZawQHxT/oBvo4HK/sl1RcuUHDKTTju+o= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v0.0.0-20180903214859-79b422d080c4/go.mod h1:c9CPdq2AzM8oPomdlPniEfPAC6g1s7NqZzODt8y6ib8= +github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= +github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= +github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= +github.com/go-toolsmith/strparse v0.0.0-20180903215201-830b6daa1241/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v0.0.0-20181030061450-d63dc7650676/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/errcheck v0.0.0-20181003203344-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= +github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= +github.com/golangci/go-tools v0.0.0-20180109140146-35a9f45a5db0/go.mod h1:unzUULGw35sjyOYjUt0jMTXqHlZPpPc6e+xfO4cd6mM= +github.com/golangci/go-tools v0.0.0-20190124090046-35a9f45a5db0/go.mod h1:unzUULGw35sjyOYjUt0jMTXqHlZPpPc6e+xfO4cd6mM= +github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= +github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= +github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= +github.com/golangci/gofmt v0.0.0-20181105071733-0b8337e80d98/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/gofmt v0.0.0-20181222123516-0b8337e80d98/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.15.0 h1:Cvf5J2U5C5kAHSXxyLRJ38/OqdJbiU7SAJRYvWgO/b0= +github.com/golangci/golangci-lint v1.15.0/go.mod h1:iEsyA2h6yMxPzFAlb/Q9UuXBrXIDtXkbUoukuqUAX/8= +github.com/golangci/gosec v0.0.0-20180901114220-66fb7fc33547/go.mod h1:0qUabqiIQgfmlAmulqxyiGkkyF6/tOGSnY2cnPVwrzU= +github.com/golangci/gosec v0.0.0-20180901114220-8afd9cbb6cfb/go.mod h1:ON/c2UR0VAAv6ZEAFKhjCLplESSmRFfZcDLASbI1GWo= +github.com/golangci/govet v0.0.0-20180818181408-44ddbe260190/go.mod h1:pPwb+AK755h3/r73avHz5bEN6sa51/2HEZlLaV53hCo= +github.com/golangci/ineffassign v0.0.0-20180808204949-2ee8f2867dde/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= +github.com/golangci/lint-1 v0.0.0-20180610141402-4bf9709227d1/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= +github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= +github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/revgrep v0.0.0-20180812185044-276a5c0a1039/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20190328170749-bb2674552d8f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/gotool v0.0.0-20161130080628-0de1eaf82fa3/go.mod h1:jxZFDH7ILpTPQTk+E2s+z4CUas9lVNjIuKR4c5/zKgM= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.4/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/labstack/echo v3.3.10+incompatible h1:pGRcYk231ExFAyoAjAfD85kQzRJCRI8bbnE7CX5OEgg= github.com/labstack/echo v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s= github.com/labstack/gommon v0.2.8 h1:JvRqmeZcfrHC5u6uVleB4NxxNbzx6gpbJiQknDbKQu0= github.com/labstack/gommon v0.2.8/go.mod h1:/tj9csK2iPSBvn+3NLM9e52usepMtrd5ilFYA+wQNJ4= +github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/mafredri/cdp v0.22.0 h1:BV17j8hXLDWczo2SZIAFuOjMpQMIOq5DOcd9sgB2hv0= github.com/mafredri/cdp v0.22.0/go.mod h1:hgdiA0yp1uqhSaDOHJWPgXpMbh+LAfUdD9vbN2AM8gE= +github.com/magiconair/properties v1.7.6/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1 h1:G1f5SKeVxmagw/IyvzvtZE4Gybcc4Tr1tf7I8z0XgOg= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.7 h1:UvyT9uN+3r7yLEYSlJsbQGdsaB/a0DlgWP3pql6iwOc= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= +github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mozilla/tls-observatory v0.0.0-20180409132520-8791a200eb40/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= +github.com/mozilla/tls-observatory v0.0.0-20190313211306-43961c0c7a1f/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM= github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk= +github.com/nbutton23/zxcvbn-go v0.0.0-20160627004424-a22cb81b2ecd/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= +github.com/nbutton23/zxcvbn-go v0.0.0-20171102151520-eafdab6b0663/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= +github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/pelletier/go-toml v1.1.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.1/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/zerolog v1.13.0 h1:hSNcYHyxDWycfePW7pUI8swuFkcSMPKh3E63Pokg1Hk= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= +github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= github.com/sethgrid/pester v0.0.0-20190127155807-68a33a018ad0 h1:X9XMOYjxEfAYSy3xK1DzO5dMkkWhs9E9UCcS1IERx2k= github.com/sethgrid/pester v0.0.0-20190127155807-68a33a018ad0/go.mod h1:Ad7IjTpvzZO8Fl0vh9AzQ+j/jYZfyp2diGwI8m5q+ns= +github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil v2.18.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go v0.0.0-20190121191506-3fef8c783dec/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v0.0.0-20190215210624-980c5ac6f3ac h1:wbW+Bybf9pXxnCFAOWZTqkRjAc7rAIwo2e1ArUhiHxg= +github.com/smartystreets/assertions v0.0.0-20190215210624-980c5ac6f3ac/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20190306220146-200a235640ff h1:86HlEv0yBCry9syNuylzqznKXDK11p6D0DT596yNMys= github.com/smartystreets/goconvey v0.0.0-20190306220146-200a235640ff/go.mod h1:KSQcGKpxUMHk3nbYzs/tIBAM2iDooCn0BmttHOJEbLs= +github.com/spf13/afero v1.1.0/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.2/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/jwalterweatherman v0.0.0-20180109140146-7c0cea34c8ec/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.0.2/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/ugorji/go v1.1.2/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v0.0.0-20190320090025-2dc34c0b8780/go.mod h1:iT03XoTwV7xq/+UGwKO3UbC1nNNlopQiY61beSdrtOA= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.0.1 h1:tY9CJiPnMXf1ERmG2EyK7gNUd+c6RKGD0IfU8WdUSz8= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +golang.org/x/crypto v0.0.0-20180505025534-4ec37c66abab/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c h1:Vj5n4GlwjmQteupaxJ9+0FNOmBrHfq7vN4btdGoDZgI= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20170915142106-8351a756f30f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190327091125-710a502c58a2 h1:17UhVDrPb40BH5k6cyeb2V/7QlBNdo/a0+r0dtK+Utw= golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190328230028-74de082e2cca h1:hyA6yiAgbUwuWqtscNvWAI7U1CtlaD1KilQ6iudt1aI= +golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20171026204733-164713f0dfce/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190322080309-f49334f85ddc/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.0.0-20170915090833-1cbadb444a80/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/tools v0.0.0-20170915040203-e531a2a1c15f/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181205014116-22934f0fdb62/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190121143147-24cd39ecf745/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190125232054-379209517ffe/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190213192042-740235f6c0d8/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20190124213536-fbb59629db34/go.mod h1:H6SUd1XjIs+qQCyskXg5OFSrilMRUkD8ePJpHKDPaeY= +mvdan.cc/unparam v0.0.0-20190310220240-1b9ccfa71afe/go.mod h1:BnhuWBAqxH3+J5bDybdxgw5ZfS+DsVd4iylsKQePN8o= +sourcegraph.com/sourcegraph/go-diff v0.5.1-0.20190210232911-dee78e514455/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= +sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= +sourcegraph.com/sqs/pbtypes v1.0.0/go.mod h1:3AciMUv4qUuRHRHhOG4TZOB+72GdPVz5k+c648qsFS4= diff --git a/pkg/compiler/result.go b/pkg/compiler/result.go index bdeb1990..16928e16 100644 --- a/pkg/compiler/result.go +++ b/pkg/compiler/result.go @@ -7,10 +7,6 @@ type result struct { err error } -func newResult(data interface{}, err error) *result { - return &result{data, err} -} - func newResultFrom(fn visitorFn) *result { out, err := fn() diff --git a/pkg/compiler/visitor.go b/pkg/compiler/visitor.go index e412e6f9..abcadc21 100644 --- a/pkg/compiler/visitor.go +++ b/pkg/compiler/visitor.go @@ -2,6 +2,9 @@ package compiler import ( "fmt" + "strconv" + "strings" + "github.com/MontFerret/ferret/pkg/parser/fql" "github.com/MontFerret/ferret/pkg/runtime" "github.com/MontFerret/ferret/pkg/runtime/collections" @@ -12,8 +15,6 @@ import ( "github.com/MontFerret/ferret/pkg/runtime/expressions/operators" "github.com/antlr/antlr4/runtime/Go/antlr" "github.com/pkg/errors" - "strconv" - "strings" ) type ( @@ -193,6 +194,10 @@ func (v *visitor) doVisitForExpression(ctx *fql.ForExpressionContext, scope *sco srcExp, ) + if err != nil { + return nil, err + } + // Clauses. // We put clauses parsing before parsing the query body because COLLECT clause overrides scope variables for _, e := range ctx.AllForExpressionBody() { @@ -810,11 +815,12 @@ func (v *visitor) doVisitObjectLiteral(ctx *fql.ObjectLiteralContext, scope *sco computedProp := assignment.ComputedPropertyName() shortHand := assignment.ShorthandPropertyName() - if prop != nil { + switch { + case prop != nil: name, err = v.doVisitPropertyNameContext(prop.(*fql.PropertyNameContext), scope) - } else if computedProp != nil { + case computedProp != nil: name, err = v.doVisitComputedPropertyNameContext(computedProp.(*fql.ComputedPropertyNameContext), scope) - } else { + default: name, err = v.doVisitShorthandPropertyNameContext(shortHand.(*fql.ShorthandPropertyNameContext), scope) } @@ -943,7 +949,7 @@ func (v *visitor) doVisitStringLiteral(ctx *fql.StringLiteralContext) (core.Expr } func (v *visitor) doVisitBooleanLiteral(ctx *fql.BooleanLiteralContext) (core.Expression, error) { - return literals.NewBooleanLiteral(strings.ToUpper(ctx.GetText()) == "TRUE"), nil + return literals.NewBooleanLiteral(strings.EqualFold(ctx.GetText(), "TRUE")), nil } func (v *visitor) doVisitNoneLiteral(_ *fql.NoneLiteralContext) (core.Expression, error) { @@ -1205,14 +1211,19 @@ func (v *visitor) doVisitArrayOperator(ctx *fql.ExpressionContext, scope *scope) var comparator core.OperatorExpression var err error - if ctx.InOperator() != nil { + switch { + case ctx.InOperator() != nil: comparator, err = v.doVisitInOperator(ctx, scope) - } else if ctx.EqualityOperator() != nil { + case ctx.EqualityOperator() != nil: comparator, err = v.doVisitEqualityOperator(ctx, scope) - } else { + default: return nil, v.unexpectedToken(ctx) } + if err != nil { + return nil, err + } + exps, err := v.doVisitAllExpressions(ctx.AllExpression(), scope) if err != nil { diff --git a/pkg/drivers/cdp/document.go b/pkg/drivers/cdp/document.go index c7c56b67..682d2469 100644 --- a/pkg/drivers/cdp/document.go +++ b/pkg/drivers/cdp/document.go @@ -963,6 +963,10 @@ func (doc *HTMLDocument) PrintToPDF(ctx context.Context, params drivers.PDFParam func (doc *HTMLDocument) CaptureScreenshot(ctx context.Context, params drivers.ScreenshotParams) (values.Binary, error) { metrics, err := doc.client.Page.GetLayoutMetrics(ctx) + if err != nil { + return values.NewBinary(nil), err + } + if params.Format == drivers.ScreenshotFormatJPEG && params.Quality < 0 && params.Quality > 100 { params.Quality = 100 } diff --git a/pkg/drivers/cdp/element.go b/pkg/drivers/cdp/element.go index 84ba7c24..23bf4d98 100644 --- a/pkg/drivers/cdp/element.go +++ b/pkg/drivers/cdp/element.go @@ -973,7 +973,11 @@ func (el *HTMLElement) Select(ctx context.Context, value *values.Array) (*values false, ) - el.client.DOM.RemoveAttribute(ctx, dom.NewRemoveAttributeArgs(el.id.nodeID, attrID)) + if err != nil { + return nil, err + } + + err = el.client.DOM.RemoveAttribute(ctx, dom.NewRemoveAttributeArgs(el.id.nodeID, attrID)) if err != nil { return nil, err @@ -1022,7 +1026,11 @@ func (el *HTMLElement) ScrollIntoView(ctx context.Context) error { id.String(), ), false, false) - el.client.DOM.RemoveAttribute(ctx, dom.NewRemoveAttributeArgs(el.id.nodeID, attrID)) + if err != nil { + return err + } + + err = el.client.DOM.RemoveAttribute(ctx, dom.NewRemoveAttributeArgs(el.id.nodeID, attrID)) return err } diff --git a/pkg/drivers/cdp/events/broker.go b/pkg/drivers/cdp/events/broker.go index caf72ded..b0cc7c24 100644 --- a/pkg/drivers/cdp/events/broker.go +++ b/pkg/drivers/cdp/events/broker.go @@ -2,10 +2,11 @@ package events import ( "context" - "github.com/MontFerret/ferret/pkg/drivers" "reflect" "sync" + "github.com/MontFerret/ferret/pkg/drivers" + "github.com/MontFerret/ferret/pkg/runtime/core" "github.com/mafredri/cdp/protocol/dom" "github.com/mafredri/cdp/protocol/page" @@ -30,16 +31,16 @@ type ( } ) -var ( +const ( //revive:disable-next-line:var-declaration - EventError Event = 0 - EventLoad Event = 1 - EventReload Event = 2 - EventAttrModified Event = 3 - EventAttrRemoved Event = 4 - EventChildNodeCountUpdated Event = 5 - EventChildNodeInserted Event = 6 - EventChildNodeRemoved Event = 7 + EventError = Event(iota) + EventLoad + EventReload + EventAttrModified + EventAttrRemoved + EventChildNodeCountUpdated + EventChildNodeInserted + EventChildNodeRemoved ) func NewEventBroker( diff --git a/pkg/drivers/cdp/helpers.go b/pkg/drivers/cdp/helpers.go index ac238e54..b26511ab 100644 --- a/pkg/drivers/cdp/helpers.go +++ b/pkg/drivers/cdp/helpers.go @@ -89,11 +89,12 @@ func computeQuadArea(quads []Quad) float64 { func getClickablePoint(ctx context.Context, client *cdp.Client, id *HTMLElementIdentity) (Quad, error) { qargs := dom.NewGetContentQuadsArgs() - if id.objectID != "" { + switch { + case id.objectID != "": qargs.SetObjectID(id.objectID) - } else if id.backendID != 0 { + case id.backendID != 0: qargs.SetBackendNodeID(id.backendID) - } else { + default: qargs.SetNodeID(id.nodeID) } @@ -168,9 +169,10 @@ func parseAttrs(attrs []string) *values.Object { func loadInnerHTML(ctx context.Context, client *cdp.Client, id *HTMLElementIdentity) (values.String, error) { var objID runtime.RemoteObjectID - if id.objectID != "" { + switch { + case id.objectID != "": objID = id.objectID - } else if id.backendID > 0 { + case id.backendID > 0: repl, err := client.DOM.ResolveNode(ctx, dom.NewResolveNodeArgs().SetBackendNodeID(id.backendID)) if err != nil { @@ -182,7 +184,7 @@ func loadInnerHTML(ctx context.Context, client *cdp.Client, id *HTMLElementIdent } objID = *repl.Object.ObjectID - } else { + default: repl, err := client.DOM.ResolveNode(ctx, dom.NewResolveNodeArgs().SetNodeID(id.nodeID)) if err != nil { @@ -219,9 +221,10 @@ func loadInnerHTML(ctx context.Context, client *cdp.Client, id *HTMLElementIdent func loadInnerText(ctx context.Context, client *cdp.Client, id *HTMLElementIdentity) (values.String, error) { var objID runtime.RemoteObjectID - if id.objectID != "" { + switch { + case id.objectID != "": objID = id.objectID - } else if id.backendID > 0 { + case id.backendID > 0: repl, err := client.DOM.ResolveNode(ctx, dom.NewResolveNodeArgs().SetBackendNodeID(id.backendID)) if err != nil { @@ -233,7 +236,7 @@ func loadInnerText(ctx context.Context, client *cdp.Client, id *HTMLElementIdent } objID = *repl.Object.ObjectID - } else { + default: repl, err := client.DOM.ResolveNode(ctx, dom.NewResolveNodeArgs().SetNodeID(id.nodeID)) if err != nil { @@ -416,8 +419,6 @@ func fromDriverCookie(url string, cookie drivers.HTTPCookie) network.CookieParam sameSite = network.CookieSameSiteLax case drivers.SameSiteStrictMode: sameSite = network.CookieSameSiteStrict - default: - sameSite = network.CookieSameSiteNotSet } if cookie.Expires == emptyExpires { @@ -456,13 +457,8 @@ func toDriverCookie(c network.Cookie) drivers.HTTPCookie { switch c.SameSite { case network.CookieSameSiteLax: sameSite = drivers.SameSiteLaxMode - break case network.CookieSameSiteStrict: sameSite = drivers.SameSiteStrictMode - break - default: - sameSite = drivers.SameSiteDefaultMode - break } return drivers.HTTPCookie{ diff --git a/pkg/runtime/collections/collection.go b/pkg/runtime/collections/collection.go index add9a739..327d964b 100644 --- a/pkg/runtime/collections/collection.go +++ b/pkg/runtime/collections/collection.go @@ -2,6 +2,7 @@ package collections import ( "context" + "github.com/MontFerret/ferret/pkg/runtime/core" "github.com/MontFerret/ferret/pkg/runtime/values" ) @@ -34,11 +35,7 @@ type ( } ) -func NewCoreIterator( - valVar, - keyVar string, - values core.Iterator, -) (Iterator, error) { +func NewCoreIterator(valVar, keyVar string, values core.Iterator) (Iterator, error) { return &coreIterator{valVar, keyVar, values}, nil } diff --git a/pkg/runtime/collections/filter.go b/pkg/runtime/collections/filter.go index 925e9668..fb292230 100644 --- a/pkg/runtime/collections/filter.go +++ b/pkg/runtime/collections/filter.go @@ -2,6 +2,7 @@ package collections import ( "context" + "github.com/MontFerret/ferret/pkg/runtime/core" ) @@ -38,8 +39,13 @@ func (iterator *FilterIterator) Next(ctx context.Context, scope *core.Scope) (*c return nil, nil } + // TODO: test case when predicate return not nil take, err := iterator.predicate(ctx, nextScope) + if err != nil { + return nil, err + } + if take == true { return nextScope, nil } diff --git a/pkg/runtime/collections/filter_test.go b/pkg/runtime/collections/filter_test.go index 171af5c2..8769e347 100644 --- a/pkg/runtime/collections/filter_test.go +++ b/pkg/runtime/collections/filter_test.go @@ -3,12 +3,13 @@ package collections_test import ( "context" "encoding/json" + "math" + "testing" + "github.com/MontFerret/ferret/pkg/runtime/collections" "github.com/MontFerret/ferret/pkg/runtime/core" "github.com/MontFerret/ferret/pkg/runtime/values" . "github.com/smartystreets/goconvey/convey" - "math" - "testing" ) func TestFilter(t *testing.T) { @@ -23,7 +24,7 @@ func TestFilter(t *testing.T) { predicate := func(_ context.Context, scope *core.Scope) (bool, error) { i := float64(scope.MustGetVariable(collections.DefaultValueVar).Unwrap().(int)) - calc := float64(i / 2) + calc := i / 2 return calc == math.Floor(calc), nil } @@ -58,7 +59,7 @@ func TestFilter(t *testing.T) { return false, nil } - calc := float64(i / 2) + calc := i / 2 return calc == math.Floor(calc), nil } diff --git a/pkg/runtime/collections/sort.go b/pkg/runtime/collections/sort.go index 5fb3c58a..921e71e8 100644 --- a/pkg/runtime/collections/sort.go +++ b/pkg/runtime/collections/sort.go @@ -2,9 +2,10 @@ package collections import ( "context" - "github.com/MontFerret/ferret/pkg/runtime/core" "sort" "strings" + + "github.com/MontFerret/ferret/pkg/runtime/core" ) type ( @@ -32,7 +33,7 @@ const ( ) func SortDirectionFromString(str string) SortDirection { - if strings.ToUpper(str) == "DESC" { + if strings.EqualFold(str, "DESC") { return SortDirectionDesc } @@ -136,7 +137,7 @@ func (iterator *SortIterator) sort(ctx context.Context, scope *core.Scope) ([]*c break } - eq = eq * int64(comp.direction) + eq *= int64(comp.direction) if eq == -1 { out = true diff --git a/pkg/runtime/core/errors.go b/pkg/runtime/core/errors.go index 8288a870..cddc6967 100644 --- a/pkg/runtime/core/errors.go +++ b/pkg/runtime/core/errors.go @@ -2,8 +2,9 @@ package core import ( "fmt" - "github.com/pkg/errors" "strings" + + "github.com/pkg/errors" ) var ( diff --git a/pkg/runtime/core/scope.go b/pkg/runtime/core/scope.go index 81fd702f..22e49473 100644 --- a/pkg/runtime/core/scope.go +++ b/pkg/runtime/core/scope.go @@ -25,9 +25,7 @@ func NewRootScope() (*Scope, CloseFunc) { disposables: make([]io.Closer, 0, 10), } - return newScope(root, nil), func() error { - return root.Close() - } + return newScope(root, nil), root.Close } func (s *RootScope) AddDisposable(disposable io.Closer) { diff --git a/pkg/runtime/expressions/clauses/collect.go b/pkg/runtime/expressions/clauses/collect.go index 68227a76..5c7c13c2 100644 --- a/pkg/runtime/expressions/clauses/collect.go +++ b/pkg/runtime/expressions/clauses/collect.go @@ -2,6 +2,7 @@ package clauses import ( "context" + "github.com/MontFerret/ferret/pkg/runtime/collections" "github.com/MontFerret/ferret/pkg/runtime/core" ) @@ -56,24 +57,26 @@ func NewCollect( return collect, nil } - if projection != nil && count == nil && aggregate == nil { + switch { + case projection != nil && count == nil && aggregate == nil: collect.group.projection = projection - } else if projection == nil && count != nil && aggregate == nil { + case projection == nil && count != nil && aggregate == nil: collect.group.count = count - } else if projection == nil && count == nil && aggregate != nil { + case projection == nil && count == nil && aggregate != nil: collect.group.aggregate = aggregate - } else { + default: return nil, core.Error(core.ErrInvalidOperation, "projection, count and aggregate cannot be used together") } return collect, nil } - if count == nil && aggregate != nil { + switch { + case count == nil && aggregate != nil: collect.aggregate = aggregate - } else if count != nil && aggregate == nil { + case count != nil && aggregate == nil: collect.count = count - } else { + default: return nil, core.Error(core.ErrInvalidOperation, "count and aggregate cannot be used together") } diff --git a/pkg/runtime/expressions/clauses/limit.go b/pkg/runtime/expressions/clauses/limit.go index 90392517..f7dc9033 100644 --- a/pkg/runtime/expressions/clauses/limit.go +++ b/pkg/runtime/expressions/clauses/limit.go @@ -59,11 +59,7 @@ func (clause *LimitClause) Iterate(ctx context.Context, scope *core.Scope) (coll return nil, err } - iterator, err := collections.NewLimitIterator( - src, - int(countInt), - int(offsetInt), - ) + iterator, err := collections.NewLimitIterator(src, countInt, offsetInt) if err != nil { return nil, core.SourceError(clause.src, err) diff --git a/pkg/runtime/expressions/param_test.go b/pkg/runtime/expressions/param_test.go index 743ee290..063fdb48 100644 --- a/pkg/runtime/expressions/param_test.go +++ b/pkg/runtime/expressions/param_test.go @@ -2,9 +2,10 @@ package expressions_test import ( "context" - "github.com/MontFerret/ferret/pkg/runtime/values/types" "testing" + "github.com/MontFerret/ferret/pkg/runtime/values/types" + "github.com/MontFerret/ferret/pkg/runtime/core" "github.com/MontFerret/ferret/pkg/runtime/expressions" "github.com/MontFerret/ferret/pkg/runtime/values" @@ -49,6 +50,7 @@ func TestParameterExpressionExec(t *testing.T) { Convey("Should not exec a missing parameter expression", t, func() { sourceMap := core.NewSourceMap("test", 1, 10) notExistExp, err := expressions.NewParameterExpression(sourceMap, "param2") + So(err, ShouldBeNil) params := make(map[string]core.Value) params["param1"] = values.NewInt(1) diff --git a/pkg/runtime/values/int.go b/pkg/runtime/values/int.go index dc3674d4..6fa080b1 100644 --- a/pkg/runtime/values/int.go +++ b/pkg/runtime/values/int.go @@ -23,19 +23,19 @@ func ParseInt(input interface{}) (Int, error) { return ZeroInt, nil } - switch input.(type) { + switch val := input.(type) { case int: - return Int(input.(int)), nil + return Int(val), nil case int64: - return Int(input.(int64)), nil + return Int(val), nil case int32: - return Int(input.(int32)), nil + return Int(val), nil case int16: - return Int(input.(int16)), nil + return Int(val), nil case int8: - return Int(input.(int8)), nil + return Int(val), nil case string: - i, err := strconv.Atoi(input.(string)) + i, err := strconv.Atoi(val) if err == nil { if i == 0 { diff --git a/pkg/stdlib/arrays/push.go b/pkg/stdlib/arrays/push.go index a3d3c9e1..9e9825cb 100644 --- a/pkg/stdlib/arrays/push.go +++ b/pkg/stdlib/arrays/push.go @@ -45,7 +45,7 @@ func Push(_ context.Context, args ...core.Value) (core.Value, error) { arr.ForEach(func(item core.Value, idx int) bool { if uniq && push { - push = !(item.Compare(value) == 0) + push = item.Compare(value) != 0 } result.Push(item) diff --git a/pkg/stdlib/datetime/compare.go b/pkg/stdlib/datetime/compare.go index c6ae0c24..28fd4431 100644 --- a/pkg/stdlib/datetime/compare.go +++ b/pkg/stdlib/datetime/compare.go @@ -36,9 +36,12 @@ func DateCompare(_ context.Context, args ...core.Value) (core.Value, error) { rangeEnd := values.NewString("millisecond") if len(args) == 4 { - if err = core.ValidateType(args[3], types.String); err != nil { + err = core.ValidateType(args[3], types.String) + + if err != nil { return values.None, err } + rangeEnd = args[3].(values.String) } diff --git a/pkg/stdlib/html/document.go b/pkg/stdlib/html/document.go index eac99f76..e6751022 100644 --- a/pkg/stdlib/html/document.go +++ b/pkg/stdlib/html/document.go @@ -151,12 +151,7 @@ func newDocLoadParams(url values.String, arg core.Value) (DocumentLoadParams, er return res, err } - header, err := parseHeader(header.(*values.Object)) - - if err != nil { - return res, err - } - + header := parseHeader(header.(*values.Object)) res.Header = header } @@ -203,7 +198,9 @@ func parseCookies(arr *values.Array) ([]drivers.HTTPCookie, error) { func parseCookie(value core.Value) (drivers.HTTPCookie, error) { var err error - if err = core.ValidateType(value, types.Object, drivers.HTTPCookieType); err != nil { + err = core.ValidateType(value, types.Object, drivers.HTTPCookieType) + + if err != nil { return drivers.HTTPCookie{}, err } @@ -291,7 +288,7 @@ func parseCookie(value core.Value) (drivers.HTTPCookie, error) { return cookie, err } -func parseHeader(header *values.Object) (drivers.HTTPHeader, error) { +func parseHeader(header *values.Object) drivers.HTTPHeader { res := make(drivers.HTTPHeader) header.ForEach(func(value core.Value, key string) bool { @@ -300,5 +297,5 @@ func parseHeader(header *values.Object) (drivers.HTTPHeader, error) { return true }) - return res, nil + return res } diff --git a/pkg/stdlib/math/median.go b/pkg/stdlib/math/median.go index dcac91e2..2a4698ff 100644 --- a/pkg/stdlib/math/median.go +++ b/pkg/stdlib/math/median.go @@ -33,21 +33,18 @@ func Median(_ context.Context, args ...core.Value) (core.Value, error) { var median core.Value - if l == 0 { + switch { + case l == 0: return values.NewFloat(math.NaN()), nil - } else if l%2 == 0 { + case l%2 == 0: median, err = mean(sorted.Slice(l/2-1, l/2+1)) if err != nil { return values.None, nil } - } else { + default: median = sorted.Get(l / 2) } - if err != nil { - return values.None, nil - } - return median, nil } diff --git a/pkg/stdlib/math/percentile.go b/pkg/stdlib/math/percentile.go index 04a15bc1..7b82c632 100644 --- a/pkg/stdlib/math/percentile.go +++ b/pkg/stdlib/math/percentile.go @@ -70,21 +70,16 @@ func Percentile(_ context.Context, args ...core.Value) (core.Value, error) { var percentile core.Value // Check if the index is a whole number - if index == even { - - // Convert float to int + switch { + case index == even: i := values.Int(index) - - // Find the value at the index percentile = sorted.Get(i - 1) - } else if index > 1 { - + case index > 1: // Convert float to int via truncation i := values.Int(index) - // Find the average of the index and following values percentile, _ = mean(values.NewArrayWith(sorted.Get(i-1), sorted.Get(i))) - } else { + default: return values.NewFloat(math.NaN()), errors.New("input is outside of range") } diff --git a/pkg/stdlib/math/stddev_population.go b/pkg/stdlib/math/stddev_population.go index aef53fee..d7ca9be4 100644 --- a/pkg/stdlib/math/stddev_population.go +++ b/pkg/stdlib/math/stddev_population.go @@ -32,11 +32,7 @@ func StandardDeviationPopulation(_ context.Context, args ...core.Value) (core.Va return values.NewFloat(math.NaN()), nil } - vp, err := variance(arr, values.NewInt(0)) - - if err != nil { - return values.NewFloat(math.NaN()), err - } + vp := variance(arr, values.NewInt(0)) return values.NewFloat(math.Pow(float64(vp), 0.5)), nil } diff --git a/pkg/stdlib/math/stddev_sample.go b/pkg/stdlib/math/stddev_sample.go index 1932cf1f..e48e6a23 100644 --- a/pkg/stdlib/math/stddev_sample.go +++ b/pkg/stdlib/math/stddev_sample.go @@ -32,11 +32,7 @@ func StandardDeviationSample(_ context.Context, args ...core.Value) (core.Value, return values.NewFloat(math.NaN()), nil } - vp, err := variance(arr, values.NewInt(1)) - - if err != nil { - return values.NewFloat(math.NaN()), err - } + vp := variance(arr, values.NewInt(1)) return values.NewFloat(math.Pow(float64(vp), 0.5)), nil } diff --git a/pkg/stdlib/math/variance.go b/pkg/stdlib/math/variance.go index 74d80973..87a7cd6d 100644 --- a/pkg/stdlib/math/variance.go +++ b/pkg/stdlib/math/variance.go @@ -8,9 +8,9 @@ import ( "github.com/MontFerret/ferret/pkg/runtime/values/types" ) -func variance(input *values.Array, sample values.Int) (values.Float, error) { +func variance(input *values.Array, sample values.Int) values.Float { if input.Length() == 0 { - return values.NewFloat(math.NaN()), nil + return values.NewFloat(math.NaN()) } m, _ := mean(input) @@ -37,5 +37,5 @@ func variance(input *values.Array, sample values.Int) (values.Float, error) { // or population and wether to subtract by one or not l := values.Float(input.Length() - (1 * sample)) - return variance / l, nil + return variance / l } diff --git a/pkg/stdlib/math/variance_population.go b/pkg/stdlib/math/variance_population.go index 01355bb8..2787bc07 100644 --- a/pkg/stdlib/math/variance_population.go +++ b/pkg/stdlib/math/variance_population.go @@ -32,5 +32,5 @@ func PopulationVariance(_ context.Context, args ...core.Value) (core.Value, erro return values.NewFloat(math.NaN()), nil } - return variance(arr, values.NewInt(0)) + return variance(arr, values.NewInt(0)), nil } diff --git a/pkg/stdlib/math/variance_sample.go b/pkg/stdlib/math/variance_sample.go index d7bcd93a..1ecbe63c 100644 --- a/pkg/stdlib/math/variance_sample.go +++ b/pkg/stdlib/math/variance_sample.go @@ -32,5 +32,5 @@ func SampleVariance(_ context.Context, args ...core.Value) (core.Value, error) { return values.NewFloat(math.NaN()), nil } - return variance(arr, values.NewInt(1)) + return variance(arr, values.NewInt(1)), nil } diff --git a/pkg/stdlib/objects/zip.go b/pkg/stdlib/objects/zip.go index 33a98b77..524ce01d 100644 --- a/pkg/stdlib/objects/zip.go +++ b/pkg/stdlib/objects/zip.go @@ -22,7 +22,9 @@ func Zip(_ context.Context, args ...core.Value) (core.Value, error) { } for _, arg := range args { - if err = core.ValidateType(arg, types.Array); err != nil { + err = core.ValidateType(arg, types.Array) + + if err != nil { return values.None, err } } diff --git a/pkg/stdlib/strings/encode.go b/pkg/stdlib/strings/encode.go index ddac8d3f..d38b0438 100644 --- a/pkg/stdlib/strings/encode.go +++ b/pkg/stdlib/strings/encode.go @@ -88,5 +88,5 @@ func ToBase64(_ context.Context, args ...core.Value) (core.Value, error) { value := args[0].String() out := base64.StdEncoding.EncodeToString([]byte(value)) - return values.NewString(string(out)), nil + return values.NewString(out), nil } diff --git a/pkg/stdlib/strings/find.go b/pkg/stdlib/strings/find.go index a5108933..99304aa0 100644 --- a/pkg/stdlib/strings/find.go +++ b/pkg/stdlib/strings/find.go @@ -29,7 +29,7 @@ func FindFirst(_ context.Context, args ...core.Value) (core.Value, error) { runes := []rune(text) search := args[1].String() start := values.NewInt(0) - end := values.NewInt(int(len(text))) + end := values.NewInt(len(text)) if argsCount == 3 { arg3 := args[2] @@ -76,7 +76,7 @@ func FindLast(_ context.Context, args ...core.Value) (core.Value, error) { runes := []rune(text) search := args[1].String() start := values.NewInt(0) - end := values.NewInt(int(len(text))) + end := values.NewInt(len(text)) if argsCount == 3 { arg3 := args[2] diff --git a/pkg/stdlib/strings/fmt.go b/pkg/stdlib/strings/fmt.go index 65ce8b93..83a11ca9 100644 --- a/pkg/stdlib/strings/fmt.go +++ b/pkg/stdlib/strings/fmt.go @@ -36,10 +36,7 @@ func Fmt(_ context.Context, args ...core.Value) (core.Value, error) { } func format(template string, args []core.Value) (string, error) { - rgx, err := regexp.Compile("{[0-9]*}") - if err != nil { - return "", errors.Errorf("failed to build regexp: %v", err) - } + rgx := regexp.MustCompile("{[0-9]*}") argsCount := len(args) emptyBracketsCount := strings.Count(template, "{}") @@ -53,6 +50,7 @@ func format(template string, args []core.Value) (string, error) { // index of the last value // inserted into the template var lastArgIdx int + var err error template = rgx.ReplaceAllStringFunc(template, func(s string) string { if err != nil { diff --git a/pkg/stdlib/strings/like.go b/pkg/stdlib/strings/like.go index 53c16808..6d94dbe0 100644 --- a/pkg/stdlib/strings/like.go +++ b/pkg/stdlib/strings/like.go @@ -43,15 +43,17 @@ func Like(_ context.Context, args ...core.Value) (core.Value, error) { for i := 1; i < len(str)+1; i++ { for j := 1; j < len(pattern)+1; j++ { - if pattern[j-1] == '%' { + switch { + case pattern[j-1] == '%': lookup[i][j] = lookup[i][j-1] || lookup[i-1][j] - } else if pattern[j-1] == '_' || str[i-1] == pattern[j-1] { + case pattern[j-1] == '_' || str[i-1] == pattern[j-1]: lookup[i][j] = lookup[i-1][j-1] - } else if len(args) > 2 { - if args[2] == values.True && unicode.ToLower(str[i-1]) == unicode.ToLower(pattern[j-1]) { + case len(args) > 2: + isEq := unicode.ToLower(str[i-1]) == unicode.ToLower(pattern[j-1]) + if args[2] == values.True && isEq { lookup[i][j] = lookup[i-1][j-1] } - } else { + default: lookup[i][j] = false } } diff --git a/pkg/stdlib/strings/regex.go b/pkg/stdlib/strings/regex.go index 1b0fc714..76c97446 100644 --- a/pkg/stdlib/strings/regex.go +++ b/pkg/stdlib/strings/regex.go @@ -55,7 +55,7 @@ func RegexMatch(_ context.Context, args ...core.Value) (core.Value, error) { // @param regex (String) - A regular expression to use for splitting the text. // @param caseInsensitive (Boolean) - If set to true, the matching will be case-insensitive. The default is false. // @param limit (Int) - Limit the number of split values in the result. If no limit is given, the number of splits returned is not bounded. -// @return (Array) - An array of strings splited by teh expression. +// @return (Array) - An array of strings splited by the expression. func RegexSplit(_ context.Context, args ...core.Value) (core.Value, error) { err := core.ValidateArgs(args, 2, 4) diff --git a/pkg/stdlib/strings/substr.go b/pkg/stdlib/strings/substr.go index 884f33fc..d1d9eb75 100644 --- a/pkg/stdlib/strings/substr.go +++ b/pkg/stdlib/strings/substr.go @@ -103,7 +103,7 @@ func Right(_ context.Context, args ...core.Value) (core.Value, error) { } if len(text) < pos { - return values.NewString(string(text)), nil + return values.NewString(text), nil } return values.NewStringFromRunes(runes[size-pos : size]), nil