GNU bug report logs -
#59660
29.0.50; typescript-ts-mode consistently fontifies method-names incorrectly
Previous Next
Reported by: jostein <at> kjonigsen.net
Date: Mon, 28 Nov 2022 15:05:03 UTC
Severity: normal
Found in version 29.0.50
Fixed in version 29.1
Done: Yuan Fu <casouri <at> gmail.com>
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 59660 in the body.
You can then email your comments to 59660 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#59660
; Package
emacs
.
(Mon, 28 Nov 2022 15:05:03 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
.
(Mon, 28 Nov 2022 15:05:03 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
From: "Jostein Kjønigsen"
<jostein <at> ThinkPad-T14s.mail-host-address-is-not-set>
To: bug-gnu-emacs <at> gnu.org
Subject: 29.0.50; typescript-ts-mode consistently fontifies method-names
incorrectly
--text follows this line--
--
When I:
1. create a typescript file (sample.ts)
2. create class and add some methods to it.
I observe that:
- method names are consistently fontified as font-lock-property-face.
I expected that:
- method names to be consistently fontified as font-luck-function-name-face.
This seems to be because of the "property_identifier" is used for
functions in the treesitter-grammar, and this property is used
indiscriminately to apply font-lock-property-face at the bottom of the
major-mode grammar.
This "shadows" the former rules which correctly apply
font-lock-function-name-face.
The best would obviously have a way to identify properties more
accurately, to precent
shadowing from taking place. Unfortunately I cannot see a realiable way
to do that
based on the current parse-tree.
Seeing as properties in Typescript are fairly rare while methods are
very common,
it seems appropriate to me to remove the property-specific fontification
rules
to restore the method-fontification rules.
I got a patch for this ready, if people are willing to accept it.
--
In GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
3.24.34, cairo version 1.16.0) of 2022-11-28 built on ThinkPad-T14s
Repository revision: a85ff22300736212e38f43cc7d56e8e3d4ae1203
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12201003
System Description: Ubuntu 22.10
Configured using:
'configure --with-tree-sitter'
Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NOTIFY
INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS
TREE_SITTER X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB
Important settings:
value of $LC_MONETARY: nb_NO.UTF-8
value of $LC_NUMERIC: nb_NO.UTF-8
value of $LC_TIME: nb_NO.UTF-8
value of $LANG: en_US.UTF-8
locale-coding-system: utf-8-unix
Major mode: TypeScript
Minor modes in effect:
global-git-commit-mode: t
magit-auto-revert-mode: t
lsp-diagnostics-mode: t
lsp-headerline-breadcrumb-mode: t
lsp-modeline-workspace-status-mode: t
lsp-modeline-diagnostics-mode: t
lsp-modeline-code-actions-mode: t
electric-pair-mode: t
lsp-completion-mode: t
editorconfig-mode: t
flycheck-mode: t
which-function-mode: t
nlinum-mode: t
company-mode: t
global-ede-mode: t
dap-tooltip-mode: t
dap-ui-many-windows-mode: t
dap-ui-controls-mode: t
dap-ui-mode: t
treemacs-filewatch-mode: t
treemacs-follow-mode: t
treemacs-git-mode: t
treemacs-fringe-indicator-mode: t
dap-auto-configure-mode: t
dap-mode: t
global-undo-tree-mode: t
undo-tree-mode: t
doom-modeline-mode: t
projectile-mode: t
ido-yes-or-no-mode: t
helm-mode: t
helm-minibuffer-history-mode: t
helm--remap-mouse-mode: t
async-bytecomp-package-mode: t
delete-selection-mode: t
global-auto-revert-mode: t
server-mode: t
shell-dirtrack-mode: t
global-hl-line-mode: t
lsp-managed-mode: t
lsp-mode: t
yas-global-mode: t
yas-minor-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
auto-fill-function: yas--auto-fill
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
Load-path shadows:
/home/jostein/.emacs.d/elpa/transient-20221028.1430/transient hides
/home/jostein/build/emacs/lisp/transient
/home/jostein/.emacs.d/elpa/eglot-20221020.1010/eglot hides
/home/jostein/build/emacs/lisp/progmodes/eglot
Features:
(cl-print git-rebase shadow sort emacsbug magit-extras mail-extr
flyspell ispell mule-util tree-sitter-langs tree-sitter-langs-build
tar-mode arc-mode archive-mode tree-sitter-hl tree-sitter-debug
tree-sitter tree-sitter-load tree-sitter-cli tsc tsc-dyn tsc-dyn-get
dired-aux tsc-obsolete misearch multi-isearch semantic/lex-spp ede/emacs
semantic/db semantic/util-modes semantic/util semantic semantic/tag
semantic/lex semantic/fw mode-local bug-reference 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
git-commit log-edit message sendmail yank-media rfc822 mml mml-sec epa
mm-decode mm-bodies mm-encode 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
compat-27 compat-26 executable helm-command helm-elisp helm-eval
helm-info url-http url-auth mail-parse rfc2231 rfc2047 rfc2045
ietf-drums url-gw face-remap lsp-diagnostics lsp-headerline lsp-icons
lsp-modeline view vc-git diff-mode vc-dispatcher disp-table elec-pair
winner ffap tramp-archive tramp-gvfs tramp-cache warnings time-stamp
zeroconf dbus add-log lsp-zig lsp-steep lsp-svelte lsp-sqls
lsp-ruby-syntax-tree lsp-yaml lsp-xml lsp-vimscript lsp-vhdl lsp-volar
lsp-vetur lsp-html lsp-verilog lsp-vala lsp-v lsp-typeprof lsp-ttcn3
lsp-toml lsp-terraform lsp-tex lsp-sorbet lsp-solargraph lsp-rust lsp-rf
lsp-remark lsp-racket lsp-r lsp-purescript lsp-pylsp lsp-pyls lsp-php
lsp-pls lsp-perlnavigator lsp-perl lsp-openscad lsp-ocaml lsp-magik
lsp-nix lsp-nim lsp-nginx lsp-mint lsp-marksman lsp-markdown lsp-lua
lsp-kotlin lsp-json lsp-javascript lsp-idris lsp-haxe lsp-groovy
lsp-hack lsp-graphql lsp-gleam lsp-go lsp-completion lsp-gdscript
lsp-fsharp lsp-fortran lsp-eslint lsp-erlang lsp-emmet lsp-elixir
lsp-elm lsp-dockerfile lsp-dhall lsp-d lsp-css lsp-csharp gnutls
lsp-crystal lsp-cmake lsp-clojure lsp-semantic-tokens lsp-clangd
lsp-beancount lsp-bash lsp-ansible lsp-angular lsp-ada lsp-actionscript
ido-completing-read+ memoize minibuf-eldef elisp-slime-nav paredit
editorconfig editorconfig-core editorconfig-core-handle
editorconfig-fnmatch flycheck highlight-symbol which-func edebug debug
backtrace nlinum linum 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-web-html
company-web company-css web-completion-data company eww url-queue shr
pixel-fill kinsoku url-file svg mm-url gnus nnheader gnus-util
mail-utils range mm-util mail-prsvr ede/speedbar ede/files ede
ede/detect ede/base ede/auto ede/source eieio-base eieio-speedbar
speedbar ezimage dframe eieio-custom cedet dap-mouse dap-ui lsp-treemacs
lsp-treemacs-generic lsp-treemacs-themes treemacs-treelib treemacs
treemacs-header-line treemacs-compatibility treemacs-mode
treemacs-interface treemacs-persistence treemacs-filewatch-mode
treemacs-follow-mode treemacs-rendering treemacs-annotations
treemacs-async treemacs-workspaces treemacs-dom treemacs-visuals
treemacs-fringe-indicator treemacs-scope pulse treemacs-faces
treemacs-icons treemacs-themes treemacs-core-utils pfuture
treemacs-logging treemacs-customization treemacs-macros gdb-mi bindat
gud bui bui-list bui-info bui-entry bui-core bui-history bui-button
bui-utils lsp-lens dap-gdb-lldb dap-netcore dap-node dap-utils dom xml
dap-pwsh lsp-pwsh dap-python dap-mode dap-tasks dap-launch lsp-docker
yaml posframe dap-overlays undo-tree diff queue 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
compat compat-macs projectile lisp-mnt grep ibuf-ext ibuffer
ibuffer-loaddefs helm-imenu ob-plantuml org ob ob-tangle ob-ref ob-lob
ob-table ob-exp org-macro org-footnote org-src ob-comint org-pcomplete
org-list org-faces org-entities org-version ob-emacs-lisp ob-core
ob-eval org-table oc-basic bibtex ol org-keys oc org-compat org-macs
org-loaddefs find-func cal-menu calendar cal-loaddefs ido-yes-or-no ido
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 files-x tramp-compat parse-time iso8601 time-date
ls-lisp helm-buffers helm-occur helm-tags helm-locate helm-grep
helm-regexp format-spec helm-utils helm-help helm-types helm
helm-global-bindings helm-easymenu edmacro kmacro helm-core easy-mmode
async-bytecomp helm-source helm-multi-match helm-lib async helm-config
delsel cl-extra autorevert typescript-ts-mode js derived csharp-mode
treesit cc-langs cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles
cc-align cc-engine cc-vars cc-defs server powershell advice shell
pcomplete hl-line lsp-mode lsp-protocol yasnippet help-mode xref project
tree-widget wid-edit spinner pcase network-stream puny nsm markdown-mode
color thingatpt noutline outline icons lv inline imenu ht filenotify f
f-shortdoc shortdoc s ewoc epg rfc6068 epg-config dash dracula-theme
compile-eslint compile text-property-search comint ansi-osc ansi-color
ring cl finder-inf rx helm-projectile-autoloads expand-region-autoloads
all-the-icons-autoloads helm-autoloads dracula-theme-autoloads
eglot-autoloads nlinum-autoloads rust-mode-autoloads
multiple-cursors-autoloads magit-autoloads magit-section-autoloads
doom-modeline-autoloads assess-autoloads m-buffer-autoloads
cargo-autoloads package-lint-autoloads company-autoloads
web-mode-autoloads flycheck-autoloads git-commit-autoloads
with-editor-autoloads git-timemachine-autoloads js2-mode-autoloads
projectile-autoloads yaml-mode-autoloads helpful-autoloads
elisp-refs-autoloads powershell-autoloads helm-core-autoloads
async-autoloads editorconfig-autoloads dap-mode-autoloads
lsp-docker-autoloads yaml-autoloads lsp-treemacs-autoloads
lsp-mode-autoloads markdown-mode-autoloads transient-autoloads
compat-autoloads paredit-autoloads pcache-autoloads f-autoloads
popup-autoloads tree-sitter-langs-autoloads treemacs-autoloads
posframe-autoloads ht-autoloads hydra-autoloads pfuture-autoloads
ace-window-autoloads avy-autoloads s-autoloads info dash-autoloads
macrostep-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:
((conses 16 769231 98943)
(symbols 48 61705 77)
(strings 32 224824 12295)
(string-bytes 1 6961649)
(vectors 16 129092)
(vector-slots 8 2341344 202175)
(floats 8 1075 874)
(intervals 56 26101 3923)
(buffers 992 54))
--
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)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#59660
; Package
emacs
.
(Mon, 28 Nov 2022 15:10:02 GMT)
Full text and
rfc822 format available.
Message #8 received at 59660 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Attached is a simple patch which addresses this font-lock issue and
makes typescript-ts-mode much better to use.
--
Kind regards
*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)]
[0004-lisp-progmodes-typescript-ts-mode.el-restore-method-.patch (text/x-patch, attachment)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#59660
; Package
emacs
.
(Mon, 28 Nov 2022 16:45:01 GMT)
Full text and
rfc822 format available.
Message #11 received at 59660 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
This additional patch further improves fontification by fontifying
function-arguments as variables too.
--
Kind regards
*Jostein Kjønigsen*
jostein <at> kjonigsen.net 🍵 jostein <at> gmail.com
https://jostein.kjønigsen.no <https://jostein.kjønigsen.no>
On 28.11.2022 16:09, Jostein Kjønigsen wrote:
>
> Attached is a simple patch which addresses this font-lock issue and
> makes typescript-ts-mode much better to use.
>
> --
> Kind regards
> *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)]
[0005-lisp-progmodes-typescript-ts-mode.el-Fontify-functio.patch (text/x-patch, attachment)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#59660
; Package
emacs
.
(Mon, 28 Nov 2022 16:54:02 GMT)
Full text and
rfc822 format available.
Message #14 received at 59660 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
And another improvement.
--
Kind regards
*Jostein Kjønigsen*
jostein <at> kjonigsen.net 🍵 jostein <at> gmail.com
https://jostein.kjønigsen.no <https://jostein.kjønigsen.no>
On 28.11.2022 17:44, Jostein Kjønigsen wrote:
>
> This additional patch further improves fontification by fontifying
> function-arguments as variables too.
>
> --
>
> Kind regards
> *Jostein Kjønigsen*
>
> jostein <at> kjonigsen.net 🍵 jostein <at> gmail.com
> https://jostein.kjønigsen.no <https://jostein.kjønigsen.no>
> On 28.11.2022 16:09, Jostein Kjønigsen wrote:
>>
>> Attached is a simple patch which addresses this font-lock issue and
>> makes typescript-ts-mode much better to use.
>>
>> --
>> Kind regards
>> *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)]
[0006-lisp-progmodes-typescript-ts-mode.el-Fontify-all-typ.patch (text/x-patch, attachment)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#59660
; Package
emacs
.
(Mon, 28 Nov 2022 17:09:01 GMT)
Full text and
rfc822 format available.
Message #17 received at 59660 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
All fixes and one more squashed into the attached patch :)
Vennlig hilsen
*Jostein Kjønigsen*
jostein <at> kjonigsen.net 🍵 jostein <at> gmail.com
https://jostein.kjønigsen.no <https://jostein.kjønigsen.no>
On 28.11.2022 17:53, Jostein Kjønigsen wrote:
>
> And another improvement.
>
> --
> Kind regards
> *Jostein Kjønigsen*
>
> jostein <at> kjonigsen.net 🍵 jostein <at> gmail.com
> https://jostein.kjønigsen.no <https://jostein.kjønigsen.no>
> On 28.11.2022 17:44, Jostein Kjønigsen wrote:
>>
>> This additional patch further improves fontification by fontifying
>> function-arguments as variables too.
>>
>> --
>>
>> Kind regards
>> *Jostein Kjønigsen*
>>
>> jostein <at> kjonigsen.net 🍵 jostein <at> gmail.com
>> https://jostein.kjønigsen.no <https://jostein.kjønigsen.no>
>> On 28.11.2022 16:09, Jostein Kjønigsen wrote:
>>>
>>> Attached is a simple patch which addresses this font-lock issue and
>>> makes typescript-ts-mode much better to use.
>>>
>>> --
>>> Kind regards
>>> *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)]
[0004-lisp-progmodes-typescript-ts-mode.el-fontification-i.patch (text/x-patch, attachment)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#59660
; Package
emacs
.
(Mon, 28 Nov 2022 17:27:02 GMT)
Full text and
rfc822 format available.
Message #20 received at 59660 <at> debbugs.gnu.org (full text, mbox):
> Date: Mon, 28 Nov 2022 18:08:01 +0100
> From: Jostein Kjønigsen <jostein <at> secure.kjonigsen.net>
>
> All fixes and one more squashed into the attached patch :)
Which "all", please? AFAICT, you also posted a patch in another bug number,
so is that also included?
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#59660
; Package
emacs
.
(Mon, 28 Nov 2022 18:02:02 GMT)
Full text and
rfc822 format available.
Message #23 received at 59660 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
On 28.11.2022 18:27, Eli Zaretskii wrote:
>> Date: Mon, 28 Nov 2022 18:08:01 +0100
>> From: Jostein Kjønigsen<jostein <at> secure.kjonigsen.net>
>>
>> All fixes and one more squashed into the attached patch :)
> Which "all", please? AFAICT, you also posted a patch in another bug number,
> so is that also included?
No.
I've registered separate bugs for csharp-ts-mode and typescript-ts-mode,
since they are distinct major-modes with no code in common.
As such patches for C# has been sent to the C# bug.
And TypeScript patches have been sent to the TypeScript-bug.
As for "all", both csharp-ts-mode and typescript-ts-mode are "new"
modes, and as such probably will have a few ripening issues once tested
on real production code-bases and daily use (like I do now),
In name of brewity, I decided not to file a bug-report for every single
fontification issue I found, but rather bulk up the fixes per mode on
the respective bugs for those two languages. I hope this is OK.
As for TypeScript, IMO there still are a few minor issues wrt to how
font-lock-variable-name-face gets applied (or not), but I don't have
patches for those yet, and I would not consider them deal-breakers or
release-killers :)
--
Kind regards*
Jostein Kjønigsen*
[Message part 2 (text/html, inline)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#59660
; Package
emacs
.
(Mon, 28 Nov 2022 23:03:02 GMT)
Full text and
rfc822 format available.
Message #26 received at 59660 <at> debbugs.gnu.org (full text, mbox):
> On Nov 28, 2022, at 9:08 AM, Jostein Kjønigsen <jostein <at> secure.kjonigsen.net> wrote:
>
> All fixes and one more squashed into the attached patch :)
>
> Vennlig hilsen
> Jostein Kjønigsen
>
> jostein <at> kjonigsen.net 🍵 jostein <at> gmail.com
> https://jostein.kjønigsen.no
> On 28.11.2022 17:53, Jostein Kjønigsen wrote:
>> And another improvement.
>>
>> --
>> Kind regards
>> Jostein Kjønigsen
>>
>> jostein <at> kjonigsen.net 🍵 jostein <at> gmail.com
>> https://jostein.kjønigsen.no
>> On 28.11.2022 17:44, Jostein Kjønigsen wrote:
>>> This additional patch further improves fontification by fontifying function-arguments as variables too.
>>>
>>> --
>>>
>>> Kind regards
>>> Jostein Kjønigsen
>>>
>>> jostein <at> kjonigsen.net 🍵 jostein <at> gmail.com
>>> https://jostein.kjønigsen.no
>>> On 28.11.2022 16:09, Jostein Kjønigsen wrote:
>>>> Attached is a simple patch which addresses this font-lock issue and makes typescript-ts-mode much better to use.
>>>>
>>>> --
>>>> Kind regards
>>>> Jostein Kjønigsen
>>>>
>>>> jostein <at> kjonigsen.net 🍵 jostein <at> gmail.com
>>>> https://jostein.kjønigsen.no
> <0004-lisp-progmodes-typescript-ts-mode.el-fontification-i.patch>
Thanks! Applied with minor change to commit message.
Yuan
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#59660
; Package
emacs
.
(Mon, 28 Nov 2022 23:07:02 GMT)
Full text and
rfc822 format available.
Message #29 received at 59660 <at> debbugs.gnu.org (full text, mbox):
> On Nov 28, 2022, at 7:04 AM, Jostein Kjønigsen <jostein <at> secure.kjonigsen.net> wrote:
>
> From: "Jostein Kjønigsen" <jostein <at> ThinkPad-T14s.mail-host-address-is-not-set>
> To: bug-gnu-emacs <at> gnu.org
> Subject: 29.0.50; typescript-ts-mode consistently fontifies method-names incorrectly
> --text follows this line--
>
> --
> When I:
>
> 1. create a typescript file (sample.ts)
> 2. create class and add some methods to it.
>
> I observe that:
>
> - method names are consistently fontified as font-lock-property-face.
>
> I expected that:
>
> - method names to be consistently fontified as font-luck-function-name-face.
>
> This seems to be because of the "property_identifier" is used for
> functions in the treesitter-grammar, and this property is used
> indiscriminately to apply font-lock-property-face at the bottom of the
> major-mode grammar.
>
> This "shadows" the former rules which correctly apply font-lock-function-name-face.
>
> The best would obviously have a way to identify properties more accurately, to precent
> shadowing from taking place. Unfortunately I cannot see a realiable way to do that
> based on the current parse-tree.
>
> Seeing as properties in Typescript are fairly rare while methods are very common,
> it seems appropriate to me to remove the property-specific fontification rules
> to restore the method-fontification rules.
>
> I got a patch for this ready, if people are willing to accept it.
Maybe you can remove the :override flag for the property_identifier rule, so it doesn’t shadow the function rule? Would that work better?
Yuan
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#59660
; Package
emacs
.
(Tue, 29 Nov 2022 12:10:01 GMT)
Full text and
rfc822 format available.
Message #32 received at 59660 <at> debbugs.gnu.org (full text, mbox):
> Cc: 59660 <at> debbugs.gnu.org, theo <at> thornhill.no
> From: Yuan Fu <casouri <at> gmail.com>
> Date: Mon, 28 Nov 2022 15:06:30 -0800
>
> > 1. create a typescript file (sample.ts)
> > 2. create class and add some methods to it.
> >
> > I observe that:
> >
> > - method names are consistently fontified as font-lock-property-face.
> >
> > I expected that:
> >
> > - method names to be consistently fontified as font-luck-function-name-face.
> >
> > This seems to be because of the "property_identifier" is used for
> > functions in the treesitter-grammar, and this property is used
> > indiscriminately to apply font-lock-property-face at the bottom of the
> > major-mode grammar.
> >
> > This "shadows" the former rules which correctly apply font-lock-function-name-face.
> >
> > The best would obviously have a way to identify properties more accurately, to precent
> > shadowing from taking place. Unfortunately I cannot see a realiable way to do that
> > based on the current parse-tree.
> >
> > Seeing as properties in Typescript are fairly rare while methods are very common,
> > it seems appropriate to me to remove the property-specific fontification rules
> > to restore the method-fontification rules.
> >
> > I got a patch for this ready, if people are willing to accept it.
>
> Maybe you can remove the :override flag for the property_identifier rule, so it doesn’t shadow the function rule? Would that work better?
This could be a personal preference, perhaps? It isn't clear to me that
only one of the two is definitely correct. So maybe we need a user option
for which one overrides which?
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#59660
; Package
emacs
.
(Tue, 29 Nov 2022 14:00:02 GMT)
Full text and
rfc822 format available.
Message #35 received at 59660 <at> debbugs.gnu.org (full text, mbox):
Cc: 59660 <at> debbugs.gnu.org, theo <at> thornhill.no
>> From: Yuan Fu <casouri <at> gmail.com>
>> Date: Mon, 28 Nov 2022 15:06:30 -0800
>>
>> Maybe you can remove the :override flag for the property_identifier rule, so it doesn’t shadow the function rule? Would that work better?
I plan to test that as quickly as I time permits. If we can make both
behaviours work, that would obviously be the best.
> This could be a personal preference, perhaps? It isn't clear to me that
> only one of the two is definitely correct. So maybe we need a user option
> for which one overrides which?
I honestly think this is reasonably clear.
"Properties" with getters and setters are at this point in time almost
entirely unused in EcmaScript/TypeScript space. They are optional and
have complicated syntax, and don't play well with JSON serialization
(and thus can't be used in REST APIs).
You however cannot write a program without defining or invoking
methods/functions. So not having method-fontification working correctly
will literally impact **all** TypeScript-users.
--
Jostein
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#59660
; Package
emacs
.
(Tue, 29 Nov 2022 14:30:03 GMT)
Full text and
rfc822 format available.
Message #38 received at 59660 <at> debbugs.gnu.org (full text, mbox):
> Date: Tue, 29 Nov 2022 14:58:59 +0100
> Cc: jostein <at> kjonigsen.net, 59660 <at> debbugs.gnu.org, theo <at> thornhill.no
> From: Jostein Kjønigsen <jostein <at> secure.kjonigsen.net>
>
> > This could be a personal preference, perhaps? It isn't clear to me that
> > only one of the two is definitely correct. So maybe we need a user option
> > for which one overrides which?
>
> I honestly think this is reasonably clear.
>
> "Properties" with getters and setters are at this point in time almost
> entirely unused in EcmaScript/TypeScript space. They are optional and
> have complicated syntax, and don't play well with JSON serialization
> (and thus can't be used in REST APIs).
So you are saying Typescript should not even support these features in the
tree-sitter based fontifications? If so, I'm okay with that, but it sounds
like :override is the wrong tool for that, and we should simply remove
"properties" from the list of features for Typescript?
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#59660
; Package
emacs
.
(Tue, 29 Nov 2022 15:11:01 GMT)
Full text and
rfc822 format available.
Message #41 received at 59660 <at> debbugs.gnu.org (full text, mbox):
Jostein Kjønigsen <jostein <at> secure.kjonigsen.net> writes:
> Cc: 59660 <at> debbugs.gnu.org, theo <at> thornhill.no
>>> From: Yuan Fu <casouri <at> gmail.com>
>>> Date: Mon, 28 Nov 2022 15:06:30 -0800
>>>
>>> Maybe you can remove the :override flag for the property_identifier rule, so it doesn’t shadow the function rule? Would that work better?
> I plan to test that as quickly as I time permits. If we can make both
> behaviours work, that would obviously be the best.
>> This could be a personal preference, perhaps? It isn't clear to me that
>> only one of the two is definitely correct. So maybe we need a user option
>> for which one overrides which?
>
> I honestly think this is reasonably clear.
>
> "Properties" with getters and setters are at this point in time almost
> entirely unused in EcmaScript/TypeScript space. They are optional and
> have complicated syntax, and don't play well with JSON serialization
> (and thus can't be used in REST APIs).
>
> You however cannot write a program without defining or invoking
> methods/functions. So not having method-fontification working correctly
> will literally impact **all** TypeScript-users.
Could you give me a code example, Jostein? I'm just interested in a
repro, because I can't reproduce it with the typescript-ts-mode.
I tried using this from [0]:
```
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
```
On my end I get no property-face, just function-name-face. Both on
constructor and greet. I'm not saying I disagree with you, but what am
I missing?
Theo
[0]: https://www.typescriptlang.org/docs/handbook/classes.html
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#59660
; Package
emacs
.
(Tue, 29 Nov 2022 16:36:01 GMT)
Full text and
rfc822 format available.
Message #44 received at 59660 <at> debbugs.gnu.org (full text, mbox):
> On 29 Nov 2022, at 16:10, Theodor Thornhill <theo <at> thornhill.no> wrote:
>
> Jostein Kjønigsen <jostein <at> secure.kjonigsen.net> writes:
>
>> Cc: 59660 <at> debbugs.gnu.org, theo <at> thornhill.no
>>>> From: Yuan Fu <casouri <at> gmail.com>
>>>> Date: Mon, 28 Nov 2022 15:06:30 -0800
>>>>
>>>> Maybe you can remove the :override flag for the property_identifier rule, so it doesn’t shadow the function rule? Would that work better?
>> I plan to test that as quickly as I time permits. If we can make both
>> behaviours work, that would obviously be the best.
>>> This could be a personal preference, perhaps? It isn't clear to me that
>>> only one of the two is definitely correct. So maybe we need a user option
>>> for which one overrides which?
>>
>> I honestly think this is reasonably clear.
>>
>> "Properties" with getters and setters are at this point in time almost
>> entirely unused in EcmaScript/TypeScript space. They are optional and
>> have complicated syntax, and don't play well with JSON serialization
>> (and thus can't be used in REST APIs).
>>
>> You however cannot write a program without defining or invoking
>> methods/functions. So not having method-fontification working correctly
>> will literally impact **all** TypeScript-users.
>
> Could you give me a code example, Jostein? I'm just interested in a
> repro, because I can't reproduce it with the typescript-ts-mode.
>
> I tried using this from [0]:
> ```
> class Greeter {
> greeting: string;
>
> constructor(message: string) {
> this.greeting = message;
> }
>
> greet() {
> return "Hello, " + this.greeting;
> }
> }
> ```
>
> On my end I get no property-face, just function-name-face. Both on
> constructor and greet. I'm not saying I disagree with you, but what am
> I missing?
>
> Theo
>
> [0]: https://www.typescriptlang.org/docs/handbook/classes.html
>
I’ve already submitted patches to fix this which Yuan has pushed. Try going a couple days back in time and try again ;)
What remains to be decided is what we do with property-highlighting, and if we can find a way to enable that without colliding with function-names.
—
Jostein Kjønigsen
https://jostein.kjønigsen.net
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#59660
; Package
emacs
.
(Tue, 29 Nov 2022 16:40:01 GMT)
Full text and
rfc822 format available.
Message #47 received at 59660 <at> debbugs.gnu.org (full text, mbox):
On 29 November 2022 17:35:31 CET, "Jostein Kjønigsen" <jostein <at> secure.kjonigsen.net> wrote:
>
>
>> On 29 Nov 2022, at 16:10, Theodor Thornhill <theo <at> thornhill.no> wrote:
>>
>> Jostein Kjønigsen <jostein <at> secure.kjonigsen.net> writes:
>>
>>> Cc: 59660 <at> debbugs.gnu.org, theo <at> thornhill.no
>>>>> From: Yuan Fu <casouri <at> gmail.com>
>>>>> Date: Mon, 28 Nov 2022 15:06:30 -0800
>>>>>
>>>>> Maybe you can remove the :override flag for the property_identifier rule, so it doesn’t shadow the function rule? Would that work better?
>>> I plan to test that as quickly as I time permits. If we can make both
>>> behaviours work, that would obviously be the best.
>>>> This could be a personal preference, perhaps? It isn't clear to me that
>>>> only one of the two is definitely correct. So maybe we need a user option
>>>> for which one overrides which?
>>>
>>> I honestly think this is reasonably clear.
>>>
>>> "Properties" with getters and setters are at this point in time almost
>>> entirely unused in EcmaScript/TypeScript space. They are optional and
>>> have complicated syntax, and don't play well with JSON serialization
>>> (and thus can't be used in REST APIs).
>>>
>>> You however cannot write a program without defining or invoking
>>> methods/functions. So not having method-fontification working correctly
>>> will literally impact **all** TypeScript-users.
>>
>> Could you give me a code example, Jostein? I'm just interested in a
>> repro, because I can't reproduce it with the typescript-ts-mode.
>>
>> I tried using this from [0]:
>> ```
>> class Greeter {
>> greeting: string;
>>
>> constructor(message: string) {
>> this.greeting = message;
>> }
>>
>> greet() {
>> return "Hello, " + this.greeting;
>> }
>> }
>> ```
>>
>> On my end I get no property-face, just function-name-face. Both on
>> constructor and greet. I'm not saying I disagree with you, but what am
>> I missing?
>>
>> Theo
>>
>> [0]: https://www.typescriptlang.org/docs/handbook/classes.html
>>
>
>I’ve already submitted patches to fix this which Yuan has pushed. Try going a couple days back in time and try again ;)
>
>What remains to be decided is what we do with property-highlighting, and if we can find a way to enable that without colliding with function-names.
>
>—
>Jostein Kjønigsen
>https://jostein.kjønigsen.net
Ah, don't mind me, I'll hide in the corner :-)
bug marked as fixed in version 29.1, send any further explanations to
59660 <at> debbugs.gnu.org and jostein <at> kjonigsen.net
Request was from
Yuan Fu <casouri <at> gmail.com>
to
control <at> debbugs.gnu.org
.
(Wed, 30 Nov 2022 10:35:02 GMT)
Full text and
rfc822 format available.
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Wed, 28 Dec 2022 12:24:07 GMT)
Full text and
rfc822 format available.
This bug report was last modified 2 years and 197 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.