This commit is contained in:
Christoph J. Scherr 2024-07-04 12:47:27 +02:00
parent 316cd28587
commit 4db161c4c0
2 changed files with 99 additions and 16 deletions

View File

@ -1,31 +1,30 @@
local lspconfig = require "lspconfig"
local lspsettings = require "custom.plugins.configs.lspsettings"
local lspconfig = require 'lspconfig'
local lspsettings = require 'custom.plugins.configs.lspsettings'
-- these are using the defaults
local servers = {
"html",
"cssls",
"tsserver",
"clangd",
"bashls",
"cmake",
"yamlls",
"texlab",
"csharp_ls",
'html',
'cssls',
'tsserver',
'clangd',
'bashls',
'cmake',
'yamlls',
'texlab',
'csharp_ls',
}
for _, lsp in ipairs(servers) do
lspconfig[lsp].setup()
lspconfig[lsp].setup {}
end
local server_with_settings = {
-- "textlsp",
"ltex",
"rust_analyzer",
"basedpyright",
'ltex',
'rust_analyzer',
'basedpyright',
}
for _, lsp in ipairs(server_with_settings) do
lspconfig[lsp].setup(lspsettings[lsp])
end

84
lua/custom/utils.lua Normal file
View File

@ -0,0 +1,84 @@
local M = {}
--- this function will split a string into a table of tokens, like it would
--- be passed into the `argv` of a program that was executed from the commandline
---
--- @param raw string string of cli args that should be split
--- @return table tokens args as a table
M.tokenize_args = function(raw)
-- NOTE: string.gmatch is does not use regex, but a smaller pattern matcher!
-- A complete regex parser would be larger than lua itself. See
-- [Programming in Lua 20.2](https://www.lua.org/pil/20.2.html).
--
-- Notable differences:
-- '-' is ungreedy wildcard
-- '*?' does not work
-- '|' is not or
--
-- This means we're better of implementing the lexer with an algorithm.
local t = {}
local current = ""
local in_str = false
local str_seek
for c in string.gmatch(raw, ".") do -- iterate through all chars
if c == " " and not in_str then
if string.len(current) > 0 then
table.insert(t, current)
current = ""
end
elseif c == '"' and not in_str then
in_str = true
str_seek = '"'
elseif c == "'" and not in_str then
in_str = true
str_seek = "'"
elseif c == str_seek and in_str then
in_str = false
table.insert(t, current)
current = ""
else
current = current .. c
end
end
if string.len(current) > 0 then
table.insert(t, current)
end
return t
end
--- dumps a variable into a string, so it can be printed. This is meant for
--- debug prints
--- @param t any variable
--- @return string t_dumped t dumped to string
M.dump = function(t)
if type(t) == "table" then
local s = "{ "
for k, v in pairs(t) do
if type(k) ~= "number" then
k = '"' .. k .. '"'
end
if k ~= 1 then
s = s .. ", "
end
s = s .. "[" .. k .. "] = '" .. M.dump(v) .. "'"
end
return s .. " }"
else
return tostring(t)
end
end
--- Try to require a module
--- @param module string module name
--- @return boolean available is the module available?
--- @return any loaded_module the loaded module if it is available
M.try_require = function(module)
local available, loaded_module = pcall(require, module)
if not available then
return available, nil
else
return available, loaded_module
end
end
return M