From 4396bd8c9b521623c71b52a063e72848ef5a90c2 Mon Sep 17 00:00:00 2001 From: ContextCodeCache-Bot Date: Mon, 27 Jul 2026 09:53:53 +0000 Subject: [PATCH] chore(ccc): regenerate ContextCodeCache --- .ccc/CCC.md | 8 +- .ccc/example-src-main.rs.md | 2 +- .ccc/example-src-math.rs.md | 2 +- .ccc/src-extract.rs.md | 250 ++++++++++++++++++------------------ .ccc/src-languages.rs.md | 2 +- .ccc/src-lib.rs.md | 2 +- .ccc/src-main.rs.md | 2 +- .ccc/src-model.rs.md | 2 +- .ccc/src-naming.rs.md | 2 +- .ccc/src-render.rs.md | 4 +- .ccc/src-scan.rs.md | 5 +- .ccc/src-tokenize.rs.md | 2 +- .ccc/tokens.bin | Bin 18428 -> 22096 bytes .ccc/tokens.json | 10 +- example/.ccc/CCC.md | 2 +- example/.ccc/src-main.rs.md | 2 +- example/.ccc/src-math.rs.md | 2 +- 17 files changed, 150 insertions(+), 149 deletions(-) diff --git a/.ccc/CCC.md b/.ccc/CCC.md index 0d3992e..61f36df 100644 --- a/.ccc/CCC.md +++ b/.ccc/CCC.md @@ -18,9 +18,9 @@ do-not-edit: never hand-edit files under `.ccc` - they are overwritten on the next scan. To change the cache, change the source, then rescan. --- -# ContextCodeCache (20260703-15-47-40) UTC -### project: codecache -### totals: 11 files, 96 funcs, 9 consts, 124 refs, 3 notes +# ContextCodeCache (20260727-09-53-52) UTC +### project: ccc +### totals: 11 files, 96 funcs, 9 consts, 124 refs, 4 notes ### regenerate: `ccc scan` ### files - [example/src/main.rs](example-src-main.rs.md) [rust] 2f/1c/1r/0n @@ -32,5 +32,5 @@ do-not-edit: never hand-edit files under `.ccc` - they are overwritten on - [src/model.rs](src-model.rs.md) [rust] 2f/0c/0r/1n - [src/naming.rs](src-naming.rs.md) [rust] 8f/0c/7r/0n - [src/render.rs](src-render.rs.md) [rust] 6f/0c/0r/0n - - [src/scan.rs](src-scan.rs.md) [rust] 9f/2c/9r/0n + - [src/scan.rs](src-scan.rs.md) [rust] 9f/2c/9r/1n - [src/tokenize.rs](src-tokenize.rs.md) [rust] 12f/4c/3r/0n diff --git a/.ccc/example-src-main.rs.md b/.ccc/example-src-main.rs.md index ecec4f4..fa58fba 100644 --- a/.ccc/example-src-main.rs.md +++ b/.ccc/example-src-main.rs.md @@ -1,4 +1,4 @@ -# main.rs.md (20260703-15-47-40) UTC +# main.rs.md (20260727-09-53-52) UTC # source: example/src/main.rs [rust] # const - L6@DEFAULT_RADIUS:f64 diff --git a/.ccc/example-src-math.rs.md b/.ccc/example-src-math.rs.md index f39fa2c..7c97de0 100644 --- a/.ccc/example-src-math.rs.md +++ b/.ccc/example-src-math.rs.md @@ -1,4 +1,4 @@ -# math.rs.md (20260703-15-47-40) UTC +# math.rs.md (20260727-09-53-52) UTC # source: example/src/math.rs [rust] # const - L4@PI:f64 diff --git a/.ccc/src-extract.rs.md b/.ccc/src-extract.rs.md index df383c2..b1e50db 100644 --- a/.ccc/src-extract.rs.md +++ b/.ccc/src-extract.rs.md @@ -1,130 +1,130 @@ -# extract.rs.md (20260703-15-47-40) UTC +# extract.rs.md (20260727-09-53-52) UTC # source: src/extract.rs [rust] # const - - L475@MARKERS:&[&str] + - L469@MARKERS:&[&str] # funcs - - L52:8@caller:String // nearest enclosing function name for caller attribution - - L65:8@current_type:Option<(String, Option)> // nearest enclosing type scope (its name and receiver token) used to - - L72:8@in_function:bool - - L76:8@in_type:bool - - L85:8@extract:Option // parse `src` as `lang` and extract its symbols returns `None` if the source - - L144:4@visit - - L200:4@type_scope:Option<(String, Option)> - - L220:4@func_owner:Option<(String, Option)> // if it is a method the enclosing type scope or for go... the method's own receiver - - L230:4@go_receiver:Option<(String, Option)> - - L248:4@const_eligible:bool - - L262:4@extract_func:Option // extract a function definition; returns `None` for anonymous functions we - - L276:4@func_name:Option<(String, Node<'a>)> - - L292:4@func_return:Option - - L307:4@extract_consts - - L393:4@is_shouting_snek:bool - - L399:4@has_const_keyword:bool - - L405:4@classify_call:Option - - L416:4@resolve_callee:Option // reduce a call target expression to a [`CallKind`] - - L465:4@self_method:Option - - L477:4@maybe_note - - L499:4@preceding_comment:Option // nearest comment immediately preceding a function definition, used as its - - L543:4@text:&'a str - - L548:4@pos:(usize, usize) // 1-based (line, column) of a node's start - - L554:4@oneline:String // collapse all runs of whitespace to single spaces and trim - - L558:4@truncate:String - - L568:4@strip_comment:String // strip common comment delimiters from a raw comment token - - L591:8@rust_extraction - - L615:8@go_const_block_and_call - - L629:8@ts_arrow_is_a_func - - L640:8@note_marker_word_boundary - - L652:8@qualified_call_does_not_bind_to_local_name - - L672:8@self_method_calls_resolve_by_type - - L688:8@python_only_shouting_snek_is_const - - L700:8@js_let_is_not_a_const + - L46:8@caller:String // nearest enclosing function name for caller attribution + - L59:8@current_type:Option<(String, Option)> // nearest enclosing type scope (its name and receiver token) used to + - L66:8@in_function:bool + - L70:8@in_type:bool + - L79:8@extract:Option // parse `src` as `lang` and extract its symbols returns `None` if the source + - L138:4@visit + - L194:4@type_scope:Option<(String, Option)> + - L214:4@func_owner:Option<(String, Option)> // if it is a method the enclosing type scope or for go... the method's own receiver + - L224:4@go_receiver:Option<(String, Option)> + - L242:4@const_eligible:bool + - L256:4@extract_func:Option // extract a function definition; returns `None` for anonymous functions we + - L270:4@func_name:Option<(String, Node<'a>)> + - L286:4@func_return:Option + - L301:4@extract_consts + - L387:4@is_shouting_snek:bool + - L393:4@has_const_keyword:bool + - L399:4@classify_call:Option + - L410:4@resolve_callee:Option // reduce a call target expression to a [`CallKind`] + - L459:4@self_method:Option + - L471:4@maybe_note + - L493:4@preceding_comment:Option // nearest comment immediately preceding a function definition, used as its + - L537:4@text:&'a str + - L542:4@pos:(usize, usize) // 1-based (line, column) of a node's start + - L548:4@oneline:String // collapse all runs of whitespace to single spaces and trim + - L552:4@truncate:String + - L562:4@strip_comment:String // strip common comment delimiters from a raw comment token + - L585:8@rust_extraction + - L609:8@go_const_block_and_call + - L623:8@ts_arrow_is_a_func + - L634:8@note_marker_word_boundary + - L646:8@qualified_call_does_not_bind_to_local_name + - L666:8@self_method_calls_resolve_by_type + - L682:8@python_only_shouting_snek_is_const + - L694:8@js_let_is_not_a_const # refs - - extract@L101 calls L144:4@visit - - visit@L149 calls L200:4@type_scope:Option<(String, Option)> - - visit@L153 calls L262:4@extract_func:Option - - visit@L154 calls L220:4@func_owner:Option<(String, Option)> - - visit@L180 calls L248:4@const_eligible:bool - - visit@L181 calls L307:4@extract_consts - - visit@L184 calls L405:4@classify_call:Option - - visit@L188 calls L477:4@maybe_note - - visit@L193 calls L144:4@visit - - type_scope@L203 calls L554:4@oneline:String - - type_scope@L203 calls L543:4@text:&'a str - - func_owner@L222 calls L230:4@go_receiver:Option<(String, Option)> - - go_receiver@L238 calls L554:4@oneline:String - - go_receiver@L238 calls L543:4@text:&'a str - - go_receiver@L242 calls L554:4@oneline:String - - go_receiver@L242 calls L543:4@text:&'a str - - extract_func@L263 calls L276:4@func_name:Option<(String, Node<'a>)> - - extract_func@L264 calls L548:4@pos:(usize, usize) - - extract_func@L265 calls L292:4@func_return:Option - - extract_func@L266 calls L499:4@preceding_comment:Option - - func_name@L278 calls L554:4@oneline:String - - func_name@L278 calls L543:4@text:&'a str - - func_name@L285 calls L554:4@oneline:String - - func_name@L285 calls L543:4@text:&'a str - - func_return@L295 calls L554:4@oneline:String - - func_return@L295 calls L543:4@text:&'a str - - extract_consts@L313 calls L554:4@oneline:String - - extract_consts@L313 calls L543:4@text:&'a str - - extract_consts@L315 calls L548:4@pos:(usize, usize) - - extract_consts@L316 calls L554:4@oneline:String - - extract_consts@L316 calls L543:4@text:&'a str - - extract_consts@L324 calls L554:4@oneline:String - - extract_consts@L324 calls L543:4@text:&'a str - - extract_consts@L326 calls L393:4@is_shouting_snek:bool - - extract_consts@L331 calls L554:4@oneline:String - - extract_consts@L331 calls L543:4@text:&'a str - - extract_consts@L333 calls L548:4@pos:(usize, usize) - - extract_consts@L341 calls L399:4@has_const_keyword:bool - - extract_consts@L360 calls L554:4@oneline:String - - extract_consts@L360 calls L543:4@text:&'a str - - extract_consts@L366 calls L548:4@pos:(usize, usize) - - extract_consts@L367 calls L554:4@oneline:String - - extract_consts@L367 calls L543:4@text:&'a str - - extract_consts@L377 calls L554:4@oneline:String - - extract_consts@L377 calls L543:4@text:&'a str - - extract_consts@L382 calls L548:4@pos:(usize, usize) - - extract_consts@L383 calls L554:4@oneline:String - - extract_consts@L383 calls L543:4@text:&'a str - - classify_call@L407 calls L416:4@resolve_callee:Option - - classify_call@L410 calls L548:4@pos:(usize, usize) - - resolve_callee@L419 calls L554:4@oneline:String - - resolve_callee@L419 calls L543:4@text:&'a str - - resolve_callee@L423 calls L554:4@oneline:String - - resolve_callee@L423 calls L543:4@text:&'a str - - resolve_callee@L424 calls L465:4@self_method:Option - - resolve_callee@L428 calls L554:4@oneline:String - - resolve_callee@L428 calls L543:4@text:&'a str - - resolve_callee@L431 calls L554:4@oneline:String - - resolve_callee@L431 calls L543:4@text:&'a str - - resolve_callee@L442 calls L554:4@oneline:String - - resolve_callee@L442 calls L543:4@text:&'a str - - resolve_callee@L443 calls L465:4@self_method:Option - - resolve_callee@L448 calls L554:4@oneline:String - - resolve_callee@L448 calls L543:4@text:&'a str - - resolve_callee@L449 calls L465:4@self_method:Option - - resolve_callee@L454 calls L554:4@oneline:String - - resolve_callee@L454 calls L543:4@text:&'a str - - resolve_callee@L455 calls L465:4@self_method:Option - - resolve_callee@L460 calls L416:4@resolve_callee:Option - - self_method@L468 calls L554:4@oneline:String - - self_method@L468 calls L543:4@text:&'a str - - maybe_note@L478 calls L543:4@text:&'a str - - maybe_note@L479 calls L568:4@strip_comment:String - - maybe_note@L487 calls L554:4@oneline:String - - maybe_note@L492 calls L548:4@pos:(usize, usize) - - maybe_note@L493 calls L558:4@truncate:String - - preceding_comment@L530 calls L568:4@strip_comment:String - - preceding_comment@L530 calls L543:4@text:&'a str - - preceding_comment@L533 calls L554:4@oneline:String - - preceding_comment@L537 calls L558:4@truncate:String - - rust_extraction@L597 calls L85:8@extract:Option - - go_const_block_and_call@L620 calls L85:8@extract:Option - - ts_arrow_is_a_func@L632 calls L85:8@extract:Option - - note_marker_word_boundary@L646 calls L85:8@extract:Option - - qualified_call_does_not_bind_to_local_name@L660 calls L85:8@extract:Option - - self_method_calls_resolve_by_type@L681 calls L85:8@extract:Option - - python_only_shouting_snek_is_const@L691 calls L85:8@extract:Option - - js_let_is_not_a_const@L704 calls L85:8@extract:Option + - extract@L95 calls L138:4@visit + - visit@L143 calls L194:4@type_scope:Option<(String, Option)> + - visit@L147 calls L256:4@extract_func:Option + - visit@L148 calls L214:4@func_owner:Option<(String, Option)> + - visit@L174 calls L242:4@const_eligible:bool + - visit@L175 calls L301:4@extract_consts + - visit@L178 calls L399:4@classify_call:Option + - visit@L182 calls L471:4@maybe_note + - visit@L187 calls L138:4@visit + - type_scope@L197 calls L548:4@oneline:String + - type_scope@L197 calls L537:4@text:&'a str + - func_owner@L216 calls L224:4@go_receiver:Option<(String, Option)> + - go_receiver@L232 calls L548:4@oneline:String + - go_receiver@L232 calls L537:4@text:&'a str + - go_receiver@L236 calls L548:4@oneline:String + - go_receiver@L236 calls L537:4@text:&'a str + - extract_func@L257 calls L270:4@func_name:Option<(String, Node<'a>)> + - extract_func@L258 calls L542:4@pos:(usize, usize) + - extract_func@L259 calls L286:4@func_return:Option + - extract_func@L260 calls L493:4@preceding_comment:Option + - func_name@L272 calls L548:4@oneline:String + - func_name@L272 calls L537:4@text:&'a str + - func_name@L279 calls L548:4@oneline:String + - func_name@L279 calls L537:4@text:&'a str + - func_return@L289 calls L548:4@oneline:String + - func_return@L289 calls L537:4@text:&'a str + - extract_consts@L307 calls L548:4@oneline:String + - extract_consts@L307 calls L537:4@text:&'a str + - extract_consts@L309 calls L542:4@pos:(usize, usize) + - extract_consts@L310 calls L548:4@oneline:String + - extract_consts@L310 calls L537:4@text:&'a str + - extract_consts@L318 calls L548:4@oneline:String + - extract_consts@L318 calls L537:4@text:&'a str + - extract_consts@L320 calls L387:4@is_shouting_snek:bool + - extract_consts@L325 calls L548:4@oneline:String + - extract_consts@L325 calls L537:4@text:&'a str + - extract_consts@L327 calls L542:4@pos:(usize, usize) + - extract_consts@L335 calls L393:4@has_const_keyword:bool + - extract_consts@L354 calls L548:4@oneline:String + - extract_consts@L354 calls L537:4@text:&'a str + - extract_consts@L360 calls L542:4@pos:(usize, usize) + - extract_consts@L361 calls L548:4@oneline:String + - extract_consts@L361 calls L537:4@text:&'a str + - extract_consts@L371 calls L548:4@oneline:String + - extract_consts@L371 calls L537:4@text:&'a str + - extract_consts@L376 calls L542:4@pos:(usize, usize) + - extract_consts@L377 calls L548:4@oneline:String + - extract_consts@L377 calls L537:4@text:&'a str + - classify_call@L401 calls L410:4@resolve_callee:Option + - classify_call@L404 calls L542:4@pos:(usize, usize) + - resolve_callee@L413 calls L548:4@oneline:String + - resolve_callee@L413 calls L537:4@text:&'a str + - resolve_callee@L417 calls L548:4@oneline:String + - resolve_callee@L417 calls L537:4@text:&'a str + - resolve_callee@L418 calls L459:4@self_method:Option + - resolve_callee@L422 calls L548:4@oneline:String + - resolve_callee@L422 calls L537:4@text:&'a str + - resolve_callee@L425 calls L548:4@oneline:String + - resolve_callee@L425 calls L537:4@text:&'a str + - resolve_callee@L436 calls L548:4@oneline:String + - resolve_callee@L436 calls L537:4@text:&'a str + - resolve_callee@L437 calls L459:4@self_method:Option + - resolve_callee@L442 calls L548:4@oneline:String + - resolve_callee@L442 calls L537:4@text:&'a str + - resolve_callee@L443 calls L459:4@self_method:Option + - resolve_callee@L448 calls L548:4@oneline:String + - resolve_callee@L448 calls L537:4@text:&'a str + - resolve_callee@L449 calls L459:4@self_method:Option + - resolve_callee@L454 calls L410:4@resolve_callee:Option + - self_method@L462 calls L548:4@oneline:String + - self_method@L462 calls L537:4@text:&'a str + - maybe_note@L472 calls L537:4@text:&'a str + - maybe_note@L473 calls L562:4@strip_comment:String + - maybe_note@L481 calls L548:4@oneline:String + - maybe_note@L486 calls L542:4@pos:(usize, usize) + - maybe_note@L487 calls L552:4@truncate:String + - preceding_comment@L524 calls L562:4@strip_comment:String + - preceding_comment@L524 calls L537:4@text:&'a str + - preceding_comment@L527 calls L548:4@oneline:String + - preceding_comment@L531 calls L552:4@truncate:String + - rust_extraction@L591 calls L79:8@extract:Option + - go_const_block_and_call@L614 calls L79:8@extract:Option + - ts_arrow_is_a_func@L626 calls L79:8@extract:Option + - note_marker_word_boundary@L640 calls L79:8@extract:Option + - qualified_call_does_not_bind_to_local_name@L654 calls L79:8@extract:Option + - self_method_calls_resolve_by_type@L675 calls L79:8@extract:Option + - python_only_shouting_snek_is_const@L685 calls L79:8@extract:Option + - js_let_is_not_a_const@L698 calls L79:8@extract:Option # note - - @L641 "notes" must not trigger, but a real TODO must + - @L635 "notes" must not trigger, but a real TODO must diff --git a/.ccc/src-languages.rs.md b/.ccc/src-languages.rs.md index 415e945..af0b350 100644 --- a/.ccc/src-languages.rs.md +++ b/.ccc/src-languages.rs.md @@ -1,4 +1,4 @@ -# languages.rs.md (20260703-15-47-40) UTC +# languages.rs.md (20260727-09-53-52) UTC # source: src/languages.rs [rust] # const # funcs diff --git a/.ccc/src-lib.rs.md b/.ccc/src-lib.rs.md index 80c5177..6c4df16 100644 --- a/.ccc/src-lib.rs.md +++ b/.ccc/src-lib.rs.md @@ -1,4 +1,4 @@ -# lib.rs.md (20260703-15-47-40) UTC +# lib.rs.md (20260727-09-53-52) UTC # source: src/lib.rs [rust] # const # funcs diff --git a/.ccc/src-main.rs.md b/.ccc/src-main.rs.md index 525d125..27af7f8 100644 --- a/.ccc/src-main.rs.md +++ b/.ccc/src-main.rs.md @@ -1,4 +1,4 @@ -# main.rs.md (20260703-15-47-40) UTC +# main.rs.md (20260727-09-53-52) UTC # source: src/main.rs [rust] # const # funcs diff --git a/.ccc/src-model.rs.md b/.ccc/src-model.rs.md index 223fc5d..4f8a22c 100644 --- a/.ccc/src-model.rs.md +++ b/.ccc/src-model.rs.md @@ -1,4 +1,4 @@ -# model.rs.md (20260703-15-47-40) UTC +# model.rs.md (20260727-09-53-52) UTC # source: src/model.rs [rust] # const # funcs diff --git a/.ccc/src-naming.rs.md b/.ccc/src-naming.rs.md index 9ff20e6..6c858ce 100644 --- a/.ccc/src-naming.rs.md +++ b/.ccc/src-naming.rs.md @@ -1,4 +1,4 @@ -# naming.rs.md (20260703-15-47-40) UTC +# naming.rs.md (20260727-09-53-52) UTC # source: src/naming.rs [rust] # const # funcs diff --git a/.ccc/src-render.rs.md b/.ccc/src-render.rs.md index bd239dc..b550191 100644 --- a/.ccc/src-render.rs.md +++ b/.ccc/src-render.rs.md @@ -1,10 +1,10 @@ -# render.rs.md (20260703-15-47-40) UTC +# render.rs.md (20260727-09-53-52) UTC # source: src/render.rs [rust] # const # funcs - L9:8@now_ts:String // current UTC timestamp formatted as `yyyymmdd-hh-mm-ss` - L14:8@render_file:String // render a single per-file cache entry - - L70:8@render_index:String // render the `CCC.md` index for the whole project + - L70:8@render_index:String // render the CCC index for the whole project - L137:8@strip_timestamps:String // replace embedded generation timestamps with a fixed token so freshness - L141:4@strip_ts_line:String - L159:8@timestamps_are_normalized_away diff --git a/.ccc/src-scan.rs.md b/.ccc/src-scan.rs.md index d435773..ff8cb69 100644 --- a/.ccc/src-scan.rs.md +++ b/.ccc/src-scan.rs.md @@ -1,4 +1,4 @@ -# scan.rs.md (20260703-15-47-40) UTC +# scan.rs.md (20260727-09-53-52) UTC # source: src/scan.rs [rust] # const - L13@SKIP_DIRS:&[&str] @@ -7,7 +7,7 @@ - L55:12@as_str:&'static str - L73:8@collect_files:Result> // Discover supported source files under `root` - L113:8@build_caches:Vec // parse every discovered file into a `FileCache`, sorted by path - - L121:4@disambiguate_cache_names // ensure every `cache_name` is unique wit distinct source paths + - L121:4@disambiguate_cache_names // fixes bug where cache_name wasnt unique oops - L138:4@build_one:Option - L155:4@render_all:BTreeMap - L165:8@scan:Result // scan root and (re)write the `.ccc` directory @@ -24,3 +24,4 @@ - check@L194 calls L113:8@build_caches:Vec - check@L196 calls L155:4@render_all:BTreeMap # note + - @L120 fixes bug where cache_name wasnt unique oops diff --git a/.ccc/src-tokenize.rs.md b/.ccc/src-tokenize.rs.md index 9d6c33e..58eaba0 100644 --- a/.ccc/src-tokenize.rs.md +++ b/.ccc/src-tokenize.rs.md @@ -1,4 +1,4 @@ -# tokenize.rs.md (20260703-15-47-40) UTC +# tokenize.rs.md (20260727-09-53-52) UTC # source: src/tokenize.rs [rust] # const - L15@TOKENS_BIN:&str diff --git a/.ccc/tokens.bin b/.ccc/tokens.bin index ec9892ee55c479feaf762d86bba93f542eb1b4f9..b99a0311401de3f04c1f1fc0b071ea3e28ca1f02 100644 GIT binary patch literal 22096 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