[mirror] Make your go dev experience better
github.com/olexsmir/gopher.nvim
neovim
golang
1local c = require "gopher.config"
2local log = require "gopher._utils.log"
3local utils = {}
4
5---@param msg string
6---@param lvl? integer by default `vim.log.levels.INFO`
7function utils.notify(msg, lvl)
8 lvl = lvl or vim.log.levels.INFO
9 vim.notify(msg, lvl, {
10 ---@diagnostic disable-next-line:undefined-field
11 title = c.___plugin_name,
12 })
13 log.debug(msg)
14end
15
16---@param path string
17---@return string
18function utils.readfile_joined(path)
19 return table.concat(vim.fn.readfile(path), "\n")
20end
21
22---@param t string[]
23---@return string[]
24function utils.remove_empty_lines(t)
25 local res = {}
26 for _, line in ipairs(t) do
27 if line ~= "" then
28 table.insert(res, line)
29 end
30 end
31 return res
32end
33
34---@param s string
35---@return string
36function utils.trimend(s)
37 local r, _ = string.gsub(s, "%s+$", "")
38 return r
39end
40
41-- Since indentation can be spaces or tabs, that's my hack around it
42---@param line string
43---@param indent integer
44---@return string
45function utils.indent(line, indent)
46 local char = string.sub(line, 1, 1)
47 if char ~= " " and char ~= "\t" then
48 char = " "
49 end
50 return string.rep(char, indent)
51end
52
53---@generic T
54---@param tbl T[]
55---@return T[]
56function utils.list_unique(tbl)
57 if vim.fn.has "nvim-0.12" == 1 then
58 return vim.list.unique(tbl)
59 end
60
61 for i = #tbl, 1, -1 do
62 for j = 1, i - 1 do
63 if tbl[i] == tbl[j] then
64 table.remove(tbl, i)
65 break
66 end
67 end
68 end
69 return tbl
70end
71
72return utils