GNU bug report logs - #75387
29.4; hideshow: hs-hide-level hides multiple top-level blocks as one

Previous Next

Package: emacs;

Reported by: Christoph Groth <christoph <at> grothesque.org>

Date: Sun, 5 Jan 2025 18:54:01 UTC

Severity: normal

Found in version 29.4

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: kobarity <kobarity <at> gmail.com>
To: Christoph Groth <christoph <at> grothesque.org>, Eli Zaretskii <eliz <at> gnu.org>
Cc: 75387 <at> debbugs.gnu.org
Subject: bug#75387: 29.4; hideshow: hs-hide-level hides multiple top-level blocks as one
Date: Sat, 18 Jan 2025 23:17:07 +0900
kobarity wrote:
> kobarity wrote:
> > I confirmed the same behavior.  This is not a problem in hideshow.el.
> > Only immediately after the file is read, `python-nav-end-of-block'
> > behaves unexpectedly.
> > 
> > 1. emacs -Q
> > 2. Find file builder.py
> > 3. Search "class SiteFamily" and go there
> > 4. M-x python-nav-end-of-block  
> > 5. Search "class Symmetry" and go there
> > 6. M-x python-nav-end-of-block
> > 
> > The point moves to the end of the buffer, which is not an expected
> > behavior.  However, repeating the steps 5 and 6 does not produce this
> > issue.
> > 
> > This is the direct cause of the problem of `hs-hide-level'.
> > 
> > This problem does not occur when I run `font-lock-debug-fontify' after
> > reading the file, so it might be related to font-lock code in
> > python.el, but it seems that disabling font-lock does not solve this
> > issue.  I will continue to look into this, but it may take some time.
> 
> I think I've found the root cause.  `python-nav-end-of-statement' may
> fail to find the end of a long triple-quoted string when the buffer is
> "fresh".  It uses the following code to find the end of a
> triple-quoted string:
> 
> (re-search-forward (rx (syntax string-delimiter)) nil t)
> 
> However, the syntax is not always fully propertized.  If the end of
> the long multi-line string and beyond are not yet propertized, the
> above search fails and `python-nav-end-of-statement' moves the point
> to the end of the buffer.
> 
> In case of builder.py, `python-nav-end-of-statement' fails to find the
> end of the long docstring.  This results in `python-nav-end-of-block'
> moving point to the end of the buffer, which causes `hs-hide-level' to
> hide multiple blocks as one.
> 
> Attached is a patch to fix this issue.  I changed the above search to
> searching for triple-quotes and checking syntax.  Checking syntax
> involves `syntax-ppss' and syntax properties up to the point are
> updated.

Hi Christoph, could you test my patch?




This bug report was last modified 95 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.