GoHTML FuncMap Completion
🚀 Полнофункциональное расширение для VS Code для работы с Go HTML шаблонами. Предоставляет интеллектуальное автодополнение, определение типов переменных, диагностику ошибок и множество других возможностей для повышения продуктивности разработки.
✨ Основные возможности
🎯 Автодополнение
- Функции: Автоматическое предложение доступных функций с сигнатурами и описаниями
- Переменные: Автодополнение объявленных в шаблоне переменных с типами
- Шаблоны: Готовые сниппеты для
if
, range
, with
, define
и других конструкций
- Сниппеты: Более 15 готовых сниппетов для быстрого написания кода
🔍 Интеллектуальные подсказки
- Hover для функций: Отображение сигнатуры, описания и типа возвращаемого значения
- Hover для переменных: Отображение типа данных при наведении курсора
- Определение типов: Автоматическое определение типов на основе литералов и функций
🧭 Навигация по коду
- Go to Definition: Переход к объявлению переменной (Ctrl+Click)
- Find All References: Подсветка всех вхождений переменной
- Rename Symbol: Переименование переменных с обновлением всех вхождений
🔧 Диагностика и проверка
- Проверка блоков: Автоматическая проверка незакрытых
if
, range
, with
блоков
- Подсветка ошибок: Визуальное отображение проблем в коде
- Предупреждения: Уведомления о потенциальных проблемах
⚙️ Дополнительные функции
- Контекстные команды: Правый клик для быстрого доступа к функциям
- Автозакрытие скобок: Автоматическое закрытие
{{}}
, ()
, []
, {}
- Сворачивание кода: Поддержка сворачивания блоков кода
- Автоотступы: Правильные отступы для вложенных блоков
🚀 Быстрый старт
Установка
- Скачайте файл
.vsix
из релизов
- В VS Code:
Ctrl+Shift+X
→ ...
→ Install from VSIX...
- Выберите скачанный файл
- Перезапустите VS Code
Первое использование
- Откройте файл с расширением
.gohtml
- Начните вводить код - увидите автодополнение
- Наведите курсор на переменную или функцию для подсказки
- Используйте
Ctrl+Click
для перехода к определению
📝 Примеры использования
Автодополнение функций
{{ pro[Ctrl+Space] }} <!-- Предложит: profile, profileUid, parseUserAgent -->
Определение типов переменных
{{ $userData := profile .Request }} <!-- Тип: models.ProfileData -->
{{ $name := "John" }} <!-- Тип: string -->
{{ $age := 25 }} <!-- Тип: int -->
{{ $active := true }} <!-- Тип: bool -->
Сниппеты
if[Tab] <!-- {{ if condition }} ... {{ end }} -->
range[Tab] <!-- {{ range $index, $item := items }} ... {{ end }} -->
with[Tab] <!-- {{ with $var := value }} ... {{ end }} -->
Навигация
Ctrl+Click
на $userData
→ переход к объявлению
F12
на переменной → определение
Shift+F12
→ все вхождения
⚙️ Настройки
Расширение предоставляет гибкие настройки:
{
"gohtmlFuncmap.enableVariableHover": true, // Hover для переменных
"gohtmlFuncmap.enableVariableCompletion": true, // Автодополнение переменных
"gohtmlFuncmap.enableSnippets": true, // Сниппеты шаблонов
"gohtmlFuncmap.enableDiagnostics": true, // Диагностика ошибок
"gohtmlFuncmap.enableFunctionSnippets": true // Сниппеты функций
}
🎯 Поддерживаемые паттерны
Присваивание переменных
{{ $userData := profile .Request }}
{{ $userName := $userData.Name }}
{{ $pageTitle := .Title }}
{{ $items := .Items }}
Переменные в циклах
{{ range $index, $item := $items }}
{{ $itemName := $item.Name }}
{{ end }}
Переменные в блоках
{{ with $user := profile .Request }}
{{ $user.Name }}
{{ end }}
Литералы
{{ $string := "Hello" }} <!-- string -->
{{ $number := 42 }} <!-- int -->
{{ $float := 3.14 }} <!-- float64 -->
{{ $bool := true }} <!-- bool -->
{{ $array := [1,2,3] }} <!-- []interface{} -->
{{ $map := {"key":"value"} }} <!-- map[string]interface{} -->
🔧 Команды
Контекстные команды (правый клик)
- Show Function Info - показать информацию о функции под курсором
- Show Variables in Template - показать все переменные в шаблоне
Горячие клавиши
Ctrl+Space
- принудительное автодополнение
Ctrl+Click
- переход к определению
F12
- определение символа
Shift+F12
- все вхождения
📋 Сниппеты
Основные шаблоны
if
- условный оператор
ifelse
- условный оператор с else
range
- цикл по элементам
with
- блок с переменной
define
- определение шаблона
template
- включение шаблона
block
- блок шаблона
Переменные и функции
var
- присваивание переменной
print
- вывод переменной
field
- вывод поля контекста
func
- вызов функции
pipe
- пайплайн
HTML структуры
html
- базовая HTML структура
form
- HTML форма
table
- таблица с циклом
🐛 Диагностика
Расширение автоматически проверяет:
- ✅ Незакрытые блоки
if
, range
, with
, define
- ✅ Неожиданные
{{end}}
без соответствующих блоков
- ✅ Правильность структуры шаблонов
🔄 Обновления
Версия 1.0.0
- ✨ Полная переработка архитектуры
- 🎯 Улучшенное определение типов
- 🔍 Интеллектуальные подсказки
- 🧭 Навигация по коду
- 🔧 Диагностика ошибок
- 📝 Богатые сниппеты
- ⚙️ Гибкие настройки
🤝 Разработка
Структура проекта
├── extension.js # Основной код расширения
├── gotemplate-funcs.json # Список функций с типами
├── package.json # Конфигурация расширения
├── language-configuration.json # Конфигурация языка
├── snippets/gohtml.json # Сниппеты
├── dev.gohtml # Тестовый файл
└── README.md # Документация
Добавление новых функций
Отредактируйте gotemplate-funcs.json
:
{
"name": "functionName",
"signature": "functionName(param1: type1, param2: type2) (returnType)",
"description": "Описание функции"
}
Сборка
npm install
npm run package
📄 Лицензия
MIT License - используйте свободно в любых проектах.
🙏 Поддержка
Сделано с ❤️ для сообщества Go разработчиков