Make great documentation goal 1.2, and plan the README's reorganisation and the nested-template gaps #33

Open
lilleman wants to merge 966 commits from worktree-todo-relative-dates-exact-counts into main
6 changed files with 12 additions and 16 deletions
Showing only changes of commit 2431edeab0 - Show all commits
+2 -2
View File
@@ -967,7 +967,7 @@ node.go the node model and JSON -> node compilation
table.go tables: their options, format and cells, the link to the parent beside them, and how a path passes and draws a table
name.go names: {x as n} bindings, the scopes they live in, the reads they answer, and what each resolves to at load: its target, its reads and the keys they address
namefence.go the load fences over names
pick.go a render's named picks: the frames of the name scopes rendering, the memo a pick keeps, and the reads kept under it
pick.go a render's named picks: the frame of each name scope rendering, the memo a pick keeps, and the reads kept under it
env.go renderEnv: what a render reads names and rows through, the stack of frames it renders in, and the frames a read opens and finds
path.go the dotted-path walks, and proving a path reaches a node
render.go Fake, the recursive renderer (choices, format strings, expansions) and the reads its tokens make
@@ -981,7 +981,7 @@ resolve.go resolving templates against the assembled tree in steps, each ov
graph.go the node graph: tree walks, containment and render edges, and the cycle and repeat fences
sorted.go sortedNames: a map's keys, sorted
calc.go the {calc()} operand checks: never a number, and a constant zero divisor
datatype.go column datatypes: DataType, where datatype and null may sit, a column's datatype
datatype.go column datatypes: DataType, a template's declared datatype, a column's datatype
valueproof.go the value proof: what a typed column, calc operand or struct field holds, checked at load
data.go the load path: the categories internal/datafiles hands over, compiled into one merged tree, and the load pipeline every entry point runs
cmd/fejkdata/ the fejkdata CLI
+1 -3
View File
@@ -170,9 +170,7 @@ def streets(segments, codes, localities, per_locality):
def main():
p = geo.parser(__doc__, "SE")
p.add_argument("--key-file", help="file holding the Trafikverket API key; TRAFIKVERKET_API_KEY otherwise")
a = p.parse_args()
a = geo.parser(__doc__, "SE", key_file={"help": "file holding the Trafikverket API key; TRAFIKVERKET_API_KEY otherwise"}).parse_args()
key = Path(a.key_file).read_text().strip() if a.key_file else os.environ.get("TRAFIKVERKET_API_KEY")
if not key:
sys.exit("set TRAFIKVERKET_API_KEY or pass --key-file")
+1 -3
View File
@@ -154,9 +154,7 @@ def streets(cache, counties, locality_of_zcta, per_locality):
def main():
p = geo.parser(__doc__, "US")
p.add_argument("--min-population", type=int, default=25000)
a = p.parse_args()
a = geo.parser(__doc__, "US", min_population={"type": int, "default": 25000}).parse_args()
cache, out = geo.directories(a)
state_population = {r["STATE"]: r[ESTIMATE] for r in csv_rows(cache, STATES, "nst-est2025.csv") if r["SUMLEV"] == "040"}
+6 -6
View File
@@ -1,4 +1,4 @@
"""The steps every country's geo import takes."""
"""The steps a country's geo import may share with another's."""
import argparse
import collections
import math
@@ -9,12 +9,12 @@ DATA = Path(__file__).resolve().parent.parent / "data" / "geo"
CACHE = Path(__file__).resolve().parent / "cache"
def parser(doc, country):
"""The options every country's import takes; a script adds its own before parse_args."""
def parser(doc, country, **own):
"""The options every country's import takes and the script's own, keyed by name with "_" for "-", in name order."""
options = {"cache": {"default": str(CACHE)}, "out": {"default": str(DATA / country)}, "streets_per_locality": {"type": int, "default": 10}, **own}
p = argparse.ArgumentParser(description=doc.splitlines()[0])
p.add_argument("--cache", default=str(CACHE))
p.add_argument("--out", default=str(DATA / country))
p.add_argument("--streets-per-locality", type=int, default=10)
for name in sorted(options):
p.add_argument("--" + name.replace("_", "-"), **options[name])
return p
+1 -1
View File
@@ -156,7 +156,7 @@ func disagreement(a *template, da DataType, b *template, db DataType) error {
}
message, ok := disagreements[[2]itemKind{kindOf(c.fix), kindOf(c.other)}]
if !ok {
panic(invariant.Broken("two text items hold one datatype, so they never disagree"))
panic(invariant.Broken("disagreement has no message for item kinds %d and %d; two text items hold one datatype, so they never disagree", kindOf(c.fix), kindOf(c.other)))
}
return message(c)
}
+1 -1
View File
@@ -246,7 +246,7 @@ type tableRoute struct {
}
// route is how tail passes t. fromRow means the previous route stepped into t
// from a row of an ancestor table, so t reads a row even where tail is empty; a
// from a row of a table linked to it, so t reads a row even where tail is empty; a
// table reached otherwise, with no selector and an empty tail, is left to a render's
// own draw.
func (t *table) route(tail []string, fromRow bool) (tableRoute, error) {