Closed leon-richardt closed 1 year ago
Also add small info snippet about this function to the README as well
Also add small info snippet about this function to the README as well
I went ahead and tried to emulate the style of the existing info in the README. I also took the liberty to include the motivating example as well.
Hello!
Thank you for the plugin, it has been very pleasant to use.
Motivation
When working in C++, I often find myself in nested namespaces two or three levels deep. Using nvim-navic's native
get_location()
takes up quite a bit of my lualine in that scenario. To reduce some of that space usage, I wrote a function to parseget_data()
's output and combine namespace components into a single component. However, there was no way to format that data in the same way it would have been rendered byget_location()
.Solution
This PR extracts formatting of the data into its own function such that a caller can format their own data in the same way that
get_location()
would.Example
lualine usage example for the namespace scenario discussed above
```lua lualine.setup { sections = { lualine_c = { { -- Customized navic.get_location() that combines namespaces -- into a single string function() local navic = require("nvim-navic") local old_data = navic.get_data() local new_data = {} local cur_ns = nil local ns_comps = {} for _, comp in ipairs(old_data) do if comp.type == "Namespace" then cur_ns = comp table.insert(ns_comps, comp.name) else -- On the first non-namespace component $c$, collect -- previous NS components into a single one and -- insert it in front of $c$. if cur_ns ~= nil then -- Concatenate name and insert local num_comps = #ns_comps local comb_name = "" for idx = 1, num_comps do local ns_name = ns_comps[idx] -- No "::" in front of first component local join = (idx == 1) and "" or "::" if idx ~= num_comps then comb_name = comb_name .. join .. ns_name:sub(1, 1) else comb_name = comb_name .. join .. ns_name end end cur_ns.name = comb_name table.insert(new_data, cur_ns) cur_ns = nil end table.insert(new_data, comp) end end return navic.format_data(new_data) end, cond = function() return package.loaded["nvim-navic"] and require("nvim-navic").is_available() end, }, }, }, } ```