Перейти к содержимому

Редакторы

outry lsp — языковой сервер, встроенный в CLI: те же проверки, имена и переменные, что в outry check и приложении, но в вашем редакторе. Для VS Code (и Cursor, Windsurf, VSCodium) есть расширение с просмотром ответов; любой другой редактор с LSP-клиентом подключает сервер напрямую, а подсветку даёт грамматика tree-sitter из editors/tree-sitter-outry.

  • Ошибки по мере набора — всё, что показывает outry check: синтаксис, неизвестные запросы и формы (с исправлением «did you mean»), аргументы вызовов, циклы.
  • Предупреждения окружения — то, что показывает outry check --env для текущего окружения: неопределённые переменные и вызовы запросов, закрытых only.
  • Расхождения с Go-кодом — в Go-проекте то, что показывает outry import go --check, на строках запроса и со ссылкой на обработчик. У расхождений, которые исправляет --fix, есть Quick Fix, а «Fix all differences with the code» правит весь файл. Несохранённые правки учитываются.
  • Автодополнение — поля запроса в начале строки, запросы и сценарии с параметрами, аргументы вызова, переменные текущего окружения (секреты замаскированы), сохранённые значения, let файла, параметры, встроенные функции, методы значений после ., формы после matches, окружения в only: [...], частые заголовки.
  • Подсказка при наведении — значение переменной и откуда оно (env.toml, хранилище паролей, OUTRY_*, save; секреты замаскированы), метод, путь, описание и параметры вызываемого запроса, поля формы.
  • Переход к определению — вызов → запрос или сценарий; переменная → её строка в env.toml и save, которые её задают; форма → её объявление, а из объявления → Go-структура; handler: → роут в Go.
  • Отправка — code lens «▶ Send · dev» над каждым запросом («▶ Run flow» над сценариями) и то же в меню действий. Ответ пишется в ~/.cache/outry/responses/<Name>.http и открывается рядом с запросом, итог — сообщением. Вызовы, кеш прогона, cookies и сохранённые значения работают как в приложении; confirm: true сначала спрашивает.
  • Форматирование — outry fmt как форматирование документа.
  • Outline — запросы, сценарии, формы и let файла.

Установите Outry API Client из Visual Studio Marketplace, а в Cursor, Windsurf и VSCodium — из Open VSX. В пакетах для Linux, macOS и Windows outry уже внутри, больше ничего не нужно. На других платформах установите CLI: расширение найдёт его в PATH или в ~/.local/bin, либо укажите outry.path. В каждом релизе есть и файлы .vsix — для Extensions → ⋯ → Install from VSIX….

Сверх всего, что выше, расширение добавляет:

  • Ответ рядом с файлом. ▶ Send (или Ctrl+Enter на любой строке запроса) открывает тот же вид, что в приложении: тело с подсветкой и поиском, предпросмотр картинок и HTML, заголовки, проверки из expect, trace вызванных запросов, запрос в том виде, как ушёл, и сохранение тела в файл. У сценария — его проверки и trace.
  • in… — отправить один раз в другом окружении, не переключаясь; confirm: true сначала спросит.
  • Copy as curl — запрос с подставленными переменными, вызовами (Login().body.token) и cookies прогона. Вызовы отправляются, сам запрос — нет.
  • Окружение в строке состояния, запоминается для рабочей папки.
  • Боковая панель — запросы и сценарии проекта по папкам (щелчок открывает, ▶ отправляет) и переменные текущего окружения с источником каждой; секреты замаскированы.
Настройка По умолчанию
outry.path бинарь из пакета, затем PATH Путь к outry
outry.env default из env.toml С какого окружения начинать
outry.keyring, outry.import, outry.goDir Как keyring, import, goDir в Настройках

Вывод языкового сервера — в Output → Outry; Outry: Restart Language Server перезапускает его (например, после outry update).

Neovim 0.11 или новее:

vim.filetype.add({ extension = { outry = "outry" } })
vim.lsp.config("outry", {
cmd = { "outry", "lsp" },
filetypes = { "outry" },
root_markers = { "env.toml", ".git" },
-- init_options = { env = "dev" },
handlers = {
-- Перечитать файл ответа, если он уже открыт.
["window/showDocument"] = function(err, params, ctx)
local result = vim.lsp.handlers["window/showDocument"](err, params, ctx)
vim.cmd.checktime()
return result
end,
},
})
vim.lsp.enable("outry")
-- Code lens: обновлять и отправлять запрос под курсором.
vim.api.nvim_create_autocmd({ "LspAttach", "BufEnter", "InsertLeave" }, {
pattern = "*.outry",
callback = function(ev) vim.lsp.codelens.refresh({ bufnr = ev.buf }) end,
})
vim.keymap.set("n", "<leader>rs", vim.lsp.codelens.run, { desc = "Outry: send" })

Подсветка: соберите парсер и скопируйте запросы (Neovim берёт parser/ и queries/ из runtimepath):

Окно терминала
git clone --depth 1 https://github.com/1rowvy/outry /tmp/outry
cd /tmp/outry/editors/tree-sitter-outry
mkdir -p ~/.local/share/nvim/site/parser ~/.config/nvim/queries/outry
cc -shared -fPIC -O2 -I src -o ~/.local/share/nvim/site/parser/outry.so src/parser.c
cp queries/highlights.scm ~/.config/nvim/queries/outry/
vim.api.nvim_create_autocmd("FileType", {
pattern = "outry",
callback = function() vim.treesitter.start() end,
})

В ~/.config/helix/languages.toml:

[language-server.outry]
command = "outry"
args = ["lsp"]
[[language]]
name = "outry"
scope = "source.outry"
file-types = ["outry"]
roots = ["env.toml"]
comment-token = "//"
block-comment-tokens = { start = "/*", end = "*/" }
indent = { tab-width = 2, unit = " " }
language-servers = ["outry"]
[[grammar]]
name = "outry"
# rev: ветка, тег или коммит репозитория outry
source = { git = "https://github.com/1rowvy/outry", rev = "master", subpath = "editors/tree-sitter-outry" }
Окно терминала
hx --grammar fetch && hx --grammar build
mkdir -p ~/.config/helix/runtime/queries/outry
curl -fsSL https://raw.githubusercontent.com/1rowvy/outry/master/editors/tree-sitter-outry/queries/helix/highlights.scm \
-o ~/.config/helix/runtime/queries/outry/highlights.scm

В Helix нет code lens: Send — в меню действий (Space a) на любой строке запроса. Если файл ответа уже открыт, новый ответ покажет :reload.

Подойдёт любой LSP-клиент: команда outry lsp, транспорт stdio (--stdio принимается и ничего не меняет), язык outry, файлы *.outry.

Грамматику из editors/tree-sitter-outry (queries/highlights.scm — в именах захватов nvim-treesitter и Zed) можно подключить в любом редакторе, который загружает грамматики tree-sitter.

Передаются в initializationOptions (init_options в Neovim) или позже через workspace/didChangeConfiguration как { "outry": { … } }:

Настройка По умолчанию Что делает
env default из env.toml Окружение для переменных, предупреждений и Send
keyring true Брать секреты из системного хранилища паролей
import true Сравнивать запросы с Go-кодом
goDir родитель api/, иначе папка проекта Папка с Go-кодом относительно корня рабочей папки

outry lsp --env <ENV> и --no-keyring делают то же из командной строки.

Команды (workspace/executeCommand) — для сочетаний клавиш и расширений редакторов:

Команда Аргументы
outry.run [uri, line, env?] Отправить запрос или запустить сценарий на строке line (с 1), в окружении env, если оно передано, иначе в текущем. Возвращает итог в JSON
outry.curl [uri, line, env?] Запрос на строке line командой curl (строкой). Вызовы в нём отправляются, сам запрос — нет
outry.selectEnv [env] или ничего Сменить окружение; без аргумента редактор предложит выбор

Если окружений несколько, code lens «env: dev» над первым запросом вызывает outry.selectEnv.