patch 9.1.1404: wrong link to Chapter 2 in new-tutor

Problem:  wrong link to Chapter 2 in vim-01-beginner.tutor
Solution: Fix the link to Chapter 2, add test for links in tutor files
          (Phạm Bình An)

In order to write the test, I expose the function `s:GlobTutorials` as
`tutor#GlobTutorials` and make it also accept a `locale` argument.

closes: #17356

Signed-off-by: Phạm Bình An <111893501+brianhuster@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Phạm Bình An
2025-05-22 22:53:28 +02:00
committed by Christian Brabandt
parent f4b2fce71c
commit e8302da74a
4 changed files with 27 additions and 5 deletions

View File

@ -157,12 +157,14 @@ function! s:Sort(a, b)
return retval return retval
endfunction endfunction
function! s:GlobTutorials(name) " returns a list of all tutor files matching the given name
function! tutor#GlobTutorials(name, locale)
let locale = a:locale
" search for tutorials: " search for tutorials:
" 1. non-localized " 1. non-localized
let l:tutors = s:GlobPath(&rtp, 'tutor/'.a:name.'.tutor') let l:tutors = s:GlobPath(&rtp, 'tutor/'.a:name.'.tutor')
" 2. localized for current locale " 2. localized for current locale
let l:locale_tutors = s:GlobPath(&rtp, 'tutor/'.s:Locale()[0].'/'.a:name.'.tutor') let l:locale_tutors = s:GlobPath(&rtp, 'tutor/'.locale.'/'.a:name.'.tutor')
" 3. fallback to 'en' " 3. fallback to 'en'
if len(l:locale_tutors) == 0 if len(l:locale_tutors) == 0
let l:locale_tutors = s:GlobPath(&rtp, 'tutor/en/'.a:name.'.tutor') let l:locale_tutors = s:GlobPath(&rtp, 'tutor/en/'.a:name.'.tutor')
@ -187,7 +189,7 @@ function! tutor#TutorCmd(tutor_name)
let l:tutor_name = fnamemodify(l:tutor_name, ':r') let l:tutor_name = fnamemodify(l:tutor_name, ':r')
endif endif
let l:tutors = s:GlobTutorials(l:tutor_name) let l:tutors = tutor#GlobTutorials(l:tutor_name, s:Locale()[0])
if len(l:tutors) == 0 if len(l:tutors) == 0
echom "No tutorial with that name found" echom "No tutorial with that name found"
@ -214,7 +216,7 @@ function! tutor#TutorCmd(tutor_name)
endfunction endfunction
function! tutor#TutorCmdComplete(lead,line,pos) function! tutor#TutorCmdComplete(lead,line,pos)
let l:tutors = s:GlobTutorials('*') let l:tutors = tutor#GlobTutorials('*', s:Locale()[0])
let l:names = uniq(sort(map(l:tutors, 'fnamemodify(v:val, ":t:r")'), 's:Sort')) let l:names = uniq(sort(map(l:tutors, 'fnamemodify(v:val, ":t:r")'), 's:Sort'))
return join(l:names, "\n") return join(l:names, "\n")
endfunction endfunction

View File

@ -970,7 +970,7 @@ NOTE: Completion works for many commands. It is especially useful for
# CONCLUSION # CONCLUSION
This concludes Chapter 1 of the Vim Tutor. Consider continuing with This concludes Chapter 1 of the Vim Tutor. Consider continuing with
[Chapter 2](@tutor:tutor:vim-02-beginner). [Chapter 2](@tutor:vim-02-beginner).
This was intended to give a brief overview of the Vim editor, just enough to This was intended to give a brief overview of the Vim editor, just enough to
allow you to use the editor fairly easily. It is far from complete as Vim has allow you to use the editor fairly easily. It is far from complete as Vim has

View File

@ -14,3 +14,21 @@ func Test_auto_enable_interactive()
call assert_true(empty(&buftype)) call assert_true(empty(&buftype))
call assert_match('tutor#EnableInteractive', b:undo_ftplugin) call assert_match('tutor#EnableInteractive', b:undo_ftplugin)
endfunc endfunc
func Test_tutor_link()
let tutor_files = globpath($VIMRUNTIME, 'tutor/**/*.tutor', 0, 1)
let pattern = '\[.\{-}@tutor:\zs[^)\]]*\ze[)\]]'
for tutor_file in tutor_files
let lang = fnamemodify(tutor_file, ':h:t')
if lang == 'tutor'
let lang = 'en'
endif
let text = readfile(tutor_file)
let links = matchstrlist(text, pattern)->map({_, v -> v.text})
for link in links
call assert_true(tutor#GlobTutorials(link, lang)->len() > 0)
endfor
endfor
endfunc

View File

@ -709,6 +709,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1404,
/**/ /**/
1403, 1403,
/**/ /**/