Subject: Re: bug#76498: (ert-deftest) has indentation of 13 by default

From: Konstantin Kharlamov <[email-masked]>
Date: Sun, 02 Mar 2025 16:48:52 +0300

On Sun, 2025-03-02 at 15:43 +0200, Eli Zaretskii wrote:
> > From: Stefan Kangas <[email-masked]>
> > Date: Sun, 2 Mar 2025 04:45:32 -0800
> > Cc: [email-masked], Eli Zaretskii <[email-masked]>, 
> > 	Stefan Monnier <[email-masked]>
> > 
> > Konstantin Kharlamov <[email-masked]> writes:
> > 
> > > I'm writing tests for purescript-mode package, and I stumbled
> > > upon odd
> > > behavior: `ert-deftest` is spuriously indented to either 2
> > > (expected)
> > > or 13 (unexpected).
> > > 
> > > After digging into it, I found that if you `emacs -Q some-file-
> > > with-
> > > tests.el` and try to indent the second line after `ert-deftest`,
> > > you'll
> > > get size of 13. But if you `(require 'ert)` and try again you'll
> > > get 2.
> > > 
> > > This is because, even though `ert-deftest` keyword is declared
> > > inside
> > > `lisp-mode.el`, but *indentation size* for it resides instead in
> > > `ert.el`, as part of "declare" statement of `ert-deftest` macro.
> > > 
> > > This is definitely not expected. First of all, there's no reason
> > > for
> > > user to evaluate `(require 'ert)` while working with tests — you
> > > wouldn't want to experiment with tests in your working Emacs
> > > anyway.
> > > Which means you get incorrect indentation and left wondering
> > > what's
> > > happening. Second of all, `ert-deftest` as a keyword resides
> > > inside
> > > `lisp-mode.el` anyway, so what's the point of having the
> > > indentation
> > > set in a different place.
> > > 
> > > Could we move the indentation size to `lisp-mode.el`, please?
> > 
> > I think this is a more general problem that applies to basically
> > any
> > macro.  Instead of fixing this locally just for that one macro,
> > maybe we
> > should make autoload pick up on that automatically (for autoloaded
> > macros)?
> > 
> > Eli, Stefan, WDYT?
> 
> I have no opinion on this (and don't understand the OP's use case in
> the first place: does he want Emacs to know about ERT-sepcific macros
> without loading ert??), sorry.

Yes. You see, Emacs already knows about them even without loading
`ert`, because it highlights them. So we're in a situation where it
half-works half-doesn't. It probably either shouldn't work completely
or work fully. And since we're dealing with Emacs built-in library and
not some 3rd-party code, I see no reason, why couldn't indentation work
OOTB.