From 51389702f26d25eb78f9e848f478cf2640544a29 Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Thu, 25 Jun 2020 18:48:43 +0100 Subject: spec: allow trailing delimiters --- dhall/src/syntax/text/dhall.abnf | 13 +++++++------ dhall/tests/parser/failure/unit/ListLitTwoCommas.txt | 6 ++++++ dhall/tests/parser/failure/unit/ProjectionTwoCommas.txt | 6 ++++++ dhall/tests/parser/failure/unit/RecordTwoCommas.txt | 6 ++++++ dhall/tests/parser/failure/unit/UnionTypeTwoDelims.txt | 6 ++++++ dhall/tests/parser/success/unit/ListLitEmptyCommaB.txt | 1 + dhall/tests/parser/success/unit/ListLitLeadingCommaB.txt | 1 + .../success/unit/ListLitTrailingAndLeadingCommasB.txt | 1 + dhall/tests/parser/success/unit/ListLitTrailingCommaB.txt | 1 + dhall/tests/parser/success/unit/ProjectionLeadingCommaB.txt | 1 + .../success/unit/ProjectionTrailingAndLeadingCommasB.txt | 1 + .../tests/parser/success/unit/ProjectionTrailingCommaB.txt | 1 + .../parser/success/unit/RecordLitEmptyLeadingCommaB.txt | 1 + .../parser/success/unit/RecordLitEmptyTrailingCommaB.txt | 1 + dhall/tests/parser/success/unit/RecordLitLeadingCommaB.txt | 1 + .../success/unit/RecordLitTrailingAndLeadingCommasB.txt | 1 + dhall/tests/parser/success/unit/RecordLitTrailingCommaB.txt | 1 + dhall/tests/parser/success/unit/RecordTypeEmptyCommaB.txt | 1 + dhall/tests/parser/success/unit/RecordTypeLeadingCommaB.txt | 1 + .../success/unit/RecordTypeTrailingAndLeadingCommasB.txt | 1 + .../tests/parser/success/unit/RecordTypeTrailingCommaB.txt | 1 + dhall/tests/parser/success/unit/UnionTypeEmptyDelimB.txt | 1 + dhall/tests/parser/success/unit/UnionTypeLeadingDelimB.txt | 1 + .../success/unit/UnionTypeTrailingAndLeadingDelimsB.txt | 1 + dhall/tests/parser/success/unit/UnionTypeTrailingDelimB.txt | 1 + 25 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 dhall/tests/parser/failure/unit/ListLitTwoCommas.txt create mode 100644 dhall/tests/parser/failure/unit/ProjectionTwoCommas.txt create mode 100644 dhall/tests/parser/failure/unit/RecordTwoCommas.txt create mode 100644 dhall/tests/parser/failure/unit/UnionTypeTwoDelims.txt create mode 100644 dhall/tests/parser/success/unit/ListLitEmptyCommaB.txt create mode 100644 dhall/tests/parser/success/unit/ListLitLeadingCommaB.txt create mode 100644 dhall/tests/parser/success/unit/ListLitTrailingAndLeadingCommasB.txt create mode 100644 dhall/tests/parser/success/unit/ListLitTrailingCommaB.txt create mode 100644 dhall/tests/parser/success/unit/ProjectionLeadingCommaB.txt create mode 100644 dhall/tests/parser/success/unit/ProjectionTrailingAndLeadingCommasB.txt create mode 100644 dhall/tests/parser/success/unit/ProjectionTrailingCommaB.txt create mode 100644 dhall/tests/parser/success/unit/RecordLitEmptyLeadingCommaB.txt create mode 100644 dhall/tests/parser/success/unit/RecordLitEmptyTrailingCommaB.txt create mode 100644 dhall/tests/parser/success/unit/RecordLitLeadingCommaB.txt create mode 100644 dhall/tests/parser/success/unit/RecordLitTrailingAndLeadingCommasB.txt create mode 100644 dhall/tests/parser/success/unit/RecordLitTrailingCommaB.txt create mode 100644 dhall/tests/parser/success/unit/RecordTypeEmptyCommaB.txt create mode 100644 dhall/tests/parser/success/unit/RecordTypeLeadingCommaB.txt create mode 100644 dhall/tests/parser/success/unit/RecordTypeTrailingAndLeadingCommasB.txt create mode 100644 dhall/tests/parser/success/unit/RecordTypeTrailingCommaB.txt create mode 100644 dhall/tests/parser/success/unit/UnionTypeEmptyDelimB.txt create mode 100644 dhall/tests/parser/success/unit/UnionTypeLeadingDelimB.txt create mode 100644 dhall/tests/parser/success/unit/UnionTypeTrailingAndLeadingDelimsB.txt create mode 100644 dhall/tests/parser/success/unit/UnionTypeTrailingDelimB.txt (limited to 'dhall') diff --git a/dhall/src/syntax/text/dhall.abnf b/dhall/src/syntax/text/dhall.abnf index 37ec43b..2d487f5 100644 --- a/dhall/src/syntax/text/dhall.abnf +++ b/dhall/src/syntax/text/dhall.abnf @@ -853,7 +853,8 @@ selector-expression = primitive-expression *(whsp "." whsp selector) selector = any-label / labels / type-selector -labels = "{" whsp [ any-label-or-some whsp *("," whsp any-label-or-some whsp) ] "}" +labels = + "{" whsp [ "," whsp ] [ any-label-or-some whsp *("," whsp any-label-or-some whsp) [ "," whsp ] ] "}" type-selector = "(" whsp expression whsp ")" ; NOTE: Backtrack when parsing the first three alternatives (i.e. the numeric @@ -894,18 +895,18 @@ record-type-or-literal = empty-record-literal / [non-empty-record-type-or-literal] -empty-record-literal = "=" +empty-record-literal = "=" [ whsp "," ] non-empty-record-type-or-literal = (non-empty-record-type / non-empty-record-literal) non-empty-record-type = - record-type-entry *(whsp "," whsp record-type-entry) + record-type-entry *(whsp "," whsp record-type-entry) [ whsp "," ] record-type-entry = any-label-or-some whsp ":" whsp1 expression non-empty-record-literal = - record-literal-entry *(whsp "," whsp record-literal-entry) + record-literal-entry *(whsp "," whsp record-literal-entry) [ whsp "," ] ; If the `record-literal-normal-entry` is absent, that represents a punned ; record entry, such as in `{ x }`, which is a short-hand for `{ x = x }` @@ -918,7 +919,7 @@ record-literal-normal-entry = ; If the `union-type-entry` is absent, that represents an empty union ; alternative, such as in `< Heads | Tails >` union-type = - [union-type-entry *(whsp "|" whsp union-type-entry)] + [union-type-entry *(whsp "|" whsp union-type-entry) [ whsp "|" ]] ; x : Natural ; x @@ -926,7 +927,7 @@ union-type-entry = any-label-or-some [ whsp ":" whsp1 expression ] non-empty-list-literal = - "[" whsp [ "," whsp ] expression whsp *("," whsp expression whsp) "]" + "[" whsp [ "," whsp ] expression whsp *("," whsp expression whsp) [ "," whsp ] "]" ; This just adds surrounding whitespace for the top-level of the program complete-expression = whsp expression whsp diff --git a/dhall/tests/parser/failure/unit/ListLitTwoCommas.txt b/dhall/tests/parser/failure/unit/ListLitTwoCommas.txt new file mode 100644 index 0000000..1cdfed5 --- /dev/null +++ b/dhall/tests/parser/failure/unit/ListLitTwoCommas.txt @@ -0,0 +1,6 @@ + --> 1:4 + | +1 | [ ,, ]␊ + | ^--- + | + = expected expression diff --git a/dhall/tests/parser/failure/unit/ProjectionTwoCommas.txt b/dhall/tests/parser/failure/unit/ProjectionTwoCommas.txt new file mode 100644 index 0000000..1585703 --- /dev/null +++ b/dhall/tests/parser/failure/unit/ProjectionTwoCommas.txt @@ -0,0 +1,6 @@ + --> 1:8 + | +1 | foo.{ ,, }␊ + | ^--- + | + = expected any_label_or_some diff --git a/dhall/tests/parser/failure/unit/RecordTwoCommas.txt b/dhall/tests/parser/failure/unit/RecordTwoCommas.txt new file mode 100644 index 0000000..3828d4b --- /dev/null +++ b/dhall/tests/parser/failure/unit/RecordTwoCommas.txt @@ -0,0 +1,6 @@ + --> 1:4 + | +1 | { ,, }␊ + | ^--- + | + = expected any_label_or_some or empty_record_literal diff --git a/dhall/tests/parser/failure/unit/UnionTypeTwoDelims.txt b/dhall/tests/parser/failure/unit/UnionTypeTwoDelims.txt new file mode 100644 index 0000000..c4fa37e --- /dev/null +++ b/dhall/tests/parser/failure/unit/UnionTypeTwoDelims.txt @@ -0,0 +1,6 @@ + --> 1:4 + | +1 | < || >␊ + | ^--- + | + = expected any_label_or_some diff --git a/dhall/tests/parser/success/unit/ListLitEmptyCommaB.txt b/dhall/tests/parser/success/unit/ListLitEmptyCommaB.txt new file mode 100644 index 0000000..3b99552 --- /dev/null +++ b/dhall/tests/parser/success/unit/ListLitEmptyCommaB.txt @@ -0,0 +1 @@ +[] : List Bool diff --git a/dhall/tests/parser/success/unit/ListLitLeadingCommaB.txt b/dhall/tests/parser/success/unit/ListLitLeadingCommaB.txt new file mode 100644 index 0000000..5ed6f26 --- /dev/null +++ b/dhall/tests/parser/success/unit/ListLitLeadingCommaB.txt @@ -0,0 +1 @@ +[x, y] diff --git a/dhall/tests/parser/success/unit/ListLitTrailingAndLeadingCommasB.txt b/dhall/tests/parser/success/unit/ListLitTrailingAndLeadingCommasB.txt new file mode 100644 index 0000000..5ed6f26 --- /dev/null +++ b/dhall/tests/parser/success/unit/ListLitTrailingAndLeadingCommasB.txt @@ -0,0 +1 @@ +[x, y] diff --git a/dhall/tests/parser/success/unit/ListLitTrailingCommaB.txt b/dhall/tests/parser/success/unit/ListLitTrailingCommaB.txt new file mode 100644 index 0000000..5ed6f26 --- /dev/null +++ b/dhall/tests/parser/success/unit/ListLitTrailingCommaB.txt @@ -0,0 +1 @@ +[x, y] diff --git a/dhall/tests/parser/success/unit/ProjectionLeadingCommaB.txt b/dhall/tests/parser/success/unit/ProjectionLeadingCommaB.txt new file mode 100644 index 0000000..519da8c --- /dev/null +++ b/dhall/tests/parser/success/unit/ProjectionLeadingCommaB.txt @@ -0,0 +1 @@ +foo.{ x, y } diff --git a/dhall/tests/parser/success/unit/ProjectionTrailingAndLeadingCommasB.txt b/dhall/tests/parser/success/unit/ProjectionTrailingAndLeadingCommasB.txt new file mode 100644 index 0000000..519da8c --- /dev/null +++ b/dhall/tests/parser/success/unit/ProjectionTrailingAndLeadingCommasB.txt @@ -0,0 +1 @@ +foo.{ x, y } diff --git a/dhall/tests/parser/success/unit/ProjectionTrailingCommaB.txt b/dhall/tests/parser/success/unit/ProjectionTrailingCommaB.txt new file mode 100644 index 0000000..519da8c --- /dev/null +++ b/dhall/tests/parser/success/unit/ProjectionTrailingCommaB.txt @@ -0,0 +1 @@ +foo.{ x, y } diff --git a/dhall/tests/parser/success/unit/RecordLitEmptyLeadingCommaB.txt b/dhall/tests/parser/success/unit/RecordLitEmptyLeadingCommaB.txt new file mode 100644 index 0000000..339130f --- /dev/null +++ b/dhall/tests/parser/success/unit/RecordLitEmptyLeadingCommaB.txt @@ -0,0 +1 @@ +{=} diff --git a/dhall/tests/parser/success/unit/RecordLitEmptyTrailingCommaB.txt b/dhall/tests/parser/success/unit/RecordLitEmptyTrailingCommaB.txt new file mode 100644 index 0000000..339130f --- /dev/null +++ b/dhall/tests/parser/success/unit/RecordLitEmptyTrailingCommaB.txt @@ -0,0 +1 @@ +{=} diff --git a/dhall/tests/parser/success/unit/RecordLitLeadingCommaB.txt b/dhall/tests/parser/success/unit/RecordLitLeadingCommaB.txt new file mode 100644 index 0000000..325db4f --- /dev/null +++ b/dhall/tests/parser/success/unit/RecordLitLeadingCommaB.txt @@ -0,0 +1 @@ +{ x = 0, y = 1 } diff --git a/dhall/tests/parser/success/unit/RecordLitTrailingAndLeadingCommasB.txt b/dhall/tests/parser/success/unit/RecordLitTrailingAndLeadingCommasB.txt new file mode 100644 index 0000000..325db4f --- /dev/null +++ b/dhall/tests/parser/success/unit/RecordLitTrailingAndLeadingCommasB.txt @@ -0,0 +1 @@ +{ x = 0, y = 1 } diff --git a/dhall/tests/parser/success/unit/RecordLitTrailingCommaB.txt b/dhall/tests/parser/success/unit/RecordLitTrailingCommaB.txt new file mode 100644 index 0000000..325db4f --- /dev/null +++ b/dhall/tests/parser/success/unit/RecordLitTrailingCommaB.txt @@ -0,0 +1 @@ +{ x = 0, y = 1 } diff --git a/dhall/tests/parser/success/unit/RecordTypeEmptyCommaB.txt b/dhall/tests/parser/success/unit/RecordTypeEmptyCommaB.txt new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/dhall/tests/parser/success/unit/RecordTypeEmptyCommaB.txt @@ -0,0 +1 @@ +{} diff --git a/dhall/tests/parser/success/unit/RecordTypeLeadingCommaB.txt b/dhall/tests/parser/success/unit/RecordTypeLeadingCommaB.txt new file mode 100644 index 0000000..b88d0ae --- /dev/null +++ b/dhall/tests/parser/success/unit/RecordTypeLeadingCommaB.txt @@ -0,0 +1 @@ +{ x : T, y : U } diff --git a/dhall/tests/parser/success/unit/RecordTypeTrailingAndLeadingCommasB.txt b/dhall/tests/parser/success/unit/RecordTypeTrailingAndLeadingCommasB.txt new file mode 100644 index 0000000..b88d0ae --- /dev/null +++ b/dhall/tests/parser/success/unit/RecordTypeTrailingAndLeadingCommasB.txt @@ -0,0 +1 @@ +{ x : T, y : U } diff --git a/dhall/tests/parser/success/unit/RecordTypeTrailingCommaB.txt b/dhall/tests/parser/success/unit/RecordTypeTrailingCommaB.txt new file mode 100644 index 0000000..b88d0ae --- /dev/null +++ b/dhall/tests/parser/success/unit/RecordTypeTrailingCommaB.txt @@ -0,0 +1 @@ +{ x : T, y : U } diff --git a/dhall/tests/parser/success/unit/UnionTypeEmptyDelimB.txt b/dhall/tests/parser/success/unit/UnionTypeEmptyDelimB.txt new file mode 100644 index 0000000..c677118 --- /dev/null +++ b/dhall/tests/parser/success/unit/UnionTypeEmptyDelimB.txt @@ -0,0 +1 @@ +< > diff --git a/dhall/tests/parser/success/unit/UnionTypeLeadingDelimB.txt b/dhall/tests/parser/success/unit/UnionTypeLeadingDelimB.txt new file mode 100644 index 0000000..0f942c8 --- /dev/null +++ b/dhall/tests/parser/success/unit/UnionTypeLeadingDelimB.txt @@ -0,0 +1 @@ +< x: T | y: U > diff --git a/dhall/tests/parser/success/unit/UnionTypeTrailingAndLeadingDelimsB.txt b/dhall/tests/parser/success/unit/UnionTypeTrailingAndLeadingDelimsB.txt new file mode 100644 index 0000000..0f942c8 --- /dev/null +++ b/dhall/tests/parser/success/unit/UnionTypeTrailingAndLeadingDelimsB.txt @@ -0,0 +1 @@ +< x: T | y: U > diff --git a/dhall/tests/parser/success/unit/UnionTypeTrailingDelimB.txt b/dhall/tests/parser/success/unit/UnionTypeTrailingDelimB.txt new file mode 100644 index 0000000..0f942c8 --- /dev/null +++ b/dhall/tests/parser/success/unit/UnionTypeTrailingDelimB.txt @@ -0,0 +1 @@ +< x: T | y: U > -- cgit v1.2.3