Feature #4935
closedQuoted Label Form for 1.9 Hashes
Description
As discussed in the "Shorthand Hash Syntax for Strings" thread/feature request, several (including Matz) expressed interest in a parallel quoted form for the 1.9 label syntax:
{ foo: bar }
{ 'only-19': true }
x = "hello"
{ "#{x}-world": Date.now }
This personally has come up for me with the new syntax: especially when dealing with command-line options, which often use hyphens, the quoted symbol form is necessary. Not being able to use the new syntax results in funny-looking hashes:
{ foo: bar, baz: qux, :'abc-def' => 1 }
I've attached a patch implementing this change. It allows a colon to follow single-quoted or double-quoted string literals to form a symbol key much like the label syntax introduced in 1.9. The examples listed at the start of this post all work fine. It introduces a new token - tLABEL_END - which replaces tSTRING_END when closing a symbol-label-literal. It introduces a single new grammar production for assoc, which is nearly purely syntactic sugar for the dsym grammar production; I've extracted dsym's implementation to a separate helper function, which is called from the dsym production and from the new label-style production.
I will immediately attach a new passing test for test_hash.rb in a followup post, once this has a feature # and ruby-core thread assigned to it.
NB: By removing the quote check on line 6580, one can make this feature work with any string literal (like "{ %q/foo-bar/: baz}", obviously doesn't work with heredocs) - I personally find this to be silly and inconsistent with the existing symbol syntax. Though it was fun to play with for a bit.
Files
Updated by adgar (Michael Edgar) over 13 years ago
- File label_test.diff label_test.diff added
Sorry, meant to list this as a feature. Test attached.
Updated by shyouhei (Shyouhei Urabe) over 13 years ago
- Tracker changed from Bug to Feature
Updated by adgar (Michael Edgar) over 13 years ago
With the feature freeze coming up in a couple days, is there a chance this sees 1.9.3? It doesn't break any old syntax, only introduces new syntax, and rounds out the label feature of the 1.9 branch nicely.
Updated by mame (Yusuke Endoh) over 12 years ago
- Status changed from Open to Assigned
- Assignee set to matz (Yukihiro Matsumoto)
Updated by mame (Yusuke Endoh) about 12 years ago
- Target version set to 2.6
Updated by nobu (Nobuyoshi Nakada) over 10 years ago
- Status changed from Assigned to Closed
Applied in changeset r47649.
parse.y: quoted ID key
- parse.y (assoc): allow quoted ID as a key of a hash literal.
[ruby-core:34453] [Feature #4276]