Files
lua-nvim/lua/cargdev/core/compatibility.lua
Carlos a7f6d3067b feat: restructure keymaps and fix Lua configuration
- Restructure keymaps into modular folder system
  - Create keymaps/ folder with organized files
  - Separate keymaps by category (general, personal, lsp, telescope, plugins)
  - Auto-loading system for better maintainability

- Fix Lua configuration issues
  - Add compatibility layer for deprecated APIs
  - Fix snacks.nvim configuration
  - Disable latex support in render-markdown
  - Improve LSP configuration

- Enhance function navigation
  - Restore and improve LSP keymaps
  - Add comprehensive Telescope integration
  - Fix conflicting keymaps

- Improve overall Neovim setup
  - Better options configuration
  - Enhanced plugin configurations
  - Cleaner code organization
2025-07-28 22:56:56 -04:00

151 lines
3.9 KiB
Lua

-- Compatibility layer for Lua version differences and deprecated APIs
local M = {}
-- Handle Lua version compatibility
local lua_version = _VERSION:match("%d+%.%d+")
if lua_version then
lua_version = tonumber(lua_version)
end
-- Create compatibility functions for deprecated APIs
if not vim.iter then
-- Fallback for older Neovim versions
vim.iter = function(t)
local i = 0
local n = #t
return function()
i = i + 1
if i <= n then
return i, t[i]
end
end
end
end
-- Modern vim.hl replacement for vim.highlight
if not vim.hl then
vim.hl = function(namespace, name, val)
if vim.fn.hlexists(name) == 1 then
vim.api.nvim_set_hl(namespace, name, val)
end
end
end
-- Modern vim.validate replacement
local function modern_validate(name, value, validator, optional_or_msg)
if type(validator) == "string" then
-- Old style: vim.validate{name = {value, "string"}}
if type(value) ~= validator then
error(string.format("Expected %s to be %s, got %s", name, validator, type(value)))
end
elseif type(validator) == "function" then
-- New style: vim.validate(name, value, validator, optional_or_msg)
if not validator(value) then
local msg = optional_or_msg or string.format("Validation failed for %s", name)
error(msg)
end
end
end
if not vim.validate then
vim.validate = modern_validate
end
-- Modern vim.tbl_flatten replacement
if not vim.tbl_flatten then
vim.tbl_flatten = function(t)
local result = {}
for _, v in ipairs(t) do
if type(v) == "table" then
for _, sub_v in ipairs(v) do
table.insert(result, sub_v)
end
else
table.insert(result, v)
end
end
return result
end
end
-- Ensure proper Lua runtime path for Lua 5.4 compatibility
local function setup_lua_runtime()
-- Add Lua paths for better compatibility
local lua_paths = {
"?.lua",
"?/init.lua",
"?/main.lua",
vim.fn.stdpath("config") .. "/lua/?.lua",
vim.fn.stdpath("config") .. "/lua/?/init.lua",
vim.fn.stdpath("data") .. "/lazy/*/lua/?.lua",
vim.fn.stdpath("data") .. "/lazy/*/lua/?/init.lua",
}
package.path = table.concat(lua_paths, ";") .. ";" .. package.path
end
-- Setup Lua language server with proper configuration
local function setup_lua_ls()
local lspconfig = require("lspconfig")
local capabilities = require("cmp_nvim_lsp").default_capabilities()
lspconfig.lua_ls.setup({
capabilities = capabilities,
settings = {
Lua = {
diagnostics = {
globals = { "vim" },
disable = { "missing-fields" },
},
runtime = {
version = "LuaJIT",
path = {
"?.lua",
"?/init.lua",
"?/main.lua",
vim.fn.stdpath("config") .. "/lua/?.lua",
vim.fn.stdpath("config") .. "/lua/?/init.lua",
vim.fn.stdpath("data") .. "/lazy/*/lua/?.lua",
vim.fn.stdpath("data") .. "/lazy/*/lua/?/init.lua",
},
},
workspace = {
checkThirdParty = false,
library = {
vim.fn.stdpath("config") .. "/lua",
vim.fn.stdpath("data") .. "/lazy",
"/opt/homebrew/Cellar/neovim/0.11.3/share/nvim/runtime/lua",
},
},
telemetry = {
enable = false,
},
},
},
})
end
-- Initialize compatibility layer
function M.setup()
setup_lua_runtime()
-- Setup Lua LSP when available
local ok, _ = pcall(require, "lspconfig")
if ok then
setup_lua_ls()
end
-- Disable deprecated API warnings
vim.deprecate = function() end
-- Set up proper error handling for deprecated functions
local original_error = error
error = function(msg, level)
if msg and msg:match("deprecated") then
return -- Silently ignore deprecated warnings
end
return original_error(msg, level)
end
end
return M