vcheck-md: minor cleanup (#9229)
parent
d22ea75449
commit
0abb38472b
|
@ -18,6 +18,21 @@ const (
|
||||||
non_option_args = cmdline.only_non_options(os.args[2..])
|
non_option_args = cmdline.only_non_options(os.args[2..])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
struct CheckResult {
|
||||||
|
pub mut:
|
||||||
|
warnings int
|
||||||
|
errors int
|
||||||
|
oks int
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (v1 CheckResult) + (v2 CheckResult) CheckResult {
|
||||||
|
return CheckResult{
|
||||||
|
warnings: v1.warnings + v2.warnings
|
||||||
|
errors: v1.errors + v2.errors
|
||||||
|
oks: v1.oks + v2.oks
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
if non_option_args.len == 0 || '-help' in os.args {
|
if non_option_args.len == 0 || '-help' in os.args {
|
||||||
vhelp.show_topic('check-md')
|
vhelp.show_topic('check-md')
|
||||||
|
@ -28,10 +43,7 @@ fn main() {
|
||||||
exit(1)
|
exit(1)
|
||||||
}
|
}
|
||||||
mut files_paths := non_option_args.clone()
|
mut files_paths := non_option_args.clone()
|
||||||
mut warnings := 0
|
mut res := CheckResult{}
|
||||||
mut errors := 0
|
|
||||||
mut oks := 0
|
|
||||||
mut all_md_files := []MDFile{}
|
|
||||||
if term_colors {
|
if term_colors {
|
||||||
os.setenv('VCOLORS', 'always', true)
|
os.setenv('VCOLORS', 'always', true)
|
||||||
}
|
}
|
||||||
|
@ -44,49 +56,19 @@ fn main() {
|
||||||
real_path := os.real_path(file_path)
|
real_path := os.real_path(file_path)
|
||||||
lines := os.read_lines(real_path) or {
|
lines := os.read_lines(real_path) or {
|
||||||
println('"$file_path" does not exist')
|
println('"$file_path" does not exist')
|
||||||
warnings++
|
res.warnings++
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
mut mdfile := MDFile{
|
mut mdfile := MDFile{
|
||||||
path: file_path
|
path: file_path
|
||||||
|
lines: lines
|
||||||
}
|
}
|
||||||
for j, line in lines {
|
res += mdfile.check()
|
||||||
if line.len > too_long_line_length {
|
|
||||||
if mdfile.state == .vexample {
|
|
||||||
wprintln(wline(file_path, j, line.len, 'long V example line'))
|
|
||||||
wprintln(line)
|
|
||||||
warnings++
|
|
||||||
} else if mdfile.state == .codeblock {
|
|
||||||
wprintln(wline(file_path, j, line.len, 'long code block line'))
|
|
||||||
wprintln(line)
|
|
||||||
warnings++
|
|
||||||
} else if line.starts_with('|') {
|
|
||||||
wprintln(wline(file_path, j, line.len, 'long table'))
|
|
||||||
wprintln(line)
|
|
||||||
warnings++
|
|
||||||
} else if line.contains('https') {
|
|
||||||
wprintln(wline(file_path, j, line.len, 'long link'))
|
|
||||||
wprintln(line)
|
|
||||||
warnings++
|
|
||||||
} else {
|
|
||||||
eprintln(eline(file_path, j, line.len, 'line too long'))
|
|
||||||
eprintln(line)
|
|
||||||
errors++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mdfile.parse_line(j, line)
|
|
||||||
}
|
|
||||||
all_md_files << mdfile
|
|
||||||
}
|
}
|
||||||
for mut mdfile in all_md_files {
|
if res.warnings > 0 || res.errors > 0 || res.oks > 0 {
|
||||||
new_errors, new_oks := mdfile.check_examples()
|
println('\nWarnings: $res.warnings | Errors: $res.errors | OKs: $res.oks')
|
||||||
errors += new_errors
|
|
||||||
oks += new_oks
|
|
||||||
}
|
}
|
||||||
if warnings > 0 || errors > 0 || oks > 0 {
|
if res.errors > 0 {
|
||||||
println('\nWarnings: $warnings | Errors: $errors | OKs: $oks')
|
|
||||||
}
|
|
||||||
if errors > 0 {
|
|
||||||
exit(1)
|
exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -156,13 +138,46 @@ enum MDFileParserState {
|
||||||
}
|
}
|
||||||
|
|
||||||
struct MDFile {
|
struct MDFile {
|
||||||
path string
|
path string
|
||||||
|
lines []string
|
||||||
mut:
|
mut:
|
||||||
examples []VCodeExample
|
examples []VCodeExample
|
||||||
current VCodeExample
|
current VCodeExample
|
||||||
state MDFileParserState = .markdown
|
state MDFileParserState = .markdown
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn (mut f MDFile) check() CheckResult {
|
||||||
|
mut res := CheckResult{}
|
||||||
|
for j, line in f.lines {
|
||||||
|
if line.len > too_long_line_length {
|
||||||
|
if f.state == .vexample {
|
||||||
|
wprintln(wline(f.path, j, line.len, 'long V example line'))
|
||||||
|
wprintln(line)
|
||||||
|
res.warnings++
|
||||||
|
} else if f.state == .codeblock {
|
||||||
|
wprintln(wline(f.path, j, line.len, 'long code block line'))
|
||||||
|
wprintln(line)
|
||||||
|
res.warnings++
|
||||||
|
} else if line.starts_with('|') {
|
||||||
|
wprintln(wline(f.path, j, line.len, 'long table'))
|
||||||
|
wprintln(line)
|
||||||
|
res.warnings++
|
||||||
|
} else if line.contains('https') {
|
||||||
|
wprintln(wline(f.path, j, line.len, 'long link'))
|
||||||
|
wprintln(line)
|
||||||
|
res.warnings++
|
||||||
|
} else {
|
||||||
|
eprintln(eline(f.path, j, line.len, 'line too long'))
|
||||||
|
eprintln(line)
|
||||||
|
res.errors++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
f.parse_line(j, line)
|
||||||
|
}
|
||||||
|
res += f.check_examples()
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
fn (mut f MDFile) parse_line(lnumber int, line string) {
|
fn (mut f MDFile) parse_line(lnumber int, line string) {
|
||||||
if line.starts_with('```v') {
|
if line.starts_with('```v') {
|
||||||
if f.state == .markdown {
|
if f.state == .markdown {
|
||||||
|
@ -230,7 +245,7 @@ fn get_fmt_exit_code(vfile string, vexe string) int {
|
||||||
return silent_cmdexecute('"$vexe" fmt -verify $vfile')
|
return silent_cmdexecute('"$vexe" fmt -verify $vfile')
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (mut f MDFile) check_examples() (int, int) {
|
fn (mut f MDFile) check_examples() CheckResult {
|
||||||
mut errors := 0
|
mut errors := 0
|
||||||
mut oks := 0
|
mut oks := 0
|
||||||
vexe := pref.vexe_path()
|
vexe := pref.vexe_path()
|
||||||
|
@ -255,7 +270,7 @@ fn (mut f MDFile) check_examples() (int, int) {
|
||||||
match command {
|
match command {
|
||||||
'compile' {
|
'compile' {
|
||||||
res := cmdexecute('"$vexe" -w -Wfatal-errors -o x.c $vfile')
|
res := cmdexecute('"$vexe" -w -Wfatal-errors -o x.c $vfile')
|
||||||
os.rm('x.c') or { }
|
os.rm('x.c') or {}
|
||||||
if res != 0 || fmt_res != 0 {
|
if res != 0 || fmt_res != 0 {
|
||||||
if res != 0 {
|
if res != 0 {
|
||||||
eprintln(eline(f.path, e.sline, 0, 'example failed to compile'))
|
eprintln(eline(f.path, e.sline, 0, 'example failed to compile'))
|
||||||
|
@ -288,7 +303,7 @@ fn (mut f MDFile) check_examples() (int, int) {
|
||||||
}
|
}
|
||||||
'failcompile' {
|
'failcompile' {
|
||||||
res := silent_cmdexecute('"$vexe" -w -Wfatal-errors -o x.c $vfile')
|
res := silent_cmdexecute('"$vexe" -w -Wfatal-errors -o x.c $vfile')
|
||||||
os.rm('x.c') or { }
|
os.rm('x.c') or {}
|
||||||
if res == 0 {
|
if res == 0 {
|
||||||
eprintln(eline(f.path, e.sline, 0, '`failcompile` example compiled'))
|
eprintln(eline(f.path, e.sline, 0, '`failcompile` example compiled'))
|
||||||
eprintln(vcontent)
|
eprintln(vcontent)
|
||||||
|
@ -337,5 +352,8 @@ fn (mut f MDFile) check_examples() (int, int) {
|
||||||
os.rm(vfile) or { panic(err) }
|
os.rm(vfile) or { panic(err) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return errors, oks
|
return CheckResult{
|
||||||
|
errors: errors
|
||||||
|
oks: oks
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue