From 713c95fcc85b251b79da41d59696112a2247a6a4 Mon Sep 17 00:00:00 2001 From: Artem Yurchenko Date: Sat, 25 Mar 2023 20:51:45 +0100 Subject: [PATCH] Fix: vet false warning on brackets in documentation (#17767) --- ...ckets_in_documentation_comment_no_warn.out | 0 ...ackets_in_documentation_comment_no_warn.vv | 9 ++++++ cmd/tools/vvet/vvet.v | 29 +++++++++++-------- 3 files changed, 26 insertions(+), 12 deletions(-) create mode 100644 cmd/tools/vvet/tests/brackets_in_documentation_comment_no_warn.out create mode 100644 cmd/tools/vvet/tests/brackets_in_documentation_comment_no_warn.vv diff --git a/cmd/tools/vvet/tests/brackets_in_documentation_comment_no_warn.out b/cmd/tools/vvet/tests/brackets_in_documentation_comment_no_warn.out new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cmd/tools/vvet/tests/brackets_in_documentation_comment_no_warn.vv b/cmd/tools/vvet/tests/brackets_in_documentation_comment_no_warn.vv new file mode 100644 index 0000000000..17577ba7d2 --- /dev/null +++ b/cmd/tools/vvet/tests/brackets_in_documentation_comment_no_warn.vv @@ -0,0 +1,9 @@ + +// normalize_vector Normalizes a vector +// +// Example: +// ```v +// vector := Vector{3, 4} +// normalize_vector(vector) // Vector{0.6, 0.8} +// ``` +pub fn normalize_vector(vector f32) {} diff --git a/cmd/tools/vvet/vvet.v b/cmd/tools/vvet/vvet.v index e11d2a6722..31fa0597b0 100644 --- a/cmd/tools/vvet/vvet.v +++ b/cmd/tools/vvet/vvet.v @@ -187,23 +187,28 @@ fn (mut vt Vet) vet_fn_documentation(lines []string, line string, lnumber int) { prev_prev_line = lines[j - 1] } prev_line := lines[j] + + if prev_line.starts_with('//') { + if prev_line.starts_with('// ${fn_name} ') { + grab = false + break + } else if prev_line.starts_with('// ${fn_name}') + && !prev_prev_line.starts_with('//') { + grab = false + clean_line := line.all_before_last('{').trim(' ') + vt.warn('The documentation for "${clean_line}" seems incomplete.', + lnumber, .doc) + break + } + + continue + } + if prev_line.contains('}') { // We've looked back to the above scope, stop here break - } else if prev_line.starts_with('// ${fn_name} ') { - grab = false - break - } else if prev_line.starts_with('// ${fn_name}') - && !prev_prev_line.starts_with('//') { - grab = false - clean_line := line.all_before_last('{').trim(' ') - vt.warn('The documentation for "${clean_line}" seems incomplete.', - lnumber, .doc) - break } else if prev_line.starts_with('[') { tags << collect_tags(prev_line) continue - } else if prev_line.starts_with('//') { // Single-line comment - continue } } if grab {