feat(providers): Support independent configs for each provider to handle
Closes #58
This commit is contained in:
@@ -93,6 +93,10 @@
|
|||||||
the file and jumping elsewhere.
|
the file and jumping elsewhere.
|
||||||
- If auto-preview is enabled the preview window will automatically resize and
|
- If auto-preview is enabled the preview window will automatically resize and
|
||||||
reposition
|
reposition
|
||||||
|
- Each provider can now handle its own configuration via the
|
||||||
|
`providers["provider-name"]` table. The first provider to make use of this will
|
||||||
|
be the markdown provider, which looks at `providers.markdown.filetypes` for
|
||||||
|
the list of filetypes to be supported for markdown outline symbols.
|
||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
|
|
||||||
|
|||||||
11
README.md
11
README.md
@@ -359,10 +359,15 @@ Pass a table to the setup call with your configuration options.
|
|||||||
|
|
||||||
providers = {
|
providers = {
|
||||||
priority = { 'lsp', 'coc', 'markdown', 'norg' },
|
priority = { 'lsp', 'coc', 'markdown', 'norg' },
|
||||||
|
-- Configuration for each provider (3rd party providers are supported)
|
||||||
lsp = {
|
lsp = {
|
||||||
-- Lsp client names to ignore
|
-- Lsp client names to ignore
|
||||||
blacklist_clients = {},
|
blacklist_clients = {},
|
||||||
},
|
},
|
||||||
|
markdown = {
|
||||||
|
-- List of supported ft's to use the markdown provider
|
||||||
|
filetypes = {'markdown'},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
symbols = {
|
symbols = {
|
||||||
@@ -494,10 +499,14 @@ path, for use as a provider.
|
|||||||
External providers from plugins should define the provider module at
|
External providers from plugins should define the provider module at
|
||||||
`lua/outline/providers/<name>.lua` with these functions:
|
`lua/outline/providers/<name>.lua` with these functions:
|
||||||
|
|
||||||
- `supports_buffer(bufnr: integer) -> boolean`
|
- `supports_buffer(bufnr: integer, config: table?) -> boolean`
|
||||||
|
|
||||||
This function could check buffer filetype, existence of required modules, etc.
|
This function could check buffer filetype, existence of required modules, etc.
|
||||||
|
|
||||||
|
The config table comes from the user's configuration in the
|
||||||
|
`providers['provider-name']` table where `provider-name` is the
|
||||||
|
`require('outline.providers.<name>').name`.
|
||||||
|
|
||||||
- `get_status() -> string[]` (optional)
|
- `get_status() -> string[]` (optional)
|
||||||
|
|
||||||
Return a list of lines to be included in `:OutlineStatus` as supplementary
|
Return a list of lines to be included in `:OutlineStatus` as supplementary
|
||||||
|
|||||||
@@ -94,6 +94,9 @@ M.defaults = {
|
|||||||
lsp = {
|
lsp = {
|
||||||
blacklist_clients = {},
|
blacklist_clients = {},
|
||||||
},
|
},
|
||||||
|
markdown = {
|
||||||
|
filetypes = { 'markdown' },
|
||||||
|
},
|
||||||
},
|
},
|
||||||
symbols = {
|
symbols = {
|
||||||
---@type outline.FilterConfig?
|
---@type outline.FilterConfig?
|
||||||
@@ -325,6 +328,8 @@ function M.resolve_config()
|
|||||||
map[client] = true
|
map[client] = true
|
||||||
end
|
end
|
||||||
M.o.providers.lsp.blacklist_clients = map
|
M.o.providers.lsp.blacklist_clients = map
|
||||||
|
----- LSP PROVIDER CONFIG NAME -----
|
||||||
|
M.o.providers['nvim-lsp'] = M.o.providers.lsp
|
||||||
end
|
end
|
||||||
|
|
||||||
---Ensure l is either table, false, or nil. If not, print warning using given
|
---Ensure l is either table, false, or nil. If not, print warning using given
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ local import_prefix = 'outline/providers/'
|
|||||||
|
|
||||||
---@return outline.Provider?, table?
|
---@return outline.Provider?, table?
|
||||||
function M.find_provider()
|
function M.find_provider()
|
||||||
|
local configs = require('outline.config').o.providers
|
||||||
|
|
||||||
if not M.providers then
|
if not M.providers then
|
||||||
M.providers = vim.tbl_map(function(p)
|
M.providers = vim.tbl_map(function(p)
|
||||||
return import_prefix .. p
|
return import_prefix .. p
|
||||||
@@ -11,7 +13,7 @@ function M.find_provider()
|
|||||||
|
|
||||||
for _, path in ipairs(M.providers) do
|
for _, path in ipairs(M.providers) do
|
||||||
local provider = require(path)
|
local provider = require(path)
|
||||||
local ok, info = provider.supports_buffer(0)
|
local ok, info = provider.supports_buffer(0, configs[provider.name])
|
||||||
if ok then
|
if ok then
|
||||||
return provider, info
|
return provider, info
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -15,9 +15,19 @@ local M = {
|
|||||||
name = 'markdown',
|
name = 'markdown',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
---@param bufnr integer
|
||||||
|
---@param config table?
|
||||||
---@return boolean ft_is_markdown
|
---@return boolean ft_is_markdown
|
||||||
function M.supports_buffer(bufnr)
|
function M.supports_buffer(bufnr, config)
|
||||||
return vim.api.nvim_buf_get_option(bufnr, 'ft') == 'markdown'
|
local ft = vim.api.nvim_buf_get_option(bufnr, 'ft')
|
||||||
|
if config and config.filetypes then
|
||||||
|
for _, ft_check in ipairs(config.filetypes) do
|
||||||
|
if ft_check == ft then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return ft == "markdown"
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Parses markdown files and returns a table of SymbolInformation[] which is
|
-- Parses markdown files and returns a table of SymbolInformation[] which is
|
||||||
|
|||||||
@@ -18,7 +18,9 @@ local M = {
|
|||||||
]],
|
]],
|
||||||
}
|
}
|
||||||
|
|
||||||
function M.supports_buffer(bufnr)
|
---@param bufnr integer
|
||||||
|
---@param config table?
|
||||||
|
function M.supports_buffer(bufnr, config)
|
||||||
if vim.api.nvim_buf_get_option(bufnr, 'ft') ~= 'norg' then
|
if vim.api.nvim_buf_get_option(bufnr, 'ft') ~= 'norg' then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -63,8 +63,9 @@
|
|||||||
|
|
||||||
---@class outline.Provider
|
---@class outline.Provider
|
||||||
---@field name string
|
---@field name string
|
||||||
|
---@field config table?
|
||||||
---@field get_status? fun(info:table?):string[]
|
---@field get_status? fun(info:table?):string[]
|
||||||
---@field supports_buffer fun(bufnr:integer):boolean,table?
|
---@field supports_buffer fun(bufnr:integer, config:table?):boolean,table?
|
||||||
---@field request_symbols fun(on_symbols:fun(symbols?:outline.ProviderSymbol[], opts:table?, provider_info:table?), opts:table?)
|
---@field request_symbols fun(on_symbols:fun(symbols?:outline.ProviderSymbol[], opts:table?, provider_info:table?), opts:table?)
|
||||||
---@field show_hover? fun(sidebar:outline.Sidebar):boolean
|
---@field show_hover? fun(sidebar:outline.Sidebar):boolean
|
||||||
---@field rename_symbol? fun(sidebar:outline.Sidebar):boolean
|
---@field rename_symbol? fun(sidebar:outline.Sidebar):boolean
|
||||||
|
|||||||
Reference in New Issue
Block a user