I have implemented some "demunging" logic in cljs-devtools (and dirac) to present original user-friendly names in UI.
During my testing I spotted some wrong edge-cases and incorrect behaviours of demunge:
1) it is too aggressive in replacing dollars - some dollars can be "real" dollars as part of original name
2) it does not revert js-reserved? transformation applied during munging
3) it is oblivious to underscores/dashes - some underscores were "real" underscores before munging
(this may be not complete)
I have worked around those issues on my side and implemented some heuristics(link: 1) based on context, but it is far from perfect.
I'm not sure how to properly fix those, so I wanted to open a ticket with discussion. Maybe people will have some clever ideas.
Currently munging is lossy and we probably don't want to touch it for compatibility reasons.
Maybe we could mark original underscores and dollars in some way, so demunge could properly skip them.
1) One strategy could be to use some (rare) unicode characters, but that would be problematic for people to type.
2) Another strategy could be to escape original dollars and underscores somehow (using more dollars and underscores ;).
3) Better ideas?
(link: 1) https://github.com/binaryage/cljs-devtools/blob/52899e61e33373df36be8dcb23c69377936821b2/src/lib/devtools/munging.cljs#L154-L185