suite check: реализована проверка целостности набора
- разбор документа по языку конвенций: шапка, области правил, блоки под метками - проверки формы правила, распространения, ссылок и самого suite.toml - словарь языка живёт в бинаре реестром «версия × естественный язык», темы и префиксы берутся только из манифеста
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
// Package cli раскладывает команды инструмента.
|
||||
//
|
||||
// Глубина команды отражает частоту и адресата: проектные команды выполняются в
|
||||
// каждом репозитории и часто, ведение набора — в одном репозитории и редко.
|
||||
// Поэтому `check` стоит наверху, а под `suite` уходит то, что в проекте не
|
||||
// имеет смысла. Синонимов нет: `convy suite pull` рядом с `convy pull` не
|
||||
// заводится.
|
||||
package cli
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
)
|
||||
|
||||
// ExitCode — код возврата процесса.
|
||||
type ExitCode int
|
||||
|
||||
const (
|
||||
// OK — проверка прошла, работа сделана.
|
||||
OK ExitCode = 0
|
||||
// Failed — проверка нашла ошибки.
|
||||
Failed ExitCode = 1
|
||||
// Usage — команда набрана неверно или не в том контексте.
|
||||
Usage ExitCode = 2
|
||||
)
|
||||
|
||||
// Env — окружение запуска. Вынесено, чтобы команды тестировались без процесса.
|
||||
type Env struct {
|
||||
Dir string
|
||||
Out io.Writer
|
||||
Err io.Writer
|
||||
NoTTY bool
|
||||
Colors bool
|
||||
}
|
||||
|
||||
// Run разбирает аргументы и выполняет команду.
|
||||
func Run(env Env, args []string) ExitCode {
|
||||
if len(args) == 0 {
|
||||
usage(env.Out)
|
||||
return Usage
|
||||
}
|
||||
|
||||
switch args[0] {
|
||||
case "suite":
|
||||
return runSuite(env, args[1:])
|
||||
case "add", "pull", "list", "check":
|
||||
fmt.Fprintf(env.Err, "команда %q ещё не реализована\n", args[0])
|
||||
return Usage
|
||||
case "help", "-h", "--help":
|
||||
usage(env.Out)
|
||||
return OK
|
||||
default:
|
||||
fmt.Fprintf(env.Err, "неизвестная команда %q\n\n", args[0])
|
||||
usage(env.Err)
|
||||
return Usage
|
||||
}
|
||||
}
|
||||
|
||||
func runSuite(env Env, args []string) ExitCode {
|
||||
if len(args) == 0 {
|
||||
fmt.Fprintln(env.Err, "convy suite: нужна подкоманда — check")
|
||||
return Usage
|
||||
}
|
||||
switch args[0] {
|
||||
case "check":
|
||||
return runSuiteCheck(env, args[1:])
|
||||
case "new":
|
||||
fmt.Fprintln(env.Err, "команда \"suite new\" ещё не реализована")
|
||||
return Usage
|
||||
default:
|
||||
fmt.Fprintf(env.Err, "неизвестная подкоманда %q для convy suite\n", args[0])
|
||||
return Usage
|
||||
}
|
||||
}
|
||||
|
||||
// usage печатает помощь, сгруппированную заголовками: в плоском списке уровни
|
||||
// не видны.
|
||||
func usage(w io.Writer) {
|
||||
fmt.Fprint(w, `convy — управление конвенциями разработки.
|
||||
|
||||
В проекте:
|
||||
convy add <тема> подписаться и собрать (не реализовано)
|
||||
convy pull пересобрать подписанное (не реализовано)
|
||||
convy list что подключено и что доступно (не реализовано)
|
||||
convy check проверить форму того, что здесь (не реализовано)
|
||||
|
||||
В наборе:
|
||||
convy suite check целостность набора: префиксы, темы, оси, ссылки, форма
|
||||
convy suite new новая тема (не реализовано)
|
||||
|
||||
`)
|
||||
}
|
||||
|
||||
// Main — точка входа процесса.
|
||||
func Main() int {
|
||||
dir, err := os.Getwd()
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "не удалось определить текущую директорию:", err)
|
||||
return int(Usage)
|
||||
}
|
||||
env := Env{Dir: dir, Out: os.Stdout, Err: os.Stderr}
|
||||
return int(Run(env, os.Args[1:]))
|
||||
}
|
||||
Reference in New Issue
Block a user