Creation:2025-06-07Last update:2026-05-31

    LSP-сервер Intlayer

    Языковой сервер Intlayer (LSP) — это реализация протокола языкового сервера (LSP), которая расширяет возможности вашей IDE с помощью интеллектуальных функций, адаптированных под Intlayer. В настоящее время он поддерживает функцию Перейти к определению (Go to Definition) для вызовов ключей словаря, позволяя переходить прямо из вызова useIntlayer("my-key") в вашем компоненте к файлу .content.ts, в котором он объявлен.


    Зачем использовать LSP?

    При использовании Intlayer связь между вызовом вроде useIntlayer("homepage") и его объявлением в src/homepage.content.ts является неявной. Без инструментов вам придется искать файл вручную. LSP делает эту связь явной:

    Понимание ИИ-агентами

    ИИ-агенты для кодинга (Cursor, Windsurf, GitHub Copilot, Claude Code, Codex) полагаются на языковой сервер для разрешения символов и понимания связей между файлами. При запущенном Intlayer LSP агенты могут отслеживать путь от useIntlayer("key") до места объявления ключа, получая точный контекст о доступных ключах контента, структуре каждого словаря и о том, какие файлы следует читать или редактировать.

    Перейти к определению

    Поместите курсор на любую строку с ключом словаря внутри поддерживаемого вызова геттера и нажмите F12 (или Cmd/Ctrl+клик). Редактор откроет файл объявления контента и поместит курсор на строку key:.

    Поддержка объединенных словарей

    Ключ может быть разделен между несколькими файлами контента (Intlayer объединяет их). Сервер возвращает одно местоположение (Location) на каждый исходный файл, чтобы вы могли перейти к каждому объявлению.

    Работает везде

    Поддерживает все пакеты *-intlayer (next-intlayer, react-intlayer, vue-intlayer, svelte-intlayer, solid-intlayer, preact-intlayer, angular-intlayer, lit-intlayer, express-intlayer, hono-intlayer, fastify-intlayer, adonis-intlayer, intlayer).

    Поддерживаемые вызовы геттеров

    Сервер обнаруживает следующие вызовы функций и извлекает первый строковый литерал в качестве ключа словаря:

    Функция Пример
    useIntlayer useIntlayer("hero")
    getIntlayer getIntlayer("hero", locale)

    Дженерики TypeScript и дополнительные аргументы игнорируются — важен только ключ.

    useDictionary и getDictionary принимают уже импортированный объект Dictionary в качестве первого аргумента вместо строкового ключа, поэтому они не поддерживают функцию «Перейти к определению» и не отслеживаются сервером.

    Установка

    LSP-сервер распространяется в составе пакета @intlayer/lsp:

    bash
    npm install --save-dev @intlayer/lsp

    Пакет предоставляет бинарный файл intlayer-lsp, который редакторы используют в качестве исполняемого файла сервера.


    Настройка в качестве плагина Claude Code

    Intlayer LSP доступен как плагин Claude Code, размещенный непосредственно в репозитории Intlayer на GitHub. Его установка дает Claude Code нативную поддержку функции «Перейти к определению» для всех вызовов useIntlayer / getIntlayer.

    1. Установите бинарный файл языкового сервера

    bash
    npm install -g @intlayer/lsp

    Это поместит исполняемый файл intlayer-lsp в ваш PATH, который вызывается записью lspServers в плагине.

    2. Зарегистрируйте маркетплейс Intlayer и установите плагин

    bash
    claude plugin marketplace add intlayer@github:aymericzip/intlayerclaude plugin install intlayer-lsp@intlayerclaude plugin enable intlayer-lsp@intlayer

    Claude Code добавит "intlayer-lsp@intlayer": true в список ваших enabledPlugins и автоматически запустит языковой сервер для поддерживаемых типов файлов (.ts, .tsx, .js, .jsx, .vue, .svelte).

    3. Включите инструмент LSP (если он еще не активен)

    Некоторые версии Claude Code требуют установки флага функции LSP. Добавьте следующее в ваш файл ~/.claude/settings.json, если переход к определению не работает после установки:

    ~/.claude/settings.json
    {  "env": {    "ENABLE_LSP_TOOL": "1"  }}

    Перезапустите Claude Code — теперь он будет использовать goToDefinition, findReferences и другие операции LSP при навигации по вашему коду Intlayer вместо возврата к grep.


    Настройка в VS Code (через расширение — рекомендуется)

    Если у вас установлено расширение Intlayer для VS Code, языковой сервер запускается автоматически. Никакой дополнительной настройки не требуется.

    Инструкции по установке и описание других функций см. в документации расширения VS Code.

    Ручная настройка в VS Code

    Если вы не используете расширение Intlayer, вы можете подключить языковой сервер вручную, используя универсальное расширение клиента LSP, такое как vscode-glspc, или написав собственное небольшое расширение. Рекомендуемый подход — использовать расширение Intlayer.

    Для справки, сервер запускается через бинарный файл intlayer-lsp через stdio:

    .vscode/settings.json
    {  "intlayer.languageServer.command": "npx",  "intlayer.languageServer.args": ["@intlayer/lsp"]}

    Расширение Intlayer считывает эти настройки для запуска сервера. Если вы используете только расширение, ручные настройки не требуются.


    Настройка в Cursor

    Cursor — это форк VS Code со встроенными функциями ИИ. Он использует ту же экосистему расширений, поэтому расширение Intlayer для VS Code работает без дополнительной настройки — установите его один раз, и Cursor подхватит его автоматически.

    Если вы предпочитаете ручную настройку, Cursor также считывает файл .vscode/settings.json из корня рабочей области, поэтому приведенный выше фрагмент кода для VS Code применяется напрямую.


    Настройка в Windsurf

    Windsurf (от Codeium) — еще один редактор на базе VS Code. Установите расширение Intlayer из VS Code Marketplace, и языковой сервер активируется автоматически, точно так же, как в VS Code и Cursor.

    Для ручной настройки создайте файл .vscode/settings.json в корне проекта:

    .vscode/settings.json
    {  "intlayer.languageServer.command": "npx",  "intlayer.languageServer.args": ["@intlayer/lsp"]}

    Настройка в Zed

    Zed имеет встроенную поддержку LSP через настройки языка. Добавьте запись в пользовательские настройки Zed (~/.config/zed/settings.json):

    ~/.config/zed/settings.json
    {  "lsp": {    "intlayer-lsp": {      "binary": {        "path": "npx",        "arguments": ["--yes", "@intlayer/lsp"]      }    }  },  "languages": {    "TypeScript": {      "language_servers": ["intlayer-lsp", "..."]    },    "TSX": {      "language_servers": ["intlayer-lsp", "..."]    },    "JavaScript": {      "language_servers": ["intlayer-lsp", "..."]    },    "Vue.js": {      "language_servers": ["intlayer-lsp", "..."]    },    "Svelte": {      "language_servers": ["intlayer-lsp", "..."]    }  }}

    Плейсхолдер "..." указывает Zed сохранять стандартные языковые серверы вместе с сервером Intlayer.


    Настройка для интерфейсов командной строки ИИ-агентов (Claude Code, Codex и др.)

    Claude Code имеет первоклассную поддержку плагинов LSP — следуйте инструкциям по настройке плагина Claude Code выше, чтобы получить полноценную функцию «Перейти к определению» прямо в сессиях терминала.

    OpenAI Codex и другие консольные инструменты пока не работают как клиенты LSP — они напрямую читают и записывают файлы, а не поддерживают постоянный сеанс языкового сервера. Для этих инструментов ценность работающего LSP проявляется косвенно: когда сервер активен в сопутствующем редакторе (VS Code, Cursor, Windsurf и т. д.), его живой индекс доступен любому ИИ-агенту, который может запросить его через контекст редактора (например, Cursor Composer, Windsurf Cascade, GitHub Copilot Chat).

    Если вы работаете исключительно в терминале без открытого редактора, вы можете запустить языковой сервер в фоновом режиме, чтобы он был готов к подключению любого редактора:

    bash
    # Поддерживать сервер активным в фоновом режимеnpx @intlayer/lsp &

    Ручная настройка в Neovim

    Используя nvim-lspconfig, зарегистрируйте пользовательскую конфигурацию сервера:

    ~/.config/nvim/init.lua
    local lspconfig = require('lspconfig')local configs = require('lspconfig.configs')if not configs.intlayer_lsp then  configs.intlayer_lsp = {    default_config = {      -- Запуск сервера с помощью npx, чтобы не требовалась глобальная установка      cmd = { 'npx', '--yes', '@intlayer/lsp' },      filetypes = {        'typescript',        'typescriptreact',        'javascript',        'javascriptreact',        'vue',        'svelte',      },      root_dir = lspconfig.util.root_pattern(        'intlayer.config.ts',        'intlayer.config.js',        'package.json'      ),    },  }endlspconfig.intlayer_lsp.setup({})

    После перезапуска Neovim нажатие gd на ключе Intlayer вызовет функцию перехода к определению.


    Ручная настройка в других редакторах

    Любой редактор с поддержкой Language Server Protocol может использовать @intlayer/lsp. Характеристики сервера:

    • Транспорт – Node.js IPC / stdio (стандартный)
    • Исполняемый файлnpx @intlayer/lsp (или локально установленный бинарный файл intlayer-lsp)
    • ВозможностиdefinitionProvider: true, textDocumentSync: Incremental

    Формат конфигурации для вашего редактора (например, languageserver.json для coc.nvim или настройки клиента LSP в Helix) смотрите в его документации.

    Пример: coc.nvim

    ~/.config/nvim/coc-settings.json
    {  "languageserver": {    "intlayer": {      "command": "npx",      "args": ["@intlayer/lsp"],      "filetypes": [        "typescript",        "typescriptreact",        "javascript",        "javascriptreact",        "vue",        "svelte"      ],      "rootPatterns": [        "intlayer.config.ts",        "intlayer.config.js",        "package.json"      ]    }  }}

    Пример: Helix

    ~/.config/helix/languages.toml
    [[language]]name = "typescript"language-servers = ["intlayer-lsp", "typescript-language-server"][[language]]name = "tsx"language-servers = ["intlayer-lsp", "typescript-language-server"][language-server.intlayer-lsp]command = "npx"args = ["@intlayer/lsp"]

    Как это работает

    При запуске сервер считывает конфигурацию Intlayer из корня рабочей области с помощью getConfiguration(). Это указывает ему пути build и system, необходимые для поиска скомпилированных словарей.

    На каждый запрос Перейти к определению:

    1. Сервер считывает весь текст открытого документа.
    2. Он сканирует вызовы геттеров (useIntlayer, getIntlayer и т. д.) с помощью регулярного выражения.
    3. Он проверяет, попадает ли позиция курсора внутрь одного из этих вызовов.
    4. Если попадает, он извлекает ключ словаря (группа захвата 3 регулярного выражения) и вызывает getUnmergedDictionaries() для поиска каждого файла контента, объявляющего этот ключ.
    5. Он считывает каждый соответствующий файл и находит точную строку с key: "<key>", чтобы точно позиционировать курсор.
    6. Он возвращает массив объектов Location — по одному на каждый исходный файл.

    Конфигурация разрешается лениво и кэшируется для каждого сеанса; она сбрасывается при каждом запросе initialize (например, при открытии новой папки рабочей области).


    Устранение неполадок

    Симптом Возможная причина Решение
    Перейти к определению ничего не делает Сервер не запущен Убедитесь, что @intlayer/lsp установлен и редактор запускает его
    Неверный корень рабочей области Несколько папок рабочей области Убедитесь, что папка с intlayer.config.ts является первой папкой рабочей области
    Определения не найдены для ключа Конфигурация не разрешена Убедитесь, что intlayer.config.ts (или .js) существует в корне рабочей области
    Сервер аварийно завершает работу на старте Слишком старая версия Node.js Требуется Node.js ≥ 14.18