├── .github └── workflows │ └── release.yml ├── .goreleaser.yml ├── LICENSE ├── go.mod ├── README.md ├── main.go └── go.sum /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: release 2 | on: 3 | push: 4 | tags: 5 | - "v[0-9]+.[0-9]+.[0-9]+" 6 | jobs: 7 | goreleaser: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Checkout 11 | uses: actions/checkout@v1 12 | with: 13 | fetch-depth: 1 14 | - name: Setup Go 15 | uses: actions/setup-go@v1 16 | with: 17 | go-version: 1.16 18 | - name: Run GoReleaser 19 | uses: goreleaser/goreleaser-action@v1 20 | with: 21 | version: latest 22 | args: release --rm-dist 23 | env: 24 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 25 | -------------------------------------------------------------------------------- /.goreleaser.yml: -------------------------------------------------------------------------------- 1 | project_name: tennvet 2 | env: 3 | - GO111MODULE=on 4 | before: 5 | hooks: 6 | - go mod tidy 7 | builds: 8 | - main: . 9 | binary: tennvet 10 | ldflags: 11 | - -s -w 12 | # - -X main.Version={{.Version}} 13 | # - -X main.Revision={{.ShortCommit}} 14 | env: 15 | - CGO_ENABLED=0 16 | archives: 17 | - name_template: '{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}' 18 | replacements: 19 | darwin: darwin 20 | linux: linux 21 | windows: windows 22 | 386: i386 23 | amd64: x86_64 24 | format_overrides: 25 | - goos: windows 26 | format: zip 27 | release: 28 | prerelease: auto 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Takuya Ueda 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/tenntenn/tennvet 2 | 3 | go 1.22.5 4 | 5 | require ( 6 | github.com/gcpug/zagane v0.5.3 7 | github.com/gostaticanalysis/ctxfield v0.2.2 8 | github.com/gostaticanalysis/debugcode v0.1.1 9 | github.com/gostaticanalysis/dupimport v0.0.0-20190626051117-37d4ab484168 10 | github.com/gostaticanalysis/elseless v0.1.0 11 | github.com/gostaticanalysis/exclude v0.1.0 12 | github.com/gostaticanalysis/forcetypeassert v0.1.0 13 | github.com/gostaticanalysis/importgroup v0.0.0-20200207005533-c968b39b7641 14 | github.com/gostaticanalysis/innertypealias v0.1.1 15 | github.com/gostaticanalysis/loopdefer v0.1.0 16 | github.com/gostaticanalysis/nilerr v0.1.1 17 | github.com/gostaticanalysis/noctor v0.1.0 18 | github.com/gostaticanalysis/nofmt v0.0.0-20190308162339-35b38e0c7b48 19 | github.com/gostaticanalysis/notest v0.0.0-20190308173254-8cf418819436 20 | github.com/gostaticanalysis/sqlrows v0.0.0-20231116101209-5091a5920ea6 21 | github.com/gostaticanalysis/testhelper v0.1.2 22 | github.com/gostaticanalysis/typednil v0.1.2 23 | github.com/gostaticanalysis/typeswitch v0.0.0-20200129070600-0c79224605d6 24 | github.com/gostaticanalysis/unitconst v0.1.3 25 | github.com/gostaticanalysis/unused v0.0.5 26 | github.com/gostaticanalysis/wraperrfmt v0.0.0-20240719130650-49e514389db6 27 | github.com/gostaticanalysis/zapvet v0.3.1 28 | golang.org/x/tools v0.23.0 29 | ) 30 | 31 | require ( 32 | github.com/gostaticanalysis/analysisutil v0.7.1 // indirect 33 | github.com/gostaticanalysis/builtinprint v0.1.0 // indirect 34 | github.com/gostaticanalysis/comment v1.4.2 // indirect 35 | github.com/gostaticanalysis/ident v0.0.1 // indirect 36 | ) 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # tennvet 2 | 3 | ## Install 4 | 5 | ```sh 6 | $ go install github.com/tenntenn/tennvet@latest 7 | ``` 8 | 9 | ## How to use 10 | 11 | ```sh 12 | $ go vet -vettool=`go env GOPATH`/bin/tennvet ./... 13 | ``` 14 | 15 | If you set PATH to `go env GOPATH`/bin, you can use `which` command. 16 | 17 | ```sh 18 | $ go vet -vettool=`which tennvet` ./... 19 | ``` 20 | 21 | ## Analyzers 22 | 23 | * [zagane](https://github.com/gcpug/zagane/zagane) 24 | * [ctxfield](https://github.com/gostaticanalysis/ctxfield) 25 | * [dupimport](https://github.com/gostaticanalysis/dupimport) 26 | * [elseless](https://github.com/gostaticanalysis/elseless) 27 | * [forcetypeassert](https://github.com/gostaticanalysis/forcetypeassert) 28 | * [importgroup](https://github.com/gostaticanalysis/importgroup) 29 | * [innertypealias](https://github.com/gostaticanalysis/innertypealias) 30 | * [loopdefer](https://github.com/gostaticanalysis/loopdefer) 31 | * [nilerr](https://github.com/gostaticanalysis/nilerr) 32 | * [noctor](https://github.com/gostaticanalysis/noctor) 33 | * [nofmt](https://github.com/gostaticanalysis/nofmt) 34 | * [notest](https://github.com/gostaticanalysis/notest) 35 | * [sqlrows](https://github.com/gostaticanalysis/sqlrows) 36 | * [testhelper](https://github.com/gostaticanalysis/testhelper) 37 | * [typednil](https://github.com/gostaticanalysis/typednil) 38 | * [typeswitch](https://github.com/gostaticanalysis/typeswitch) 39 | * [unitconst](https://github.com/gostaticanalysis/unitconst) 40 | * [unused](https://github.com/gostaticanalysis/unused) 41 | * [wraperrfmt](https://github.com/gostaticanalysis/wraperrfmt) 42 | * [zapvet](https://github.com/gostaticanalysis/zapvet) 43 | * [debugcode](https://github.com/gostaticanalysis/debugcode) 44 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "github.com/gcpug/zagane/zagane" 5 | "github.com/gostaticanalysis/ctxfield" 6 | "github.com/gostaticanalysis/debugcode/debugcode" 7 | "github.com/gostaticanalysis/dupimport" 8 | "github.com/gostaticanalysis/elseless" 9 | "github.com/gostaticanalysis/exclude" 10 | "github.com/gostaticanalysis/forcetypeassert" 11 | "github.com/gostaticanalysis/importgroup" 12 | "github.com/gostaticanalysis/innertypealias" 13 | "github.com/gostaticanalysis/loopdefer" 14 | "github.com/gostaticanalysis/nilerr" 15 | "github.com/gostaticanalysis/noctor" 16 | "github.com/gostaticanalysis/nofmt" 17 | "github.com/gostaticanalysis/notest" 18 | "github.com/gostaticanalysis/sqlrows/passes/sqlrows" 19 | "github.com/gostaticanalysis/testhelper" 20 | "github.com/gostaticanalysis/typednil" 21 | "github.com/gostaticanalysis/typeswitch" 22 | "github.com/gostaticanalysis/unitconst" 23 | "github.com/gostaticanalysis/unused" 24 | "github.com/gostaticanalysis/wraperrfmt" 25 | "github.com/gostaticanalysis/zapvet/zapvet" 26 | "golang.org/x/tools/go/analysis/unitchecker" 27 | ) 28 | 29 | func main() { 30 | unitchecker.Main(exclude.All(append(append(append( 31 | zagane.Analyzers(), // for Cloud Spanner 32 | ctxfield.Analyzer, 33 | dupimport.Analyzer, 34 | elseless.Analyzer, 35 | exclude.By(forcetypeassert.Analyzer, exclude.TestFile), 36 | importgroup.Analyzer, 37 | innertypealias.Analyzer, 38 | loopdefer.Analyzer, 39 | nilerr.Analyzer, 40 | noctor.Analyzer, 41 | nofmt.Analyzer, 42 | notest.Analyzer, 43 | sqlrows.Analyzer, 44 | testhelper.Analyzer, 45 | typednil.Analyzer, 46 | typeswitch.Analyzer, 47 | unitconst.Analyzer, 48 | unused.Analyzer, 49 | wraperrfmt.Analyzer), 50 | zapvet.Analyzers()...), // for zap 51 | debugcode.Analyzers()..., 52 | ), exclude.GeneratedFile, exclude.FileWithPattern)...) 53 | } 54 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/gcpug/zagane v0.5.3 h1:NpiBWBbiMQjVaTYHzwWw657B4kDxTkkQxIhNhyk876A= 2 | github.com/gcpug/zagane v0.5.3/go.mod h1:UWmiz1ZPYvx7iq1HBMravstfjgrwOrbSLs8D6fophwQ= 3 | github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 4 | github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 5 | github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 6 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 7 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 8 | github.com/gostaticanalysis/analysisutil v0.0.0-20190329151158-56bca42c7635/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= 9 | github.com/gostaticanalysis/analysisutil v0.0.1/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= 10 | github.com/gostaticanalysis/analysisutil v0.0.2/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= 11 | github.com/gostaticanalysis/analysisutil v0.6.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= 12 | github.com/gostaticanalysis/analysisutil v0.6.2/go.mod h1:ioRD8K5ASNEZq1HIeEYdwRDLLvkv2Glh+iZnT/mHmg0= 13 | github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= 14 | github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= 15 | github.com/gostaticanalysis/builtinprint v0.0.0-20190928163048-1f45505defe8/go.mod h1:ueCLSDQVbVIlzYhUt+Xu8w3LrLl0zVoZmOXtutYcBk8= 16 | github.com/gostaticanalysis/builtinprint v0.1.0 h1:XBbCNKhAZVd0XNcbhPyw/MZEYnitPK6S6hQrB4cXj1c= 17 | github.com/gostaticanalysis/builtinprint v0.1.0/go.mod h1:ueCLSDQVbVIlzYhUt+Xu8w3LrLl0zVoZmOXtutYcBk8= 18 | github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= 19 | github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q= 20 | github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= 21 | github.com/gostaticanalysis/ctxfield v0.2.2 h1:Tn+qT9pDHAOqMrfXTS5nherKzyuw5IoXL2IO40K9rYI= 22 | github.com/gostaticanalysis/ctxfield v0.2.2/go.mod h1:NVQHqxsl14/ZpDMhBj+VxqcaIa592zM/rys9Z8FC4CY= 23 | github.com/gostaticanalysis/debugcode v0.1.1 h1:bUbWCG4hM9FCQhXryzKPT9wEvmPnGaQzWgYep7GSkUg= 24 | github.com/gostaticanalysis/debugcode v0.1.1/go.mod h1:JhrzQx46DdtETnsz9VRXyOxVCWa2ctt3ymASdb/PgQQ= 25 | github.com/gostaticanalysis/dupimport v0.0.0-20190626051117-37d4ab484168 h1:cdsyU5iNKqfi9S49vx5iWdUN7M+BfYxkdKP/7PSC1JQ= 26 | github.com/gostaticanalysis/dupimport v0.0.0-20190626051117-37d4ab484168/go.mod h1:Q0Mbw2DZAbelG4gIScozrAqkRCb32kBsmx4Hu4DzFWA= 27 | github.com/gostaticanalysis/elseless v0.1.0 h1:bMiJ4ZGMMkp1uUUqL1eyEE4FlCzdpG4GYz4af7BY1/U= 28 | github.com/gostaticanalysis/elseless v0.1.0/go.mod h1:4b/D6CRKGVBD5zhYd9c1GvSOHFBSH64Qf2FZwzfcjWQ= 29 | github.com/gostaticanalysis/exclude v0.1.0 h1:2DqJ1Cu14KC7IEWFhb9IxrOaifCjSGrTC1lXl7EVLI4= 30 | github.com/gostaticanalysis/exclude v0.1.0/go.mod h1:rZIgjm5AN5h0BoyjOPvui8IRGWlCiLY9zTzF2MUZSKY= 31 | github.com/gostaticanalysis/forcetypeassert v0.1.0 h1:6eUflI3DiGusXGK6X7cCcIgVCpZ2CiZ1Q7jl6ZxNV70= 32 | github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= 33 | github.com/gostaticanalysis/ident v0.0.1 h1:LELn9RouFTA2Itg4b4f+uuZVxhjACQxMz1i3YK6yNcU= 34 | github.com/gostaticanalysis/ident v0.0.1/go.mod h1:CdGcFBznRljXhnc4Fx6pXhoGag56l+e9WiSA4sevErk= 35 | github.com/gostaticanalysis/importgroup v0.0.0-20200207005533-c968b39b7641 h1:zYHRvN30ahMFVEkyS3tvwhjVWZZk0TVOylHhpxu+EL4= 36 | github.com/gostaticanalysis/importgroup v0.0.0-20200207005533-c968b39b7641/go.mod h1:hCBDchnAkf8k9AqjrhODL53rYA+01ASYhtJbs6nNiPk= 37 | github.com/gostaticanalysis/innertypealias v0.1.1 h1:y0TrHvmLn76EL5HodrAakiSipCJg+iE5Wi2rvhGkKG0= 38 | github.com/gostaticanalysis/innertypealias v0.1.1/go.mod h1:bxJxGHIMW1oH0y4gfuxOXDm0nKQUBeWIUsc28zMmJzU= 39 | github.com/gostaticanalysis/loopdefer v0.1.0 h1:SYEleVBBkBx7OzzuWEoLlTJWgD/xhd/nSQ/Gg515caM= 40 | github.com/gostaticanalysis/loopdefer v0.1.0/go.mod h1:7I9Ht5ecBZoTUmWqMuBQeFBbSELGGDgeL4VAgGShaCs= 41 | github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk= 42 | github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= 43 | github.com/gostaticanalysis/noctor v0.1.0 h1:ouBYsIsCRaeY9wrnoolTkDZYIisQNdUI4yNd9BAi4DI= 44 | github.com/gostaticanalysis/noctor v0.1.0/go.mod h1:hlDuCDaUv1Ajwib6oXlvDrtqPgEA7MSM2Nb/bH/l7Zo= 45 | github.com/gostaticanalysis/nofmt v0.0.0-20190308162339-35b38e0c7b48 h1:BXkvwyv02+0cXo+/qWHrbEjN1ZpdeG2SdnI1r1PR0N0= 46 | github.com/gostaticanalysis/nofmt v0.0.0-20190308162339-35b38e0c7b48/go.mod h1:WDznvc31hWUkypHoQvD/A7c3sMqvLo4EtQMUp7RTfPk= 47 | github.com/gostaticanalysis/notest v0.0.0-20190308173254-8cf418819436 h1:0ve41hnaX31CLBtWBl3tAMVOEysF9PFKnXXmh0dCRdM= 48 | github.com/gostaticanalysis/notest v0.0.0-20190308173254-8cf418819436/go.mod h1:iSu+i6TJDuAbrOgSmSYkPLB/NLalMYiJ5NFqiGguwCk= 49 | github.com/gostaticanalysis/sqlrows v0.0.0-20231116101209-5091a5920ea6 h1:sKhizV8umeOyFU1dvGlojrrqVVF1+9K4r+Ba/TWJMEo= 50 | github.com/gostaticanalysis/sqlrows v0.0.0-20231116101209-5091a5920ea6/go.mod h1:e1pmG/kyEnqo7xy7ZgrKgfMnqR07yFpDsvB/fMWnNq8= 51 | github.com/gostaticanalysis/testhelper v0.1.2 h1:w0guK+kItbIOj1GPveMrec9tQFVWKgVOIgjJH9YQ0Pw= 52 | github.com/gostaticanalysis/testhelper v0.1.2/go.mod h1:R7l64GUNSfRHkEKraTNWiuiXQry8/TW7Ac/i3r0q8ew= 53 | github.com/gostaticanalysis/testutil v0.0.0-20190308165151-352061e1ba8c/go.mod h1:6dnfVtdzHaKguYhBO/9DQrWcGfyZocsw7IS/bLgaC/M= 54 | github.com/gostaticanalysis/testutil v0.3.0/go.mod h1:trej6yCbjSFMyfa/YbAUKu4x6PvW8JSuZlMHnTLpqJc= 55 | github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= 56 | github.com/gostaticanalysis/testutil v0.3.1/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= 57 | github.com/gostaticanalysis/testutil v0.4.0 h1:nhdCmubdmDF6VEatUNjgUZBJKWRqugoISdUv3PPQgHY= 58 | github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= 59 | github.com/gostaticanalysis/typednil v0.1.2 h1:t4WUFkiw/JLZ3ZgfoZlBBAhS++nfVwdDjvk1aa3neJQ= 60 | github.com/gostaticanalysis/typednil v0.1.2/go.mod h1:15JDP9q2BHvC+u6+W/gW9zxxQ5yDftRSpVuyFmeVbnM= 61 | github.com/gostaticanalysis/typeswitch v0.0.0-20200129070600-0c79224605d6 h1:visJU4Kv4Z7feLZnQ9uV9+A2E0EtrYD58QriMP1nYjE= 62 | github.com/gostaticanalysis/typeswitch v0.0.0-20200129070600-0c79224605d6/go.mod h1:j0m96roq+ru7H2EuJBie/V8kWCuIONwrDx6ysJqzCAs= 63 | github.com/gostaticanalysis/unitconst v0.1.3 h1:kkMPGskoKMOFUAwBus9z1GgHfS/dOuW7u/K4s7jD2NY= 64 | github.com/gostaticanalysis/unitconst v0.1.3/go.mod h1:Rm0VpqotgufUQrpGphgBO5ejvNCtqA1YbnxcTf9nb0I= 65 | github.com/gostaticanalysis/unused v0.0.5 h1:7Y1U54r3kUG9yFLEqWpiZFdL2CxyIJI7CfnbCYhQqiM= 66 | github.com/gostaticanalysis/unused v0.0.5/go.mod h1:SCEZphM9rdrzDbQr8/yeHfxYODH/u6GqkEoMzsHtD8o= 67 | github.com/gostaticanalysis/wraperrfmt v0.0.0-20240424134522-a58689aa692e h1:iodedlbVVSktP9ArGGCL/+sQghOcwFYWC8NwXEMpGxs= 68 | github.com/gostaticanalysis/wraperrfmt v0.0.0-20240424134522-a58689aa692e/go.mod h1:4VbWU0A2tbM4KWYy8+H/3Lp5vluCMek0sz+xB6HYVx4= 69 | github.com/gostaticanalysis/wraperrfmt v0.0.0-20240719130650-49e514389db6 h1:9F0P4ga30lH8Ve4kC/jkCYmYci/Zh+UuZRurSi6fPE4= 70 | github.com/gostaticanalysis/wraperrfmt v0.0.0-20240719130650-49e514389db6/go.mod h1:FtJ130sR16N3MBs5Vx+7wT55VCfTLdNdchJtjjEin+c= 71 | github.com/gostaticanalysis/zapvet v0.3.1 h1:VmLci3HkBqmk2+I96PrhxTjhc3GQAj4+ecKTjTXlIfQ= 72 | github.com/gostaticanalysis/zapvet v0.3.1/go.mod h1:5UDW2qN3I5i6hMbMZ96ZQ3dMmH0D0mWfxNvoSWTIaI0= 73 | github.com/hashicorp/go-version v1.2.1 h1:zEfKbn2+PDgroKdiOzqiE8rsmLqU2uwi5PB5pBJ3TkI= 74 | github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= 75 | github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= 76 | github.com/otiai10/copy v1.2.0 h1:HvG945u96iNadPoG2/Ja2+AUJeW5YuFQMixq9yirC+k= 77 | github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= 78 | github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= 79 | github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= 80 | github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= 81 | github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= 82 | github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA= 83 | github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= 84 | github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag= 85 | github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= 86 | github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 87 | github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 88 | github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= 89 | github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 90 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 91 | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 92 | golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 93 | golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 94 | golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= 95 | golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= 96 | golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= 97 | golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= 98 | golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 99 | golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 100 | golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 101 | golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= 102 | golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 103 | golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 104 | golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= 105 | golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= 106 | golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= 107 | golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= 108 | golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 109 | golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 110 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 111 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 112 | golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 113 | golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 114 | golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 115 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 116 | golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= 117 | golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 118 | golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 119 | golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= 120 | golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= 121 | golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= 122 | golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= 123 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 124 | golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 125 | golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 126 | golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 127 | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 128 | golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 129 | golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= 130 | golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 131 | golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= 132 | golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 133 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 134 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 135 | golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 136 | golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 137 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 138 | golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 139 | golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 140 | golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 141 | golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 142 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 143 | golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 144 | golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 145 | golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 146 | golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 147 | golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 148 | golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 149 | golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 150 | golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= 151 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 152 | golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 153 | golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 154 | golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= 155 | golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= 156 | golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= 157 | golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= 158 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 159 | golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 160 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 161 | golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= 162 | golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 163 | golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= 164 | golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= 165 | golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= 166 | golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= 167 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 168 | golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= 169 | golang.org/x/tools v0.0.0-20190308142131-b40df0fb21c3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= 170 | golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 171 | golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 172 | golang.org/x/tools v0.0.0-20190401205534-4c644d7e323d/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 173 | golang.org/x/tools v0.0.0-20190625160430-252024b82959/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 174 | golang.org/x/tools v0.0.0-20190703212419-2214986f1668/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= 175 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 176 | golang.org/x/tools v0.0.0-20200129045341-207d3de1faaf/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 177 | golang.org/x/tools v0.0.0-20200207001614-6fdc5776f4bb/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 178 | golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= 179 | golang.org/x/tools v0.0.0-20200908211811-12e1bf57a112/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= 180 | golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 181 | golang.org/x/tools v0.0.0-20201121010211-780cb80bd7fb/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 182 | golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= 183 | golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= 184 | golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= 185 | golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 186 | golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 187 | golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 188 | golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= 189 | golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= 190 | golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= 191 | golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= 192 | golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= 193 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 194 | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 195 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 196 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 197 | --------------------------------------------------------------------------------