Skip to content

Commit 386076e

Browse files
j6tgitster
authored andcommitted
userdiff-cpp: back out the digit-separators in numbers
The implementation of digit-separating single-quotes introduced a note-worthy regression: the change of a character literal with a digit would splice the digit and the closing single-quote. For example, the change from 'a' to '2' is now tokenized as '[-a'-]{+2'+} instead of '[-a-]{+2+}'. The options to fix the regression are: - Tighten the regular expression such that the single-quote can only occur between digits (that would match the official syntax). - Remove support for digit separators. I chose to remove support, because - I have not seen a lot of code make use of digit separators. - If code does use digit separators, then the numbers are typically long. If a change in one of the segments occurs, it is actually better visible if only that segment is highlighted as the word that changed instead of the whole long number. This choice does introduce another minor regression, though, which is highlighted in the test case: when a change occurs in the second or later segment of a hexadecimal number where the segment begins with a digit, but also has letters, the segment is mistaken as consisting of a number and an identifier. I can live with that. Signed-off-by: Johannes Sixt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent c4fdba3 commit 386076e

File tree

4 files changed

+18
-18
lines changed

4 files changed

+18
-18
lines changed

t/t4034/cpp/expect

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
<BOLD>diff --git a/pre b/post<RESET>
2-
<BOLD>index 144cd98..64e78af 100644<RESET>
2+
<BOLD>index a1a09b7..f1b6f3c 100644<RESET>
33
<BOLD>--- a/pre<RESET>
44
<BOLD>+++ b/post<RESET>
55
<CYAN>@@ -1,30 +1,30 @@<RESET>
66
Foo() : x(0<RED>&&1<RESET><GREEN>&42<RESET>) { <RED>foo0<RESET><GREEN>bar<RESET>(x.<RED>find<RESET><GREEN>Find<RESET>); }
77
cout<<"Hello World<RED>!<RESET><GREEN>?<RESET>\n"<<endl;
8-
<GREEN>(<RESET>1 <RED>-<RESET><GREEN>+<RESET>1e10 0xabcdef<GREEN>)<RESET> '<RED>x<RESET><GREEN>.<RESET>'
8+
<GREEN>(<RESET>1 <RED>-<RESET><GREEN>+<RESET>1e10 0xabcdef<GREEN>)<RESET> '<RED>x<RESET><GREEN>2<RESET>'
99
// long double<RESET>
10-
<RED>3.141'592'653e-10l<RESET><GREEN>3.141'592'654e+10l<RESET>
10+
<RED>3.141592653e-10l<RESET><GREEN>3.141592654e+10l<RESET>
1111
// float<RESET>
1212
<RED>120E5f<RESET><GREEN>120E6f<RESET>
1313
// hex<RESET>
14-
<RED>0xdead'beaf<RESET><GREEN>0xdead'Beaf<RESET>+<RED>8ULL<RESET><GREEN>7ULL<RESET>
14+
<RED>0xdead<RESET><GREEN>0xdeaf<RESET>'1<RED>eaF<RESET><GREEN>eaf<RESET>+<RED>8ULL<RESET><GREEN>7ULL<RESET>
1515
// octal<RESET>
16-
<RED>0123'4567<RESET><GREEN>0123'4560<RESET>
16+
<RED>01234567<RESET><GREEN>01234560<RESET>
1717
// binary<RESET>
18-
<RED>0b10'00<RESET><GREEN>0b11'00<RESET>+e1
18+
<RED>0b1000<RESET><GREEN>0b1100<RESET>+e1
1919
// expression<RESET>
2020
1.5-e+<RED>2<RESET><GREEN>3<RESET>+f
2121
// another one<RESET>

t/t4034/cpp/post

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
Foo() : x(0&42) { bar(x.Find); }
22
cout<<"Hello World?\n"<<endl;
3-
(1 +1e10 0xabcdef) '.'
3+
(1 +1e10 0xabcdef) '2'
44
// long double
5-
3.141'592'654e+10l
5+
3.141592654e+10l
66
// float
77
120E6f
88
// hex
9-
0xdead'Beaf+7ULL
9+
0xdeaf'1eaf+7ULL
1010
// octal
11-
0123'4560
11+
01234560
1212
// binary
13-
0b11'00+e1
13+
0b1100+e1
1414
// expression
1515
1.5-e+3+f
1616
// another one

t/t4034/cpp/pre

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ Foo():x(0&&1){ foo0( x.find); }
22
cout<<"Hello World!\n"<<endl;
33
1 -1e10 0xabcdef 'x'
44
// long double
5-
3.141'592'653e-10l
5+
3.141592653e-10l
66
// float
77
120E5f
88
// hex
9-
0xdead'beaf+8ULL
9+
0xdead'1eaF+8ULL
1010
// octal
11-
0123'4567
11+
01234567
1212
// binary
13-
0b10'00+e1
13+
0b1000+e1
1414
// expression
1515
1.5-e+2+f
1616
// another one

userdiff.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,11 @@ PATTERNS("cpp",
6767
/* identifiers and keywords */
6868
"[a-zA-Z_][a-zA-Z0-9_]*"
6969
/* decimal and octal integers as well as floatingpoint numbers */
70-
"|[0-9][0-9.']*([Ee][-+]?[0-9]+)?[fFlLuU]*"
70+
"|[0-9][0-9.]*([Ee][-+]?[0-9]+)?[fFlLuU]*"
7171
/* hexadecimal and binary integers */
72-
"|0[xXbB][0-9a-fA-F']+[lLuU]*"
72+
"|0[xXbB][0-9a-fA-F]+[lLuU]*"
7373
/* floatingpoint numbers that begin with a decimal point */
74-
"|\\.[0-9][0-9']*([Ee][-+]?[0-9]+)?[fFlL]?"
74+
"|\\.[0-9][0-9]*([Ee][-+]?[0-9]+)?[fFlL]?"
7575
"|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->\\*?|\\.\\*|<=>"),
7676
PATTERNS("csharp",
7777
/* Keywords */

0 commit comments

Comments
 (0)