VS Code расширение для поддержки IntelliSense в проектах на основе Metarhia.
Возможности
- Autocomplete — автодополнение при обращении к
domain., lib., db., bus. и вложенным модулям
- Go to Definition —
Ctrl+Click (или F12) на domain.user.get() откроет файл domain/user.js и перейдёт к методу get
- Hover — при наведении показывает сигнатуру метода, параметры и JSDoc
- Diagnostics — предупреждения о неразрешённых ссылках на модули
- Auto-reindex — автоматически обновляет индекс при изменении файлов
Установка
cd metarhia-intellisense
npm install
Затем один из вариантов:
Вариант 1: Символическая ссылка (для разработки)
# Узнать путь к расширениям VS Code
# Linux/Mac: ~/.vscode/extensions
# Windows: %USERPROFILE%\.vscode\extensions
ln -s $(pwd) ~/.vscode/extensions/metarhia-intellisense
Перезапустите VS Code.
Вариант 2: VSIX пакет
npm install -g @vscode/vsce
vsce package
code --install-extension metarhia-intellisense-0.1.0.vsix
Настройка
В settings.json вашего проекта (или глобально):
{
"metarhia.applicationPath": "application",
"metarhia.roots": ["domain", "lib", "db", "bus"]
}
applicationPath — путь к папке приложения относительно корня workspace (по умолчанию "application")
roots — список корневых директорий модулей (по умолчанию ["domain", "lib", "db", "bus"])
Структура проекта, которую понимает расширение
application/
├── domain/
│ ├── liveDating.js → domain.liveDating.get(), domain.liveDating.checkAccess()
│ └── user/
│ ├── updateRole.js → domain.user.updateRole()
│ └── profile.js → domain.user.profile.get(), domain.user.profile.update()
├── lib/
│ ├── utils.js → lib.utils.formatDate()
│ └── validation.js → lib.validation.email()
├── db/
│ └── prisma.js → db.prisma
└── bus/
└── events.js → bus.events.emit()
Поддерживаемые форматы модулей
Объект с методами
const privateHelper = (x) => x * 2;
({
async get(id) {
return await db.prisma.user.findUnique({ where: { id } });
},
async update(id, data) {
return await db.prisma.user.update({ where: { id }, data });
},
});
Одиночная функция
const SOME_CONSTANT = 42;
async (userId, role) => {
await db.prisma.user.update({
where: { id: userId },
data: { role },
});
};
Sandbox-глобалы
Расширение знает о следующих глобальных переменных, доступных в песочнице:
| Переменная |
Описание |
domain |
Дерево бизнес-логики |
lib |
Библиотечные модули |
db |
Модули базы данных |
bus |
Шина событий |
node |
Node.js built-in модули |
npm |
npm зависимости |
metarhia |
Metarhia пакеты |
config |
Конфигурация приложения |
console |
Логгер |
application |
Объект приложения |
schemas |
Модели схем |
Error |
Класс ошибки |
DomainError |
Класс доменной ошибки |
Команды
- Metarhia: Re-index — принудительная переиндексация проекта (клик по статус-бару или Command Palette)
JSDoc-подсказки
Добавляйте JSDoc-комментарии к методам для улучшенных подсказок:
({
/**
* Получить данные пользователя по ID
* @param {string} userId - UUID пользователя
* @returns {Promise<User>} Объект пользователя
*/
async get(userId) {
return await db.prisma.user.findUnique({ where: { id: userId } });
},
});