Skip to content

Releases: ordo-one/FuzzyMatch

1.3.2

16 Mar 04:43
988f002

Choose a tag to compare

1.3.2 (2026-03-16)

image

Features

  • example: add parameter inspector to FuzzySearch app (20af321)
  • patch: Add live parameter inspector to FuzzySearch example app (988f002)

Bug Fixes

  • clamp scores to 1.0, live slider updates, and UI polish (d84c06e)
  • example: fix inspector/searchable layout and restore algorithm picker (57950bc)

1.3.1

15 Mar 09:49
8e03c55

Choose a tag to compare

1.3.1 (2026-03-15)

FuzzySearch — Interactive Example App

A new macOS example app for exploring how FuzzyMatch works interactively. It loads the full 271K financial instrument corpus and live-searches as you type, showing the top 20 results with highlighted matched characters. Switch between Edit Distance and Smith-Waterman algorithms to see how they rank differently, or use File > Open (Cmd+O) to load your own newline-delimited data.

FuzzySearch example app

Open the Xcode project and hit Run:

open Examples/FuzzySearch/FuzzySearch.xcodeproj

Commits

  • add FuzzySearch macOS example app with live search and highlighting (84892d8)
  • add File > Open support for arbitrary newline-delimited text files (2e96f85)
  • add shared Xcode scheme with Release config and no debugger (3834965)
  • add FuzzySearch example app section with screenshot to README (bd89bd8)

1.3.0

13 Mar 04:58
3ba2c5e

Choose a tag to compare

1.3.0 (2026-03-13)

New API

attributedHighlight(_:against:applying:) — styled AttributedString

Returns an AttributedString with matched ranges styled via the caller's closure, or nil if no match. Requires Foundation (#if canImport(Foundation)).

Foundation (cross-platform):

let matcher = FuzzyMatcher()

if let text = matcher.attributedHighlight("format:modern", against: "mod", applying: {
    $0.inlinePresentationIntent = .stronglyEmphasized
}) {
    // "mod" is bold, rest is unstyled
}

SwiftUI (Apple platforms):

if let text = matcher.attributedHighlight("format:modern", against: "mod", applying: {
    $0.foregroundColor = .orange
    $0.font = .body.bold()
}) {
    Text(text) // "mod" in orange bold
}

Both methods also accept a pre-prepared FuzzyQuery for repeated use:

let query = matcher.prepare("mod")
let result = matcher.attributedHighlight(candidate, against: query, applying: { ... })

highlight(_:against:) — matched character ranges

Returns [Range<String.Index>] of matched character positions, or nil if no match. Use this when you need full control over rendering or are not using AttributedString.

let matcher = FuzzyMatcher()
let query = matcher.prepare("mod")

if let ranges = matcher.highlight("format:modern", against: query) {
    // ranges covers the "mod" in "modern"
    for range in ranges {
        print(candidate[range]) // "mod"
    }
}

Convenience overload accepting a raw query string:

if let ranges = matcher.highlight("format:modern", against: "mod") { ... }

Features

  • add attributedHighlight() convenience API for styled AttributedString (3d227fd)
  • minor: Add highlight(_:against:) API for matched character ranges (3ba2c5e)
  • minor: Add highlight(_:against:) API for matched character ranges (#16) (685f698)

Bug Fixes

  • anchor prefix-typo highlights at position 0 via prefixMode traceback (bf4039d)
  • guard attributedHighlight() API behind #if canImport(Foundation) (161c66c)
  • Linux compatibility for AttributedString tests and var warning (2af3e9a)
  • resolve highlight() API bugs — transposition truncation, score/highlight divergence, acronym mismatch (cd692b0)

1.2.2

04 Mar 07:05
3b096d7

Choose a tag to compare

1.2.2 (2026-03-04)

Bug Fixes

  • patch: resolve overlapping exclusive access in library evolution mode (3b096d7)
  • use withUnsafeMutablePointer to resolve overlapping exclusive access in library evolution mode (ce37103)

1.2.0

03 Mar 16:15
95961d8

Choose a tag to compare

1.2.0 (2026-03-03)

Features

  • minor: Support legacy Apple operating systems (macOS 14+, iOS 17+) (95961d8)

Bug Fixes

  • scope escaped buffer pointers + guard empty lowercaseUTF8 + update benchmarks (9b7bc6c)
  • support Linux in comparison benchmark harnesses (d5e99a4)
  • use UTF-8 API outputs in comparison table generation (fc58e38)

Performance Improvements

  • optimize UnsafeBufferPointer hot paths to recover Span-era throughput (93cfb01)
  • use UTF-8 hot path in fuzzygrep + update benchmarks and docs (256afa8)

Reverts

  • remove synced CI config files (7a87c42)

1.1.0

01 Mar 18:55
05d05de

Choose a tag to compare

What's Changed

  • chore: Fix prefilter formulas to use effectiveMaxEditDistance consistently by @hassila in #7
  • feat(minor): add confusable-character normalization by @hassila in #11

Full Changelog: 1.0.5...1.1.0

1.0.5

13 Feb 10:42
8059251

Choose a tag to compare

1.0.5 (2026-02-13)

1.0.4

13 Feb 09:33
ec451ad

Choose a tag to compare

1.0.4 (2026-02-13)

1.0.3

13 Feb 08:17
7efce4f

Choose a tag to compare

1.0.3 (2026-02-13)

1.0.2

13 Feb 07:46
e37a27a

Choose a tag to compare

What's Changed

  • chore(patch): M4 updated numbers and watchOS support by @hassila in #3

Full Changelog: 1.0.1...1.0.2