Re: [PATCH v2] scripts: Have make TAGS not include structure members

From: Masatake YAMATO

Date: Wed May 27 2026 - 15:36:45 EST


From: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Subject: Re: [PATCH v2] scripts: Have make TAGS not include structure members
Date: Wed, 27 May 2026 18:29:14 +0200

> On Wed, May 27, 2026 at 12:11:44PM -0400, Steven Rostedt wrote:
>> From: Steven Rostedt <rostedt@xxxxxxxxxxx>
>>
>> It is really annoying when I use emacs TAGS to search for something
>> like "dev_name" and have to go through 12 iterations before I find the
>> function "dev_name". I really do not care about structures that include
>> "dev_name" as one of its fields, and I'm sure pretty much all other
>> developers do not care either.
>>
>> There's a "remove_structs" variable used by the scripts/tags.sh, which
>> I'm guessing is suppose to remove these structures from the TAGS file,
>> but it must do a poor job at it, as I'm always hitting structures when
>> I want the actual declaration.
>>
>> Luckily, the etags program comes with an option "--no-members", which does
>> exactly what I want, and I'm sure all other kernel developers want too.
>>
>> Create a new "no_members" variable and assign it to "--no-members" for the
>> "TAGS" case and pass that to the etags program to remove structures.
>>
>> Signed-off-by: Steven Rostedt <rostedt@xxxxxxxxxxx>
>> ---
>> Changes since v1: https://lore.kernel.org/all/20131115093645.6dc03918@xxxxxxxxxxxxxxxxxx/
>>
>> - Use a no_members variable instead of hard coding the --no-members into
>> the etags call, as that can break some "tags" cases. (Michal Marek)
>
> Yeah, I often use member tags.
>
> The tags file have a 'kind' field, what you want is for emacs to order
> on kind and prefer 'f' over 'm'.

citre (https://github.com/universal-ctags/citre) utilizes the kinds field
of tags file when soriting the list of definitions. citre runs on emacs.

https://github.com/universal-ctags/citre/blob/master/citre-lang-c.el#L28 explains
the parts of heuristics used in citre:

;; - When the symbol is after "->" or ".", tags of member kind are sorted above
;; others.
;; - When the symbol is before "(", tags of function/macro kinds are sorted
;; above others.
;; - When the cursor is on the header file in a "#include" directive, the
;; header file itself, and the references to that header file (if tagged) is
;; found as its definitions. References that uses paths can't be found.
;; Also, file names will be used for auto-completion.

I use citre and ctags daily for reading kernel code. Quite comfortable.

Masatake YAMATO

>
> The alternative is switching to use emacs-lsp, that way the editor knows
> the kind of symbol you want. If you're on a function call, it should
> only consider 'f' tags. Whereas if the cursor is on a member deref, it
> should only consider 'm'.
>