mirror of
https://github.com/LazyVim/LazyVim.git
synced 2026-07-25 14:01:06 +00:00
mini.ai: move to extras. Add default textobjects to treesitter. Review @dpetka2001. Overriding the config function using decoration. Remove code duplication.
This commit is contained in:
parent
0c12cc332a
commit
cdf8036e7f
2 changed files with 47 additions and 52 deletions
|
|
@ -1,24 +1,48 @@
|
||||||
local load_textobjects = false
|
local load_textobjects = false
|
||||||
|
|
||||||
---@param langs table<string>
|
---@param ts_opts PluginOpts
|
||||||
---@return table<string>
|
local function source_runtime_textobjects(ts_opts)
|
||||||
local function dedup(langs)
|
-- PERF: no need to load the plugin, if we only need its queries for mini.ai
|
||||||
-- TODO: move this utility function to a better location
|
|
||||||
---@type table<string, boolean>
|
if ts_opts.textobjects then -- the user defines textobjects
|
||||||
local added = {}
|
for _, mod in ipairs({ "move", "select", "swap", "lsp_interop" }) do
|
||||||
return vim.tbl_filter(function(lang)
|
if ts_opts.textobjects[mod] and ts_opts.textobjects[mod].enable then
|
||||||
if added[lang] then
|
local Loader = require("lazy.core.loader")
|
||||||
return false
|
Loader.disabled_rtp_plugins["nvim-treesitter-textobjects"] = nil
|
||||||
|
local plugin = require("lazy.core.config").plugins["nvim-treesitter-textobjects"]
|
||||||
|
require("lazy.core.loader").source_runtime(plugin.dir, "plugin")
|
||||||
|
break
|
||||||
|
end
|
||||||
end
|
end
|
||||||
added[lang] = true
|
end
|
||||||
return true
|
end
|
||||||
end, langs)
|
|
||||||
|
local function spec_decorate_config_property()
|
||||||
|
-- avoid code duplication:
|
||||||
|
-- decorate config function defined in lazyvim.plugins.treesitter
|
||||||
|
|
||||||
|
local Config = require("lazy.core.config")
|
||||||
|
|
||||||
|
---@type LazyPlugin
|
||||||
|
local spec_treesitter = Config.spec.plugins["nvim-treesitter"]
|
||||||
|
local config_to_decorate = spec_treesitter.config
|
||||||
|
spec_treesitter.config = function(_, opts)
|
||||||
|
if config_to_decorate then
|
||||||
|
config_to_decorate(spec_treesitter, opts)
|
||||||
|
end
|
||||||
|
|
||||||
|
if load_textobjects then
|
||||||
|
source_runtime_textobjects(opts)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
||||||
{
|
{
|
||||||
"nvim-treesitter/nvim-treesitter",
|
"nvim-treesitter/nvim-treesitter",
|
||||||
|
init = function()
|
||||||
|
spec_decorate_config_property()
|
||||||
|
end,
|
||||||
dependencies = {
|
dependencies = {
|
||||||
{
|
{
|
||||||
"nvim-treesitter/nvim-treesitter-textobjects",
|
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||||
|
|
@ -32,33 +56,11 @@ return {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
opts = function(_, opts)
|
opts = function(_, opts)
|
||||||
-- override the default textobjects, set in plugins/treesitter.lua
|
-- override the default textobjects defined in lazyvim.plugins.treesitter.
|
||||||
-- when using this extra, the user is expected to add textobjects
|
-- when using this extra, the user is expected to add textobjects
|
||||||
-- on a need-to-have basis
|
-- on a need-to-have basis
|
||||||
opts.textobjects = nil
|
opts.textobjects = nil
|
||||||
end,
|
end,
|
||||||
---@param opts TSConfig
|
|
||||||
config = function(_, opts) -- override config in plugins/treesitter.lua
|
|
||||||
if type(opts.ensure_installed) == "table" then
|
|
||||||
opts.ensure_installed = dedup(opts.ensure_installed)
|
|
||||||
end
|
|
||||||
require("nvim-treesitter.configs").setup(opts)
|
|
||||||
|
|
||||||
if load_textobjects then
|
|
||||||
-- PERF: no need to load the plugin, if we only need its queries for mini.ai
|
|
||||||
if opts.textobjects then
|
|
||||||
for _, mod in ipairs({ "move", "select", "swap", "lsp_interop" }) do
|
|
||||||
if opts.textobjects[mod] and opts.textobjects[mod].enable then
|
|
||||||
local Loader = require("lazy.core.loader")
|
|
||||||
Loader.disabled_rtp_plugins["nvim-treesitter-textobjects"] = nil
|
|
||||||
local plugin = require("lazy.core.config").plugins["nvim-treesitter-textobjects"]
|
|
||||||
require("lazy.core.loader").source_runtime(plugin.dir, "plugin")
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Better text-objects
|
-- Better text-objects
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,3 @@
|
||||||
---@param langs table<string>
|
|
||||||
---@return table<string>
|
|
||||||
local function dedup(langs)
|
|
||||||
-- TODO: move this utility function to a better location
|
|
||||||
---@type table<string, boolean>
|
|
||||||
local added = {}
|
|
||||||
return vim.tbl_filter(function(lang)
|
|
||||||
if added[lang] then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
added[lang] = true
|
|
||||||
return true
|
|
||||||
end, langs)
|
|
||||||
end
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
-- Treesitter is a new parser generator tool that we can
|
-- Treesitter is a new parser generator tool that we can
|
||||||
-- use in Neovim to power faster and more accurate
|
-- use in Neovim to power faster and more accurate
|
||||||
|
|
@ -123,7 +108,15 @@ return {
|
||||||
---@param opts TSConfig
|
---@param opts TSConfig
|
||||||
config = function(_, opts)
|
config = function(_, opts)
|
||||||
if type(opts.ensure_installed) == "table" then
|
if type(opts.ensure_installed) == "table" then
|
||||||
opts.ensure_installed = dedup(opts.ensure_installed)
|
---@type table<string, boolean>
|
||||||
|
local added = {}
|
||||||
|
opts.ensure_installed = vim.tbl_filter(function(lang)
|
||||||
|
if added[lang] then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
added[lang] = true
|
||||||
|
return true
|
||||||
|
end, opts.ensure_installed)
|
||||||
end
|
end
|
||||||
require("nvim-treesitter.configs").setup(opts)
|
require("nvim-treesitter.configs").setup(opts)
|
||||||
end,
|
end,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue