git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/2] diff: add custom regular expressions for function names

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 5, 2007, 05:00 UTC
Message-ID
<7vwsxfe96i.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<7vejjnhpap.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano <gitster@pobox.com> writes:
Show 15 quoted lines
> Linus Torvalds <torvalds@linux-foundation.org> writes:
>
>> On Wed, 4 Jul 2007, Johannes Schindelin wrote:
>>> 
>>> This patch introduces a config variable diff.functionNameRegexp
>>> which replaces the default heuristics.  If the pattern contains
>>> a group, the match of this group is used for the hunk header
>>> instead of the whole match.
>>
>> Umm. Shouldn't it be a path-name based attribute instead?
>>
>> That way you can set it to be different things for different source files 
>> in the same repository.. IOW, think mixed Java/C codebases.
>
> Absolutely.  I'll take it from there.
I'll follow-up this message with two patches.

The first one is almost the same as Johannes's, but I got rid of the new global variable. The second one discards Johannes's use of a single config variable and replaces it with gitattribute access.

The second one is still a WIP; currently you can mark the path to use java convention to find hunk header with:

	$ echo '*.java	funcname=java' >.gitattributes

If there are useful "hunk header regexp" to make built-in, you can add them to diff_hunk_header_regexp().

We also should allow user override or define custom regexp with a configuration section, perhaps like:

	[funcname]
        	java = ...
                perl = ...
                default = ...

There are enough existing code in diff and convert area that use (path -> attribute -> config) mapping in a very similar way and any git hacker wannabe should be able to mimick them to implement such a support, but tonight's WIP does not have it.

*NOTE IN BIG RED LETTERS*

I do not particularly like the way multiple regexps are used in Johannes's patch, but I left it as-is, as that part of the change is orthogonal from the support to use the gitattribute mechanism, and the primary reason I got involved in this topic is to give help around the latter area.

I think using multiple regexp is cute, but if we do that, it should allow people to pick from:

	public class Beer
	{
		int special;
		public static void main(String args[])
                {
                	... modified part is here ...
with two regexp matches, say:
	/^(public|private|protectd) class (.*)/ then
        /^	+.* (\w*\(.*)$/
and define the hunk_header format as something like:
	"\[1,2]::\[2,1]"

meaning, "pick the second capture group from the match data of the first regexp, followed by double-colon, and pick the first capture group from the match data of the second regexp", to result in "Beer::main(String args[])". You should be able to pick "/package (\w+);/ then /^sub (\w+)/" in Perl code using the same idea.

I am not married to the syntax I used in the above examples, though.

Previous: Johannes SchindelinNext: Junio C Hamano
Message 6 of 29 in “diff: add custom regular expressions for function names”
  1. 2/2 diff: add custom regular expressions for function namesJohannes Schindelin, Jul 4, 2007
  2. Linus TorvaldsJul 4, 2007
  3. Johannes SchindelinJul 4, 2007
  4. Junio C HamanoJul 4, 2007
  5. Johannes SchindelinJul 4, 2007
  6. Junio C HamanoJul 5, 2007
  7. 1/2 Future-proof source for changes in xdemitconf_tJunio C Hamano, Jul 5, 2007
  8. Johannes SchindelinJul 5, 2007
  9. 2/2 WIP per-path attribute based hunk header selection.Junio C Hamano, Jul 5, 2007
  10. Johannes SchindelinJul 5, 2007
  11. Junio C HamanoJul 5, 2007
  12. 1/3 Introduce diff_filespec_is_binary()Junio C Hamano, Jul 6, 2007
  13. Johannes SchindelinJul 6, 2007
  14. Per-path attribute based hunk header selection.Junio C Hamano, Jul 6, 2007
  15. Johannes SchindelinJul 6, 2007
  16. Linus TorvaldsJul 6, 2007
  17. Junio C HamanoJul 7, 2007
  18. しらいしななこJul 7, 2007
  19. Junio C HamanoJul 7, 2007
  20. Johannes SchindelinJul 7, 2007
  21. Junio C HamanoJul 7, 2007
  22. Junio C HamanoJul 8, 2007
  23. Johannes SchindelinJul 8, 2007
  24. Nicolas PitreJul 9, 2007
  25. Junio C HamanoJul 9, 2007
  26. Johannes SchindelinJul 9, 2007
  27. Fix configuration syntax to specify customized hunk header patterns.Junio C Hamano, Jul 7, 2007
  28. Florian WeimerJul 5, 2007
  29. Johannes SchindelinJul 5, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.