aboutsummaryrefslogtreecommitdiffstats
path: root/lua/nvim-lsp-installer/ui/status-win/server_hints.lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2021-12-25 21:47:57 +0100
committerGitHub <noreply@github.com>2021-12-25 21:47:57 +0100
commit5957e7a29005c286eaf2cc619e826cfd980eb5ff (patch)
tree8fb998c67cdb195ad68813498cace7ef64044a8c /lua/nvim-lsp-installer/ui/status-win/server_hints.lua
parentfix(zls): add chmod +x to binary (#362) (diff)
downloadmason-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.lua41
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