Skip to content

v0.6.0 - Lambda Type Inference & Developer Tooling

Choose a tag to compare

@erudenko erudenko released this 10 Dec 18:04
v0.6.0
bee3eba

Highlights

4-Layer Lambda Type Inference Architecture

  • Layer 1: Local go/types inference (existing)
  • Layer 2: dgo-specific signatures for all 26 functions (Map, Filter, Reduce, GroupBy, etc.)
  • Layer 3: Generic type unification for third-party libraries
  • Layer 4: gopls fallback (configurable via dingo.toml)

Lambda types are now correctly inferred:

products := dgo.Filter(inventory, |p| p.InStock && p.Price < 100.0)
// Previously: func(p any) any
// Now: func(p Product) bool

Source Map System (dmap v2)

  • Binary .dmap format for efficient LSP position translation
  • TransformTracker for robust line-level mappings
  • Accurate hover/go-to-definition across all Dingo syntax

Developer Tooling

  • dingo lint - Linter with refactoring suggestions
  • dingo format - Code formatter preserving structure
  • Neovim plugin (dingo.nvim) with LSP, tree-sitter, and tooling integration
  • SQLite structured logging for LSP debugging

Syntax Changes

  • BREAKING: guard let migrated to guard := syntax
  • Fail-fast detection for unresolved lambda types

What's Changed

  • feat(typechecker): 4-layer lambda type inference architecture
  • feat(sourcemap): TransformTracker for robust line-level mappings
  • feat(sourcemap): Binary .dmap format
  • feat(lint,format): Add Dingo linter, formatter, and refactoring system
  • feat(nvim): Neovim plugin with LSP and tree-sitter
  • feat(lsp): SQLite structured logging
  • feat(guard)!: Migrate from 'guard let' to 'guard' syntax
  • feat(tuple): Add tuple destructuring
  • fix(lsp): Correct line translation for transformed regions
  • fix(format): Preserve source line structure

Full Changelog: v0.5.0...v0.6.0