Языковой сервер CodeGraph передаёт LSP-клиенту информацию о коде из графа. Он читает существующий DuckDB CPG под управлением GoCPG, но не строит и не обновляет этот граф.
Предварительные условия
Перед запуском:
- Установите CodeGraph вместе с консольной командой
codegraph-lspи её LSP-зависимостями. - Постройте или обновите CPG целевого проекта поддерживаемым способом.
- Зафиксируйте базу на время сессии редактора и используйте её как единственный источник диагностики.
- Храните путь к базе внутри одобренной рабочей области заказчика.
Проверка команды
codegraph-lsp --help
Запустите транспорт standard input/output с существующим графом:
codegraph-lsp --db <cpg.duckdb>
В checkout исходного кода также работает совместимая команда
python -m codegraph_lsp, но в конфигурации установленного клиента лучше
использовать консольную точку входа.
Поддерживаемые параметры
| Параметр | Назначение |
|---|---|
--db <cpg.duckdb> |
Обязательный путь к CPG под управлением GoCPG. |
--complexity-threshold <integer> |
Порог диагностики сложности; по умолчанию 10. |
--transport stdio|tcp |
Транспорт LSP; по умолчанию stdio. |
--host <address> |
Адрес TCP; по умолчанию 127.0.0.1. |
--port <integer> |
Порт TCP; по умолчанию 2087. |
--log-level debug|info|warning|error |
Уровень журнала; по умолчанию info. |
TCP предназначен для локальной или защищённой сетевой границы:
codegraph-lsp --db <cpg.duckdb> --transport tcp --host 127.0.0.1 --port 2087 --log-level info
Сервер не добавляет аутентификацию и TLS к TCP-транспорту. Не привязывайте его к недоверенному интерфейсу без одобренного защитного слоя.
Пример для OpenCode
OpenCode направляет файлы в LSP-сервер по расширениям. Адаптируйте команду и набор файлов к установленному окружению:
{
"lsp": {
"codegraph": {
"command": ["codegraph-lsp", "--db", "<cpg.duckdb>"],
"extensions": [".py", ".go", ".js", ".ts", ".java", ".c", ".cpp"]
}
}
}
Путь в угловых скобках — обозначение, а не готовая конфигурация JSON. Замените его точным одобренным путём к CPG заказчика.
Заявленные возможности
Сервер обрабатывает открытие, сохранение и закрытие документа. Сейчас он предоставляет:
textDocument/hoverс метриками метода;textDocument/codeLensс числом callers/callees и доступной подсказкой о taint flow;textDocument/codeActionдля поддерживаемых быстрых исправлений;- диагностику после открытия или сохранения документа.
Диагностика может включать результаты security-правил, мёртвые методы, цикломатическую сложность и остальные pattern findings. Результат зависит от таблиц и столбцов выбранного CPG. Ошибка запроса может привести к пустому ответу. Чистоту кода подтверждают результаты проверки; отсутствие сообщения требует проверить ошибку запроса.
Hover, CodeLens и быстрые исправления
Hover читает сложность метода, fan-in, fan-out, callers, LOC, число параметров, признаки и количество security findings, если это позволяет текущая схема.
CodeLens показывает callers и callees и может добавить путь taint из
edges_reaching_def.
Быстрое исправление предлагается только тогда, когда сохранённое match_data
диагностики содержит значение fix. Проверяйте правку до сохранения: сервер
возвращает записанную замену. Семантическую корректность всей программы проверьте
тестами и ревью.
Свежесть и сопоставление путей
LSP-сервер открывает CPG на чтение и преобразует URI файлов в относительные пути workspace с прямыми слэшами. Если редактор ничего не показывает:
- Проверьте журнал сервера на ошибки запуска и запросов.
- Убедитесь, что граф относится к открытому репозиторию.
- Обновите CPG поддерживаемым процессом проекта.
- Сохраните или заново откройте файл, чтобы запросить диагностику.
- Проверьте сопоставимость имён файлов в графе с относительными путями редактора.
Не исправляйте устаревший граф прямым редактированием DuckDB. Перед обслуживанием остановите writer или согласуйте работу с его владельцем.
Работа соединений
Сервер создаёт небольшой пул запросов и освобождает соединение после каждого обращения. Исчерпанный или заблокированный пул обычно означает параллельный writer, долгий запрос, недоступный граф или прерванный клиент. Перезапуск LSP может очистить оборванную сессию, но не исправит устаревший или некорректный CPG.
Поддерживаемые источники
pyproject.tomlрегистрирует консольную точку входаcodegraph-lsp.integrations/opencode/codegraph_lsp/__main__.pyопределяет параметры CLI и выбор транспорта.integrations/opencode/codegraph_lsp/server.pyопределяет возможности LSP и обработчики запросов.integrations/opencode/codegraph_lsp/diagnostics.py,hover.py,codelens.pyиcodeaction.pyопределяют текущие результаты.
Если статья расходится с установленной ревизией, авторитетны исходный код и
вывод codegraph-lsp --help.