diff options
| author | Ashkan Kiani <ashkan.k.kiani@gmail.com> | 2019-11-13 10:45:30 -0800 |
|---|---|---|
| committer | Ashkan Kiani <ashkan.k.kiani@gmail.com> | 2019-11-13 10:45:30 -0800 |
| commit | b97bcbeddc3902911c2e9ab5f13b5327a81c745f (patch) | |
| tree | e67248064e95eac70f02e5e422c3eb2a8fed0b11 /lua/common_lsp/skeleton.lua | |
| parent | Add vim function for texlab. (diff) | |
| download | nvim-lspconfig-b97bcbeddc3902911c2e9ab5f13b5327a81c745f.tar nvim-lspconfig-b97bcbeddc3902911c2e9ab5f13b5327a81c745f.tar.gz nvim-lspconfig-b97bcbeddc3902911c2e9ab5f13b5327a81c745f.tar.bz2 nvim-lspconfig-b97bcbeddc3902911c2e9ab5f13b5327a81c745f.tar.lz nvim-lspconfig-b97bcbeddc3902911c2e9ab5f13b5327a81c745f.tar.xz nvim-lspconfig-b97bcbeddc3902911c2e9ab5f13b5327a81c745f.tar.zst nvim-lspconfig-b97bcbeddc3902911c2e9ab5f13b5327a81c745f.zip | |
Add skeleton and refactor texlab.
Diffstat (limited to 'lua/common_lsp/skeleton.lua')
| -rw-r--r-- | lua/common_lsp/skeleton.lua | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/lua/common_lsp/skeleton.lua b/lua/common_lsp/skeleton.lua new file mode 100644 index 00000000..b08307ca --- /dev/null +++ b/lua/common_lsp/skeleton.lua @@ -0,0 +1,104 @@ +local api = vim.api +local validate = vim.validate +local util = require 'common_lsp/util' +local lsp = vim.lsp + +local M = {} + +local default_config +default_config = { + name = "SKELETON"; + cmd = {"SKELETON"}; + filetype = {"c", "cpp"}; + SKELETON_log_level = lsp.protocol.MessageType.Warning; + SKELETON_settings = {}; +} + +local function setup_callbacks(config) + config.callbacks = config.callbacks or {} + + config.callbacks["window/logMessage"] = function(err, method, params, client_id) + if params and params.type <= config.texlab_log_level then + lsp.builtin_callbacks[method](err, method, params, client_id) + end + end + + -- TODO use existing callback? + config.callbacks["workspace/configuration"] = function(err, method, params, client_id) + if err then error(tostring(err)) end + if not params.items then + return {} + end + + local result = {} + for _, item in ipairs(params.items) do + if item.section then + local value = util.lookup_section(config, item.section) or vim.NIL + print(string.format("config[%q] = %s", item.section, vim.inspect(value))) + table.insert(result, value) + end + end + return result + end +end + +-- A function to set up SKELETON easier. +-- +-- Additionally, it sets up the following commands: +-- - SKELETONCommand +-- +-- {config} is the same as |vim.lsp.add_filetype_config()|, but with some +-- additions and changes: +-- +-- {SKELETON_log_level} +-- controls the level of logs to show from build processes and other +-- window/logMessage events. By default it is set to +-- vim.lsp.protocol.MessageType.Warning instead of +-- vim.lsp.protocol.MessageType.Log. +-- +-- {SKELETON_settings} +-- This is a table, and the keys are case sensitive. +-- Example: `SKELETON_settings = { }` +-- +-- {filetype} +-- Defaults to {"c", "cpp"} +-- +-- {cmd} +-- Defaults to {"SKELETON"} +-- +-- {name} +-- Defaults to "SKELETON" +function M.setup(config) + config = vim.tbl_extend("keep", config, default_config) + + util.tbl_deep_extend(config.settings, default_config.settings) + + config.capabilities = config.capabilities or vim.lsp.protocol.make_client_capabilities() + util.tbl_deep_extend(config.capabilities, { + workspace = { + configuration = true; + } + }) + + setup_callbacks(config) + + config.on_attach = util.add_hook_after(config.on_attach, function(client, bufnr) + if bufnr == api.nvim_get_current_buf() then + M._setup_buffer() + else + util.nvim_multiline_command(string.format("autocmd BufEnter <buffer=%d> ++once lua require'common_lsp/SKELETON'._setup_buffer()", bufnr)) + end + end) + + -- TODO should this find the project root instead? + lsp.add_filetype_config(config) +end + +function M._setup_buffer() + util.nvim_multiline_command [[ + ]] +end + +return M +-- vim:et ts=2 sw=2 + |
