Subject: bug#75824: [Patch] 31.0.50; typescrip-ts-mode: Does not correctly fontify known operators and keywords

From: Jostein Kjønigsen <[email-masked]>
Date: Sat, 25 Jan 2025 11:39:09 +0100

Hey everyone.

Typescript supports the null-coalescing operator ?? just like many other languages. Currently it is fontified using the default face.
Typescript also has the "undefined" keyword which is also fontified using the default face.

Attached is a patch which fixes these issues.

￼

In GNU Emacs 31.0.50 (build 5, aarch64-apple-darwin24.0.0, NS
 appkit-2566.00 Version 15.0.1 (Build 24A348)) of 2024-12-11 built on
 SOK67R3KWV97
Repository revision: a9bc12318121acb513a5735f641602001510a932
Repository branch: master
Windowing system distributor 'Apple', version 10.3.2566
System Description:  macOS 15.0.1

Configured using:
 'configure --with-tree-sitter --with-native-compilation --with-json
 --with-imagemagick
 PKG_CONFIG_PATH=:/usr/local/lib/pkgconfig:/opt/local/lib/pkgconfig'

Configured features:
ACL GLIB GNUTLS IMAGEMAGICK LCMS2 LIBXML2 MODULES NATIVE_COMP NOTIFY
KQUEUE NS PDUMPER PNG RSVG SQLITE3 THREADS TOOLKIT_SCROLL_BARS
TREE_SITTER WEBP XIM ZLIB

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

Major mode: ELisp/l

Minor modes in effect:
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  bug-reference-prog-mode: t
  elisp-slime-nav-mode: t
  highlight-symbol-mode: t
  flycheck-mode: t
  editorconfig-mode: t
  company-mode: t
  indent-bars-mode: t
  which-function-mode: t
  helm-mode: t
  helm-minibuffer-history-mode: t
  async-bytecomp-package-mode: t
  delete-selection-mode: t
  global-auto-revert-mode: t
  paredit-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
  minibuffer-regexp-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:
/Users/josteink/.emacs.d/elpa/transient-20240421.1327/transient hides /Users/josteink/build/emacs/lisp/transient
/Users/josteink/.emacs.d/elpa/editorconfig-20240318.2049/editorconfig hides /Users/josteink/build/emacs/lisp/editorconfig
/Users/josteink/.emacs.d/elpa/editorconfig-20240318.2049/editorconfig-conf-mode hides /Users/josteink/build/emacs/lisp/editorconfig-conf-mode
/Users/josteink/.emacs.d/elpa/editorconfig-20240318.2049/editorconfig-core hides /Users/josteink/build/emacs/lisp/editorconfig-core
/Users/josteink/.emacs.d/elpa/editorconfig-20240318.2049/editorconfig-core-handle hides /Users/josteink/build/emacs/lisp/editorconfig-core-handle
/Users/josteink/.emacs.d/elpa/editorconfig-20240318.2049/editorconfig-fnmatch hides /Users/josteink/build/emacs/lisp/editorconfig-fnmatch

Features:
(shadow sort mail-extr emacsbug goto-addr git-rebase magit-extras
tramp-cache time-stamp tramp-sh shortdoc help-fns radix-tree
helm-command helm-elisp helm-eval edebug helm-info markdown-mode
elec-pair 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 magit-repos magit-apply magit-wip magit-log magit-diff smerge-mode
git-commit log-edit pcvs-util magit-core magit-autorevert magit-margin
magit-transient magit-process with-editor magit-mode transient magit-git
magit-base magit-section cursor-sensor crm csharp-mode c-ts-common
cc-langs cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align
cc-engine cc-vars cc-defs misearch multi-isearch bug-reference vc-git
vc-dispatcher winner tramp-archive tramp-gvfs add-log pulse
ido-completing-read+ memoize minibuf-eldef org-duration diary-lib
diary-loaddefs cal-iso oc-basic ol-eww ol-rmail ol-mhe ol-irc ol-info
ol-gnus nnselect gnus-art mm-uu mml2015 mm-view mml-smime smime dig
gnus-sum gnus-group gnus-undo gnus-start gnus-dbus dbus gnus-cloud
nnimap nnmail mail-source utf7 nnoo gnus-spec gnus-int gnus-range
message sendmail yank-media rfc822 mml mml-sec epa derived epg rfc6068
mm-decode mm-bodies mm-encode mailabbrev gmm-utils mailheader gnus-win
ol-docview doc-view jka-compr ol-bibtex bibtex ol-bbdb ol-w3m ol-doi
org-link-doi org-agenda org-element org-persist org-id org-element-ast
inline avl-tree org-refile elisp-slime-nav highlight-symbol flycheck
editorconfig editorconfig-core editorconfig-core-handle
editorconfig-fnmatch company-oddmuse company-keywords company-etags
etags fileloop company-gtags company-dabbrev-code company-dabbrev
company-files company-clang company-capf company-cmake company-semantic
company-template company-bbdb company indent-bars-ts indent-bars
face-remap color eglot external-completion jsonrpc flymake diff ert ewoc
debug backtrace which-func hideshow disp-table cus-edit pp cus-start
cus-load eww vtable url-queue shr pixel-fill kinsoku url-file svg xml
dom mm-url gnus nnheader gnus-util mail-utils range wid-edit helm-imenu
helm-mode helm-misc helm-files image-dired image-dired-tags
image-dired-external image-dired-util image-mode dired dired-loaddefs
exif tramp trampver tramp-integration files-x tramp-message tramp-compat
xdg shell parse-time iso8601 tramp-loaddefs 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 imenu
ob-plantuml delsel autorevert filenotify org ob ob-tangle ob-ref ob-lob
ob-table ob-exp org-macro org-src sh-script smie executable ob-comint
org-pcomplete pcomplete org-list org-footnote org-faces org-entities
time-date noutline outline ob-emacs-lisp ob-core ob-eval org-cycle
org-table ol org-fold org-fold-core org-keys oc org-loaddefs thingatpt
find-func cal-menu calendar cal-loaddefs org-version org-compat org-macs
yasnippet paredit gnutls network-stream url-cache url-http url-auth
mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-gw
nsm puny epg-config nlinum linum ido-yes-or-no advice ido
use-package-bind-key bind-key xref server hl-line pixel-scroll cua-base
compile-eslint compile text-property-search all-the-icons
all-the-icons-faces data-material data-weathericons data-octicons
data-fileicons data-faicons data-alltheicons doom-modeline
doom-modeline-segments doom-modeline-env doom-modeline-core shrink-path
f s dash nerd-icons nerd-icons-faces nerd-icons-data
nerd-icons-data-mdicon nerd-icons-data-flicon nerd-icons-data-codicon
nerd-icons-data-devicon nerd-icons-data-sucicon nerd-icons-data-wicon
nerd-icons-data-faicon nerd-icons-data-powerline nerd-icons-data-octicon
nerd-icons-data-pomicon nerd-icons-data-ipsicon dracula-theme
use-package-ensure use-package-core all-the-icons-autoloads
bitwarden-autoloads bmx-mode-autoloads cargo-autoloads
cmake-mode-autoloads format-spec edmacro kmacro combobulate-display
combobulate-ztree combobulate-envelope combobulate-manipulation python
project compat comint ansi-osc ring ansi-color combobulate-procedure
combobulate-navigation combobulate-misc combobulate-setup tempo
combobulate-interface combobulate-settings diff-mode track-changes
easy-mmode treesit generator combobulate-rules company-autoloads
copilot-mode-autoloads crontab-mode-autoloads csv-mode-autoloads
bui-autoloads dockerfile-mode-autoloads doom-modeline-autoloads
dracula-theme-autoloads editorconfig-autoloads elisp-slime-nav-autoloads
expand-region-autoloads flycheck-autoloads helm-autoloads
helm-core-autoloads async-autoloads highlight-symbol-autoloads
ido-yes-or-no-autoloads ido-completing-read+-autoloads comp comp-cstr
cl-extra help-mode warnings comp-run comp-common rx
indent-bars-autoloads finder-inf lsp-treemacs-autoloads
lsp-mode-autoloads magit-autoloads pcase git-commit-autoloads
magit-section-autoloads markdown-mode-autoloads memoize-autoloads
multiple-cursors-autoloads nerd-icons-autoloads nlinum-autoloads
paredit-autoloads pkg-info-autoloads epl-autoloads popup-autoloads
powershell-autoloads quelpa-use-package-autoloads quelpa-autoloads
shrink-path-autoloads f-autoloads spinner-autoloads swift-mode-autoloads
transient-autoloads treemacs-autoloads cfrs-autoloads posframe-autoloads
ht-autoloads hydra-autoloads lv-autoloads pfuture-autoloads
ace-window-autoloads avy-autoloads s-autoloads dash-autoloads
undo-tree-autoloads queue-autoloads wfnames-autoloads info
with-editor-autoloads wsd-mode-autoloads yasnippet-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 icons
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/ns-win ns-win ucs-normalize mule-util term/common-win 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 kqueue cocoa ns lcms2
multi-tty make-network-process native-compile emacs)

Memory information:
((conses 16 1070864 275416) (symbols 48 56434 4)
 (strings 32 305701 14281) (string-bytes 1 8652641)
 (vectors 16 105342) (vector-slots 8 2031248 187347)
 (floats 8 1339 1738) (intervals 56 11304 5793) (buffers 992 54))

—
Kind Regards
Jostein Kjønigsen