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

Re: [PATCH 2/3] xdiff: -W: include immediately preceding non-empty lines in context

From
Vegard Nossum <vegard.nossum@oracle.com>
Date
Jan 15, 2017, 10:06 UTC
Message-ID
<0c761135-2696-4b3d-0a4f-3d90edf5da2e@oracle.com>
In-Reply-To
<xmqqy3ydcaia.fsf@gitster.mtv.corp.google.com>
On 15/01/2017 03:39, Junio C Hamano wrote:
Show 8 quoted lines
> René Scharfe <l.s.r@web.de> writes:
>
>>> I am also more focused on keeping the codebase maintainable in good
>>> health by making sure that we made an effort to find a solution that
>>> is general-enough before solving a single specific problem you have
>>> today.  We may end up deciding that a blank-line heuristics gives us
>>> good enough tradeoff, but I do not want us to make a decision before
>>> thinking.
You are right; I appreciate this approach.
Show 18 quoted lines
>> How about extending the context upward only up to and excluding a line
>> that is either empty *or* a function line?  That would limit the extra
>> context to a single function in the worst case.
>>
>> Reducing context at the bottom with the aim to remove comments for the
>> next section is more tricky as it could remove part of the function
>> that we'd like to show if we get the boundary wrong.  How bad would it
>> be to keep the southern border unchanged?
>
> I personally do not think there is any robust heuristic other than
> Vegard's "a blank line may be a signal enough that lines before that
> are not part of the beginning of the function", and I think your
> "hence we look for a blank line but if there is a line that matches
> the function header, stop there as we know we came too far back"
> will be a good-enough safety measure.
>
> I also agree with you that we probably do not want to futz with the
> southern border.

You are right, trying to change the southern border in this way is not quite reliable if there are no empty lines whatsoever and can erroneously cause the function context to not include the bottom of the function being changed.

I'm splitting the function boundary detection logic into separate functions and trying to solve the above case without breaking the tests (and adding a new test for the above case too).

I'll see if I can additionally provide some toggles (flags or config variables) to control the new behaviour, what I had in mind was:

   -W[=preamble,=no-preamble]
   --function-context[=preamble,=no-preamble]
   diff.functionContextPreamble = <bool>

(where the new logic is controlled by the new config variable and overridden by the presence of =preamble or =no-preamble).

Then it also shouldn't be too difficult to add
   diff.<driver>.preamble = <regex>
   diff.<driver>.xpreamble = <regex>

to override the heuristic used for function border detection in exceptional cases.

You can argue about the naming now ;-) But I will use this for a start, renaming/reworking it (or throwing it away) afterwards should be easy once the code has been written.

Vegard
Previous: Junio C HamanoNext: René Scharfe
Message 10 of 15 in “xdiff: -W: relax end-of-file function detection”
  1. 1/3 xdiff: -W: relax end-of-file function detectionVegard Nossum, Jan 13, 2017
  2. 2/3 xdiff: -W: include immediately preceding non-empty lines in contextVegard Nossum, Jan 13, 2017
  3. René ScharfeJan 13, 2017
  4. Stefan BellerJan 13, 2017
  5. Junio C HamanoJan 13, 2017
  6. Vegard NossumJan 13, 2017
  7. Junio C HamanoJan 13, 2017
  8. René ScharfeJan 14, 2017
  9. Junio C HamanoJan 15, 2017
  10. Vegard NossumJan 15, 2017
  11. René ScharfeJan 15, 2017
  12. Junio C HamanoJan 15, 2017
  13. René ScharfeJan 15, 2017
  14. 3/3 t/t4051-diff-function-context: improve tests for new diff -W behaviourVegard Nossum, Jan 13, 2017
  15. René ScharfeJan 13, 2017

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.