From 0318a3cbc1dc3fad7681ae33ca580da067f23f3b Mon Sep 17 00:00:00 2001 From: hrsh7th <> Date: Fri, 13 May 2022 19:25:00 +0900 Subject: [PATCH] Improve the codes for sumneko friendly --- lua/cmp/init.lua | 2 +- lua/cmp/source.lua | 2 +- lua/cmp/types/cmp.lua | 77 +++++++------ lua/cmp/types/lsp.lua | 230 +++++++++++++++++++-------------------- lua/cmp/types/vim.lua | 6 +- lua/cmp/utils/binary.lua | 4 +- lua/cmp/utils/char.lua | 10 +- lua/cmp/utils/misc.lua | 2 +- 8 files changed, 170 insertions(+), 163 deletions(-) diff --git a/lua/cmp/init.lua b/lua/cmp/init.lua index 60184d0..06f5f41 100644 --- a/lua/cmp/init.lua +++ b/lua/cmp/init.lua @@ -307,7 +307,7 @@ autocmd.subscribe('CmdlineChanged', async.debounce_next_tick(on_text_changed)) autocmd.subscribe('CursorMovedI', function() if config.enabled() then cmp.core:on_moved() - else + else cmp.core:reset() cmp.core.view:close() end diff --git a/lua/cmp/source.lua b/lua/cmp/source.lua index b73d43e..bee0634 100644 --- a/lua/cmp/source.lua +++ b/lua/cmp/source.lua @@ -26,7 +26,7 @@ local char = require('cmp.utils.char') ---@field public complete_dedup function local source = {} ----@alias cmp.SourceStatus "1" | "2" | "3" +---@alias cmp.SourceStatus 1 | 2 | 3 source.SourceStatus = {} source.SourceStatus.WAITING = 1 source.SourceStatus.FETCHING = 2 diff --git a/lua/cmp/types/cmp.lua b/lua/cmp/types/cmp.lua index 574e533..36a9c49 100644 --- a/lua/cmp/types/cmp.lua +++ b/lua/cmp/types/cmp.lua @@ -1,37 +1,43 @@ local cmp = {} ----@alias cmp.ConfirmBehavior "'insert'" | "'replace'" -cmp.ConfirmBehavior = {} -cmp.ConfirmBehavior.Insert = 'insert' -cmp.ConfirmBehavior.Replace = 'replace' +---@alias cmp.ConfirmBehavior 'insert' | 'replace' +cmp.ConfirmBehavior = { + Insert = 'insert', + Replace = 'replace', +} ----@alias cmp.SelectBehavior "'insert'" | "'select'" -cmp.SelectBehavior = {} -cmp.SelectBehavior.Insert = 'insert' -cmp.SelectBehavior.Select = 'select' +---@alias cmp.SelectBehavior 'insert' | 'select' +cmp.SelectBehavior = { + Insert = 'insert', + Select = 'select', +} ----@alias cmp.ContextReason "'auto'" | "'manual'" | "'none'" -cmp.ContextReason = {} -cmp.ContextReason.Auto = 'auto' -cmp.ContextReason.Manual = 'manual' -cmp.ContextReason.TriggerOnly = 'triggerOnly' -cmp.ContextReason.None = 'none' +---@alias cmp.ContextReason 'auto' | 'manual' 'triggerOnly' | 'none' +cmp.ContextReason = { + Auto = 'auto', + Manual = 'manual', + TriggerOnly = 'triggerOnly', + None = 'none', +} ----@alias cmp.TriggerEvent "'InsertEnter'" | "'TextChanged'" -cmp.TriggerEvent = {} -cmp.TriggerEvent.InsertEnter = 'InsertEnter' -cmp.TriggerEvent.TextChanged = 'TextChanged' +---@alias cmp.TriggerEvent 'InsertEnter' | 'TextChanged' +cmp.TriggerEvent = { + InsertEnter = 'InsertEnter', + TextChanged = 'TextChanged', +} ----@alias cmp.PreselectMode "'item'" | "'None'" -cmp.PreselectMode = {} -cmp.PreselectMode.Item = 'item' -cmp.PreselectMode.None = 'none' +---@alias cmp.PreselectMode 'item' | 'None' +cmp.PreselectMode = { + Item = 'item', + None = 'none', +} ----@alias cmp.ItemField "'abbr'" | "'kind'" | "'menu'" -cmp.ItemField = {} -cmp.ItemField.Abbr = 'abbr' -cmp.ItemField.Kind = 'kind' -cmp.ItemField.Menu = 'menu' +---@alias cmp.ItemField 'abbr' | 'kind' | 'menu' +cmp.ItemField = { + Abbr = 'abbr', + Kind = 'kind', + Menu = 'menu', +} ---@class cmp.ContextOption ---@field public reason cmp.ContextReason|nil @@ -86,9 +92,9 @@ cmp.ItemField.Menu = 'menu' ---@field public view cmp.ViewConfig ---@field public experimental cmp.ExperimentalConfig ---- @class cmp.WindowConfig ---- @field completion cmp.WindowConfig ---- @field documentation cmp.WindowConfig|nil +---@class cmp.WindowConfig +---@field completion cmp.WindowConfig +---@field documentation cmp.WindowConfig|nil ---@class cmp.CompletionConfig ---@field public autocomplete cmp.TriggerEvent[] @@ -125,8 +131,7 @@ cmp.ItemField.Menu = 'menu' ---@field public expand fun(args: cmp.SnippetExpansionParams) ---@class cmp.ExperimentalConfig ----@field public native_menu boolean ----@field public ghost_text cmp.GhostTextConfig|"false" +---@field public ghost_text cmp.GhostTextConfig|false ---@class cmp.GhostTextConfig ---@field hl_group string @@ -147,14 +152,14 @@ cmp.ItemField.Menu = 'menu' ---@alias cmp.EntriesConfig cmp.CustomEntriesConfig|cmp.NativeEntriesConfig|cmp.WildmenuEntriesConfig|string ---@class cmp.CustomEntriesConfig ----@field name "'custom'" ----@field selection_order "'top_down'"|"'near_cursor'" +---@field name 'custom' +---@field selection_order 'top_down'|'near_cursor' ---@class cmp.NativeEntriesConfig ----@field name "'native'" +---@field name 'native' ---@class cmp.WildmenuEntriesConfig ----@field name "'wildmenu'" +---@field name 'wildmenu' ---@field separator string|nil return cmp diff --git a/lua/cmp/types/lsp.lua b/lua/cmp/types/lsp.lua index c8a0447..f40fe8b 100644 --- a/lua/cmp/types/lsp.lua +++ b/lua/cmp/types/lsp.lua @@ -1,138 +1,138 @@ local misc = require('cmp.utils.misc') + ---@see https://microsoft.github.io/language-server-protocol/specifications/specification-current/ ---@class lsp local lsp = {} -lsp.Position = {} - ----Convert lsp.Position to vim.Position ----@param buf number|string ----@param position lsp.Position ----@return vim.Position -lsp.Position.to_vim = function(buf, position) - if not vim.api.nvim_buf_is_loaded(buf) then - vim.fn.bufload(buf) - end - local lines = vim.api.nvim_buf_get_lines(buf, position.line, position.line + 1, false) - if #lines > 0 then +lsp.Position = { + ---Convert lsp.Position to vim.Position + ---@param buf number|string + ---@param position lsp.Position + ---@return vim.Position + to_vim = function(buf, position) + if not vim.api.nvim_buf_is_loaded(buf) then + vim.fn.bufload(buf) + end + local lines = vim.api.nvim_buf_get_lines(buf, position.line, position.line + 1, false) + if #lines > 0 then + return { + row = position.line + 1, + col = misc.to_vimindex(lines[1], position.character), + } + end return { row = position.line + 1, - col = misc.to_vimindex(lines[1], position.character), + col = position.character + 1, } - end - return { - row = position.line + 1, - col = position.character + 1, - } -end - ----Convert vim.Position to lsp.Position ----@param buf number|string ----@param position vim.Position ----@return lsp.Position -lsp.Position.to_lsp = function(buf, position) - if not vim.api.nvim_buf_is_loaded(buf) then - vim.fn.bufload(buf) - end - local lines = vim.api.nvim_buf_get_lines(buf, position.row - 1, position.row, false) - if #lines > 0 then + end, + ---Convert vim.Position to lsp.Position + ---@param buf number|string + ---@param position vim.Position + ---@return lsp.Position + to_lsp = function(buf, position) + if not vim.api.nvim_buf_is_loaded(buf) then + vim.fn.bufload(buf) + end + local lines = vim.api.nvim_buf_get_lines(buf, position.row - 1, position.row, false) + if #lines > 0 then + return { + line = position.row - 1, + character = misc.to_utfindex(lines[1], position.col), + } + end return { line = position.row - 1, - character = misc.to_utfindex(lines[1], position.col), + character = position.col - 1, } - end - return { - line = position.row - 1, - character = position.col - 1, - } -end + end, +} -lsp.Range = {} +lsp.Range = { + ---Convert lsp.Range to vim.Range + ---@param buf number|string + ---@param range lsp.Range + ---@return vim.Range + to_vim = function(buf, range) + return { + start = lsp.Position.to_vim(buf, range.start), + ['end'] = lsp.Position.to_vim(buf, range['end']), + } + end, ----Convert lsp.Range to vim.Range ----@param buf number|string ----@param range lsp.Range ----@return vim.Range -lsp.Range.to_vim = function(buf, range) - return { - start = lsp.Position.to_vim(buf, range.start), - ['end'] = lsp.Position.to_vim(buf, range['end']), - } -end + ---Convert vim.Range to lsp.Range + ---@param buf number|string + ---@param range vim.Range + ---@return lsp.Range + to_lsp = function(buf, range) + return { + start = lsp.Position.to_lsp(buf, range.start), + ['end'] = lsp.Position.to_lsp(buf, range['end']), + } + end, +} ----Convert vim.Range to lsp.Range ----@param buf number|string ----@param range vim.Range ----@return lsp.Range -lsp.Range.to_lsp = function(buf, range) - return { - start = lsp.Position.to_lsp(buf, range.start), - ['end'] = lsp.Position.to_lsp(buf, range['end']), - } -end +---@alias lsp.CompletionTriggerKind 1 | 2 | 3 +lsp.CompletionTriggerKind = { + Invoked = 1, + TriggerCharacter = 2, + TriggerForIncompleteCompletions = 3, +} ----@alias lsp.CompletionTriggerKind "1" | "2" | "3" -lsp.CompletionTriggerKind = {} -lsp.CompletionTriggerKind.Invoked = 1 -lsp.CompletionTriggerKind.TriggerCharacter = 2 -lsp.CompletionTriggerKind.TriggerForIncompleteCompletions = 3 +---@alias lsp.InsertTextFormat 1 | 2 +lsp.InsertTextFormat = {} +lsp.InsertTextFormat.PlainText = 1 +lsp.InsertTextFormat.Snippet = 2 + +---@alias lsp.InsertTextMode 1 | 2 +lsp.InsertTextMode = { + AsIs = 1, + AdjustIndentation = 2, +} + +---@alias lsp.MarkupKind 'plaintext' | 'markdown' +lsp.MarkupKind = { + PlainText = 'plaintext', + Markdown = 'markdown', +} + +---@alias lsp.CompletionItemTag 1 +lsp.CompletionItemTag = { + Deprecated = 1, +} + +---@alias lsp.CompletionItemKind 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 +lsp.CompletionItemKind = { + Text = 1, + Method = 2, + Function = 3, + Constructor = 4, + Field = 5, + Variable = 6, + Class = 7, + Interface = 8, + Module = 9, + Property = 10, + Unit = 11, + Value = 12, + Enum = 13, + Keyword = 14, + Snippet = 15, + Color = 16, + File = 17, + Reference = 18, + Folder = 19, + EnumMember = 20, + Constant = 21, + Struct = 22, + Event = 23, + Operator = 24, + TypeParameter = 25, +} ---@class lsp.CompletionContext ---@field public triggerKind lsp.CompletionTriggerKind ---@field public triggerCharacter string|nil ----@alias lsp.InsertTextFormat "1" | "2" -lsp.InsertTextFormat = {} -lsp.InsertTextFormat.PlainText = 1 -lsp.InsertTextFormat.Snippet = 2 -lsp.InsertTextFormat = vim.tbl_add_reverse_lookup(lsp.InsertTextFormat) - ----@alias lsp.InsertTextMode "1" | "2" -lsp.InsertTextMode = {} -lsp.InsertTextMode.AsIs = 0 -lsp.InsertTextMode.AdjustIndentation = 1 -lsp.InsertTextMode = vim.tbl_add_reverse_lookup(lsp.InsertTextMode) - ----@alias lsp.MarkupKind "'plaintext'" | "'markdown'" -lsp.MarkupKind = {} -lsp.MarkupKind.PlainText = 'plaintext' -lsp.MarkupKind.Markdown = 'markdown' -lsp.MarkupKind = vim.tbl_add_reverse_lookup(lsp.MarkupKind) - ----@alias lsp.CompletionItemTag "1" -lsp.CompletionItemTag = {} -lsp.CompletionItemTag.Deprecated = 1 -lsp.CompletionItemTag = vim.tbl_add_reverse_lookup(lsp.CompletionItemTag) - ----@alias lsp.CompletionItemKind "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" -lsp.CompletionItemKind = {} -lsp.CompletionItemKind.Text = 1 -lsp.CompletionItemKind.Method = 2 -lsp.CompletionItemKind.Function = 3 -lsp.CompletionItemKind.Constructor = 4 -lsp.CompletionItemKind.Field = 5 -lsp.CompletionItemKind.Variable = 6 -lsp.CompletionItemKind.Class = 7 -lsp.CompletionItemKind.Interface = 8 -lsp.CompletionItemKind.Module = 9 -lsp.CompletionItemKind.Property = 10 -lsp.CompletionItemKind.Unit = 11 -lsp.CompletionItemKind.Value = 12 -lsp.CompletionItemKind.Enum = 13 -lsp.CompletionItemKind.Keyword = 14 -lsp.CompletionItemKind.Snippet = 15 -lsp.CompletionItemKind.Color = 16 -lsp.CompletionItemKind.File = 17 -lsp.CompletionItemKind.Reference = 18 -lsp.CompletionItemKind.Folder = 19 -lsp.CompletionItemKind.EnumMember = 20 -lsp.CompletionItemKind.Constant = 21 -lsp.CompletionItemKind.Struct = 22 -lsp.CompletionItemKind.Event = 23 -lsp.CompletionItemKind.Operator = 24 -lsp.CompletionItemKind.TypeParameter = 25 -lsp.CompletionItemKind = vim.tbl_add_reverse_lookup(lsp.CompletionItemKind) - ---@class lsp.CompletionList ---@field public isIncomplete boolean ---@field public items lsp.CompletionItem[] diff --git a/lua/cmp/types/vim.lua b/lua/cmp/types/vim.lua index 0ae28c6..95e757d 100644 --- a/lua/cmp/types/vim.lua +++ b/lua/cmp/types/vim.lua @@ -3,9 +3,9 @@ ---@field public abbr string|nil ---@field public kind string|nil ---@field public menu string|nil ----@field public equal "1"|nil ----@field public empty "1"|nil ----@field public dup "1"|nil +---@field public equal 1|nil +---@field public empty 1|nil +---@field public dup 1|nil ---@field public id any ---@field public abbr_hl_group string|nil ---@field public kind_hl_group string|nil diff --git a/lua/cmp/utils/binary.lua b/lua/cmp/utils/binary.lua index ab1b0d2..c6a7088 100644 --- a/lua/cmp/utils/binary.lua +++ b/lua/cmp/utils/binary.lua @@ -3,7 +3,7 @@ local binary = {} ---Insert item to list to ordered index ---@param list any[] ---@param item any ----@param func fun(a: any, b: any): "1"|"-1"|"0" +---@param func fun(a: any, b: any): 1|-1|0 binary.insort = function(list, item, func) table.insert(list, binary.search(list, item, func), item) end @@ -11,7 +11,7 @@ end ---Search suitable index from list ---@param list any[] ---@param item any ----@param func fun(a: any, b: any): "1"|"-1"|"0" +---@param func fun(a: any, b: any): 1|-1|0 ---@return number binary.search = function(list, item, func) local s = 1 diff --git a/lua/cmp/utils/char.lua b/lua/cmp/utils/char.lua index 12a1809..6e18994 100644 --- a/lua/cmp/utils/char.lua +++ b/lua/cmp/utils/char.lua @@ -1,20 +1,22 @@ +local _ + local alpha = {} -string.gsub('abcdefghijklmnopqrstuvwxyz', '.', function(char) +_ = string.gsub('abcdefghijklmnopqrstuvwxyz', '.', function(char) alpha[string.byte(char)] = true end) local ALPHA = {} -string.gsub('ABCDEFGHIJKLMNOPQRSTUVWXYZ', '.', function(char) +_ = string.gsub('ABCDEFGHIJKLMNOPQRSTUVWXYZ', '.', function(char) ALPHA[string.byte(char)] = true end) local digit = {} -string.gsub('1234567890', '.', function(char) +_ = string.gsub('1234567890', '.', function(char) digit[string.byte(char)] = true end) local white = {} -string.gsub(' \t\n', '.', function(char) +_ = string.gsub(' \t\n', '.', function(char) white[string.byte(char)] = true end) diff --git a/lua/cmp/utils/misc.lua b/lua/cmp/utils/misc.lua index 9535f28..7c6d0e7 100644 --- a/lua/cmp/utils/misc.lua +++ b/lua/cmp/utils/misc.lua @@ -134,7 +134,7 @@ misc.safe = function(v) end ---Treat 1/0 as bool value ----@param v boolean|"1"|"0" +---@param v boolean|1|0 ---@param def boolean ---@return boolean misc.bool = function(v, def)