Subject: bug#71563: closed (Re: bug#71563: 30.0.50; {typescript,tsx}-ts-mode do not indent type parameter lists contents)

From: [email-masked] (GNU bug Tracking System)
Date: Fri, 14 Jun 2024 23:20:01 +0000

Your bug report

#71563: 30.0.50; {typescript,tsx}-ts-mode do not indent type parameter lists contents

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
71563: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=71563
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#71563: 30.0.50; {typescript,tsx}-ts-mode do not indent type parameter lists contents
From: Dmitry Gutov <[email-masked]>
To: Arsen Arsenović <[email-masked]>, [email-masked]
Date: Sat, 15 Jun 2024 02:19:31 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

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.

Subject: 30.0.50; {typescript,tsx}-ts-mode do not indent type parameter lists contents
From: Arsen Arsenović <[email-masked]>
To: [email-masked]
Date: Fri, 14 Jun 2024 22:23:31 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

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ć