You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fx/internal/complete/utils.go

80 lines
1.5 KiB
Go

package complete
import (
"fmt"
"os"
"regexp"
"strings"
)
func compReply(reply []string) {
for _, word := range reply {
fmt.Println(word)
}
}
func filterReply(reply []string, compWord string) []string {
var filtered []string
for _, word := range reply {
if strings.HasPrefix(word, compWord) {
filtered = append(filtered, word)
}
}
return filtered
}
func isFile(path string) bool {
info, err := os.Stat(path)
if err != nil {
return false
}
return !info.IsDir()
}
var tailRe = regexp.MustCompile(`\.?\w*$`)
func dropTail(s string) string {
return tailRe.ReplaceAllString(s, "")
}
func balanceBrackets(code string) string {
var stack []rune
brackets := map[rune]rune{')': '(', '}': '{', ']': '['}
reverseBrackets := map[rune]rune{'(': ')', '{': '}', '[': ']'}
for _, char := range code {
switch char {
case '(', '{', '[':
stack = append(stack, char)
case ')', '}', ']':
if len(stack) > 0 && brackets[char] == stack[len(stack)-1] {
stack = stack[:len(stack)-1] // Pop
}
}
}
for i := len(stack) - 1; i >= 0; i-- {
code += string(reverseBrackets[stack[i]])
}
return code
}
func lastWord(line string) string {
words := strings.Split(line, " ")
var s string
if len(words) > 0 {
s = words[len(words)-1]
}
return s
}
func debug(args ...interface{}) {
file, err := os.OpenFile("complete.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
return
}
_, _ = fmt.Fprintln(file, args...)
_ = file.Close()
}