From: kobarity <kobarity@gmail.com>
To: 62092@debbugs.gnu.org
Cc: Lele Gaifax <lele@metapensiero.it>
Subject: bug#62092: 30.0.50; "case" does not work as dedenter in Python
Date: Fri, 10 Mar 2023 14:33:14 +0900 [thread overview]
Message-ID: <eke7ttytgoh1.wl-kobarity@gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 3371 bytes --]
Hi,
New keywords "match" and "case" were added to block-start in
`python-rx', which enables basic indentation support for these
keywords. However, "case" does not work as a dedenter. For example,
try the following code.
#+begin_src python
match a:
case 1:
print(1)
case 2:
#+end_src
At the "case 2:" line, inputting ":" does not dedent the line.
Several TAB keys are needed for correct indentation.
Attached is a patch to make "case" a dedenter with an ERT.
--
In GNU Emacs 30.0.50 (build 3, x86_64-pc-linux-gnu, X toolkit, cairo
version 1.16.0, Xaw scroll bars) of 2023-03-10 built on ubuntu
Repository revision: 8ee205d232574e12921b052c7e93b7e16d6f1187
Repository branch: master
System Description: Ubuntu 22.04.2 LTS
Configured features:
ACL CAIRO FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG
LIBSELINUX LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG SECCOMP SOUND
SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER X11 XDBE XIM XPM
LUCID ZLIB
Important settings:
value of $LANG: en_US.UTF-8
locale-coding-system: utf-8-unix
Major mode: Python
Minor modes in effect:
tooltip-mode: t
global-eldoc-mode: t
eldoc-mode: t
show-paren-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
font-lock-mode: t
blink-cursor-mode: t
line-number-mode: t
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
Load-path shadows:
None found.
Features:
(shadow sort mail-extr emacsbug message mailcap yank-media puny dired
dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068
epg-config gnus-util text-property-search time-date mm-decode mm-bodies
mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail
rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils python json
subr-x map rx project pcase treesit cl-seq comint ansi-osc ring
cl-loaddefs cl-lib ansi-color term/screen term/xterm xterm byte-opt gv
bytecomp byte-compile rmc iso-transl tooltip cconv eldoc paren electric
uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine 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
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads inotify dynamic-setting
system-font-setting font-render-setting cairo x-toolkit x multi-tty
make-network-process emacs)
Memory information:
((conses 16 60054 7620)
(symbols 48 7362 0)
(strings 32 20143 1278)
(string-bytes 1 593570)
(vectors 16 11583)
(vector-slots 8 139242 9455)
(floats 8 30 11543)
(intervals 56 239 0)
(buffers 984 12))
[-- Attachment #2: 0001-Make-case-keyword-a-dedenter-in-Python.patch --]
[-- Type: application/octet-stream, Size: 2736 bytes --]
From 93801015034ee6e5072051641acab227de74082a Mon Sep 17 00:00:00 2001
From: kobarity <kobarity@gmail.com>
Date: Fri, 10 Mar 2023 14:26:22 +0900
Subject: [PATCH] Make "case" keyword a dedenter in Python
* lisp/progmodes/python.el (python-rx): Add "case" to dedenter.
(python-info-dedenter-opening-block-positions): Add "case" to pairs.
* test/lisp/progmodes/python-tests.el (python-indent-dedenters-9):
New test.
---
lisp/progmodes/python.el | 5 +++--
test/lisp/progmodes/python-tests.el | 15 +++++++++++++++
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 630250c15c3..2d85d059d97 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -426,7 +426,7 @@ python-rx
(or "def" "for" "with")))
symbol-end))
(dedenter (seq symbol-start
- (or "elif" "else" "except" "finally")
+ (or "elif" "else" "except" "finally" "case")
symbol-end))
(block-ender (seq symbol-start
(or
@@ -5784,7 +5784,8 @@ python-info-dedenter-opening-block-positions
(pairs '(("elif" "elif" "if")
("else" "if" "elif" "except" "for" "while")
("except" "except" "try")
- ("finally" "else" "except" "try")))
+ ("finally" "else" "except" "try")
+ ("case" "case")))
(dedenter (match-string-no-properties 0))
(possible-opening-blocks (cdr (assoc-string dedenter pairs)))
(collected-indentations)
diff --git a/test/lisp/progmodes/python-tests.el b/test/lisp/progmodes/python-tests.el
index 6928e313dc4..7bb6f8617e7 100644
--- a/test/lisp/progmodes/python-tests.el
+++ b/test/lisp/progmodes/python-tests.el
@@ -1658,6 +1658,21 @@ python-indent-dedenters-8
(python-indent-line t)
(should (= (python-indent-calculate-indentation t) 6))))
+(ert-deftest python-indent-dedenters-9 ()
+ "Test de-indentation for the case keyword."
+ (python-tests-with-temp-buffer
+ "
+match a:
+ case 1:
+ print(1)
+ case 2
+"
+ (python-tests-look-at "case 2")
+ (should (eq (car (python-indent-context)) :at-dedenter-block-start))
+ (should (= (python-indent-calculate-indentation) 4))
+ (python-indent-line t)
+ (should (= (python-indent-calculate-indentation t) 4))))
+
(ert-deftest python-indent-inside-string-1 ()
"Test indentation for strings."
(python-tests-with-temp-buffer
--
2.34.1
next reply other threads:[~2023-03-10 5:33 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-10 5:33 kobarity [this message]
2023-03-10 7:36 ` bug#62092: 30.0.50; "case" does not work as dedenter in Python Eli Zaretskii
2023-03-10 8:27 ` kobarity
2023-03-11 0:27 ` Dmitry Gutov
2023-03-11 2:08 ` kobarity
2023-03-11 13:18 ` Dmitry Gutov
2023-03-25 14:13 ` kobarity
2023-03-26 2:04 ` Dmitry Gutov
2023-08-14 15:12 ` Mattias Engdegård
2023-08-15 13:43 ` kobarity
2023-08-15 15:09 ` Mattias Engdegård
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=eke7ttytgoh1.wl-kobarity@gmail.com \
--to=kobarity@gmail.com \
--cc=62092@debbugs.gnu.org \
--cc=lele@metapensiero.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).