diff mbox series

userdiff: expand detected chunk headers for css

Message ID pull.866.git.git.1602062726316.gitgitgadget@gmail.com (mailing list archive)
State Superseded
Headers show
Series userdiff: expand detected chunk headers for css | expand

Commit Message

Linus Arver via GitGitGadget Oct. 7, 2020, 9:25 a.m. UTC
From: Sohom <sohom.datta@learner.manipal.edu>

Added support for classes, ids, :root selectors
as well as @-based statements (ex: @page, @media
and @keyframes ).

Also added tests for the same.

Signed-off-by: Sohom Datta <sohom.datta@learner.manipal.edu>
---
    userdiff: Expand detected chunk headers for css
    
    Currently, the regex used for the CSS builtin diff driver in git is only
    able to show chunk headers for lines that start with a number, a letter
    or an underscore.
    
    However, the regex fails to detect classes (starts with a .), ids
    (starts with a #), :root and attribute-value based selectors (for
    example [class*="col-"]), as well as @based block-level statements like 
    @page,@keyframes and @media since all of them, start with a special
    character.
    
    I've modified the chunk header CSS regex so that it is able to detect
    the statements above and add them to the chunk header.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-866%2Fsohomdatta1%2Fcss-userdiff-fix-test-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-866/sohomdatta1/css-userdiff-fix-test-v1
Pull-Request: https://github.com/git/git/pull/866

 t/t4018/css-attribute-value-selector |  4 ++++
 t/t4018/css-block-level-@-statements | 10 ++++++++++
 t/t4018/css-class-selector           |  4 ++++
 t/t4018/css-id-selector              |  4 ++++
 t/t4018/css-root-selector            |  4 ++++
 userdiff.c                           |  2 +-
 6 files changed, 27 insertions(+), 1 deletion(-)
 create mode 100644 t/t4018/css-attribute-value-selector
 create mode 100644 t/t4018/css-block-level-@-statements
 create mode 100644 t/t4018/css-class-selector
 create mode 100644 t/t4018/css-id-selector
 create mode 100644 t/t4018/css-root-selector


base-commit: d98273ba77e1ab9ec755576bc86c716a97bf59d7

Comments

Johannes Sixt Oct. 7, 2020, 4:51 p.m. UTC | #1
Am 07.10.20 um 11:25 schrieb Sohom Datta via GitGitGadget:
> From: Sohom <sohom.datta@learner.manipal.edu>
> 
> Added support for classes, ids, :root selectors

s/Added/Add/ since we prefer this sentence in imperative mood.

> as well as @-based statements (ex: @page, @media
> and @keyframes ).
> 
> Also added tests for the same.

Ditto, or just drop this sentence.

> 
> Signed-off-by: Sohom Datta <sohom.datta@learner.manipal.edu>
> ---
>     userdiff: Expand detected chunk headers for css
>     
>     Currently, the regex used for the CSS builtin diff driver in git is only
>     able to show chunk headers for lines that start with a number, a letter
>     or an underscore.
>     
>     However, the regex fails to detect classes (starts with a .), ids
>     (starts with a #), :root and attribute-value based selectors (for
>     example [class*="col-"]), as well as @based block-level statements like 
>     @page,@keyframes and @media since all of them, start with a special
>     character.

This text would have made a very good introductory part of the commit
message, but since it is after the three-dash separator, it is ignored.

The patch text looks good.

>     
>     I've modified the chunk header CSS regex so that it is able to detect
>     the statements above and add them to the chunk header.
> 
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-866%2Fsohomdatta1%2Fcss-userdiff-fix-test-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-866/sohomdatta1/css-userdiff-fix-test-v1
> Pull-Request: https://github.com/git/git/pull/866
> 
>  t/t4018/css-attribute-value-selector |  4 ++++
>  t/t4018/css-block-level-@-statements | 10 ++++++++++
>  t/t4018/css-class-selector           |  4 ++++
>  t/t4018/css-id-selector              |  4 ++++
>  t/t4018/css-root-selector            |  4 ++++
>  userdiff.c                           |  2 +-
>  6 files changed, 27 insertions(+), 1 deletion(-)
>  create mode 100644 t/t4018/css-attribute-value-selector
>  create mode 100644 t/t4018/css-block-level-@-statements
>  create mode 100644 t/t4018/css-class-selector
>  create mode 100644 t/t4018/css-id-selector
>  create mode 100644 t/t4018/css-root-selector
> 
> diff --git a/t/t4018/css-attribute-value-selector b/t/t4018/css-attribute-value-selector
> new file mode 100644
> index 0000000000..918256b20c
> --- /dev/null
> +++ b/t/t4018/css-attribute-value-selector
> @@ -0,0 +1,4 @@
> +[class*="RIGHT"] {
> +    background : #000;
> +    border : 10px ChangeMe #C6C6C6;
> +}
> diff --git a/t/t4018/css-block-level-@-statements b/t/t4018/css-block-level-@-statements
> new file mode 100644
> index 0000000000..d6755f2f3d
> --- /dev/null
> +++ b/t/t4018/css-block-level-@-statements
> @@ -0,0 +1,10 @@
> +@keyframes RIGHT {
> +    from {
> +        background : #000;
> +        border : 10px ChangeMe #C6C6C6;
> +    }
> +    to {
> +        background : #fff;
> +        border : 10px solid #C6C6C6;
> +    }
> +}
> diff --git a/t/t4018/css-class-selector b/t/t4018/css-class-selector
> new file mode 100644
> index 0000000000..f790a0062f
> --- /dev/null
> +++ b/t/t4018/css-class-selector
> @@ -0,0 +1,4 @@
> +.RIGHT {
> +    background : #000;
> +    border : 10px ChangeMe #C6C6C6;
> +}
> diff --git a/t/t4018/css-id-selector b/t/t4018/css-id-selector
> new file mode 100644
> index 0000000000..17c5111052
> --- /dev/null
> +++ b/t/t4018/css-id-selector
> @@ -0,0 +1,4 @@
> +#RIGHT {
> +    background : #000;
> +    border : 10px ChangeMe #C6C6C6;
> +}
> diff --git a/t/t4018/css-root-selector b/t/t4018/css-root-selector
> new file mode 100644
> index 0000000000..22b958e369
> --- /dev/null
> +++ b/t/t4018/css-root-selector
> @@ -0,0 +1,4 @@
> +:RIGHT {
> +    background : #000;
> +    border : 10px ChangeMe #C6C6C6;
> +}
> diff --git a/userdiff.c b/userdiff.c
> index fde02f225b..49c9771891 100644
> --- a/userdiff.c
> +++ b/userdiff.c
> @@ -200,7 +200,7 @@ PATTERNS("csharp",
>  	 "|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"),
>  IPATTERN("css",
>  	 "![:;][[:space:]]*$\n"
> -	 "^[_a-z0-9].*$",
> +	 "^(([_a-z0-9]|[:[@.#][_a-z0-9]).*)$",
>  	 /* -- */
>  	 /*
>  	  * This regex comes from W3C CSS specs. Should theoretically also
> 
> base-commit: d98273ba77e1ab9ec755576bc86c716a97bf59d7
>
Junio C Hamano Oct. 7, 2020, 5:09 p.m. UTC | #2
"Sohom Datta via GitGitGadget" <gitgitgadget@gmail.com> writes:

> From: Sohom <sohom.datta@learner.manipal.edu>
>
> Added support for classes, ids, :root selectors
> as well as @-based statements (ex: @page, @media
> and @keyframes ).
>
> Also added tests for the same.
>
> Signed-off-by: Sohom Datta <sohom.datta@learner.manipal.edu>
> ---
>     userdiff: Expand detected chunk headers for css
>     
>     Currently, the regex used for the CSS builtin diff driver in git is only
>     able to show chunk headers for lines that start with a number, a letter
>     or an underscore.
>     
>     However, the regex fails to detect classes (starts with a .), ids
>     (starts with a #), :root and attribute-value based selectors (for
>     example [class*="col-"]), as well as @based block-level statements like 
>     @page,@keyframes and @media since all of them, start with a special
>     character.

The above two would be much better beginning of the log message for
this change modulo a few nits.

 - We first explain what the current system does in the present
   tense.  "Currently, " at the beginning is a pure noise.

 - And we point out what may be lacking (which you did a very good
   job in the second paragraph).

 - And finally, we write in imperative mood to give an order to the
   codebase to "become like so." or an order to the patch monkey to
   "make the codebase like so."

As the last paragraph to follow the two paragraphs, something like

    Allow the selectors to begin with these special characters.

would be sufficient.

> -	 "^[_a-z0-9].*$",
> +	 "^(([_a-z0-9]|[:[@.#][_a-z0-9]).*)$",

As we seem to allow ? (i.e. zero or one) in the patterns, it probably
makes it easier to read to spell the above like this instead?

-	"^[_a-z0-9].*$",
+	"^[:[@.#]?[_a-z0-9].*$"
diff mbox series

Patch

diff --git a/t/t4018/css-attribute-value-selector b/t/t4018/css-attribute-value-selector
new file mode 100644
index 0000000000..918256b20c
--- /dev/null
+++ b/t/t4018/css-attribute-value-selector
@@ -0,0 +1,4 @@ 
+[class*="RIGHT"] {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
diff --git a/t/t4018/css-block-level-@-statements b/t/t4018/css-block-level-@-statements
new file mode 100644
index 0000000000..d6755f2f3d
--- /dev/null
+++ b/t/t4018/css-block-level-@-statements
@@ -0,0 +1,10 @@ 
+@keyframes RIGHT {
+    from {
+        background : #000;
+        border : 10px ChangeMe #C6C6C6;
+    }
+    to {
+        background : #fff;
+        border : 10px solid #C6C6C6;
+    }
+}
diff --git a/t/t4018/css-class-selector b/t/t4018/css-class-selector
new file mode 100644
index 0000000000..f790a0062f
--- /dev/null
+++ b/t/t4018/css-class-selector
@@ -0,0 +1,4 @@ 
+.RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
diff --git a/t/t4018/css-id-selector b/t/t4018/css-id-selector
new file mode 100644
index 0000000000..17c5111052
--- /dev/null
+++ b/t/t4018/css-id-selector
@@ -0,0 +1,4 @@ 
+#RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
diff --git a/t/t4018/css-root-selector b/t/t4018/css-root-selector
new file mode 100644
index 0000000000..22b958e369
--- /dev/null
+++ b/t/t4018/css-root-selector
@@ -0,0 +1,4 @@ 
+:RIGHT {
+    background : #000;
+    border : 10px ChangeMe #C6C6C6;
+}
diff --git a/userdiff.c b/userdiff.c
index fde02f225b..49c9771891 100644
--- a/userdiff.c
+++ b/userdiff.c
@@ -200,7 +200,7 @@  PATTERNS("csharp",
 	 "|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"),
 IPATTERN("css",
 	 "![:;][[:space:]]*$\n"
-	 "^[_a-z0-9].*$",
+	 "^(([_a-z0-9]|[:[@.#][_a-z0-9]).*)$",
 	 /* -- */
 	 /*
 	  * This regex comes from W3C CSS specs. Should theoretically also