neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 638b3c0717219ce152cbd255cbc878aa1b34ab95
parent f2c0755828d529af101b5d0e4a1fd204fd0a7039
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Tue, 11 Mar 2025 06:13:31 +0800

vim-patch:9.1.1186: filetype: help files in git repos are not detected

Problem:  filetype: help files in git repos are not detected
Solution: detect */doc/*.txt files as help if they end with a help
          modeline, even if 'modeline' is off

Here's how I checked that this would still detect vim's own help files
correctly:

$ find . -type f -path '*/doc/*.txt' \
> -exec awk '{ } ENDFILE { print FILENAME ":" $0; }' '{}' + |
> grep -v 'vim:.*\<\(ft\|filetype\)=help\>'
./src/libvterm/doc/seqs.txt: 23    DECSM 42         = DECNRCM, national/multinational character

closes: vim/vim#16817

https://github.com/vim/vim/commit/16d6fff98ed3a9dfd34a41696b005b0c4c7800f8

Split the pattern into a Lua pattern for the first part and a Vim regex
pattern for the second part, so that if the first part doesn't match
there is no need to use the Vim regex.

Co-authored-by: David Mandelberg <david@mandelberg.org>

Diffstat:
Mruntime/lua/vim/filetype.lua | 8+++++++-
Mtest/old/testdir/test_filetype.vim | 19+++++++++++++++++--
2 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/runtime/lua/vim/filetype.lua b/runtime/lua/vim/filetype.lua @@ -2415,7 +2415,13 @@ local pattern = { ['/boot/grub/menu%.lst$'] = 'grub', -- gtkrc* and .gtkrc* ['^%.?gtkrc'] = starsetf('gtkrc'), - ['^${VIMRUNTIME}/doc/.*%.txt$'] = 'help', + ['/doc/.*%.txt$'] = function(_, bufnr) + local line = M._getline(bufnr, -1) + local ml = line:find('vim:') + if ml and M._matchregex(line:sub(ml), [[\<\(ft\|filetype\)=help\>]]) then + return 'help' + end + end, ['^hg%-editor%-.*%.txt$'] = 'hgcommit', ['%.html%.m4$'] = 'htmlm4', ['^JAM.*%.'] = starsetf('jam'), diff --git a/test/old/testdir/test_filetype.vim b/test/old/testdir/test_filetype.vim @@ -916,8 +916,6 @@ func s:GetFilenameChecks() abort \ '.zcompdump', '.zlogin', '.zlogout', '.zshenv', '.zshrc', '.zsh_history', \ '.zcompdump-file', '.zlog', '.zlog-file', '.zsh', '.zsh-file', \ 'any/etc/zprofile', 'zlog', 'zlog-file', 'zsh', 'zsh-file'], - \ - \ 'help': [$VIMRUNTIME .. '/doc/help.txt'], \ } endfunc @@ -1620,6 +1618,23 @@ func Test_haredoc_file() filetype off endfunc +func Test_help_file() + filetype on + call assert_true(mkdir('doc', 'pR')) + + call writefile(['some text', 'vim:ft=help:'], 'doc/help.txt', 'D') + split doc/help.txt + call assert_equal('help', &filetype) + bwipe! + + call writefile(['some text'], 'doc/nothelp.txt', 'D') + split doc/nothelp.txt + call assert_notequal('help', &filetype) + bwipe! + + filetype off +endfunc + func Test_hook_file() filetype on