Skip to content

Commit

Permalink
feat(providers): Support independent configs for each provider to handle
Browse files Browse the repository at this point in the history
Closes #58
  • Loading branch information
hedyhli committed Mar 16, 2024
1 parent 8c6b11e commit b64c0c6
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 6 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,10 @@
the file and jumping elsewhere.
- If auto-preview is enabled the preview window will automatically resize and
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

Expand Down
11 changes: 10 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -359,10 +359,15 @@ Pass a table to the setup call with your configuration options.

providers = {
priority = { 'lsp', 'coc', 'markdown', 'norg' },
-- Configuration for each provider (3rd party providers are supported)
lsp = {
-- Lsp client names to ignore
blacklist_clients = {},
},
markdown = {
-- List of supported ft's to use the markdown provider
filetypes = {'markdown'},
},
},

symbols = {
Expand Down Expand Up @@ -494,10 +499,14 @@ path, for use as a provider.
External providers from plugins should define the provider module at
`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.

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)

Return a list of lines to be included in `:OutlineStatus` as supplementary
Expand Down
5 changes: 5 additions & 0 deletions lua/outline/config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,9 @@ M.defaults = {
lsp = {
blacklist_clients = {},
},
markdown = {
filetypes = { 'markdown' },
},
},
symbols = {
---@type outline.FilterConfig?
Expand Down Expand Up @@ -325,6 +328,8 @@ function M.resolve_config()
map[client] = true
end
M.o.providers.lsp.blacklist_clients = map
----- LSP PROVIDER CONFIG NAME -----
M.o.providers['nvim-lsp'] = M.o.providers.lsp
end

---Ensure l is either table, false, or nil. If not, print warning using given
Expand Down
4 changes: 3 additions & 1 deletion lua/outline/providers/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ local import_prefix = 'outline/providers/'

---@return outline.Provider?, table?
function M.find_provider()
local configs = require('outline.config').o.providers

if not M.providers then
M.providers = vim.tbl_map(function(p)
return import_prefix .. p
Expand All @@ -11,7 +13,7 @@ function M.find_provider()

for _, path in ipairs(M.providers) do
local provider = require(path)
local ok, info = provider.supports_buffer(0)
local ok, info = provider.supports_buffer(0, configs[provider.name])
if ok then
return provider, info
end
Expand Down
14 changes: 12 additions & 2 deletions lua/outline/providers/markdown.lua
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,19 @@ local M = {
name = 'markdown',
}

---@param bufnr integer
---@param config table?
---@return boolean ft_is_markdown
function M.supports_buffer(bufnr)
return vim.api.nvim_buf_get_option(bufnr, 'ft') == 'markdown'
function M.supports_buffer(bufnr, config)
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

-- Parses markdown files and returns a table of SymbolInformation[] which is
Expand Down
4 changes: 3 additions & 1 deletion lua/outline/providers/norg.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
return false
end
Expand Down
3 changes: 2 additions & 1 deletion lua/outline/types/outline.lua
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,9 @@

---@class outline.Provider
---@field name string
---@field config table?
---@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 show_hover? fun(sidebar:outline.Sidebar):boolean
---@field rename_symbol? fun(sidebar:outline.Sidebar):boolean
Expand Down

0 comments on commit b64c0c6

Please sign in to comment.