Should racket-smart-open-bracket-mode work with racket-hash-lang-mode?
sorawee opened this issue · comments
It currently doesn't work, because of https://github.com/greghendershott/racket-mode/blob/master/racket-smart-open.el#L56.
But does it make sense to add its support anyway, just like what DrRacket does?
Yeah, my initial reaction when I was reviewing things was too hasty: I saw the list of racket-lang special form names like cond
and match
-- as well as the whole paren vs. bracket distinction --- and decided "welp, that's super specific to racket-lang, definitely not generic hash-lang stuff: disable".
But I should relax the guard, so that people may enable it for racket-hash-lang-mode
as well as racket-mode
, if they want.
One tip here:
-
Someone could use
racket-hash-lang-mode-hook
to enableracket-smart-open-bracket-mode
always. Then it could be enabled even for langs likerhombus
which would obviously be weird. [Maybe harmless (?) but weird. I don't know if DrRacket allows this intentionally, or it's an oversight or someday-to-do.] -
Better: Instead use
racket-hash-lang-module-language-hook
to enableracket-smart-open-bracket-mode
IFF the module language is on some whitelist they supply, includingracket
.That's pretty much the role of that hook -- instead of an unconditional mode hook, it's a kind of "sub-mode" or "conditional" mode hook. It's called when the user changes the
#lang
line enough to matter. So much config in Emacs is centered around the idea of the major-mode and mode hooks. Butracket-hash-lang-mode
is a kind of meta-mode, so the module-language hook is needed, too.(Ideally the
#lang
spec would cover everything, but the Emacs ecosystem is rich and there are simply always going to be config scenarios that need to be handled in Emacs. (Also in some cases the hook might be a work-around, until something is added to the#lang
spec proper.))Having said all that, I have no idea how this hook fits in with Doom Emacs configuration mechanisms and assumptions (as in #669). Hopefully OK... ish...?
TL;DR, I'll:
- Relax the guard.
- Add a tip to the doc string for
racket-smart-open-bracket-mode
: prefer the module-language hook (over the mode hook).