~/bend-docscommunity

src/paths.bend source

src/paths.bend on the hub · documented module

# src/paths: what a path names, read by its segments, never by a suffix or a# substring. A law file is one whose last segment is exactly LAWS.bend or# PROOF.bend, so OUTLAWS.bend is not one; a test is one with a directory# segment exactly `tests`, so contests/ is not one. Pure.import Baseimport ./lazy/lazy.bend as Lazy# the last of the segments, or the one before when there are nonedef base.go(segs: List<&2, String>, last: String) -> String:  match segs:    case Nil{}:      last    case Con{s, rest}:      base.go(rest, s)# a path's last segmentdef base(path: String) -> String:  base.go(String.split(path, '/'), "")# is some segment but the last exactly `tests`?def tested(segs: List<&2, String>) -> Bool:  match segs:    case Nil{}:      False{}    case Con{+s, +rest}:      Lazy.or_else(Bool.and(String.eq(s, "tests"), Bool.not(List.is_empty(&2, String, rest))), _u => tested(rest))# is the file under a `tests` directory?def is_test(path: String) -> Bool:  tested(String.split(path, '/'))# is it a LAWS.bend?def is_laws(path: String) -> Bool:  String.eq(base(path), "LAWS.bend")# is it a PROOF.bend?def is_proof(path: String) -> Bool:  String.eq(base(path), "PROOF.bend")# is it a LAWS.bend or a PROOF.bend?def is_law_file(+path: String) -> Bool:  Bool.or(is_laws(path), is_proof(path))