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--