Subject: bug#60176: 29.0.60; Fallback file variable mode if treesitter is not usable

From: Eli Zaretskii <[email-masked]>
Date: Tue, 17 Jan 2023 14:07:45 +0200

> From: Juri Linkov <[email-masked]>
> Cc: [email-masked],  [email-masked],  [email-masked]
> Date: Tue, 17 Jan 2023 09:33:02 +0200
> 
> >> >> >> (defcustom treesit-enable-modes nil
> >> >> >>   :type '(repeat
> >> >> >>           (choice (function-item c-ts-mode)
> >> >> >>                   (function-item c++-ts-mode)
> >> >> >>                   (function-item c-or-c++-ts-mode)
> >> >> >>                   ...
> >> >> >>              ('c-ts-mode
> >> >> >>               (when (treesit-ready-p 'c t)
> >> >> >>                 (add-to-list 'major-mode-remap-alist '(c-mode . c-ts-mode))))
> >> >> >
> >> >> > And this bit is completely unacceptable, from where I stand: it
> >> >> > basically means that the user activated a certain major mode he/she
> >> >> > wanted to use, but the result could be that an entirely different mode
> >> >> > was silently activated instead.  What kind of UX is that, and for a
> >> >> > shining new feature at that??
> >> >>
> >> >> It could update 'auto-mode-alist' instead of 'major-mode-remap-alist'.
> >> >> >From the user's point of view this would be more manageable than
> >> >> what you proposed on emacs-devel with some obscure logic of activating
> >> >> ts modes when the package is loaded or when the mode is enabled first time.
> >> >
> >> > I don't understand the "obscure" part: the logic was exactly as above:
> >> > test that treesit-ready-p returns non-nil for the mode's language.
> >> >
> >> > Other than that, my proposal does exactly what you say here: it
> >> > updates auto-mode-alist.  So it sounds like we are in violent agreement.
> >>
> >> The difference is that an explicit option is more controllable by the user.
> >> When the user needs to use some ts-mode then it's easier just to customize
> >> the option instead of tweaking 'auto-mode-alist' when the user want to
> >> start using that mode without first loading its package or calling it
> >> the first time that modifies 'auto-mode-alist' as the side effect.
> >
> > With the changes I proposed, there's no need to tweak
> > auto-mode-alist.  A simple load or require of the mode will install
> > the mode in auto-mode-alist.  What can be easier and simpler?
> 
> This doesn't address the problems mentioned above and below.

Which parts "above" were not addressed?

As for below:

> >> Or when the user wants to remove the mode from 'auto-mode-alist' after
> >> accidentally loading the corresponding ts package.

I addressed that in the discussion on emacs-devel, see

  https://lists.gnu.org/archive/html/emacs-devel/2023-01/msg00278.html

(I suggest to discuss this there, not here.)