+ Сценарий: Добавление функции к существующей + без дубликаций

Этот коммит содержится в:
Softonik 2025-06-05 03:50:32 +03:00
родитель 9ad168ae70
коммит af6027bad2
4 изменённых файлов: 143 добавлений и 4 удалений

Просмотреть файл

@ -62,9 +62,26 @@ func (a *ASTer) спарситьФайлиДобавитьФункцию(func_na
} }
fun := a.создатьФункцию(func_name, ps) fun := a.создатьФункцию(func_name, ps)
a.node.Decls = append(a.node.Decls, fun) a.добавитьФункциюЕслиНету(fun)
return nil return nil
} }
func (a *ASTer) добавитьФункциюЕслиНету(fun *ast.FuncDecl) {
for _, d := range a.node.Decls {
f, ok := d.(*ast.FuncDecl)
if !ok {
continue
}
if f.Name == nil {
continue
}
if f.Name.Name == fun.Name.Name {
return
}
}
a.node.Decls = append(a.node.Decls, fun)
}
func (a *ASTer) спарситьФайл() error { func (a *ASTer) спарситьФайл() error {
fset := token.NewFileSet() fset := token.NewFileSet()
node, err := parser.ParseFile(fset, a.fname, nil, parser.ParseComments) node, err := parser.ParseFile(fset, a.fname, nil, parser.ParseComments)

Просмотреть файл

@ -24,7 +24,7 @@ func resetTestData() {
t = &testData{} t = &testData{}
} }
func beforeSuite() { func beforeSuite() {
CharactersAroundMismatchToInclude = 20 CharactersAroundMismatchToInclude = 50
} }
func afterSuite() { func afterSuite() {
} }

Просмотреть файл

@ -2,12 +2,11 @@
Функционал: AST-редактир go-файлов Функционал: AST-редактир go-файлов
Сгенерированные функции автоматически добавляются в тест-файл текущего пакета Сгенерированные функции автоматически добавляются в тест-файл текущего пакета
Контекст: Сценарий: Добавление функции
Дано Файл "mypkg_test.go": Дано Файл "mypkg_test.go":
``` ```
package mypkg package mypkg
``` ```
Сценарий: Добавление функции
Когда Добавляется функция "ПриветМир" Когда Добавляется функция "ПриветМир"
То Файл "mypkg_test.go" должен содержать: То Файл "mypkg_test.go" должен содержать:
``` ```
@ -19,6 +18,10 @@
``` ```
Сценарий: Добавление функции с параметрами: int Сценарий: Добавление функции с параметрами: int
Дано Файл "mypkg_test.go":
```
package mypkg
```
Дано Параметр: "arg1", "int" Дано Параметр: "arg1", "int"
Когда Добавляется функция "ПриветМир" Когда Добавляется функция "ПриветМир"
То Файл "mypkg_test.go" должен содержать: То Файл "mypkg_test.go" должен содержать:
@ -31,6 +34,10 @@
``` ```
Сценарий: Добавление функции с параметрами: int, string Сценарий: Добавление функции с параметрами: int, string
Дано Файл "mypkg_test.go":
```
package mypkg
```
Дано Параметр: "arg1", "int" Дано Параметр: "arg1", "int"
Дано Параметр: "arg2", "string" Дано Параметр: "arg2", "string"
Когда Добавляется функция "ПриветМир" Когда Добавляется функция "ПриветМир"
@ -44,6 +51,10 @@
``` ```
Сценарий: Добавление функции с параметрами: string, int Сценарий: Добавление функции с параметрами: string, int
Дано Файл "mypkg_test.go":
```
package mypkg
```
Дано Параметр: "arg1", "string" Дано Параметр: "arg1", "string"
Дано Параметр: "arg2", "int" Дано Параметр: "arg2", "int"
Когда Добавляется функция "ПриветМир" Когда Добавляется функция "ПриветМир"
@ -55,3 +66,68 @@
} }
``` ```
Сценарий: Добавление функции к существующей
Дано Файл "mypkg_test.go":
```
package mypkg
func СделатьЧтото(arg1 string, arg2 int) {
a := 1
}
```
Дано Параметр: "arg1", "int"
Когда Добавляется функция "ПриветМир"
То Файл "mypkg_test.go" должен содержать:
```
package mypkg
func СделатьЧтото(arg1 string, arg2 int) {
a := 1
}
func ПриветМир(arg1 int) {
}
```
Сценарий: Не добавляет если такая функция уже есть
Дано Файл "mypkg_test.go":
```
package mypkg
func ПриветМир(arg1 string, arg2 int) {
a := 1
}
```
Дано Параметр: "arg1", "int"
Когда Добавляется функция "ПриветМир"
Когда Добавляется функция "ПриветМир"
То Файл "mypkg_test.go" должен содержать:
```
package mypkg
func ПриветМир(arg1 string, arg2 int) {
a := 1
}
```
Сценарий: Не добавляет второй раз
Дано Файл "mypkg_test.go":
```
package mypkg
```
Дано Параметр: "arg1", "int"
Когда Добавляется функция "ПриветМир"
Когда Добавляется функция "ПриветМир"
То Файл "mypkg_test.go" должен содержать:
```
package mypkg
func ПриветМир(arg1 int) {
}
```

46
pkg/lib/lib.go Обычный файл
Просмотреть файл

@ -0,0 +1,46 @@
package lib
import (
"io"
"os"
)
func ReadFile(path string) (string, error) {
ret, err := os.ReadFile(path)
if err != nil {
return "", err
}
return string(ret), nil
}
func WriteFile(path, data string) error {
return os.WriteFile(path, []byte(data), 0644)
}
func CopyFile(src, dst string) (err error) {
in, err := os.Open(src)
if err != nil {
return
}
defer in.Close()
out, err := os.Create(dst)
if err != nil {
return
}
defer func() {
cerr := out.Close()
if err == nil {
err = cerr
}
}()
if _, err = io.Copy(out, in); err != nil {
return
}
err = out.Sync()
return
}