diff --git a/src/location.c b/src/location.c index 4e2bfd9b..b0d9f015 100644 --- a/src/location.c +++ b/src/location.c @@ -322,6 +322,10 @@ location_caret (location loc, const char *style, FILE *out) /* If we skip the initial part, we insert "..." before. */ if (skip) width -= 3; + /* If the end of line does not fit, we also need to truncate the + end, and leave "..." there. */ + if (width < line_len - skip) + width -= 3; /* Go back to the beginning of line. */ fseek (caret_info.file, caret_info.offset, SEEK_SET); @@ -374,7 +378,10 @@ location_caret (location loc, const char *style, FILE *out) opened = false; } if (width < caret_info.pos.column - skip) - break; + { + fprintf (out, "..."); + break; + } } putc ('\n', out); } diff --git a/tests/diagnostics.at b/tests/diagnostics.at index dc041e6a..5eba7bad 100644 --- a/tests/diagnostics.at +++ b/tests/diagnostics.at @@ -350,22 +350,22 @@ exp: ABCDEFGHIJKLMNOPQRSTUVWXYZ ]], [0], [[input.y:9.36-61: warning: symbol ABCDEFGHIJKLMNOPQRSTUVWXYZ redeclared [-Wother] - 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHI + 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEF... | ^~~~~~~~~~~~~~~~~~~~~~~~~~ input.y:9.8-33: previous declaration - 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHI + 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEF... | ^~~~~~~~~~~~~~~~~~~~~~~~~~ input.y:9.64-89: warning: symbol ABCDEFGHIJKLMNOPQRSTUVWXYZ redeclared [-Wother] - 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHI - | ^~~~~~~~~ + 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEF... + | ^~~~~~ input.y:9.8-33: previous declaration - 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHI + 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEF... | ^~~~~~~~~~~~~~~~~~~~~~~~~~ input.y:9.92-117: warning: symbol ABCDEFGHIJKLMNOPQRSTUVWXYZ redeclared [-Wother] 9 | ...TUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ | ... ^~~~~~~~~~~~~~~~~~~~~~~~~~ input.y:9.8-33: previous declaration - 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHI + 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEF... | ^~~~~~~~~~~~~~~~~~~~~~~~~~ ]], [[COLUMNS=80]]) @@ -377,22 +377,22 @@ exp: ABCDEFGHIJKLMNOPQRSTUVWXYZ ]], [0], [[input.y:9.36-61: warning: symbol ABCDEFGHIJKLMNOPQRSTUVWXYZ redeclared [-Wother] - 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQ - | ^~~~~~~~~~~~~~~~~ + 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMN... + | ^~~~~~~~~~~~~~ input.y:9.8-33: previous declaration - 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQ + 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMN... | ^~~~~~~~~~~~~~~~~~~~~~~~~~ input.y:9.64-89: warning: symbol ABCDEFGHIJKLMNOPQRSTUVWXYZ redeclared [-Wother] - 9 | ...TUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKL + 9 | ...TUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHI... | ... ^~~~~~~~~~~~~~~~~~~~~~~~~~ input.y:9.8-33: previous declaration - 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQ + 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMN... | ^~~~~~~~~~~~~~~~~~~~~~~~~~ input.y:9.92-117: warning: symbol ABCDEFGHIJKLMNOPQRSTUVWXYZ redeclared [-Wother] 9 | ...TUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ | ... ^~~~~~~~~~~~~~~~~~~~~~~~~~ input.y:9.8-33: previous declaration - 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQ + 9 | %token ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMN... | ^~~~~~~~~~~~~~~~~~~~~~~~~~ ]], [[COLUMNS=60]])