From fe0fb46018d4870c57c8bb2e2ff43d12cb49fd43 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Wed, 30 Mar 2022 23:41:26 +0800 Subject: [PATCH] pref(indentline): update bundle indent-blankline.nvim ref: https://github.com/lukas-reineke/indent-blankline.nvim/tree/9920ceb79bffd0e6b7064be63439e38da0741d03 --- .../.github/workflows/pr_check.yml | 51 +++++++--- bundle/indent-blankline.nvim/.luacheckrc | 2 + .../autoload/indent_blankline.vim | 18 ---- .../doc/indent_blankline.txt | 98 ++++++++++++++++++- .../lua/indent_blankline/commands.lua | 8 +- .../lua/indent_blankline/init.lua | 91 +++++++++++++---- .../lua/indent_blankline/utils.lua | 28 +++--- 7 files changed, 227 insertions(+), 69 deletions(-) create mode 100644 bundle/indent-blankline.nvim/.luacheckrc delete mode 100644 bundle/indent-blankline.nvim/autoload/indent_blankline.vim diff --git a/bundle/indent-blankline.nvim/.github/workflows/pr_check.yml b/bundle/indent-blankline.nvim/.github/workflows/pr_check.yml index d820cb5c5..8048e5838 100644 --- a/bundle/indent-blankline.nvim/.github/workflows/pr_check.yml +++ b/bundle/indent-blankline.nvim/.github/workflows/pr_check.yml @@ -1,22 +1,43 @@ name: Pull request check on: - pull_request: + pull_request: jobs: - format: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: JohnnyMorganz/stylua-action@1.0.0 - with: - token: ${{ secrets.GITHUB_TOKEN }} - args: --check . + format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: JohnnyMorganz/stylua-action@1.0.0 + with: + token: ${{ secrets.GITHUB_TOKEN }} + args: --check . - block-fixup: - runs-on: ubuntu-latest + block-fixup: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Block Fixup Commit Merge + uses: 13rac1/block-fixup-merge-action@v2.0.0 + + luacheck: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@master + + - uses: leafo/gh-actions-lua@v8.0.0 + with: + luaVersion: 'luajit-2.1.0-beta3' + + - uses: leafo/gh-actions-luarocks@v4.0.0 + + - name: build + run: | + luarocks install luacheck + + - name: test + run: | + luacheck lua - steps: - - uses: actions/checkout@v2 - - name: Block Fixup Commit Merge - uses: 13rac1/block-fixup-merge-action@v2.0.0 diff --git a/bundle/indent-blankline.nvim/.luacheckrc b/bundle/indent-blankline.nvim/.luacheckrc new file mode 100644 index 000000000..35b522b57 --- /dev/null +++ b/bundle/indent-blankline.nvim/.luacheckrc @@ -0,0 +1,2 @@ +globals = { "vim", "_" } +max_line_length = false diff --git a/bundle/indent-blankline.nvim/autoload/indent_blankline.vim b/bundle/indent-blankline.nvim/autoload/indent_blankline.vim deleted file mode 100644 index 42982d07f..000000000 --- a/bundle/indent-blankline.nvim/autoload/indent_blankline.vim +++ /dev/null @@ -1,18 +0,0 @@ - -function! indent_blankline#Refresh(...) - try - if a:0 > 0 - call luaeval("require('indent_blankline').refresh(_A)", a:1) - else - lua require("indent_blankline").refresh() - end - catch /E12/ - return - catch - if g:indent_blankline_debug - echohl Error - echom 'indent-blankline encountered an error on refresh: ' . v:exception - echohl None - endif - endtry -endfunction diff --git a/bundle/indent-blankline.nvim/doc/indent_blankline.txt b/bundle/indent-blankline.nvim/doc/indent_blankline.txt index a0e884bb8..8838df6fd 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.11.0 +Version: 2.15.0 ============================================================================== CONTENTS *indent-blankline* @@ -149,6 +149,18 @@ g:indent_blankline_char *g:indent_blankline_char* let g:indent_blankline_char = '|' +------------------------------------------------------------------------------ +g:indent_blankline_char_blankline *g:indent_blankline_char_blankline* + + Specifies the character to be used as indent line for blanklines. + Not used if |g:indent_blankline_char_list_blankline| is not empty. + + Default: '' ~ + + Example: > + + let g:indent_blankline_char_blankline = '┆' + ------------------------------------------------------------------------------ g:indent_blankline_char_list *g:indent_blankline_char_list* @@ -164,6 +176,19 @@ g:indent_blankline_char_list *g:indent_blankline_char_list* let g:indent_blankline_char_list = ['|', '¦', '┆', '┊'] +------------------------------------------------------------------------------ +g:indent_blankline_char_list_blankline *g:indent_blankline_char_list_blankline* + + Specifies a list of characters to be used as indent line for + each indentation level on blanklines. + Ignored if the value is an empty list. + + Default: [] ~ + + Example: > + + let g:indent_blankline_char_list_blankline = ['|', '¦', '┆', '┊'] + ------------------------------------------------------------------------------ g:indent_blankline_char_highlight_list *g:indent_blankline_char_highlight_list* @@ -359,7 +384,13 @@ g:indent_blankline_filetype_exclude *g:indent_blankline_filetype_exclude* Also set by |g:indentLine_fileTypeExclude| - Default: [] ~ + Default: [ ~ + "lspinfo", ~ + "packer", ~ + "checkhealth", ~ + "help", ~ + "", ~ + ] ~ Example: > @@ -475,6 +506,18 @@ g:indent_blankline_context_char *g:indent_blankline_context_char* let g:indent_blankline_context_char = '┃' +------------------------------------------------------------------------------ +g:indent_blankline_context_char_blankline *g:indent_blankline_context_char_blankline* + + Equivalent of |g:indent_blankline_char_blankline| for + |g:indent_blankline_context_char|. + + Default: '' ~ + + Example: > + + let g:indent_blankline_context_char_blankline = '┆' + ------------------------------------------------------------------------------ g:indent_blankline_context_char_list *g:indent_blankline_context_char_list* @@ -487,6 +530,18 @@ g:indent_blankline_context_char_list *g:indent_blankline_context_char_list* let g:indent_blankline_context_char_list = ['┃', '║', '╬', '█'] +------------------------------------------------------------------------------ +g:indent_blankline_context_char_list_blankline *g:indent_blankline_context_char_list_blankline* + + Equivalent of |g:indent_blankline_char_list_blankline| for + |g:indent_blankline_context_char_blankline|. + + Default: [] ~ + + Example: > + + let g:indent_blankline_context_char_list_blankline = ['┃', '║', '╬', '█'] + ------------------------------------------------------------------------------ g:indent_blankline_context_highlight_list *g:indent_blankline_context_highlight_list* @@ -514,7 +569,24 @@ g:indent_blankline_context_patterns *g:indent_blankline_context_patterns* Only used when |g:indent_blankline_show_current_context| is active - Default: ['class', 'function', 'method'] ~ + Default: [ ~ + "class", ~ + "^func", ~ + "method", ~ + "^if", ~ + "while", ~ + "for", ~ + "with", ~ + "try", ~ + "except", ~ + "arguments", ~ + "argument_list", ~ + "object", ~ + "dictionary", ~ + "element", ~ + "table", ~ + "tuple", ~ + ] ~ Example: > @@ -637,6 +709,26 @@ g:indent_blankline_debug *g:indent_blankline_debug* ============================================================================== 6. CHANGELOG *indent-blankline-changelog* +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| diff --git a/bundle/indent-blankline.nvim/lua/indent_blankline/commands.lua b/bundle/indent-blankline.nvim/lua/indent_blankline/commands.lua index 5d7781f2e..263d3325f 100644 --- a/bundle/indent-blankline.nvim/lua/indent_blankline/commands.lua +++ b/bundle/indent-blankline.nvim/lua/indent_blankline/commands.lua @@ -4,12 +4,12 @@ M.refresh = function(bang, scroll) scroll = scroll or false if bang then local win = vim.api.nvim_get_current_win() - vim.cmd(string.format([[noautocmd windo call indent_blankline#Refresh(v:%s)]], tostring(scroll))) + vim.cmd(string.format([[noautocmd windo lua require("indent_blankline").refresh(%s)]], tostring(scroll))) if vim.api.nvim_win_is_valid(win) then vim.api.nvim_set_current_win(win) end else - vim.cmd(string.format([[call indent_blankline#Refresh(v:%s)]], tostring(scroll))) + require("indent_blankline").refresh(scroll) end end @@ -17,11 +17,11 @@ M.enable = function(bang) if bang then vim.g.indent_blankline_enabled = true local win = vim.api.nvim_get_current_win() - vim.cmd [[noautocmd windo call indent_blankline#Refresh()]] + vim.cmd [[noautocmd windo lua require("indent_blankline").refresh(false)]] vim.api.nvim_set_current_win(win) else vim.b.indent_blankline_enabled = true - vim.cmd [[call indent_blankline#Refresh()]] + require("indent_blankline").refresh(false) end end diff --git a/bundle/indent-blankline.nvim/lua/indent_blankline/init.lua b/bundle/indent-blankline.nvim/lua/indent_blankline/init.lua index 0ff89f01d..7a7819390 100644 --- a/bundle/indent-blankline.nvim/lua/indent_blankline/init.lua +++ b/bundle/indent-blankline.nvim/lua/indent_blankline/init.lua @@ -24,17 +24,31 @@ M.setup = function(options) local o = utils.first_not_nil 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_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 @@ -65,7 +79,8 @@ M.setup = function(options) vim.g.indent_blankline_filetype_exclude = o( options.filetype_exclude, vim.g.indent_blankline_filetype_exclude, - vim.g.indentLine_fileTypeExclude + vim.g.indentLine_fileTypeExclude, + { "lspinfo", "packer", "checkhealth", "help", "" } ) vim.g.indent_blankline_bufname_exclude = o( options.bufname_exclude, @@ -120,11 +135,24 @@ M.setup = function(options) 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", "function", "method" } - ) + vim.g.indent_blankline_context_patterns = o(options.context_patterns, vim.g.indent_blankline_context_patterns, { + "class", + "^func", + "method", + "^if", + "while", + "for", + "with", + "try", + "except", + "arguments", + "argument_list", + "object", + "dictionary", + "element", + "table", + "tuple", + }) vim.g.indent_blankline_context_pattern_highlight = o( options.context_pattern_highlight, vim.g.indent_blankline_context_pattern_highlight @@ -166,7 +194,7 @@ local refresh = function(scroll) vim.opt.list:get(), vim.bo.filetype, v "indent_blankline_filetype" or {}, - v "indent_blankline_filetype_exclude" or {}, + v "indent_blankline_filetype_exclude", vim.bo.buftype, v "indent_blankline_buftype_exclude" or {}, v "indent_blankline_bufname_exclude" or {}, @@ -237,15 +265,19 @@ local refresh = function(scroll) local lines = vim.api.nvim_buf_get_lines(bufnr, offset, range, false) local char = v "indent_blankline_char" + local char_blankline = v "indent_blankline_char_blankline" local char_list = v "indent_blankline_char_list" or {} + local char_list_blankline = v "indent_blankline_char_list_blankline" or {} local context_char = v "indent_blankline_context_char" + local context_char_blankline = v "indent_blankline_context_char_blankline" local context_char_list = v "indent_blankline_context_char_list" or {} + local context_char_list_blankline = v "indent_blankline_context_char_list_blankline" or {} local char_highlight_list = v "indent_blankline_char_highlight_list" or {} 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 list_chars = {} + local list_chars local no_tab_character = false -- No need to check for disable_with_nolist as this part would never be executed if "true" && nolist if vim.opt.list:get() then @@ -317,11 +349,23 @@ local refresh = function(scroll) local virtual_text = {} 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 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, + context_char_list_blankline, + context_char_list + ) for i = 1, math.min(math.max(indent, 0), local_max_indent_level) do local space_count = shiftwidth local context = context_active and context_indent == i - local show_indent_char = (i ~= 1 or first_indent) and char ~= "" - local show_context_indent_char = context and (i ~= 1 or first_indent) and context_char ~= "" + local show_indent_char = (i ~= 1 or first_indent) and indent_char ~= "" + local show_context_indent_char = context and (i ~= 1 or first_indent) and context_indent_char ~= "" local show_end_of_line_char = i == 1 and blankline and end_of_line and list_chars["eol_char"] local show_indent_or_eol_char = show_indent_char or show_context_indent_char or show_end_of_line_char if show_indent_or_eol_char then @@ -336,11 +380,15 @@ local refresh = function(scroll) utils._if( context, utils.get_from_list( - context_char_list, + context_indent_char_list, i - utils._if(not first_indent, 1, 0), - context_char + context_indent_char ), - utils.get_from_list(char_list, i - utils._if(not first_indent, 1, 0), char) + utils.get_from_list( + indent_char_list, + i - utils._if(not first_indent, 1, 0), + indent_char + ) ) ), utils._if( @@ -393,7 +441,10 @@ local refresh = function(scroll) local extra_context_active = context_active and context_indent == index if - (char ~= "" or (extra_context_active and context_char ~= "")) + ( + (indent_char ~= "" or #indent_char_list > 0) + or (extra_context_active and (context_indent_char ~= "" or #context_char_list > 0)) + ) and ((blankline or extra) and trail_indent) and (first_indent or #virtual_text > 0) and current_left_offset < 1 @@ -402,8 +453,12 @@ local refresh = function(scroll) table.insert(virtual_text, { utils._if( extra_context_active, - utils.get_from_list(context_char_list, index - utils._if(not first_indent, 1, 0), context_char), - utils.get_from_list(char_list, index - utils._if(not first_indent, 1, 0), char) + utils.get_from_list( + context_indent_char_list, + index - utils._if(not first_indent, 1, 0), + context_indent_char + ), + utils.get_from_list(indent_char_list, index - utils._if(not first_indent, 1, 0), indent_char) ), utils._if( extra_context_active, @@ -487,7 +542,7 @@ local refresh = function(scroll) vim.g.indent_blankline_namespace, i - 1 + offset, 0, - { virt_text = virtual_text, virt_text_pos = "overlay", hl_mode = "combine" } + { virt_text = virtual_text, virt_text_pos = "overlay", hl_mode = "combine", priority = 1 } ) end)() return async:close() @@ -584,7 +639,7 @@ local refresh = function(scroll) vim.g.indent_blankline_namespace, i - 1 + offset, 0, - { virt_text = virtual_text, virt_text_pos = "overlay", hl_mode = "combine" } + { virt_text = virtual_text, virt_text_pos = "overlay", hl_mode = "combine", priority = 1 } ) 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 cff1088be..db230b5d6 100644 --- a/bundle/indent-blankline.nvim/lua/indent_blankline/utils.lua +++ b/bundle/indent-blankline.nvim/lua/indent_blankline/utils.lua @@ -70,9 +70,14 @@ M.is_indent_blankline_enabled = M.memo( return false end + local undotted_filetypes = vim.split(filetype, ".", { plain = true }) + table.insert(undotted_filetypes, filetype) + for _, ft in ipairs(filetype_exclude) do - if ft == filetype then - return false + for _, undotted_filetype in ipairs(undotted_filetypes) do + if undotted_filetype == ft then + return false + end end end @@ -188,7 +193,6 @@ M.get_current_context = function(type_patterns) if node_start ~= node_end then return true, node_start + 1, node_end + 1, rgx end - node_start, node_end = nil, nil end end cursor_node = cursor_node:parent() @@ -210,13 +214,15 @@ M.reset_highlights = function() vim.fn.synIDattr(label_highlight, "fg", "cterm"), } - for highlight_name, highlight in pairs { - IndentBlanklineChar = whitespace_fg, - IndentBlanklineSpaceChar = whitespace_fg, - IndentBlanklineSpaceCharBlankline = whitespace_fg, - IndentBlanklineContextChar = label_fg, - IndentBlanklineContextStart = label_fg, - } do + for highlight_name, highlight in + pairs { + IndentBlanklineChar = whitespace_fg, + IndentBlanklineSpaceChar = whitespace_fg, + IndentBlanklineSpaceCharBlankline = whitespace_fg, + IndentBlanklineContextChar = label_fg, + IndentBlanklineContextStart = label_fg, + } + do local current_highlight = vim.fn.synIDtrans(vim.fn.hlID(highlight_name)) if vim.fn.synIDattr(current_highlight, "fg") == "" @@ -246,7 +252,7 @@ M.reset_highlights = function() end M.first_not_nil = function(...) - for _, value in pairs { ... } do + for _, value in pairs { ... } do -- luacheck: ignore return value end end