Subject: bug#21440: 25.0.50; Manual: FEATURE-unload-hook in (info "(elisp) Coding Conventions")

From: Michael Albinus <[email-masked]>
Date: Mon, 17 Aug 2020 13:15:14 +0200

Stefan Kangas <[email-masked]> writes:

Hi,

>> In (info "(elisp) Coding Conventions"):
>>
>>    • If loading the file adds functions to hooks, define a function
>>      ‘FEATURE-unload-hook’, where FEATURE is the name of the feature the
>>      package provides, and make it undo any such changes.  Using
>>      ‘unload-feature’ to unload the file will run this function.  *Note
>>      Unloading.
>>
>> A problematic tip:
>>
>>  - it is unnecessary for that reason. AFAIK FEATURE's functions are
>>  removed automatically from hooks by `unload-feature'.
>>
>>  - When you follow the advice, `unload-feature' will skip removing
>>  entries from `auto-mode-alist', so you would have to do that yourself.
>>
>>  - Isn't `FEATURE-unload-function' the preferred thing to use today?
>>  The doc string of `unload-feature' doesn't even mention
>>  FEATURE-unload-hook variables.  Seems it is discouraged to be used.
>
> The above analysis seems correct to me.  There should be no need to use
> `FEATURE-load-hook', in fact from reading `unload-feature' it seems
> worse.  But I don't know too much about this, so I'm not sure if there's
> some fundamental aspect I'm overlooking.
>
> If the above is indeed true, we should probably just remove the advice
> from coding conventions.  And it should be announced in NEWS, probably
> together with some warnings emitted by `unload-feature' if there is such
> a `FEATURE-unload-hook' defined.
>
> Is there anyone else who could provide some insight here?

As a test, I've renamed `tramp-unload-hook' and all
`tramp-FEATURE-unload-hook' variables to `tramp-unload-function' and
`tramp-FEATURE-unload-function', respectively. The related test,
`tramp-test45-unload', fails now. I haven't debugged further, but
throwing a warning when `FEATURE-unload-hook' is used, looks premature
to me.

> Best regards,
> Stefan Kangas

Best regards, Michael.