GNU bug report logs - #61053
29.0.60; typescript-ts-mode does not correctly highlight function-valued variables. [PATCH]

Previous Next

Package: emacs;

Reported by: jostein <at> kjonigsen.net

Date: Wed, 25 Jan 2023 09:42:01 UTC

Severity: normal

Tags: patch

Found in version 29.0.60

Fixed in version 29.1

Done: Theodor Thornhill <theo <at> thornhill.no>

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 61053 in the body.
You can then email your comments to 61053 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


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#61053; Package emacs. (Wed, 25 Jan 2023 09:42:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to jostein <at> kjonigsen.net:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Wed, 25 Jan 2023 09:42:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Jostein Kjønigsen <jostein <at> secure.kjonigsen.net>
To: "bug-gnu-emacs <at> gnu.org" <bug-gnu-emacs <at> gnu.org>
Cc: Theodor Thornhill <theo <at> thornhill.no>
Subject: 29.0.60; typescript-ts-mode does not correctly highlight
 function-valued variables. [PATCH]
Date: Wed, 25 Jan 2023 10:41:23 +0100
[Message part 1 (text/plain, inline)]
When working with codebases where people define functions by assigned 
arrow-expressions to local variables, typescript-ts-mode (and 
tsx-ts-mode) currently does not highlight them as function declarations.

// this works
function demoFunction() {
}

// this doesnt
const demoFunction = () => {
};

We actually have a selector for this, but it is not getting triggered, 
because of what looks like ordering issues.

We also have override :t for almost every single feature in this mode, 
making it hard to know how selectors gets applied.

Attached is a patch whic:

1. reorders selectors to correctly highlight function-declaration 
(required change, but not sufficient)
2. disables override everywhere, except for declaration, in order to 
keep fontification correct.

So far I haven't been able to observe any ill side-effects from this 
change, but it might be worth double-checking.

--
Jostein

In GNU Emacs 29.0.60 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.36, cairo version 1.17.6) of 2023-01-15 built on thinkpad-t14s
Repository revision: 59c3c53efa43e82f0f2e48a4c27d5bd623201d4a
Repository branch: emacs-29
Windowing system distributor 'The X.Org Foundation', version 11.0.12201007
System Description: Arch Linux

Configured using:
 'configure --with-json --with-tree-sitter'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSYSTEMD LIBXML2 M17N_FLT MODULES NOTIFY INOTIFY
PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS
TREE_SITTER WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB

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

Major mode: TypeScript[TSX]

Minor modes in effect:
  electric-pair-mode: t
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  highlight-symbol-mode: t
  flycheck-mode: t
  editorconfig-mode: t
  company-mode: t
  eglot--managed-mode: t
  flymake-mode: t
  which-function-mode: t
  helm-mode: t
  helm-minibuffer-history-mode: t
  shell-dirtrack-mode: t
  helm--remap-mouse-mode: t
  async-bytecomp-package-mode: t
  delete-selection-mode: t
  global-auto-revert-mode: t
  yas-global-mode: t
  yas-minor-mode: t
  global-nlinum-mode: t
  nlinum-mode: t
  ido-yes-or-no-mode: t
  override-global-mode: t
  server-mode: t
  global-hl-line-mode: t
  pixel-scroll-precision-mode: t
  doom-modeline-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  hs-minor-mode: t

Load-path shadows:
/home/jostein/.emacs.d/elpa/transient-20230107.1528/transient hides 
/home/jostein/build/emacs/lisp/transient

Features:
(shadow emacsbug sort find-dired dired-aux pulse tabify cus-start
helm-command helm-elisp helm-eval edebug helm-info markdown-mode color
mail-extr json-ts-mode elec-pair typescript-ts-mode js c-ts-mode cc-mode
cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars
cc-defs treesit winner ffap tramp-archive tramp-gvfs tramp-cache
time-stamp zeroconf dbus vc-hg vc-bzr vc-src vc-sccs vc-cvs vc-rcs
log-view vc bug-reference flyspell ispell magit-extras magit-bookmark
magit-submodule magit-obsolete 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 magit-repos magit-apply magit-wip magit-log magit-diff smerge-mode
diff git-commit log-edit message sendmail yank-media rfc822 mml mml-sec
epa derived epg rfc6068 epg-config mm-decode mm-bodies mm-encode
mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev gmm-utils
mailheader pcvs-util magit-core magit-autorevert magit-margin
magit-transient magit-process with-editor magit-mode transient magit-git
magit-base magit-section crm misearch multi-isearch face-remap vc-git
diff-mode vc-dispatcher conf-mode executable display-line-numbers
disp-table vc-svn bookmark add-log ido-completing-read+ memoize
minibuf-eldef elisp-slime-nav paredit highlight-symbol flycheck
editorconfig editorconfig-core editorconfig-core-handle
editorconfig-fnmatch company-oddmuse company-keywords company-etags
etags fileloop generator company-gtags company-dabbrev-code
company-dabbrev company-files company-clang company-capf company-cmake
company-semantic company-template company-bbdb company eglot
external-completion array jsonrpc ert ewoc debug backtrace flymake-proc
flymake warnings which-func hideshow eww url-queue thingatpt shr
pixel-fill kinsoku url-file svg xml dom puny mm-url gnus nnheader
gnus-util mail-utils range mm-util mail-prsvr helm-imenu helm-mode
helm-misc helm-files image-dired image-dired-tags image-dired-external
image-dired-util xdg image-mode dired dired-loaddefs exif tramp
tramp-loaddefs trampver tramp-integration cus-edit pp cus-load wid-edit
files-x tramp-compat shell parse-time iso8601 ls-lisp helm-buffers
helm-occur helm-tags helm-locate helm-grep helm-regexp helm-utils
helm-help helm-types helm helm-global-bindings helm-easymenu helm-core
async-bytecomp helm-source helm-multi-match helm-lib async pcase imenu
ob-plantuml org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro
org-src ob-comint org-pcomplete pcomplete org-list org-footnote
org-faces org-entities time-date noutline outline icons 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-version
org-compat org-macs format-spec delsel autorevert filenotify yasnippet
nlinum linum ido-yes-or-no advice ido edmacro kmacro
use-package-bind-key bind-key easy-mmode xref project server hl-line
pixel-scroll cua-base compile-eslint compile text-property-search comint
ansi-osc ansi-color ring doom-modeline doom-modeline-segments
doom-modeline-env doom-modeline-core all-the-icons all-the-icons-faces
data-material data-weathericons data-octicons data-fileicons
data-faicons data-alltheicons shrink-path rx f f-shortdoc s dash compat
dracula-theme cl-extra help-mode use-package-ensure use-package-core
finder-inf yasnippet-autoloads ido-yes-or-no-autoloads
elisp-slime-nav-autoloads cmake-mode-autoloads flycheck-autoloads
pkg-info-autoloads magit-autoloads all-the-icons-autoloads
crontab-mode-autoloads powershell-autoloads doom-modeline-autoloads
undo-tree-autoloads rust-mode-autoloads magit-section-autoloads
paredit-autoloads dracula-theme-autoloads cargo-autoloads
yaml-mode-autoloads helm-autoloads popup-autoloads queue-autoloads
nlinum-autoloads bmx-mode-autoloads company-autoloads
git-commit-autoloads multiple-cursors-autoloads dap-mode-autoloads
lsp-treemacs-autoloads treemacs-autoloads cfrs-autoloads
posframe-autoloads hydra-autoloads pfuture-autoloads
ace-window-autoloads avy-autoloads bui-autoloads transient-autoloads
ido-completing-read+-autoloads memoize-autoloads with-editor-autoloads
compat-autoloads epl-autoloads lsp-docker-autoloads yaml-autoloads
highlight-symbol-autoloads expand-region-autoloads lsp-mode-autoloads
lv-autoloads markdown-mode-autoloads spinner-autoloads ht-autoloads
shrink-path-autoloads f-autoloads dash-autoloads s-autoloads info
editorconfig-autoloads helm-core-autoloads async-autoloads package
browse-url url url-proxy url-privacy url-expand url-methods url-history
url-cookie generate-lisp-file url-domsuf url-util mailcap url-handlers
url-parse auth-source cl-seq eieio eieio-core cl-macs password-cache
json subr-x map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs
cl-lib 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 dbusbind inotify lcms2 dynamic-setting system-font-setting
font-render-setting cairo move-toolbar gtk x-toolkit xinput2 x multi-tty
make-network-process emacs)

Memory information:
nil

-- 
Vennlig hilsen
*Jostein Kjønigsen*

jostein <at> kjonigsen.net 🍵 jostein <at> gmail.com
https://jostein.kjønigsen.no <https://jostein.kjønigsen.no>
[Message part 2 (text/html, inline)]
[0001-typescript-ts-mode-fix-fontification-of-function-val.patch (text/x-patch, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61053; Package emacs. (Wed, 25 Jan 2023 12:07:02 GMT) Full text and rfc822 format available.

Message #8 received at 61053 <at> debbugs.gnu.org (full text, mbox):

From: Theodor Thornhill <theo <at> thornhill.no>
To: Jostein Kjønigsen <jostein <at> secure.kjonigsen.net>
Cc: jostein <at> kjonigsen.net, 61053 <at> debbugs.gnu.org
Subject: Re: bug#61053: 29.0.60; typescript-ts-mode does not correctly
 highlight function-valued variables. [PATCH]
Date: Wed, 25 Jan 2023 13:06:16 +0100
Jostein Kjønigsen <jostein <at> secure.kjonigsen.net> writes:

> When working with codebases where people define functions by assigned arrow-expressions to local variables,
> typescript-ts-mode (and tsx-ts-mode) currently does not highlight them as function declarations.
>
> // this works
> function demoFunction() {
> }
>
> // this doesnt
> const demoFunction = () => {
> };
>
> We actually have a selector for this, but it is not getting triggered, because of what looks like ordering issues.
>
> We also have override :t for almost every single feature in this mode, making it hard to know how selectors gets
> applied.
>
> Attached is a patch whic:
>
> 1. reorders selectors to correctly highlight function-declaration (required change, but not sufficient)
> 2. disables override everywhere, except for declaration, in order to keep fontification correct.
>
> So far I haven't been able to observe any ill side-effects from this change, but it might be worth double-checking.
>


Thanks, Jostein!  Looks like it works on my end aswell.

Applied and pushed, so closing this.  Keep them coming :)

Theo




bug marked as fixed in version 29.1, send any further explanations to 61053 <at> debbugs.gnu.org and jostein <at> kjonigsen.net Request was from Theodor Thornhill <theo <at> thornhill.no> to control <at> debbugs.gnu.org. (Wed, 25 Jan 2023 12:07:03 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61053; Package emacs. (Wed, 25 Jan 2023 13:06:02 GMT) Full text and rfc822 format available.

Message #13 received at 61053 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: jostein <at> kjonigsen.net
Cc: theo <at> thornhill.no, 61053 <at> debbugs.gnu.org
Subject: Re: bug#61053: 29.0.60;
 typescript-ts-mode does not correctly highlight function-valued
 variables. [PATCH]
Date: Wed, 25 Jan 2023 15:05:58 +0200
> Cc: Theodor Thornhill <theo <at> thornhill.no>
> Date: Wed, 25 Jan 2023 10:41:23 +0100
> From: Jostein Kjønigsen <jostein <at> secure.kjonigsen.net>
> 
> When working with codebases where people define functions by assigned arrow-expressions to local
> variables, typescript-ts-mode (and tsx-ts-mode) currently does not highlight them as function declarations.
> 
> // this works
> function demoFunction() {
> }
> 
> // this doesnt
> const demoFunction = () => {
> };
> 
> We actually have a selector for this, but it is not getting triggered, because of what looks like ordering
> issues.
> 
> We also have override :t for almost every single feature in this mode, making it hard to know how selectors
> gets applied.
> 
> Attached is a patch whic:
> 
> 1. reorders selectors to correctly highlight function-declaration (required change, but not sufficient)
> 2. disables override everywhere, except for declaration, in order to keep fontification correct.

Thanks.

When fixing such "tricky" issues, please always include in the code
comments which explain the tricky stuff, in this case why some code
must be before the other.  Otherwise we run the risk that someone,
some day, will reorder the code, and we get the bug back.

Adding tests for this is even better (but doesn't make the comments
less important).




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Thu, 23 Feb 2023 12:24:09 GMT) Full text and rfc822 format available.

This bug report was last modified 1 year and 34 days ago.

Previous Next


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