Package: emacs;
Reported by: Arsen Arsenović <arsen <at> aarsen.me>
Date: Fri, 14 Jun 2024 21:03:02 UTC
Severity: normal
Found in version 30.0.50
Done: Dmitry Gutov <dmitry <at> gutov.dev>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 71563 in the body.
You can then email your comments to 71563 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-gnu-emacs <at> gnu.org
:bug#71563
; Package emacs
.
(Fri, 14 Jun 2024 21:03:02 GMT) Full text and rfc822 format available.Arsen Arsenović <arsen <at> aarsen.me>
:bug-gnu-emacs <at> gnu.org
.
(Fri, 14 Jun 2024 21:03:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Arsen Arsenović <arsen <at> aarsen.me> To: bug-gnu-emacs <at> gnu.org Subject: 30.0.50; {typescript,tsx}-ts-mode do not indent type parameter lists contents Date: Fri, 14 Jun 2024 22:23:31 +0200
Hi! The following snippet is considered correctly indented per typescript-ts-mode and tsx-ts-mode: --8<---------------cut here---------------start------------->8--- function f( a: int, b: int ) {} type T< A, B > = number f( a, b, c ) T< A, B, C > --8<---------------cut here---------------end--------------->8--- This seems inconsistent (and, subjectively, ugly). I think that the TS modes should indent type parameters the same as parameters (and the same as said arguments when they're being applied rather than declared). A patch that achieves the desired result (I am not sure of the correctness, but it does seem to do the right thing): --8<---------------cut here---------------start------------->8--- diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index 74ed6aa2f94..3606a139d50 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el @@ -125,6 +125,7 @@ typescript-ts-mode--indent-rules ((parent-is "switch_case") parent-bol typescript-ts-mode-indent-offset) ((parent-is "switch_default") parent-bol typescript-ts-mode-indent-offset) ((parent-is "type_arguments") parent-bol typescript-ts-mode-indent-offset) + ((parent-is "type_parameters") parent-bol typescript-ts-mode-indent-offset) ((parent-is ,(rx (or "variable" "lexical") "_" (or "declaration" "declarator"))) typescript-ts-mode--anchor-decl 1) ((parent-is "arguments") parent-bol typescript-ts-mode-indent-offset) --8<---------------cut here---------------end--------------->8--- Thank you for your continued maintenance of Emacs, and have a most lovely day! :) In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.42, cairo version 1.18.0) of 2024-06-10 built on localhost Repository revision: 12d44fe6420e84eab8f750f9a0f8cd73c3e70bb2 Repository branch: master System Description: Gentoo Linux Configured using: 'configure --prefix=/usr --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --mandir=/usr/share/man --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc --localstatedir=/var/lib --datarootdir=/usr/share --disable-silent-rules --docdir=/usr/share/doc/emacs-30.0.9999 --htmldir=/usr/share/doc/emacs-30.0.9999/html --libdir=/usr/lib64 --program-suffix=-emacs-30-vcs --includedir=/usr/include/emacs-30-vcs --infodir=/usr/share/info/emacs-30-vcs --localstatedir=/var --enable-locallisppath=/etc/emacs:/usr/share/emacs/site-lisp --without-compress-install --without-hesiod --without-pop --with-file-notification=inotify --with-pdumper --enable-acl --enable-xattr --with-dbus --with-modules --with-gameuser=:gamestat --with-libgmp --with-gpm --with-native-compilation=aot --without-kerberos --without-kerberos5 --with-lcms2 --with-xml2 --with-mailutils --without-selinux --with-sqlite3 --with-gnutls --with-libsystemd --with-threads --with-tree-sitter --without-wide-int --with-sound=alsa --with-zlib --with-pgtk --without-x --without-ns --with-toolkit-scroll-bars --without-gconf --without-gsettings --with-harfbuzz --with-libotf --with-m17n-flt --with-xwidgets --with-gif --with-jpeg --with-png --with-rsvg --with-tiff --with-webp --without-imagemagick --with-dumping=pdumper 'CFLAGS=-freport-bug -O3 -ggdb3 -pipe -fdiagnostics-color=always -march=x86-64-v2 -flto -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -fno-fast-math -ffp-contract=off' CPPFLAGS= 'LDFLAGS=-Wl,-O1 -Wl,--as-needed -Wl,-z,pack-relative-relocs -O3 -Wl,-O3 -pipe -fdiagnostics-color=always -Wl,--defsym=__gentoo_check_ldflags__=0 -Wl,-z,pack-relative-relocs -Wl,--build-id -flto -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing'' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM HARFBUZZ JPEG LCMS2 LIBOTF LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM XWIDGETS GTK3 ZLIB Important settings: value of $LC_TIME: en_GB.UTF-8 value of $LANG: en_US.utf8 locale-coding-system: utf-8-unix Major mode: ELisp/l Minor modes in effect: bug-reference-prog-mode: t global-git-commit-mode: t magit-auto-revert-mode: t server-mode: t auto-revert-mode: t global-jinx-mode: t jinx-mode: t display-line-numbers-mode: t ruler-mode: t diff-hl-flydiff-mode: t diff-hl-mode: t savehist-mode: t save-place-mode: t org-roam-db-autosync-mode: t desktop-save-mode: t global-hl-line-mode: t mu4e-modeline-mode: t ws-butler-global-mode: t ws-butler-mode: t corfu-popupinfo-mode: t global-corfu-mode: t corfu-mode: t marginalia-mode: t vertico-mouse-mode: t vertico-mode: t which-key-mode: t global-undo-tree-mode: t undo-tree-mode: t global-display-fill-column-indicator-mode: t display-fill-column-indicator-mode: t which-function-mode: t electric-pair-mode: t global-whitespace-mode: t whitespace-mode: t override-global-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tab-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 minibuffer-regexp-mode: t column-number-mode: t line-number-mode: t auto-fill-function: do-auto-fill transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: /usr/share/emacs/site-lisp/emacs-eat/eat hides /usr/share/emacs/site-lisp/emacs-eat/term/eat /usr/share/emacs/site-lisp/transient/transient hides /usr/share/emacs/30.0.50/lisp/transient /usr/share/emacs/site-lisp/compat/compat hides /usr/share/emacs/30.0.50/lisp/emacs-lisp/compat Features: (shadow emacsbug consult-register pulse consult-xref consult tramp-archive tramp-gvfs tramp trampver tramp-integration files-x tramp-message tramp-compat tramp-loaddefs vc-hg vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs bug-reference face-remap magit-bookmark git-rebase magit-extras magit-sparse-checkout magit-gitignore magit-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff ediff-help ediff-init ediff-util magit-subtree magit-patch magit-submodule magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-tag magit-merge magit-branch magit-reset magit-files magit-refs magit-status magit package url-handlers magit-repos magit-apply magit-wip magit-log magit-diff smerge-mode git-commit log-edit add-log magit-core magit-autorevert magit-margin magit-transient magit-process with-editor shell server magit-mode transient magit-git magit-base crm shr-color sort smiley gnus-cite qp mm-archive mail-extr textsec uni-scripts idna-mapping ucs-normalize uni-confusable textsec-check misearch multi-isearch vertico-directory help-fns radix-tree info haskell-decl-scan haskell-mode haskell-cabal haskell-utils haskell-font-lock haskell-indentation haskell-string haskell-sort-imports haskell-lexeme haskell-align-imports haskell-complete-module haskell-ghc-support flymake-proc etags fileloop xref dabbrev haskell-customize gitignore-mode conf-mode typescript-ts-mode js c-ts-common oc-basic ol-eww eww url-queue mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect ol-docview doc-view jka-compr image-mode exif ol-bibtex bibtex ol-bbdb ol-w3m ol-doi org-link-doi flycheck-pkgcheck autorevert filenotify flymake-cc flymake project jinx vc-git ebuild-mode skeleton display-line-numbers ruler-mode diff-hl-flydiff diff-hl log-view pcvs-util vc-dir ewoc vc vc-dispatcher diff-mode track-changes cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs dired-aux savehist saveplace comp comp-cstr warnings org-roam-migrate org-roam-log org-roam-mode org-roam-capture org-roam-id org-roam-node org-roam-db org-roam-utils org-roam-compat org-roam org-capture org-element org-persist xdg avl-tree generator org-attach org-id org-refile org-element-ast inline emacsql-sqlite advice emacsql emacsql-compiler magit-section cursor-sensor dash desktop frameset cus-load mu4e mu4e-org mu4e-notification notifications mu4e-main smtpmail mu4e-view mu4e-mime-parts mu4e-headers mu4e-thread mu4e-actions mu4e-compose mu4e-draft gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-sum gnus-group gnus-undo gnus-start gnus-dbus dbus comp-run comp-common gnus-cloud nnimap nnmail mail-source utf7 nnoo parse-time iso8601 gnus-spec gnus-int gnus-range gnus-win gnus nnheader range wid-edit mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark mu4e-message shr pixel-fill kinsoku url-file browse-url url url-proxy url-privacy url-expand url-methods url-history url-cookie generate-lisp-file url-domsuf url-util flow-fill mule-util hl-line mu4e-contacts mu4e-update mu4e-folders mu4e-context mu4e-query-items mu4e-server mu4e-modeline mu4e-vars mu4e-helpers mu4e-config mu4e-window bookmark pp ido message sendmail mailcap yank-media puny dired dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068 epg-config gnus-util mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utils gmm-utils mailheader mu4e-obsolete auth-source-pass ws-butler modus-vivendi-tinted-theme modus-themes kind-icon svg-lib svg dom xml corfu-popupinfo corfu orderless marginalia vertico-mouse vertico compat flycheck lisp-mnt org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-src sh-script smie treesit executable ob-comint org-pcomplete pcomplete org-list org-footnote org-faces org-entities time-date org-version ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold org-fold-core org-keys oc org-loaddefs find-func cal-menu calendar cal-loaddefs org-compat org-macs format-spec which-key ace-window avy undo-tree diff queue display-fill-column-indicator disp-table which-func imenu elec-pair whitespace markdown-mode edit-indirect rx color url-parse auth-source eieio eieio-core password-cache json subr-x map url-vars thingatpt noutline outline icons edmacro kmacro byte-opt cl-macs gv cl-extra help-mode cl-seq use-package use-package-ensure use-package-delight use-package-diminish use-package-bind-key bind-key easy-mmode use-package-core bytecomp byte-compile site-gentoo hs-lint compile text-property-search comint ansi-osc ansi-color ring preview-latex mmm-auto mmm-vars cl-loaddefs cl-lib mmm-utils mmm-compat ess-autoloads tex-site rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/pgtk-win pgtk-win term/common-win touch-screen pgtk-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 xwidget-internal dbusbind inotify dynamic-setting font-render-setting cairo gtk pgtk lcms2 multi-tty move-toolbar make-network-process native-compile emacs) Memory information: ((conses 16 1601145 2075291) (symbols 48 68255 17) (strings 32 258126 73109) (string-bytes 1 9012803) (vectors 16 139927) (vector-slots 8 1891203 1225547) (floats 8 879 9960) (intervals 56 42735 6368) (buffers 992 86)) <#secure method=pgpmime mode=sign> -- Arsen Arsenović
Dmitry Gutov <dmitry <at> gutov.dev>
:Arsen Arsenović <arsen <at> aarsen.me>
:Message #10 received at 71563-done <at> debbugs.gnu.org (full text, mbox):
From: Dmitry Gutov <dmitry <at> gutov.dev> To: Arsen Arsenović <arsen <at> aarsen.me>, 71563-done <at> debbugs.gnu.org Subject: Re: bug#71563: 30.0.50; {typescript,tsx}-ts-mode do not indent type parameter lists contents Date: Sat, 15 Jun 2024 02:19:31 +0300
Hi! On 14/06/2024 23:23, Arsen Arsenović via Bug reports for GNU Emacs, the Swiss army knife of text editors wrote: > A patch that achieves the desired result (I am not sure of the > correctness, but it does seem to do the right thing): > > --8<---------------cut here---------------start------------->8--- > diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el > index 74ed6aa2f94..3606a139d50 100644 > --- a/lisp/progmodes/typescript-ts-mode.el > +++ b/lisp/progmodes/typescript-ts-mode.el > @@ -125,6 +125,7 @@ typescript-ts-mode--indent-rules > ((parent-is "switch_case") parent-bol typescript-ts-mode-indent-offset) > ((parent-is "switch_default") parent-bol typescript-ts-mode-indent-offset) > ((parent-is "type_arguments") parent-bol typescript-ts-mode-indent-offset) > + ((parent-is "type_parameters") parent-bol typescript-ts-mode-indent-offset) > ((parent-is ,(rx (or "variable" "lexical") "_" (or "declaration" "declarator"))) > typescript-ts-mode--anchor-decl 1) > ((parent-is "arguments") parent-bol typescript-ts-mode-indent-offset) > > --8<---------------cut here---------------end--------------->8--- > > Thank you for your continued maintenance of Emacs, and have a most > lovely day! 🙂 Thanks for the patch, pushed to master.
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Sat, 13 Jul 2024 11:24:11 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.