on main help sign in
refactor(diffview): make code a little bit shorter
3ece67aAndrey Nering
internal/exp/diffview/diffview.go+71−58
@@ -342,12 +342,13 @@ func (dv *DiffView) renderUnified() string {
342
342
343outer:
343outer:
344 for i, h := range dv.unified.Hunks {
344 for i, h := range dv.unified.Hunks {
345+ ls := dv.style.DividerLine
345 if dv.lineNumbers {
346 if dv.lineNumbers {
346− write(dv.style.DividerLine.LineNumber.Render(pad("…", dv.beforeNumDigits)))
347+ write(ls.LineNumber.Render(pad("…", dv.beforeNumDigits)))
347− write(dv.style.DividerLine.LineNumber.Render(pad("…", dv.afterNumDigits)))
348+ write(ls.LineNumber.Render(pad("…", dv.afterNumDigits)))
348 }
349 }
349 content := ansi.Truncate(dv.hunkLineFor(h), dv.fullCodeWidth, "…")
350 content := ansi.Truncate(dv.hunkLineFor(h), dv.fullCodeWidth, "…")
350− write(dv.style.DividerLine.Code.Width(dv.fullCodeWidth).Render(content))
351+ write(ls.Code.Width(dv.fullCodeWidth).Render(content))
351 write("\n")
352 write("\n")
352 printedLines++
353 printedLines++
353
354
@@ -360,13 +361,13 @@ outer:
360 isLastHunk := i+1 == len(dv.unified.Hunks)
361 isLastHunk := i+1 == len(dv.unified.Hunks)
361 isLastLine := j+1 == len(h.Lines)
362 isLastLine := j+1 == len(h.Lines)
362 if hasReachedHeight && (!isLastHunk || !isLastLine) {
363 if hasReachedHeight && (!isLastHunk || !isLastLine) {
363− lineStyle := dv.lineStyleForType(l.Kind)
364+ ls := dv.lineStyleForType(l.Kind)
364 if dv.lineNumbers {
365 if dv.lineNumbers {
365− write(lineStyle.LineNumber.Render(pad("…", dv.beforeNumDigits)))
366+ write(ls.LineNumber.Render(pad("…", dv.beforeNumDigits)))
366− write(lineStyle.LineNumber.Render(pad("…", dv.afterNumDigits)))
367+ write(ls.LineNumber.Render(pad("…", dv.afterNumDigits)))
367 }
368 }
368 write(fullContentStyle.Render(
369 write(fullContentStyle.Render(
369− lineStyle.Code.Width(dv.fullCodeWidth).Render(" …"),
370+ ls.Code.Width(dv.fullCodeWidth).Render(" …"),
370 ))
371 ))
371 write("\n")
372 write("\n")
372 break outer
373 break outer
@@ -384,36 +385,39 @@ outer:
384
385
385 switch l.Kind {
386 switch l.Kind {
386 case udiff.Equal:
387 case udiff.Equal:
387− content := getContent(dv.style.EqualLine)
388+ ls := dv.style.EqualLine
389+ content := getContent(ls)
388 if dv.lineNumbers {
390 if dv.lineNumbers {
389− write(dv.style.EqualLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
391+ write(ls.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
390− write(dv.style.EqualLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
392+ write(ls.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
391 }
393 }
392 write(fullContentStyle.Render(
394 write(fullContentStyle.Render(
393− dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(ternary(leadingEllipsis, " …", " ") + content),
395+ ls.Code.Width(dv.fullCodeWidth).Render(ternary(leadingEllipsis, " …", " ") + content),
394 ))
396 ))
395 beforeLine++
397 beforeLine++
396 afterLine++
398 afterLine++
397 case udiff.Insert:
399 case udiff.Insert:
398− content := getContent(dv.style.InsertLine)
400+ ls := dv.style.InsertLine
401+ content := getContent(ls)
399 if dv.lineNumbers {
402 if dv.lineNumbers {
400− write(dv.style.InsertLine.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
403+ write(ls.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
401− write(dv.style.InsertLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
404+ write(ls.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
402 }
405 }
403 write(fullContentStyle.Render(
406 write(fullContentStyle.Render(
404− dv.style.InsertLine.Symbol.Render(ternary(leadingEllipsis, "+…", "+ ")) +
407+ ls.Symbol.Render(ternary(leadingEllipsis, "+…", "+ ")) +
405− dv.style.InsertLine.Code.Width(dv.codeWidth).Render(content),
408+ ls.Code.Width(dv.codeWidth).Render(content),
406 ))
409 ))
407 afterLine++
410 afterLine++
408 case udiff.Delete:
411 case udiff.Delete:
409− content := getContent(dv.style.DeleteLine)
412+ ls := dv.style.DeleteLine
413+ content := getContent(ls)
410 if dv.lineNumbers {
414 if dv.lineNumbers {
411− write(dv.style.DeleteLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
415+ write(ls.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
412− write(dv.style.DeleteLine.LineNumber.Render(pad(" ", dv.afterNumDigits)))
416+ write(ls.LineNumber.Render(pad(" ", dv.afterNumDigits)))
413 }
417 }
414 write(fullContentStyle.Render(
418 write(fullContentStyle.Render(
415− dv.style.DeleteLine.Symbol.Render(ternary(leadingEllipsis, "-…", "- ")) +
419+ ls.Symbol.Render(ternary(leadingEllipsis, "-…", "- ")) +
416− dv.style.DeleteLine.Code.Width(dv.codeWidth).Render(content),
420+ ls.Code.Width(dv.codeWidth).Render(content),
417 ))
421 ))
418 beforeLine++
422 beforeLine++
419 }
423 }
@@ -424,11 +428,12 @@ outer:
424 }
428 }
425
429
426 for printedLines < dv.height {
430 for printedLines < dv.height {
431+ ls := dv.style.MissingLine
427 if dv.lineNumbers {
432 if dv.lineNumbers {
428− write(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
433+ write(ls.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
429− write(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.afterNumDigits)))
434+ write(ls.LineNumber.Render(pad(" ", dv.afterNumDigits)))
430 }
435 }
431− write(dv.style.MissingLine.Code.Width(dv.fullCodeWidth).Render(" "))
436+ write(ls.Code.Width(dv.fullCodeWidth).Render(" "))
432 write("\n")
437 write("\n")
433 printedLines++
438 printedLines++
434 }
439 }
@@ -452,15 +457,16 @@ func (dv *DiffView) renderSplit() string {
452
457
453outer:
458outer:
454 for i, h := range dv.splitHunks {
459 for i, h := range dv.splitHunks {
460+ ls := dv.style.DividerLine
455 if dv.lineNumbers {
461 if dv.lineNumbers {
456− write(dv.style.DividerLine.LineNumber.Render(pad("…", dv.beforeNumDigits)))
462+ write(ls.LineNumber.Render(pad("…", dv.beforeNumDigits)))
457 }
463 }
458 content := ansi.Truncate(dv.hunkLineFor(dv.unified.Hunks[i]), dv.fullCodeWidth, "…")
464 content := ansi.Truncate(dv.hunkLineFor(dv.unified.Hunks[i]), dv.fullCodeWidth, "…")
459− write(dv.style.DividerLine.Code.Width(dv.fullCodeWidth).Render(content))
465+ write(ls.Code.Width(dv.fullCodeWidth).Render(content))
460 if dv.lineNumbers {
466 if dv.lineNumbers {
461− write(dv.style.DividerLine.LineNumber.Render(pad("…", dv.afterNumDigits)))
467+ write(ls.LineNumber.Render(pad("…", dv.afterNumDigits)))
462 }
468 }
463− write(dv.style.DividerLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "))
469+ write(ls.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "))
464 write("\n")
470 write("\n")
465 printedLines++
471 printedLines++
466
472
@@ -473,25 +479,25 @@ outer:
473 isLastHunk := i+1 == len(dv.unified.Hunks)
479 isLastHunk := i+1 == len(dv.unified.Hunks)
474 isLastLine := j+1 == len(h.lines)
480 isLastLine := j+1 == len(h.lines)
475 if hasReachedHeight && (!isLastHunk || !isLastLine) {
481 if hasReachedHeight && (!isLastHunk || !isLastLine) {
476− lineStyle := dv.style.MissingLine
482+ ls := dv.style.MissingLine
477 if l.before != nil {
483 if l.before != nil {
478− lineStyle = dv.lineStyleForType(l.before.Kind)
484+ ls = dv.lineStyleForType(l.before.Kind)
479 }
485 }
480 if dv.lineNumbers {
486 if dv.lineNumbers {
481− write(lineStyle.LineNumber.Render(pad("…", dv.beforeNumDigits)))
487+ write(ls.LineNumber.Render(pad("…", dv.beforeNumDigits)))
482 }
488 }
483 write(beforeFullContentStyle.Render(
489 write(beforeFullContentStyle.Render(
484− lineStyle.Code.Width(dv.fullCodeWidth).Render(" …"),
490+ ls.Code.Width(dv.fullCodeWidth).Render(" …"),
485 ))
491 ))
486− lineStyle = dv.style.MissingLine
492+ ls = dv.style.MissingLine
487 if l.after != nil {
493 if l.after != nil {
488− lineStyle = dv.lineStyleForType(l.after.Kind)
494+ ls = dv.lineStyleForType(l.after.Kind)
489 }
495 }
490 if dv.lineNumbers {
496 if dv.lineNumbers {
491− write(lineStyle.LineNumber.Render(pad("…", dv.afterNumDigits)))
497+ write(ls.LineNumber.Render(pad("…", dv.afterNumDigits)))
492 }
498 }
493 write(afterFullContentStyle.Render(
499 write(afterFullContentStyle.Render(
494− lineStyle.Code.Width(dv.fullCodeWidth).Render(" …"),
500+ ls.Code.Width(dv.fullCodeWidth).Render(" …"),
495 ))
501 ))
496 write("\n")
502 write("\n")
497 break outer
503 break outer
@@ -510,62 +516,68 @@ outer:
510
516
511 switch {
517 switch {
512 case l.before == nil:
518 case l.before == nil:
519+ ls := dv.style.MissingLine
513 if dv.lineNumbers {
520 if dv.lineNumbers {
514− write(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
521+ write(ls.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
515 }
522 }
516 write(beforeFullContentStyle.Render(
523 write(beforeFullContentStyle.Render(
517− dv.style.MissingLine.Code.Width(dv.fullCodeWidth).Render(" "),
524+ ls.Code.Width(dv.fullCodeWidth).Render(" "),
518 ))
525 ))
519 case l.before.Kind == udiff.Equal:
526 case l.before.Kind == udiff.Equal:
527+ ls := dv.style.EqualLine
520− content := getContent(l.before.Content, dv.style.EqualLine)
528+ content := getContent(l.before.Content, ls)
521 leadingEllipsis := getLeadingEllipsis(content)
529 leadingEllipsis := getLeadingEllipsis(content)
522 if dv.lineNumbers {
530 if dv.lineNumbers {
523− write(dv.style.EqualLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
531+ write(ls.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
524 }
532 }
525 write(beforeFullContentStyle.Render(
533 write(beforeFullContentStyle.Render(
526− dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(ternary(leadingEllipsis, " …", " ") + content),
534+ ls.Code.Width(dv.fullCodeWidth).Render(ternary(leadingEllipsis, " …", " ") + content),
527 ))
535 ))
528 beforeLine++
536 beforeLine++
529 case l.before.Kind == udiff.Delete:
537 case l.before.Kind == udiff.Delete:
538+ ls := dv.style.DeleteLine
530− content := getContent(l.before.Content, dv.style.DeleteLine)
539+ content := getContent(l.before.Content, ls)
531 leadingEllipsis := getLeadingEllipsis(content)
540 leadingEllipsis := getLeadingEllipsis(content)
532 if dv.lineNumbers {
541 if dv.lineNumbers {
533− write(dv.style.DeleteLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
542+ write(ls.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
534 }
543 }
535 write(beforeFullContentStyle.Render(
544 write(beforeFullContentStyle.Render(
536− dv.style.DeleteLine.Symbol.Render(ternary(leadingEllipsis, "-…", "- ")) +
545+ ls.Symbol.Render(ternary(leadingEllipsis, "-…", "- ")) +
537− dv.style.DeleteLine.Code.Width(dv.codeWidth).Render(content),
546+ ls.Code.Width(dv.codeWidth).Render(content),
538 ))
547 ))
539 beforeLine++
548 beforeLine++
540 }
549 }
541
550
542 switch {
551 switch {
543 case l.after == nil:
552 case l.after == nil:
553+ ls := dv.style.MissingLine
544 if dv.lineNumbers {
554 if dv.lineNumbers {
545− write(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.afterNumDigits)))
555+ write(ls.LineNumber.Render(pad(" ", dv.afterNumDigits)))
546 }
556 }
547 write(afterFullContentStyle.Render(
557 write(afterFullContentStyle.Render(
548− dv.style.MissingLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "),
558+ ls.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "),
549 ))
559 ))
550 case l.after.Kind == udiff.Equal:
560 case l.after.Kind == udiff.Equal:
561+ ls := dv.style.EqualLine
551− content := getContent(l.after.Content, dv.style.EqualLine)
562+ content := getContent(l.after.Content, ls)
552 leadingEllipsis := getLeadingEllipsis(content)
563 leadingEllipsis := getLeadingEllipsis(content)
553 if dv.lineNumbers {
564 if dv.lineNumbers {
554− write(dv.style.EqualLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
565+ write(ls.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
555 }
566 }
556 write(afterFullContentStyle.Render(
567 write(afterFullContentStyle.Render(
557− dv.style.EqualLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(ternary(leadingEllipsis, " …", " ") + content),
568+ ls.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(ternary(leadingEllipsis, " …", " ") + content),
558 ))
569 ))
559 afterLine++
570 afterLine++
560 case l.after.Kind == udiff.Insert:
571 case l.after.Kind == udiff.Insert:
572+ ls := dv.style.InsertLine
561− content := getContent(l.after.Content, dv.style.InsertLine)
573+ content := getContent(l.after.Content, ls)
562 leadingEllipsis := getLeadingEllipsis(content)
574 leadingEllipsis := getLeadingEllipsis(content)
563 if dv.lineNumbers {
575 if dv.lineNumbers {
564− write(dv.style.InsertLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
576+ write(ls.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
565 }
577 }
566 write(afterFullContentStyle.Render(
578 write(afterFullContentStyle.Render(
567− dv.style.InsertLine.Symbol.Render(ternary(leadingEllipsis, "+…", "+ ")) +
579+ ls.Symbol.Render(ternary(leadingEllipsis, "+…", "+ ")) +
568− dv.style.InsertLine.Code.Width(dv.codeWidth+btoi(dv.extraColOnAfter)).Render(content),
580+ ls.Code.Width(dv.codeWidth+btoi(dv.extraColOnAfter)).Render(content),
569 ))
581 ))
570 afterLine++
582 afterLine++
571 }
583 }
@@ -577,14 +589,15 @@ outer:
577 }
589 }
578
590
579 for printedLines < dv.height {
591 for printedLines < dv.height {
592+ ls := dv.style.MissingLine
580 if dv.lineNumbers {
593 if dv.lineNumbers {
581− write(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
594+ write(ls.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
582 }
595 }
583− write(dv.style.MissingLine.Code.Width(dv.fullCodeWidth).Render(" "))
596+ write(ls.Code.Width(dv.fullCodeWidth).Render(" "))
584 if dv.lineNumbers {
597 if dv.lineNumbers {
585− write(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.afterNumDigits)))
598+ write(ls.LineNumber.Render(pad(" ", dv.afterNumDigits)))
586 }
599 }
587− write(dv.style.MissingLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "))
600+ write(ls.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "))
588 write("\n")
601 write("\n")
589 printedLines++
602 printedLines++
590 }
603 }