Replace the current chumsky parser with a handwritten parser.
This is done for the following reasons:
The existing parser was getting very complex. This had a large effect not only on compile times, but also on the responsiveness of RA because of the amount of generics used. The new parser on the other hand uses almost no expensive language features.
The existing parser had lots of branching and recursion. The new parser has much less branching, and the expression parser has zero recursion. It is also a lot more maintainable in terms of adding new features.
The new parser is also more complete, with more edge cases handled (or abled to be handled) correctly.
Other miniscule changes:
Formatting fixes.
The renaming of some types for conciseness.
Replace the use of std::ops::Range with a custom Span struct that is Copy and has some helper functions.
Replace the current
chumsky
parser with a handwritten parser.This is done for the following reasons:
The new parser is also more complete, with more edge cases handled (or abled to be handled) correctly.
Other miniscule changes:
std::ops::Range
with a customSpan
struct that isCopy
and has some helper functions.