diff mbox series

coccinelle: Add str_off_on() and str_no_yes() rules

Message ID 20241027125858.1804-2-thorsten.blum@linux.dev (mailing list archive)
State New
Headers show
Series coccinelle: Add str_off_on() and str_no_yes() rules | expand

Commit Message

Thorsten Blum Oct. 27, 2024, 12:58 p.m. UTC
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(+)

Comments

Andy Shevchenko Oct. 27, 2024, 3:06 p.m. UTC | #1
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.
Julia Lawall Oct. 27, 2024, 3:25 p.m. UTC | #2
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
>
Andy Shevchenko Oct. 27, 2024, 6:56 p.m. UTC | #3
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.
diff mbox series

Patch

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)