threads / patch / 35782

patchuserdiff: update Ada patterns

Subject: [PATCH] userdiff: update Ada patterns

## tl;dr

8 messages between Feb 2, 2014 and Feb 5, 2014. Diffs are folded; open one to read it.

replies: 7people: 3as markdown or json

Adrian Johnson· Feb 2, 2014, 10:51 UTC · lore
- Allow extra space in "is new" and "is separate"
- Fix bug in word regex for numbers
Signed-off-by: Adrian Johnson <ajohnson@redneon.com>
---
 t/t4034/ada/expect | 2 +-
 userdiff.c         | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)
Show changes to 2 files +3 −3

t/t4034/ada/expect, userdiff.c

diff --git a/t/t4034/ada/expect b/t/t4034/ada/expect
index be2376e..a682d28 100644
--- a/t/t4034/ada/expect
+++ b/t/t4034/ada/expect
@@ -4,7 +4,7 @@
 <BOLD>+++ b/post<RESET>
 <CYAN>@@ -1,13 +1,13 @@<RESET>
 Ada.Text_IO.Put_Line("Hello World<RED>!<RESET><GREEN>?<RESET>");
-1 1e<RED>-<RESET>10 16#FE12#E2 3.141_592 '<RED>x<RESET><GREEN>y<RESET>'
+1 <RED>1e-10<RESET><GREEN>1e10<RESET> 16#FE12#E2 3.141_592 '<RED>x<RESET><GREEN>y<RESET>'
 <RED>a<RESET><GREEN>x<RESET>+<RED>b a<RESET><GREEN>y x<RESET>-<RED>b<RESET>
 <RED>a<RESET><GREEN>y<RESET>
 <GREEN>x<RESET>*<RED>b a<RESET><GREEN>y x<RESET>/<RED>b<RESET>
diff --git a/userdiff.c b/userdiff.c
index ea43a03..e8915bf 100644
--- a/userdiff.c
+++ b/userdiff.c
@@ -15,13 +15,13 @@ static int drivers_alloc;
 	  word_regex "|[^[:space:]]|[\xc0-\xff][\x80-\xbf]+" }
 static struct userdiff_driver builtin_drivers[] = {
 IPATTERN("ada",
-	 "!^(.*[ \t])?(is new|renames|is separate)([ \t].*)?$\n"
+	 "!^(.*[ \t])?(is[ \t]+new|renames|is[ \t]+separate)([ \t].*)?$\n"
 	 "!^[ \t]*with[ \t].*$\n"
 	 "^[ \t]*((procedure|function)[ \t]+.*)$\n"
 	 "^[ \t]*((package|protected|task)[ \t]+.*)$",
 	 /* -- */
 	 "[a-zA-Z][a-zA-Z0-9_]*"
-	 "|[0-9][-+0-9#_.eE]"
+	 "|[-+0-9#_.eE]+"
 	 "|=>|\\.\\.|\\*\\*|:=|/=|>=|<=|<<|>>|<>"),
 IPATTERN("fortran",
 	 "!^([C*]|[ \t]*!)\n"
-- 
1.8.3.2
Jeff King· Feb 2, 2014, 23:35 UTC · re: Adrian Johnson · lore

Re: [PATCH] userdiff: update Ada patterns

On Sun, Feb 02, 2014 at 09:21:56PM +1030, Adrian Johnson wrote:
> - Allow extra space in "is new" and "is separate"
> [...]
> -	 "!^(.*[ \t])?(is new|renames|is separate)([ \t].*)?$\n"
> +	 "!^(.*[ \t])?(is[ \t]+new|renames|is[ \t]+separate)([ \t].*)?$\n"

I do not know anything about Ada syntax, but this change looks obviously sensible.

> - Fix bug in word regex for numbers
> -	 "|[0-9][-+0-9#_.eE]"
> +	 "|[-+0-9#_.eE]+"
This makes "E" or "_" a number. Is that right?

I think the intent of the original was "starts with a digit, and then has one or more of these other things after it". You do not describe the bug, but I guess it would be that it does not match obvious things like "5". Should it be "zero or more" instead, like:

  [0-9][-+0-9#_.eE]*
? Also, should -/+ be hoisted to the front?
  [-+]?[0-9][0-9#_.eE]*
Again, I am just guessing, as I am not familiar enough with Ada.
-Peff
Adrian Johnson· Feb 3, 2014, 11:30 UTC · re: Jeff King · lore

Re: [PATCH] userdiff: update Ada patterns

On 03/02/14 10:05, Jeff King wrote:
Show 13 quoted lines
> On Sun, Feb 02, 2014 at 09:21:56PM +1030, Adrian Johnson wrote:
>> - Fix bug in word regex for numbers
>> -	 "|[0-9][-+0-9#_.eE]"
>> +	 "|[-+0-9#_.eE]+"
> 
> This makes "E" or "_" a number. Is that right?
> 
> I think the intent of the original was "starts with a digit, and then
> has one or more of these other things after it". You do not describe the
> bug, but I guess it would be that it does not match obvious things like
> "5". Should it be "zero or more" instead, like:
> 
>   [0-9][-+0-9#_.eE]*
Yes, the original was missing the '*' at the end. 

I changed it to be similar to the number regexes used by the other builtin patterns which are of the form '[-+0-9#_.eE]+'.

> 
> ? Also, should -/+ be hoisted to the front?
> 
>   [-+]?[0-9][0-9#_.eE]*

The other builtins don't do this. But it is probably better to have [-+]?[0-9] at the front.

> Again, I am just guessing, as I am not familiar enough with Ada.
Ada numbers have the form:
- integers and reals eg 123, 1.23, 1e-2 ('.' can not be first)
- a '_' may be used between digits to improve readability eg 123_456
- base n (2 <= n <= 16) is of the form n#digits# eg 16#FFEF#
- base n numbers can include a radix point and/or an exponent
  eg 16#FF12.8#e-2
- Ada is case insensitive

After having another look I noticed it was missing the hex characters. The new number regex I am proposing is:

[-+]?[0-9][0-9#_.aAbBcCdDeEfF]*([eE][+-]?[0-9_]+)?

I kept exponents containing a +/- sign separate from the digits to prevent things like '1+2' from matching. I'll send an updated patch.

Show 7 quoted lines
> 
> -Peff
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
Adrian Johnson· Feb 3, 2014, 11:33 UTC · re: Jeff King · lore

[PATCH v2] userdiff: update Ada patterns

- Allow extra space in "is new" and "is separate"
- Fix bug in word regex for numbers
Signed-off-by: Adrian Johnson <ajohnson@redneon.com>
---
 t/t4034/ada/expect | 2 +-
 userdiff.c         | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)
Show changes to 2 files +3 −3

t/t4034/ada/expect, userdiff.c

diff --git a/t/t4034/ada/expect b/t/t4034/ada/expect
index be2376e..a682d28 100644
--- a/t/t4034/ada/expect
+++ b/t/t4034/ada/expect
@@ -4,7 +4,7 @@
 <BOLD>+++ b/post<RESET>
 <CYAN>@@ -1,13 +1,13 @@<RESET>
 Ada.Text_IO.Put_Line("Hello World<RED>!<RESET><GREEN>?<RESET>");
-1 1e<RED>-<RESET>10 16#FE12#E2 3.141_592 '<RED>x<RESET><GREEN>y<RESET>'
+1 <RED>1e-10<RESET><GREEN>1e10<RESET> 16#FE12#E2 3.141_592 '<RED>x<RESET><GREEN>y<RESET>'
 <RED>a<RESET><GREEN>x<RESET>+<RED>b a<RESET><GREEN>y x<RESET>-<RED>b<RESET>
 <RED>a<RESET><GREEN>y<RESET>
 <GREEN>x<RESET>*<RED>b a<RESET><GREEN>y x<RESET>/<RED>b<RESET>
diff --git a/userdiff.c b/userdiff.c
index ea43a03..10b61ec 100644
--- a/userdiff.c
+++ b/userdiff.c
@@ -15,13 +15,13 @@ static int drivers_alloc;
 	  word_regex "|[^[:space:]]|[\xc0-\xff][\x80-\xbf]+" }
 static struct userdiff_driver builtin_drivers[] = {
 IPATTERN("ada",
-	 "!^(.*[ \t])?(is new|renames|is separate)([ \t].*)?$\n"
+	 "!^(.*[ \t])?(is[ \t]+new|renames|is[ \t]+separate)([ \t].*)?$\n"
 	 "!^[ \t]*with[ \t].*$\n"
 	 "^[ \t]*((procedure|function)[ \t]+.*)$\n"
 	 "^[ \t]*((package|protected|task)[ \t]+.*)$",
 	 /* -- */
 	 "[a-zA-Z][a-zA-Z0-9_]*"
-	 "|[0-9][-+0-9#_.eE]"
+	 "|[-+]?[0-9][0-9#_.aAbBcCdDeEfF]*([eE][+-]?[0-9_]+)?"
 	 "|=>|\\.\\.|\\*\\*|:=|/=|>=|<=|<<|>>|<>"),
 IPATTERN("fortran",
 	 "!^([C*]|[ \t]*!)\n"
-- 
1.8.3.2
Junio C Hamano· Feb 3, 2014, 20:00 UTC · re: Adrian Johnson · lore

Re: [PATCH v2] userdiff: update Ada patterns

Adrian Johnson <ajohnson@redneon.com> writes:
Show 39 quoted lines
> - Allow extra space in "is new" and "is separate"
> - Fix bug in word regex for numbers
>
> Signed-off-by: Adrian Johnson <ajohnson@redneon.com>
> ---
>  t/t4034/ada/expect | 2 +-
>  userdiff.c         | 4 ++--
>  2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/t/t4034/ada/expect b/t/t4034/ada/expect
> index be2376e..a682d28 100644
> --- a/t/t4034/ada/expect
> +++ b/t/t4034/ada/expect
> @@ -4,7 +4,7 @@
>  <BOLD>+++ b/post<RESET>
>  <CYAN>@@ -1,13 +1,13 @@<RESET>
>  Ada.Text_IO.Put_Line("Hello World<RED>!<RESET><GREEN>?<RESET>");
> -1 1e<RED>-<RESET>10 16#FE12#E2 3.141_592 '<RED>x<RESET><GREEN>y<RESET>'
> +1 <RED>1e-10<RESET><GREEN>1e10<RESET> 16#FE12#E2 3.141_592 '<RED>x<RESET><GREEN>y<RESET>'
>  <RED>a<RESET><GREEN>x<RESET>+<RED>b a<RESET><GREEN>y x<RESET>-<RED>b<RESET>
>  <RED>a<RESET><GREEN>y<RESET>
>  <GREEN>x<RESET>*<RED>b a<RESET><GREEN>y x<RESET>/<RED>b<RESET>
> diff --git a/userdiff.c b/userdiff.c
> index ea43a03..10b61ec 100644
> --- a/userdiff.c
> +++ b/userdiff.c
> @@ -15,13 +15,13 @@ static int drivers_alloc;
>  	  word_regex "|[^[:space:]]|[\xc0-\xff][\x80-\xbf]+" }
>  static struct userdiff_driver builtin_drivers[] = {
>  IPATTERN("ada",
> -	 "!^(.*[ \t])?(is new|renames|is separate)([ \t].*)?$\n"
> +	 "!^(.*[ \t])?(is[ \t]+new|renames|is[ \t]+separate)([ \t].*)?$\n"
>  	 "!^[ \t]*with[ \t].*$\n"
>  	 "^[ \t]*((procedure|function)[ \t]+.*)$\n"
>  	 "^[ \t]*((package|protected|task)[ \t]+.*)$",
>  	 /* -- */
>  	 "[a-zA-Z][a-zA-Z0-9_]*"
> -	 "|[0-9][-+0-9#_.eE]"
> +	 "|[-+]?[0-9][0-9#_.aAbBcCdDeEfF]*([eE][+-]?[0-9_]+)?"

This would match a lot wider than what I read you said you wanted to match in your previous message. Does "-04##4_3_2Ee-9" count as a number, for example, or can we just ignore such syntactically incorrect sequence?

>  	 "|=>|\\.\\.|\\*\\*|:=|/=|>=|<=|<<|>>|<>"),
>  IPATTERN("fortran",
>  	 "!^([C*]|[ \t]*!)\n"
Adrian Johnson· Feb 5, 2014, 10:44 UTC · re: Junio C Hamano · lore

Re: [PATCH v2] userdiff: update Ada patterns

On 04/02/14 06:30, Junio C Hamano wrote:
Show 46 quoted lines
> Adrian Johnson <ajohnson@redneon.com> writes:
> 
>> - Allow extra space in "is new" and "is separate"
>> - Fix bug in word regex for numbers
>>
>> Signed-off-by: Adrian Johnson <ajohnson@redneon.com>
>> ---
>>  t/t4034/ada/expect | 2 +-
>>  userdiff.c         | 4 ++--
>>  2 files changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/t/t4034/ada/expect b/t/t4034/ada/expect
>> index be2376e..a682d28 100644
>> --- a/t/t4034/ada/expect
>> +++ b/t/t4034/ada/expect
>> @@ -4,7 +4,7 @@
>>  <BOLD>+++ b/post<RESET>
>>  <CYAN>@@ -1,13 +1,13 @@<RESET>
>>  Ada.Text_IO.Put_Line("Hello World<RED>!<RESET><GREEN>?<RESET>");
>> -1 1e<RED>-<RESET>10 16#FE12#E2 3.141_592 '<RED>x<RESET><GREEN>y<RESET>'
>> +1 <RED>1e-10<RESET><GREEN>1e10<RESET> 16#FE12#E2 3.141_592 '<RED>x<RESET><GREEN>y<RESET>'
>>  <RED>a<RESET><GREEN>x<RESET>+<RED>b a<RESET><GREEN>y x<RESET>-<RED>b<RESET>
>>  <RED>a<RESET><GREEN>y<RESET>
>>  <GREEN>x<RESET>*<RED>b a<RESET><GREEN>y x<RESET>/<RED>b<RESET>
>> diff --git a/userdiff.c b/userdiff.c
>> index ea43a03..10b61ec 100644
>> --- a/userdiff.c
>> +++ b/userdiff.c
>> @@ -15,13 +15,13 @@ static int drivers_alloc;
>>  	  word_regex "|[^[:space:]]|[\xc0-\xff][\x80-\xbf]+" }
>>  static struct userdiff_driver builtin_drivers[] = {
>>  IPATTERN("ada",
>> -	 "!^(.*[ \t])?(is new|renames|is separate)([ \t].*)?$\n"
>> +	 "!^(.*[ \t])?(is[ \t]+new|renames|is[ \t]+separate)([ \t].*)?$\n"
>>  	 "!^[ \t]*with[ \t].*$\n"
>>  	 "^[ \t]*((procedure|function)[ \t]+.*)$\n"
>>  	 "^[ \t]*((package|protected|task)[ \t]+.*)$",
>>  	 /* -- */
>>  	 "[a-zA-Z][a-zA-Z0-9_]*"
>> -	 "|[0-9][-+0-9#_.eE]"
>> +	 "|[-+]?[0-9][0-9#_.aAbBcCdDeEfF]*([eE][+-]?[0-9_]+)?"
> 
> This would match a lot wider than what I read you said you wanted to
> match in your previous message.  Does "-04##4_3_2Ee-9" count as a
> number, for example, or can we just ignore such syntactically
> incorrect sequence?

Maybe I am misunderstanding the purpose of the word diff regexes. I thought the purpose of the word regex is to split lines into words, not determine what is syntactically correct.

For example decimal number regex for pascal is: [-+0-9.e]+ and for cpp: [-+0-9.e]+[fFlL]?

These will obviously match stuff that is not a number.
Show 9 quoted lines
> 
>>  	 "|=>|\\.\\.|\\*\\*|:=|/=|>=|<=|<<|>>|<>"),
>>  IPATTERN("fortran",
>>  	 "!^([C*]|[ \t]*!)\n"
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
Junio C Hamano· Feb 5, 2014, 17:17 UTC · re: Adrian Johnson · lore

Re: [PATCH v2] userdiff: update Ada patterns

Adrian Johnson <ajohnson@redneon.com> writes:
Show 11 quoted lines
>>> -	 "|[0-9][-+0-9#_.eE]"
>>> +	 "|[-+]?[0-9][0-9#_.aAbBcCdDeEfF]*([eE][+-]?[0-9_]+)?"
>> 
>> This would match a lot wider than what I read you said you wanted to
>> match in your previous message.  Does "-04##4_3_2Ee-9" count as a
>> number, for example, or can we just ignore such syntactically
>> incorrect sequence?
>
> Maybe I am misunderstanding the purpose of the word diff regexes. I
> thought the purpose of the word regex is to split lines into words, not
> determine what is syntactically correct.

I agree that the purpose is former---So you could have just said "the latter" ;-).

Any other nitpick, anybody?  Otherwise I'll queue this version.
Jeff King· Feb 5, 2014, 17:28 UTC · re: Junio C Hamano · lore

Re: [PATCH v2] userdiff: update Ada patterns

On Wed, Feb 05, 2014 at 09:17:47AM -0800, Junio C Hamano wrote:
Show 18 quoted lines
> Adrian Johnson <ajohnson@redneon.com> writes:
> 
> >>> -	 "|[0-9][-+0-9#_.eE]"
> >>> +	 "|[-+]?[0-9][0-9#_.aAbBcCdDeEfF]*([eE][+-]?[0-9_]+)?"
> >> 
> >> This would match a lot wider than what I read you said you wanted to
> >> match in your previous message.  Does "-04##4_3_2Ee-9" count as a
> >> number, for example, or can we just ignore such syntactically
> >> incorrect sequence?
> >
> > Maybe I am misunderstanding the purpose of the word diff regexes. I
> > thought the purpose of the word regex is to split lines into words, not
> > determine what is syntactically correct.
> 
> I agree that the purpose is former---So you could have just said
> "the latter" ;-).
> 
> Any other nitpick, anybody?  Otherwise I'll queue this version.

No nitpick here, I had the same thought as Adrian while reading the thread (and if somebody comes up with a real case where the output looks bad, we can iterate on it).

-Peff

← back to recent threads