tools: handle fn attributes/comments more robustly, when `v missdoc` is run (#14774)
parent
01fdd5d07f
commit
18dfaf6164
|
@ -62,28 +62,17 @@ fn (opt &Options) collect_undocumented_functions_in_file(nfile string) []Undocum
|
|||
contents := os.read_file(file) or { panic(err) }
|
||||
lines := contents.split('\n')
|
||||
mut list := []UndocumentedFN{}
|
||||
for i, line in lines {
|
||||
if line.starts_with('pub fn') || (opt.private && (line.starts_with('fn ')
|
||||
&& !(line.starts_with('fn C.') || line.starts_with('fn main')))) {
|
||||
// println('Match: $line')
|
||||
if i > 0 && lines.len > 0 {
|
||||
mut line_above := lines[i - 1]
|
||||
if !line_above.starts_with('//') {
|
||||
mut comments := []string{}
|
||||
mut tags := []string{}
|
||||
mut grab := true
|
||||
for j := i - 1; j >= 0; j-- {
|
||||
prev_line := lines[j]
|
||||
if prev_line.contains('}') { // We've looked back to the above scope, stop here
|
||||
break
|
||||
} else if prev_line.starts_with('[') {
|
||||
tags << collect_tags(prev_line)
|
||||
continue
|
||||
} else if prev_line.starts_with('//') { // Single-line comment
|
||||
grab = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if grab {
|
||||
for i, line in lines {
|
||||
if line.starts_with('//') {
|
||||
comments << line
|
||||
} else if line.trim_space().starts_with('[') {
|
||||
tags << collect_tags(line)
|
||||
} else if line.starts_with('pub fn')
|
||||
|| (opt.private && (line.starts_with('fn ') && !(line.starts_with('fn C.')
|
||||
|| line.starts_with('fn main')))) {
|
||||
if comments.len == 0 {
|
||||
clean_line := line.all_before_last(' {')
|
||||
list << UndocumentedFN{
|
||||
line: i + 1
|
||||
|
@ -92,8 +81,11 @@ fn (opt &Options) collect_undocumented_functions_in_file(nfile string) []Undocum
|
|||
file: file
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
tags = []
|
||||
comments = []
|
||||
} else {
|
||||
tags = []
|
||||
comments = []
|
||||
}
|
||||
}
|
||||
return list
|
||||
|
|
Loading…
Reference in New Issue