1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
Before:
Save g:ale_warn_about_trailing_whitespace
let g:ale_warn_about_trailing_whitespace = 1
runtime ale_linters/python/pydocstyle.vim
After:
Restore
call ale#linter#Reset()
silent file something_else.py
" File sample.py
" # sample.py file
"
" def main():
" """
" This is a multi-line description that should produce multiple errors to be
" tested by the handler
" """
" return False
"
"
" if __name__ == '__main__':
" main()
"
" The command to generate the handler input is:
"
" $ python -m pydocstyle --verbose --source --explain sample.py
" [...]
" $
Execute(Basic pydocstyle warnings should be handled):
AssertEqual
\ [
\ {
\ 'lnum': 1,
\ 'col': 1,
\ 'text': 'Missing docstring in public module',
\ 'code': 'D100',
\ 'type': 'W',
\ },
\ {
\ 'lnum': 4,
\ 'col': 1,
\ 'text': '1 blank line required between summary line and description (found 0)',
\ 'code': 'D205',
\ 'type': 'W',
\ },
\ {
\ 'lnum': 4,
\ 'col': 1,
\ 'text': 'First line should end with a period (not ''e'')',
\ 'code': 'D400',
\ 'type': 'W',
\ },
\ {
\ 'lnum': 4,
\ 'col': 1,
\ 'text': 'First line should be in imperative mood; try rephrasing (found ''This'')',
\ 'code': 'D401',
\ 'type': 'W',
\ },
\ ],
\ ale_linters#python#pydocstyle#Handle(bufnr(''), [
\ 'Checking file ' . fnamemodify(bufname(bufnr('')), ':p') . '.',
\ './mydir/myfile.py:1 at module level:',
\ ' D100: Missing docstring in public module',
\ '',
\ ' All modules should normally have docstrings. [...] all functions and',
\ ' classes exported by a module should also have docstrings. Public',
\ ' methods (including the __init__ constructor) should also have',
\ ' docstrings.',
\ ' Note: Public (exported) definitions are either those with names listed',
\ ' in __all__ variable (if present), or those that do not start',
\ ' with a single underscore.',
\ '',
\ ' 1: # 2: 3: s 4: a 5: m 6: p 7: l ...',
\ '',
\ '',
\ 'C:\mydir\myfile.py:4 in public function `main`:',
\ ' D205: 1 blank line required between summary line and description (found 0)',
\ '',
\ ' Multi-line docstrings consist of a summary line just like a one-line',
\ ' docstring, followed by a blank line, followed by a more elaborate',
\ ' description. The summary line may be used by automatic indexing tools;',
\ ' it is important that it fits on one line and is separated from the',
\ ' rest of the docstring by a blank line.',
\ '',
\ ' 3: d 4: e 5: f 6: 7: m 8: a 9: i ...',
\ '',
\ '',
\ 'myfile.py:4 in public function `main`:',
\ ' D400: First line should end with a period (not ''e'')',
\ '',
\ ' The [first line of a] docstring is a phrase ending in a period.',
\ '',
\ ' 3: d 4: e 5: f 6: 7: m 8: a 9: i ...',
\ '',
\ '',
\ ale#Escape(fnamemodify(bufname(bufnr('')), ':t')) . ':4 in public function `main`:',
\ ' D401: First line should be in imperative mood; try rephrasing (found ''This'')',
\ '',
\ ' [Docstring] prescribes the function or method''s effect as a command:',
\ ' ("Do this", "Return that"), not as a description; e.g. don''t write',
\ ' "Returns the pathname ...".',
\ '',
\ ' 3: d 4: e 5: f 6: 7: m 8: a 9: i ...',
\ ])
Execute(Handler should handle empty output):
AssertEqual
\ [],
\ ale_linters#python#pydocstyle#Handle(bufnr(''), [])
|