···11+return {
22+ "stevearc/conform.nvim",
33+ event = { "BufWritePre" },
44+ cmd = { "ConformInfo" },
55+ keys = {
66+ {
77+ "<leader>cf",
88+ function() require("conform").format({ async = true }) end,
99+ mode = "",
1010+ desc = "Format buffer",
1111+ },
1212+ },
1313+ opts = {
1414+ -- Map of filetype to formatters
1515+ formatters_by_ft = {
1616+ lua = { "stylua" },
1717+ -- Conform will run multiple formatters sequentially
1818+ go = { "goimports", "gofmt" },
1919+ -- You can also customize some of the format options for the filetype
2020+ rust = { "rustfmt", lsp_format = "fallback" },
2121+ -- You can use a function here to determine the formatters dynamically
2222+ python = function(bufnr)
2323+ if require("conform").get_formatter_info("ruff_format", bufnr).available then
2424+ return { "ruff_format" }
2525+ else
2626+ return { "isort", "black" }
2727+ end
2828+ end,
2929+ nix = { "nixfmt" },
3030+ ["markdown"] = { "prettier", "markdownlint-cli2", "markdown-toc" },
3131+ ["markdown.mdx"] = { "prettier", "markdownlint-cli2", "markdown-toc" },
3232+ -- Use the "*" filetype to run formatters on all filetypes.
3333+ -- ["*"] = { "codespell" },
3434+ -- Use the "_" filetype to run formatters on filetypes that don't
3535+ -- have other format
3636+ ["_"] = { "trim_whitespace" },
3737+ },
3838+ -- Set this to change the default values when calling conform.format()
3939+ -- This will also affect the default values for format_on_save/format_after_save
4040+ default_format_opts = { lsp_format = "fallback" },
4141+ -- If this is set, Conform will run the formatter asynchronously after save.
4242+ -- It will pass the table to conform.format().
4343+ -- This can also be a function that returns the table.
4444+ format_after_save = { lsp_format = "fallback" },
4545+ -- Set the log level. Use `:ConformInfo` to see the location of the log file.
4646+ log_level = vim.log.levels.ERROR,
4747+ -- Conform will notify you when a formatter errors
4848+ notify_on_error = true,
4949+ -- Conform will notify you when no formatters are available for the buffer
5050+ notify_no_formatters = true,
5151+ -- Custom formatters and overrides for built-in formatters
5252+ formatters = {
5353+ stylua = {
5454+ prepend_args = {
5555+ "--call-parentheses",
5656+ "Always",
5757+ "--collapse-simple-statement",
5858+ "Always",
5959+ "--indent-type",
6060+ "Tabs",
6161+ "--indent-width",
6262+ "2",
6363+ "--sort-requires",
6464+ },
6565+ },
6666+ ["markdown-toc"] = {
6767+ condition = function(_, ctx)
6868+ for _, line in ipairs(vim.api.nvim_buf_get_lines(ctx.buf, 0, -1, false)) do
6969+ if line:find("<!%-%- toc %-%->") then return true end
7070+ end
7171+ end,
7272+ },
7373+ ["markdownlint-cli2"] = {
7474+ condition = function(_, ctx)
7575+ local diag = vim.tbl_filter(function(d) return d.source == "markdownlint" end, vim.diagnostic.get(ctx.buf))
7676+ return #diag > 0
7777+ end,
7878+ },
7979+ },
8080+ },
8181+}
+241
lua/plugins/copilot-chat.lua
···11+local prompts = {
22+ -- Code related prompts
33+ Explain = "Please explain how the following code works.",
44+ Review = "Please review the following code and provide suggestions for improvement.",
55+ Tests = "Please explain how the selected code works, then generate unit tests for it.",
66+ Refactor = "Please refactor the following code to improve its clarity and readability.",
77+ FixCode = "Please fix the following code to make it work as intended.",
88+ FixError = "Please explain the error in the following text and provide a solution.",
99+ BetterNamings = "Please provide better names for the following variables and functions.",
1010+ Documentation = "Please provide documentation for the following code.",
1111+ SwaggerApiDocs = "Please provide documentation for the following API using Swagger.",
1212+ SwaggerJsDocs = "Please write JSDoc for the following API using Swagger.",
1313+ -- Text related prompts
1414+ Summarize = "Please summarize the following text.",
1515+ Spelling = "Please correct any grammar and spelling errors in the following text.",
1616+ Wording = "Please improve the grammar and wording of the following text.",
1717+ Concise = "Please rewrite the following text to make it more concise.",
1818+}
1919+2020+return {
2121+ {
2222+ "CopilotC-Nvim/CopilotChat.nvim",
2323+ version = "v2.13.0",
2424+ -- branch = "canary", -- Use the canary branch if you want to test the latest features but it might be unstable
2525+ -- Do not use branch and version together, either use branch or version
2626+ dependencies = {
2727+ { "nvim-telescope/telescope.nvim" }, -- Use telescope for help actions
2828+ { "nvim-lua/plenary.nvim" },
2929+ },
3030+ opts = {
3131+ question_header = "## User ",
3232+ answer_header = "## Copilot ",
3333+ error_header = "## Error ",
3434+ prompts = prompts,
3535+ auto_follow_cursor = false, -- Don't follow the cursor after getting response
3636+ show_help = false, -- Show help in virtual text, set to true if that's 1st time using Copilot Chat
3737+ mappings = {
3838+ -- Use tab for completion
3939+ complete = {
4040+ detail = "Use @<Tab> or /<Tab> for options.",
4141+ insert = "<Tab>",
4242+ },
4343+ -- Close the chat
4444+ close = {
4545+ normal = "q",
4646+ insert = "<C-c>",
4747+ },
4848+ -- Reset the chat buffer
4949+ reset = {
5050+ normal = "<C-x>",
5151+ insert = "<C-x>",
5252+ },
5353+ -- Submit the prompt to Copilot
5454+ submit_prompt = {
5555+ normal = "<CR>",
5656+ insert = "<C-CR>",
5757+ },
5858+ -- Accept the diff
5959+ accept_diff = {
6060+ normal = "<C-y>",
6161+ insert = "<C-y>",
6262+ },
6363+ -- Yank the diff in the response to register
6464+ yank_diff = {
6565+ normal = "gmy",
6666+ },
6767+ -- Show the diff
6868+ show_diff = {
6969+ normal = "gmd",
7070+ },
7171+ -- Show the prompt
7272+ show_system_prompt = {
7373+ normal = "gmp",
7474+ },
7575+ -- Show the user selection
7676+ show_user_selection = {
7777+ normal = "gms",
7878+ },
7979+ },
8080+ },
8181+ config = function(_, opts)
8282+ local chat = require("CopilotChat")
8383+ local select = require("CopilotChat.select")
8484+ -- Use unnamed register for the selection
8585+ opts.selection = select.unnamed
8686+8787+ -- Override the git prompts message
8888+ opts.prompts.Commit = {
8989+ prompt = "Write commit message for the change with commitizen convention",
9090+ selection = select.gitdiff,
9191+ }
9292+ opts.prompts.CommitStaged = {
9393+ prompt = "Write commit message for the change with commitizen convention",
9494+ selection = function(source) return select.gitdiff(source, true) end,
9595+ }
9696+9797+ chat.setup(opts)
9898+ -- Setup the CMP integration
9999+ require("CopilotChat.integrations.cmp").setup()
100100+101101+ vim.api.nvim_create_user_command(
102102+ "CopilotChatVisual",
103103+ function(args) chat.ask(args.args, { selection = select.visual }) end,
104104+ { nargs = "*", range = true }
105105+ )
106106+107107+ -- Inline chat with Copilot
108108+ vim.api.nvim_create_user_command(
109109+ "CopilotChatInline",
110110+ function(args)
111111+ chat.ask(args.args, {
112112+ selection = select.visual,
113113+ window = {
114114+ layout = "float",
115115+ relative = "cursor",
116116+ width = 1,
117117+ height = 0.4,
118118+ row = 1,
119119+ },
120120+ })
121121+ end,
122122+ { nargs = "*", range = true }
123123+ )
124124+125125+ -- Restore CopilotChatBuffer
126126+ vim.api.nvim_create_user_command(
127127+ "CopilotChatBuffer",
128128+ function(args) chat.ask(args.args, { selection = select.buffer }) end,
129129+ { nargs = "*", range = true }
130130+ )
131131+132132+ -- Custom buffer for CopilotChat
133133+ vim.api.nvim_create_autocmd("BufEnter", {
134134+ pattern = "copilot-*",
135135+ callback = function()
136136+ vim.opt_local.relativenumber = true
137137+ vim.opt_local.number = true
138138+139139+ -- Get current filetype and set it to markdown if the current filetype is copilot-chat
140140+ local ft = vim.bo.filetype
141141+ if ft == "copilot-chat" then vim.bo.filetype = "markdown" end
142142+ end,
143143+ })
144144+145145+ -- Add which-key mappings
146146+ local wk = require("which-key")
147147+ wk.add({
148148+ { "<leader>gm", group = "+Copilot Chat" }, -- group
149149+ { "<leader>gmd", desc = "Show diff" },
150150+ { "<leader>gmp", desc = "System prompt" },
151151+ { "<leader>gms", desc = "Show selection" },
152152+ { "<leader>gmy", desc = "Yank diff" },
153153+ })
154154+ end,
155155+ event = "VeryLazy",
156156+ keys = {
157157+ -- Show help actions with telescope
158158+ {
159159+ "<leader>ah",
160160+ function()
161161+ local actions = require("CopilotChat.actions")
162162+ require("CopilotChat.integrations.telescope").pick(actions.help_actions())
163163+ end,
164164+ desc = "CopilotChat - Help actions",
165165+ },
166166+ -- Show prompts actions with telescope
167167+ {
168168+ "<leader>ap",
169169+ function()
170170+ local actions = require("CopilotChat.actions")
171171+ require("CopilotChat.integrations.telescope").pick(actions.prompt_actions())
172172+ end,
173173+ desc = "CopilotChat - Prompt actions",
174174+ },
175175+ {
176176+ "<leader>ap",
177177+ ":lua require('CopilotChat.integrations.telescope').pick(require('CopilotChat.actions').prompt_actions({selection = require('CopilotChat.select').visual}))<CR>",
178178+ mode = "x",
179179+ desc = "CopilotChat - Prompt actions",
180180+ },
181181+ -- Code related commands
182182+ { "<leader>ae", "<cmd>CopilotChatExplain<cr>", desc = "CopilotChat - Explain code" },
183183+ { "<leader>at", "<cmd>CopilotChatTests<cr>", desc = "CopilotChat - Generate tests" },
184184+ { "<leader>ar", "<cmd>CopilotChatReview<cr>", desc = "CopilotChat - Review code" },
185185+ { "<leader>aR", "<cmd>CopilotChatRefactor<cr>", desc = "CopilotChat - Refactor code" },
186186+ { "<leader>an", "<cmd>CopilotChatBetterNamings<cr>", desc = "CopilotChat - Better Naming" },
187187+ -- Chat with Copilot in visual mode
188188+ {
189189+ "<leader>av",
190190+ ":CopilotChatVisual",
191191+ mode = "x",
192192+ desc = "CopilotChat - Open in vertical split",
193193+ },
194194+ {
195195+ "<leader>ax",
196196+ ":CopilotChatInline<cr>",
197197+ mode = "x",
198198+ desc = "CopilotChat - Inline chat",
199199+ },
200200+ -- Custom input for CopilotChat
201201+ {
202202+ "<leader>ai",
203203+ function()
204204+ local input = vim.fn.input("Ask Copilot: ")
205205+ if input ~= "" then vim.cmd("CopilotChat " .. input) end
206206+ end,
207207+ desc = "CopilotChat - Ask input",
208208+ },
209209+ -- Generate commit message based on the git diff
210210+ {
211211+ "<leader>am",
212212+ "<cmd>CopilotChatCommit<cr>",
213213+ desc = "CopilotChat - Generate commit message for all changes",
214214+ },
215215+ {
216216+ "<leader>aM",
217217+ "<cmd>CopilotChatCommitStaged<cr>",
218218+ desc = "CopilotChat - Generate commit message for staged changes",
219219+ },
220220+ -- Quick chat with Copilot
221221+ {
222222+ "<leader>aq",
223223+ function()
224224+ local input = vim.fn.input("Quick Chat: ")
225225+ if input ~= "" then vim.cmd("CopilotChatBuffer " .. input) end
226226+ end,
227227+ desc = "CopilotChat - Quick chat",
228228+ },
229229+ -- Debug
230230+ { "<leader>ad", "<cmd>CopilotChatDebugInfo<cr>", desc = "CopilotChat - Debug Info" },
231231+ -- Fix the issue with diagnostic
232232+ { "<leader>af", "<cmd>CopilotChatFixDiagnostic<cr>", desc = "CopilotChat - Fix Diagnostic" },
233233+ -- Clear buffer and chat history
234234+ { "<leader>al", "<cmd>CopilotChatReset<cr>", desc = "CopilotChat - Clear buffer and chat history" },
235235+ -- Toggle Copilot Chat Vsplit
236236+ { "<leader>av", "<cmd>CopilotChatToggle<cr>", desc = "CopilotChat - Toggle" },
237237+ -- Copilot Chat Models
238238+ { "<leader>a?", "<cmd>CopilotChatModels<cr>", desc = "CopilotChat - Select Models" },
239239+ },
240240+ },
241241+}
···11+return {
22+ "ggandor/leap.nvim",
33+ keys = {
44+ { "s", mode = { "n", "x", "o" }, desc = "Leap forward to" },
55+ { "S", mode = { "n", "x", "o" }, desc = "Leap backward to" },
66+ { "gs", mode = { "n", "x", "o" }, desc = "Leap from windows" },
77+ },
88+ config = function(_, opts)
99+ local leap = require("leap")
1010+ for k, v in pairs(opts) do
1111+ leap.opts[k] = v
1212+ end
1313+ leap.add_default_mappings(true)
1414+ vim.keymap.del({ "x", "o" }, "x")
1515+ vim.keymap.del({ "x", "o" }, "X")
1616+ end,
1717+ dependencies = { "tpope/vim-repeat" },
1818+}
+76
lua/plugins/lint.lua
···11+return {
22+ "mfussenegger/nvim-lint",
33+ -- Event to trigger linters
44+ events = { "BufWritePost", "BufReadPost", "InsertLeave" },
55+ opts = {
66+ linters_by_ft = {
77+ -- Use the "*" filetype to run linters on all filetypes.
88+ -- Use the "_" filetype to run linters on filetypes that don't have other linters configured.
99+ -- ['_'] = { 'fallback linter' },
1010+ ["*"] = { "typos", "codespell" },
1111+ },
1212+ linters = {
1313+ -- -- Example of using selene only when a selene.toml file is present
1414+ -- selene = {
1515+ -- -- `condition` is another LazyVim extension that allows you to
1616+ -- -- dynamically enable/disable linters based on the context.
1717+ -- condition = function(ctx)
1818+ -- return vim.fs.find({ "selene.toml" }, { path = ctx.filename, upward = true })[1]
1919+ -- end,
2020+ -- },
2121+ },
2222+ },
2323+ config = function(_, opts)
2424+ local M = {}
2525+2626+ local lint = require("lint")
2727+ for name, linter in pairs(opts.linters) do
2828+ if type(linter) == "table" and type(lint.linters[name]) == "table" then
2929+ lint.linters[name] = vim.tbl_deep_extend("force", lint.linters[name], linter)
3030+ else
3131+ lint.linters[name] = linter
3232+ end
3333+ end
3434+ lint.linters_by_ft = opts.linters_by_ft
3535+3636+ function M.debounce(ms, fn)
3737+ local timer = vim.uv.new_timer()
3838+ return function(...)
3939+ local argv = { ... }
4040+ timer:start(ms, 0, function()
4141+ timer:stop()
4242+ vim.schedule_wrap(fn)(unpack(argv))
4343+ end)
4444+ end
4545+ end
4646+4747+ function M.lint()
4848+ -- Use nvim-lint's logic first:
4949+ -- * checks if linters exist for the full filetype first
5050+ -- * otherwise will split filetype by "." and add all those linters
5151+ -- * this differs from conform.nvim which only uses the first filetype that has a formatter
5252+ local names = lint._resolve_linter_by_ft(vim.bo.filetype)
5353+5454+ -- Create a copy of the names table to avoid modifying the original.
5555+ names = vim.list_extend({}, names)
5656+5757+ -- Add fallback linters.
5858+ if #names == 0 then vim.list_extend(names, lint.linters_by_ft["_"] or {}) end
5959+6060+ -- Add global linters.
6161+ vim.list_extend(names, lint.linters_by_ft["*"] or {})
6262+6363+ -- Filter out linters that don't exist or don't match the condition.
6464+ local ctx = { filename = vim.api.nvim_buf_get_name(0) }
6565+ ctx.dirname = vim.fn.fnamemodify(ctx.filename, ":h")
6666+ names = vim.tbl_filter(function(name)
6767+ local linter = lint.linters[name]
6868+ if not linter then LazyVim.warn("Linter not found: " .. name, { title = "nvim-lint" }) end
6969+ return linter and not (type(linter) == "table" and linter.condition and not linter.condition(ctx))
7070+ end, names)
7171+7272+ -- Run linters.
7373+ if #names > 0 then lint.try_lint(names) end
7474+ end
7575+ end,
7676+}
···11+return {
22+ "hedyhli/outline.nvim",
33+ lazy = true,
44+ cmd = { "Outline", "OutlineOpen" },
55+ keys = { -- Example mapping to toggle outline
66+ { "<leader>o", "<cmd>Outline<CR>", desc = "Toggle outline" },
77+ },
88+ opts = {
99+ outline_window = {
1010+ -- Auto close the outline window if goto_location is triggered and not for
1111+ -- peek_location
1212+ auto_close = false,
1313+ -- Automatically scroll to the location in code when navigating outline window.
1414+ auto_jump = true,
1515+ -- boolean or integer for milliseconds duration to apply a temporary highlight
1616+ -- when jumping. false to disable.
1717+ jump_highlight_duration = 300,
1818+ -- Whether to center the cursor line vertically in the screen when
1919+ -- jumping/focusing. Executes zz.
2020+ center_on_jump = true,
2121+2222+ -- Vim options for the outline window
2323+ show_numbers = false,
2424+ show_relative_numbers = false,
2525+ wrap = false,
2626+ },
2727+2828+ outline_items = {
2929+ -- Show extra details with the symbols (lsp dependent) as virtual next
3030+ show_symbol_details = true,
3131+ -- Show corresponding line numbers of each symbol on the left column as
3232+ -- virtual text, for quick navigation when not focused on outline.
3333+ -- Why? See this comment:
3434+ -- https://github.com/simrat39/symbols-outline.nvim/issues/212#issuecomment-1793503563
3535+ show_symbol_lineno = true,
3636+ -- Whether to highlight the currently hovered symbol and all direct parents
3737+ highlight_hovered_item = true,
3838+ -- Whether to automatically set cursor location in outline to match
3939+ -- location in code when focus is in code. If disabled you can use
4040+ -- `:OutlineFollow[!]` from any window or `<C-g>` from outline window to
4141+ -- trigger this manually.
4242+ auto_set_cursor = true,
4343+ -- Autocmd events to automatically trigger these operations.
4444+ auto_update_events = {
4545+ -- Includes both setting of cursor and highlighting of hovered item.
4646+ -- The above two options are respected.
4747+ -- This can be triggered manually through `follow_cursor` lua API,
4848+ -- :OutlineFollow command, or <C-g>.
4949+ follow = { "CursorMoved" },
5050+ -- Re-request symbols from the provider.
5151+ -- This can be triggered manually through `refresh_outline` lua API, or
5252+ -- :OutlineRefresh command.
5353+ items = { "InsertLeave", "WinEnter", "BufEnter", "BufWinEnter", "TabEnter", "BufWritePost" },
5454+ },
5555+ },
5656+5757+ -- Options for outline guides which help show tree hierarchy of symbols
5858+ guides = {
5959+ enabled = true,
6060+ markers = {
6161+ -- It is recommended for bottom and middle markers to use the same number
6262+ -- of characters to align all child nodes vertically.
6363+ bottom = "└",
6464+ middle = "├",
6565+ vertical = "│",
6666+ },
6767+ },
6868+6969+ symbol_folding = {
7070+ -- Depth past which nodes will be folded by default. Set to false to unfold all on open.
7171+ autofold_depth = 1,
7272+ -- When to auto unfold nodes
7373+ auto_unfold = {
7474+ -- Auto unfold currently hovered symbol
7575+ hovered = true,
7676+ -- Auto fold when the root level only has this many nodes.
7777+ -- Set true for 1 node, false for 0.
7878+ only = true,
7979+ },
8080+ markers = { "", "" },
8181+ },
8282+8383+ -- These keymaps can be a string or a table for multiple keys.
8484+ -- Set to `{}` to disable. (Using 'nil' will fallback to default keys)
8585+ keymaps = {
8686+ show_help = "?",
8787+ close = { "<Esc>", "q" },
8888+ -- Jump to symbol under cursor.
8989+ -- It can auto close the outline window when triggered, see
9090+ -- 'auto_close' option above.
9191+ goto_location = "<Cr>",
9292+ -- Jump to symbol under cursor but keep focus on outline window.
9393+ peek_location = "o",
9494+ -- Visit location in code and close outline immediately
9595+ goto_and_close = "<S-Cr>",
9696+ -- Change cursor position of outline window to match current location in code.
9797+ -- 'Opposite' of goto/peek_location.
9898+ restore_location = "<C-g>",
9999+ -- Open LSP/provider-dependent symbol hover information
100100+ hover_symbol = "<C-space>",
101101+ -- Preview location code of the symbol under cursor
102102+ toggle_preview = "K",
103103+ rename_symbol = "r",
104104+ code_actions = "a",
105105+ -- These fold actions are collapsing tree nodes, not code folding
106106+ fold = "h",
107107+ unfold = "l",
108108+ fold_toggle = "<Tab>",
109109+ -- Toggle folds for all nodes.
110110+ -- If at least one node is folded, this action will fold all nodes.
111111+ -- If all nodes are folded, this action will unfold all nodes.
112112+ fold_toggle_all = "<S-Tab>",
113113+ fold_all = "W",
114114+ unfold_all = "E",
115115+ fold_reset = "R",
116116+ -- Move down/up by one line and peek_location immediately.
117117+ -- You can also use outline_window.auto_jump=true to do this for any
118118+ -- j/k/<down>/<up>.
119119+ down_and_jump = "<C-j>",
120120+ up_and_jump = "<C-k>",
121121+ },
122122+123123+ providers = {
124124+ priority = { "lsp", "coc", "markdown", "norg" },
125125+ -- Configuration for each provider (3rd party providers are supported)
126126+ lsp = {
127127+ -- Lsp client names to ignore
128128+ blacklist_clients = {},
129129+ },
130130+ markdown = {
131131+ -- List of supported ft's to use the markdown provider
132132+ filetypes = { "markdown" },
133133+ },
134134+ },
135135+136136+ symbols = {
137137+ -- Filter by kinds (string) for symbols in the outline.
138138+ -- Possible kinds are the Keys in the icons table below.
139139+ -- A filter list is a string[] with an optional exclude (boolean) field.
140140+ -- The symbols.filter option takes either a filter list or ft:filterList
141141+ -- key-value pairs.
142142+ -- Put exclude=true in the string list to filter by excluding the list of
143143+ -- kinds instead.
144144+ -- Include all except String and Constant:
145145+ -- filter = { 'String', 'Constant', exclude = true }
146146+ -- Only include Package, Module, and Function:
147147+ -- filter = { 'Package', 'Module', 'Function' }
148148+ -- See more examples below.
149149+ filter = nil,
150150+151151+ icons = {
152152+ File = { icon = "", hl = "Identifier" },
153153+ Module = { icon = "", hl = "Include" },
154154+ Namespace = { icon = "", hl = "Include" },
155155+ Package = { icon = "", hl = "Include" },
156156+ Class = { icon = "𝓒", hl = "Type" },
157157+ Method = { icon = "ƒ", hl = "Function" },
158158+ Property = { icon = "", hl = "Identifier" },
159159+ Field = { icon = "", hl = "Identifier" },
160160+ Constructor = { icon = "", hl = "Special" },
161161+ Enum = { icon = "ℰ", hl = "Type" },
162162+ Interface = { icon = "", hl = "Type" },
163163+ Function = { icon = "", hl = "Function" },
164164+ Variable = { icon = "", hl = "Constant" },
165165+ Constant = { icon = "", hl = "Constant" },
166166+ String = { icon = "𝓐", hl = "String" },
167167+ Number = { icon = "#", hl = "Number" },
168168+ Boolean = { icon = "⊨", hl = "Boolean" },
169169+ Array = { icon = "", hl = "Constant" },
170170+ Object = { icon = "⦿", hl = "Type" },
171171+ Key = { icon = "🔐", hl = "Type" },
172172+ Null = { icon = "NULL", hl = "Type" },
173173+ EnumMember = { icon = "", hl = "Identifier" },
174174+ Struct = { icon = "𝓢", hl = "Structure" },
175175+ Event = { icon = "🗲", hl = "Type" },
176176+ Operator = { icon = "+", hl = "Identifier" },
177177+ TypeParameter = { icon = "𝙏", hl = "Identifier" },
178178+ Component = { icon = "", hl = "Function" },
179179+ Fragment = { icon = "", hl = "Constant" },
180180+ TypeAlias = { icon = " ", hl = "Type" },
181181+ Parameter = { icon = " ", hl = "Identifier" },
182182+ StaticMethod = { icon = " ", hl = "Function" },
183183+ Macro = { icon = " ", hl = "Function" },
184184+ },
185185+ },
186186+ },
187187+}