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

Improve error prompt information when there is insufficient input #376

Closed
A4-Tacks opened this issue May 29, 2024 · 1 comment
Closed

Improve error prompt information when there is insufficient input #376

A4-Tacks opened this issue May 29, 2024 · 1 comment

Comments

@A4-Tacks
Copy link
Contributor

error output:

error: proc macro panicked
 --> src/main.rs:1:1
  |
1 | / peg::parser!(
2 | |     grammar parser() for str
3 | | );
  | |_^
  |
  = help: message: index out of bounds: the len is 6 but the index is 6

from source

fn position_repr(&self, pos: usize) -> Sp {
Sp(self.tokens[pos].span(), pos)
}

pub fn into_parse_error<I: Parse + ?Sized>(self, input: &I) -> ParseError<I::PositionRepr> {
ParseError {
location: Parse::position_repr(input, self.max_err_pos.into()),
expected: self.expected,
}
}

I tried to improve, but couldn't find a good way to obtain the Location of the input eof

@kevinmehall
Copy link
Owner

kevinmehall commented Jun 2, 2024

Fixed in d888952.

I don't know of a way to get a span pointing at the closing } of the macro, and also want to handle the case of an empty peg::parser!() with no other span available, so the span is just the full Span::call_site(), but at least it's not a panic.

error: expected one of "::", "<", "{" at end of input
 --> tests/compile-fail/incomplete_grammar.rs:4:1
  |
4 | / peg::parser!(
5 | |     grammar parser() for str
6 | | );
  | |_^
  |
  = note: this error originates in the macro `peg::parser` (in Nightly builds, run with -Z macro-backtrace for more info)

renovate bot referenced this issue in rosetta-rs/parse-rosetta-rs Aug 1, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [peg](https://togithub.com/kevinmehall/rust-peg) | dependencies |
patch | `0.8.3` -> `0.8.4` |
| [pest](https://pest.rs/)
([source](https://togithub.com/pest-parser/pest)) | dependencies | patch
| `2.7.10` -> `2.7.11` |
| [serde_json](https://togithub.com/serde-rs/json) | dependencies |
patch | `1.0.119` -> `1.0.121` |
| [winnow](https://togithub.com/winnow-rs/winnow) | dependencies | patch
| `0.6.13` -> `0.6.18` |

---

### Release Notes

<details>
<summary>kevinmehall/rust-peg (peg)</summary>

###
[`v0.8.4`](https://togithub.com/kevinmehall/rust-peg/releases/tag/0.8.4)

[Compare
Source](https://togithub.com/kevinmehall/rust-peg/compare/0.8.3...0.8.4)

#### Fixes

- Fix macro panic for parse error at end of `peg::parser!{ }`
specification
([https://github.com/kevinmehall/rust-peg/issues/376](https://togithub.com/kevinmehall/rust-peg/issues/376))
by [@&#8203;kevinmehall](https://togithub.com/kevinmehall)
- Fix handling of `r#` raw idents
([#&#8203;378](https://togithub.com/kevinmehall/rust-peg/issues/378)) by
[@&#8203;A4-Tacks](https://togithub.com/A4-Tacks) in
[https://github.com/kevinmehall/rust-peg/pull/379](https://togithub.com/kevinmehall/rust-peg/pull/379)

**Full Changelog**:
kevinmehall/rust-peg@0.8.3...0.8.4

</details>

<details>
<summary>pest-parser/pest (pest)</summary>

###
[`v2.7.11`](https://togithub.com/pest-parser/pest/releases/tag/v2.7.11)

[Compare
Source](https://togithub.com/pest-parser/pest/compare/v2.7.10...v2.7.11)

##### What's Changed

- Avoid computing line offsets after the last token by
[@&#8203;wabain](https://togithub.com/wabain) in
[https://github.com/pest-parser/pest/pull/1023](https://togithub.com/pest-parser/pest/pull/1023)
- fix: Remove unnecessary qualification by
[@&#8203;austriancoder](https://togithub.com/austriancoder) in
[https://github.com/pest-parser/pest/pull/1024](https://togithub.com/pest-parser/pest/pull/1024)

##### New Contributors

- [@&#8203;wabain](https://togithub.com/wabain) made their first
contribution in
[https://github.com/pest-parser/pest/pull/1023](https://togithub.com/pest-parser/pest/pull/1023)
- [@&#8203;austriancoder](https://togithub.com/austriancoder) made their
first contribution in
[https://github.com/pest-parser/pest/pull/1024](https://togithub.com/pest-parser/pest/pull/1024)

**Full Changelog**:
pest-parser/pest@v2.7.10...v2.7.11

##### Warning: Semantic Versioning

Note that the node tag feature in 2.6.0 was a technically
semver-breaking change even though it is a backwards-compatible /
non-breaking change in the meta-grammar. There may be similar
non-breaking changes to the meta-grammar between minor versions in the
future. These non-breaking changes, however, may translate into
semver-breaking changes due to the additional variants propagated from
the generated `Rule` enum.

This new feature caused issues in some Cargo version resolution
situations where Cargo mixed different versions of pest dependencies.
For this reason, these "grammar non-breaking but semver-breaking"
changes are now available only under the "grammar-extras" feature flag.
If you would like to use node tags (or other future grammar features),
you can do so by enabling this flag on the pest_derive crate in your
Cargo.toml:

    ...
    pest_derive = { version = "2.7", features = ["grammar-extras"] }

</details>

<details>
<summary>serde-rs/json (serde_json)</summary>

###
[`v1.0.121`](https://togithub.com/serde-rs/json/releases/tag/v1.0.121)

[Compare
Source](https://togithub.com/serde-rs/json/compare/v1.0.120...v1.0.121)

- Optimize position search in error path
([#&#8203;1160](https://togithub.com/serde-rs/json/issues/1160), thanks
[@&#8203;purplesyringa](https://togithub.com/purplesyringa))

###
[`v1.0.120`](https://togithub.com/serde-rs/json/releases/tag/v1.0.120)

[Compare
Source](https://togithub.com/serde-rs/json/compare/v1.0.119...v1.0.120)

- Correctly specify required version of `indexmap` dependency
([#&#8203;1152](https://togithub.com/serde-rs/json/issues/1152), thanks
[@&#8203;cforycki](https://togithub.com/cforycki))

</details>

<details>
<summary>winnow-rs/winnow (winnow)</summary>

###
[`v0.6.18`](https://togithub.com/winnow-rs/winnow/blob/HEAD/CHANGELOG.md#0618---2024-07-31)

[Compare
Source](https://togithub.com/winnow-rs/winnow/compare/v0.6.17...v0.6.18)

###
[`v0.6.17`](https://togithub.com/winnow-rs/winnow/blob/HEAD/CHANGELOG.md#0617---2024-07-31)

[Compare
Source](https://togithub.com/winnow-rs/winnow/compare/v0.6.16...v0.6.17)

##### Features

-   Make `Checkpoint`s comparable

###
[`v0.6.16`](https://togithub.com/winnow-rs/winnow/blob/HEAD/CHANGELOG.md#0616---2024-07-25)

[Compare
Source](https://togithub.com/winnow-rs/winnow/compare/v0.6.15...v0.6.16)

###
[`v0.6.15`](https://togithub.com/winnow-rs/winnow/blob/HEAD/CHANGELOG.md#0615---2024-07-22)

[Compare
Source](https://togithub.com/winnow-rs/winnow/compare/v0.6.14...v0.6.15)

##### Compatibility

-   Deprecated `Parser::recognize` in favor of `Parser::take`
-   Deprecated `Parser::with_recognized` in favor of `Parser::taken`

##### Fixes

- Renamed `Parser::recognize` to `Parser::take` to be consistent with
other `take` parsers
- Renamed `Parser::with_recognized` to `Parser::with_taken` to be
consistent with other `take` parsers

###
[`v0.6.14`](https://togithub.com/winnow-rs/winnow/blob/HEAD/CHANGELOG.md#0614---2024-07-19)

[Compare
Source](https://togithub.com/winnow-rs/winnow/compare/v0.6.13...v0.6.14)

##### Fixes

-   Removed unused `I: Clone` bound on `Parser::parse`

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 5am on the first day of the
month" (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

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

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

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

---

This PR was generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View the
[repository job
log](https://developer.mend.io/github/rosetta-rs/parse-rosetta-rs).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40NDAuNyIsInVwZGF0ZWRJblZlciI6IjM3LjQ0MC43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

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

No branches or pull requests

2 participants