Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prefer to wrap third party errors #243

Merged
merged 1 commit into from
Sep 23, 2022
Merged

Prefer to wrap third party errors #243

merged 1 commit into from
Sep 23, 2022

Conversation

StevenACoffman
Copy link
Collaborator

Prior to #234 the method signature returned *gqlerror.Error which would return a typed nil, so that:

if err != nil {

would fail to detect errors.

Consumers of this library when the method signature returned *gqlerror.Error would frequently do this:

if gqlError != (*gqlerror.Error)(nil) {

Now that the method signature is to return the error interface the first one worked, and the second one no longer does (as it is now always untyped nil). 😞

Similarly, others consumers assume the error interface we return can always be asserted as (*gqlerror.Error) which is not entirely true, as we have some third-party errors which we return without wrapping.

This wraps a few of the most common calls to be able to be asserted as *gqlerror.Error without changing the return signature. However, there are a number of third-party errors we cannot easily wrap at the point of origination because it would cause cyclical dependencies.

I ran wrapcheck configured to ignore this package and found:

gqlparser/ast/decode.go:56:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:61:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:72:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:77:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:87:10: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:94:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:99:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:110:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:115:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:125:10: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:132:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:137:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:142:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:147:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:158:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:168:10: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:175:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:180:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:185:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:190:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:201:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:206:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/decode.go:211:12: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/path.go:42:10: error returned from external package is unwrapped: sig: func encoding/json.Unmarshal(data []byte, v any) error
gqlparser/ast/value.go:56:10: error returned from external package is unwrapped: sig: func strconv.ParseInt(s string, base int, bitSize int) (i int64, err error)
gqlparser/ast/value.go:58:10: error returned from external package is unwrapped: sig: func strconv.ParseFloat(s string, bitSize int) (float64, error)
gqlparser/ast/value.go:62:10: error returned from external package is unwrapped: sig: func strconv.ParseBool(str string) (bool, error)
gqlparser/validator/schema.go:17:15: error returned from external package is unwrapped: sig: func github.com/vektah/gqlparser/v2/parser.ParseSchemas(inputs ...*github.com/vektah/gqlparser/v2/ast.Source) (*github.com/vektah/gqlparser/v2/ast.SchemaDocument, error)

Signed-off-by: Steve Coffman steve@khanacademy.org

Describe your PR and link to any relevant issues.

I have:

  • Added tests covering the bug / feature
  • Updated any relevant documentation

Signed-off-by: Steve Coffman <steve@khanacademy.org>
@StevenACoffman StevenACoffman merged commit bbe8d04 into master Sep 23, 2022
@StevenACoffman StevenACoffman deleted the fixnil branch September 23, 2022 15:19
github-merge-queue bot referenced this pull request in infratographer/x Jul 14, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[github.com/vektah/gqlparser/v2](https://togithub.com/vektah/gqlparser)
| require | patch | `v2.5.1` -> `v2.5.6` |

---

### Release Notes

<details>
<summary>vektah/gqlparser (github.com/vektah/gqlparser/v2)</summary>

###
[`v2.5.6`](https://togithub.com/vektah/gqlparser/releases/tag/v2.5.6)

[Compare
Source](https://togithub.com/vektah/gqlparser/compare/v2.5.5...v2.5.6)

#### What's Changed

- feat: support end of definition comment and end of file comment by
[@&#8203;Warashi](https://togithub.com/Warashi) in
[https://github.com/vektah/gqlparser/pull/264](https://togithub.com/vektah/gqlparser/pull/264)
- feat(formatter): preserve spaces at the head of comments by
[@&#8203;Warashi](https://togithub.com/Warashi) in
[https://github.com/vektah/gqlparser/pull/265](https://togithub.com/vektah/gqlparser/pull/265)

**Full Changelog**:
vektah/gqlparser@v2.5.5...v2.5.6

###
[`v2.5.5`](https://togithub.com/vektah/gqlparser/releases/tag/v2.5.5)

[Compare
Source](https://togithub.com/vektah/gqlparser/compare/v2.5.4...v2.5.5)

#### What's Changed

- feat: format with comments by
[@&#8203;Warashi](https://togithub.com/Warashi) in
[https://github.com/vektah/gqlparser/pull/263](https://togithub.com/vektah/gqlparser/pull/263)

**Full Changelog**:
vektah/gqlparser@v2.5.4...v2.5.5

###
[`v2.5.4`](https://togithub.com/vektah/gqlparser/releases/tag/v2.5.4)

[Compare
Source](https://togithub.com/vektah/gqlparser/compare/v2.5.3...v2.5.4)

#### What's Changed

- feat(lexer): comment token support by
[@&#8203;Warashi](https://togithub.com/Warashi) in
[https://github.com/vektah/gqlparser/pull/261](https://togithub.com/vektah/gqlparser/pull/261)

#### New Contributors

- [@&#8203;Warashi](https://togithub.com/Warashi) made their first
contribution in
[https://github.com/vektah/gqlparser/pull/261](https://togithub.com/vektah/gqlparser/pull/261)

**Full Changelog**:
vektah/gqlparser@v2.5.3...v2.5.4

###
[`v2.5.3`](https://togithub.com/vektah/gqlparser/releases/tag/v2.5.3)

[Compare
Source](https://togithub.com/vektah/gqlparser/compare/v2.5.2...v2.5.3)

#### What's Changed

- Update modules by
[@&#8203;StevenACoffman](https://togithub.com/StevenACoffman) in
[https://github.com/vektah/gqlparser/pull/259](https://togithub.com/vektah/gqlparser/pull/259)

**Full Changelog**:
vektah/gqlparser@v2.5.2...v2.5.3

###
[`v2.5.2`](https://togithub.com/vektah/gqlparser/releases/tag/v2.5.2)

[Compare
Source](https://togithub.com/vektah/gqlparser/compare/v2.5.1...v2.5.2)

#### What's Changed

- Add github actions to lint by
[@&#8203;StevenACoffman](https://togithub.com/StevenACoffman) in
[https://github.com/vektah/gqlparser/pull/241](https://togithub.com/vektah/gqlparser/pull/241)
- GH Actions CI Additions + Linter fixups by
[@&#8203;philipaconrad](https://togithub.com/philipaconrad) in
[https://github.com/vektah/gqlparser/pull/242](https://togithub.com/vektah/gqlparser/pull/242)
- Prefer to wrap third party errors by
[@&#8203;StevenACoffman](https://togithub.com/StevenACoffman) in
[https://github.com/vektah/gqlparser/pull/243](https://togithub.com/vektah/gqlparser/pull/243)
- Remove a duplicate line in lexer_test.yml by
[@&#8203;ryicoh](https://togithub.com/ryicoh) in
[https://github.com/vektah/gqlparser/pull/244](https://togithub.com/vektah/gqlparser/pull/244)
- Point to the right GraphQL spec by
[@&#8203;Khyme](https://togithub.com/Khyme) in
[https://github.com/vektah/gqlparser/pull/250](https://togithub.com/vektah/gqlparser/pull/250)
- Bump json5 from 2.2.0 to 2.2.3 in /validator/imported by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/vektah/gqlparser/pull/251](https://togithub.com/vektah/gqlparser/pull/251)
- support [@&#8203;defer](https://togithub.com/defer) directive by
[@&#8203;fiatjaf](https://togithub.com/fiatjaf) in
[https://github.com/vektah/gqlparser/pull/255](https://togithub.com/vektah/gqlparser/pull/255)
- Don't drop repeatable keyword when formatting directive by
[@&#8203;tadeokondrak](https://togithub.com/tadeokondrak) in
[https://github.com/vektah/gqlparser/pull/256](https://togithub.com/vektah/gqlparser/pull/256)
- Validate directive arguments during schema parsing by
[@&#8203;fredzqm](https://togithub.com/fredzqm) in
[https://github.com/vektah/gqlparser/pull/258](https://togithub.com/vektah/gqlparser/pull/258)
- Validate enum values directive are legit by
[@&#8203;fredzqm](https://togithub.com/fredzqm) in
[https://github.com/vektah/gqlparser/pull/257](https://togithub.com/vektah/gqlparser/pull/257)

#### New Contributors

- [@&#8203;ryicoh](https://togithub.com/ryicoh) made their first
contribution in
[https://github.com/vektah/gqlparser/pull/244](https://togithub.com/vektah/gqlparser/pull/244)
- [@&#8203;Khyme](https://togithub.com/Khyme) made their first
contribution in
[https://github.com/vektah/gqlparser/pull/250](https://togithub.com/vektah/gqlparser/pull/250)
- [@&#8203;fiatjaf](https://togithub.com/fiatjaf) made their first
contribution in
[https://github.com/vektah/gqlparser/pull/255](https://togithub.com/vektah/gqlparser/pull/255)
- [@&#8203;tadeokondrak](https://togithub.com/tadeokondrak) made their
first contribution in
[https://github.com/vektah/gqlparser/pull/256](https://togithub.com/vektah/gqlparser/pull/256)
- [@&#8203;fredzqm](https://togithub.com/fredzqm) made their first
contribution in
[https://github.com/vektah/gqlparser/pull/258](https://togithub.com/vektah/gqlparser/pull/258)

**Full Changelog**:
vektah/gqlparser@v2.5.1...v2.5.2

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/infratographer/x).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMTAuMCIsInVwZGF0ZWRJblZlciI6IjM1LjE0MS4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant