/
githubmirror
/
pop
Обзор
Документация
Войти
/
githubmirror
/
pop
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
fix/anko.go
66 строк
1 KB
Mark Bates
uses less deps and more mod aware pkgs (#515)
19 янв 2020, 13:21
19 янв 2020, 13:21
1de8f39
Код
Авторство
О чём код?
package fix import ( "bytes" "fmt" "regexp" "strings" "github.com/gobuffalo/plush/v4" ) // Anko converts old anko-form migrations to new plush ones. func Anko(content string) (string, error) { bb := &bytes.Buffer{} lines := strings.Split(content, "\n") l := len(lines) fre := regexp.MustCompile(`,\s*func\(t\)\s*{`) for i := 0; i < l; i++ { line := lines[i] tl := strings.TrimSpace(line) if strings.HasPrefix(tl, "create_table") { // skip already converted create_table if fre.MatchString(line) { // fix create_table line = fre.ReplaceAllString(line, ") {") ll := i lines[i] = line waitParen := false for { if strings.HasPrefix(tl, "})") { line = "}" + tl[2:] break } else if strings.HasPrefix(tl, "}") { // Now, we have to make sure to match the missing ")" waitParen = true } else if waitParen && strings.HasPrefix(tl, ")") { line = tl[1:] break } i++ if l == i { return "", fmt.Errorf("unclosed create_table statement line %d", ll+1) } line = lines[i] tl = strings.TrimSpace(line) } } } else if strings.HasPrefix(tl, "raw(") { // fix raw line = strings.Replace(line, "raw(", "sql(", -1) } lines[i] = line } body := strings.Join(lines, "\n") if _, err := plush.Parse(body); err != nil { return "", err } bb.WriteString(body) return bb.String(), nil }