Перейти к содержанию

CLI аргументы argen

Справочник аргументов командной строки argen.

Синтаксис

argen [OPTIONS]

Обязательные аргументы

Аргумент Описание
--path Путь к модели (не может начинаться с .)

Опциональные аргументы

Аргумент По умолчанию Описание
--declaration declaration Папка с декларациями
--destination generated Папка для сгенерированного кода
--module из go.mod Имя модуля
--fixture_path - Путь для тестовых фикстур
--schema-output - Файл для DDL схемы

Примеры

Базовое использование

argen --path "model/repository" \
      --declaration "declaration" \
      --destination "generated"

С фикстурами

argen --path "model/repository" \
      --declaration "decl" \
      --destination "cmpl" \
      --fixture_path "testutil/fixture"

С явным модулем

argen --path "model/repository" \
      --module "github.com/myorg/myapp"

Генерация DDL

argen --path "model/repository" \
      --schema-output database/schema.sql

Структура путей

project/
├── go.mod                    # Модуль определяется отсюда
├── model/
│   └── repository/           # --path
│       ├── declaration/      # --declaration (относительно path)
│       │   ├── user.go
│       │   └── product.go
│       └── generated/        # --destination (относительно path)
│           ├── .argen        # Маркер-файл
│           ├── user/
│           └── product/
└── testutil/
    └── fixture/              # --fixture_path
        └── fixture/
            └── data/

Маркер-файл .argen

При первой генерации создаётся файл .argen в папке назначения:

model/repository/generated/.argen

Назначение:

  • Защита от случайной генерации в неправильную директорию
  • При отсутствии argen откажется генерировать код

Не удаляйте .argen

Удаление маркера заблокирует генерацию.

Поведение

Удаление файлов

При каждом запуске все .go файлы в папке назначения удаляются и создаются заново.

Не редактируйте сгенерированный код

Изменения будут потеряны при следующей генерации.

Именование пакетов

Имя сгенерированного пакета берётся из имени структуры Fields*:

type FieldsUser struct { ... }   // → пакет "user"
type FieldsProduct struct { ... } // → пакет "product"

Ограничения:

  • Regex: ^[a-z]{1,20}$
  • Только строчные буквы
  • Максимум 20 символов

Проверка версии

argen --version

Вывод:

argen version v3.1.21 (abc12345) built 20240115-1200 on linux

Справка

argen --help

Интеграция с Make

.PHONY: generate-models
generate-models: ## Generate ActiveRecord models
    argen --path "model/repository" \
          --declaration "declaration" \
          --destination "generated"

.PHONY: generate-fixtures
generate-fixtures: ## Generate test fixtures
    argen --path "model/repository" \
          --declaration "declaration" \
          --destination "generated" \
          --fixture_path "testutil/fixture"

.PHONY: generate-schema
generate-schema: ## Generate DDL schema
    argen --path "model/repository" \
          --schema-output database/schema.sql

Интеграция с go:generate

//go:generate argen --path "../../model/repository" --declaration "declaration" --destination "generated"

package main

Запуск:

go generate ./...

Ошибки

"path cannot start with ."

# ❌ Неправильно
argen --path "./model"

# ✅ Правильно
argen --path "model"

".argen file not found"

Создайте маркер вручную или убедитесь, что папка назначения существует:

mkdir -p model/repository/generated
touch model/repository/generated/.argen

"package name must match regex"

Имя модели должно соответствовать ^[a-z]{1,20}$:

// ❌ Неправильно
type FieldsUserProfile struct { ... }  // "userprofile" > 20 символов

// ✅ Правильно
type FieldsUser struct { ... }

Следующие шаги