#2: v0.3.0

  • #206 — Installation and limitations docs: Added installation guidance for Zed, Neovim, and VS Code forks, and clarified how analysis of unsaved edits works.

  • #207 — Workspace initialization compatibility: Fixed startup for editors that provide their project through the older rootUri or rootPath fields instead of workspace folders.

  • #209 — Initialization follow-up: Simplified the workspace-root fallback introduced in #207 and added regression coverage.

  • #211 — Code folding: Added syntax-aware folding for Rust code, comment blocks, and import groups, allowing editors to collapse these regions accurately.

  • #212 — Test infrastructure cleanup: Consolidated fixtures and snapshots, reorganized cache tests, and removed obsolete APIs and testing utilities, reducing maintenance overhead.

  • #213 — Analysis and indexing architecture: Centralized analysis of unsaved bodies, standardized query cancellation, and unified body construction across indexing and on-demand analysis. This lets bodies built on demand work alongside deferred indexing.

  • #214 — Richer documentation support: Added Rust syntax highlighting inside doc comments and resolved rustdoc links in comments and hover documentation. Documentation links now support hover information and navigation to the referenced item.

  • #215 — Benchmark infrastructure cleanup: Removed the slower Gungraun/Callgrind benchmark infrastructure, with CodSpeed continuing to provide performance tracking.

  • #216 — Faster CI: Improved caching and reused server builds across CI jobs, avoiding repeated compilation. Also canceled superseded PR runs and reduced Renovate churn.

  • #217 — LSP dependency modernization: Updated tower-lsp-server and migrated protocol types to gen-lsp-types, temporarily using a fork for a required upstream fix.

  • #219 — Internal simplification: Reorganized the body, type, semantic, and project layers around clearer responsibilities, consolidated span representations, and reduced duplicated syntax traversal.

  • #220 — Return to upstream LSP server: Switched back to the official tower-lsp-server dependency after the required fix landed upstream.

  • #221 — Naming consistency: Made the README consistently capitalize the project name as “Rust Glancer.”

  • #223 — Optimized distribution builds: Added a dedicated distribution profile with full link-time optimization and a single codegen unit, enabling stronger optimization across crate boundaries for published binaries.

  • #224 — Lower idle memory after indexing: Improved reallocation of retained metadata and explicitly forced mimalloc collection after indexing, allowing more fragmented memory to be returned before the server goes idle.

  • #225 — Faster type inference: Replaced repeated whole-body inference passes with recursive inference, reducing redundant work and simplifying the implementation. Also fixed startup status reporting so clients reliably know when background indexing has finished.

  • #226 — Stronger code quality tooling: Introduced project-specific Dylint checks and stricter Clippy and formatting rules, then applied them throughout the codebase.

  • #227 — Updated rust-analyzer components: Refreshed the vendored rust-analyzer components, lexer dependencies, and generated syntax code, incorporating newer upstream parsing and macro infrastructure.

  • #229 — New trait solver: Replaced Chalk and much of the custom inference machinery with Rust’s next-generation trait solver and compiler-compatible working types. This improved generic and associated-type inference while reducing duplicated logic.

  • #230 — Readable hover signatures: Added Rust-aware formatting for function and method signatures, wrapping long parameter lists and where clauses. Hover cards also preserve clear spacing between the item path and signature.

  • #231 — Navigate directly to module files: Go to Definition on mod foo; now opens the module’s defining file, such as foo.rs.

  • #232 — Reliable builtin macro types: Simplified type resolution for builtin macros such as format_args! and option_env! by identifying their result types through compiler language items, preventing local names from interfering.

  • #234 — Standard derive support: Added analysis support for compiler-provided derives such as Clone, Default, Debug, and comparison traits, making derived methods and trait bounds available without executing procedural macros. Also corrected edition-specific preludes and improved trait matching around unresolved types.

  • #236 — Navigate to the relevant trait implementation: Go to Implementation now follows the trait implementation matching the call’s receiver and arguments, fixing cases that previously jumped to the type definition.

  • #237 — Correct types for value-producing breaks: Fixed inference for labeled blocks and loop expressions whose result comes from break, including routing labeled breaks to the correct enclosing construct.

  • #239 — Proper inference for ?, ranges, and indexing: Integrated these operations into type inference through their real language items and trait relationships, replacing special-case approximations. This improves inference for custom Try and indexing implementations, slicing, and range endpoints.

  • #240 — Find all trait-method implementations: Fixed implementation searches on trait methods to return all relevant implementations rather than only the one selected for a particular call.