ok, diky za info. nenapadlo by ma ze spravit regex ktory len vyhlada funkciu ktorej telo medzi {} moze byt hocico(tzn len naparuje tu zatvorku) je taky problem.
tak som si spravil skript na to na koniec. na kolene na rychlo ale funguje:
package main
import (
"bufio"
"bytes"
"errors"
"io"
"os"
"path/filepath"
)
func main() {
args := os.Args
if len(args) != 2 {
println("missing file argument")
return
}
src, err := os.OpenFile(filepath.Clean(args[1]), os.O_RDWR, 0666)
if err != nil {
println(err.Error())
return
}
defer func() {
if err := src.Close(); err != nil && errors.Is(err, os.ErrClosed) == false {
println(err.Error())
}
}()
s := bufio.NewScanner(src)
s.Split(bufio.ScanLines)
fTok := []byte("func ")
openTok := []byte{'{'}
closeTok := []byte{'}'}
emptyTok := []byte{'{', '}'}
matches := make([][]byte, 0, 500)
var match bool
for {
if s.Scan() == false {
break
}
if match == false {
if bytes.HasPrefix(s.Bytes(), fTok) && (bytes.HasSuffix(s.Bytes(), openTok) || bytes.HasSuffix(s.Bytes(), emptyTok)) {
matches = append(matches, append(make([]byte, 0, len(s.Bytes())), s.Bytes()...))
matches[len(matches)-1] = append(matches[len(matches)-1], '\n')
match = bytes.HasSuffix(s.Bytes(), openTok)
}
} else {
matches[len(matches)-1] = append(matches[len(matches)-1], s.Bytes()...)
matches[len(matches)-1] = append(matches[len(matches)-1], '\n')
match = bytes.Equal(s.Bytes(), closeTok) == false
}
}
if len(matches) == 0 {
return
}
if _, err := src.Seek(0, io.SeekStart); err != nil {
println(err.Error())
return
}
data, err := io.ReadAll(src)
if err != nil {
println(err.Error())
return
}
for k := range matches {
data = bytes.Replace(data, matches[k], nil, 1)
}
if _, err := src.Seek(0, io.SeekStart); err != nil {
println(err.Error())
return
}
if err := src.Truncate(0); err != nil {
println(err.Error())
return
}
if _, err := src.Write(data); err != nil {
println(err.Error())
return
}
}