--- Entries are the basic items in the completion menu. Arguably the most important field is the
--- completion item for which the lsp type is used.
---@class care.entry
---@field completion_item lsp.CompletionItem
--- The new function is the constructor for a new completion entry.
---@field new fun(completion_item: lsp.CompletionItem, source: care.internal_source, context: care.context): care.entry
--- This function is used to get the text that will be inserted for the entry. This is important for
--- the ghost text.
---@field get_insert_text fun(self: care.entry): string
--- This function is used to get part of the text that will be inserted for the entry. It just uses
--- a pattern to match the insert text and get the beginning of it which matches a vim `word`. This
--- is often e.g. the method name but without the parentheses and parameter names. That function is
--- used for the `insert` selection behavior.
---@field get_insert_word fun(self: care.entry): string
--- This is the source from which the entry came. This is important for using the right keyword
--- pattern and getting the right offset.
---@field source care.internal_source
--- This is the context in which the entry was completed. This is important to now what context text-
--- edits of the entry target.
---@field context care.context
--- Position of matches which were found during filtering. This is just used to highlight them in the
--- completion menu with `@care.match`.
---@field matches integer[]
--- This is the score obtained from filtering. It is used to sort which happens in the
--- `care.matcher` module.
---@field score number
--- Essentially where entry insertion should happen (column, 0-based)
---@field get_offset fun(self: care.entry): integer
--- Gets the range for inserting the entry (insert of InsertReplaceEdit)
---@field get_insert_range fun(self: care.entry): lsp.Range
--- Gets the range for inserting the entry (insert of InsertReplaceEdit)
---@field get_replace_range fun(self: care.entry): lsp.Range
--- Gets the default range for entry (if there is no textEdit)
---@field _get_default_range fun(self: care.entry): lsp.Range
--- Gets the documentation for an entry. This includes adding the detail.
---@field get_documentation fun(self: care.entry) : string[]?, string?
