Skip to content

Commit

Permalink
Attribute expressions on private messages can only be used as selectors.
Browse files Browse the repository at this point in the history
The new `selector-expression` EBNF symbol restricts which expressions
can be selectors.  The following expressions are now illegal as
selectors:

  - attribute expressions on public messages,
  - variant expressions,
  - select expressions (even when wrapped in a placeable).
  • Loading branch information
stasm committed Nov 30, 2017
1 parent 6e1a395 commit 7619b5c
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 28 deletions.
23 changes: 10 additions & 13 deletions spec/fluent.asdl
Original file line number Diff line number Diff line change
Expand Up @@ -44,19 +44,16 @@ module Fluent
| Placeable(expr expression, span? span)

-- Expressions
expr = InlineExpression(inline_expr)
| BlockExpression(block_expr)
inline_expr = StringExpression(string)
| NumberExpression(number)
| MessageReference(iden id)
| ExternalArgument(iden id)
| AttributeExpression(iden id, iden name)
| VariantExpression(iden id, varkey key)
| CallExpression(fun callee, arg* arguments)
| Placeable(expr expression)
attributes (span? span)
block_expr = SelectExpression(inline_expr? expression, var* variants)
attributes (span? span)
expr = StringExpression(string)
| NumberExpression(number)
| MessageReference(iden id)
| ExternalArgument(iden id)
| AttributeExpression(iden id, iden name)
| VariantExpression(iden id, varkey key)
| CallExpression(fun callee, arg* arguments)
| SelectExpression(expr? expression, var* variants)
| Placeable(expr expression)
attributes (span? span)

-- Attributes of Message
attr = Attribute(iden id, pat value, span? span)
Expand Down
35 changes: 20 additions & 15 deletions spec/fluent.ebnf
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,9 @@ _ ::= inline-space
NL ::= line-break
__ ::= break-indent

identifier ::= [a-zA-Z] [a-zA-Z0-9_-]*
external-identifier ::= '$' identifier
private-identifier ::= '-'+ identifier
message-identifier ::= identifier | private-identifier
public-identifier ::= [a-zA-Z] [a-zA-Z0-9_-]*
external-identifier ::= '$' public-identifier
private-identifier ::= '-'+ public-identifier

/* exclude whitespace and [ \ ] { } */
word ::= (((char - line-break) - inline-space) - [#x5b#x5c#x5d#x7b#x7d])+
Expand All @@ -40,10 +39,10 @@ variant-list ::= variant* default-variant variant*
tag ::= '#' word
tag-list ::= NL (__ tag)+

attribute ::= NL __ '.' identifier value
attribute ::= NL __ '.' public-identifier value
attribute-list ::= attribute+

message ::= identifier ((value attribute-list?) | (value? attribute-list))
message ::= public-identifier ((value attribute-list?) | (value? attribute-list))
| private-identifier value tag-list?

value ::= _? '=' __? pattern
Expand All @@ -58,24 +57,30 @@ text ::= text-char+
/* in quoted-text " must be escaped */
quoted-text ::= '"' (text-char - '"' | '\"')+ '"'


placeable ::= '{' __? (inline-expression | block-expression) __? '}'

inline-expression ::= quoted-text
| number
| external-identifier
| message-identifier
| attribute-expression
| variant-expression
| public-identifier
| public-attribute-expression
| private-identifier
| private-variant-expression
| call-expression
| placeable
block-expression ::= select-expression
| variant-list

select-expression ::= inline-expression __ '->' __ variant-list
attribute-expression ::= message-identifier '.' identifier
variant-expression ::= message-identifier '[' _? variant-key _? ']'
select-expression ::= selector-expression __ '->' __ variant-list
selector-expression ::= quoted-text
| number
| external-identifier
| public-identifier
| call-expression

public-attribute-expression ::= public-identifier '.' public-identifier
private-variant-expression ::= private-identifier '[' _? variant-key _? ']'

call-expression ::= builtin '(' __? (argument ( __? ',' __? argument)*)? __? ')'
argument ::= inline-expression
| named-argument
named-argument ::= identifier __? ':' __? (quoted-text | number)
named-argument ::= public-identifier __? ':' __? (quoted-text | number)

0 comments on commit 7619b5c

Please sign in to comment.