Skip to content

v1.4.5

Choose a tag to compare

@github-actions github-actions released this 17 Mar 17:41
· 17 commits to main since this release

Highlights

This release brings a major type resolution overhaul (Phases 4–6), Ruby language support, a database migration from KuzuDB to LadybugDB, and significant performance optimizations to the ingestion pipeline.


Type Resolution System (Phases 4–6)

The type resolution pipeline now covers 12 languages with deep support for receiver-constrained call resolution:

  • Phase 4 — Nullable unwrapping, for-loop element typing, assignment chain propagation (#310)
  • Phase 5 — Chained method calls, pattern matching, class-as-receiver dispatch (#315)
  • Phase 6 — Container descriptors (Map keys vs values), recursive pattern binding (C# is, Kotlin when/is), for-loop Tier 1c across all languages (#318)
    • C# nested member foreach (this.data.Values)
    • C++ pointer dereference range-for (*usersPtr)
    • Java this.data.values() field access
    • PHP $this->property foreach member access
    • Position-indexed branch-local narrowing for Kotlin smart casts

Performance Optimizations

  • Worker pool threshold — skip thread pool for small repos (<15 files or <512KB), saving 100–400ms
  • AST walk pruningSKIP_SUBTREE_TYPES skips leaf-only subtrees (strings, comments, literals)
  • Pre-computed interestingNodeTypes — single Set.has() replaces 3 checks per AST node
  • fastStripNullable — fast-path nullable check for simple identifiers (90%+ of lookups)
  • extractFunctionName refactor — replace .children?.find() with manual for loops to eliminate array allocations
  • skipGraphPhases pipeline option — skip MRO/community/process phases for faster test runs

New Features

  • Ruby language support for CLI and web (#111) by @candidosales
  • TypeEnvironment API with constructor inference, self/this/super/base/parent resolution (#274)
  • Return type inference with JSDoc, PHPDoc, and YARD doc-comment parsing (#284)
  • .gitignore and .gitnexusignore support during file discovery (#231) by @ivkond and @jecanore
  • Codex MCP configuration documentation (#236) by @ZakAnun
  • Type resolution system documentation with architecture guide and roadmap

Infrastructure

  • Migrated from KuzuDB to LadybugDB v0.15 (#275) by @candidosales
  • hookTimeout: 120000 in vitest config for CI reliability

Bug Fixes

  • Same-directory Python import resolution (#328) by @cnighut
  • Ruby method-level call resolution, HAS_METHOD edges, and dispatch table (#278)
  • Dynamic agent skill discovery and installation in CLI (#270) by @cnighut
  • Template string incorrectly included in AST pruning set (contains interpolated expressions)

What's Changed

🚀 Features

  • feat(ruby): Add Ruby language support for CLI and web by @candidosales in #111
  • feat: TypeEnvironment API with constructor inference, self/this/super resolution by @magyargergo in #274
  • feat: return type inference, doc-comment parsing, and per-language type extractors by @magyargergo in #284
  • feat(ingestion): respect .gitignore and .gitnexusignore during file discovery by @ivkond and @jecanore in #231
  • feat: Phase 4 type resolution — nullable unwrapping, for-loop typing, assignment chains by @magyargergo in #310
  • feat: Phase 5 type resolution — chained calls, pattern matching, class-as-receiver by @magyargergo in #315
  • feat: Phase 6 type resolution — for-loop Tier 1c, pattern matching, container descriptors by @magyargergo in #318

⚡ Performance

  • perf: worker pool threshold, AST walk pruning, fastStripNullable, extractFunctionName refactor

🔧 Infrastructure

🐛 Bug Fixes

  • fix(cli): dynamically discover and install agent skills by @cnighut in #270
  • fix(ruby): method-level call resolution, HAS_METHOD edges, and dispatch table by @magyargergo in #278
  • fix(resolver): fix for same-directory python imports by @cnighut in #328

New Contributors

Full Changelog: v1.4.0...v1.4.5