* 3.17

* PositionEncodingKind

* Implement PositionEncodingKind

* Remove luarc.json
This commit is contained in:
hrsh7th
2022-11-16 01:27:15 +09:00
committed by GitHub
parent aee40113c2
commit e820335208
9 changed files with 353 additions and 94 deletions

View File

@@ -46,7 +46,6 @@ source.new = function(name, s)
end
---Reset current completion state
---@return boolean
source.reset = function(self)
self.cache:clear()
self.revision = self.revision + 1
@@ -124,7 +123,7 @@ source.get_entries = function(self, ctx)
end
end
end
self.cache:set({ 'get_entries', self.revision, ctx.cursor_before_line }, entries)
self.cache:set({ 'get_entries', tostring(self.revision), ctx.cursor_before_line }, entries)
local max_item_count = self:get_source_config().max_item_count or 200
local limited_entries = {}
@@ -137,44 +136,44 @@ source.get_entries = function(self, ctx)
return limited_entries
end
---Get default insert range
---Get default insert range (UTF8 byte index).
---@return lsp.Range
source.get_default_insert_range = function(self)
if not self.context then
error('context is not initialized yet.')
end
return self.cache:ensure({ 'get_default_insert_range', self.revision }, function()
return self.cache:ensure({ 'get_default_insert_range', tostring(self.revision) }, function()
return {
start = {
line = self.context.cursor.row - 1,
character = misc.to_utfindex(self.context.cursor_line, self.offset),
character = self.offset - 1,
},
['end'] = {
line = self.context.cursor.row - 1,
character = misc.to_utfindex(self.context.cursor_line, self.context.cursor.col),
character = self.context.cursor.col - 1,
},
}
end)
end
---Get default replace range
---Get default replace range (UTF8 byte index).
---@return lsp.Range
source.get_default_replace_range = function(self)
if not self.context then
error('context is not initialized yet.')
end
return self.cache:ensure({ 'get_default_replace_range', self.revision }, function()
return self.cache:ensure({ 'get_default_replace_range', tostring(self.revision) }, function()
local _, e = pattern.offset('^' .. '\\%(' .. self:get_keyword_pattern() .. '\\)', string.sub(self.context.cursor_line, self.offset))
return {
start = {
line = self.context.cursor.row - 1,
character = misc.to_utfindex(self.context.cursor_line, self.offset),
character = self.offset,
},
['end'] = {
line = self.context.cursor.row - 1,
character = misc.to_utfindex(self.context.cursor_line, e and self.offset + e - 1 or self.context.cursor.col),
character = (e and self.offset + e - 2 or self.context.cursor.col - 1),
},
}
end)
@@ -223,7 +222,10 @@ source.get_keyword_pattern = function(self)
return c.keyword_pattern
end
if self.source.get_keyword_pattern then
return self.source:get_keyword_pattern(misc.copy(c))
local keyword_pattern = self.source:get_keyword_pattern(misc.copy(c))
if keyword_pattern then
return keyword_pattern
end
end
return config.get().completion.keyword_pattern
end
@@ -239,21 +241,30 @@ source.get_keyword_length = function(self)
end
---Get filter
--@return function
--@return fun(entry: cmp.Entry, context: cmp.Context): boolean
source.get_entry_filter = function(self)
local c = self:get_source_config()
if c.entry_filter then
return c.entry_filter
return c.entry_filter --[[@as fun(entry: cmp.Entry, context: cmp.Context): boolean]]
end
return function(_, _)
return true
end
end
---Get lsp.PositionEncodingKind
---@return lsp.PositionEncodingKind
source.get_position_encoding_kind = function(self)
if self.source.get_position_encoding_kind then
return self.source:get_position_encoding_kind()
end
return types.lsp.PositionEncodingKind.UTF16
end
---Invoke completion
---@param ctx cmp.Context
---@param callback function
---@return boolean Return true if not trigger completion.
---@return boolean? Return true if not trigger completion.
source.complete = function(self, ctx, callback)
local offset = ctx:get_offset(self:get_keyword_pattern())
@@ -318,6 +329,7 @@ source.complete = function(self, ctx, callback)
completion_context = completion_context,
}),
self.complete_dedup(vim.schedule_wrap(function(response)
---@type lsp.CompletionResponse
response = response or {}
self.incomplete = response.isIncomplete or false
@@ -331,7 +343,7 @@ source.complete = function(self, ctx, callback)
self.entries = {}
for i, item in ipairs(response.items or response) do
if (misc.safe(item) or {}).label then
local e = entry.new(ctx, self, item)
local e = entry.new(ctx, self, item, response.itemDefaults)
self.entries[i] = e
self.offset = math.min(self.offset, e:get_offset())
end