From 8fd2fb4871335c72b9448da4a66144fd7f986f09 Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Thu, 25 Jun 2020 14:21:02 +0100 Subject: spec!: remove the ability to quote paths in URLs --- dhall/src/syntax/text/dhall.abnf | 9 ++------- dhall/src/syntax/text/dhall.pest.visibility | 2 +- dhall/src/syntax/text/parser.rs | 11 +++++------ 3 files changed, 8 insertions(+), 14 deletions(-) (limited to 'dhall/src/syntax/text') diff --git a/dhall/src/syntax/text/dhall.abnf b/dhall/src/syntax/text/dhall.abnf index 26f6eab..4061de2 100644 --- a/dhall/src/syntax/text/dhall.abnf +++ b/dhall/src/syntax/text/dhall.abnf @@ -582,7 +582,6 @@ scheme = %x68.74.74.70 [ %x73 ] ; "http" [ "s" ] ; NOTE: This does not match the official grammar for a URI. Specifically: ; -; * path segments may be quoted instead of using percent-encoding ; * this does not support fragment identifiers, which have no meaning within ; Dhall expressions and do not affect import resolution ; * the characters "(" ")" and "," are not included in the `sub-delims` rule: @@ -595,13 +594,9 @@ scheme = %x68.74.74.70 [ %x73 ] ; "http" [ "s" ] ; ; Reserved characters in quoted path components should be percent-encoded ; according to https://tools.ietf.org/html/rfc3986#section-2 -http-raw = scheme "://" authority url-path [ "?" query ] +http-raw = scheme "://" authority path-abempty [ "?" query ] -; Temporary rule to allow old-style `path-component`s and RFC3986 `segment`s in -; the same grammar. Eventually we can just use `path-abempty` from the same -; RFC. See issue #581 - -url-path = *(path-component / "/" segment) +path-abempty = *( "/" segment ) ; NOTE: Backtrack if parsing the optional user info prefix fails authority = [ userinfo "@" ] host [ ":" port ] diff --git a/dhall/src/syntax/text/dhall.pest.visibility b/dhall/src/syntax/text/dhall.pest.visibility index 2fee160..6de7dd2 100644 --- a/dhall/src/syntax/text/dhall.pest.visibility +++ b/dhall/src/syntax/text/dhall.pest.visibility @@ -120,7 +120,7 @@ home_path absolute_path scheme http_raw -url_path +path_abempty authority # userinfo # host diff --git a/dhall/src/syntax/text/parser.rs b/dhall/src/syntax/text/parser.rs index 1c51ca2..06c1ac3 100644 --- a/dhall/src/syntax/text/parser.rs +++ b/dhall/src/syntax/text/parser.rs @@ -514,14 +514,14 @@ impl DhallParser { fn http_raw(input: ParseInput) -> ParseResult> { Ok(match_nodes!(input.into_children(); - [scheme(sch), authority(auth), url_path(p)] => URL { + [scheme(sch), authority(auth), path_abempty(p)] => URL { scheme: sch, authority: auth, path: p, query: None, headers: None, }, - [scheme(sch), authority(auth), url_path(p), query(q)] => URL { + [scheme(sch), authority(auth), path_abempty(p), query(q)] => URL { scheme: sch, authority: auth, path: p, @@ -531,10 +531,10 @@ impl DhallParser { )) } - fn url_path(input: ParseInput) -> ParseResult { + fn path_abempty(input: ParseInput) -> ParseResult { Ok(match_nodes!(input.into_children(); - [path_component(components)..] => { - let mut file_path: Vec<_> = components.collect(); + [segment(segments)..] => { + let mut file_path: Vec<_> = segments.collect(); // An empty path normalizes to "/" if file_path.is_empty() { file_path = vec!["".to_owned()]; @@ -548,7 +548,6 @@ impl DhallParser { Ok(input.as_str().to_owned()) } - #[alias(path_component)] fn segment(input: ParseInput) -> ParseResult { Ok(input.as_str().to_string()) } -- cgit v1.2.3