bug#81533: c-ts-mode: Improved block comment indentation

Björn A. Lindqvist <[email protected]> Mon, 3 Aug 2026 23:17:03 +0200
Newsgroups gmane.emacs.bugs
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------4fgEZyvjaE937E0RNlsz5cLb
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit

Hello Stefan!

Den sön 2 aug. 2026 kl 20:02 skrev Stefan Monnier 
<[email protected]>:
 > My comment was just meant to state the direction in which I think we
 > should move to better integrate with the rest of the infrastructure.

I agree, but leave that job for you guys. :) I just want to scratch my
own itch: block comment indentation in c-ts-mode.

 > >> The rule (1) sounds right, but rules (2) and (3) should simply refrain
 > >> from modifying the line and return `noindent`.
 > > Why indent lines prefixed with "*" be indented but not other lines?
 >
 > Yeah, it's not great, it's a heuristic that will sometimes fail,

If indenting is right 99.5% of the time I think we can let the 0.5%
suffer. The needs of the many outweigh the needs of the few.

 > > You could make the function public so that other modes could add it to
 > > their default rules:
 > >
 > > ((parent-is "comment") parent c-ts-mode-common-block-comment-offset)
 >
 > Indeed.  But then its name shouldn't start with "c-ts-", it shouldn't
 > hard code "*", and it should live in another file.
 > That's a way to "handle [it] once for all tree-sitter modes".

The previous c-ts-mode block comment indentation code called three
functions: c-ts-common-looking-at-star,
c-ts-common-comment-start-after-first-star, and
c-ts-common-comment-2nd-line-matcher. Hard coding "star" in function
names is clearly worse than hard coding the "*" character so I belive
my patch is -- if not a step in the right direction -- at least not a
step in the wrong direction. :)

Conceivably, other ts progmodes, such as php-ts-mode, that call those
three functions could call c-ts-mode-common-block-comment-offset
instead. But I didn't change them because I didn't want to create an
uber long patch and because I'm not 100% familiar with those languages
conventions for block comments.

 > Side note about your patch: `line-number-at-pos` takes time proportional
 > to the size of the buffer (well, proportional to (point), actually, but
 > you get the ... point 🙂), so calling it twice just to check if two
 > buffer positions are on consecutive lines is very inefficient.
 > Better use things like

Thanks! Attached is a new patch with those issues fixed.


--
mvh/best regards Björn Lindqvist
--------------4fgEZyvjaE937E0RNlsz5cLb
Content-Type: text/x-patch; charset=UTF-8;
 name="0001-c-ts-mode-Improved-block-comment-indentation.patch"
Content-Disposition: attachment;
 filename="0001-c-ts-mode-Improved-block-comment-indentation.patch"
Content-Transfer-Encoding: base64

RnJvbSA1YTlkZDgxM2UyM2YwZjgxYTgyZDRlNWFmZDMzYzFmMjM3MjdkNjJmIE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/Qmo9QzM9QjZybj0yMExpbmRxdmlz
dD89IDxiam91cm5lQGdtYWlsLmNvbT4KRGF0ZTogU3VuLCAyIEF1ZyAyMDI2IDAyOjE4OjIy
ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gYy10cy1tb2RlOiBJbXByb3ZlZCBibG9jayBjb21t
ZW50IGluZGVudGF0aW9uCgoxKSBsaW5lcyBiZWdpbm5pbmcgd2l0aCAiKiIgYXJlIGFsaWdu
ZWQgdG8gdGhlIGZpcnN0ICIqIgoyKSBsaW5lcyBmb2xsb3dpbmcgdGhlIGZpcnN0IG9yIGJs
YW5rIGxpbmVzIGFyZSBpbmRlbnRlZCB0aHJlZSBzcGFjZXMKMykgb3RoZXIgbGluZXMgYXJl
IGFsaWduZWQgdG8gdGhlIHByZXZpb3VzIGxpbmUKCiogbGlzcC9wcm9nbW9kZXMvYy10cy1t
b2RlLmVsIChjLXRzLW1vZGUtLXNpbXBsZS1pbmRlbnQtcnVsZXMpOiBJbXByb3ZlZAogIGJs
b2NrIGNvbW1lbnQgaW5kZW50YXRpb24uCi0tLQogbGlzcC9wcm9nbW9kZXMvYy10cy1tb2Rl
LmVsIHwgMjggKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs
IDE5IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGlzcC9w
cm9nbW9kZXMvYy10cy1tb2RlLmVsIGIvbGlzcC9wcm9nbW9kZXMvYy10cy1tb2RlLmVsCmlu
ZGV4IDVmMDY0NzE2YTg5Li43YzI4MWMxZTUwOCAxMDA2NDQKLS0tIGEvbGlzcC9wcm9nbW9k
ZXMvYy10cy1tb2RlLmVsCisrKyBiL2xpc3AvcHJvZ21vZGVzL2MtdHMtbW9kZS5lbApAQCAt
NDczLDYgKzQ3MywyNCBAQCBjLXRzLW1vZGUtLWVtYWNzLW1hY3JvLXJ1bGVzCiAgICAgKGNv
bnMgKHRyZWVzaXQtbm9kZS1zdGFydCBwYXJlbnQpCiAgICAgICAgICAgYy10cy1pbmRlbnQt
b2Zmc2V0KSkpKQogCisoZGVmdW4gYy10cy1tb2RlLS1ibG9jay1jb21tZW50LW9mZnNldCAo
X24gcGFyZW50IGJvbCAmcmVzdCBfKQorICAiSW5kZW50YXRpb24gb2Zmc2V0IGZvciBsaW5l
cyBpbiBibG9jayBjb21tZW50cy4KKworT25lIHNwYWNlIGlmIGxpbmUgc3RhcnRzIHdpdGgg
XCIqXCIsIHRocmVlIGlmIHRoZSBwcmV2aW91cyBsaW5lIGlzIGJsYW5rCitvciB0aGUgZmly
c3QgbGluZSBvZiB0aGUgY29tbWVudCwgYW5kIG90aGVyd2lzZSBzYW1lIGFzIHByZXZpb3Vz
IGxpbmUuIgorICAoc2F2ZS1leGN1cnNpb24KKyAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCisg
ICAgKGxldCogKChjLXBvaW50ICh0cmVlc2l0LW5vZGUtc3RhcnQgcGFyZW50KSkKKwkgICAo
c3RhcnJlZD8gKGxvb2tpbmctYXQtcCAocnggKCogYmxhbmspICIqIikpKQorCSAgIChmaXJz
dC1vci1zZWNvbmQ/ICg8PSAobGluZS1iZWdpbm5pbmctcG9zaXRpb24gMCkgYy1wb2ludCkp
KQorICAgICAgKGZvcndhcmQtbGluZSAtMSkKKyAgICAgIChsZXQgKChwcmV2LWluZGVudCAo
Y3VycmVudC1pbmRlbnRhdGlvbikpKQorICAgICAgICAoY29uZCAoc3RhcnJlZD8gMSkKKyAg
ICAgICAgICAgICAgKChvciBmaXJzdC1vci1zZWNvbmQ/ICg9IHByZXYtaW5kZW50IDApKSAz
KQorICAgICAgICAgICAgICAodCAoLSBwcmV2LWluZGVudCAocHJvZ24gKGdvdG8tY2hhciBj
LXBvaW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJl
bnQtY29sdW1uKSkpKSkpKSkpCisKKwogKGRlZnVuIGMtdHMtbW9kZS0tc2ltcGxlLWluZGVu
dC1ydWxlcyAobW9kZSBzdHlsZSkKICAgIlJldHVybiB0aGUgaW5kZW50IHJ1bGVzIGZvciBN
T0RFIGFuZCBTVFlMRS4KIApAQCAtNTEzLDE1ICs1MzEsNyBAQCBjLXRzLW1vZGUtLXNpbXBs
ZS1pbmRlbnQtcnVsZXMKICAgICAgICAgICAgOzsgKChtYXRjaCBuaWwgImZ1bmN0aW9uX2Rl
Y2xhcmF0b3IiICJwYXJhbWV0ZXJzIikgcGFyZW50IDApCiAgICAgICAgICAgIDs7ICgocGFy
ZW50LWlzICJ0ZW1wbGF0ZV9kZWNsYXJhdGlvbiIpIHBhcmVudCAwKQogCi0gICAgICAgICAg
IDs7IGBjLXRzLWNvbW1vbi1sb29raW5nLWF0LXN0YXInIGhhcyB0byBjb21lIGJlZm9yZQot
ICAgICAgICAgICA7OyBgYy10cy1jb21tb24tY29tbWVudC0ybmQtbGluZS1tYXRjaGVyJy4K
LSAgICAgICAgICAgOzsgRklYTUU6IGNvbnNvbGlkYXRlIGludG8gYSBzaW5nbGUgcnVsZS4K
LSAgICAgICAgICAgKChhbmQgKHBhcmVudC1pcyAiY29tbWVudCIpIGMtdHMtY29tbW9uLWxv
b2tpbmctYXQtc3RhcikKLSAgICAgICAgICAgIGMtdHMtY29tbW9uLWNvbW1lbnQtc3RhcnQt
YWZ0ZXItZmlyc3Qtc3RhciAtMSkKLSAgICAgICAgICAgKGMtdHMtY29tbW9uLWNvbW1lbnQt
Mm5kLWxpbmUtbWF0Y2hlcgotICAgICAgICAgICAgYy10cy1jb21tb24tY29tbWVudC0ybmQt
bGluZS1hbmNob3IKLSAgICAgICAgICAgIDEpCi0gICAgICAgICAgICgocGFyZW50LWlzICJj
b21tZW50IikgcHJldi1hZGFwdGl2ZS1wcmVmaXggMCkKKyAgICAgICAgICAgKChwYXJlbnQt
aXMgImNvbW1lbnQiKSBwYXJlbnQgYy10cy1tb2RlLS1ibG9jay1jb21tZW50LW9mZnNldCkK
IAogICAgICAgICAgICA7OyBQcmVwcm9jIGRpcmVjdGl2ZXMKICAgICAgICAgICAgKChub2Rl
LWlzICJwcmVwcm9jX2FyZyIpIG5vLWluZGVudCkKLS0gCjIuNTUuMAoK

--------------4fgEZyvjaE937E0RNlsz5cLb--