fix(parser/diff): only run myers diff on shown part
This commit is contained in:
parent
63a4636341
commit
8e8c018f09
|
@ -52,6 +52,7 @@ func isWhitespace(b byte) bool {
|
|||
|
||||
// myersDiff computes the Myers' diff between two slices of strings.
|
||||
// src: https://github.com/cj1128/myers-diff/blob/master/main.go
|
||||
// TODO: it has O(n^2) time complexity
|
||||
func myersDiff(src, dst []string, compareSpace bool) []operation {
|
||||
n := len(src)
|
||||
m := len(dst)
|
||||
|
|
|
@ -74,20 +74,26 @@ func (*Diff) Run(results []stage.ExecutorResult, confAny any) (
|
|||
comment += fmt.Sprintf("Difference found in `%s`\n",
|
||||
output.FileName)
|
||||
if !output.AlwaysHide {
|
||||
// Convert answer to string and split by lines
|
||||
stdoutLines := strings.Split(string(answer), "\n")
|
||||
resultLines := strings.Split(
|
||||
result.Files[output.FileName], "\n")
|
||||
|
||||
// Generate Myers diff
|
||||
diffOps := myersDiff(stdoutLines, resultLines,
|
||||
output.CompareSpace)
|
||||
if output.MaxDiffLength == 0 { // real default value
|
||||
output.MaxDiffLength = 2048
|
||||
}
|
||||
// Convert answer to string and split by lines
|
||||
answerStr := string(answer)
|
||||
resultStr := result.Files[output.FileName]
|
||||
if len(answerStr) > output.MaxDiffLength {
|
||||
answerStr = answerStr[:output.MaxDiffLength]
|
||||
}
|
||||
if len(resultStr) > output.MaxDiffLength {
|
||||
resultStr = resultStr[:output.MaxDiffLength]
|
||||
}
|
||||
answerLines := strings.Split(answerStr, "\n")
|
||||
resultLines := strings.Split(resultStr, "\n")
|
||||
// Generate Myers diff
|
||||
diffOps := myersDiff(answerLines, resultLines,
|
||||
output.CompareSpace)
|
||||
// Generate diff block with surrounding context
|
||||
diffOutput := generateDiffWithContext(
|
||||
stdoutLines,
|
||||
answerLines,
|
||||
resultLines,
|
||||
diffOps,
|
||||
output.MaxDiffLength,
|
||||
|
|
Loading…
Reference in New Issue
Block a user