Re: [BUG-ish] diff compaction heuristic false positive
- From
Jeff King <peff@peff.net>
- Date
- Jun 10, 2016, 08:41 UTC
- Message-ID
- <20160610084149.GA14592@sigill.intra.peff.net>
- In-Reply-To
- <575A7AD1.50604@alum.mit.edu>
On Fri, Jun 10, 2016 at 10:31:13AM +0200, Michael Haggerty wrote:
Show 14 quoted lines
> I've often thought that indentation would be a good, fairly universal > signal for diff to use when deciding how to slide hunks around. Most > source code is indented in a way that shows its structure. > > I propose the following heuristic: > > * Prefer to start and end hunks following lines with the least > indentation. > > * Define the "indentation" of a blank line to be the indentation of > the previous non-blank line minus epsilon. > > * In the case of a tie, prefer to slide the hunk down as far as > possible.
Hmm. That might help this case, but the original motivation for this heuristic was something like:
##
# foo
def foo
something
end ##
# bar
def bar
something_else
endwhere we add the first function above the second. We end up with:
diff --git a/file.rb b/file.rb index 1f9b151..f991c76 100644 --- a/file.rb +++ b/file.rb @@ -1,4 +1,10 @@ ## +# foo +def foo + something +end + +## # bar def bar something else I.e., crediting the "##" to the wrong spot (or in C, the "/*"). I don't think indentation helps us there (sliding-up would, but like sliding-down, it just depends on the order of the hunks). So I agree that adding indentation to the mix might help, but I don't think it can replace this heuristic. -Peff