Comments (2)
Unfortunately it doesn't seem like there is an easy way to get a partial parse tree out of Pest.
However, if we just keep repeatedly (almost blindly) adding one of the "expected" at the point it expects it, then we can force it to give a complete tree, and this helps identify the issue and fix it.
For example, taking the above example and completing it to something the parser (before the fix) would finish parsing, we get:
fn get(&'a self) -> (o: &':a !V) {
0
}
which parses to
- fn
- fn_str: "fn"
- name > identifier: "get"
- param_list > param
- pat_no_top_alt > pat_inner > ref_pat > pat > pat_inner > literal_pat > literal > char: "'a self) -> (o: &'"
- colon_str: ":"
- type > macro_type > macro_call
- path > path_segment > name_ref > identifier: "a"
- bang_str: "!"
- token_tree > token > identifier: "V"
- fn_qualifier: ""
- fn_terminator > fn_block_expr > expr > expr_inner > literal > int_number: "0"
Clearly that char
there is just bogus, so I looked at the char
definition and fixed it in 4490ebe
After the fix, the original code, when sent through the parser succeeds with the correct parse tree:
- fn
- fn_str: "fn"
- name > identifier: "get"
- param_list > param > type > ref_type
- lifetime > lifetime_ident: "'a"
- type > path_type > path > path_segment > name_ref > self_str: "self"
- ret_type
- rarrow_str: "->"
- lparen_str: "("
- name > identifier: "o"
- colon_str: ":"
- type > ref_type
- lifetime > lifetime_ident: "'a"
- type > path_type > path > path_segment > name_ref > identifier: "V"
- rparen_str: ")"
- fn_qualifier: ""
- fn_terminator > fn_block_expr > expr > expr_inner > literal > int_number: "0"
from verusfmt.
Ah, nice find. Thanks for tracking it down and for the explanation.
from verusfmt.
Related Issues (20)
- Consider adding an extra output mode, that prints erased code
- Handling inline comments outside the main verus-body
- Mis-parsing requires clauses as generic arguments HOT 1
- Report filename when formatting multiple files
- Non-idempotency for comment being moved to same line HOT 1
- Incorrect operator precedence for `&&&` and `forall` HOT 2
- Add support for locally opting out of verusfmt
- Non-idempotency of macro items in presence of in-file `mod`ules
- Non-idempotent `verus!` inside `macro_rules!`
- Formatting of multi-line `seq!` macro HOT 1
- Preservation of stanzas HOT 1
- Unnecessary newline in same-file `mod`ules
- Better handle CRLF normalization
- Allow marking a file as skipped
- odd newline & indentation choices HOT 1
- verus accepts empty requires clause, verusfmt doesn't HOT 1
- Unsupported parsing object 'const_arg' when I used seq macro to repeat some codes inside verus macro. HOT 2
- When using matches, or ('||') is parsed as closure ('| |'). HOT 1
- 'broadcast use' not handled correctly HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from verusfmt.