1 -- Simple winbar/statusline plugin that shows your current code context
 
   2 -- https://github.com/SmiteshP/nvim-navic
 
   3 vim.api.nvim_set_hl(0, "NavicIconsFile", { default = true, bg = "#000000", fg = "#977D9E" })
 
   4 vim.api.nvim_set_hl(0, "NavicIconsModule", { default = true, bg = "#000000", fg = "#977D9E" })
 
   5 vim.api.nvim_set_hl(0, "NavicIconsNamespace", { default = true, bg = "#000000", fg = "#977D9E" })
 
   6 vim.api.nvim_set_hl(0, "NavicIconsPackage", { default = true, bg = "#000000", fg = "#977D9E" })
 
   7 vim.api.nvim_set_hl(0, "NavicIconsClass", { default = true, bg = "#000000", fg = "#977D9E" })
 
   8 vim.api.nvim_set_hl(0, "NavicIconsMethod", { default = true, bg = "#000000", fg = "#977D9E" })
 
   9 vim.api.nvim_set_hl(0, "NavicIconsProperty", { default = true, bg = "#000000", fg = "#977D9E" })
 
  10 vim.api.nvim_set_hl(0, "NavicIconsField", { default = true, bg = "#000000", fg = "#977D9E" })
 
  11 vim.api.nvim_set_hl(0, "NavicIconsConstructor", { default = true, bg = "#000000", fg = "#977D9E" })
 
  12 vim.api.nvim_set_hl(0, "NavicIconsEnum", { default = true, bg = "#000000", fg = "#977D9E" })
 
  13 vim.api.nvim_set_hl(0, "NavicIconsInterface", { default = true, bg = "#000000", fg = "#977D9E" })
 
  14 vim.api.nvim_set_hl(0, "NavicIconsFunction", { default = true, bg = "#000000", fg = "#977D9E" })
 
  15 vim.api.nvim_set_hl(0, "NavicIconsVariable", { default = true, bg = "#000000", fg = "#977D9E" })
 
  16 vim.api.nvim_set_hl(0, "NavicIconsConstant", { default = true, bg = "#000000", fg = "#977D9E" })
 
  17 vim.api.nvim_set_hl(0, "NavicIconsString", { default = true, bg = "#000000", fg = "#977D9E" })
 
  18 vim.api.nvim_set_hl(0, "NavicIconsNumber", { default = true, bg = "#000000", fg = "#977D9E" })
 
  19 vim.api.nvim_set_hl(0, "NavicIconsBoolean", { default = true, bg = "#000000", fg = "#977D9E" })
 
  20 vim.api.nvim_set_hl(0, "NavicIconsArray", { default = true, bg = "#000000", fg = "#977D9E" })
 
  21 vim.api.nvim_set_hl(0, "NavicIconsObject", { default = true, bg = "#000000", fg = "#977D9E" })
 
  22 vim.api.nvim_set_hl(0, "NavicIconsKey", { default = true, bg = "#000000", fg = "#977D9E" })
 
  23 vim.api.nvim_set_hl(0, "NavicIconsNull", { default = true, bg = "#000000", fg = "#977D9E" })
 
  24 vim.api.nvim_set_hl(0, "NavicIconsEnumMember", { default = true, bg = "#000000", fg = "#977D9E" })
 
  25 vim.api.nvim_set_hl(0, "NavicIconsStruct", { default = true, bg = "#000000", fg = "#977D9E" })
 
  26 vim.api.nvim_set_hl(0, "NavicIconsEvent", { default = true, bg = "#000000", fg = "#977D9E" })
 
  27 vim.api.nvim_set_hl(0, "NavicIconsOperator", { default = true, bg = "#000000", fg = "#977D9E" })
 
  28 vim.api.nvim_set_hl(0, "NavicIconsTypeParameter", { default = true, bg = "#000000", fg = "#977D9E" })
 
  29 vim.api.nvim_set_hl(0, "NavicText", { default = true, bg = "#000000", fg = "#ffffff" })
 
  30 vim.api.nvim_set_hl(0, "NavicSeparator", { default = true, bg = "#000000", fg = "#073642" })
 
  31 local attach_keymaps = function(client, bufnr)
 
  35                 vim.lsp.buf.declaration,
 
  36                 { buffer = bufnr, noremap = true, silent = true, desc = "Go to declaration" }
 
  41                 vim.lsp.buf.definition,
 
  42                 { buffer = bufnr, noremap = true, silent = true, desc = "Go to definition" }
 
  47                 vim.lsp.buf.type_definition,
 
  48                 { buffer = bufnr, noremap = true, silent = true, desc = "Go to type" }
 
  53                 vim.lsp.buf.implementation,
 
  54                 { buffer = bufnr, noremap = true, silent = true, desc = "List implementations" }
 
  59                 vim.lsp.buf.references,
 
  60                 { buffer = bufnr, noremap = true, silent = true, desc = "List references" }
 
  65                 vim.diagnostic.goto_next,
 
  66                 { buffer = bufnr, noremap = true, silent = true, desc = "Go to next diagnostic" }
 
  71                 vim.diagnostic.goto_prev,
 
  72                 { buffer = bufnr, noremap = true, silent = true, desc = "Go to previous diagnostic" }
 
  77                 vim.diagnostic.open_float,
 
  78                 { buffer = bufnr, noremap = true, silent = true, desc = "Open diagnostic float" }
 
  83                 vim.lsp.buf.document_highlight,
 
  84                 { buffer = bufnr, noremap = true, silent = true, desc = "Document highlight" }
 
  89                 vim.lsp.buf.document_symbol,
 
  90                 { buffer = bufnr, noremap = true, silent = true, desc = "List document symbols" }
 
  95                 vim.lsp.buf.add_workspace_folder,
 
  96                 { buffer = bufnr, noremap = true, silent = true, desc = "Add workspace folder" }
 
 101                 vim.lsp.buf.remove_workspace_folder,
 
 102                 { buffer = bufnr, noremap = true, silent = true, desc = "Remove workspace folder" }
 
 104         vim.keymap.set("n", "<leader>lwl", function()
 
 105                 vim.notify(vim.inspect(vim.lsp.buf.list_workspace_folders()))
 
 106         end, { buffer = bufnr, noremap = true, silent = true, desc = "List workspace folders" })
 
 110                 vim.lsp.buf.workspace_symbol,
 
 111                 { buffer = bufnr, noremap = true, silent = true, desc = "List workspace symbols" }
 
 117                 { buffer = bufnr, noremap = true, silent = true, desc = "Trigger hover" }
 
 122                 vim.lsp.buf.signature_help,
 
 123                 { buffer = bufnr, noremap = true, silent = true, desc = "Signature help" }
 
 129                 { buffer = bufnr, noremap = true, silent = true, desc = "Rename symbol" }
 
 134                 vim.lsp.buf.code_action,
 
 135                 { buffer = bufnr, noremap = true, silent = true, desc = "Code action" }
 
 141                 { buffer = bufnr, noremap = true, silent = true, desc = "Format" }
 
 143         vim.keymap.set("n", "<leader>ltf", function()
 
 144                 vim.b.disableFormatSave = not vim.b.disableFormatSave
 
 145         end, { buffer = bufnr, noremap = true, silent = true, desc = "Toggle format on save" })
 
 151                 local navic = require("nvim-navic")
 
 179                                 TypeParameter = " ",
 
 188                         depth_limit_indicator = "..",
 
 190                         lazy_update_context = true,
 
 192                         format_text = function(text)
 
 196                 local default_on_attach = function(client, bufnr)
 
 197                         attach_keymaps(client, bufnr)
 
 198                         -- let navic attach to buffers
 
 199                         if client.server_capabilities.documentSymbolProvider then
 
 200                                 navic.attach(client, bufnr)
 
 203                 vim.api.nvim_create_autocmd("LspAttach", {
 
 204                         callback = function(event)
 
 205                                 local bufnr = event.buf
 
 206                                 local client = vim.lsp.get_client_by_id(event.data.client_id)
 
 207                                 default_on_attach(client, bufnr)
 
 209                         desc = "Activate navic on LSP attach",
 
 210                         group = vim.api.nvim_create_augroup("navic-lsp-attach", { clear = true }),
 
 212                 -- Always show the winbar to avoid annoying scroll
 
 213                 -- when showing nvim-navic and when not.