git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Cc: Julia Lawall <julia.lawall@lip6.fr>,
	Abhradeep Chakraborty <chakrabortyabhradeep79@gmail.com>,
	git <git@vger.kernel.org>,
	cocci@inria.fr
Subject: Re: [PATCH] add usage-strings ci check and amend remaining usage strings
Date: Tue, 22 Feb 2022 13:37:12 +0100	[thread overview]
Message-ID: <220222.867d9n83ir.gmgdl@evledraar.gmail.com> (raw)
In-Reply-To: <nycvar.QRO.7.76.6.2202221152230.11118@tvgsbejvaqbjf.bet>


On Tue, Feb 22 2022, Johannes Schindelin wrote:

> Hi Julia,
>
> I would like to loop you in here because you have helped us with
> Coccinelle questions in the past.

Thanks. Probably better to CC the relevant ML, adding it.

> On Mon, 21 Feb 2022, Abhradeep Chakraborty wrote:
>
>> Ævar Arnfjörð Bjarmason <avarab@gmail.com> wrote:
>>
>> > That should be fairly easy to do though, and if not we could always
>> > just dump these to stderr or something if a
>> > git_env_bool("GIT_TEST_PARSE_OPTIONS_DUMP_FIELD_HELP", 0) was true,
>> > and do the testing itself in t0012-help.sh.
>>
>> Okay but if the logic can't be implented in the `parse-options.c` file
>> (most probably I will be able to implement the logic), would you allow
>> me to try the `coccinelle script` method you mentioned?
>
> The task at hand is to identify calls to the macro `OPT_CMDMODE()` (and
> other, similar macros) that get a fourth argument of the form
>
> 	N_("<some string>")
>
> The problem is to identify `<some string>` that ends in a `.` (which we
> want to avoid) or that starts with some prefix and a colon but follows
> with an upper-case character.
>
> In other words, we want to suggest replacing
>
> 	N_("log: Use something")
>
> or
>
> 	N_("log: use something.")
>
> by
>
> 	N_("log: use something")
>
> Ævar suggested that Coccinelle can do that. Could you give us a hand how
> this would be possible using `spatch`?

I probably shouldn't have mentioned that at all, and I think this is
academic in this context, because as noted we can just add this to
parse_options_check() (linking it here again for off-git-ml context):

    https://lore.kernel.org/git/220221.86tucsb4oy.gmgdl@evledraar.gmail.com/

We now pay that trivial runtime overhead every time, we could run it
only during the tests if we ever got worried about it.

And it's a lot less fragile and easy to understand than running
coccicheck, i.e. as nice as it is it's still takes a while to run, is
its own mini-language, needs to be kept in sync with code changes etc.

So by doing it at runtime we can adjust messages, code & tests in an
atomic patch more easily (i.e. not assume that you ran some cocci target
to validate it).

It also makes it really easy to do things that are really hard (or
impossible?) with coccinelle. I.e. some of these checks are run as a
function of what flag gets passed into some function later on, which in
the general case would require coccinelle to have some runtime emulator
for C code just to see *what* checks it wants to run.

That being said (and with the caveat that I've only looked at this code,
not done this myself) if you clone linux.git and browse through:

    git grep -C100 -F coccilib.report '*.cocci'

You can see a lot of examples of using cocci for these sorts of checks.

And the same goes if you clone coccinelle.git and do:

    git grep -C100 @script: -- tests

For linux.git it's documented here:
https://github.com/torvalds/linux/blob/master/Documentation/dev-tools/coccinelle.rst

I.e. it's basically writing the sort of cocci rules we have in-tree with
a callback script that complaints about the required change.

For our use it would probably better (in lieu of parse_options_check(),
which is the right thing here) to just have a normal *.cocci file and
complain if it applies changes. We already error in the CI if those need
to apply any changes.

But I don't off-hand know how to do that. E.g. I was trying the other
day to come up with some coccinelle rule that converted:

    die("BUG: blah blah");

To:

    BUG("blah blah");

And while I'm sure there's some way to do this, couldn't find a way to
write a rule to "reach in" to a constant string, apply some check or
search/replacement on it, and to do a subsequent transformation on it.

In this case the OPT_BLAH(1, 2, 3, "string here") has OPT_BLAH() as a
macro. I can't remember if there's extra caveats around using coccinelle
for macros v.s. symbols.

Disclaimer: By "couldn't" I mean I grepped the above examples for all of
a few minutes quickly skimmed the coccinelle docs, didn't find a
template I could copy, then ended up writing some nasty grep/xargs/perl
for-loop instead :)

  reply	other threads:[~2022-02-22 12:55 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-16 17:02 [PATCH] add usage-strings ci check and amend remaining usage strings Abhradeep Chakraborty via GitGitGadget
2022-02-21 14:51 ` Abhradeep Chakraborty
2022-02-21 15:39 ` Ævar Arnfjörð Bjarmason
2022-02-21 17:15   ` Junio C Hamano
2022-02-21 17:33   ` Abhradeep Chakraborty
2022-02-21 18:52     ` Ævar Arnfjörð Bjarmason
2022-02-22 10:57     ` Johannes Schindelin
2022-02-22 12:37       ` Ævar Arnfjörð Bjarmason [this message]
2022-02-22 13:42         ` [cocci] " Julia Lawall
2022-02-22 14:03           ` Abhradeep Chakraborty
2022-02-22 15:47           ` Abhradeep Chakraborty
2022-02-25 15:30             ` Johannes Schindelin
2022-02-25 16:16               ` Ævar Arnfjörð Bjarmason
2022-02-26  4:22                 ` Abhradeep Chakraborty
2022-02-26  8:55                   ` Julia Lawall
2022-02-25 15:03           ` [cocci] " Johannes Schindelin
2022-02-25 15:36             ` Julia Lawall
2022-02-25 16:28             ` Ævar Arnfjörð Bjarmason
2022-02-22 10:25   ` Abhradeep Chakraborty
2022-02-22 15:58 ` [PATCH v2] add usage-strings " Abhradeep Chakraborty via GitGitGadget
2022-02-22 17:16   ` Eric Sunshine
2022-02-23 11:59     ` Abhradeep Chakraborty
2022-02-23 21:17     ` Junio C Hamano
2022-02-23 21:20       ` Eric Sunshine
2022-02-24  6:26       ` Abhradeep Chakraborty
2022-02-23 14:27   ` [PATCH v3 0/2] add usage-strings ci " Abhradeep Chakraborty via GitGitGadget
2022-02-23 14:27     ` [PATCH v3 1/2] amend remaining usage strings according to style guide Abhra303 via GitGitGadget
2022-02-23 14:27     ` [PATCH v3 2/2] parse-options.c: add style checks for usage-strings Abhradeep Chakraborty via GitGitGadget
2022-02-25  5:23     ` [PATCH v4 0/2] add usage-strings ci check and amend remaining usage strings Abhradeep Chakraborty via GitGitGadget
2022-02-25  5:23       ` [PATCH v4 1/2] amend remaining usage strings according to style guide Abhradeep Chakraborty via GitGitGadget
2022-02-25  5:23       ` [PATCH v4 2/2] parse-options.c: add style checks for usage-strings Abhradeep Chakraborty via GitGitGadget
2022-02-25  6:13         ` Junio C Hamano
2022-02-25  8:08           ` Abhradeep Chakraborty
2022-02-25 17:06             ` Junio C Hamano
2022-02-26  3:57               ` Abhradeep Chakraborty
2022-02-25 15:36         ` Johannes Schindelin
2022-02-25 16:01           ` Abhradeep Chakraborty
2022-02-26  1:36           ` Junio C Hamano
2022-02-26  6:08             ` Junio C Hamano
2022-02-26  6:57               ` Abhradeep Chakraborty
2022-02-27 19:15                 ` Junio C Hamano
2022-02-28  7:39                   ` Abhradeep Chakraborty
2022-02-28 17:48                     ` Junio C Hamano
2022-02-28 19:32                       ` Ævar Arnfjörð Bjarmason
2022-03-01  6:38                       ` Abhradeep Chakraborty
2022-03-01 11:12                         ` Junio C Hamano
2022-03-01 19:37                       ` Johannes Schindelin
2022-03-03 17:34                         ` Abhradeep Chakraborty
2022-03-03 22:30                           ` Junio C Hamano
2022-03-04 14:21                             ` Abhradeep Chakraborty
2022-03-07 16:12                               ` Johannes Schindelin
2022-03-08  5:44                                 ` Abhradeep Chakraborty
2022-03-01 20:08                       ` [PATCH] parse-options: make parse_options_check() test-only Junio C Hamano
2022-03-01 21:57                         ` Ævar Arnfjörð Bjarmason
2022-03-01 22:18                           ` Junio C Hamano
2022-03-02 10:52                             ` Ævar Arnfjörð Bjarmason
2022-03-02 18:59                               ` Junio C Hamano
2022-03-02 19:17                                 ` Ævar Arnfjörð Bjarmason

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=220222.867d9n83ir.gmgdl@evledraar.gmail.com \
    --to=avarab@gmail.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=chakrabortyabhradeep79@gmail.com \
    --cc=cocci@inria.fr \
    --cc=git@vger.kernel.org \
    --cc=julia.lawall@lip6.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).