who knows
This commit is contained in:
@ -2,170 +2,152 @@ local use_google = require("utils").use_google
|
|||||||
local flags = require("utils").flags
|
local flags = require("utils").flags
|
||||||
|
|
||||||
return {
|
return {
|
||||||
{
|
{
|
||||||
"saghen/blink.compat",
|
"saghen/blink.compat",
|
||||||
-- use the latest release, via version = '*', if you also use the latest release for blink.cmp
|
-- use the latest release, via version = '*', if you also use the latest release for blink.cmp
|
||||||
version = "*",
|
version = "*",
|
||||||
-- lazy.nvim will automatically load the plugin when it's required by blink.cmp
|
-- lazy.nvim will automatically load the plugin when it's required by blink.cmp
|
||||||
lazy = true,
|
lazy = true,
|
||||||
cond = flags.blink,
|
cond = flags.blink,
|
||||||
-- make sure to set opts so that lazy.nvim calls blink.compat's setup
|
-- make sure to set opts so that lazy.nvim calls blink.compat's setup
|
||||||
opts = {
|
opts = {
|
||||||
impersonate_nvim_cmp = true,
|
impersonate_nvim_cmp = true,
|
||||||
debug = true,
|
debug = true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"saghen/blink.cmp",
|
"saghen/blink.cmp",
|
||||||
lazy = false, -- lazy loading handled internally
|
lazy = false, -- lazy loading handled internally
|
||||||
cond = flags.blink,
|
cond = flags.blink,
|
||||||
dependencies = {
|
dependencies = {
|
||||||
"Exafunction/codeium.nvim",
|
"Exafunction/codeium.nvim",
|
||||||
"chrisgrieser/cmp-nerdfont",
|
"chrisgrieser/cmp-nerdfont",
|
||||||
"hrsh7th/cmp-nvim-lsp",
|
"hrsh7th/cmp-nvim-lsp",
|
||||||
"mikavilpas/blink-ripgrep.nvim",
|
"mikavilpas/blink-ripgrep.nvim",
|
||||||
"moyiz/blink-emoji.nvim",
|
"moyiz/blink-emoji.nvim",
|
||||||
"rafamadriz/friendly-snippets", -- optional: provides snippets for the snippet source
|
"rafamadriz/friendly-snippets", -- optional: provides snippets for the snippet source
|
||||||
"saghen/blink.compat",
|
"saghen/blink.compat",
|
||||||
},
|
},
|
||||||
version = "v0.*", -- use a release tag to download pre-built binaries
|
version = "v0.*", -- use a release tag to download pre-built binaries
|
||||||
-- build = 'cargo build --release',
|
-- build = 'cargo build --release',
|
||||||
|
|
||||||
---@module 'blink.cmp'
|
---@module 'blink.cmp'
|
||||||
---@type blink.cmp.Config
|
---@type blink.cmp.Config
|
||||||
opts = {
|
opts = {
|
||||||
-- stylua: ignore
|
-- stylua: ignore
|
||||||
keymap = {
|
keymap = {
|
||||||
preset = "none",
|
preset = "none",
|
||||||
["<C-space>"] = { "show", "show_documentation", "hide_documentation" },
|
["<C-space>"] = { "show", "show_documentation", "hide_documentation" },
|
||||||
["<C-e>"] = { "hide", "fallback" },
|
["<C-e>"] = { "hide", "fallback" },
|
||||||
["<CR>"] = { "accept", "fallback" },
|
["<CR>"] = { "accept", "fallback" },
|
||||||
|
|
||||||
["<Tab>"] = { "select_next", "snippet_forward", "accept", "fallback" },
|
["<Tab>"] = { "select_next", "snippet_forward", "accept", "fallback" },
|
||||||
["<S-Tab>"] = { "select_prev", "snippet_backward", "fallback" },
|
["<S-Tab>"] = { "select_prev", "snippet_backward", "fallback" },
|
||||||
|
|
||||||
["<Up>"] = { "select_prev", "fallback" },
|
["<Up>"] = { "select_prev", "fallback" },
|
||||||
["<Down>"] = { "select_next", "fallback" },
|
["<Down>"] = { "select_next", "fallback" },
|
||||||
|
|
||||||
["<S-Up>"] = { "scroll_documentation_up", "fallback" },
|
["<S-Up>"] = { "scroll_documentation_up", "fallback" },
|
||||||
["<S-Down>"] = { "scroll_documentation_down", "fallback" },
|
["<S-Down>"] = { "scroll_documentation_down", "fallback" },
|
||||||
},
|
},
|
||||||
sources = {
|
sources = {
|
||||||
default = function(ctx)
|
default = function(ctx)
|
||||||
local providerToEnable = {
|
local providerToEnable = {
|
||||||
"lsp",
|
"lsp",
|
||||||
"path",
|
"path",
|
||||||
"snippets",
|
"snippets",
|
||||||
"ripgrep",
|
"ripgrep",
|
||||||
"emoji",
|
"emoji",
|
||||||
"nerdfont",
|
"nerdfont",
|
||||||
"buffer",
|
"buffer",
|
||||||
}
|
}
|
||||||
if use_google() then
|
if use_google() then
|
||||||
table.insert(providerToEnable, "nvim_ciderlsp")
|
table.insert(providerToEnable, "nvim_ciderlsp")
|
||||||
table.insert(providerToEnable, "buganizer")
|
table.insert(providerToEnable, "buganizer")
|
||||||
else
|
else
|
||||||
table.insert(providerToEnable, "codeium")
|
table.insert(providerToEnable, "codeium")
|
||||||
end
|
end
|
||||||
return providerToEnable
|
return providerToEnable
|
||||||
end,
|
end,
|
||||||
-- default = { "lsp" },
|
-- default = { "lsp" },
|
||||||
providers = {
|
providers = {
|
||||||
lsp = { name = "LSP", module = "blink.cmp.sources.lsp", score_offset = 90 },
|
lsp = { name = "LSP", module = "blink.cmp.sources.lsp", score_offset = 90 },
|
||||||
-- dont show LuaLS require statements when lazydev has items
|
-- dont show LuaLS require statements when lazydev has items
|
||||||
lazydev = { name = "LazyDev", module = "lazydev.integrations.blink", fallbacks = { "lsp" } },
|
lazydev = { name = "LazyDev", module = "lazydev.integrations.blink", fallbacks = { "lsp" } },
|
||||||
ripgrep = {
|
ripgrep = {
|
||||||
module = "blink-ripgrep",
|
module = "blink-ripgrep",
|
||||||
name = "Ripgrep",
|
name = "Ripgrep",
|
||||||
-- the options below are optional, some default values are shown
|
-- the options below are optional, some default values are shown
|
||||||
---@module "blink-ripgrep"
|
---@module "blink-ripgrep"
|
||||||
---@type blink-ripgrep.Options
|
---@type blink-ripgrep.Options
|
||||||
opts = {
|
opts = {
|
||||||
prefix_min_len = 3,
|
prefix_min_len = 3,
|
||||||
context_size = 5,
|
context_size = 5,
|
||||||
max_filesize = "1M",
|
max_filesize = "1M",
|
||||||
additional_rg_options = {},
|
additional_rg_options = {},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
-- https://github.com/moyiz/blink-emoji.nvim
|
-- https://github.com/moyiz/blink-emoji.nvim
|
||||||
emoji = {
|
emoji = {
|
||||||
module = "blink-emoji",
|
module = "blink-emoji",
|
||||||
name = "Emoji",
|
name = "Emoji",
|
||||||
score_offset = 15, -- the higher the number, the higher the priority
|
score_offset = 15, -- the higher the number, the higher the priority
|
||||||
opts = { insert = true }, -- Insert emoji (default) or complete its name
|
opts = { insert = true }, -- Insert emoji (default) or complete its name
|
||||||
},
|
},
|
||||||
buffer = {
|
buffer = {
|
||||||
name = "Buffer",
|
name = "Buffer",
|
||||||
enabled = true,
|
enabled = true,
|
||||||
max_items = 3,
|
max_items = 3,
|
||||||
module = "blink.cmp.sources.buffer",
|
module = "blink.cmp.sources.buffer",
|
||||||
min_keyword_length = 4,
|
min_keyword_length = 4,
|
||||||
score_offset = 15, -- the higher the number, the higher the priority
|
score_offset = 15, -- the higher the number, the higher the priority
|
||||||
},
|
},
|
||||||
-- compat sources
|
-- compat sources
|
||||||
nerdfont = {
|
nerdfont = {
|
||||||
name = "nerdfont",
|
name = "nerdfont",
|
||||||
module = "blink.compat.source",
|
module = "blink.compat.source",
|
||||||
},
|
},
|
||||||
codeium = {
|
codeium = {
|
||||||
name = "codeium",
|
name = "codeium",
|
||||||
module = "blink.compat.source",
|
module = "blink.compat.source",
|
||||||
score_offset = 100,
|
score_offset = 100,
|
||||||
},
|
},
|
||||||
nvim_ciderlsp = {
|
nvim_ciderlsp = {
|
||||||
name = "nvim_ciderlsp",
|
name = "nvim_ciderlsp",
|
||||||
module = "blink.compat.source",
|
module = "blink.compat.source",
|
||||||
score_offset = 100,
|
score_offset = 100,
|
||||||
},
|
},
|
||||||
buganizer = {
|
buganizer = {
|
||||||
name = "nvim_buganizer",
|
name = "nvim_buganizer",
|
||||||
module = "blink.compat.source",
|
module = "blink.compat.source",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
-- experimental signature help support
|
-- experimental signature help support
|
||||||
signature = { enabled = true },
|
signature = { enabled = true },
|
||||||
completion = {
|
completion = {
|
||||||
list = {
|
list = {
|
||||||
-- stylua: ignore
|
-- stylua: ignore
|
||||||
selection = {
|
selection = {
|
||||||
preselect = function(ctx) return ctx.mode ~= 'cmdline' end,
|
preselect = function(ctx) return ctx.mode ~= 'cmdline' end,
|
||||||
auto_insert = function(ctx) return ctx.mode ~= 'cmdline' end,
|
auto_insert = function(ctx) return ctx.mode ~= 'cmdline' end,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
documentation = {
|
documentation = {
|
||||||
auto_show = true,
|
auto_show = true,
|
||||||
},
|
},
|
||||||
-- Displays a preview of the selected item on the current line
|
-- Displays a preview of the selected item on the current line
|
||||||
ghost_text = {
|
ghost_text = {
|
||||||
enabled = true,
|
enabled = true,
|
||||||
},
|
},
|
||||||
menu = {
|
trigger = {
|
||||||
draw = {
|
show_on_x_blocked_trigger_characters = { "'", '"', "(", "{" },
|
||||||
components = {
|
},
|
||||||
kind_icon = {
|
},
|
||||||
ellipsis = false,
|
},
|
||||||
text = function(ctx)
|
|
||||||
local kind_icon, _, _ = require("mini.icons").get("lsp", ctx.kind)
|
|
||||||
return kind_icon
|
|
||||||
end,
|
|
||||||
-- Optionally, you may also use the highlights from mini.icons
|
|
||||||
highlight = function(ctx)
|
|
||||||
local _, hl, _ = require("mini.icons").get("lsp", ctx.kind)
|
|
||||||
return hl
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
trigger = {
|
|
||||||
show_on_x_blocked_trigger_characters = { "'", '"', "(", "{" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- allows extending the providers array elsewhere in your config
|
-- allows extending the providers array elsewhere in your config
|
||||||
-- without having to redefine it
|
-- without having to redefine it
|
||||||
opts_extend = { "sources.default" },
|
opts_extend = { "sources.default" },
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -1,129 +1,128 @@
|
|||||||
return {
|
return {
|
||||||
"williamboman/mason-lspconfig.nvim",
|
"williamboman/mason-lspconfig.nvim",
|
||||||
cond = false,
|
dependencies = {
|
||||||
dependencies = {
|
"williamboman/mason.nvim",
|
||||||
"williamboman/mason.nvim",
|
"Hoffs/omnisharp-extended-lsp.nvim",
|
||||||
"Hoffs/omnisharp-extended-lsp.nvim",
|
},
|
||||||
},
|
config = function()
|
||||||
config = function()
|
local TableConcat = require("utils").TableConcat
|
||||||
local TableConcat = require("utils").TableConcat
|
local use_google = require("utils").use_google
|
||||||
local use_google = require("utils").use_google
|
|
||||||
|
|
||||||
local lsps = {
|
local lsps = {
|
||||||
"lua_ls",
|
"lua_ls",
|
||||||
"html",
|
"html",
|
||||||
"marksman",
|
"marksman",
|
||||||
"sqlls",
|
"sqlls",
|
||||||
"bashls",
|
"bashls",
|
||||||
"dotls",
|
"dotls",
|
||||||
"golangci_lint_ls",
|
"golangci_lint_ls",
|
||||||
"gopls",
|
"gopls",
|
||||||
}
|
}
|
||||||
|
|
||||||
if not use_google() then
|
if not use_google() then
|
||||||
TableConcat(lsps, {
|
TableConcat(lsps, {
|
||||||
"pyright",
|
"pyright",
|
||||||
"omnisharp_mono",
|
"omnisharp_mono",
|
||||||
"docker_compose_language_service",
|
"docker_compose_language_service",
|
||||||
"dockerls",
|
"dockerls",
|
||||||
"graphql",
|
"graphql",
|
||||||
"kotlin_language_server",
|
"kotlin_language_server",
|
||||||
"arduino_language_server",
|
"arduino_language_server",
|
||||||
"clangd",
|
"clangd",
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
require("mason").setup()
|
require("mason").setup()
|
||||||
require("mason-lspconfig").setup({
|
require("mason-lspconfig").setup({
|
||||||
automatic_installation = false,
|
automatic_installation = false,
|
||||||
ensure_installed = lsps,
|
ensure_installed = lsps,
|
||||||
handlers = {
|
handlers = {
|
||||||
-- The first entry (without a key) will be the default handler
|
-- The first entry (without a key) will be the default handler
|
||||||
-- and will be called for each installed server that doesn't have
|
-- and will be called for each installed server that doesn't have
|
||||||
-- a dedicated handler.
|
-- a dedicated handler.
|
||||||
function(server_name) -- default handler (optional)
|
function(server_name) -- default handler (optional)
|
||||||
-- vim.notify("Mason LSP:" .. server_name)
|
-- vim.notify("Mason LSP:" .. server_name)
|
||||||
require("lspconfig")[server_name].setup({})
|
require("lspconfig")[server_name].setup({})
|
||||||
end,
|
end,
|
||||||
-- Prevent mason from setting up rust_analyzer since that's handled by rustaceanvim
|
-- Prevent mason from setting up rust_analyzer since that's handled by rustaceanvim
|
||||||
["rust_analyzer"] = function() end,
|
["rust_analyzer"] = function() end,
|
||||||
["omnisharp_mono"] = function()
|
["omnisharp_mono"] = function()
|
||||||
require("lspconfig").omnisharp_mono.setup({
|
require("lspconfig").omnisharp_mono.setup({
|
||||||
handlers = {
|
handlers = {
|
||||||
["textDocument/definition"] = require("omnisharp_extended").handler,
|
["textDocument/definition"] = require("omnisharp_extended").handler,
|
||||||
},
|
},
|
||||||
-- cmd = { "dotnet", "/path/to/omnisharp/OmniSharp.dll" },
|
-- cmd = { "dotnet", "/path/to/omnisharp/OmniSharp.dll" },
|
||||||
|
|
||||||
-- Enables support for reading code style, naming convention and analyzer
|
-- Enables support for reading code style, naming convention and analyzer
|
||||||
-- settings from .editorconfig.
|
-- settings from .editorconfig.
|
||||||
enable_editorconfig_support = true,
|
enable_editorconfig_support = true,
|
||||||
|
|
||||||
-- If true, MSBuild project system will only load projects for files that
|
-- If true, MSBuild project system will only load projects for files that
|
||||||
-- were opened in the editor. This setting is useful for big C# codebases
|
-- were opened in the editor. This setting is useful for big C# codebases
|
||||||
-- and allows for faster initialization of code navigation features only
|
-- and allows for faster initialization of code navigation features only
|
||||||
-- for projects that are relevant to code that is being edited. With this
|
-- for projects that are relevant to code that is being edited. With this
|
||||||
-- setting enabled OmniSharp may load fewer projects and may thus display
|
-- setting enabled OmniSharp may load fewer projects and may thus display
|
||||||
-- incomplete reference lists for symbols.
|
-- incomplete reference lists for symbols.
|
||||||
enable_ms_build_load_projects_on_demand = false, -- default false
|
enable_ms_build_load_projects_on_demand = false, -- default false
|
||||||
|
|
||||||
-- Enables support for roslyn analyzers, code fixes and rulesets.
|
-- Enables support for roslyn analyzers, code fixes and rulesets.
|
||||||
enable_roslyn_analyzers = true, -- default false
|
enable_roslyn_analyzers = true, -- default false
|
||||||
|
|
||||||
-- Specifies whether 'using' directives should be grouped and sorted during
|
-- Specifies whether 'using' directives should be grouped and sorted during
|
||||||
-- document formatting.
|
-- document formatting.
|
||||||
organize_imports_on_format = true, -- default false
|
organize_imports_on_format = true, -- default false
|
||||||
|
|
||||||
-- Enables support for showing unimported types and unimported extension
|
-- Enables support for showing unimported types and unimported extension
|
||||||
-- methods in completion lists. When committed, the appropriate using
|
-- methods in completion lists. When committed, the appropriate using
|
||||||
-- directive will be added at the top of the current file. This option can
|
-- directive will be added at the top of the current file. This option can
|
||||||
-- have a negative impact on initial completion responsiveness,
|
-- have a negative impact on initial completion responsiveness,
|
||||||
-- particularly for the first few completion sessions after opening a
|
-- particularly for the first few completion sessions after opening a
|
||||||
-- solution.
|
-- solution.
|
||||||
enable_import_completion = true, -- default false
|
enable_import_completion = true, -- default false
|
||||||
|
|
||||||
-- Specifies whether to include preview versions of the .NET SDK when
|
-- Specifies whether to include preview versions of the .NET SDK when
|
||||||
-- determining which version to use for project loading.
|
-- determining which version to use for project loading.
|
||||||
sdk_include_prereleases = true,
|
sdk_include_prereleases = true,
|
||||||
|
|
||||||
-- Only run analyzers against open files when 'enableRoslynAnalyzers' is
|
-- Only run analyzers against open files when 'enableRoslynAnalyzers' is
|
||||||
-- true
|
-- true
|
||||||
analyze_open_documents_only = true, -- default false
|
analyze_open_documents_only = true, -- default false
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
["lua_ls"] = function()
|
["lua_ls"] = function()
|
||||||
require("lspconfig").lua_ls.setup({
|
require("lspconfig").lua_ls.setup({
|
||||||
settings = {
|
settings = {
|
||||||
Lua = {
|
Lua = {
|
||||||
runtime = {
|
runtime = {
|
||||||
-- Tell the language server which version of Lua you're using
|
-- Tell the language server which version of Lua you're using
|
||||||
-- (most likely LuaJIT in the case of Neovim)
|
-- (most likely LuaJIT in the case of Neovim)
|
||||||
version = "LuaJIT",
|
version = "LuaJIT",
|
||||||
},
|
},
|
||||||
diagnostics = {
|
diagnostics = {
|
||||||
-- Get the language server to recognize the `vim` global
|
-- Get the language server to recognize the `vim` global
|
||||||
globals = {
|
globals = {
|
||||||
"vim",
|
"vim",
|
||||||
"require",
|
"require",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
workspace = {
|
workspace = {
|
||||||
checkThirdParty = false, -- stop a annoying dialog on startup
|
checkThirdParty = false, -- stop a annoying dialog on startup
|
||||||
-- Make the server aware of Neovim runtime files
|
-- Make the server aware of Neovim runtime files
|
||||||
-- library = vim.api.nvim_get_runtime_file("", true),
|
-- library = vim.api.nvim_get_runtime_file("", true),
|
||||||
library = {
|
library = {
|
||||||
[vim.fn.expand("$VIMRUNTIME/lua")] = true,
|
[vim.fn.expand("$VIMRUNTIME/lua")] = true,
|
||||||
[vim.fn.expand("$VIMRUNTIME/lua/vim/lsp")] = true,
|
[vim.fn.expand("$VIMRUNTIME/lua/vim/lsp")] = true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
-- Do not send telemetry data containing a randomized but unique identifier
|
-- Do not send telemetry data containing a randomized but unique identifier
|
||||||
telemetry = {
|
telemetry = {
|
||||||
enable = false,
|
enable = false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
@ -1,100 +1,100 @@
|
|||||||
local M = {
|
local M = {
|
||||||
use_google_cache = nil,
|
use_google_cache = nil,
|
||||||
flags = { blink = false },
|
flags = { blink = true },
|
||||||
}
|
}
|
||||||
|
|
||||||
function M.exec(command, args)
|
function M.exec(command, args)
|
||||||
local Job = require("plenary.job")
|
local Job = require("plenary.job")
|
||||||
local job = Job:new({
|
local job = Job:new({
|
||||||
command = command,
|
command = command,
|
||||||
args = args,
|
args = args,
|
||||||
})
|
})
|
||||||
job:sync()
|
job:sync()
|
||||||
job:wait()
|
job:wait()
|
||||||
return job:result()
|
return job:result()
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.map(mode, lhs, rhs, opts)
|
function M.map(mode, lhs, rhs, opts)
|
||||||
local options = { noremap = true }
|
local options = { noremap = true }
|
||||||
if opts then
|
if opts then
|
||||||
options = vim.tbl_extend("force", options, opts)
|
options = vim.tbl_extend("force", options, opts)
|
||||||
end
|
end
|
||||||
-- vim.api.nvim_set_keymap(mode, lhs, rhs, options)
|
-- vim.api.nvim_set_keymap(mode, lhs, rhs, options)
|
||||||
vim.keymap.set(mode, lhs, rhs, options)
|
vim.keymap.set(mode, lhs, rhs, options)
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.use_google()
|
function M.use_google()
|
||||||
if M.use_google_cache == nil then
|
if M.use_google_cache == nil then
|
||||||
M.use_google_cache = M.file_exists(os.getenv("HOME") .. "/use_google")
|
M.use_google_cache = M.file_exists(os.getenv("HOME") .. "/use_google")
|
||||||
end
|
end
|
||||||
return M.use_google_cache
|
return M.use_google_cache
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.file_exists(name)
|
function M.file_exists(name)
|
||||||
local f = io.open(name, "r")
|
local f = io.open(name, "r")
|
||||||
if f ~= nil then
|
if f ~= nil then
|
||||||
io.close(f)
|
io.close(f)
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.dump(o)
|
function M.dump(o)
|
||||||
if type(o) == "table" then
|
if type(o) == "table" then
|
||||||
local s = "{ "
|
local s = "{ "
|
||||||
for k, v in pairs(o) do
|
for k, v in pairs(o) do
|
||||||
if type(k) ~= "number" then
|
if type(k) ~= "number" then
|
||||||
k = '"' .. k .. '"'
|
k = '"' .. k .. '"'
|
||||||
end
|
end
|
||||||
s = s .. "[" .. k .. "] = " .. M.dump(v) .. ","
|
s = s .. "[" .. k .. "] = " .. M.dump(v) .. ","
|
||||||
end
|
end
|
||||||
return s .. "} "
|
return s .. "} "
|
||||||
else
|
else
|
||||||
return tostring(o)
|
return tostring(o)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.tprint(tbl, indent)
|
function M.tprint(tbl, indent)
|
||||||
if not indent then
|
if not indent then
|
||||||
indent = 0
|
indent = 0
|
||||||
end
|
end
|
||||||
local toprint = string.rep(" ", indent) .. "{\r\n"
|
local toprint = string.rep(" ", indent) .. "{\r\n"
|
||||||
indent = indent + 2
|
indent = indent + 2
|
||||||
for k, v in pairs(tbl) do
|
for k, v in pairs(tbl) do
|
||||||
toprint = toprint .. string.rep(" ", indent)
|
toprint = toprint .. string.rep(" ", indent)
|
||||||
if type(k) == "number" then
|
if type(k) == "number" then
|
||||||
toprint = toprint .. "[" .. k .. "] = "
|
toprint = toprint .. "[" .. k .. "] = "
|
||||||
elseif type(k) == "string" then
|
elseif type(k) == "string" then
|
||||||
toprint = toprint .. k .. "= "
|
toprint = toprint .. k .. "= "
|
||||||
end
|
end
|
||||||
if type(v) == "number" then
|
if type(v) == "number" then
|
||||||
toprint = toprint .. v .. ",\r\n"
|
toprint = toprint .. v .. ",\r\n"
|
||||||
elseif type(v) == "string" then
|
elseif type(v) == "string" then
|
||||||
toprint = toprint .. '"' .. v .. '",\r\n'
|
toprint = toprint .. '"' .. v .. '",\r\n'
|
||||||
elseif type(v) == "table" then
|
elseif type(v) == "table" then
|
||||||
toprint = toprint .. M.tprint(v, indent + 2) .. ",\r\n"
|
toprint = toprint .. M.tprint(v, indent + 2) .. ",\r\n"
|
||||||
else
|
else
|
||||||
toprint = toprint .. '"' .. tostring(v) .. '",\r\n'
|
toprint = toprint .. '"' .. tostring(v) .. '",\r\n'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
toprint = toprint .. string.rep(" ", indent - 2) .. "}"
|
toprint = toprint .. string.rep(" ", indent - 2) .. "}"
|
||||||
return toprint
|
return toprint
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.log(message)
|
function M.log(message)
|
||||||
local log_file_path = vim.fn.expand("$HOME/nvim.log")
|
local log_file_path = vim.fn.expand("$HOME/nvim.log")
|
||||||
local log_file = io.open(log_file_path, "a")
|
local log_file = io.open(log_file_path, "a")
|
||||||
io.output(log_file)
|
io.output(log_file)
|
||||||
io.write(message .. "\n")
|
io.write(message .. "\n")
|
||||||
io.close(log_file)
|
io.close(log_file)
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.TableConcat(t1, t2)
|
function M.TableConcat(t1, t2)
|
||||||
for i = 1, #t2 do
|
for i = 1, #t2 do
|
||||||
t1[#t1 + 1] = t2[i]
|
t1[#t1 + 1] = t2[i]
|
||||||
end
|
end
|
||||||
return t1
|
return t1
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
Reference in New Issue
Block a user