edn-format / edn

Extensible Data Notation
2.62k stars 96 forks source link

Discard reader macro has possible collision with tags that start with an underscore #30

Closed cndreisbach closed 12 years ago

cndreisbach commented 12 years ago

According to the edn spec, symbols can begin with an underscore. ("Symbols begin with a non-numeric character and can contain alphanumeric characters and . * + ! - _ ?. If - or . are the first character, the second character must be non-numeric. Additionally, : # are allowed as constituent characters in symbols but not as the first character.")

Tags are symbols prefixed with a pound sign. Therefore, you could have a tag like this: #_cnd/my-snazzy-tag.

#_ is a reader macro used to discard the next value, however. In this case, instead of my tag, I discard the symbol cnd/my-snazzy-tag, which is not what I want.

Should there be a special rule eliminating underscores as the first character of a tag? Or should this be handled a different way?

richhickey commented 12 years ago

Yes, the rule will be tag symbols (after #) must begin with an alphabetic character. All other symbols after # are reserved, e.g. #{ starts a set, and #_ a discard etc.

On Sep 13, 2012, at 3:37 PM, Clinton N. Dreisbach wrote:

According to the edn spec, symbols can begin with an underscore. ("Symbols begin with a non-numeric character and can contain alphanumeric characters and . * + ! - _ ?. If - or . are the first character, the second character must be non-numeric. Additionally, : # are allowed as constituent characters in symbols but not as the first character.")

Tags are symbols prefixed with a pound sign. Therefore, you could have a tag like this: #_cnd/my-snazzy-tag.

_ is a reader macro used to discard the next value, however. In this case, instead of my tag, I discard the symbol cnd/my-snazzy-tag, which is not what I want.

Should there be a special rule eliminating underscores as the first character of a tag? Or should this be handled a different way?

— Reply to this email directly or view it on GitHub.

cndreisbach commented 12 years ago

Great -- thanks.