Skip to content

Latest commit

 

History

History
820 lines (482 loc) · 79.6 KB

File metadata and controls

820 lines (482 loc) · 79.6 KB

Changelog

All notable changes to Floe will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.5.3 (2026-04-19)

Bug Fixes

0.5.2 (2026-04-19)

Features

  • re-trigger release-please for contextual lambda typing fix (ec476a2)

0.5.1 (2026-04-19)

Bug Fixes

0.5.0 (2026-04-19)

⚠ BREAKING CHANGES

  • [#1214] binding + arrow redesign — def-form functions, single -> arrow (#1223)
  • [#1208] type system redesign — universal =, => in type positions, OneOf/Intersect (#1222)

Features

Bug Fixes

0.4.8 (2026-04-18)

Features

Bug Fixes

Performance Improvements

0.4.7 (2026-04-04)

Bug Fixes

0.4.6 (2026-04-04)

Bug Fixes

0.4.5 (2026-04-04)

Bug Fixes

0.4.4 (2026-04-04)

Bug Fixes

  • normalize repository URLs in package.json files (#1011) (370113c)

0.4.3 (2026-04-04)

Features

Bug Fixes

  • [#976] Error when named import does not exist in module (#1000) (3d60062)
  • [#978] Make tsgo required when importing from .ts files (#999) (94a6933)
  • [#994] Formatter preserves string union types instead of deleting them (#996) (3e66961)

0.4.2 (2026-04-04)

Features

Bug Fixes

  • [#982] Error on bridge type syntax without TS import reference (#988) (6c056c9)
  • Use npx npm@latest for provenance publish (#993) (3a89aef)

0.4.1 (2026-04-04)

Bug Fixes

  • [#985] Parser errors on hyphenated JSX attribute names like aria-label (#986) (04b7080)
  • Remove unnecessary npm upgrade from release workflow (#983) (52031bf)

0.4.0 (2026-04-04)

⚠ BREAKING CHANGES

  • [#979] Remove auto-await from untrusted async imports (#980)

Features

Bug Fixes

  • [#977] Improve tsgo probe for object destructuring type resolution (#981) (b0d988d)
  • Match arm block IIFEs missing return on last expression (#974) (9c725fa)
  • Nested fn declarations not inferred as async with Promise.await (#971) (266de21)

0.3.0 (2026-04-03)

⚠ BREAKING CHANGES

  • [#963] [#964] Replace trusted with throws, remove try keyword (#965)

Features

Bug Fixes

0.2.1 (2026-04-02)

Features

Bug Fixes

  • [#953] Warn when try wraps a Floe function call (#961) (c6034ca)
  • [#957] Preserve type args in inlined probe for local-const member calls (#960) (84a98d7)
  • include suggestion in TryOnPromise warning message (c92d158)

0.2.0 (2026-04-02)

⚠ BREAKING CHANGES

  • [#944] Replace async/await keywords with Promise.await stdlib function (#947)

Features

  • [#944] Replace async/await keywords with Promise.await stdlib function (#947) (713b805)

Bug Fixes

  • [#906] Dot shorthand with captured variables resolves outer references as unknown (#946) (851f586)

0.1.43 (2026-04-02)

Features

  • [#938] LSP hover on pipe operator shows the piped value type (#942) (824dd6d)

Bug Fixes

  • [#930] useCallback return type shows unknown when tsgo returns any for callback body (#931) (24595b5)
  • [#932] Warn when a binding resolves to unknown type (#943) (ffe92ee)
  • [#933] Formatter destroys object destructuring rename syntax (#934) (6a78e57)
  • [#935] Checker accepts non-Option/Result/Array values in stdlib calls without error (#940) (9a8e804)

0.1.42 (2026-04-02)

Bug Fixes

  • [#919] LSP hover shows type var instead of resolved type for render prop params (#921) (32469e5)
  • [#919] Route _jsxc children probes through specifier map (#923) (355c3f5)
  • [#926] JSX props are not type-checked against component prop types (#929) (46852d8)
  • [#927] LSP completions missing for resolved Foreign types (#928) (6b45426)

0.1.41 (2026-04-01)

Bug Fixes

0.1.40 (2026-04-01)

Bug Fixes

  • [#911] Object destructuring from trusted TS imports resolves fields as unknown (#912) (ffbf347)

0.1.39 (2026-04-01)

Bug Fixes

  • [#909] Record fields with defaults should be optional in generated TypeScript types (#910) (0c30c31)
  • Replace fictional stdlib calls in pipes example with real syntax (3738fe0)

0.1.38 (2026-04-01)

Features

Bug Fixes

  • [#870] LSP hover shows wrong type for literal patterns in match (#882) (32d2406)
  • [#871] Warn on binding patterns for finite exhaustive types in match (#885) (d08c293)
  • [#887] Treat type-only TS exports as Foreign instead of Unknown (#890) (0c36ed1)
  • [#888] Resolve non-exported TS interfaces referenced in probe output (#892) (0bf8bb6)
  • [#889] Fix typeof resolution, per-field probes, and pipe type var substitution (#891) (aaaceb3)
  • [#893] Prefer checker inference over Unknown probes and register npm type defs (#894) (babd601)
  • [#898] Use resolve_type_to_concrete for object destructured bindings (#899) (f2a2aff)
  • Replace sort_by with sortBy in homepage and README (fc08ee7)

0.1.37 (2026-04-01)

Bug Fixes

  • [#869] Checker does not type-check literal patterns in match (#874) (fae7c90)
  • [#877] Emit async IIFEs for match arms containing await (#879) (ace8d28)

0.1.36 (2026-04-01)

Bug Fixes

  • [#834] Checker does not validate tuple pattern arity in match (#836) (80af889)
  • [#842] Checker does not validate variant pattern field count in match (#856) (6a1daaa)
  • [#849] Probe generator misses consts inside use <- callbacks (#851) (cc08f15)
  • [#852] Infer callback parameter types for stdlib calls (#855) (78faf7e)
  • [#853] Propagate async context through use <- desugaring (#857) (d783e1c)
  • [#867] Wrap tsgo probe type in Result when expression has try (#868) (1dafae1)
  • rename Cloudflare Pages project to floe-site (69176e0)
  • use npm as packageManager for wrangler-action (00fbd68)
  • use npx for wrangler install to avoid pnpm lockfile conflict (b0c35cc)
  • use npx wrangler directly instead of wrangler-action (30d6e7f)

0.1.35 (2026-04-01)

Features

  • [#822] Add Bool.guard, Option.guard, Result.guard and stdlib additions (#823) (559f98a)

Bug Fixes

  • [#812] Duplicate import names should error (#833) (2e3d97e)
  • [#819] Use explicit type args for unresolved generic DTS functions (#820) (60028ec)
  • reorder type definitions so User is defined before Status (e7c24ae)
  • use single props object for React component examples in docs (e8a8f86)

0.1.34 (2026-03-31)

Bug Fixes

  • [#804] Suggest try await instead of await try when Result wraps Promise (#813) (e377ed6)
  • [#806] Object literals with variant values inferred as unknown (#808) (b8c3b50)
  • [#811] Reject non-type values in type annotations (#814) (1ecfeec)

0.1.33 (2026-03-31)

Features

  • [#758] Add Record.get to stdlib for dynamic key access on plain objects (#794) (6ec22d2)
  • [#799] Show default values for optional parameters in function signatures (#801) (e0ea91a)

Bug Fixes

  • [#733] Dot shorthand works as general function arguments (#793) (92baa16)
  • [#734] Checker silently accepts unknown where concrete types are expected (#800) (e50cdbc)
  • [#795] Remove throwing unwrap functions, add or/values/partition helpers (#798) (f3cc9a7)

0.1.32 (2026-03-31)

Features

  • [#767] Add positional union variant fields and newtype paren syntax (#777) (62f5d67)
  • [#771] Refactor Option from compiler intrinsic to regular union type (#786) (c74e699)
  • [#772] Refactor Result from compiler intrinsic to regular union type (#788) (973e591)

Bug Fixes

  • [#778] Formatter drops keyword member names after dot (#782) (052c86a)
  • [#779] Imported TS functions with optional params incorrectly require all arguments (#783) (92e7f95)
  • [#781] Imported TS union types resolve to unknown instead of strict union (#787) (dbb94e3)
  • use pnpm install in docs deploy workflow (9664f5d)

0.1.31 (2026-03-31)

Bug Fixes

  • [#755] [#756] Support destructured parameters with type annotations and error on unsupported syntax (#759) (548b139)
  • [#757] break multiline JSX arrow bodies onto indented lines (#764) (6de16f8)
  • [#760] Render prop callback parameters inferred as function type instead of individual params (#766) (87c2aa8)
  • [#762] Extract shared destructure resolution helper and fix silent Unknown in arrow params (#765) (8e7ed73)

0.1.30 (2026-03-31)

Bug Fixes

  • use mangled name for bare for-block function calls (#747) (c4e475f)

0.1.29 (2026-03-31)

Features

  • [#728] Infer callback parameter types from npm union prop types (#731) (f9bd450)

Bug Fixes

  • [#729] Formatter inconsistently breaks array elements with constructor calls (#730) (9999106)

0.1.28 (2026-03-31)

Bug Fixes

  • transform JSX to JS in vite plugin before import analysis (#726) (12533dc)

0.1.27 (2026-03-30)

Features

  • [#155] LSP autocomplete for type-directed pipe resolution (#724) (670508a)

0.1.26 (2026-03-30)

Features

  • [#597] Enforce boolean-only operands for &&, ||, and ! (#689) (157cd6a)
  • [#690] Support Record<K, V> from TS interop as Map with bracket-access codegen (#698) (fe30639)

Bug Fixes

0.1.25 (2026-03-30)

Features

Bug Fixes

0.1.24 (2026-03-30)

Features

Bug Fixes

  • [#584] Member access hover shows resolved field types (#667) (b78aab2)
  • [#641] LSP hover shows nothing for record types with spreads (#662) (004e58b)
  • [#648] Codegen emits value import for type-only exports used in for-block params (#658) (2702e5d)

0.1.23 (2026-03-30)

Features

  • [#650] Change function type arrow from => to -> in type position (#657) (4b5c9c1)

Bug Fixes

  • [#594] Vite plugin resolves .fl file when .ts file was intended for extensionless imports (#655) (c22a1c9)
  • [#644] Codegen name collision for same-named functions in different for-blocks (#647) (18dd0f9)

0.1.22 (2026-03-29)

Bug Fixes

  • [#639] Cross-file import loses npm types referenced in function signatures (#642) (64b58b1)

0.1.21 (2026-03-29)

Features

Bug Fixes

0.1.20 (2026-03-29)

Features

Bug Fixes

  • [#592] Prevent tsgo probe from emitting stray .d.ts files (#609) (fc96cf8)
  • [#612] Probe inlining drops intermediate member access in chained calls (#613) (cb79b72)
  • [#614] Use inlined probe results for destructured const bindings (#620) (b84512b)
  • [#615] Intersection type fails after generic type application (#619) (1b8e7f0)
  • [#621] Probe counter blocks reuse of same-named probes across functions (#622) (e848ed1)
  • [#623] Async fn return type check does not unwrap Promise (#626) (afb4776)
  • [#624] Expand opaque named types via per-field probe destructuring (#627) (e9f9c81)
  • [#629] Unify Result types with unknown params across match arms (#633) (f90b284)

0.1.19 (2026-03-29)

Features

  • [#544] Add type alias probes for complex .d.ts type resolution (#577) (d873a0b)

Bug Fixes

  • [#553] LSP hover on None shows concrete type from context (#579) (94d85cd)
  • [#580] Await on Promise with union return type and foreign type member access (#582) (56643ce)
  • [#583] Match pattern narrowing and object destructuring for foreign types (#587) (1e94055)
  • [#590] Emit import type for type-only npm import specifiers (#591) (f4ffe05)
  • [#595] Lexer does not support unicode escape sequences in strings (#598) (65c8ac3)
  • [#602] [#603] Pipe map lambda inference and for-block import of foreign types (#604) (caadcc9)

0.1.18 (2026-03-29)

Features

  • [#574] Log version, executable path, and project dir on LSP startup (#575) (1e78a6f)

0.1.17 (2026-03-29)

Features

Bug Fixes

  • [#562] Allow concrete values to be assignable to Option<T> (#570) (22c23fe)
  • [#564] Forward tsconfig paths to probe and parse JSONC tsconfig files (#573) (4f1185f)

0.1.16 (2026-03-29)

Features

Bug Fixes

  • [#547] Resolve typeof for relative TS imports with inferred return types (#561) (9d129da)
  • [#552] Show type info on hover for lambda parameters (#563) (0f52812)

0.1.15 (2026-03-29)

Bug Fixes

  • [#507] LSP hover on 'from' keyword shows Array.from instead of import syntax (#531) (95eaef6)
  • [#533] LSP completion gaps - dot-access fields, import paths, context suppression (#535) (78251c1)
  • [#536] Resolve correct for-block overload based on receiver type (#539) (09b454a)
  • [#537] Resolve typeof function types from npm imports (#549) (588f91a)
  • [#538] Validate argument count for stdlib method calls (#541) (379f613)
  • [#540] Console.log/warn/error/info/debug should be variadic (#545) (d119510)
  • [#550] LSP test script sleeps full timeout on every collect_notifications call (#551) (7c74d16)

0.1.14 (2026-03-29)

Features

  • [#294] Add mock<T> compiler built-in for test data generation (#473) (3614d2f)
  • [#422] Generate .d.ts stubs so TS resolves .fl imports (#429) (95c0f12)
  • [#475] Add default values for type fields (#479) (57bd5b8)
  • [#498] Output compiled files to .floe/ directory instead of alongside source (#502) (3821854)
  • [#499] Auto-detect x?: T | null in .d.ts imports as Settable<T> (#508) (7e166a7)
  • [#509] Add Date module to stdlib (#517) (e8fc12a)
  • [#511] Resolve types from local .ts/.tsx files imported in .fl files (#515) (257a27a)
  • add LSP hover and integration tests for generic functions (95728e9)
  • docs and syntax highlighting for generic functions (719381c)

Bug Fixes

  • [#384] Preserve user blank lines between statements in blocks (906028f)
  • [#403] Improve LSP hover information across the board (03e512b)
  • [#404] Checker - validate named arguments in function calls (cb2e1e6)
  • [#407] Formatter preserves trusted keyword and destructured params (b6ff269)
  • [#480] Fix docs build and Open VSX publish CI failures (#481) (c95af9c)
  • [#486] Widen vite-plugin peer dependency to support Vite 7 and 8 (#487) (27eae45)
  • [#489] Bundle VS Code extension with esbuild, fix icon, add restart command (#490) (abc9beb)
  • [#491] Support JSX comments {/* ... */} (#497) (974f37f)
  • [#492] Fix JSX formatter to add newlines around match expressions and multi-line tag children (#500) (a7ac4d5)
  • [#494] Add resolveId hook to vite plugin for .fl import resolution (#495) (963c97e)
  • [#501] Tell Vite that compiled .fl output is TypeScript (#505) (4fd6475)
  • [#506] LSP resolves tsconfig path aliases instead of reporting false errors (#510) (2facdc6)
  • [#512] Vite plugin cross-version type compatibility and .d.fl.ts output (#514) (be4cb66)
  • [#512] Write .d.fl.ts next to source and emit from --emit-stdout (#519) (1dfda9d)
  • [#516] For-block functions from different types clash when both imported (#518) (3b418cb)
  • [#520] Option match uses null checks, probe preserves nullability (#523) (ef5ee9b)
  • [#521] Formatter deletes // comments inside blocks (#522) (389d6e0)
  • [#525] Break after -> in match arms when JSX body has multiline props (#528) (f48ac28)
  • add id-token permission for npm trusted publishing (#445) (5eec3f0)
  • add VS Code icon, fix npm publish, bump action versions (#451) (7133ba2)
  • correct ignoreDeprecations value to 6.0 for TypeScript 7 (#440) (505d6fb)
  • formatter preserves trusted keyword and destructured params (4387307)
  • formatter preserves tuple index access and add pnpm install reminder (f46f6e6)
  • improve LSP hover information across the board (a9adeb7)
  • npm trusted publishing and Open VSX publisher/LICENSE (#453) (1507f92)
  • pass tag name to release workflow for correct ref checkout (#448) (019745a)
  • preserve user blank lines between statements in blocks (99bc8ed)
  • stop release workflow from overwriting release-please changelog (#430) (b7d5d14)
  • trigger release workflow directly from release-please (#444) (3ff34a2)
  • use plain v* tags instead of floe-v* for releases (#425) (bc53113)
  • validate named argument labels in function calls (778395d)
  • VS Code extension publisher and engine version for Open VSX (#447) (5475113)

0.1.13 (2026-03-29)

Bug Fixes

  • [#520] Option match uses null checks, probe preserves nullability (#523) (ef5ee9b)
  • [#521] Formatter deletes // comments inside blocks (#522) (389d6e0)

0.1.12 (2026-03-28)

Features

  • [#498] Output compiled files to .floe/ directory instead of alongside source (#502) (3821854)
  • [#499] Auto-detect x?: T | null in .d.ts imports as Settable<T> (#508) (7e166a7)
  • [#509] Add Date module to stdlib (#517) (e8fc12a)
  • [#511] Resolve types from local .ts/.tsx files imported in .fl files (#515) (257a27a)

Bug Fixes

  • [#492] Fix JSX formatter to add newlines around match expressions and multi-line tag children (#500) (a7ac4d5)
  • [#501] Tell Vite that compiled .fl output is TypeScript (#505) (4fd6475)
  • [#506] LSP resolves tsconfig path aliases instead of reporting false errors (#510) (2facdc6)
  • [#512] Vite plugin cross-version type compatibility and .d.fl.ts output (#514) (be4cb66)
  • [#512] Write .d.fl.ts next to source and emit from --emit-stdout (#519) (1dfda9d)
  • [#516] For-block functions from different types clash when both imported (#518) (3b418cb)

0.1.11 (2026-03-28)

Features

Bug Fixes

  • [#486] Widen vite-plugin peer dependency to support Vite 7 and 8 (#487) (27eae45)
  • [#489] Bundle VS Code extension with esbuild, fix icon, add restart command (#490) (abc9beb)
  • [#491] Support JSX comments {/* ... */} (#497) (974f37f)
  • [#494] Add resolveId hook to vite plugin for .fl import resolution (#495) (963c97e)

0.1.10 (2026-03-28)

Bug Fixes

0.1.9 (2026-03-28)

Features

  • [#294] Add mock<T> compiler built-in for test data generation (#473) (3614d2f)

0.1.8 (2026-03-28)

Bug Fixes

  • npm trusted publishing and Open VSX publisher/LICENSE (#453) (1507f92)

0.1.7 (2026-03-28)

Bug Fixes

  • add VS Code icon, fix npm publish, bump action versions (#451) (7133ba2)

0.1.6 (2026-03-28)

Bug Fixes

  • pass tag name to release workflow for correct ref checkout (#448) (019745a)

0.1.5 (2026-03-28)

Bug Fixes

  • add id-token permission for npm trusted publishing (#445) (5eec3f0)
  • trigger release workflow directly from release-please (#444) (3ff34a2)
  • VS Code extension publisher and engine version for Open VSX (#447) (5475113)

0.1.4 (2026-03-28)

Bug Fixes

  • correct ignoreDeprecations value to 6.0 for TypeScript 7 (#440) (505d6fb)

0.1.3 (2026-03-28)

Features

Bug Fixes

  • stop release workflow from overwriting release-please changelog (#430) (b7d5d14)

0.1.2 (2026-03-28)

Features

  • add LSP hover and integration tests for generic functions (95728e9)
  • docs and syntax highlighting for generic functions (719381c)

Bug Fixes

  • [#384] Preserve user blank lines between statements in blocks (906028f)
  • [#403] Improve LSP hover information across the board (03e512b)
  • [#404] Checker - validate named arguments in function calls (cb2e1e6)
  • [#407] Formatter preserves trusted keyword and destructured params (b6ff269)
  • formatter preserves trusted keyword and destructured params (4387307)
  • formatter preserves tuple index access and add pnpm install reminder (f46f6e6)
  • improve LSP hover information across the board (a9adeb7)
  • preserve user blank lines between statements in blocks (99bc8ed)
  • use plain v* tags instead of floe-v* for releases (#425) (bc53113)
  • validate named argument labels in function calls (778395d)

0.1.1 (2026-03-28)

Features

  • add LSP hover and integration tests for generic functions (95728e9)
  • docs and syntax highlighting for generic functions (719381c)

Bug Fixes

  • [#384] Preserve user blank lines between statements in blocks (906028f)
  • [#404] Checker - validate named arguments in function calls (cb2e1e6)
  • [#407] Formatter preserves trusted keyword and destructured params (b6ff269)
  • formatter preserves trusted keyword and destructured params (4387307)
  • formatter preserves tuple index access and add pnpm install reminder (f46f6e6)
  • preserve user blank lines between statements in blocks (99bc8ed)
  • validate named argument labels in function calls (778395d)

[Unreleased]

Added

  • Pipe operator (|>) with first-arg default and _ placeholder
  • Exhaustive pattern matching with match expressions
  • Result (Ok/Err) and Option (Some/None) types
  • ? operator for Result/Option unwrapping
  • Tagged unions with multi-depth matching
  • Branded and opaque types
  • Type constructors with named arguments and defaults
  • Pipe lambdas (|x| expr) and dot shorthand (.field)
  • JSX support with inline match and pipe expressions
  • Language server with diagnostics, completions, and go-to-definition
  • Code formatter (floe fmt)
  • Vite plugin for dev/build integration
  • VS Code extension with syntax highlighting and LSP
  • Browser playground (WASM)
  • floe init project scaffolding
  • floe watch for auto-recompilation