[PATCH] coccinelle: Add str_off_on() and str_no_yes() rules

Thorsten Blum posted 1 patch 1 year, 3 months ago
scripts/coccinelle/api/string_choices.cocci | 38 +++++++++++++++++++++
1 file changed, 38 insertions(+)
[PATCH] coccinelle: Add str_off_on() and str_no_yes() rules
Posted by Thorsten Blum 1 year, 3 months ago
In addition to str_on_off() and str_yes_no(), add rules to search for
str_off_on() and str_no_yes() replacements.

Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
---
 scripts/coccinelle/api/string_choices.cocci | 38 +++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/scripts/coccinelle/api/string_choices.cocci b/scripts/coccinelle/api/string_choices.cocci
index 375045086912..93de05aeded2 100644
--- a/scripts/coccinelle/api/string_choices.cocci
+++ b/scripts/coccinelle/api/string_choices.cocci
@@ -282,6 +282,25 @@ e << str_on_off_r.E;
 
 coccilib.report.print_report(p[0], "opportunity for str_on_off(%s)" % e)
 
+@str_off_on depends on patch@
+expression E;
+@@
+-      ((E) ? "off" : "on")
++      str_off_on(E)
+
+@str_off_on_r depends on !patch@
+expression E;
+position P;
+@@
+*      E@P ? "off" : "on"
+
+@script:python depends on report@
+p << str_off_on_r.P;
+e << str_off_on_r.E;
+@@
+
+coccilib.report.print_report(p[0], "opportunity for str_off_on(%s)" % e)
+
 @str_yes_no depends on patch@
 expression E;
 @@
@@ -300,3 +319,22 @@ e << str_yes_no_r.E;
 @@
 
 coccilib.report.print_report(p[0], "opportunity for str_yes_no(%s)" % e)
+
+@str_no_yes depends on patch@
+expression E;
+@@
+-      ((E) ? "no" : "yes")
++      str_no_yes(E)
+
+@str_no_yes_r depends on !patch@
+expression E;
+position P;
+@@
+*      E@P ? "no" : "yes"
+
+@script:python depends on report@
+p << str_no_yes_r.P;
+e << str_no_yes_r.E;
+@@
+
+coccilib.report.print_report(p[0], "opportunity for str_no_yes(%s)" % e)
-- 
2.47.0
Re: [PATCH] coccinelle: Add str_off_on() and str_no_yes() rules
Posted by Andy Shevchenko 1 year, 3 months ago
On Sun, Oct 27, 2024 at 2:59 PM Thorsten Blum <thorsten.blum@linux.dev> wrote:
>
> In addition to str_on_off() and str_yes_no(), add rules to search for
> str_off_on() and str_no_yes() replacements.

I don't know cocci well enough, but this does simply not scale. We
also have cases where "Yes"/"No", "YES"/"NO" and all possible
variations of that.


-- 
With Best Regards,
Andy Shevchenko
Re: [PATCH] coccinelle: Add str_off_on() and str_no_yes() rules
Posted by Julia Lawall 1 year, 3 months ago

On Sun, 27 Oct 2024, Andy Shevchenko wrote:

> On Sun, Oct 27, 2024 at 2:59 PM Thorsten Blum <thorsten.blum@linux.dev> wrote:
> >
> > In addition to str_on_off() and str_yes_no(), add rules to search for
> > str_off_on() and str_no_yes() replacements.
>
> I don't know cocci well enough, but this does simply not scale. We
> also have cases where "Yes"/"No", "YES"/"NO" and all possible
> variations of that.

Andy, are you concerned about the number of such functions in the kernel
or the number of rules in the semantic patch.  There are indeed more
concise ways to write the semantic patch.

julia

>
>
> --
> With Best Regards,
> Andy Shevchenko
>
Re: [PATCH] coccinelle: Add str_off_on() and str_no_yes() rules
Posted by Andy Shevchenko 1 year, 3 months ago
On Sun, Oct 27, 2024 at 5:25 PM Julia Lawall <julia.lawall@inria.fr> wrote:
> On Sun, 27 Oct 2024, Andy Shevchenko wrote:
> > On Sun, Oct 27, 2024 at 2:59 PM Thorsten Blum <thorsten.blum@linux.dev> wrote:
> > >
> > > In addition to str_on_off() and str_yes_no(), add rules to search for
> > > str_off_on() and str_no_yes() replacements.
> >
> > I don't know cocci well enough, but this does simply not scale. We
> > also have cases where "Yes"/"No", "YES"/"NO" and all possible
> > variations of that.
>
> Andy, are you concerned about the number of such functions in the kernel
> or the number of rules in the semantic patch.

Rules for the semantic patches I am worried about.

>  There are indeed more
> concise ways to write the semantic patch.

Would be nice to see ways to cover more cases in less lines in the spatch.


-- 
With Best Regards,
Andy Shevchenko