1
0
forked from aniani/vim
Files
vim/src/testdir/test_codestyle.vim

167 lines
4.6 KiB
VimL
Raw Normal View History

" Test for checking the source code style.
def s:ReportError(fname: string, lnum: number, msg: string)
if lnum > 0
assert_report(fname .. ' line ' .. lnum .. ': ' .. msg)
endif
enddef
def s:PerformCheck(fname: string, pattern: string, msg: string, skip: string)
var prev_lnum = 1
var lnum = 1
while (lnum > 0)
cursor(lnum, 1)
lnum = search(pattern, 'W', 0, 0, skip)
if (prev_lnum == lnum)
break
endif
prev_lnum = lnum
if (lnum > 0)
ReportError(fname, lnum, msg)
endif
endwhile
enddef
def Test_source_files()
for fname in glob('../*.[ch]', 0, 1) + ['../xxd/xxd.c']
bwipe!
g:ignoreSwapExists = 'e'
exe 'edit ' .. fname
patch 9.1.0606: tests: generated files may cause failure in test_codestyle Problem: tests: generated files may cause failure in test_codestyle Solution: Exclude OLE-related generated files from style checks. (Ken Takata) Some OLE-related auto-generated files may contain space errors: https://ci.appveyor.com/project/chrisbra/vim-win32-installer/builds/50248542/job/w45ve9yd6qmmws8t#L11475 ``` From test_codestyle.vim: Found errors in Test_source_files(): command line..script C:/projects/vim-win32-installer/vim/src/testdir/runtest.vim[607]..function RunTheTest[57]..Test_source_files[8]..<SNR>8_PerformCheck[11]..<SNR>8_ReportError line 2: ../dlldata.c line 2: trailing white space command line..script C:/projects/vim-win32-installer/vim/src/testdir/runtest.vim[607]..function RunTheTest[57]..Test_source_files[8]..<SNR>8_PerformCheck[11]..<SNR>8_ReportError line 2: ../iid_ole.c line 12: trailing white space command line..script C:/projects/vim-win32-installer/vim/src/testdir/runtest.vim[607]..function RunTheTest[57]..Test_source_files[6]..<SNR>8_PerformCheck[11]..<SNR>8_ReportError line 2: ../if_ole.h line 60: space before Tab command line..script C:/projects/vim-win32-installer/vim/src/testdir/runtest.vim[607]..function RunTheTest[57]..Test_source_files[8]..<SNR>8_PerformCheck[11]..<SNR>8_ReportError line 2: ../if_ole.h line 10: trailing white space ``` Exclude them from style checking. closes: #15309 Signed-off-by: Ken Takata <kentkt@csc.jp> Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-07-20 11:55:13 +02:00
# Some files are generated files and may contain space errors.
if fname =~ 'dlldata.c'
|| fname =~ 'if_ole.h'
|| fname =~ 'iid_ole.c'
continue
endif
PerformCheck(fname, ' \t', 'space before Tab', '')
PerformCheck(fname, '\s$', 'trailing white space', '')
# some files don't stick to the Vim style rules
if fname =~ 'iscygpty.c'
continue
endif
var skip = 'getline(".") =~ "condition) {" || getline(".") =~ "vimglob_func" || getline(".") =~ "{\"" || getline(".") =~ "{\\d" || getline(".") =~ "{{{"'
PerformCheck(fname, ')\s*{', 'curly after closing paren', skip)
# Examples in comments use double quotes.
skip = "getline('.') =~ '\"'"
PerformCheck(fname, '}\s*else', 'curly before "else"', skip)
PerformCheck(fname, 'else\s*{', 'curly after "else"', skip)
PerformCheck(fname, '\<\(if\|while\|for\)(', 'missing white space after "if"/"while"/"for"', skip)
endfor
bwipe!
enddef
def Test_test_files()
for fname in glob('*.vim', 0, 1)
g:ignoreSwapExists = 'e'
exe 'edit ' .. fname
# some files intentionally have misplaced white space
if fname =~ 'test_cindent.vim' || fname =~ 'test_join.vim'
continue
endif
# skip files that are known to have a space before a tab
if fname !~ 'test_comments.vim'
&& fname !~ 'test_listchars.vim'
&& fname !~ 'test_visual.vim'
cursor(1, 1)
patch 9.1.0589: vi: d{motion} and cw work differently than expected Problem: vi: d{motion} and cw command work differently than expected Solution: add new cpo-z flag to make the behaviour configurable There are two special vi compatible behaviours (or should I say bugs?): 1): cw behaves differently than dw. That is, because cw is special cased by Vim and is effectively aliased to ce. POSIX behaviour is documented here: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/vi.html#tag_20_152_13_81 2): d{motion} may make the whole delete operation linewise, if the start and end of the motion are on different lines and there are only blanks before the start and after the end of the motion. Did not find a related POSIX link that requires this behaviour. Both behaviours can be considered inconsistent, but we cannot easily change it, because it would be a backward incompatible change and also incompatible to how classic vi behaved. So let's add the new cpo flag "z", which when not included fixes both behaviours and make them more consistent to what users would expect. This has been requested several times: https://groups.google.com/d/msg/vim_use/aaBqT6ECkA4/ALf4odKzEDgJ https://groups.google.com/d/msg/vim_dev/Dpn3xtUF16I/T6JcOPKN6usJ http://www.reddit.com/r/vim/comments/26nut8/why_does_cw_work_like_ce/ https://groups.google.com/d/msg/vim_use/vunNWLFWfQg/MmJh_ZGaAgAJ https://github.com/vim/vim/issues/4390 So in summary, if you want to have the w motion work more consistent, remove the 'z' from the cpo settings. related: #4390 closes: #15263 Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-07-15 20:51:11 +02:00
var skip = 'getline(".") =~ "codestyle: ignore"'
var lnum = search(fname =~ "test_regexp_latin" ? '[^á] \t' : ' \t', 'W', 0, 0, skip)
ReportError('testdir/' .. fname, lnum, 'space before Tab')
endif
# skip files that are known to have trailing white space
if fname !~ 'test_cmdline.vim'
&& fname !~ 'test_let.vim'
&& fname !~ 'test_tagjump.vim'
&& fname !~ 'test_vim9_cmd.vim'
cursor(1, 1)
var lnum = search(
fname =~ 'test_vim9_assign.vim' ? '[^=]\s$'
: fname =~ 'test_vim9_class.vim' ? '[^)]\s$'
: fname =~ 'test_vim9_script.vim' ? '[^,:3]\s$'
: fname =~ 'test_visual.vim' ? '[^/]\s$'
: '[^\\]\s$')
ReportError('testdir/' .. fname, lnum, 'trailing white space')
endif
endfor
bwipe!
enddef
def Test_help_files()
var lnum: number
set nowrapscan
for fpath in glob('../../runtime/doc/*.txt', 0, 1)
g:ignoreSwapExists = 'e'
exe 'edit ' .. fpath
var fname = fnamemodify(fpath, ":t")
# todo.txt is for developers, it's not need a strictly check
# version*.txt is a history and large size, so it's not checked
if fname == 'todo.txt' || fname =~ 'version.*\.txt'
continue
endif
# Check for mixed tabs and spaces
cursor(1, 1)
while 1
lnum = search('[^/] \t')
if fname == 'visual.txt' && getline(lnum) =~ "STRING \tjkl"
|| fname == 'usr_27.txt' && getline(lnum) =~ "\[^\? \t\]"
continue
endif
ReportError(fpath, lnum, 'space before tab')
if lnum == 0
break
endif
endwhile
# Check for unnecessary whitespace at the end of a line
cursor(1, 1)
while 1
lnum = search('[^/~\\]\s$')
# skip line that are known to have trailing white space
if fname == 'map.txt' && getline(lnum) =~ "unmap @@ $"
|| fname == 'usr_12.txt' && getline(lnum) =~ "^\t/ \t$"
|| fname == 'usr_41.txt' && getline(lnum) =~ "map <F4> o#include $"
|| fname == 'change.txt' && getline(lnum) =~ "foobar bla $"
continue
endif
ReportError('testdir' .. fpath, lnum, 'trailing white space')
if lnum == 0
break
endif
endwhile
# # TODO: Check for line over 80 columns
# cursor(1, 1)
# while 1
# lnum = search('\%>80v.*$')
# ReportError(fpath, lnum, 'line over 80 columns')
# if lnum == 0
# break
# endif
# endwhile
endfor
set wrapscan&vim
bwipe!
enddef
patch 9.1.0589: vi: d{motion} and cw work differently than expected Problem: vi: d{motion} and cw command work differently than expected Solution: add new cpo-z flag to make the behaviour configurable There are two special vi compatible behaviours (or should I say bugs?): 1): cw behaves differently than dw. That is, because cw is special cased by Vim and is effectively aliased to ce. POSIX behaviour is documented here: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/vi.html#tag_20_152_13_81 2): d{motion} may make the whole delete operation linewise, if the start and end of the motion are on different lines and there are only blanks before the start and after the end of the motion. Did not find a related POSIX link that requires this behaviour. Both behaviours can be considered inconsistent, but we cannot easily change it, because it would be a backward incompatible change and also incompatible to how classic vi behaved. So let's add the new cpo flag "z", which when not included fixes both behaviours and make them more consistent to what users would expect. This has been requested several times: https://groups.google.com/d/msg/vim_use/aaBqT6ECkA4/ALf4odKzEDgJ https://groups.google.com/d/msg/vim_dev/Dpn3xtUF16I/T6JcOPKN6usJ http://www.reddit.com/r/vim/comments/26nut8/why_does_cw_work_like_ce/ https://groups.google.com/d/msg/vim_use/vunNWLFWfQg/MmJh_ZGaAgAJ https://github.com/vim/vim/issues/4390 So in summary, if you want to have the w motion work more consistent, remove the 'z' from the cpo settings. related: #4390 closes: #15263 Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-07-15 20:51:11 +02:00
" vim: shiftwidth=2 sts=2 expandtab nofoldenable