GNU bug report logs -
#77901
tsx-ts-mode: ternary chains are indented as a tree
Previous Next
Full log
View this message in rfc822 format
Hey, sorry for the delay.
> On May 10, 2025, at 3:16 AM, Eli Zaretskii <eliz <at> gnu.org> wrote:
>
>> From: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>
>> Date: Thu, 01 May 2025 20:39:02 +0700
>>
>> After poking around I wrote a patch (attached).
Thanks! LGTM. For some reason I can’t apply the patch on either emacs-30 or master. [1]
>> Worth noting though, for
>> some reason it doesn't work for ternary without starting colon, e.g.:
>>
>> const a = cond1 ? 1 :
>> cond2 ? 2 :
>> cond3 ? 3 : 4;
>>
>> I'm unclear why, per my understanding the "standalone-parent" of the
>> whole ternary chain (disregarding where the point is) is the `const a
>> =` declaration.
The standalone rule just keeps going up the parse tree until it finds a node that starts on a new line. In this case, if you start form cond3, it’ll go up until reaching the teneray_expression node containing cond2. This node starts on a new line so standalone-parent stops here. So the cond3 line uses the cond2 line as the anchor, instead of the “const a” line. If you add a cond4 line, it’ll use the cond3 line as anchor.
There’re several ways to fix it. The best way is to add a new anchor to the presets that does what standalone-parent does, but additionally excludes some nodes. Something like (standalone-parent-excluding “regexp”). Then this can be used for both typescript and c/c++ (and java, etc).
>>
>> Such bug also persists in c++-ts-mode (as opposed to non-ts plain c++-
>> mode). I'm not sure if it's me misunderstanding something or not…
>
> Yuan, any comments?
Yeah we should fix this in c/c++-ts-mode too. In c/c++, the baseline-indent-rule can handle
int a = cond1 ? 1
: cond2 ? 2
: cond3 ? 3
: 4;
Which is nice, but the other case needs special case override:
int a = cond1 ? 1 :
cond2 ? 2 :
cond3 ? 3 :
cond 4: 5;
Yuan
[1] I got this error:
128 git … am --3way -- /Users/yuan/downloads/1-3.patch
Applying: typescript-ts: align ternary-chain branches (bug#78187)
error: sha1 information is lacking or useless (test/lisp/progmodes/typescript-ts-mode-resources/indent.erts).
error: could not build fake ancestor
Patch failed at 0001 typescript-ts: align ternary-chain branches (bug#78187)
hint: Use 'git am --show-current-patch=diff' to see the failed patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
This bug report was last modified 11 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.