This week was defined almost entirely by lintric — a Rust-based code dependency analysis tool that got a relentless, methodical overhaul. 76 of the 77 PRs touched lintric at some point, and the commit log reads like a graduate thesis: fixing namespace collisions, scoping match arms correctly, resolving member access by receiver type, linking trait implementations to their declarations. This wasn't a casual refactor — it was a deep, systematic audit of every edge case in how the tool models TypeScript and Rust code semantics.
The narrative arc is fascinating: it started with infrastructure unblocking (fixing tree-sitter 0.25 API changes, tera 2.0 migration, clippy/audit CI failures) and then pivoted into a long accuracy sprint. Each PR followed a tight test-fix-test loop — pin the construct with an accuracy fixture, write the fix, verify snapshots. By the end of the week, lintric could handle let chains, match guards, accessor pairs, abstract classes, const generic parameters, aliased imports, and type/value namespace separation.
Alongside the lintric marathon, two releases shipped for mdts (v0.20.4 and v0.20.5 with auto-focus file tree and livereload resilience), gittype landed on winget as v0.10.1, steamfetch and gitlogue each cut releases, and a Gradle OOM crisis in circleci-tools/Norimaki got diagnosed and squashed. The week ended with a dramatic commit surge — 191 on Saturday, 261 on Sunday.
Summary
6 sectionslet chain bindings and match guard scopes to accessor direction, abstract class member linking, and type/value namespace separation. The crowning achievement was moving from ad-hoc parent-tree walking to query-based extraction for both languages, and adding a shift diagnostic that warns when annotations were written against a different line numbering.language() to LANGUAGE.into(). The tera 2.0 migration needed rewriting Context::into_json() usages with serde_json::json!. In cycle-pusher and cycle-flyer, transitive vulnerabilities via tslint@6.1.3 required adding npm overrides to unpin vulnerable majors. And in circleci-tools/Norimaki, a D8 dexing OOM needed both a heap increase and a resource class bump to fully resolve.java.lang.OutOfMemoryError during D8 dexing that had been killing the deploy job. The Norimaki fix was surgical — one-line heap increase plus a CI resource class bump — but it unblocked an otherwise stalled deployment pipeline.Highlights
6 itemslanguage() call site to the new LANGUAGE.into() API. Net negative line count tells the story: the new API is cleaner.Context::into_json() API to direct serde_json::json! construction — the kind of major-version bump that requires real source changes and pays off in simplicity.security_update_not_possible due to tslint's transitive pins on vulnerable dependency majors — solved by adding explicit npm overrides to force the safe versions through.winget install unhappychoice.gittype — a meaningful distribution milestone for a Rust CLI tool.