Re: git grep --show-function treats GOTO labels as function names
- From
Zach Riggle <zachriggle@gmail.com>
- Date
- May 27, 2020, 23:04 UTC
- Message-ID
- <CAMP9c5m65hBXKgP76iUCGe79c_s5p106K6iwzJyPmm7fCsc7LA@mail.gmail.com>
- In-Reply-To
- <CAMP9c5=kRAfKqfWL4AJg1m9c-3OwG1Vv=vBaiOhsD6abjtXH=A@mail.gmail.com>
It looks like that does the trick for "goto" labels, but there are also some issue on function name parsing with attributes when they are split onto a second line.
$ cat attr.cpp
int main() __attribute__ ( (no_sanitize("alignment")) )
{
FOO
}
$ git grep --no-index --show-function -e FOO attr.cpp
attr.cpp=2=__attribute__ ( (no_sanitize("alignment")) )
attr.cpp:4: FOOZach Riggle
On Wed, May 27, 2020 at 5:54 PM Zach Riggle <zachriggle@gmail.com> wrote:
Show 33 quoted lines
>
> Awesome, thanks!
>
>
> Zach Riggle
>
> On Wed, May 27, 2020 at 5:48 PM Jeff King <peff@peff.net> wrote:
> >
> > On Wed, May 27, 2020 at 05:29:08PM -0500, Zach Riggle wrote:
> >
> > > It looks like there is an issue with how the parser handles "goto"
> > > labels, as it treats them the same as a function name.
> >
> > By default, the function-finding isn't aware of the specific content in
> > the file. But you can associate extensions with particular types, like:
> >
> > $ echo '*.cpp diff=cpp' >~/.gitattributes
> > $ git config --global core.attributesFile ~/.gitattributes
> > $ git grep --no-index --show-function -e FOO test2.cpp
> > test2.cpp=int main() {
> > test2.cpp: FOO
> > test2.cpp: FOO
> >
> > Usually this is done in-repo, but since your example used --no-index, I
> > showed how to set up a per-user attribute file. The "diff" attribute
> > covers both diff and grep (for diff, the hunk headers will also show the
> > function).
> >
> > The "cpp" diff regexes are built-in to the git binary. We just don't
> > associate any filenames by default. You can also add your own; see the
> > section "Defining a custom hunk-header" from "git help attributes".
> >
> > -Peff