diff --git a/bundle/indent-blankline.nvim/LICENSE.md b/bundle/indent-blankline.nvim/LICENSE.md index f38dc2923..7074561a7 100644 --- a/bundle/indent-blankline.nvim/LICENSE.md +++ b/bundle/indent-blankline.nvim/LICENSE.md @@ -1,6 +1,6 @@ The MIT Licence -Copyright (c) 2021 Lukas Reineke +Copyright (c) 2022 Lukas Reineke Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/bundle/indent-blankline.nvim/README.md b/bundle/indent-blankline.nvim/README.md index 18875a418..a139e0d07 100644 --- a/bundle/indent-blankline.nvim/README.md +++ b/bundle/indent-blankline.nvim/README.md @@ -2,7 +2,7 @@ This plugin adds indentation guides to all lines (including empty lines). -It uses Neovims virtual text feature and **no conceal** +It uses Neovim's virtual text feature and **no conceal** This plugin requires Neovim 0.5 or higher. It makes use of Neovim only features so it will not work in Vim. @@ -13,28 +13,22 @@ branch `version-1` Use your favourite plugin manager to install. -#### Example with Packer - -[wbthomason/packer.nvim](https://github.com/wbthomason/packer.nvim) +For [lazy.nvim](https://github.com/folke/lazy.nvim): ```lua --- init.lua -require("packer").startup( - function() - use "lukas-reineke/indent-blankline.nvim" - end -) +{ "lukas-reineke/indent-blankline.nvim" }, ``` -#### Example with Plug +For [packer.nvim](https://github.com/wbthomason/packer.nvim): -[junegunn/vim-plug](https://github.com/junegunn/vim-plug) +```lua +use "lukas-reineke/indent-blankline.nvim" +``` + +For [vim-plug](https://github.com/junegunn/vim-plug): ```vim -" init.vim -call plug#begin('~/.vim/plugged') Plug 'lukas-reineke/indent-blankline.nvim' -call plug#end() ``` ## Setup @@ -50,7 +44,7 @@ require("indent_blankline").setup { } ``` -Please see `:help indent_blankline.txt`for more details and all possible values. +Please see `:help indent_blankline.txt` for more details and all possible values. A lot of [Yggdroot/indentLine](https://github.com/Yggdroot/indentLine) options should work out of the box. @@ -62,7 +56,7 @@ All screenshots use [my custom onedark color scheme](https://github.com/lukas-re ```lua vim.opt.list = true -vim.opt.listchars:append("eol:↴") +vim.opt.listchars:append "eol:↴" require("indent_blankline").setup { show_end_of_line = true, @@ -75,8 +69,8 @@ require("indent_blankline").setup { ```lua vim.opt.list = true -vim.opt.listchars:append("space:⋅") -vim.opt.listchars:append("eol:↴") +vim.opt.listchars:append "space:⋅" +vim.opt.listchars:append "eol:↴" require("indent_blankline").setup { show_end_of_line = true, @@ -98,8 +92,8 @@ vim.cmd [[highlight IndentBlanklineIndent5 guifg=#61AFEF gui=nocombine]] vim.cmd [[highlight IndentBlanklineIndent6 guifg=#C678DD gui=nocombine]] vim.opt.list = true -vim.opt.listchars:append("space:⋅") -vim.opt.listchars:append("eol:↴") +vim.opt.listchars:append "space:⋅" +vim.opt.listchars:append "eol:↴" require("indent_blankline").setup { space_char_blankline = " ", @@ -143,8 +137,8 @@ require("indent_blankline").setup { ```lua vim.opt.list = true -vim.opt.listchars:append("space:⋅") -vim.opt.listchars:append("eol:↴") +vim.opt.listchars:append "space:⋅" +vim.opt.listchars:append "eol:↴" require("indent_blankline").setup { space_char_blankline = " ", @@ -153,7 +147,11 @@ require("indent_blankline").setup { } ``` -Screenshot +Screenshot + +`show_current_context_start` uses underline, so to achieve the best result you +might need to tweak the underline position. In Kitty terminal for example you +can do that with [modify_font](https://sw.kovidgoyal.net/kitty/conf/#opt-kitty.modify_font) ## Thanks diff --git a/bundle/indent-blankline.nvim/doc/indent_blankline.txt b/bundle/indent-blankline.nvim/doc/indent_blankline.txt index 42f814107..b1ff7744b 100644 --- a/bundle/indent-blankline.nvim/doc/indent_blankline.txt +++ b/bundle/indent-blankline.nvim/doc/indent_blankline.txt @@ -2,7 +2,7 @@ Author: Lukas Reineke -Version: 2.17.0 +Version: 2.20.6 ============================================================================== CONTENTS *indent-blankline* @@ -12,15 +12,14 @@ CONTENTS *indent-blankline* 3. Setup |indent-blankline-setup| 4. Variables |indent-blankline-variables| 5. Commands |indent-blankline-commands| - 6. Changelog |indent-blankline-changelog| - 7. License |indent-blankline-license| + 6. License |indent-blankline-license| ============================================================================== 1. INTRODUCTION *indent-blankline-introduction* This plugin adds indentation guides to all lines (including empty lines). -It uses Neovims virtual text feature and **no conceal** +It uses Neovim's virtual text feature and **no conceal** This plugin requires Neovim 0.5 or higher. It makes use of Neovim only features so it will not work in Vim. @@ -78,6 +77,18 @@ IndentBlanklineContextChar *hl-IndentBlanklineContextChar* highlight IndentBlanklineContextChar guifg=#00FF00 gui=nocombine +------------------------------------------------------------------------------ +IndentBlanklineContextSpaceChar *hl-IndentBlanklineContextSpaceChar* + + Highlight of space characters one indent level of the current context. + Only used when |g:indent_blankline_show_current_context| is active + + Default: takes guifg color from 'Label' ~ + + Example: > + + highlight IndentBlanklineContextSpaceChar guifg=#00FF00 gui=nocombine + ------------------------------------------------------------------------------ IndentBlanklineContextStart *hl-IndentBlanklineContextStart* @@ -94,11 +105,13 @@ IndentBlanklineContextStart *hl-IndentBlanklineContextStart* ------------------------------------------------------------------------------ +Note: Define your highlight group after setting colorscheme or your colorscheme will clear your highlight group + When defining the highlight group, it is important to set |nocombine| as a gui option. This is to make sure the character does not inherit gui options from the underlying text, like italic or bold. -Highlight groups get reset on |ColorScheme| autocommand, *if* both fg and bg +Highlight groups get reset on |ColorScheme| autocommand, if both fg and bg are empty. The set more than one highlight group that changes based on indentation level, @@ -126,7 +139,7 @@ Example: > ============================================================================== 4. VARIABLES *indent-blankline-variables* -All variables can be set gobally |g:var|, per tab |t:var|, or per buffer |b:var| +All variables can be set globally |g:var|, per tab |t:var|, or per buffer |b:var| ------------------------------------------------------------------------------ g:indent_blankline_char *g:indent_blankline_char* @@ -190,7 +203,6 @@ g:indent_blankline_char_list_blankline *g:indent_blankline_char_list_blankline* let g:indent_blankline_char_list_blankline = ['|', '¦', '┆', '┊'] ------------------------------------------------------------------------------ - g:indent_blankline_char_highlight_list *g:indent_blankline_char_highlight_list* Specifies the list of character highlights for each indentation level. @@ -215,7 +227,6 @@ g:indent_blankline_space_char_blankline *g:indent_blankline_space_char_blankline let g:indent_blankline_space_char_blankline = ' ' ------------------------------------------------------------------------------ - g:indent_blankline_space_char_highlight_list *g:indent_blankline_space_char_highlight_list* Specifies the list of space character highlights for each indentation @@ -229,7 +240,6 @@ g:indent_blankline_space_char_highlight_list *g:indent_blankline_space_char_high let g:indent_blankline_space_char_highlight_list = ['Error', 'Function'] ------------------------------------------------------------------------------ - g:indent_blankline_space_char_blankline_highlight_list *g:indent_blankline_space_char_blankline_highlight_list* Specifies the list of space character highlights for each indentation @@ -341,7 +351,7 @@ g:indent_blankline_enabled *g:indent_blankline_enabled* Also set by |g:indentLine_enabled| Note: the buffer version of this variable overwrites all other - enabled/disalbed checks. + enabled/disabled checks. Default: v:true ~ @@ -409,6 +419,7 @@ g:indent_blankline_buftype_exclude *g:indent_blankline_buftype_exclude* "terminal", ~ "nofile", ~ "quickfix", ~ + "prompt", ~ ] ~ Example: > @@ -451,7 +462,9 @@ g:indent_blankline_show_current_context *g:indent_blankline_show_current_context When on, use treesitter to determine the current context. Then show the indent character in a different highlight. - Requires treesitter + + Note: Requires https://github.com/nvim-treesitter/nvim-treesitter to be + installed Note: With this option enabled, the plugin refreshes on |CursorMoved|, which might be slower @@ -469,6 +482,9 @@ g:indent_blankline_show_current_context_start *g:indent_blankline_show_current_c line of the current context. By default this will underline. + Note: Requires https://github.com/nvim-treesitter/nvim-treesitter to be + installed + Note: You need to have set |gui-colors| and it depends on your terminal emulator if this works as expected. If you are using kitty and tmux, take a look at this article to @@ -562,6 +578,28 @@ g:indent_blankline_context_highlight_list *g:indent_blankline_context_highlight_ let g:indent_blankline_context_highlight_list = ['Error', 'Warning'] +------------------------------------------------------------------------------ +g:indent_blankline_char_priority *g:indent_blankline_char_priority* + + Specifies the |extmarks| priority for chars. + + Default: 1 ~ + + Example: > + + let g:indent_blankline_char_priority = 50 + +------------------------------------------------------------------------------ +g:indent_blankline_context_start_priority *g:indent_blankline_context_start_priority* + + Specifies the |extmarks| priority for the context start. + + Default: 10000 ~ + + Example: > + + let g:indent_blankline_context_start_priority = 50 + ------------------------------------------------------------------------------ g:indent_blankline_context_patterns *g:indent_blankline_context_patterns* @@ -591,12 +629,33 @@ g:indent_blankline_context_patterns *g:indent_blankline_context_patterns* "element", ~ "table", ~ "tuple", ~ + "do_block", ~ + "Block", ~ + "InitList", ~ + "FnCallArguments", ~ + "IfStatement", ~ + "ContainerDecl", ~ + "SwitchExpr", ~ + "IfExpr", ~ + "ParamDeclList", ~ ] ~ Example: > let g:indent_blankline_context_patterns = ['^if'] +------------------------------------------------------------------------------ +g:indent_blankline_use_treesitter_scope *g:indent_blankline_use_treesitter_scope* + + Instead of using |g:indent_blankline_context_patterns|, use the current + scope defined by nvim-treesitter as the context. + + Default: false ~ + + Example: > + + let g:indent_blankline_use_treesitter_scope = true + ------------------------------------------------------------------------------ g:indent_blankline_context_pattern_highlight *g:indent_blankline_context_pattern_highlight* @@ -636,17 +695,6 @@ g:indent_blankline_disable_warning_message *g:indent_blankline_disable_warning_m let g:indent_blankline_disable_warning_message = v:true ------------------------------------------------------------------------------- -g:indent_blankline_debug *g:indent_blankline_debug* - - Turns on error logging. - - Default: v:false ~ - - Example: > - - let g:indent_blankline_debug = v:true - ============================================================================== 5. COMMANDS *indent-blankline-commands* @@ -666,7 +714,7 @@ g:indent_blankline_debug *g:indent_blankline_debug* 4. |CompleteChanged| * 5. |BufWinEnter| * 6. |Filetype| * - 7. |OptionSet| shiftwidth,tabstop,expandtab + 7. |OptionSet| list,listchars,shiftwidth,tabstop,expandtab Example: > @@ -712,251 +760,12 @@ g:indent_blankline_debug *g:indent_blankline_debug* With bang (IndentBlanklineToggle!) toggles globally ============================================================================== - 6. CHANGELOG *indent-blankline-changelog* - -2.17.0 - Update defaults for |g:indent_blankline_buftype_exclude| - -2.16.0 - Add `man` to |g:indent_blankline_filetype_exclude| - Stylua update - -2.15.1 - Fix for nvim 0.5.1 - -2.15.0 - * Add |g:indent_blankline_context_char_blankline| and - |g:indent_blankline_context_char_list_blankline| options - -2.14.0 - * Add |g:indent_blankline_char_blankline| and - |g:indent_blankline_char_list_blankline| options - -2.13.0 - * Support both the concatenated string, as well as the individual |filetypes| - in |g:indent_blankline_filetype_exclude| when a buffer has multiple filetypes - -2.12.1 - * Add ext mark priority - -2.12.0 - * Remove old vimscript functions - * Better default values for |g:indent_blankline_context_patterns| and - |g:indent_blankline_filetype_exclude| - -2.11.0 - * Add |g:indent_blankline_show_current_context_start_on_current_line| - -2.10.6 - * Update example setup in the readme and docs - -2.10.5 - * Run refresh without autocmds - * Check that the window is valid before returning to it after refresh - -2.10.4 - * Remove `nocombine` from |hl-IndentBlanklineContextStart| again.. - -2.10.3 - * Fix context start highlight column for files indent with tab - * Fix context start highlight on lines with no indent - -2.10.2 - * Apply context start highlight after indentation - -2.10.1 - * Remove `nocombine` from |hl-IndentBlanklineContextStart| - -2.10.0 - * Add |g:indent_blankline_show_current_context_start| - * Add |hl-IndentBlanklineContextStart| - -2.9.3 - * Fix indent cache for scrolling - * Fix documentation tags - -2.9.2 - * Fix refresh argument types for 0.5 - -2.9.1 - * Fix horizontal scroll update - -2.9.0 - * Add |g:indent_blankline_context_char| - * Add |g:indent_blankline_context_char_list| - -2.8.0 - * Add |IndentBlanklineRefreshScroll| - -2.7.0 - * Add support for 0 width |g:indent_blankline_char| - -2.6.4 - * Remove memo from `find_indent`, it made the performance worse - -2.6.3 - * Fix issue when calling setup more than once - -2.6.2 - * Memoize the find indent function - * Run init on VimEnter to initialize indents in all open windows - * Run init on plugin load to work with lazy loading - -2.6.1 - * Wait until buffer is loaded before doing anything - -2.6.0 - * Add |g:indent_blankline_context_pattern_highlight| - -2.5.7 - * Update the README to not overwrite all listchars - * Handle listchars without a tab character - -2.5.6 - * Fix trailing space for blanklines - -2.5.5 - * Fix typo in readme - * Fix initialization of |g:indent_blankline_space_char_blankline_highlight_list| - * Refactor `find_indent` - -2.5.4 - * Fix wrong indent for empty lines with only extra - -2.5.3 - * Remove old reference to `indent_blankline_space_char` - -2.5.2 - * Fix background highlight example - -2.5.1 - * Only load treesitter libs if needed - -2.5.0 - * Add |g:indent_blankline_max_indent_increase| - -2.4.0 - * Remove `indent_blankline_respect_list` - * Add |g:indent_blankline_disable_with_nolist| - -2.3.0 - * Add |g:indent_blankline_respect_list| option - -2.2.2 - * Remove old vimscript code - -2.2.1 - * Fix first indent on a line with whitespace less than the current shift - width - -2.2.0 - * Correctly display listchars under the indent guides - Huge thanks to @Daxtorim - * Remove options: - `indent_blankline_space_char` - listchars is used to get the correct space - character - -2.1.4 - * Fix race condition in `is_indent_blankline_enabled` - -2.1.3 - * Refresh on |CompleteChanged| - -2.1.2 - * Fix lazy loading - -2.1.1 - * Fix bug were setup function is not run - -2.1.0 - * Added setup function - * Added buffer variables - * Fix horizontal scroll - -2.0.1 - * Fix typo in docs - -2.0.0 - * Complete lua rewrite - * Drop support for Neovim 0.4 - * Trigger on `TextChanged`, `TextChangedI` and `WinScrolled` - * Removed IndentGuide dependency - * Removed commands - - IndentBlanklineEnableAll - - IndentBlanklineDisableAll - - IndentBlanklineToggleAll - * Added Bang for commands - - IndentBlanklineRefresh - - IndentBlanklineEnable - - IndentBlanklineDisable - - IndentBlanklineToggle - * New options: - |g:indent_blankline_char_highlight_list| - |g:indent_blankline_space_char_highlight_list| - |g:indent_blankline_show_end_of_line| - |g:indent_blankline_show_foldtext| - |g:indent_blankline_show_current_context| - |g:indent_blankline_context_highlight_list| - |g:indent_blankline_context_patterns| - |g:indent_blankline_viewport_buffer| - |g:indent_blankline_disable_warning_message| - * Remove options: - `indent_blankline_extra_indent_level` - -1.4.1 - * Fix windows working directory bug - -1.4.0 - * Don't create jumps in embedded nvim instance - * Restore cursor and close buffer after every search - * Only clear the namespace on disable if it exists - -1.3.2 - * Call indentexpr with `silent!` to not exit early on errors - -1.3.1 - * Moved more of init function in the try/catch block - -1.3.0 - * Error logs have more context - * More error logs - * Added `g:indent_blankline_debug` option to only display the errors logs - when needed - -1.2.2 - * Apply `indent_blankline_indent_level` after - `indent_blankline_extra_indent_level` - -1.2.1 - * Fixed out of range bug with `g:indent_blankline_extra_indent_level` - -1.2.0 - * Added `g:indent_blankline_extra_indent_level` option. - -1.1.0 - * Don't throw errors when `rpcnotify` fails. Just print the error message and - try again next time. - -1.0.3 - * Fixed wrong help tag - -1.0.2 -* Fixed wrong variable reference form `indentLine_bufTypeExclude` - to `indent_blankline_buftype_exclude` - -1.0.1 - * Fixed typo in docs - -1.0.0 - * First release - -============================================================================== - 7. LICENSE *indent-blankline-license* + 6. LICENSE *indent-blankline-license* The MIT Licence http://www.opensource.org/licenses/mit-license.php -Copyright (c) 2021 Lukas Reineke +Copyright (c) 2023 Lukas Reineke Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/bundle/indent-blankline.nvim/lua/indent_blankline/init.lua b/bundle/indent-blankline.nvim/lua/indent_blankline/init.lua index 5234667fb..e2c262546 100644 --- a/bundle/indent-blankline.nvim/lua/indent_blankline/init.lua +++ b/bundle/indent-blankline.nvim/lua/indent_blankline/init.lua @@ -5,6 +5,7 @@ local char_highlight = "IndentBlanklineChar" local space_char_highlight = "IndentBlanklineSpaceChar" local space_char_blankline_highlight = "IndentBlanklineSpaceCharBlankline" local context_highlight = "IndentBlanklineContextChar" +local context_space_char_highlight = "IndentBlanklineContextSpaceChar" M.init = function() if not vim.g.indent_blankline_namespace then @@ -25,43 +26,26 @@ M.setup = function(options) vim.g.indent_blankline_char = o(options.char, vim.g.indent_blankline_char, vim.g.indentLine_char, "│") vim.g.indent_blankline_char_blankline = o(options.char_blankline, vim.g.indent_blankline_char_blankline) - vim.g.indent_blankline_char_list = o( - options.char_list, - vim.g.indent_blankline_char_list, - vim.g.indentLine_char_list - ) - vim.g.indent_blankline_char_list_blankline = o( - options.char_list_blankline, - vim.g.indent_blankline_char_list_blankline - ) - vim.g.indent_blankline_context_char = o( - options.context_char, - vim.g.indent_blankline_context_char, - vim.g.indent_blankline_char - ) + vim.g.indent_blankline_char_list = + o(options.char_list, vim.g.indent_blankline_char_list, vim.g.indentLine_char_list) + vim.g.indent_blankline_char_list_blankline = + o(options.char_list_blankline, vim.g.indent_blankline_char_list_blankline) + vim.g.indent_blankline_context_char = + o(options.context_char, vim.g.indent_blankline_context_char, vim.g.indent_blankline_char) vim.g.indent_blankline_context_char_blankline = o( options.context_char_blankline, vim.g.indent_blankline_context_char_blankline, vim.g.indent_blankline_char_blankline ) vim.g.indent_blankline_context_char_list = o(options.context_char_list, vim.g.indent_blankline_context_char_list) - vim.g.indent_blankline_context_char_list_blankline = o( - options.context_char_list_blankline, - vim.g.indent_blankline_context_char_list - ) - vim.g.indent_blankline_char_highlight_list = o( - options.char_highlight_list, - vim.g.indent_blankline_char_highlight_list - ) - vim.g.indent_blankline_space_char_highlight_list = o( - options.space_char_highlight_list, - vim.g.indent_blankline_space_char_highlight_list - ) - vim.g.indent_blankline_space_char_blankline = o( - options.space_char_blankline, - vim.g.indent_blankline_space_char_blankline, - " " - ) + vim.g.indent_blankline_context_char_list_blankline = + o(options.context_char_list_blankline, vim.g.indent_blankline_context_char_list) + vim.g.indent_blankline_char_highlight_list = + o(options.char_highlight_list, vim.g.indent_blankline_char_highlight_list) + vim.g.indent_blankline_space_char_highlight_list = + o(options.space_char_highlight_list, vim.g.indent_blankline_space_char_highlight_list) + vim.g.indent_blankline_space_char_blankline = + o(options.space_char_blankline, vim.g.indent_blankline_space_char_blankline, " ") vim.g.indent_blankline_space_char_blankline_highlight_list = o( options.space_char_blankline_highlight_list, vim.g.indent_blankline_space_char_blankline_highlight_list, @@ -70,11 +54,8 @@ M.setup = function(options) ) vim.g.indent_blankline_indent_level = o(options.indent_level, vim.g.indent_blankline_indent_level, 20) vim.g.indent_blankline_enabled = o(options.enabled, vim.g.indent_blankline_enabled, true) - vim.g.indent_blankline_disable_with_nolist = o( - options.disable_with_nolist, - vim.g.indent_blankline_disable_with_nolist, - false - ) + vim.g.indent_blankline_disable_with_nolist = + o(options.disable_with_nolist, vim.g.indent_blankline_disable_with_nolist, false) vim.g.indent_blankline_filetype = o(options.filetype, vim.g.indent_blankline_filetype, vim.g.indentLine_fileType) vim.g.indent_blankline_filetype_exclude = o( options.filetype_exclude, @@ -82,16 +63,13 @@ M.setup = function(options) vim.g.indentLine_fileTypeExclude, { "lspinfo", "packer", "checkhealth", "help", "man", "" } ) - vim.g.indent_blankline_bufname_exclude = o( - options.bufname_exclude, - vim.g.indent_blankline_bufname_exclude, - vim.g.indentLine_bufNameExclude - ) + vim.g.indent_blankline_bufname_exclude = + o(options.bufname_exclude, vim.g.indent_blankline_bufname_exclude, vim.g.indentLine_bufNameExclude) vim.g.indent_blankline_buftype_exclude = o( options.buftype_exclude, vim.g.indent_blankline_buftype_exclude, vim.g.indentLine_bufTypeExclude, - { "terminal", "nofile", "quickfix" } + { "terminal", "nofile", "quickfix", "prompt" } ) vim.g.indent_blankline_viewport_buffer = o(options.viewport_buffer, vim.g.indent_blankline_viewport_buffer, 10) vim.g.indent_blankline_use_treesitter = o(options.use_treesitter, vim.g.indent_blankline_use_treesitter, false) @@ -101,41 +79,26 @@ M.setup = function(options) options.indent_level, vim.g.indent_blankline_indent_level ) - vim.g.indent_blankline_show_first_indent_level = o( - options.show_first_indent_level, - vim.g.indent_blankline_show_first_indent_level, - true - ) - vim.g.indent_blankline_show_trailing_blankline_indent = o( - options.show_trailing_blankline_indent, - vim.g.indent_blankline_show_trailing_blankline_indent, - true - ) - vim.g.indent_blankline_show_end_of_line = o( - options.show_end_of_line, - vim.g.indent_blankline_show_end_of_line, - false - ) + vim.g.indent_blankline_show_first_indent_level = + o(options.show_first_indent_level, vim.g.indent_blankline_show_first_indent_level, true) + vim.g.indent_blankline_show_trailing_blankline_indent = + o(options.show_trailing_blankline_indent, vim.g.indent_blankline_show_trailing_blankline_indent, true) + vim.g.indent_blankline_show_end_of_line = + o(options.show_end_of_line, vim.g.indent_blankline_show_end_of_line, false) vim.g.indent_blankline_show_foldtext = o(options.show_foldtext, vim.g.indent_blankline_show_foldtext, true) - vim.g.indent_blankline_show_current_context = o( - options.show_current_context, - vim.g.indent_blankline_show_current_context, - false - ) - vim.g.indent_blankline_show_current_context_start = o( - options.show_current_context_start, - vim.g.indent_blankline_show_current_context_start, - false - ) + vim.g.indent_blankline_show_current_context = + o(options.show_current_context, vim.g.indent_blankline_show_current_context, false) + vim.g.indent_blankline_show_current_context_start = + o(options.show_current_context_start, vim.g.indent_blankline_show_current_context_start, false) + vim.g.indent_blankline_use_treesitter_scope = + o(options.use_treesitter_scope, vim.g.indent_blankline_use_treesitter_scope, false) vim.g.indent_blankline_show_current_context_start_on_current_line = o( options.show_current_context_start_on_current_line, vim.g.indent_blankline_show_current_context_start_on_current_line, true ) - vim.g.indent_blankline_context_highlight_list = o( - options.context_highlight_list, - vim.g.indent_blankline_context_highlight_list - ) + vim.g.indent_blankline_context_highlight_list = + o(options.context_highlight_list, vim.g.indent_blankline_context_highlight_list) vim.g.indent_blankline_context_patterns = o(options.context_patterns, vim.g.indent_blankline_context_patterns, { "class", "^func", @@ -146,6 +109,7 @@ M.setup = function(options) "with", "try", "except", + "match", "arguments", "argument_list", "object", @@ -153,25 +117,31 @@ M.setup = function(options) "element", "table", "tuple", + "do_block", + "Block", + "InitList", + "FnCallArguments", + "IfStatement", + "ContainerDecl", + "SwitchExpr", + "IfExpr", + "ParamDeclList", }) - vim.g.indent_blankline_context_pattern_highlight = o( - options.context_pattern_highlight, - vim.g.indent_blankline_context_pattern_highlight - ) + vim.g.indent_blankline_context_pattern_highlight = + o(options.context_pattern_highlight, vim.g.indent_blankline_context_pattern_highlight) vim.g.indent_blankline_strict_tabs = o(options.strict_tabs, vim.g.indent_blankline_strict_tabs, false) - vim.g.indent_blankline_disable_warning_message = o( - options.disable_warning_message, - vim.g.indent_blankline_disable_warning_message, - false - ) - vim.g.indent_blankline_debug = o(options.debug, vim.g.indent_blankline_debug, false) + vim.g.indent_blankline_disable_warning_message = + o(options.disable_warning_message, vim.g.indent_blankline_disable_warning_message, false) + vim.g.indent_blankline_char_priority = o(options.char_priority, vim.g.indent_blankline_char_priority, 1) + vim.g.indent_blankline_context_start_priority = + o(options.context_start_priority, vim.g.indent_blankline_context_start_priority, 10000) if vim.g.indent_blankline_show_current_context then vim.cmd [[ augroup IndentBlanklineContextAutogroup autocmd! - autocmd CursorMoved * IndentBlanklineRefresh + autocmd CursorMoved,CursorMovedI * IndentBlanklineRefresh augroup END ]] end @@ -277,6 +247,8 @@ local refresh = function(scroll) local space_char_highlight_list = v "indent_blankline_space_char_highlight_list" or {} local space_char_blankline_highlight_list = v "indent_blankline_space_char_blankline_highlight_list" or {} local space_char_blankline = v "indent_blankline_space_char_blankline" + local char_priority = v "indent_blankline_char_priority" + local context_start_priority = v "indent_blankline_context_start_priority" local list_chars local no_tab_character = false @@ -321,6 +293,11 @@ local refresh = function(scroll) local ts_indent if v "indent_blankline_use_treesitter" then local ts_query_status, ts_query = pcall(require, "nvim-treesitter.query") + if not ts_query_status then + vim.schedule_wrap(function() + utils.error_handler("nvim-treesitter not found. Treesitter indent will not work", vim.log.levels.WARN) + end)() + end local ts_indent_status ts_indent_status, ts_indent = pcall(require, "nvim-treesitter.indent") use_ts_indent = ts_query_status and ts_indent_status and ts_query.has_indents(vim.bo.filetype) @@ -340,9 +317,8 @@ local refresh = function(scroll) local show_current_context_start = v "indent_blankline_show_current_context_start" local show_current_context_start_on_current_line = v "indent_blankline_show_current_context_start_on_current_line" if v "indent_blankline_show_current_context" then - context_status, context_start, context_end, context_pattern = utils.get_current_context( - v "indent_blankline_context_patterns" - ) + context_status, context_start, context_end, context_pattern = + utils.get_current_context(v "indent_blankline_context_patterns", v "indent_blankline_use_treesitter_scope") end local get_virtual_text = @@ -351,11 +327,8 @@ local refresh = function(scroll) local current_left_offset = left_offset local local_max_indent_level = math.min(max_indent_level, prev_indent + max_indent_increase) local indent_char = utils._if(blankline and char_blankline, char_blankline, char) - local context_indent_char = utils._if( - blankline and context_char_blankline, - context_char_blankline, - context_char - ) + local context_indent_char = + utils._if(blankline and context_char_blankline, context_char_blankline, context_char) local indent_char_list = utils._if(blankline and #char_list_blankline > 0, char_list_blankline, char_list) local context_indent_char_list = utils._if( blankline and #context_char_list_blankline > 0, @@ -432,7 +405,11 @@ local refresh = function(scroll) utils._if( blankline, utils.get_from_list(space_char_blankline_highlight_list, i, space_char_blankline_highlight), - utils.get_from_list(space_char_highlight_list, i, space_char_highlight) + utils.get_from_list( + space_char_highlight_list, + i, + utils._if(context, context_space_char_highlight, space_char_highlight) + ) ), }) end @@ -503,6 +480,12 @@ local refresh = function(scroll) and show_current_context_start and (show_current_context_start_on_current_line or lnum ~= context_start) then + if + not vim.api.nvim_buf_is_loaded(bufnr) + or not vim.api.nvim_buf_get_var(bufnr, "__indent_blankline_active") + then + return + end xpcall( vim.api.nvim_buf_set_extmark, utils.error_handler, @@ -513,7 +496,7 @@ local refresh = function(scroll) { end_col = #lines[i], hl_group = "IndentBlanklineContextStart", - priority = 10000, + priority = context_start_priority, } ) end @@ -536,6 +519,12 @@ local refresh = function(scroll) max_indent_level, {} ) + if + not vim.api.nvim_buf_is_loaded(bufnr) + or not vim.api.nvim_buf_get_var(bufnr, "__indent_blankline_active") + then + return + end xpcall( vim.api.nvim_buf_set_extmark, utils.error_handler, @@ -543,7 +532,12 @@ local refresh = function(scroll) vim.g.indent_blankline_namespace, i - 1 + offset, 0, - { virt_text = virtual_text, virt_text_pos = "overlay", hl_mode = "combine", priority = 1 } + { + virt_text = virtual_text, + virt_text_pos = "overlay", + hl_mode = "combine", + priority = char_priority, + } ) end)() return async:close() @@ -552,13 +546,8 @@ local refresh = function(scroll) local indent, extra local virtual_string = {} if not blankline then - indent, extra, virtual_string = utils.find_indent( - whitespace, - only_whitespace, - shiftwidth, - strict_tabs, - list_chars - ) + indent, extra, virtual_string = + utils.find_indent(whitespace, only_whitespace, shiftwidth, strict_tabs, list_chars) elseif empty_line_counter > 0 then empty_line_counter = empty_line_counter - 1 indent = next_indent @@ -575,13 +564,8 @@ local refresh = function(scroll) end local j_whitespace = string.match(lines[j], "^%s+") local j_only_whitespace = j_whitespace == lines[j] - indent, extra, _ = utils.find_indent( - j_whitespace, - j_only_whitespace, - shiftwidth, - strict_tabs, - list_chars - ) + indent, extra, _ = + utils.find_indent(j_whitespace, j_only_whitespace, shiftwidth, strict_tabs, list_chars) end next_indent = indent next_extra = extra @@ -598,6 +582,12 @@ local refresh = function(scroll) and (show_current_context_start_on_current_line or lnum ~= context_start) then vim.schedule_wrap(function() + if + not vim.api.nvim_buf_is_loaded(bufnr) + or not vim.api.nvim_buf_get_var(bufnr, "__indent_blankline_active") + then + return + end xpcall( vim.api.nvim_buf_set_extmark, utils.error_handler, @@ -608,7 +598,7 @@ local refresh = function(scroll) { end_col = #lines[i], hl_group = "IndentBlanklineContextStart", - priority = 10000, + priority = context_start_priority, } ) end)() @@ -633,6 +623,12 @@ local refresh = function(scroll) virtual_string ) vim.schedule_wrap(function() + if + not vim.api.nvim_buf_is_loaded(bufnr) + or not vim.api.nvim_buf_get_var(bufnr, "__indent_blankline_active") + then + return + end xpcall( vim.api.nvim_buf_set_extmark, utils.error_handler, @@ -640,7 +636,12 @@ local refresh = function(scroll) vim.g.indent_blankline_namespace, i - 1 + offset, 0, - { virt_text = virtual_text, virt_text_pos = "overlay", hl_mode = "combine", priority = 1 } + { + virt_text = virtual_text, + virt_text_pos = "overlay", + hl_mode = "combine", + priority = char_priority, + } ) end)() return async:close() diff --git a/bundle/indent-blankline.nvim/lua/indent_blankline/utils.lua b/bundle/indent-blankline.nvim/lua/indent_blankline/utils.lua index 268f4c868..e21a5c901 100644 --- a/bundle/indent-blankline.nvim/lua/indent_blankline/utils.lua +++ b/bundle/indent-blankline.nvim/lua/indent_blankline/utils.lua @@ -38,12 +38,16 @@ M.memo = setmetatable({ end, }) -M.error_handler = function(err) - if vim.g.indent_blankline_debug then - vim.cmd "echohl Error" - vim.cmd('echomsg "' .. err .. '"') - vim.cmd "echohl None" +M.error_handler = function(err, level) + if err:match "Invalid buffer id.*" then + return end + if not pcall(require, "notify") then + err = string.format("indent-blankline: %s", err) + end + vim.notify_once(err, level or vim.log.levels.DEBUG, { + title = "indent-blankline", + }) end M.is_indent_blankline_enabled = M.memo( @@ -182,10 +186,29 @@ M.find_indent = function(whitespace, only_whitespace, shiftwidth, strict_tabs, l return indent + math.floor(spaces / shiftwidth), table.maxn(virtual_string) % shiftwidth ~= 0, virtual_string end -M.get_current_context = function(type_patterns) - local ts_utils = require "nvim-treesitter.ts_utils" +M.get_current_context = function(type_patterns, use_treesitter_scope) + local ts_utils_status, ts_utils = pcall(require, "nvim-treesitter.ts_utils") + if not ts_utils_status then + vim.schedule_wrap(function() + M.error_handler("nvim-treesitter not found. Context will not work", vim.log.levels.WARN) + end)() + return false + end + local locals = require "nvim-treesitter.locals" local cursor_node = ts_utils.get_node_at_cursor() + if use_treesitter_scope then + local current_scope = locals.containing_scope(cursor_node, 0) + if not current_scope then + return false + end + local node_start, _, node_end, _ = current_scope:range() + if node_start == node_end then + return false + end + return true, node_start + 1, node_end + 1, current_scope:type() + end + while cursor_node do local node_type = cursor_node:type() for _, rgx in ipairs(type_patterns) do diff --git a/bundle/indent-blankline.nvim/plugin/indent_blankline.vim b/bundle/indent-blankline.nvim/plugin/indent_blankline.vim index d9a934bef..203d140a5 100644 --- a/bundle/indent-blankline.nvim/plugin/indent_blankline.vim +++ b/bundle/indent-blankline.nvim/plugin/indent_blankline.vim @@ -32,7 +32,7 @@ lua require("indent_blankline").init() augroup IndentBlanklineAutogroup autocmd! - autocmd OptionSet list,shiftwidth,tabstop,expandtab IndentBlanklineRefresh + autocmd OptionSet list,listchars,shiftwidth,tabstop,expandtab IndentBlanklineRefresh autocmd FileChangedShellPost,TextChanged,TextChangedI,CompleteChanged,BufWinEnter,Filetype * IndentBlanklineRefresh autocmd WinScrolled * IndentBlanklineRefreshScroll autocmd ColorScheme * lua require("indent_blankline.utils").reset_highlights() diff --git a/bundle/plugins.toml b/bundle/plugins.toml index 42c231d65..bfda70fce 100644 --- a/bundle/plugins.toml +++ b/bundle/plugins.toml @@ -16,3 +16,11 @@ username = 'rakr' repo = 'vim-one' commit = '187f5c85b682c1933f8780d4d419c55d26a82e24' + +[[repos]] + # https://github.com/lukas-reineke/indent-blankline.nvim/tree/7075d7861f7a6bbf0de0298c83f8a13195e6ec01 + url = 'https://github.com/' + directory = 'indent-blankline.nvim' + username = 'lukas-reineke' + repo = 'indent-blankline.nvim' + commit = '7075d7861f7a6bbf0de0298c83f8a13195e6ec01'