Documentation ¶
Index ¶
- Constants
- func AsJson(i interface{}) string
- func CaseAwareContains(haystack, needle string) bool
- func CaseInsensitiveContains(haystack, needle string) bool
- func Clamp(x int, min int, max int) int
- func ContainsUppercase(s string) bool
- func Decolorise(str string) string
- func DeleteTodos(fileName string, todosToDelete []Todo, commentChar byte) ([]byte, error)
- func EditRebaseTodo(filePath string, changes []TodoChange, commentChar byte) error
- func EscapeSpecialChars(str string) string
- func FilePath(skip int) string
- func FilterStrings(needle string, haystack []string, useFuzzySearch bool) []string
- func Find(pattern string, data []string, useFuzzySearch bool) fuzzy.Matches
- func FindFrom(pattern string, data fuzzy.Source, useFuzzySearch bool) fuzzy.Matches
- func FindNamedMatches(regex *regexp.Regexp, str string) map[string]string
- func FindStringSubmatch(str string, regexpStr string) (bool, []string)
- func FindSubstrings(pattern string, data []string) fuzzy.Matches
- func FindSubstringsFrom(pattern string, data fuzzy.Source) fuzzy.Matches
- func ForEachLineInFile(path string, f func(string, int)) error
- func FormatPaths(paths []string) string
- func GetProjectRoot() string
- func IsValidHexValue(v string) bool
- func Limit(values []string, limit int) []string
- func LimitStr(value string, limit int) string
- func Loader(now time.Time, config config.SpinnerConfig) string
- func MaxFn[T any](items []T, fn func(T) int) int
- func ModuloWithWrap(n, max int) int
- func Move[T any](slice []T, fromIndex int, toIndex int) []T
- func MoveElement[T any](slice []T, from int, to int) []T
- func MoveFixupCommitDown(fileName string, originalSha string, fixupSha string, commentChar byte) error
- func MoveTodosDown(fileName string, todosToMove []Todo, commentChar byte) error
- func MoveTodosUp(fileName string, todosToMove []Todo, commentChar byte) error
- func MuiltiGroupBy[T any, K comparable](slice []T, f func(T) []K) map[K][]T
- func MustConvertToInt(s string) int
- func NewDummyCommon() *common.Common
- func NewDummyCommonWithUserConfigAndAppState(userConfig *config.UserConfig, appState *config.AppState) *common.Common
- func NewDummyLog() *logrus.Entry
- func NextIndex(numbers []int, currentNumber int) int
- func NextIntInCycle(sl []int, current int) int
- func NormalizeLinefeeds(str string) string
- func Partition[T any](slice []T, test func(T) bool) ([]T, []T)
- func Pop[T any](slice []T) (T, []T)
- func Prepend[T any](slice []T, values ...T) []T
- func PrependStrToTodoFile(filePath string, linesToPrepend []byte) error
- func PrevIndex(numbers []int, currentNumber int) int
- func PrevIntInCycle(sl []int, current int) int
- func ReadRebaseTodoFile(fileName string, commentChar byte) ([]todo.Todo, error)
- func Remove[T any](slice []T, index int) []T
- func RenderDisplayStrings(displayStringsArr [][]string, columnAlignments []Alignment) ([]string, []int)
- func ResolvePlaceholderString(str string, arguments map[string]string) string
- func ResolveTemplate(templateStr string, object interface{}, funcs template.FuncMap) (string, error)
- func Safe(f func())
- func SafeTruncate(str string, limit int) string
- func SafeWithError(f func() error) error
- func SetCustomColors(customColors map[string]string) map[string]style.TextStyle
- func Shift[T any](slice []T) (T, []T)
- func ShortSha(sha string) string
- func SortRange(x int, y int) (int, int)
- func SplitLines(multilineString string) []string
- func SplitNul(str string) []string
- func StackTrace() string
- func StringArraysOverlap(strArrA []string, strArrB []string) bool
- func TruncateWithEllipsis(str string, limit int) string
- func UnixToDateSmart(now time.Time, timestamp int64, longTimeFormat string, shortTimeFormat string) string
- func UnixToTimeAgo(timestamp int64) string
- func ValuesAtIndices[T any](slice []T, indices []int) []T
- func WithPadding(str string, padding int, alignment Alignment) string
- func WrapError(err error) error
- func WriteRebaseTodoFile(fileName string, todos []todo.Todo, commentChar byte) error
- type Alignment
- type ColumnConfig
- type HistoryBuffer
- type OnceWriter
- type StringStack
- type ThreadSafeMap
- func (m *ThreadSafeMap[K, V]) Clear()
- func (m *ThreadSafeMap[K, V]) Delete(key K)
- func (m *ThreadSafeMap[K, V]) Get(key K) (V, bool)
- func (m *ThreadSafeMap[K, V]) Has(key K) bool
- func (m *ThreadSafeMap[K, V]) IsEmpty() bool
- func (m *ThreadSafeMap[K, V]) Keys() []K
- func (m *ThreadSafeMap[K, V]) Len() int
- func (m *ThreadSafeMap[K, V]) Set(key K, value V)
- func (m *ThreadSafeMap[K, V]) Values() []V
- type Todo
- type TodoChange
Constants ¶
const ( SECONDS_IN_SECOND = 1 SECONDS_IN_MINUTE = 60 SECONDS_IN_HOUR = 3600 SECONDS_IN_DAY = 86400 SECONDS_IN_WEEK = 604800 SECONDS_IN_YEAR = 31536000 SECONDS_IN_MONTH = SECONDS_IN_YEAR / 12 )
const COMMIT_HASH_SHORT_SIZE = 8
Variables ¶
This section is empty.
Functions ¶
func CaseAwareContains ¶
func CaseInsensitiveContains ¶
func ContainsUppercase ¶
func DeleteTodos ¶
Unlike the other functions in this file, which write the changed todos file back to disk, this one returns the new content as a byte slice. This is because when deleting update-ref todos, we must perform a "git rebase --edit-todo" command to pass the changed todos to git so that it can do some housekeeping around the deleted todos. This can only be done by our caller.
func EditRebaseTodo ¶
func EditRebaseTodo(filePath string, changes []TodoChange, commentChar byte) error
Read a git-rebase-todo file, change the actions for the given commits, and write it back
func EscapeSpecialChars ¶
EscapeSpecialChars - Replaces all special chars like \n with \\n
func FilePath ¶
returns the path of the file that calls the function. 'skip' is the number of stack frames to skip.
func FilterStrings ¶
func FindSubstrings ¶
Drop-in replacement for fuzzy.Find (except that it doesn't fill out MatchedIndexes or Score, but we are not using these)
func FindSubstringsFrom ¶
Drop-in replacement for fuzzy.FindFrom (except that it doesn't fill out MatchedIndexes or Score, but we are not using these)
func FormatPaths ¶
Returns comma-separated list of paths, with ellipsis if there are more than 3 e.g. "foo, bar, baz, [...3 more]"
func GetProjectRoot ¶
func GetProjectRoot() string
GetProjectRoot returns the path to the root of the project. Only to be used in testing contexts, as with binaries it's unlikely this path will exist on the machine
func IsValidHexValue ¶
func Loader ¶
func Loader(now time.Time, config config.SpinnerConfig) string
Loader dumps a string to be displayed as a loader
func ModuloWithWrap ¶
used to keep a number n between 0 and max, allowing for wraparounds
func Move ¶
Removes the element at the 'fromIndex' and then inserts it at 'toIndex'. Operates on the input slice. Expected use is to reassign the result to the input slice.
func MoveElement ¶
Returns a new slice with the element at index 'from' moved to index 'to'. Does not mutate original slice.
func MoveFixupCommitDown ¶
func MoveTodosDown ¶
func MuiltiGroupBy ¶
func MuiltiGroupBy[T any, K comparable](slice []T, f func(T) []K) map[K][]T
Similar to a regular GroupBy, except that each item can be grouped under multiple keys, so the callback returns a slice of keys instead of just one key.
func MustConvertToInt ¶
func NewDummyCommon ¶
func NextIntInCycle ¶
NextIntInCycle returns the next int in a slice, returning to the first index if we've reached the end
func NormalizeLinefeeds ¶
NormalizeLinefeeds - Removes all Windows and Mac style line feeds
func Partition ¶
returns two slices: the first is for elements that pass the test, the second for those that don't.
func Pop ¶
func Pop[T any](slice []T) (T, []T)
Pops item from the end of the slice and returns it, along with the updated slice Mutates original slice. Intended usage is to reassign the slice result to the input slice.
func Prepend ¶
func Prepend[T any](slice []T, values ...T) []T
Prepends items to the beginning of a slice. E.g. Prepend([]int{1,2}, 3, 4) = []int{3,4,1,2} Mutates original slice. Intended usage is to reassign the slice result to the input slice.
func PrependStrToTodoFile ¶
func PrevIndex ¶
PrevIndex returns the index that comes before the given number, cycling if we reach the end
func PrevIntInCycle ¶
PrevIntInCycle returns the prev int in a slice, returning to the first index if we've reached the end
func ReadRebaseTodoFile ¶
func Remove ¶
Removes the element at the given index. Intended usage is to reassign the result to the input slice.
func RenderDisplayStrings ¶
func RenderDisplayStrings(displayStringsArr [][]string, columnAlignments []Alignment) ([]string, []int)
defaults to left-aligning each column. If you want to set the alignment of each column, pass in a slice of Alignment values. returns a list of strings that should be joined with "\n", and an array of the column positions
func ResolvePlaceholderString ¶
ResolvePlaceholderString populates a template with values
func ResolveTemplate ¶
func Safe ¶
func Safe(f func())
Safe will close tcell if a panic occurs so that we don't end up in a malformed terminal state
func SafeTruncate ¶
func SafeWithError ¶
func SetCustomColors ¶
func Shift ¶
func Shift[T any](slice []T) (T, []T)
Shifts item from the beginning of the slice and returns it, along with the updated slice. Mutates original slice. Intended usage is to reassign the slice result to the input slice.
func SplitLines ¶
SplitLines takes a multiline string and splits it on newlines currently we are also stripping \r's which may have adverse effects for windows users (but no issues have been raised yet)
func StackTrace ¶
func StackTrace() string
func StringArraysOverlap ¶
func TruncateWithEllipsis ¶
TruncateWithEllipsis returns a string, truncated to a certain length, with an ellipsis
func UnixToDateSmart ¶
func UnixToDateSmart(now time.Time, timestamp int64, longTimeFormat string, shortTimeFormat string) string
formats the date in a smart way, if the date is today, it will show the time, otherwise it will show the date
func UnixToTimeAgo ¶
func ValuesAtIndices ¶
func WithPadding ¶
WithPadding pads a string as much as you want
Types ¶
type ColumnConfig ¶
type HistoryBuffer ¶
type HistoryBuffer[T any] struct { // contains filtered or unexported fields }
func NewHistoryBuffer ¶
func NewHistoryBuffer[T any](maxSize int) *HistoryBuffer[T]
func (*HistoryBuffer[T]) PeekAt ¶
func (self *HistoryBuffer[T]) PeekAt(index int) (T, error)
func (*HistoryBuffer[T]) Push ¶
func (self *HistoryBuffer[T]) Push(item T)
type OnceWriter ¶
type OnceWriter struct {
// contains filtered or unexported fields
}
func NewOnceWriter ¶
func NewOnceWriter(writer io.Writer, f func()) *OnceWriter
type StringStack ¶
type StringStack struct {
// contains filtered or unexported fields
}
func (*StringStack) Clear ¶
func (self *StringStack) Clear()
func (*StringStack) IsEmpty ¶
func (self *StringStack) IsEmpty() bool
func (*StringStack) Pop ¶
func (self *StringStack) Pop() string
func (*StringStack) Push ¶
func (self *StringStack) Push(s string)
type ThreadSafeMap ¶
type ThreadSafeMap[K comparable, V any] struct { // contains filtered or unexported fields }
func NewThreadSafeMap ¶
func NewThreadSafeMap[K comparable, V any]() *ThreadSafeMap[K, V]
func (*ThreadSafeMap[K, V]) Clear ¶
func (m *ThreadSafeMap[K, V]) Clear()
func (*ThreadSafeMap[K, V]) Delete ¶
func (m *ThreadSafeMap[K, V]) Delete(key K)
func (*ThreadSafeMap[K, V]) Get ¶
func (m *ThreadSafeMap[K, V]) Get(key K) (V, bool)
func (*ThreadSafeMap[K, V]) Has ¶
func (m *ThreadSafeMap[K, V]) Has(key K) bool
func (*ThreadSafeMap[K, V]) IsEmpty ¶
func (m *ThreadSafeMap[K, V]) IsEmpty() bool
func (*ThreadSafeMap[K, V]) Keys ¶
func (m *ThreadSafeMap[K, V]) Keys() []K
func (*ThreadSafeMap[K, V]) Len ¶
func (m *ThreadSafeMap[K, V]) Len() int
func (*ThreadSafeMap[K, V]) Set ¶
func (m *ThreadSafeMap[K, V]) Set(key K, value V)
func (*ThreadSafeMap[K, V]) Values ¶
func (m *ThreadSafeMap[K, V]) Values() []V
type Todo ¶
type Todo struct { Sha string // for todos that have one, e.g. pick, drop, fixup, etc. Ref string // for update-ref todos Action todo.TodoCommand }
type TodoChange ¶
type TodoChange struct { Sha string OldAction todo.TodoCommand NewAction todo.TodoCommand }
In order to change a TODO in git-rebase-todo, we need to specify the old action, because sometimes the same sha appears multiple times in the file (e.g. in a pick and later in a merge)