rubric/README.md
2026-04-06 11:02:36 +03:00

221 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# rubric
Интерактивный терминальный справочник для разработчика. Цветной вывод, структурированные разделы с примерами кода, быстрый доступ по ключам.
```
./rubric
```
```
╔════════════════════════════════════════════════════════════╗
║ rubric — интерактивный справочник ║
╚════════════════════════════════════════════════════════════╝
Доступные справочники:
1. go Справочник по языку Go
Установка, синтаксис, типы, функции, горутины...
```
---
## Установка
**Требования:** Go 1.21+
```bash
git clone https://github.com/user/rubric
cd rubric
go build -o rubric .
```
Или сразу установить глобально:
```bash
go install github.com/user/rubric@latest
```
---
## Использование
### Интерактивный режим
```bash
./rubric
```
Открывается главное меню со списком справочников. Навигация двухуровневая:
```
rubric → выбор справочника → выбор раздела
```
Вводить можно **номер** или **ключ**:
```
Выберите справочник: 1
Выберите справочник: go
```
Внутри справочника:
```
Раздел: 2
Раздел: structs
Раздел: s ← сокращённый алиас
```
Для возврата на уровень выше — `b`. Для выхода — `q`.
### Быстрый доступ (без меню)
```bash
# Открыть справочник Go
./rubric -book go
# Открыть конкретный раздел сразу
./rubric -book go -topic basics
./rubric -book go -topic structs
# По алиасу
./rubric -book g -topic s
```
### Вспомогательные флаги
```bash
./rubric -list # список всех справочников
./rubric -help # справка по флагам и ключам
```
---
## Структура проекта
```
rubric/
├── go.mod
├── main.go # точка входа, разбор флагов
├── utils/
│ └── display.go # цвета, форматирование вывода
├── catalog/
│ ├── catalog.go # главное меню, реестр справочников
│ └── gobook.go # справочник Go: меню и навигация
└── modules/
└── gomodules/
├── registry.go # реестр разделов Go
├── basics.go # раздел: установка и команды
└── structures.go # раздел: структура программы
```
Каждый **справочник** — отдельный файл в `catalog/`. Каждый **раздел** внутри справочника — отдельный файл в соответствующем подпакете `modules/`.
---
## Справочники и разделы
### go — Язык Go
| Ключ | Алиасы | Раздел |
|------|--------|--------|
| `basics` | `b`, `base`, `install` | Установка и основные команды |
| `structs` | `s`, `struct`, `vars`, `types` | Структура программы |
#### basics — Установка и основные команды
- Установка Go на Linux / macOS / Windows
- Структура проекта, `go mod init`
- `go build` — сборка и кросс-компиляция
- `go run` — запуск без сборки
- `go test` — тесты, покрытие, бенчмарки, race-детектор
- `go fmt`, `go vet`, `golangci-lint` — форматирование и анализ
- `go doc` — документация
- `go get`, `go mod tidy` — управление зависимостями
- `go env`, `go clean`, `go install` — окружение и утилиты
#### structs — Структура программы
- Имена, ключевые слова, предопределённые идентификаторы
- Четыре вида объявлений: `const`, `type`, `var`, `func`
- Переменные: `var`, `:=`, нулевые значения, `var`-блоки
- Указатели: `&`, `*`, nil, сравнение адресов
- Функция `new` и когда её использовать
- Время жизни переменных, escape analysis
- Присваивания: простые, составные, tuple assignment, `_`
- Объявления типов, алиасы, конверсии
- Пакеты, файлы, все формы импорта
- Инициализация пакетов, функция `init()`
- Область видимости, затенение (shadowing)
---
## Как добавить новый раздел в справочник Go
1. Создать файл `modules/gomodules/mymodule.go`:
```go
package gomodules
import "rubric/utils"
var MyModule = Module{
Key: "mykey",
Aliases: []string{"mk"},
Title: "Название раздела",
Description: "Краткое описание",
Run: showMyModule,
}
func showMyModule() {
utils.Header("Заголовок")
utils.Section("Подраздел")
utils.Code(`// пример кода`)
utils.Note("Важное замечание")
utils.Footer()
}
```
2. Добавить в `modules/gomodules/registry.go` в срез `All`:
```go
var All = []Module{
BasicsModule,
StructuresModule,
MyModule, // ← добавить сюда
}
```
Больше ничего не требуется — модуль автоматически появится в меню, поиске и навигации.
## Как добавить новый справочник (например, linux)
1. Создать `catalog/linuxbook.go` по образцу `catalog/gobook.go`
2. Создать `modules/linuxmodules/` с нужными разделами
3. Добавить `LinuxBook` в срез `catalog.All` в `catalog/catalog.go`
4. При необходимости расширить `switch *book` в `main.go` для флага `-book linux -topic ...`
---
## Вспомогательные функции форматирования
Все модули используют пакет `utils` для единообразного вывода:
| Функция | Описание |
|---------|----------|
| `utils.Header(title)` | Заголовок раздела в рамке |
| `utils.Section(title)` | Подзаголовок с линией |
| `utils.Code(code)` | Блок кода в рамке |
| `utils.Command(cmd, desc)` | Команда с описанием |
| `utils.Note(text)` | Замечание с иконкой 💡 |
| `utils.Info(label, value)` | Пара ключ — значение |
| `utils.Println(text)` | Обычная строка с отступом |
| `utils.Footer()` | Нижняя линия раздела |
---
## Цветовой вывод
Использует ANSI escape-коды. Работает в большинстве современных терминалов: iTerm2, Terminal.app, GNOME Terminal, Windows Terminal, tmux и других.
В средах без поддержки цвета (например, при перенаправлении вывода в файл) escape-коды будут видны как есть. При необходимости отключения цвета — установите переменную `NO_COLOR=1` перед запуском или реализуйте проверку `os.Getenv("NO_COLOR")` в `utils/display.go`.