diff options
| author | William Boman <william@redwill.se> | 2021-12-25 21:47:57 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-25 21:47:57 +0100 |
| commit | 5957e7a29005c286eaf2cc619e826cfd980eb5ff (patch) | |
| tree | 8fb998c67cdb195ad68813498cace7ef64044a8c /lua/nvim-lsp-installer/ui/status-win/server_hints.lua | |
| parent | fix(zls): add chmod +x to binary (#362) (diff) | |
| download | mason-5957e7a29005c286eaf2cc619e826cfd980eb5ff.tar mason-5957e7a29005c286eaf2cc619e826cfd980eb5ff.tar.gz mason-5957e7a29005c286eaf2cc619e826cfd980eb5ff.tar.bz2 mason-5957e7a29005c286eaf2cc619e826cfd980eb5ff.tar.lz mason-5957e7a29005c286eaf2cc619e826cfd980eb5ff.tar.xz mason-5957e7a29005c286eaf2cc619e826cfd980eb5ff.tar.zst mason-5957e7a29005c286eaf2cc619e826cfd980eb5ff.zip | |
feat(ui): sort servers alphabetically, also add language hints (#361)
Diffstat (limited to 'lua/nvim-lsp-installer/ui/status-win/server_hints.lua')
| -rw-r--r-- | lua/nvim-lsp-installer/ui/status-win/server_hints.lua | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/lua/nvim-lsp-installer/ui/status-win/server_hints.lua b/lua/nvim-lsp-installer/ui/status-win/server_hints.lua new file mode 100644 index 00000000..daf5e9b6 --- /dev/null +++ b/lua/nvim-lsp-installer/ui/status-win/server_hints.lua @@ -0,0 +1,41 @@ +---@class ServerHints +---@field server Server +local ServerHints = {} +ServerHints.__index = ServerHints + +function ServerHints.new(server) + return setmetatable({ server = server }, ServerHints) +end + +---@param language string +---@return boolean +function ServerHints:is_language_equal(language) + local match_start, match_end = self.server.name:find(language, 1, true) + -- This is somewhat... arbitrary + return match_start ~= nil + and (match_end - match_start) >= 2 -- the match need to be at least 2 in length + -- match needs to start in the beginning - if it's not, then the total string lengths cannot differ too much + and (match_start == 1 or (match_start < 3 and (math.abs(#self.server.name - #language) < 4))) +end + +function ServerHints:get_hints() + local hints = {} + if self.server.languages then + for _, language in ipairs(self.server.languages) do + if not self:is_language_equal(language) then + hints[#hints + 1] = language + end + end + end + return hints +end + +function ServerHints:__tostring() + local hints = self:get_hints() + if #hints == 0 then + return "" + end + return "(" .. table.concat(hints, ", ") .. ")" +end + +return ServerHints |
