From 4afd0c0ccedf02322b7c6a0e08f563fb239f0c34 Mon Sep 17 00:00:00 2001 From: ContextCodeCache-Bot Date: Fri, 3 Jul 2026 20:56:32 +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..8b5a5bd 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 (20260703-20-56-31) 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..64c15e7 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 (20260703-20-56-31) 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..bf9693d 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 (20260703-20-56-31) 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..a05d468 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 (20260703-20-56-31) 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..ca4d031 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 (20260703-20-56-31) UTC # source: src/languages.rs [rust] # const # funcs diff --git a/.ccc/src-lib.rs.md b/.ccc/src-lib.rs.md index 80c5177..4699833 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 (20260703-20-56-31) UTC # source: src/lib.rs [rust] # const # funcs diff --git a/.ccc/src-main.rs.md b/.ccc/src-main.rs.md index 525d125..bff26b0 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 (20260703-20-56-31) UTC # source: src/main.rs [rust] # const # funcs diff --git a/.ccc/src-model.rs.md b/.ccc/src-model.rs.md index 223fc5d..b6739c3 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 (20260703-20-56-31) UTC # source: src/model.rs [rust] # const # funcs diff --git a/.ccc/src-naming.rs.md b/.ccc/src-naming.rs.md index 9ff20e6..60a82e4 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 (20260703-20-56-31) UTC # source: src/naming.rs [rust] # const # funcs diff --git a/.ccc/src-render.rs.md b/.ccc/src-render.rs.md index bd239dc..6e992db 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 (20260703-20-56-31) 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..b2726c3 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 (20260703-20-56-31) 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..194f0aa 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 (20260703-20-56-31) UTC # source: src/tokenize.rs [rust] # const - L15@TOKENS_BIN:&str diff --git a/.ccc/tokens.bin b/.ccc/tokens.bin index ec9892ee55c479feaf762d86bba93f542eb1b4f9..d9a7aa2018cef21f7602f6ed9e3ae0f9f3e8da6f 100644 GIT binary patch literal 22096 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