summaryrefslogtreecommitdiff
path: root/start/lspconfig-0.1.8/lua/lspconfig/server_configurations/sourcery.lua
blob: 44340f134c0519ec57e6f2c2a85caf0a30095faa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
local util = require 'lspconfig.util'

local root_files = {
  'pyproject.toml',
  'setup.py',
  'setup.cfg',
  'requirements.txt',
  'Pipfile',
  'pyrightconfig.json',
}

local token_in_auth_file = function()
  local is_windows = vim.fn.has 'win32' == 1
  local path_sep = is_windows and '\\' or '/'

  local config_home = is_windows and vim.fn.getenv 'APPDATA' or vim.fn.expand '~/.config'
  local auth_file_path = config_home .. path_sep .. 'sourcery' .. path_sep .. 'auth.yaml'

  if vim.fn.filereadable(auth_file_path) == 1 then
    local content = vim.fn.readfile(auth_file_path)
    for _, line in ipairs(content) do
      if line:match 'sourcery_token: (.+)' then
        return true
      end
    end
  end

  return false
end

return {
  default_config = {
    cmd = { 'sourcery', 'lsp' },
    filetypes = { 'javascript', 'javascriptreact', 'python', 'typescript', 'typescriptreact' },
    init_options = {
      editor_version = 'vim',
      extension_version = 'vim.lsp',
      token = nil,
    },
    root_dir = function(fname)
      return util.root_pattern(unpack(root_files))(fname) or util.find_git_ancestor(fname)
    end,
    single_file_support = true,
  },
  on_new_config = function(new_config, _)
    if not new_config.init_options.token and not token_in_auth_file() then
      local notify = vim.notify_once or vim.notify
      notify(
        '[lspconfig] The authentication token must be provided in config.init_options or configured via "sourcery login"',
        vim.log.levels.ERROR
      )
    end
  end,
  docs = {
    description = [[
https://github.com/sourcery-ai/sourcery

Refactor Python instantly using the power of AI.

It requires the init_options param to be populated as shown below and will respond with the list of ServerCapabilities that it supports:

```lua
require'lspconfig'.sourcery.setup {
    init_options = {
        --- The Sourcery token for authenticating the user.
        --- This is retrieved from the Sourcery website and must be
        --- provided by each user. The extension must provide a
        --- configuration option for the user to provide this value.
        token = <YOUR_TOKEN>,

        --- The extension's name and version as defined by the extension.
        extension_version = 'vim.lsp',

        --- The editor's name and version as defined by the editor.
        editor_version = 'vim',
    },
}
```

Alternatively, you can login to sourcery by running `sourcery login` with sourcery-cli.
]],
  },
}