Browse Source

whitespace: more accurate initial-indent highlighting

Instead of highlighting the entire initial indent, highlight only the
problematic spaces.

In the case of an indent like ' \t \t' there may be multiple problematic
ranges, so it's easiest to emit the highlighting as we go instead of
trying rember disjoint ranges and do it all at the end.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
J. Bruce Fields 17 years ago committed by Junio C Hamano
parent
commit
ffe568859b
  1. 24
      ws.c

24
ws.c

@ -150,24 +150,32 @@ unsigned check_and_emit_line(const char *line, int len, unsigned ws_rule,
continue; continue;
if (line[i] != '\t') if (line[i] != '\t')
break; break;
if ((ws_rule & WS_SPACE_BEFORE_TAB) && written < i) if ((ws_rule & WS_SPACE_BEFORE_TAB) && written < i) {
result |= WS_SPACE_BEFORE_TAB; result |= WS_SPACE_BEFORE_TAB;
if (stream) {
fputs(ws, stream);
fwrite(line + written, i - written, 1, stream);
fputs(reset, stream);
}
} else if (stream)
fwrite(line + written, i - written, 1, stream);
if (stream)
fwrite(line + i, 1, 1, stream);
written = i + 1; written = i + 1;
} }


/* Check for indent using non-tab. */ /* Check for indent using non-tab. */
if ((ws_rule & WS_INDENT_WITH_NON_TAB) && i - written >= 8) if ((ws_rule & WS_INDENT_WITH_NON_TAB) && i - written >= 8) {
result |= WS_INDENT_WITH_NON_TAB; result |= WS_INDENT_WITH_NON_TAB;

if (stream) {
if (stream) {
/* Highlight errors in leading whitespace. */
if ((result & WS_SPACE_BEFORE_TAB) ||
(result & WS_INDENT_WITH_NON_TAB)) {
fputs(ws, stream); fputs(ws, stream);
fwrite(line, written, 1, stream); fwrite(line + written, i - written, 1, stream);
fputs(reset, stream); fputs(reset, stream);
} }
written = i;
}


if (stream) {
/* Now the rest of the line starts at written. /* Now the rest of the line starts at written.
* The non-highlighted part ends at trailing_whitespace. */ * The non-highlighted part ends at trailing_whitespace. */
if (trailing_whitespace == -1) if (trailing_whitespace == -1)

Loading…
Cancel
Save