From af6027bad2ae9515edbb12f1a940f673daf8a89f Mon Sep 17 00:00:00 2001 From: Softonik Date: Thu, 5 Jun 2025 03:50:32 +0300 Subject: [PATCH] =?UTF-8?q?+=20=20=D0=A1=D1=86=D0=B5=D0=BD=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D0=B9:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=BA=20=D1=81=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2=D1=83?= =?UTF-8?q?=D1=8E=D1=89=D0=B5=D0=B9=20+=20=D0=B1=D0=B5=D0=B7=20=D0=B4?= =?UTF-8?q?=D1=83=D0=B1=D0=BB=D0=B8=D0=BA=D0=B0=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/formatters/ast/ast.go | 19 +++++- pkg/formatters/ast/ast_test.go | 2 +- pkg/formatters/ast/features/app.feature | 80 ++++++++++++++++++++++++- pkg/lib/lib.go | 46 ++++++++++++++ 4 files changed, 143 insertions(+), 4 deletions(-) create mode 100644 pkg/lib/lib.go diff --git a/pkg/formatters/ast/ast.go b/pkg/formatters/ast/ast.go index 58f7aee..d7293b9 100644 --- a/pkg/formatters/ast/ast.go +++ b/pkg/formatters/ast/ast.go @@ -62,9 +62,26 @@ func (a *ASTer) спарситьФайлиДобавитьФункцию(func_na } fun := a.создатьФункцию(func_name, ps) - a.node.Decls = append(a.node.Decls, fun) + a.добавитьФункциюЕслиНету(fun) 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 { fset := token.NewFileSet() node, err := parser.ParseFile(fset, a.fname, nil, parser.ParseComments) diff --git a/pkg/formatters/ast/ast_test.go b/pkg/formatters/ast/ast_test.go index 8a247fc..aca0ba5 100644 --- a/pkg/formatters/ast/ast_test.go +++ b/pkg/formatters/ast/ast_test.go @@ -24,7 +24,7 @@ func resetTestData() { t = &testData{} } func beforeSuite() { - CharactersAroundMismatchToInclude = 20 + CharactersAroundMismatchToInclude = 50 } func afterSuite() { } diff --git a/pkg/formatters/ast/features/app.feature b/pkg/formatters/ast/features/app.feature index 0a61b81..f9fbaad 100644 --- a/pkg/formatters/ast/features/app.feature +++ b/pkg/formatters/ast/features/app.feature @@ -2,12 +2,11 @@ Функционал: AST-редактир go-файлов Сгенерированные функции автоматически добавляются в тест-файл текущего пакета - Контекст: + Сценарий: Добавление функции Дано Файл "mypkg_test.go": ``` package mypkg ``` - Сценарий: Добавление функции Когда Добавляется функция "ПриветМир" То Файл "mypkg_test.go" должен содержать: ``` @@ -19,6 +18,10 @@ ``` Сценарий: Добавление функции с параметрами: int + Дано Файл "mypkg_test.go": + ``` + package mypkg + ``` Дано Параметр: "arg1", "int" Когда Добавляется функция "ПриветМир" То Файл "mypkg_test.go" должен содержать: @@ -31,6 +34,10 @@ ``` Сценарий: Добавление функции с параметрами: int, string + Дано Файл "mypkg_test.go": + ``` + package mypkg + ``` Дано Параметр: "arg1", "int" Дано Параметр: "arg2", "string" Когда Добавляется функция "ПриветМир" @@ -44,6 +51,10 @@ ``` Сценарий: Добавление функции с параметрами: string, int + Дано Файл "mypkg_test.go": + ``` + package mypkg + ``` Дано Параметр: "arg1", "string" Дано Параметр: "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) { + } + + ``` diff --git a/pkg/lib/lib.go b/pkg/lib/lib.go new file mode 100644 index 0000000..647d7d8 --- /dev/null +++ b/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 +}