// Package common code
package common import ( ) // FromInvokedAction provides access to RawValues within an InvokedAction. // It is intended for testing purposes in Sandbox (circumventing dependency issues). var FromInvokedAction func(action interface{}) (Meta, RawValues) // RawValue represents a completion candidate. type RawValue struct { Value string `json:"value"` Display string `json:"display"` Description string `json:"description,omitempty"` Style string `json:"style,omitempty"` Tag string `json:"tag,omitempty"` Uid string `json:"uid,omitempty"` } // TrimmedDescription returns the trimmed description. func ( RawValue) () string { := 80 := strings.SplitN(.Description, "\n", 2)[0] = strings.TrimSpace() if len([]rune()) > { = string([]rune()[:-3]) + "..." } return } // RawValues is an alias for []RawValue. type RawValues []RawValue // RawValuesFrom creates RawValues from given values. func ( ...string) RawValues { := make([]RawValue, len()) for , := range { [] = RawValue{Value: , Display: , Style: style.Default} } return } func ( RawValues) () RawValues { := make(map[string]RawValue) for , := range { [.Value] = } := make([]RawValue, 0, len()) for , := range { = append(, ) } sort.Sort(ByDisplay()) return } func ( RawValues) ( string) bool { for , := range { if .Value == { return true } } return false } // Filter filters values. func ( RawValues) ( ...string) RawValues { := make(map[string]bool) for , := range { [] = true } := make([]RawValue, 0) for , := range { if , := [.Value]; ! { = append(, ) } } return } // Retain retains given values. func ( RawValues) ( ...string) RawValues { := make(map[string]bool) for , := range { [] = true } := make([]RawValue, 0) for , := range { if , := [.Value]; { = append(, ) } } return } // Decolor clears style for all values. func ( RawValues) () RawValues { := make(RawValues, len()) for , := range { .Style = "" [] = } return } // FilterPrefix filters values with given prefix. func ( RawValues) ( string) RawValues { := make(RawValues, 0) for , := range { if match.HasPrefix(.Value, ) { = append(, ) } } return } func ( RawValues) ( func( string, RawValues)) { := make(map[string]RawValues) for , := range { if , := [.Tag]; ! { [.Tag] = make(RawValues, 0) } [.Tag] = append([.Tag], ) } := make([]string, 0) for := range { = append(, ) } sort.Strings() for , := range { (, []) } } // ByValue alias to filter by value. type ByValue []RawValue func ( ByValue) () int { return len() } func ( ByValue) (, int) bool { return [].Value < [].Value } func ( ByValue) (, int) { [], [] = [], [] } // ByDisplay alias to filter by display. type ByDisplay []RawValue func ( ByDisplay) () int { return len() } func ( ByDisplay) (, int) bool { return [].Display < [].Display } func ( ByDisplay) (, int) { [], [] = [], [] }