Repository: jesseduffield/lazygit
File: pkg/gui/controllers/scroll_off_margin.go (Go)

Code before:
package controllers

import (
	"github.com/jesseduffield/lazygit/pkg/gui/types"
	"github.com/jesseduffield/lazygit/pkg/utils"
)

// To be called after pressing up-arrow; checks whether the cursor entered the
// top scroll-off margin, and so the view needs to be scrolled up one line
func checkScrollUp(view types.IViewTrait, scrollOffMargin int, lineIdxBefore int, lineIdxAfter int) {
	viewPortStart, viewPortHeight := view.ViewPortYBounds()

	if linesToScroll := calculateLinesToScrollUp(
		viewPortStart, viewPortHeight, scrollOffMargin, lineIdxBefore, lineIdxAfter); linesToScroll != 0 {
		view.ScrollUp(linesToScroll)
	}
}

// To be called after pressing down-arrow; checks whether the cursor entered the
// bottom scroll-off margin, and so the view needs to be scrolled down one line
func checkScrollDown(view types.IViewTrait, scrollOffMargin int, lineIdxBefore int, lineIdxAfter int) {
	viewPortStart, viewPortHeight := view.ViewPortYBounds()

	if linesToScroll := calculateLinesToScrollDown(
		viewPortStart, viewPortHeight, scrollOffMargin, lineIdxBefore, lineIdxAfter); linesToScroll != 0 {
		view.ScrollDown(linesToScroll)
	}
}

func calculateLinesToScrollUp(viewPortStart int, viewPortHeight int, scrollOffMargin int, lineIdxBefore int, lineIdxAfter int) int {
	// Cap the margin to half the view height. This allows setting the config to
	// a very large value to keep the cursor always in the middle of the screen.
	// Use +.5 so that if the height is even, the top margin is one line higher
	// than the bottom margin.
	scrollOffMargin = utils.Min(scrollOffMargin, int((float64(viewPortHeight)+.5)/2))

	// Scroll only if the "before" position was visible (this could be false if
	// the scroll wheel was used to scroll the selected line out of view) ...

Review comment (suggestion):
```suggestion
	linesToScroll := calculateLinesToScrollUp(
		viewPortStart, viewPortHeight, scrollOffMargin, lineIdxBefore, lineIdxAfter,
	)
	if linesToScroll != 0 {
		view.ScrollUp(linesToScroll)
	}
```
I struggle to read multi-line if statements

Code after:
package controllers

import (
	"github.com/jesseduffield/lazygit/pkg/gui/types"
	"github.com/jesseduffield/lazygit/pkg/utils"
)

// To be called after pressing up-arrow; checks whether the cursor entered the
// top scroll-off margin, and so the view needs to be scrolled up one line
func checkScrollUp(view types.IViewTrait, scrollOffMargin int, lineIdxBefore int, lineIdxAfter int) {
	viewPortStart, viewPortHeight := view.ViewPortYBounds()

	linesToScroll := calculateLinesToScrollUp(
		viewPortStart, viewPortHeight, scrollOffMargin, lineIdxBefore, lineIdxAfter)
	if linesToScroll != 0 {
		view.ScrollUp(linesToScroll)
	}
}

// To be called after pressing down-arrow; checks whether the cursor entered the
// bottom scroll-off margin, and so the view needs to be scrolled down one line
func checkScrollDown(view types.IViewTrait, scrollOffMargin int, lineIdxBefore int, lineIdxAfter int) {
	viewPortStart, viewPortHeight := view.ViewPortYBounds()

	linesToScroll := calculateLinesToScrollDown(
		viewPortStart, viewPortHeight, scrollOffMargin, lineIdxBefore, lineIdxAfter)
	if linesToScroll != 0 {
		view.ScrollDown(linesToScroll)
	}
}

func calculateLinesToScrollUp(viewPortStart int, viewPortHeight int, scrollOffMargin int, lineIdxBefore int, lineIdxAfter int) int {
	// Cap the margin to half the view height. This allows setting the config to
	// a very large value to keep the cursor always in the middle of the screen.
	// Use +.5 so that if the height is even, the top margin is one line higher
	// than the bottom margin.
	scrollOffMargin = utils.Min(scrollOffMargin, int((float64(viewPortHeight)+.5)/2))