From 5fc5366972c874b919f93165bb4ed4e2bcb7c350 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Mar 2024 17:40:11 +0000 Subject: mod: bump github.com/golangci/golangci-lint from 1.55.2 to 1.56.2 Bumps [github.com/golangci/golangci-lint](https://github.com/golangci/golangci-lint) from 1.55.2 to 1.56.2. - [Release notes](https://github.com/golangci/golangci-lint/releases) - [Changelog](https://github.com/golangci/golangci-lint/blob/master/CHANGELOG.md) - [Commits](https://github.com/golangci/golangci-lint/compare/v1.55.2...v1.56.2) --- updated-dependencies: - dependency-name: github.com/golangci/golangci-lint dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- vendor/go.tmz.dev/musttag/.golangci.yml | 23 -- vendor/go.tmz.dev/musttag/.goreleaser.yml | 27 --- vendor/go.tmz.dev/musttag/LICENSE | 373 ------------------------------ vendor/go.tmz.dev/musttag/README.md | 106 --------- vendor/go.tmz.dev/musttag/builtins.go | 67 ------ vendor/go.tmz.dev/musttag/musttag.go | 259 --------------------- vendor/go.tmz.dev/musttag/utils.go | 57 ----- 7 files changed, 912 deletions(-) delete mode 100644 vendor/go.tmz.dev/musttag/.golangci.yml delete mode 100644 vendor/go.tmz.dev/musttag/.goreleaser.yml delete mode 100644 vendor/go.tmz.dev/musttag/LICENSE delete mode 100644 vendor/go.tmz.dev/musttag/README.md delete mode 100644 vendor/go.tmz.dev/musttag/builtins.go delete mode 100644 vendor/go.tmz.dev/musttag/musttag.go delete mode 100644 vendor/go.tmz.dev/musttag/utils.go (limited to 'vendor/go.tmz.dev') diff --git a/vendor/go.tmz.dev/musttag/.golangci.yml b/vendor/go.tmz.dev/musttag/.golangci.yml deleted file mode 100644 index 641471cc4..000000000 --- a/vendor/go.tmz.dev/musttag/.golangci.yml +++ /dev/null @@ -1,23 +0,0 @@ -linters: - disable-all: true - enable: - # enabled by default: - - errcheck - - gosimple - - govet - - ineffassign - - staticcheck - - typecheck - - unused - # disabled by default: - - gocritic - - gofumpt - -linters-settings: - gocritic: - enabled-tags: - - diagnostic - - style - - performance - - experimental - - opinionated diff --git a/vendor/go.tmz.dev/musttag/.goreleaser.yml b/vendor/go.tmz.dev/musttag/.goreleaser.yml deleted file mode 100644 index 259080886..000000000 --- a/vendor/go.tmz.dev/musttag/.goreleaser.yml +++ /dev/null @@ -1,27 +0,0 @@ -builds: - - main: ./cmd/musttag - env: - - CGO_ENABLED=0 - flags: - - -trimpath - ldflags: - - -s -w -X main.version={{ .Version }} - targets: - - darwin_amd64 - - darwin_arm64 - - linux_amd64 - - windows_amd64 - -archives: - - format_overrides: - - goos: windows - format: zip - -brews: - - tap: - owner: tmzane - name: homebrew-tap - token: '{{ .Env.HOMEBREW_TAP_TOKEN }}' - homepage: https://github.com/tmzane/musttag - description: A Go linter that enforces field tags in (un)marshaled structs - license: MPL-2.0 diff --git a/vendor/go.tmz.dev/musttag/LICENSE b/vendor/go.tmz.dev/musttag/LICENSE deleted file mode 100644 index a612ad981..000000000 --- a/vendor/go.tmz.dev/musttag/LICENSE +++ /dev/null @@ -1,373 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. diff --git a/vendor/go.tmz.dev/musttag/README.md b/vendor/go.tmz.dev/musttag/README.md deleted file mode 100644 index 621c7a9a3..000000000 --- a/vendor/go.tmz.dev/musttag/README.md +++ /dev/null @@ -1,106 +0,0 @@ -# musttag - -[![checks](https://github.com/tmzane/musttag/actions/workflows/checks.yml/badge.svg)](https://github.com/tmzane/musttag/actions/workflows/checks.yml) -[![pkg.go.dev](https://pkg.go.dev/badge/go.tmz.dev/musttag.svg)](https://pkg.go.dev/go.tmz.dev/musttag) -[![goreportcard](https://goreportcard.com/badge/go.tmz.dev/musttag)](https://goreportcard.com/report/go.tmz.dev/musttag) -[![codecov](https://codecov.io/gh/tmzane/musttag/branch/main/graph/badge.svg)](https://codecov.io/gh/tmzane/musttag) - -A Go linter that enforces field tags in (un)marshaled structs - -## 📌 About - -`musttag` checks that exported fields of a struct passed to a `Marshal`-like function are annotated with the relevant tag: - -```go -// BAD: -var user struct { - Name string -} -data, err := json.Marshal(user) - -// GOOD: -var user struct { - Name string `json:"name"` -} -data, err := json.Marshal(user) -``` - -The rational from [Uber Style Guide][1]: - -> The serialized form of the structure is a contract between different systems. -> Changes to the structure of the serialized form, including field names, break this contract. -> Specifying field names inside tags makes the contract explicit, -> and it guards against accidentally breaking the contract by refactoring or renaming fields. - -## 🚀 Features - -The following packages are supported out of the box: - -* [`encoding/json`][2] -* [`encoding/xml`][3] -* [`gopkg.in/yaml.v3`][4] -* [`github.com/BurntSushi/toml`][5] -* [`github.com/mitchellh/mapstructure`][6] -* [`github.com/jmoiron/sqlx`][7] - -In addition, any [custom package](#custom-packages) can be added to the list. - -## 📋 Usage - -`musttag` is already integrated into `golangci-lint`, and this is the recommended way to use it. - -To enable the linter, add the following lines to `.golangci.yml`: - -```yaml -linters: - enable: - - musttag -``` - -If you'd rather prefer to use `musttag` standalone, you can install it via `brew`... - -```shell -brew install tmzane/tap/musttag -``` - -...or download a prebuilt binary from the [Releases][9] page. - -Then run it either directly or as a `go vet` tool: - -```shell -go vet -vettool=$(which musttag) ./... -``` - -### Custom packages - -To enable reporting a custom function, you need to add its description to `.golangci.yml`. - -The following is an example of adding support for the `hclsimple.DecodeFile` function from [`github.com/hashicorp/hcl`][8]: - -```yaml -linters-settings: - musttag: - functions: - # The full name of the function, including the package. - - name: github.com/hashicorp/hcl/v2/hclsimple.DecodeFile - # The struct tag whose presence should be ensured. - tag: hcl - # The position of the argument to check. - arg-pos: 2 -``` - -The same can be done via the `-fn=name:tag:arg-pos` flag when using `musttag` standalone: - -```shell -musttag -fn="github.com/hashicorp/hcl/v2/hclsimple.DecodeFile:hcl:2" ./... -``` - -[1]: https://github.com/uber-go/guide/blob/master/style.md#use-field-tags-in-marshaled-structs -[2]: https://pkg.go.dev/encoding/json -[3]: https://pkg.go.dev/encoding/xml -[4]: https://github.com/go-yaml/yaml -[5]: https://github.com/BurntSushi/toml -[6]: https://github.com/mitchellh/mapstructure -[7]: https://github.com/jmoiron/sqlx -[8]: https://github.com/hashicorp/hcl -[9]: https://github.com/tmzane/musttag/releases diff --git a/vendor/go.tmz.dev/musttag/builtins.go b/vendor/go.tmz.dev/musttag/builtins.go deleted file mode 100644 index 66914fa9e..000000000 --- a/vendor/go.tmz.dev/musttag/builtins.go +++ /dev/null @@ -1,67 +0,0 @@ -package musttag - -// builtins is a set of functions supported out of the box. -var builtins = []Func{ - // https://pkg.go.dev/encoding/json - {Name: "encoding/json.Marshal", Tag: "json", ArgPos: 0}, - {Name: "encoding/json.MarshalIndent", Tag: "json", ArgPos: 0}, - {Name: "encoding/json.Unmarshal", Tag: "json", ArgPos: 1}, - {Name: "(*encoding/json.Encoder).Encode", Tag: "json", ArgPos: 0}, - {Name: "(*encoding/json.Decoder).Decode", Tag: "json", ArgPos: 0}, - - // https://pkg.go.dev/encoding/xml - {Name: "encoding/xml.Marshal", Tag: "xml", ArgPos: 0}, - {Name: "encoding/xml.MarshalIndent", Tag: "xml", ArgPos: 0}, - {Name: "encoding/xml.Unmarshal", Tag: "xml", ArgPos: 1}, - {Name: "(*encoding/xml.Encoder).Encode", Tag: "xml", ArgPos: 0}, - {Name: "(*encoding/xml.Decoder).Decode", Tag: "xml", ArgPos: 0}, - {Name: "(*encoding/xml.Encoder).EncodeElement", Tag: "xml", ArgPos: 0}, - {Name: "(*encoding/xml.Decoder).DecodeElement", Tag: "xml", ArgPos: 0}, - - // https://github.com/go-yaml/yaml - {Name: "gopkg.in/yaml.v3.Marshal", Tag: "yaml", ArgPos: 0}, - {Name: "gopkg.in/yaml.v3.Unmarshal", Tag: "yaml", ArgPos: 1}, - {Name: "(*gopkg.in/yaml.v3.Encoder).Encode", Tag: "yaml", ArgPos: 0}, - {Name: "(*gopkg.in/yaml.v3.Decoder).Decode", Tag: "yaml", ArgPos: 0}, - - // https://github.com/BurntSushi/toml - {Name: "github.com/BurntSushi/toml.Unmarshal", Tag: "toml", ArgPos: 1}, - {Name: "github.com/BurntSushi/toml.Decode", Tag: "toml", ArgPos: 1}, - {Name: "github.com/BurntSushi/toml.DecodeFS", Tag: "toml", ArgPos: 2}, - {Name: "github.com/BurntSushi/toml.DecodeFile", Tag: "toml", ArgPos: 1}, - {Name: "(*github.com/BurntSushi/toml.Encoder).Encode", Tag: "toml", ArgPos: 0}, - {Name: "(*github.com/BurntSushi/toml.Decoder).Decode", Tag: "toml", ArgPos: 0}, - - // https://github.com/mitchellh/mapstructure - {Name: "github.com/mitchellh/mapstructure.Decode", Tag: "mapstructure", ArgPos: 1}, - {Name: "github.com/mitchellh/mapstructure.DecodeMetadata", Tag: "mapstructure", ArgPos: 1}, - {Name: "github.com/mitchellh/mapstructure.WeakDecode", Tag: "mapstructure", ArgPos: 1}, - {Name: "github.com/mitchellh/mapstructure.WeakDecodeMetadata", Tag: "mapstructure", ArgPos: 1}, - - // https://github.com/jmoiron/sqlx - {Name: "github.com/jmoiron/sqlx.Get", Tag: "db", ArgPos: 1}, - {Name: "github.com/jmoiron/sqlx.GetContext", Tag: "db", ArgPos: 2}, - {Name: "github.com/jmoiron/sqlx.Select", Tag: "db", ArgPos: 1}, - {Name: "github.com/jmoiron/sqlx.SelectContext", Tag: "db", ArgPos: 2}, - {Name: "github.com/jmoiron/sqlx.StructScan", Tag: "db", ArgPos: 1}, - {Name: "(*github.com/jmoiron/sqlx.Conn).GetContext", Tag: "db", ArgPos: 1}, - {Name: "(*github.com/jmoiron/sqlx.Conn).SelectContext", Tag: "db", ArgPos: 1}, - {Name: "(*github.com/jmoiron/sqlx.DB).Get", Tag: "db", ArgPos: 0}, - {Name: "(*github.com/jmoiron/sqlx.DB).GetContext", Tag: "db", ArgPos: 1}, - {Name: "(*github.com/jmoiron/sqlx.DB).Select", Tag: "db", ArgPos: 0}, - {Name: "(*github.com/jmoiron/sqlx.DB).SelectContext", Tag: "db", ArgPos: 1}, - {Name: "(*github.com/jmoiron/sqlx.NamedStmt).Get", Tag: "db", ArgPos: 0}, - {Name: "(*github.com/jmoiron/sqlx.NamedStmt).GetContext", Tag: "db", ArgPos: 1}, - {Name: "(*github.com/jmoiron/sqlx.NamedStmt).Select", Tag: "db", ArgPos: 0}, - {Name: "(*github.com/jmoiron/sqlx.NamedStmt).SelectContext", Tag: "db", ArgPos: 1}, - {Name: "(*github.com/jmoiron/sqlx.Row).StructScan", Tag: "db", ArgPos: 0}, - {Name: "(*github.com/jmoiron/sqlx.Rows).StructScan", Tag: "db", ArgPos: 0}, - {Name: "(*github.com/jmoiron/sqlx.Stmt).Get", Tag: "db", ArgPos: 0}, - {Name: "(*github.com/jmoiron/sqlx.Stmt).GetContext", Tag: "db", ArgPos: 1}, - {Name: "(*github.com/jmoiron/sqlx.Stmt).Select", Tag: "db", ArgPos: 0}, - {Name: "(*github.com/jmoiron/sqlx.Stmt).SelectContext", Tag: "db", ArgPos: 1}, - {Name: "(*github.com/jmoiron/sqlx.Tx).Get", Tag: "db", ArgPos: 0}, - {Name: "(*github.com/jmoiron/sqlx.Tx).GetContext", Tag: "db", ArgPos: 1}, - {Name: "(*github.com/jmoiron/sqlx.Tx).Select", Tag: "db", ArgPos: 0}, - {Name: "(*github.com/jmoiron/sqlx.Tx).SelectContext", Tag: "db", ArgPos: 1}, -} diff --git a/vendor/go.tmz.dev/musttag/musttag.go b/vendor/go.tmz.dev/musttag/musttag.go deleted file mode 100644 index 7f4e05e75..000000000 --- a/vendor/go.tmz.dev/musttag/musttag.go +++ /dev/null @@ -1,259 +0,0 @@ -// Package musttag implements the musttag analyzer. -package musttag - -import ( - "flag" - "fmt" - "go/ast" - "go/token" - "go/types" - "path" - "reflect" - "regexp" - "strconv" - "strings" - - "golang.org/x/tools/go/analysis" - "golang.org/x/tools/go/analysis/passes/inspect" - "golang.org/x/tools/go/ast/inspector" - "golang.org/x/tools/go/types/typeutil" -) - -// Func describes a function call to look for, e.g. json.Marshal. -type Func struct { - Name string // Name is the full name of the function, including the package. - Tag string // Tag is the struct tag whose presence should be ensured. - ArgPos int // ArgPos is the position of the argument to check. -} - -func (fn Func) shortName() string { - name := strings.NewReplacer("*", "", "(", "", ")", "").Replace(fn.Name) - return path.Base(name) -} - -// New creates a new musttag analyzer. -// To report a custom function provide its description via Func, -// it will be added to the builtin ones. -func New(funcs ...Func) *analysis.Analyzer { - var flagFuncs []Func - return &analysis.Analyzer{ - Name: "musttag", - Doc: "enforce field tags in (un)marshaled structs", - Flags: flags(&flagFuncs), - Requires: []*analysis.Analyzer{inspect.Analyzer}, - Run: func(pass *analysis.Pass) (any, error) { - l := len(builtins) + len(funcs) + len(flagFuncs) - f := make(map[string]Func, l) - - toMap := func(slice []Func) { - for _, fn := range slice { - f[fn.Name] = fn - } - } - toMap(builtins) - toMap(funcs) - toMap(flagFuncs) - - mainModule, err := getMainModule() - if err != nil { - return nil, err - } - - return run(pass, mainModule, f) - }, - } -} - -// flags creates a flag set for the analyzer. -// The funcs slice will be filled with custom functions passed via CLI flags. -func flags(funcs *[]Func) flag.FlagSet { - fs := flag.NewFlagSet("musttag", flag.ContinueOnError) - fs.Func("fn", "report custom function (name:tag:argpos)", func(s string) error { - parts := strings.Split(s, ":") - if len(parts) != 3 || parts[0] == "" || parts[1] == "" { - return strconv.ErrSyntax - } - pos, err := strconv.Atoi(parts[2]) - if err != nil { - return err - } - *funcs = append(*funcs, Func{ - Name: parts[0], - Tag: parts[1], - ArgPos: pos, - }) - return nil - }) - return *fs -} - -// for tests only. -var report = func(pass *analysis.Pass, st *structType, fn Func, fnPos token.Position) { - const format = "`%s` should be annotated with the `%s` tag as it is passed to `%s` at %s" - pass.Reportf(st.Pos, format, st.Name, fn.Tag, fn.shortName(), fnPos) -} - -var cleanFullName = regexp.MustCompile(`([^*/(]+/vendor/)`) - -// run starts the analysis. -func run(pass *analysis.Pass, mainModule string, funcs map[string]Func) (any, error) { - var err error - - walk := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector) - filter := []ast.Node{(*ast.CallExpr)(nil)} - - walk.Preorder(filter, func(n ast.Node) { - if err != nil { - return // there is already an error. - } - - call, ok := n.(*ast.CallExpr) - if !ok { - return // not a function call. - } - - callee := typeutil.StaticCallee(pass.TypesInfo, call) - if callee == nil { - return // not a static call. - } - - name := cleanFullName.ReplaceAllString(callee.FullName(), "") - fn, ok := funcs[name] - if !ok { - return // the function is not supported. - } - - if len(call.Args) <= fn.ArgPos { - err = fmt.Errorf("Func.ArgPos cannot be %d: %s accepts only %d argument(s)", fn.ArgPos, fn.Name, len(call.Args)) - return - } - - arg := call.Args[fn.ArgPos] - if unary, ok := arg.(*ast.UnaryExpr); ok { - arg = unary.X // e.g. json.Marshal(&foo) - } - - initialPos := token.NoPos - switch arg := arg.(type) { - case *ast.Ident: // e.g. json.Marshal(foo) - if arg.Obj == nil { - return // e.g. json.Marshal(nil) - } - initialPos = arg.Obj.Pos() - case *ast.CompositeLit: // e.g. json.Marshal(struct{}{}) - initialPos = arg.Pos() - } - - checker := checker{ - mainModule: mainModule, - seenTypes: make(map[string]struct{}), - } - - t := pass.TypesInfo.TypeOf(arg) - st, ok := checker.parseStructType(t, initialPos) - if !ok { - return // not a struct argument. - } - - result, ok := checker.checkStructType(st, fn.Tag) - if ok { - return // nothing to report. - } - - p := pass.Fset.Position(call.Pos()) - report(pass, result, fn, p) - }) - - return nil, err -} - -// structType is an extension for types.Struct. -// The content of the fields depends on whether the type is named or not. -type structType struct { - *types.Struct - Name string // for types.Named: the type's name; for anonymous: a placeholder string. - Pos token.Pos // for types.Named: the type's position; for anonymous: the corresponding identifier's position. -} - -// checker parses and checks struct types. -type checker struct { - mainModule string - seenTypes map[string]struct{} // prevent panic on recursive types; see issue #16. -} - -// parseStructType parses the given types.Type, returning the underlying struct type. -func (c *checker) parseStructType(t types.Type, pos token.Pos) (*structType, bool) { - for { - // unwrap pointers (if any) first. - ptr, ok := t.(*types.Pointer) - if !ok { - break - } - t = ptr.Elem() - } - - switch t := t.(type) { - case *types.Named: // a struct of the named type. - pkg := t.Obj().Pkg() // may be nil; see issue #38. - if pkg == nil { - return nil, false - } - - if !strings.HasPrefix(pkg.Path(), c.mainModule) { - return nil, false - } - - s, ok := t.Underlying().(*types.Struct) - if !ok { - return nil, false - } - - return &structType{ - Struct: s, - Pos: t.Obj().Pos(), - Name: t.Obj().Name(), - }, true - - case *types.Struct: // an anonymous struct. - return &structType{ - Struct: t, - Pos: pos, - Name: "anonymous struct", - }, true - } - - return nil, false -} - -// checkStructType recursively checks whether the given struct type is annotated with the tag. -// The result is the type of the first nested struct which fields are not properly annotated. -func (c *checker) checkStructType(st *structType, tag string) (*structType, bool) { - c.seenTypes[st.String()] = struct{}{} - - for i := 0; i < st.NumFields(); i++ { - field := st.Field(i) - if !field.Exported() { - continue - } - - if _, ok := reflect.StructTag(st.Tag(i)).Lookup(tag); !ok { - // tag is not required for embedded types; see issue #12. - if !field.Embedded() { - return st, false - } - } - - nested, ok := c.parseStructType(field.Type(), st.Pos) // TODO: or field.Pos()? - if !ok { - continue - } - if _, ok := c.seenTypes[nested.String()]; ok { - continue - } - if result, ok := c.checkStructType(nested, tag); !ok { - return result, false - } - } - - return nil, true -} diff --git a/vendor/go.tmz.dev/musttag/utils.go b/vendor/go.tmz.dev/musttag/utils.go deleted file mode 100644 index 673747f15..000000000 --- a/vendor/go.tmz.dev/musttag/utils.go +++ /dev/null @@ -1,57 +0,0 @@ -package musttag - -import ( - "encoding/json" - "errors" - "fmt" - "io" - "os" - "os/exec" - "strings" -) - -var ( - getwd = os.Getwd - - commandOutput = func(name string, args ...string) (string, error) { - output, err := exec.Command(name, args...).Output() - return string(output), err - } -) - -func getMainModule() (string, error) { - args := []string{"go", "list", "-m", "-json"} - - output, err := commandOutput(args[0], args[1:]...) - if err != nil { - return "", fmt.Errorf("running `%s`: %w", strings.Join(args, " "), err) - } - - cwd, err := getwd() - if err != nil { - return "", fmt.Errorf("getting wd: %w", err) - } - - decoder := json.NewDecoder(strings.NewReader(output)) - - for { - // multiple JSON objects will be returned when using Go workspaces; see #63 for details. - var module struct { - Path string `json:"Path"` - Main bool `json:"Main"` - Dir string `json:"Dir"` - GoMod string `json:"GoMod"` - GoVersion string `json:"GoVersion"` - } - if err := decoder.Decode(&module); err != nil { - if errors.Is(err, io.EOF) { - return "", fmt.Errorf("main module not found\n%s", output) - } - return "", fmt.Errorf("decoding json: %w\n%s", err, output) - } - - if module.Main && strings.HasPrefix(cwd, module.Dir) { - return module.Path, nil - } - } -} -- cgit mrf-deployment