ryutah / neovim_setting

2 stars 0 forks source link

execute UpdateTools background #12

Open ryutah opened 12 months ago

ryutah commented 12 months ago

こんな感じで、 jobstart とか使ってバックグラウンドでインストールしたいけど、エラー発生時の処理とかがうまくいってないからもうちょい工夫が必要

local curl = require('plenary.curl')

local function install_dir(arg)
  local base_dir = vim.fn.stdpath('data') .. '/custom/bin/'

  local path = require('plenary.path'):new(vim.fn.stdpath('data'), 'custom', 'bin')
  path:mkdir({ parents = true, exist_ok = true })

  return base_dir .. arg
end

local function get_latest_stable_plantuml_version()
  local response = curl.get('https://api.github.com/repos/plantuml/plantuml/releases', {
    query = { per_page = 10 },
    timeout = 300000,
  })

  local versions = vim.json.decode(response.body)
  for _, value in ipairs(versions or {}) do
    -- tag_name に snapshot が含まれていないものを返す
    if not string.find(value.tag_name, 'snapshot') then
      return value.name
    end
  end
end

local function install_plantuml()
  vim.print('Installing plantuml...')

  local latest_version = get_latest_stable_plantuml_version()
  local url = string.format(
    "https://github.com/plantuml/plantuml/releases/download/%s/plantuml-%s.jar",
    latest_version,
    string.sub(latest_version, 2)
  )
  vim.print(url)

  curl.get(url, {
    output = install_dir('plantuml.jar'),
    timout = 300000,
  })

  vim.print('Installed plantuml ' .. latest_version)
end

local function install_gotests()
  vim.print('Installing gotests...')
  vim.fn.jobstart('go install github.com/cweill/gotests/gotests@latest', {
    on_exit = function()
      vim.print('Installed gotests')
    end,
    on_stderr = function(_, data)
      error('Failed to install gotests')
      error(data[1])
    end,
  })
end

local function install_treesitter_cli()
  vim.print('Installing treesitter-cli...')
  vim.fn.jobstart('cargo install tree-sitter-cli', {
    on_exit = function()
      vim.print('Installed treesitter-cli')
    end,
    on_stderr = function(_, data)
      error('Failed to install treesitter-cli')
      error(data[1])
    end,
  })
end

local function install_swagger_ui_watcher()
  vim.print('Installing swagger-ui-watcher...')
  vim.fn.jobstart('npm install swagger-ui-watcher -g', {
    on_exit = function()
      vim.print('Installed swagger-ui-watcher')
    end,
    on_stderr = function(_, data)
      error('Failed to install swagger-ui-watcher')
      error(data[1])
    end,
  })
end

local function install_tools()
  install_plantuml()
  install_gotests()
  install_treesitter_cli()
  install_swagger_ui_watcher()
end

vim.g.plantuml_jar_path = install_dir('plantuml.jar')

vim.api.nvim_create_user_command('UpdateTools', install_tools, {})

refs