Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
current state is just hacked together POC with some notes
need to integrate with damnhandy test cases
challenges
unreserved character encoding lives at the expression level, but we need that
info to build regex at varspec level
matching of fragment and unreserved characters in list is seemingly impossible
since
,
is allowed in fragments, but is also the separator token. The RFC seemsto note this so most likely the solution is to document that we don't support
values with reserved delimiters
does order need to be considered for key-value paired expressions like ; ? & ifso
named capture groups cannot be used here
idea:
expressions surface two methods,
getMatchPattern()
andMap getMatches(Matcher)
getMatchPattern
returns a regex to match that expression, but rather than usingnamed capture groups which can be used at the top level, the expression uses
getMatches to return a map from variable names to values (which can internally use
ncg, or not).
ex:
{/var,x}/here{?x,y,empty}
might generate pattern like(?<TWFuIGlzI>(?<var>\/[unreserved]*)(?<x>\/[unreserved]*))\/here(?<GRpc3Rp>\?((x|y|empty)=([unreserved]*)&?){0,3})
the expression
{/var,x}
would grab the groupTWFuIGlzI
and use the known groupnames with ncg to get
var
andx
, while{?x,y,empty}
would look at each key value group tuple#2