about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJosh Triplett <josh@joshtriplett.org>2023-07-05 14:40:07 -0700
committerJosh Triplett <josh@joshtriplett.org>2023-07-05 14:46:56 -0700
commitcde67f65573f54fa59aa954cea9b4e3504a7a8dd (patch)
tree041eaaa8b27ce326bf3ac7b282a30b04927e3cbd
parent5dac6b320be868f898a3c753934eabc79ff2e406 (diff)
downloadrust-cde67f65573f54fa59aa954cea9b4e3504a7a8dd.tar.gz
rust-cde67f65573f54fa59aa954cea9b4e3504a7a8dd.zip
style-guide: Clarify grammar for small patterns (not a semantic change)
The grammar as written feels ambiguous and confusing, in large part
because it uses square brackets and commas in the names of
non-terminals. Rewrite it to avoid symbols in the names of
non-terminals, and to instead wrap terminals in backquotes.
-rw-r--r--src/doc/style-guide/src/expressions.md23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/doc/style-guide/src/expressions.md b/src/doc/style-guide/src/expressions.md
index f5e37b6c46f..a2994baaddc 100644
--- a/src/doc/style-guide/src/expressions.md
+++ b/src/doc/style-guide/src/expressions.md
@@ -752,9 +752,9 @@ not put the `if` clause on a newline. E.g.,
     }
 ```
 
-If every clause in a pattern is *small*, but does not fit on one line, then the
-pattern may be formatted across multiple lines with as many clauses per line as
-possible. Again break before a `|`:
+If every clause in a pattern is *small*, but the whole pattern does not fit on
+one line, then the pattern may be formatted across multiple lines with as many
+clauses per line as possible. Again break before a `|`:
 
 ```rust
     foo | bar | baz
@@ -763,17 +763,18 @@ possible. Again break before a `|`:
     }
 ```
 
-We define a pattern clause to be *small* if it matches the following grammar:
+We define a pattern clause to be *small* if it fits on a single line and
+matches "small" in the following grammar:
 
 ```
-[small, ntp]:
-    - single token
-    - `&[single-line, ntp]`
+small:
+    - smallntp
+    - unary tuple constructor: `(` smallntp `,` `)`
+    - `&` small
 
-[small]:
-    - `[small, ntp]`
-    - unary tuple constructor `([small, ntp])`
-    - `&[small]`
+smallntp:
+    - single token
+    - `&` smallntp
 ```
 
 E.g., `&&Some(foo)` matches, `Foo(4, Bar)` does not.