blob: 359410d2d022779a85c25c65c001b416fdc3d0ea [file] [log] [blame]
Bram Moolenaarebfec1c2023-01-22 21:14:53 +00001" Test for checking the source code style.
2
Bram Moolenaarabc81302023-06-04 16:55:27 +01003def s:ReportError(fname: string, lnum: number, msg: string)
4 if lnum > 0
5 assert_report(fname .. ' line ' .. lnum .. ': ' .. msg)
6 endif
7enddef
8
Christian Brabandtb147d312023-09-01 17:58:35 +01009def s:PerformCheck(fname: string, pattern: string, msg: string, skip: string)
10 var lnum = 1
11 while (lnum > 0)
12 cursor(lnum, 1)
13 lnum = search(pattern, 'W', 0, 0, skip)
14 ReportError(fname, lnum, msg)
15 if (lnum > 0)
16 lnum += 1
17 endif
18 endwhile
19enddef
20
Bram Moolenaarebfec1c2023-01-22 21:14:53 +000021def Test_source_files()
Christian Brabandtb147d312023-09-01 17:58:35 +010022 for fname in glob('../*.[ch]', 0, 1) + ['../xxd/xxd.c']
Bram Moolenaarbf630112023-05-19 21:41:02 +010023 bwipe!
Bram Moolenaarabc81302023-06-04 16:55:27 +010024 g:ignoreSwapExists = 'e'
Bram Moolenaarebfec1c2023-01-22 21:14:53 +000025 exe 'edit ' .. fname
26
Christian Brabandtb147d312023-09-01 17:58:35 +010027 PerformCheck(fname, ' \t', 'space before Tab', '')
Bram Moolenaarebfec1c2023-01-22 21:14:53 +000028
Christian Brabandtb147d312023-09-01 17:58:35 +010029 PerformCheck(fname, '\s$', 'trailing white space', '')
Bram Moolenaarebfec1c2023-01-22 21:14:53 +000030
31 # some files don't stick to the Vim style rules
32 if fname =~ 'iscygpty.c'
33 continue
34 endif
35
Bram Moolenaarebfec1c2023-01-22 21:14:53 +000036 var skip = 'getline(".") =~ "condition) {" || getline(".") =~ "vimglob_func" || getline(".") =~ "{\"" || getline(".") =~ "{\\d" || getline(".") =~ "{{{"'
Christian Brabandtb147d312023-09-01 17:58:35 +010037 PerformCheck(fname, ')\s*{', 'curly after closing paren', skip)
Bram Moolenaarebfec1c2023-01-22 21:14:53 +000038
Bram Moolenaarebfec1c2023-01-22 21:14:53 +000039 # Examples in comments use double quotes.
40 skip = "getline('.') =~ '\"'"
Bram Moolenaarbf630112023-05-19 21:41:02 +010041
Christian Brabandtb147d312023-09-01 17:58:35 +010042 PerformCheck(fname, '}\s*else', 'curly before "else"', skip)
Bram Moolenaarebfec1c2023-01-22 21:14:53 +000043
Christian Brabandtb147d312023-09-01 17:58:35 +010044 PerformCheck(fname, 'else\s*{', 'curly after "else"', skip)
Bram Moolenaarc9471b12023-05-09 15:00:00 +010045
Christian Brabandtb147d312023-09-01 17:58:35 +010046 PerformCheck(fname, '\<\(if\|while\|for\)(', 'missing white space after "if"/"while"/"for"', skip)
Bram Moolenaarebfec1c2023-01-22 21:14:53 +000047 endfor
48
49 bwipe!
50enddef
51
Bram Moolenaar94722c52023-01-28 19:19:03 +000052def Test_test_files()
53 for fname in glob('*.vim', 0, 1)
Bram Moolenaarabc81302023-06-04 16:55:27 +010054 g:ignoreSwapExists = 'e'
Bram Moolenaar94722c52023-01-28 19:19:03 +000055 exe 'edit ' .. fname
56
57 # some files intentionally have misplaced white space
58 if fname =~ 'test_cindent.vim' || fname =~ 'test_join.vim'
59 continue
60 endif
61
62 # skip files that are known to have a space before a tab
63 if fname !~ 'test_comments.vim'
64 && fname !~ 'test_listchars.vim'
65 && fname !~ 'test_visual.vim'
66 cursor(1, 1)
67 var lnum = search(fname =~ "test_regexp_latin" ? '[^รก] \t' : ' \t')
Bram Moolenaarabc81302023-06-04 16:55:27 +010068 ReportError('testdir/' .. fname, lnum, 'space before Tab')
Bram Moolenaar94722c52023-01-28 19:19:03 +000069 endif
70
71 # skip files that are known to have trailing white space
72 if fname !~ 'test_cmdline.vim'
73 && fname !~ 'test_let.vim'
74 && fname !~ 'test_tagjump.vim'
75 && fname !~ 'test_vim9_cmd.vim'
76 cursor(1, 1)
77 var lnum = search(
78 fname =~ 'test_vim9_assign.vim' ? '[^=]\s$'
79 : fname =~ 'test_vim9_class.vim' ? '[^)]\s$'
80 : fname =~ 'test_vim9_script.vim' ? '[^,:3]\s$'
81 : fname =~ 'test_visual.vim' ? '[^/]\s$'
82 : '[^\\]\s$')
Bram Moolenaarabc81302023-06-04 16:55:27 +010083 ReportError('testdir/' .. fname, lnum, 'trailing white space')
Bram Moolenaar94722c52023-01-28 19:19:03 +000084 endif
85 endfor
86
87 bwipe!
88enddef
89
h-eastd9509842023-02-21 13:33:17 +000090def Test_help_files()
91 var lnum: number
92 set nowrapscan
93
94 for fpath in glob('../../runtime/doc/*.txt', 0, 1)
Bram Moolenaarabc81302023-06-04 16:55:27 +010095 g:ignoreSwapExists = 'e'
h-eastd9509842023-02-21 13:33:17 +000096 exe 'edit ' .. fpath
97
98 var fname = fnamemodify(fpath, ":t")
99
100 # todo.txt is for developers, it's not need a strictly check
101 # version*.txt is a history and large size, so it's not checked
102 if fname == 'todo.txt' || fname =~ 'version.*\.txt'
103 continue
104 endif
105
106 # Check for mixed tabs and spaces
107 cursor(1, 1)
108 while 1
109 lnum = search('[^/] \t')
110 if fname == 'visual.txt' && getline(lnum) =~ "STRING \tjkl"
111 || fname == 'usr_27.txt' && getline(lnum) =~ "\[^\? \t\]"
112 continue
113 endif
Bram Moolenaarabc81302023-06-04 16:55:27 +0100114 ReportError(fpath, lnum, 'space before tab')
h-eastd9509842023-02-21 13:33:17 +0000115 if lnum == 0
116 break
117 endif
118 endwhile
119
120 # Check for unnecessary whitespace at the end of a line
121 cursor(1, 1)
122 while 1
123 lnum = search('[^/~\\]\s$')
124 # skip line that are known to have trailing white space
125 if fname == 'map.txt' && getline(lnum) =~ "unmap @@ $"
126 || fname == 'usr_12.txt' && getline(lnum) =~ "^\t/ \t$"
127 || fname == 'usr_41.txt' && getline(lnum) =~ "map <F4> o#include $"
128 || fname == 'change.txt' && getline(lnum) =~ "foobar bla $"
129 continue
130 endif
Bram Moolenaarabc81302023-06-04 16:55:27 +0100131 ReportError('testdir' .. fpath, lnum, 'trailing white space')
h-eastd9509842023-02-21 13:33:17 +0000132 if lnum == 0
133 break
134 endif
135 endwhile
136
Bram Moolenaarabc81302023-06-04 16:55:27 +0100137# # TODO: Check for line over 80 columns
h-eastd9509842023-02-21 13:33:17 +0000138# cursor(1, 1)
139# while 1
140# lnum = search('\%>80v.*$')
Bram Moolenaarabc81302023-06-04 16:55:27 +0100141# ReportError(fpath, lnum, 'line over 80 columns')
h-eastd9509842023-02-21 13:33:17 +0000142# if lnum == 0
143# break
144# endif
145# endwhile
146
147 endfor
148
149 set wrapscan&vim
150 bwipe!
151enddef
152
Bram Moolenaarebfec1c2023-01-22 21:14:53 +0000153
154" vim: shiftwidth=2 sts=2 expandtab