Subject: 29.0.90; Using python-ts-mode for single buffer should not alter global auto-mode-alist settings

From: Yikai Zhao <[email-masked]>
Date: Fri, 12 May 2023 20:45:18 +0800

Hi emacs devs,

So today, out of nowhere, I noticed that some of the *.py
buffers I opened are using `python-ts-mode` instead of the default
`python-mode`, also some of my configs are not working correctly because
of this (due to different hooks etc.). I was sure I didn't enable or configure
anything related to `python-ts-mode` so that's very strange.

After some debugging, it turns out that `markdown-mode` used
`python-ts-mode` when fontifying a python code block
(https://github.com/jrblevin/markdown-mode/commit/44ac8e4f96f03149f60cb182f8b3f1503f66f6d0),
and during that, `python-ts-mode` modified the global `auto-mode-alist`
settings so that all future *.py buffers I opened use that instead.

I believe this is a bug in emacs: using some treesit-based major mode
for single buffer should not automatically alter the global settings. I
don't think previously there's any other major modes doing that.

I understand that some may argue this behavior to be reasonable based
on the thought that,
"if the user chose to use treesit for one file, then it would be good to
use treesit automatically for all future files". This MAY be true, but
in my case, I didn't choose to use it by my own. It's some lisp code
down the rabbit hole that loads it without me even realized.

I fear that this kind of issue would become more common when: 1. more
distros build emacs with treesit support by default and ship with
treesit language libraries, 2. more emacs packages tries to use
treesit-based major modes internally

(I also submitted a bug report to `markdown-mode`:
https://github.com/jrblevin/markdown-mode/issues/761)

---

In GNU Emacs 29.0.90 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo
version 1.16.0, Xaw3d scroll bars)
Repository revision: emacs-29.0.90
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12013000
System Description: Ubuntu 20.04.5 LTS

Configured using:
 'configure
 --prefix=/nix/store/4mgq52v87wxra7nqhvsspn3klp8c731m-emacs-unstable-29.0.90
 --disable-build-details --with-modules --with-x-toolkit=lucid
 --with-xft --with-cairo --with-native-compilation'