unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#24856: 25.1.50; Emacs stucks when using C-k to kill lines in python-mode if the next line is a beginning of a docstring
@ 2016-11-02  2:39 raynewang
  2016-11-02  6:59 ` Clément Pit--Claudel
  0 siblings, 1 reply; 4+ messages in thread
From: raynewang @ 2016-11-02  2:39 UTC (permalink / raw)
  To: 24856

Please look at the following python snippet:

class Test(object):
  def func(self):
    """
    This is a test.
    """

I was trying to kill lines (C-k) from line 1. Emacs stucked everytime
after I killed line 2 and was going to kill line 3 (just before the
docstring delimiters). Most time C-g would not work or just brought
Emacs back for no more than 1 sec only. When it occurred, the only thing
I could do was to kill Emacs process.

I tried to disable all of my Emacs configurations, nothing changed.

May it be a problem of built-in python-mode?

Wish you guys could help me. I love your works!

Sincerely

Lei

======================================================================


In GNU Emacs 25.1.50.1 (x86_64-apple-darwin15.6.0, NS appkit-1404.47 Version 10.11.6 (Build 15G31))
of 2016-09-20 built on raynewang-rmbp.local
Repository revision: 83fbb3a6dd75e01a768cb6b3348b7c947711ee46
Windowing system distributor 'Apple', version 10.3.1504
Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
<s-backspace> is undefined [2 times]
funcall-interactively: Wrong type argument: char-or-string-p, nil

Configured using:
'configure --disable-dependency-tracking --disable-silent-rules
--enable-locallisppath=/usr/local/share/emacs/site-lisp
--infodir=/usr/local/Cellar/emacs/HEAD-83fbb3a/share/info/emacs
--prefix=/usr/local/Cellar/emacs/HEAD-83fbb3a --without-x --with-xml2
--without-dbus --without-gnutls --with-rsvg --with-ns
--disable-ns-self-contained'

Configured features:
JPEG RSVG NOTIFY ACL LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Fundamental

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message subr-x puny seq byte-opt gv
bytecomp byte-compile cl-extra help-mode cconv cl-loaddefs pcase cl-lib
dired dired-loaddefs format-spec rfc822 mml easymenu mml-sec
password-cache epa derived epg epg-config gnus-util rmail rmail-loaddefs
mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils
mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr
mail-utils time-date mule-util tooltip eldoc electric uniquify
ediff-hook vc-hooks lisp-float-type mwheel term/ns-win ns-win
ucs-normalize term/common-win tool-bar dnd fontset image regexp-opt
fringe tabulated-list newcomment elisp-mode lisp-mode prog-mode register
page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock
font-lock syntax facemenu font-core term/tty-colors frame cl-generic
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese charscript case-table epa-hook
jka-cmpr-hook help simple abbrev obarray minibuffer cl-preloaded nadvice
loaddefs button faces cus-face macroexp files text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote kqueue cocoa ns multi-tty
make-network-process emacs)

Memory information:
((conses 16 206717 18560)
(symbols 48 20249 0)
(miscs 40 75 177)
(strings 32 18166 5363)
(string-bytes 1 584409)
(vectors 16 35204)
(vector-slots 8 670777 6763)
(floats 8 179 123)
(intervals 56 206 0)
(buffers 976 12))





^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#24856: 25.1.50; Emacs stucks when using C-k to kill lines in python-mode if the next line is a beginning of a docstring
  2016-11-02  2:39 bug#24856: 25.1.50; Emacs stucks when using C-k to kill lines in python-mode if the next line is a beginning of a docstring raynewang
@ 2016-11-02  6:59 ` Clément Pit--Claudel
  2016-11-03  2:22   ` npostavs
  0 siblings, 1 reply; 4+ messages in thread
From: Clément Pit--Claudel @ 2016-11-02  6:59 UTC (permalink / raw)
  To: 24856


[-- Attachment #1.1: Type: text/plain, Size: 4819 bytes --]

Thanks, I can reproduce the bug.  Here's a simpler recipe:

    emacs -Q test.py --eval '(insert " \"")'

In other words, a mis-indented string on the first line is enough to reproduce the bug.  It seems to be an infinite loop in fontification:

Debugger entered--Lisp error: (quit)
  python-info-beginning-of-statement-p()
  python-nav--forward-sexp(-1 nil nil)
  python-nav-forward-sexp(-1 nil nil)
  python-nav-backward-sexp()
  python-info-docstring-p((0 nil nil t nil nil 0 nil 5 nil nil))
  python-font-lock-syntactic-face-function((0 nil nil t nil nil 0 nil 5 nil nil))
  font-lock-fontify-syntactically-region(1 9 nil)
  font-lock-default-fontify-region(1 9 nil)
  font-lock-fontify-region(1 9)
  #[257 "\211\300\301\"\211\242\306=\203\x10

Clément.

On 2016-11-01 22:39, raynewang (王磊) wrote:
> Please look at the following python snippet:
> 
> class Test(object):
>   def func(self):
>     """
>     This is a test.
>     """
> 
> I was trying to kill lines (C-k) from line 1. Emacs stucked everytime
> after I killed line 2 and was going to kill line 3 (just before the
> docstring delimiters). Most time C-g would not work or just brought
> Emacs back for no more than 1 sec only. When it occurred, the only thing
> I could do was to kill Emacs process.
> 
> I tried to disable all of my Emacs configurations, nothing changed.
> 
> May it be a problem of built-in python-mode?
> 
> Wish you guys could help me. I love your works!
> 
> Sincerely
> 
> Lei
> 
> ======================================================================
> 
> 
> In GNU Emacs 25.1.50.1 (x86_64-apple-darwin15.6.0, NS appkit-1404.47 Version 10.11.6 (Build 15G31))
> of 2016-09-20 built on raynewang-rmbp.local
> Repository revision: 83fbb3a6dd75e01a768cb6b3348b7c947711ee46
> Windowing system distributor 'Apple', version 10.3.1504
> Recent messages:
> For information about GNU Emacs and the GNU system, type C-h C-a.
> <s-backspace> is undefined [2 times]
> funcall-interactively: Wrong type argument: char-or-string-p, nil
> 
> Configured using:
> 'configure --disable-dependency-tracking --disable-silent-rules
> --enable-locallisppath=/usr/local/share/emacs/site-lisp
> --infodir=/usr/local/Cellar/emacs/HEAD-83fbb3a/share/info/emacs
> --prefix=/usr/local/Cellar/emacs/HEAD-83fbb3a --without-x --with-xml2
> --without-dbus --without-gnutls --with-rsvg --with-ns
> --disable-ns-self-contained'
> 
> Configured features:
> JPEG RSVG NOTIFY ACL LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS
> 
> Important settings:
>   value of $LANG: en_US.UTF-8
>   locale-coding-system: utf-8-unix
> 
> Major mode: Fundamental
> 
> Minor modes in effect:
>   tooltip-mode: t
>   global-eldoc-mode: t
>   electric-indent-mode: t
>   mouse-wheel-mode: t
>   tool-bar-mode: t
>   menu-bar-mode: t
>   file-name-shadow-mode: t
>   global-font-lock-mode: t
>   blink-cursor-mode: t
>   auto-composition-mode: t
>   auto-encryption-mode: t
>   auto-compression-mode: t
>   buffer-read-only: t
>   line-number-mode: t
>   transient-mark-mode: t
> 
> Load-path shadows:
> None found.
> 
> Features:
> (shadow sort mail-extr emacsbug message subr-x puny seq byte-opt gv
> bytecomp byte-compile cl-extra help-mode cconv cl-loaddefs pcase cl-lib
> dired dired-loaddefs format-spec rfc822 mml easymenu mml-sec
> password-cache epa derived epg epg-config gnus-util rmail rmail-loaddefs
> mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils
> mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr
> mail-utils time-date mule-util tooltip eldoc electric uniquify
> ediff-hook vc-hooks lisp-float-type mwheel term/ns-win ns-win
> ucs-normalize term/common-win tool-bar dnd fontset image regexp-opt
> fringe tabulated-list newcomment elisp-mode lisp-mode prog-mode register
> page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock
> font-lock syntax facemenu font-core term/tty-colors frame cl-generic
> cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
> korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
> european ethiopic indian cyrillic chinese charscript case-table epa-hook
> jka-cmpr-hook help simple abbrev obarray minibuffer cl-preloaded nadvice
> loaddefs button faces cus-face macroexp files text-properties overlay
> sha1 md5 base64 format env code-pages mule custom widget
> hashtable-print-readable backquote kqueue cocoa ns multi-tty
> make-network-process emacs)
> 
> Memory information:
> ((conses 16 206717 18560)
> (symbols 48 20249 0)
> (miscs 40 75 177)
> (strings 32 18166 5363)
> (string-bytes 1 584409)
> (vectors 16 35204)
> (vector-slots 8 670777 6763)
> (floats 8 179 123)
> (intervals 56 206 0)
> (buffers 976 12))
> 
> 
> 
> 


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#24856: 25.1.50; Emacs stucks when using C-k to kill lines in python-mode if the next line is a beginning of a docstring
  2016-11-02  6:59 ` Clément Pit--Claudel
@ 2016-11-03  2:22   ` npostavs
  2016-11-03  5:47     ` Clément Pit--Claudel
  0 siblings, 1 reply; 4+ messages in thread
From: npostavs @ 2016-11-03  2:22 UTC (permalink / raw)
  To: Clément Pit--Claudel; +Cc: 24856

[-- Attachment #1: Type: text/plain, Size: 636 bytes --]

merge 24856 24839
tags 24856 patch
quit

Clément Pit--Claudel <clement.pit@gmail.com> writes:

>     emacs -Q test.py --eval '(insert " \"")'
>
> In other words, a mis-indented string on the first line is enough to
> reproduce the bug.
>

Yes, seems to be the same as 24839.

> It seems to be an infinite loop in fontification:
>
> Debugger entered--Lisp error: (quit)
>   python-info-beginning-of-statement-p()
>   python-nav--forward-sexp(-1 nil nil)
>   python-nav-forward-sexp(-1 nil nil)
>   python-nav-backward-sexp()
>   python-info-docstring-p((0 nil nil t nil nil 0 nil 5 nil nil))

Here is a patch:


[-- Attachment #2: patch --]
[-- Type: text/plain, Size: 2218 bytes --]

From 5da4f196fc3c8b411936551568477d70a9046421 Mon Sep 17 00:00:00 2001
From: Noam Postavsky <npostavs@gmail.com>
Date: Wed, 2 Nov 2016 21:59:10 -0400
Subject: [PATCH v1] Fix infloop in python docstring detection

The function `python-info-docstring-p' (introduced in 2015-04-05
"python.el: Enhance docstring detection following PEP-257[...]") could
get stuck when called with point before the first expression in the
buffer.  The attempted fix in 2015-04-06 "Fix previous commit to prevent
infloop" did not handle the case where there is only whitespace between
the first expression and the beginning of buffer (Bug#24856, Bug#24839).

* lisp/progmodes/python.el (python-info-docstring-p): Stop looping when
`python-nav-backward-sexp' fails to move point.
---
 lisp/progmodes/python.el | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index e5efc2b..de06efb 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -4867,13 +4867,14 @@ python-info-docstring-p
               2
               (progn
                 (while (save-excursion
-                         (python-nav-backward-sexp)
-                         (setq backward-sexp-point (point))
-                         (and (= indentation (current-indentation))
-                              (not (bobp)) ; Prevent infloop.
-                              (looking-at-p
-                               (concat "[uU]?[rR]?"
-                                       (python-rx string-delimiter)))))
+                         (let ((cur-point (point)))
+                           (python-nav-backward-sexp)
+                           (setq backward-sexp-point (point))
+                           (and (= indentation (current-indentation))
+                                (/= cur-point (point)) ; Prevent infloop.
+                                (looking-at-p
+                                 (concat "[uU]?[rR]?"
+                                         (python-rx string-delimiter))))))
                   ;; Previous sexp was a string, restore point.
                   (goto-char backward-sexp-point)
                   (cl-incf counter))
-- 
2.9.3


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* bug#24856: 25.1.50; Emacs stucks when using C-k to kill lines in python-mode if the next line is a beginning of a docstring
  2016-11-03  2:22   ` npostavs
@ 2016-11-03  5:47     ` Clément Pit--Claudel
  0 siblings, 0 replies; 4+ messages in thread
From: Clément Pit--Claudel @ 2016-11-03  5:47 UTC (permalink / raw)
  To: npostavs; +Cc: 24856


[-- Attachment #1.1: Type: text/plain, Size: 113 bytes --]

On 2016-11-02 22:22, npostavs@users.sourceforge.net wrote:
> Here is a patch:

Thanks; works great for me!


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-11-03  5:47 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-02  2:39 bug#24856: 25.1.50; Emacs stucks when using C-k to kill lines in python-mode if the next line is a beginning of a docstring raynewang
2016-11-02  6:59 ` Clément Pit--Claudel
2016-11-03  2:22   ` npostavs
2016-11-03  5:47     ` Clément Pit--Claudel

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).