def lint
cli@0.2.0.0 · cli.bend:2310
import cli@0.2.0.0/cli.bend as Cli
import Base
2310def lint(items: List<&2, LintItem>, +at: String, +ids: List<&2, String>,
2311 +seen: List<&2, Seen>, +inherited: List<&2, Seen>, +optional: Bool,
2312 +variadic: Bool, +version: Bool, +root: Bool) -> List<&2, Problem>:
2313 match items:
2314 case Nil{}:
2315 Nil{}
2316 case LintArg{+usage, help, +attrs, +parsed} <> +tail:
2317 List.append(&2, Problem,
2318 arg_problems(parsed, usage, help, attrs, tail, at, ids, seen,
2319 optional, variadic, version),
2320 lint(tail, at, ids,
2321 List.append(&2, Seen, arg_entries(parsed, attrs), seen),
2322 inherited,
2323 Bool.or(optional, usage_kind(~kind_optional_pos, parsed)),
2324 Bool.or(variadic, usage_kind(~kind_variadic_pos, parsed)),
2325 version, root))
2326 case LintSub{+name, about, +children, +kids} <> tail:
2327 +child_at = String.concat([at, " ", name])
2328 +aliases = find_aliases(children)
2329 List.concat(&2, Problem, [
2330 sub_name_issues(at, name, seen),
2331 sub_alias_issues(aliases, at, SeenSub{name} <> seen),
2332 command_body_issues(child_at, name, about, children,
2333 has_pos_item(kids)),
2334 lint(kids, child_at, scope_ids(kids), inherited,
2335 List.append(&2, Seen, global_entries(kids), inherited),
2336 False{}, False{}, version, False{}),
2337 lint(tail, at, ids,
2338 List.append(&2, Seen, sub_alias_entries(aliases),
2339 SeenSub{name} <> seen),
2340 inherited, optional, variadic, version, root),
2341 ])
2342 case LintOther{head} <> tail:
2343 List.append(&2, Problem,
2344 maybe_misplaced(command_attr_name(head, root), at),
2345 lint(tail, at, ids, seen, inherited, optional, variadic,
2346 version, root))