[ci-custom] Suggest uint32_to_str/int8_to_str for integer formatting (#15970)

This commit is contained in:
J. Nick Koston
2026-04-26 07:22:34 -05:00
committed by GitHub
parent c8d4420408
commit df987a7ffb
+10 -2
View File
@@ -837,7 +837,16 @@ def lint_no_std_to_string(fname, match):
f"{highlight('std::to_string()')} (including unqualified {highlight('to_string()')}) "
f"allocates heap memory. On long-running embedded devices, repeated heap allocations "
f"fragment memory over time.\n"
f"Please use {highlight('snprintf()')} with a stack buffer instead.\n"
f"\n"
f"For plain integer formatting, prefer the dedicated helpers in helpers.h over "
f"{highlight('snprintf()')} — they avoid pulling in printf formatting code and are "
f"smaller and faster:\n"
f" int8_t: {highlight('int8_to_str(buf, val)')} (buf >= 5 bytes)\n"
f" uint8_t/uint16_t/uint32_t: {highlight('uint32_to_str(buf, val)')} (buf = UINT32_MAX_STR_SIZE; smaller types auto-widen)\n"
f"Example: {highlight('char buf[UINT32_MAX_STR_SIZE]; uint32_to_str(buf, value);')}\n"
f"For sensor values, use {highlight('value_accuracy_to_buf()')} from helpers.h.\n"
f"\n"
f"Otherwise use {highlight('snprintf()')} with a stack buffer.\n"
f"\n"
f"Buffer sizes and format specifiers (sizes include sign and null terminator):\n"
f" uint8_t: 4 chars - %u (or PRIu8)\n"
@@ -851,7 +860,6 @@ def lint_no_std_to_string(fname, match):
f" float/double: 24 chars - %.8g (15 digits + sign + decimal + e+XXX)\n"
f" 317 chars - %f (for DBL_MAX: 309 int digits + decimal + 6 frac + sign)\n"
f"\n"
f"For sensor values, use value_accuracy_to_buf() from helpers.h.\n"
f'Example: char buf[11]; snprintf(buf, sizeof(buf), "%" PRIu32, value);\n'
f"(If strictly necessary, add `{highlight('// NOLINT')}` to the end of the line)"
)