The Swift Package Index logo.Swift Package Index

Has it really been five years since Swift Package Index launched? Read our anniversary blog post!

Build Information

Failed to build Ligature, reference main (c94079), with Swift 6.1 for Android on 30 May 2025 10:35:25 UTC.

Build Command

bash -c docker run --pull=always --rm -v "checkouts-4609320-0":/host -w "$PWD" registry.gitlab.com/finestructure/spi-images:android-6.1-latest swift build --swift-sdk aarch64-unknown-linux-android24 2>&1

Build Log

========================================
RunAll
========================================
Builder version: 4.63.1
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/ChimeHQ/Ligature.git
Reference: main
Initialized empty Git repository in /host/spi-builder-workspace/.git/
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: 	git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: 	git branch -m <name>
From https://github.com/ChimeHQ/Ligature
 * branch            main       -> FETCH_HEAD
 * [new branch]      main       -> origin/main
HEAD is now at c940798 move position(...) def into extension
Cloned https://github.com/ChimeHQ/Ligature.git
Revision (git rev-parse @):
c9407984c5e9185098cfef6b2bc8dd03a4bbd5bb
SUCCESS checkout https://github.com/ChimeHQ/Ligature.git at main
========================================
Build
========================================
Selected platform:         android
Swift version:             6.1
Building package at path:  $PWD
https://github.com/ChimeHQ/Ligature.git
https://github.com/ChimeHQ/Ligature.git
WARNING: environment variable SUPPRESS_SWIFT_6_FLAGS is not set
{
  "dependencies" : [
    {
      "identity" : "glyph",
      "requirement" : {
        "branch" : [
          "main"
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/ChimeHQ/Glyph"
    },
    {
      "identity" : "rearrange",
      "requirement" : {
        "branch" : [
          "main"
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/ChimeHQ/Rearrange"
    }
  ],
  "manifest_display_name" : "Ligature",
  "name" : "Ligature",
  "path" : "/host/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "macos",
      "version" : "10.15"
    },
    {
      "name" : "ios",
      "version" : "13.0"
    },
    {
      "name" : "tvos",
      "version" : "13.0"
    },
    {
      "name" : "maccatalyst",
      "version" : "13.0"
    },
    {
      "name" : "visionos",
      "version" : "1.0"
    }
  ],
  "products" : [
    {
      "name" : "Ligature",
      "targets" : [
        "Ligature"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "LigatureTests",
      "module_type" : "SwiftTarget",
      "name" : "LigatureTests",
      "path" : "Tests/LigatureTests",
      "sources" : [
        "PlatformTests.swift",
        "TextTokenizerTests.swift"
      ],
      "target_dependencies" : [
        "Ligature"
      ],
      "type" : "test"
    },
    {
      "c99name" : "Ligature",
      "module_type" : "SwiftTarget",
      "name" : "Ligature",
      "path" : "Sources/Ligature",
      "product_dependencies" : [
        "Glyph",
        "Rearrange"
      ],
      "product_memberships" : [
        "Ligature"
      ],
      "sources" : [
        "MockTextTokenizer.swift",
        "NSTextSelection+Extensions.swift",
        "Platform.swift",
        "SourceTokenizer.swift",
        "TextDirection+Extensions.swift",
        "TextInputStringTokenizer.swift",
        "TextRange+Bounded.swift",
        "TextTokenizer.swift",
        "TextView+TextRangeCalculating.swift",
        "UTF16CodePointTextViewTextTokenizer.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "6.0"
}
Running build ...
bash -c docker run --pull=always --rm -v "checkouts-4609320-0":/host -w "$PWD" registry.gitlab.com/finestructure/spi-images:android-6.1-latest swift build --swift-sdk aarch64-unknown-linux-android24 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats 2>&1
android-6.1-latest: Pulling from finestructure/spi-images
Digest: sha256:fe1962677657b2408c217cb5cceb3c09bc1d91486e360cebbc6eee461a5945d8
Status: Image is up to date for registry.gitlab.com/finestructure/spi-images:android-6.1-latest
Fetching https://github.com/ChimeHQ/Glyph
[1/213] Fetching glyph
Fetched https://github.com/ChimeHQ/Glyph from cache (0.40s)
Fetching https://github.com/ChimeHQ/Rearrange
[1/569] Fetching rearrange
Fetched https://github.com/ChimeHQ/Rearrange from cache (0.26s)
Creating working copy for https://github.com/ChimeHQ/Glyph
Working copy of https://github.com/ChimeHQ/Glyph resolved at main (639ec58)
Creating working copy for https://github.com/ChimeHQ/Rearrange
Working copy of https://github.com/ChimeHQ/Rearrange resolved at main (e22fe9d)
Building for debugging...
[0/4] Write sources
[3/4] Write swift-version-24593BA9C3E375BF.txt
[5/23] Compiling Glyph NSTextView+Additions.swift
[6/23] Compiling Glyph NSTextRange+NSRange.swift
[7/23] Compiling Glyph NSTextLayoutFragment+Additions.swift
[8/23] Compiling Glyph NSTextLayoutManager+Additions.swift
[9/23] Compiling Glyph NSTextContainer+Additions.swift
[10/23] Emitting module Glyph
[11/23] Compiling Glyph NSLayoutManager+Additions.swift
[13/24] Compiling Rearrange Bounded.swift
[14/24] Compiling Rearrange IndexSet+ApplyMutation.swift
[15/24] Compiling Rearrange RangeMutation.swift
[16/24] Emitting module Rearrange
[17/25] Compiling Rearrange TextRangeCalculating.swift
[18/25] Compiling Rearrange NSTextRange+Bounded.swift
[19/25] Compiling Rearrange NSTextRange+NSRange.swift
[20/25] Compiling Rearrange NSRange+Convenience.swift
[21/25] Compiling Rearrange NSRange+Shift.swift
[22/25] Compiling Rearrange IndexSet+NSRange.swift
[23/25] Compiling Rearrange NSRange+ApplyMutation.swift
[24/25] Compiling Rearrange String+NSRange.swift
[25/25] Compiling Rearrange UITextRange+Convenience.swift
[27/36] Compiling Ligature TextView+TextRangeCalculating.swift
[28/37] Compiling Ligature TextRange+Bounded.swift
[29/37] Compiling Ligature TextTokenizer.swift
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:65: error: cannot find type 'TextGranularity' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                 `- error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:105: error: cannot find type 'TextDirection' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                         `- error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:131: error: cannot find type 'CGFloat' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                                                   `- error: cannot find type 'CGFloat' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:70: error: cannot find type 'TextGranularity' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                      `- error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:110: error: cannot find type 'TextDirection' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                                                              `- error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:64: error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                `- error: cannot find type 'TextGranularity' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:104: error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                        `- error: cannot find type 'TextDirection' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:68: error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                    `- error: cannot find type 'TextGranularity' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:108: error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                            `- error: cannot find type 'TextDirection' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:23:72: error: cannot find type 'TextGranularity' in scope
21 |
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
25 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:23:112: error: cannot find type 'TextDirection' in scope
21 |
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
25 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:24:93: error: 'nil' requires a contextual type
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
   |                                                                                             `- error: 'nil' requires a contextual type
25 | 	}
26 | }
error: emit-module command failed with exit code 1 (use -v to see invocation)
[30/37] Emitting module Ligature
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:8:27: error: cannot find type 'TextGranularity' in scope
 6 |
 7 | 	public enum Request: Equatable {
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                           `- error: cannot find type 'TextGranularity' in scope
 9 | 	}
10 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:8:44: error: cannot find type 'TextDirection' in scope
 6 |
 7 | 	public enum Request: Equatable {
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                                            `- error: cannot find type 'TextDirection' in scope
 9 | 	}
10 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:7:14: error: type 'MockTextTokenizer<R>.Request' does not conform to protocol 'Equatable'
 5 | 	public typealias TextRange = R
 6 |
 7 | 	public enum Request: Equatable {
   |              |- error: type 'MockTextTokenizer<R>.Request' does not conform to protocol 'Equatable'
   |              `- note: add stubs for conformance
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                           |                `- note: associated value type '<<error type>>' does not conform to protocol 'Equatable', preventing synthesized conformance of 'MockTextTokenizer<R>.Request' to 'Equatable'
   |                           `- note: associated value type '<<error type>>' does not conform to protocol 'Equatable', preventing synthesized conformance of 'MockTextTokenizer<R>.Request' to 'Equatable'
 9 | 	}
10 |
Swift.==:1:24: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'RawRepresentable'
1 | @inlinable public func == <T>(lhs: T, rhs: T) -> Bool where T : RawRepresentable, T.RawValue : Equatable
  |                        `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'RawRepresentable'
Swift.FloatingPoint.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'FloatingPoint'
1 | protocol FloatingPoint {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'FloatingPoint'
3 |
Swift.BinaryInteger.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'BinaryInteger'
1 | protocol BinaryInteger {
2 | public static func == <Other>(lhs: Self, rhs: Other) -> Bool where Other : BinaryInteger}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'BinaryInteger'
3 |
Swift._Pointer.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
1 | protocol _Pointer {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
3 |
Swift._Pointer.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
1 | protocol _Pointer {
2 | @inlinable public static func == <Other>(lhs: Self, rhs: Other) -> Bool where Other : _Pointer}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
3 |
Swift.Strideable.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'Strideable'
1 | protocol Strideable {
2 | @inlinable public static func == (x: Self, y: Self) -> Bool}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'Strideable'
3 |
Swift.StringProtocol.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'StringProtocol'
1 | protocol StringProtocol {
2 | @inlinable public static func == <RHS>(lhs: Self, rhs: RHS) -> Bool where RHS : StringProtocol}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'StringProtocol'
3 |
Swift.SIMD.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'SIMD'
1 | protocol SIMD {
2 | public static func == (a: Self, b: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'SIMD'
3 |
Foundation.__BridgedNSError.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '__BridgedNSError'
1 | protocol __BridgedNSError {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '__BridgedNSError'
3 |
Foundation._BridgedStoredNSError.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_BridgedStoredNSError'
1 | protocol _BridgedStoredNSError {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_BridgedStoredNSError'
3 |
FoundationEssentials.AttributedStringProtocol.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'AttributedStringProtocol'
1 | protocol AttributedStringProtocol {
2 | public static func == <RHS>(lhs: Self, rhs: RHS) -> Bool where RHS : AttributedStringProtocol}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'AttributedStringProtocol'
3 |
Swift.Equatable.==:2:13: note: protocol requires function '==' with type '(MockTextTokenizer<R>.Request, MockTextTokenizer<R>.Request) -> Bool'
1 | protocol Equatable {
2 | static func == (lhs: Self, rhs: Self) -> Bool}
  |             `- note: protocol requires function '==' with type '(MockTextTokenizer<R>.Request, MockTextTokenizer<R>.Request) -> Bool'
3 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:26:72: error: cannot find type 'TextGranularity' in scope
24 | 	}
25 |
26 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
27 | 		requests.append(.position(position, granularity, direction))
28 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:26:112: error: cannot find type 'TextDirection' in scope
24 | 	}
25 |
26 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
27 | 		requests.append(.position(position, granularity, direction))
28 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:37:77: error: cannot find type 'TextGranularity' in scope
35 | 	}
36 |
37 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> R? {
   |                                                                             `- error: cannot find type 'TextGranularity' in scope
38 | 		return nil
39 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:37:117: error: cannot find type 'TextDirection' in scope
35 | 	}
36 |
37 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> R? {
   |                                                                                                                     `- error: cannot find type 'TextDirection' in scope
38 | 		return nil
39 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:41:71: error: cannot find type 'TextGranularity' in scope
39 | 	}
40 |
41 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                       `- error: cannot find type 'TextGranularity' in scope
42 | 		return false
43 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:41:111: error: cannot find type 'TextDirection' in scope
39 | 	}
40 |
41 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                               `- error: cannot find type 'TextDirection' in scope
42 | 		return false
43 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:45:75: error: cannot find type 'TextGranularity' in scope
43 | 	}
44 |
45 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                           `- error: cannot find type 'TextGranularity' in scope
46 | 		return false
47 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:45:115: error: cannot find type 'TextDirection' in scope
43 | 	}
44 |
45 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                                   `- error: cannot find type 'TextDirection' in scope
46 | 		return false
47 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:65: error: cannot find type 'TextGranularity' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                 `- error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:105: error: cannot find type 'TextDirection' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                         `- error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:131: error: cannot find type 'CGFloat' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                                                   `- error: cannot find type 'CGFloat' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:70: error: cannot find type 'TextGranularity' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                      `- error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:110: error: cannot find type 'TextDirection' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                                                              `- error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:64: error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                `- error: cannot find type 'TextGranularity' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:104: error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                        `- error: cannot find type 'TextDirection' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:68: error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                    `- error: cannot find type 'TextGranularity' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:108: error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                            `- error: cannot find type 'TextDirection' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/NSTextSelection+Extensions.swift:9:11: error: cannot find type 'NSTextSelection' in scope
 7 | @available(iOS 15.0, macOS 12.0, tvOS 15.0, *)
 8 | @available(watchOS, unavailable)
 9 | extension NSTextSelection.Granularity {
   |           `- error: cannot find type 'NSTextSelection' in scope
10 | 	public init(_ granularity: TextGranularity) {
11 | 		switch granularity {
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:14:72: error: cannot find type 'TextGranularity' in scope
12 |
13 | extension SourceTokenizer : TextTokenizer {
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
16 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:14:112: error: cannot find type 'TextDirection' in scope
12 |
13 | extension SourceTokenizer : TextTokenizer {
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
16 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:18:77: error: cannot find type 'TextGranularity' in scope
16 | 	}
17 |
18 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> FallbackTokenzier.TextRange? {
   |                                                                             `- error: cannot find type 'TextGranularity' in scope
19 | 		return fallbackTokenzier.rangeEnclosingPosition(position, with: granularity, inDirection: direction)
20 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:18:117: error: cannot find type 'TextDirection' in scope
16 | 	}
17 |
18 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> FallbackTokenzier.TextRange? {
   |                                                                                                                     `- error: cannot find type 'TextDirection' in scope
19 | 		return fallbackTokenzier.rangeEnclosingPosition(position, with: granularity, inDirection: direction)
20 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:22:71: error: cannot find type 'TextGranularity' in scope
20 | 	}
21 |
22 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                       `- error: cannot find type 'TextGranularity' in scope
23 | 		return fallbackTokenzier.isPosition(position, atBoundary: granularity, inDirection: direction)
24 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:22:111: error: cannot find type 'TextDirection' in scope
20 | 	}
21 |
22 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                               `- error: cannot find type 'TextDirection' in scope
23 | 		return fallbackTokenzier.isPosition(position, atBoundary: granularity, inDirection: direction)
24 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:26:75: error: cannot find type 'TextGranularity' in scope
24 | 	}
25 |
26 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                           `- error: cannot find type 'TextGranularity' in scope
27 | 		return fallbackTokenzier.isPosition(position, withinTextUnit: granularity, inDirection: direction)
28 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:26:115: error: cannot find type 'TextDirection' in scope
24 | 	}
25 |
26 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                                   `- error: cannot find type 'TextDirection' in scope
27 | 		return fallbackTokenzier.isPosition(position, withinTextUnit: granularity, inDirection: direction)
28 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:13:1: error: type 'SourceTokenizer<FallbackTokenzier>' does not conform to protocol 'TextTokenizer'
11 | }
12 |
13 | extension SourceTokenizer : TextTokenizer {
   | |- error: type 'SourceTokenizer<FallbackTokenzier>' does not conform to protocol 'TextTokenizer'
   | `- note: add stubs for conformance
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:11:17: note: protocol requires nested type 'TextRange'
 9 | @MainActor
10 | public protocol TextTokenizer<TextRange> {
11 | 	associatedtype TextRange: Bounded
   |                 `- note: protocol requires nested type 'TextRange'
12 |
13 | 	typealias Position = TextRange.Bound
/host/spi-builder-workspace/Sources/Ligature/TextDirection+Extensions.swift:1:11: error: cannot find type 'TextLayoutDirection' in scope
 1 | extension TextLayoutDirection {
   |           `- error: cannot find type 'TextLayoutDirection' in scope
 2 | 	public func textStorageDirection(with layout: UserInterfaceLayoutDirection) -> TextStorageDirection? {
 3 | 		switch (self, layout) {
/host/spi-builder-workspace/Sources/Ligature/TextDirection+Extensions.swift:16:11: error: cannot find type 'TextDirection' in scope
14 | }
15 |
16 | extension TextDirection {
   |           `- error: cannot find type 'TextDirection' in scope
17 | 	public func textStorageDirection(with layout: UserInterfaceLayoutDirection) -> TextStorageDirection? {
18 | 		switch rawValue {
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:23:72: error: cannot find type 'TextGranularity' in scope
21 |
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
25 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:23:112: error: cannot find type 'TextDirection' in scope
21 |
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
25 | 	}
[31/37] Compiling Ligature MockTextTokenizer.swift
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:8:27: error: cannot find type 'TextGranularity' in scope
 6 |
 7 | 	public enum Request: Equatable {
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                           `- error: cannot find type 'TextGranularity' in scope
 9 | 	}
10 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:8:44: error: cannot find type 'TextDirection' in scope
 6 |
 7 | 	public enum Request: Equatable {
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                                            `- error: cannot find type 'TextDirection' in scope
 9 | 	}
10 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:7:14: error: type 'MockTextTokenizer<R>.Request' does not conform to protocol 'Equatable'
 5 | 	public typealias TextRange = R
 6 |
 7 | 	public enum Request: Equatable {
   |              |- error: type 'MockTextTokenizer<R>.Request' does not conform to protocol 'Equatable'
   |              `- note: add stubs for conformance
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                           |                `- note: associated value type '<<error type>>' does not conform to protocol 'Equatable', preventing synthesized conformance of 'MockTextTokenizer<R>.Request' to 'Equatable'
   |                           `- note: associated value type '<<error type>>' does not conform to protocol 'Equatable', preventing synthesized conformance of 'MockTextTokenizer<R>.Request' to 'Equatable'
 9 | 	}
10 |
Swift.==:1:24: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'RawRepresentable'
1 | @inlinable public func == <T>(lhs: T, rhs: T) -> Bool where T : RawRepresentable, T.RawValue : Equatable
  |                        `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'RawRepresentable'
Swift.FloatingPoint.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'FloatingPoint'
1 | protocol FloatingPoint {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'FloatingPoint'
3 |
Swift.BinaryInteger.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'BinaryInteger'
1 | protocol BinaryInteger {
2 | public static func == <Other>(lhs: Self, rhs: Other) -> Bool where Other : BinaryInteger}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'BinaryInteger'
3 |
Swift._Pointer.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
1 | protocol _Pointer {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
3 |
Swift._Pointer.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
1 | protocol _Pointer {
2 | @inlinable public static func == <Other>(lhs: Self, rhs: Other) -> Bool where Other : _Pointer}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
3 |
Swift.Strideable.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'Strideable'
1 | protocol Strideable {
2 | @inlinable public static func == (x: Self, y: Self) -> Bool}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'Strideable'
3 |
Swift.StringProtocol.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'StringProtocol'
1 | protocol StringProtocol {
2 | @inlinable public static func == <RHS>(lhs: Self, rhs: RHS) -> Bool where RHS : StringProtocol}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'StringProtocol'
3 |
Swift.SIMD.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'SIMD'
1 | protocol SIMD {
2 | public static func == (a: Self, b: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'SIMD'
3 |
Foundation.__BridgedNSError.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '__BridgedNSError'
1 | protocol __BridgedNSError {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '__BridgedNSError'
3 |
Foundation._BridgedStoredNSError.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_BridgedStoredNSError'
1 | protocol _BridgedStoredNSError {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_BridgedStoredNSError'
3 |
FoundationEssentials.AttributedStringProtocol.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'AttributedStringProtocol'
1 | protocol AttributedStringProtocol {
2 | public static func == <RHS>(lhs: Self, rhs: RHS) -> Bool where RHS : AttributedStringProtocol}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'AttributedStringProtocol'
3 |
Swift.Equatable.==:2:13: note: protocol requires function '==' with type '(MockTextTokenizer<R>.Request, MockTextTokenizer<R>.Request) -> Bool'
1 | protocol Equatable {
2 | static func == (lhs: Self, rhs: Self) -> Bool}
  |             `- note: protocol requires function '==' with type '(MockTextTokenizer<R>.Request, MockTextTokenizer<R>.Request) -> Bool'
3 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:26:72: error: cannot find type 'TextGranularity' in scope
24 | 	}
25 |
26 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
27 | 		requests.append(.position(position, granularity, direction))
28 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:26:112: error: cannot find type 'TextDirection' in scope
24 | 	}
25 |
26 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
27 | 		requests.append(.position(position, granularity, direction))
28 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:37:77: error: cannot find type 'TextGranularity' in scope
35 | 	}
36 |
37 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> R? {
   |                                                                             `- error: cannot find type 'TextGranularity' in scope
38 | 		return nil
39 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:37:117: error: cannot find type 'TextDirection' in scope
35 | 	}
36 |
37 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> R? {
   |                                                                                                                     `- error: cannot find type 'TextDirection' in scope
38 | 		return nil
39 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:41:71: error: cannot find type 'TextGranularity' in scope
39 | 	}
40 |
41 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                       `- error: cannot find type 'TextGranularity' in scope
42 | 		return false
43 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:41:111: error: cannot find type 'TextDirection' in scope
39 | 	}
40 |
41 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                               `- error: cannot find type 'TextDirection' in scope
42 | 		return false
43 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:45:75: error: cannot find type 'TextGranularity' in scope
43 | 	}
44 |
45 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                           `- error: cannot find type 'TextGranularity' in scope
46 | 		return false
47 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:45:115: error: cannot find type 'TextDirection' in scope
43 | 	}
44 |
45 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                                   `- error: cannot find type 'TextDirection' in scope
46 | 		return false
47 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:65: error: cannot find type 'TextGranularity' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                 `- error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:105: error: cannot find type 'TextDirection' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                         `- error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:131: error: cannot find type 'CGFloat' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                                                   `- error: cannot find type 'CGFloat' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:70: error: cannot find type 'TextGranularity' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                      `- error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:110: error: cannot find type 'TextDirection' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                                                              `- error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:64: error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                `- error: cannot find type 'TextGranularity' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:104: error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                        `- error: cannot find type 'TextDirection' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:68: error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                    `- error: cannot find type 'TextGranularity' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:108: error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                            `- error: cannot find type 'TextDirection' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/NSTextSelection+Extensions.swift:9:11: error: cannot find type 'NSTextSelection' in scope
 7 | @available(iOS 15.0, macOS 12.0, tvOS 15.0, *)
 8 | @available(watchOS, unavailable)
 9 | extension NSTextSelection.Granularity {
   |           `- error: cannot find type 'NSTextSelection' in scope
10 | 	public init(_ granularity: TextGranularity) {
11 | 		switch granularity {
/host/spi-builder-workspace/Sources/Ligature/NSTextSelection+Extensions.swift:10:29: error: cannot find type 'TextGranularity' in scope
 8 | @available(watchOS, unavailable)
 9 | extension NSTextSelection.Granularity {
10 | 	public init(_ granularity: TextGranularity) {
   |                             `- error: cannot find type 'TextGranularity' in scope
11 | 		switch granularity {
12 | 		case .character:
/host/spi-builder-workspace/Sources/Ligature/NSTextSelection+Extensions.swift:29:30: error: cannot find type 'TextGranularity' in scope
27 | 	}
28 |
29 | 	public var textGranularity: TextGranularity {
   |                              `- error: cannot find type 'TextGranularity' in scope
30 | 		switch self {
31 | 		case .character:
[32/37] Compiling Ligature NSTextSelection+Extensions.swift
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:8:27: error: cannot find type 'TextGranularity' in scope
 6 |
 7 | 	public enum Request: Equatable {
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                           `- error: cannot find type 'TextGranularity' in scope
 9 | 	}
10 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:8:44: error: cannot find type 'TextDirection' in scope
 6 |
 7 | 	public enum Request: Equatable {
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                                            `- error: cannot find type 'TextDirection' in scope
 9 | 	}
10 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:7:14: error: type 'MockTextTokenizer<R>.Request' does not conform to protocol 'Equatable'
 5 | 	public typealias TextRange = R
 6 |
 7 | 	public enum Request: Equatable {
   |              |- error: type 'MockTextTokenizer<R>.Request' does not conform to protocol 'Equatable'
   |              `- note: add stubs for conformance
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                           |                `- note: associated value type '<<error type>>' does not conform to protocol 'Equatable', preventing synthesized conformance of 'MockTextTokenizer<R>.Request' to 'Equatable'
   |                           `- note: associated value type '<<error type>>' does not conform to protocol 'Equatable', preventing synthesized conformance of 'MockTextTokenizer<R>.Request' to 'Equatable'
 9 | 	}
10 |
Swift.==:1:24: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'RawRepresentable'
1 | @inlinable public func == <T>(lhs: T, rhs: T) -> Bool where T : RawRepresentable, T.RawValue : Equatable
  |                        `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'RawRepresentable'
Swift.FloatingPoint.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'FloatingPoint'
1 | protocol FloatingPoint {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'FloatingPoint'
3 |
Swift.BinaryInteger.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'BinaryInteger'
1 | protocol BinaryInteger {
2 | public static func == <Other>(lhs: Self, rhs: Other) -> Bool where Other : BinaryInteger}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'BinaryInteger'
3 |
Swift._Pointer.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
1 | protocol _Pointer {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
3 |
Swift._Pointer.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
1 | protocol _Pointer {
2 | @inlinable public static func == <Other>(lhs: Self, rhs: Other) -> Bool where Other : _Pointer}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
3 |
Swift.Strideable.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'Strideable'
1 | protocol Strideable {
2 | @inlinable public static func == (x: Self, y: Self) -> Bool}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'Strideable'
3 |
Swift.StringProtocol.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'StringProtocol'
1 | protocol StringProtocol {
2 | @inlinable public static func == <RHS>(lhs: Self, rhs: RHS) -> Bool where RHS : StringProtocol}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'StringProtocol'
3 |
Swift.SIMD.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'SIMD'
1 | protocol SIMD {
2 | public static func == (a: Self, b: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'SIMD'
3 |
Foundation.__BridgedNSError.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '__BridgedNSError'
1 | protocol __BridgedNSError {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '__BridgedNSError'
3 |
Foundation._BridgedStoredNSError.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_BridgedStoredNSError'
1 | protocol _BridgedStoredNSError {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_BridgedStoredNSError'
3 |
FoundationEssentials.AttributedStringProtocol.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'AttributedStringProtocol'
1 | protocol AttributedStringProtocol {
2 | public static func == <RHS>(lhs: Self, rhs: RHS) -> Bool where RHS : AttributedStringProtocol}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'AttributedStringProtocol'
3 |
Swift.Equatable.==:2:13: note: protocol requires function '==' with type '(MockTextTokenizer<R>.Request, MockTextTokenizer<R>.Request) -> Bool'
1 | protocol Equatable {
2 | static func == (lhs: Self, rhs: Self) -> Bool}
  |             `- note: protocol requires function '==' with type '(MockTextTokenizer<R>.Request, MockTextTokenizer<R>.Request) -> Bool'
3 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:26:72: error: cannot find type 'TextGranularity' in scope
24 | 	}
25 |
26 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
27 | 		requests.append(.position(position, granularity, direction))
28 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:26:112: error: cannot find type 'TextDirection' in scope
24 | 	}
25 |
26 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
27 | 		requests.append(.position(position, granularity, direction))
28 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:37:77: error: cannot find type 'TextGranularity' in scope
35 | 	}
36 |
37 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> R? {
   |                                                                             `- error: cannot find type 'TextGranularity' in scope
38 | 		return nil
39 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:37:117: error: cannot find type 'TextDirection' in scope
35 | 	}
36 |
37 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> R? {
   |                                                                                                                     `- error: cannot find type 'TextDirection' in scope
38 | 		return nil
39 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:41:71: error: cannot find type 'TextGranularity' in scope
39 | 	}
40 |
41 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                       `- error: cannot find type 'TextGranularity' in scope
42 | 		return false
43 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:41:111: error: cannot find type 'TextDirection' in scope
39 | 	}
40 |
41 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                               `- error: cannot find type 'TextDirection' in scope
42 | 		return false
43 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:45:75: error: cannot find type 'TextGranularity' in scope
43 | 	}
44 |
45 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                           `- error: cannot find type 'TextGranularity' in scope
46 | 		return false
47 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:45:115: error: cannot find type 'TextDirection' in scope
43 | 	}
44 |
45 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                                   `- error: cannot find type 'TextDirection' in scope
46 | 		return false
47 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:65: error: cannot find type 'TextGranularity' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                 `- error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:105: error: cannot find type 'TextDirection' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                         `- error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:131: error: cannot find type 'CGFloat' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                                                   `- error: cannot find type 'CGFloat' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:70: error: cannot find type 'TextGranularity' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                      `- error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:110: error: cannot find type 'TextDirection' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                                                              `- error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:64: error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                `- error: cannot find type 'TextGranularity' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:104: error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                        `- error: cannot find type 'TextDirection' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:68: error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                    `- error: cannot find type 'TextGranularity' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:108: error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                            `- error: cannot find type 'TextDirection' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/NSTextSelection+Extensions.swift:9:11: error: cannot find type 'NSTextSelection' in scope
 7 | @available(iOS 15.0, macOS 12.0, tvOS 15.0, *)
 8 | @available(watchOS, unavailable)
 9 | extension NSTextSelection.Granularity {
   |           `- error: cannot find type 'NSTextSelection' in scope
10 | 	public init(_ granularity: TextGranularity) {
11 | 		switch granularity {
/host/spi-builder-workspace/Sources/Ligature/NSTextSelection+Extensions.swift:10:29: error: cannot find type 'TextGranularity' in scope
 8 | @available(watchOS, unavailable)
 9 | extension NSTextSelection.Granularity {
10 | 	public init(_ granularity: TextGranularity) {
   |                             `- error: cannot find type 'TextGranularity' in scope
11 | 		switch granularity {
12 | 		case .character:
/host/spi-builder-workspace/Sources/Ligature/NSTextSelection+Extensions.swift:29:30: error: cannot find type 'TextGranularity' in scope
27 | 	}
28 |
29 | 	public var textGranularity: TextGranularity {
   |                              `- error: cannot find type 'TextGranularity' in scope
30 | 		switch self {
31 | 		case .character:
[33/37] Compiling Ligature UTF16CodePointTextViewTextTokenizer.swift
[34/37] Compiling Ligature TextDirection+Extensions.swift
/host/spi-builder-workspace/Sources/Ligature/TextDirection+Extensions.swift:1:11: error: cannot find type 'TextLayoutDirection' in scope
 1 | extension TextLayoutDirection {
   |           `- error: cannot find type 'TextLayoutDirection' in scope
 2 | 	public func textStorageDirection(with layout: UserInterfaceLayoutDirection) -> TextStorageDirection? {
 3 | 		switch (self, layout) {
/host/spi-builder-workspace/Sources/Ligature/TextDirection+Extensions.swift:16:11: error: cannot find type 'TextDirection' in scope
14 | }
15 |
16 | extension TextDirection {
   |           `- error: cannot find type 'TextDirection' in scope
17 | 	public func textStorageDirection(with layout: UserInterfaceLayoutDirection) -> TextStorageDirection? {
18 | 		switch rawValue {
/host/spi-builder-workspace/Sources/Ligature/TextDirection+Extensions.swift:2:81: error: cannot find type 'TextStorageDirection' in scope
 1 | extension TextLayoutDirection {
 2 | 	public func textStorageDirection(with layout: UserInterfaceLayoutDirection) -> TextStorageDirection? {
   |                                                                                 `- error: cannot find type 'TextStorageDirection' in scope
 3 | 		switch (self, layout) {
 4 | 		case (.left, .leftToRight), (.right, .rightToLeft):
/host/spi-builder-workspace/Sources/Ligature/TextDirection+Extensions.swift:2:48: error: cannot find type 'UserInterfaceLayoutDirection' in scope
 1 | extension TextLayoutDirection {
 2 | 	public func textStorageDirection(with layout: UserInterfaceLayoutDirection) -> TextStorageDirection? {
   |                                                `- error: cannot find type 'UserInterfaceLayoutDirection' in scope
 3 | 		switch (self, layout) {
 4 | 		case (.left, .leftToRight), (.right, .rightToLeft):
/host/spi-builder-workspace/Sources/Ligature/TextDirection+Extensions.swift:17:81: error: cannot find type 'TextStorageDirection' in scope
15 |
16 | extension TextDirection {
17 | 	public func textStorageDirection(with layout: UserInterfaceLayoutDirection) -> TextStorageDirection? {
   |                                                                                 `- error: cannot find type 'TextStorageDirection' in scope
18 | 		switch rawValue {
19 | 		case TextStorageDirection.forward.rawValue:
/host/spi-builder-workspace/Sources/Ligature/TextDirection+Extensions.swift:17:48: error: cannot find type 'UserInterfaceLayoutDirection' in scope
15 |
16 | extension TextDirection {
17 | 	public func textStorageDirection(with layout: UserInterfaceLayoutDirection) -> TextStorageDirection? {
   |                                                `- error: cannot find type 'UserInterfaceLayoutDirection' in scope
18 | 		switch rawValue {
19 | 		case TextStorageDirection.forward.rawValue:
[35/37] Compiling Ligature Platform.swift
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:14:72: error: cannot find type 'TextGranularity' in scope
12 |
13 | extension SourceTokenizer : TextTokenizer {
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
16 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:14:112: error: cannot find type 'TextDirection' in scope
12 |
13 | extension SourceTokenizer : TextTokenizer {
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
16 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:18:77: error: cannot find type 'TextGranularity' in scope
16 | 	}
17 |
18 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> FallbackTokenzier.TextRange? {
   |                                                                             `- error: cannot find type 'TextGranularity' in scope
19 | 		return fallbackTokenzier.rangeEnclosingPosition(position, with: granularity, inDirection: direction)
20 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:18:117: error: cannot find type 'TextDirection' in scope
16 | 	}
17 |
18 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> FallbackTokenzier.TextRange? {
   |                                                                                                                     `- error: cannot find type 'TextDirection' in scope
19 | 		return fallbackTokenzier.rangeEnclosingPosition(position, with: granularity, inDirection: direction)
20 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:22:71: error: cannot find type 'TextGranularity' in scope
20 | 	}
21 |
22 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                       `- error: cannot find type 'TextGranularity' in scope
23 | 		return fallbackTokenzier.isPosition(position, atBoundary: granularity, inDirection: direction)
24 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:22:111: error: cannot find type 'TextDirection' in scope
20 | 	}
21 |
22 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                               `- error: cannot find type 'TextDirection' in scope
23 | 		return fallbackTokenzier.isPosition(position, atBoundary: granularity, inDirection: direction)
24 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:26:75: error: cannot find type 'TextGranularity' in scope
24 | 	}
25 |
26 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                           `- error: cannot find type 'TextGranularity' in scope
27 | 		return fallbackTokenzier.isPosition(position, withinTextUnit: granularity, inDirection: direction)
28 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:26:115: error: cannot find type 'TextDirection' in scope
24 | 	}
25 |
26 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                                   `- error: cannot find type 'TextDirection' in scope
27 | 		return fallbackTokenzier.isPosition(position, withinTextUnit: granularity, inDirection: direction)
28 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:65: error: cannot find type 'TextGranularity' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                 `- error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:105: error: cannot find type 'TextDirection' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                         `- error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:131: error: cannot find type 'CGFloat' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                                                   `- error: cannot find type 'CGFloat' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:70: error: cannot find type 'TextGranularity' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                      `- error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:110: error: cannot find type 'TextDirection' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                                                              `- error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:64: error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                `- error: cannot find type 'TextGranularity' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:104: error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                        `- error: cannot find type 'TextDirection' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:68: error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                    `- error: cannot find type 'TextGranularity' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:108: error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                            `- error: cannot find type 'TextDirection' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:13:1: error: type 'SourceTokenizer<FallbackTokenzier>' does not conform to protocol 'TextTokenizer'
11 | }
12 |
13 | extension SourceTokenizer : TextTokenizer {
   | |- error: type 'SourceTokenizer<FallbackTokenzier>' does not conform to protocol 'TextTokenizer'
   | `- note: add stubs for conformance
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:11:17: note: protocol requires nested type 'TextRange'
 9 | @MainActor
10 | public protocol TextTokenizer<TextRange> {
11 | 	associatedtype TextRange: Bounded
   |                 `- note: protocol requires nested type 'TextRange'
12 |
13 | 	typealias Position = TextRange.Bound
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:23:72: error: cannot find type 'TextGranularity' in scope
21 |
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
25 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:23:112: error: cannot find type 'TextDirection' in scope
21 |
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
25 | 	}
[36/37] Compiling Ligature SourceTokenizer.swift
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:14:72: error: cannot find type 'TextGranularity' in scope
12 |
13 | extension SourceTokenizer : TextTokenizer {
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
16 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:14:112: error: cannot find type 'TextDirection' in scope
12 |
13 | extension SourceTokenizer : TextTokenizer {
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
16 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:18:77: error: cannot find type 'TextGranularity' in scope
16 | 	}
17 |
18 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> FallbackTokenzier.TextRange? {
   |                                                                             `- error: cannot find type 'TextGranularity' in scope
19 | 		return fallbackTokenzier.rangeEnclosingPosition(position, with: granularity, inDirection: direction)
20 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:18:117: error: cannot find type 'TextDirection' in scope
16 | 	}
17 |
18 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> FallbackTokenzier.TextRange? {
   |                                                                                                                     `- error: cannot find type 'TextDirection' in scope
19 | 		return fallbackTokenzier.rangeEnclosingPosition(position, with: granularity, inDirection: direction)
20 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:22:71: error: cannot find type 'TextGranularity' in scope
20 | 	}
21 |
22 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                       `- error: cannot find type 'TextGranularity' in scope
23 | 		return fallbackTokenzier.isPosition(position, atBoundary: granularity, inDirection: direction)
24 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:22:111: error: cannot find type 'TextDirection' in scope
20 | 	}
21 |
22 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                               `- error: cannot find type 'TextDirection' in scope
23 | 		return fallbackTokenzier.isPosition(position, atBoundary: granularity, inDirection: direction)
24 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:26:75: error: cannot find type 'TextGranularity' in scope
24 | 	}
25 |
26 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                           `- error: cannot find type 'TextGranularity' in scope
27 | 		return fallbackTokenzier.isPosition(position, withinTextUnit: granularity, inDirection: direction)
28 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:26:115: error: cannot find type 'TextDirection' in scope
24 | 	}
25 |
26 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                                   `- error: cannot find type 'TextDirection' in scope
27 | 		return fallbackTokenzier.isPosition(position, withinTextUnit: granularity, inDirection: direction)
28 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:65: error: cannot find type 'TextGranularity' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                 `- error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:105: error: cannot find type 'TextDirection' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                         `- error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:131: error: cannot find type 'CGFloat' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                                                   `- error: cannot find type 'CGFloat' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:70: error: cannot find type 'TextGranularity' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                      `- error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:110: error: cannot find type 'TextDirection' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                                                              `- error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:64: error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                `- error: cannot find type 'TextGranularity' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:104: error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                        `- error: cannot find type 'TextDirection' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:68: error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                    `- error: cannot find type 'TextGranularity' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:108: error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                            `- error: cannot find type 'TextDirection' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:13:1: error: type 'SourceTokenizer<FallbackTokenzier>' does not conform to protocol 'TextTokenizer'
11 | }
12 |
13 | extension SourceTokenizer : TextTokenizer {
   | |- error: type 'SourceTokenizer<FallbackTokenzier>' does not conform to protocol 'TextTokenizer'
   | `- note: add stubs for conformance
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:11:17: note: protocol requires nested type 'TextRange'
 9 | @MainActor
10 | public protocol TextTokenizer<TextRange> {
11 | 	associatedtype TextRange: Bounded
   |                 `- note: protocol requires nested type 'TextRange'
12 |
13 | 	typealias Position = TextRange.Bound
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:23:72: error: cannot find type 'TextGranularity' in scope
21 |
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
25 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:23:112: error: cannot find type 'TextDirection' in scope
21 |
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
25 | 	}
[37/37] Compiling Ligature TextInputStringTokenizer.swift
Running build ...
bash -c docker run --pull=always --rm -v "checkouts-4609320-0":/host -w "$PWD" registry.gitlab.com/finestructure/spi-images:android-6.1-latest swift build --swift-sdk aarch64-unknown-linux-android24 2>&1
android-6.1-latest: Pulling from finestructure/spi-images
Digest: sha256:fe1962677657b2408c217cb5cceb3c09bc1d91486e360cebbc6eee461a5945d8
Status: Image is up to date for registry.gitlab.com/finestructure/spi-images:android-6.1-latest
[0/1] Planning build
Building for debugging...
[0/1] Write swift-version-24593BA9C3E375BF.txt
[2/20] Emitting module Glyph
[3/20] Compiling Glyph NSLayoutManager+Additions.swift
[4/20] Compiling Glyph NSTextContainer+Additions.swift
[5/20] Compiling Glyph NSTextLayoutFragment+Additions.swift
[6/20] Compiling Rearrange NSRange+Convenience.swift
[7/20] Compiling Rearrange NSRange+Shift.swift
[8/21] Compiling Glyph NSTextLayoutManager+Additions.swift
[9/21] Compiling Glyph NSTextRange+NSRange.swift
[10/21] Compiling Glyph NSTextView+Additions.swift
[11/22] Compiling Rearrange UITextRange+Convenience.swift
[13/22] Compiling Rearrange TextRangeCalculating.swift
[14/22] Compiling Rearrange String+NSRange.swift
[15/22] Emitting module Rearrange
[16/22] Compiling Rearrange IndexSet+NSRange.swift
[17/22] Compiling Rearrange NSRange+ApplyMutation.swift
[18/22] Compiling Rearrange Bounded.swift
[19/22] Compiling Rearrange IndexSet+ApplyMutation.swift
[20/22] Compiling Rearrange NSTextRange+Bounded.swift
[21/22] Compiling Rearrange NSTextRange+NSRange.swift
[22/22] Compiling Rearrange RangeMutation.swift
[24/33] Compiling Ligature TextTokenizer.swift
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:65: error: cannot find type 'TextGranularity' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                 `- error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:105: error: cannot find type 'TextDirection' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                         `- error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:131: error: cannot find type 'CGFloat' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                                                   `- error: cannot find type 'CGFloat' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:70: error: cannot find type 'TextGranularity' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                      `- error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:110: error: cannot find type 'TextDirection' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                                                              `- error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:64: error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                `- error: cannot find type 'TextGranularity' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:104: error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                        `- error: cannot find type 'TextDirection' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:68: error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                    `- error: cannot find type 'TextGranularity' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:108: error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                            `- error: cannot find type 'TextDirection' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:23:72: error: cannot find type 'TextGranularity' in scope
21 |
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
25 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:23:112: error: cannot find type 'TextDirection' in scope
21 |
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
25 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:24:93: error: 'nil' requires a contextual type
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
   |                                                                                             `- error: 'nil' requires a contextual type
25 | 	}
26 | }
[25/34] Compiling Ligature TextDirection+Extensions.swift
/host/spi-builder-workspace/Sources/Ligature/TextDirection+Extensions.swift:1:11: error: cannot find type 'TextLayoutDirection' in scope
 1 | extension TextLayoutDirection {
   |           `- error: cannot find type 'TextLayoutDirection' in scope
 2 | 	public func textStorageDirection(with layout: UserInterfaceLayoutDirection) -> TextStorageDirection? {
 3 | 		switch (self, layout) {
/host/spi-builder-workspace/Sources/Ligature/TextDirection+Extensions.swift:16:11: error: cannot find type 'TextDirection' in scope
14 | }
15 |
16 | extension TextDirection {
   |           `- error: cannot find type 'TextDirection' in scope
17 | 	public func textStorageDirection(with layout: UserInterfaceLayoutDirection) -> TextStorageDirection? {
18 | 		switch rawValue {
/host/spi-builder-workspace/Sources/Ligature/TextDirection+Extensions.swift:2:81: error: cannot find type 'TextStorageDirection' in scope
 1 | extension TextLayoutDirection {
 2 | 	public func textStorageDirection(with layout: UserInterfaceLayoutDirection) -> TextStorageDirection? {
   |                                                                                 `- error: cannot find type 'TextStorageDirection' in scope
 3 | 		switch (self, layout) {
 4 | 		case (.left, .leftToRight), (.right, .rightToLeft):
/host/spi-builder-workspace/Sources/Ligature/TextDirection+Extensions.swift:2:48: error: cannot find type 'UserInterfaceLayoutDirection' in scope
 1 | extension TextLayoutDirection {
 2 | 	public func textStorageDirection(with layout: UserInterfaceLayoutDirection) -> TextStorageDirection? {
   |                                                `- error: cannot find type 'UserInterfaceLayoutDirection' in scope
 3 | 		switch (self, layout) {
 4 | 		case (.left, .leftToRight), (.right, .rightToLeft):
/host/spi-builder-workspace/Sources/Ligature/TextDirection+Extensions.swift:17:81: error: cannot find type 'TextStorageDirection' in scope
15 |
16 | extension TextDirection {
17 | 	public func textStorageDirection(with layout: UserInterfaceLayoutDirection) -> TextStorageDirection? {
   |                                                                                 `- error: cannot find type 'TextStorageDirection' in scope
18 | 		switch rawValue {
19 | 		case TextStorageDirection.forward.rawValue:
/host/spi-builder-workspace/Sources/Ligature/TextDirection+Extensions.swift:17:48: error: cannot find type 'UserInterfaceLayoutDirection' in scope
15 |
16 | extension TextDirection {
17 | 	public func textStorageDirection(with layout: UserInterfaceLayoutDirection) -> TextStorageDirection? {
   |                                                `- error: cannot find type 'UserInterfaceLayoutDirection' in scope
18 | 		switch rawValue {
19 | 		case TextStorageDirection.forward.rawValue:
[26/34] Compiling Ligature UTF16CodePointTextViewTextTokenizer.swift
[27/34] Compiling Ligature TextView+TextRangeCalculating.swift
[28/34] Compiling Ligature Platform.swift
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:14:72: error: cannot find type 'TextGranularity' in scope
12 |
13 | extension SourceTokenizer : TextTokenizer {
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
16 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:14:112: error: cannot find type 'TextDirection' in scope
12 |
13 | extension SourceTokenizer : TextTokenizer {
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
16 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:18:77: error: cannot find type 'TextGranularity' in scope
16 | 	}
17 |
18 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> FallbackTokenzier.TextRange? {
   |                                                                             `- error: cannot find type 'TextGranularity' in scope
19 | 		return fallbackTokenzier.rangeEnclosingPosition(position, with: granularity, inDirection: direction)
20 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:18:117: error: cannot find type 'TextDirection' in scope
16 | 	}
17 |
18 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> FallbackTokenzier.TextRange? {
   |                                                                                                                     `- error: cannot find type 'TextDirection' in scope
19 | 		return fallbackTokenzier.rangeEnclosingPosition(position, with: granularity, inDirection: direction)
20 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:22:71: error: cannot find type 'TextGranularity' in scope
20 | 	}
21 |
22 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                       `- error: cannot find type 'TextGranularity' in scope
23 | 		return fallbackTokenzier.isPosition(position, atBoundary: granularity, inDirection: direction)
24 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:22:111: error: cannot find type 'TextDirection' in scope
20 | 	}
21 |
22 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                               `- error: cannot find type 'TextDirection' in scope
23 | 		return fallbackTokenzier.isPosition(position, atBoundary: granularity, inDirection: direction)
24 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:26:75: error: cannot find type 'TextGranularity' in scope
24 | 	}
25 |
26 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                           `- error: cannot find type 'TextGranularity' in scope
27 | 		return fallbackTokenzier.isPosition(position, withinTextUnit: granularity, inDirection: direction)
28 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:26:115: error: cannot find type 'TextDirection' in scope
24 | 	}
25 |
26 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                                   `- error: cannot find type 'TextDirection' in scope
27 | 		return fallbackTokenzier.isPosition(position, withinTextUnit: granularity, inDirection: direction)
28 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:65: error: cannot find type 'TextGranularity' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                 `- error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:105: error: cannot find type 'TextDirection' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                         `- error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:131: error: cannot find type 'CGFloat' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                                                   `- error: cannot find type 'CGFloat' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:70: error: cannot find type 'TextGranularity' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                      `- error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:110: error: cannot find type 'TextDirection' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                                                              `- error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:64: error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                `- error: cannot find type 'TextGranularity' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:104: error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                        `- error: cannot find type 'TextDirection' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:68: error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                    `- error: cannot find type 'TextGranularity' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:108: error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                            `- error: cannot find type 'TextDirection' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:13:1: error: type 'SourceTokenizer<FallbackTokenzier>' does not conform to protocol 'TextTokenizer'
11 | }
12 |
13 | extension SourceTokenizer : TextTokenizer {
   | |- error: type 'SourceTokenizer<FallbackTokenzier>' does not conform to protocol 'TextTokenizer'
   | `- note: add stubs for conformance
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:11:17: note: protocol requires nested type 'TextRange'
 9 | @MainActor
10 | public protocol TextTokenizer<TextRange> {
11 | 	associatedtype TextRange: Bounded
   |                 `- note: protocol requires nested type 'TextRange'
12 |
13 | 	typealias Position = TextRange.Bound
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:23:72: error: cannot find type 'TextGranularity' in scope
21 |
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
25 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:23:112: error: cannot find type 'TextDirection' in scope
21 |
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
25 | 	}
[29/34] Compiling Ligature SourceTokenizer.swift
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:14:72: error: cannot find type 'TextGranularity' in scope
12 |
13 | extension SourceTokenizer : TextTokenizer {
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
16 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:14:112: error: cannot find type 'TextDirection' in scope
12 |
13 | extension SourceTokenizer : TextTokenizer {
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
16 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:18:77: error: cannot find type 'TextGranularity' in scope
16 | 	}
17 |
18 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> FallbackTokenzier.TextRange? {
   |                                                                             `- error: cannot find type 'TextGranularity' in scope
19 | 		return fallbackTokenzier.rangeEnclosingPosition(position, with: granularity, inDirection: direction)
20 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:18:117: error: cannot find type 'TextDirection' in scope
16 | 	}
17 |
18 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> FallbackTokenzier.TextRange? {
   |                                                                                                                     `- error: cannot find type 'TextDirection' in scope
19 | 		return fallbackTokenzier.rangeEnclosingPosition(position, with: granularity, inDirection: direction)
20 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:22:71: error: cannot find type 'TextGranularity' in scope
20 | 	}
21 |
22 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                       `- error: cannot find type 'TextGranularity' in scope
23 | 		return fallbackTokenzier.isPosition(position, atBoundary: granularity, inDirection: direction)
24 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:22:111: error: cannot find type 'TextDirection' in scope
20 | 	}
21 |
22 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                               `- error: cannot find type 'TextDirection' in scope
23 | 		return fallbackTokenzier.isPosition(position, atBoundary: granularity, inDirection: direction)
24 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:26:75: error: cannot find type 'TextGranularity' in scope
24 | 	}
25 |
26 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                           `- error: cannot find type 'TextGranularity' in scope
27 | 		return fallbackTokenzier.isPosition(position, withinTextUnit: granularity, inDirection: direction)
28 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:26:115: error: cannot find type 'TextDirection' in scope
24 | 	}
25 |
26 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                                   `- error: cannot find type 'TextDirection' in scope
27 | 		return fallbackTokenzier.isPosition(position, withinTextUnit: granularity, inDirection: direction)
28 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:65: error: cannot find type 'TextGranularity' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                 `- error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:105: error: cannot find type 'TextDirection' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                         `- error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:131: error: cannot find type 'CGFloat' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                                                   `- error: cannot find type 'CGFloat' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:70: error: cannot find type 'TextGranularity' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                      `- error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:110: error: cannot find type 'TextDirection' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                                                              `- error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:64: error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                `- error: cannot find type 'TextGranularity' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:104: error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                        `- error: cannot find type 'TextDirection' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:68: error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                    `- error: cannot find type 'TextGranularity' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:108: error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                            `- error: cannot find type 'TextDirection' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:13:1: error: type 'SourceTokenizer<FallbackTokenzier>' does not conform to protocol 'TextTokenizer'
11 | }
12 |
13 | extension SourceTokenizer : TextTokenizer {
   | |- error: type 'SourceTokenizer<FallbackTokenzier>' does not conform to protocol 'TextTokenizer'
   | `- note: add stubs for conformance
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:11:17: note: protocol requires nested type 'TextRange'
 9 | @MainActor
10 | public protocol TextTokenizer<TextRange> {
11 | 	associatedtype TextRange: Bounded
   |                 `- note: protocol requires nested type 'TextRange'
12 |
13 | 	typealias Position = TextRange.Bound
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:23:72: error: cannot find type 'TextGranularity' in scope
21 |
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
25 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:23:112: error: cannot find type 'TextDirection' in scope
21 |
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
25 | 	}
[30/34] Compiling Ligature MockTextTokenizer.swift
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:8:27: error: cannot find type 'TextGranularity' in scope
 6 |
 7 | 	public enum Request: Equatable {
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                           `- error: cannot find type 'TextGranularity' in scope
 9 | 	}
10 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:8:44: error: cannot find type 'TextDirection' in scope
 6 |
 7 | 	public enum Request: Equatable {
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                                            `- error: cannot find type 'TextDirection' in scope
 9 | 	}
10 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:7:14: error: type 'MockTextTokenizer<R>.Request' does not conform to protocol 'Equatable'
 5 | 	public typealias TextRange = R
 6 |
 7 | 	public enum Request: Equatable {
   |              |- error: type 'MockTextTokenizer<R>.Request' does not conform to protocol 'Equatable'
   |              `- note: add stubs for conformance
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                           |                `- note: associated value type '<<error type>>' does not conform to protocol 'Equatable', preventing synthesized conformance of 'MockTextTokenizer<R>.Request' to 'Equatable'
   |                           `- note: associated value type '<<error type>>' does not conform to protocol 'Equatable', preventing synthesized conformance of 'MockTextTokenizer<R>.Request' to 'Equatable'
 9 | 	}
10 |
Swift.==:1:24: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'RawRepresentable'
1 | @inlinable public func == <T>(lhs: T, rhs: T) -> Bool where T : RawRepresentable, T.RawValue : Equatable
  |                        `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'RawRepresentable'
Swift.FloatingPoint.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'FloatingPoint'
1 | protocol FloatingPoint {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'FloatingPoint'
3 |
Swift.BinaryInteger.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'BinaryInteger'
1 | protocol BinaryInteger {
2 | public static func == <Other>(lhs: Self, rhs: Other) -> Bool where Other : BinaryInteger}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'BinaryInteger'
3 |
Swift._Pointer.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
1 | protocol _Pointer {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
3 |
Swift._Pointer.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
1 | protocol _Pointer {
2 | @inlinable public static func == <Other>(lhs: Self, rhs: Other) -> Bool where Other : _Pointer}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
3 |
Swift.Strideable.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'Strideable'
1 | protocol Strideable {
2 | @inlinable public static func == (x: Self, y: Self) -> Bool}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'Strideable'
3 |
Swift.StringProtocol.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'StringProtocol'
1 | protocol StringProtocol {
2 | @inlinable public static func == <RHS>(lhs: Self, rhs: RHS) -> Bool where RHS : StringProtocol}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'StringProtocol'
3 |
Swift.SIMD.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'SIMD'
1 | protocol SIMD {
2 | public static func == (a: Self, b: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'SIMD'
3 |
Foundation.__BridgedNSError.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '__BridgedNSError'
1 | protocol __BridgedNSError {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '__BridgedNSError'
3 |
Foundation._BridgedStoredNSError.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_BridgedStoredNSError'
1 | protocol _BridgedStoredNSError {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_BridgedStoredNSError'
3 |
FoundationEssentials.AttributedStringProtocol.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'AttributedStringProtocol'
1 | protocol AttributedStringProtocol {
2 | public static func == <RHS>(lhs: Self, rhs: RHS) -> Bool where RHS : AttributedStringProtocol}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'AttributedStringProtocol'
3 |
Swift.Equatable.==:2:13: note: protocol requires function '==' with type '(MockTextTokenizer<R>.Request, MockTextTokenizer<R>.Request) -> Bool'
1 | protocol Equatable {
2 | static func == (lhs: Self, rhs: Self) -> Bool}
  |             `- note: protocol requires function '==' with type '(MockTextTokenizer<R>.Request, MockTextTokenizer<R>.Request) -> Bool'
3 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:26:72: error: cannot find type 'TextGranularity' in scope
24 | 	}
25 |
26 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
27 | 		requests.append(.position(position, granularity, direction))
28 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:26:112: error: cannot find type 'TextDirection' in scope
24 | 	}
25 |
26 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
27 | 		requests.append(.position(position, granularity, direction))
28 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:37:77: error: cannot find type 'TextGranularity' in scope
35 | 	}
36 |
37 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> R? {
   |                                                                             `- error: cannot find type 'TextGranularity' in scope
38 | 		return nil
39 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:37:117: error: cannot find type 'TextDirection' in scope
35 | 	}
36 |
37 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> R? {
   |                                                                                                                     `- error: cannot find type 'TextDirection' in scope
38 | 		return nil
39 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:41:71: error: cannot find type 'TextGranularity' in scope
39 | 	}
40 |
41 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                       `- error: cannot find type 'TextGranularity' in scope
42 | 		return false
43 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:41:111: error: cannot find type 'TextDirection' in scope
39 | 	}
40 |
41 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                               `- error: cannot find type 'TextDirection' in scope
42 | 		return false
43 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:45:75: error: cannot find type 'TextGranularity' in scope
43 | 	}
44 |
45 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                           `- error: cannot find type 'TextGranularity' in scope
46 | 		return false
47 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:45:115: error: cannot find type 'TextDirection' in scope
43 | 	}
44 |
45 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                                   `- error: cannot find type 'TextDirection' in scope
46 | 		return false
47 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:65: error: cannot find type 'TextGranularity' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                 `- error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:105: error: cannot find type 'TextDirection' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                         `- error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:131: error: cannot find type 'CGFloat' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                                                   `- error: cannot find type 'CGFloat' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:70: error: cannot find type 'TextGranularity' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                      `- error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:110: error: cannot find type 'TextDirection' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                                                              `- error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:64: error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                `- error: cannot find type 'TextGranularity' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:104: error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                        `- error: cannot find type 'TextDirection' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:68: error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                    `- error: cannot find type 'TextGranularity' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:108: error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                            `- error: cannot find type 'TextDirection' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/NSTextSelection+Extensions.swift:9:11: error: cannot find type 'NSTextSelection' in scope
 7 | @available(iOS 15.0, macOS 12.0, tvOS 15.0, *)
 8 | @available(watchOS, unavailable)
 9 | extension NSTextSelection.Granularity {
   |           `- error: cannot find type 'NSTextSelection' in scope
10 | 	public init(_ granularity: TextGranularity) {
11 | 		switch granularity {
/host/spi-builder-workspace/Sources/Ligature/NSTextSelection+Extensions.swift:10:29: error: cannot find type 'TextGranularity' in scope
 8 | @available(watchOS, unavailable)
 9 | extension NSTextSelection.Granularity {
10 | 	public init(_ granularity: TextGranularity) {
   |                             `- error: cannot find type 'TextGranularity' in scope
11 | 		switch granularity {
12 | 		case .character:
/host/spi-builder-workspace/Sources/Ligature/NSTextSelection+Extensions.swift:29:30: error: cannot find type 'TextGranularity' in scope
27 | 	}
28 |
29 | 	public var textGranularity: TextGranularity {
   |                              `- error: cannot find type 'TextGranularity' in scope
30 | 		switch self {
31 | 		case .character:
[31/34] Compiling Ligature NSTextSelection+Extensions.swift
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:8:27: error: cannot find type 'TextGranularity' in scope
 6 |
 7 | 	public enum Request: Equatable {
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                           `- error: cannot find type 'TextGranularity' in scope
 9 | 	}
10 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:8:44: error: cannot find type 'TextDirection' in scope
 6 |
 7 | 	public enum Request: Equatable {
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                                            `- error: cannot find type 'TextDirection' in scope
 9 | 	}
10 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:7:14: error: type 'MockTextTokenizer<R>.Request' does not conform to protocol 'Equatable'
 5 | 	public typealias TextRange = R
 6 |
 7 | 	public enum Request: Equatable {
   |              |- error: type 'MockTextTokenizer<R>.Request' does not conform to protocol 'Equatable'
   |              `- note: add stubs for conformance
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                           |                `- note: associated value type '<<error type>>' does not conform to protocol 'Equatable', preventing synthesized conformance of 'MockTextTokenizer<R>.Request' to 'Equatable'
   |                           `- note: associated value type '<<error type>>' does not conform to protocol 'Equatable', preventing synthesized conformance of 'MockTextTokenizer<R>.Request' to 'Equatable'
 9 | 	}
10 |
Swift.==:1:24: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'RawRepresentable'
1 | @inlinable public func == <T>(lhs: T, rhs: T) -> Bool where T : RawRepresentable, T.RawValue : Equatable
  |                        `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'RawRepresentable'
Swift.FloatingPoint.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'FloatingPoint'
1 | protocol FloatingPoint {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'FloatingPoint'
3 |
Swift.BinaryInteger.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'BinaryInteger'
1 | protocol BinaryInteger {
2 | public static func == <Other>(lhs: Self, rhs: Other) -> Bool where Other : BinaryInteger}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'BinaryInteger'
3 |
Swift._Pointer.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
1 | protocol _Pointer {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
3 |
Swift._Pointer.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
1 | protocol _Pointer {
2 | @inlinable public static func == <Other>(lhs: Self, rhs: Other) -> Bool where Other : _Pointer}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
3 |
Swift.Strideable.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'Strideable'
1 | protocol Strideable {
2 | @inlinable public static func == (x: Self, y: Self) -> Bool}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'Strideable'
3 |
Swift.StringProtocol.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'StringProtocol'
1 | protocol StringProtocol {
2 | @inlinable public static func == <RHS>(lhs: Self, rhs: RHS) -> Bool where RHS : StringProtocol}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'StringProtocol'
3 |
Swift.SIMD.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'SIMD'
1 | protocol SIMD {
2 | public static func == (a: Self, b: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'SIMD'
3 |
Foundation.__BridgedNSError.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '__BridgedNSError'
1 | protocol __BridgedNSError {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '__BridgedNSError'
3 |
Foundation._BridgedStoredNSError.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_BridgedStoredNSError'
1 | protocol _BridgedStoredNSError {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_BridgedStoredNSError'
3 |
FoundationEssentials.AttributedStringProtocol.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'AttributedStringProtocol'
1 | protocol AttributedStringProtocol {
2 | public static func == <RHS>(lhs: Self, rhs: RHS) -> Bool where RHS : AttributedStringProtocol}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'AttributedStringProtocol'
3 |
Swift.Equatable.==:2:13: note: protocol requires function '==' with type '(MockTextTokenizer<R>.Request, MockTextTokenizer<R>.Request) -> Bool'
1 | protocol Equatable {
2 | static func == (lhs: Self, rhs: Self) -> Bool}
  |             `- note: protocol requires function '==' with type '(MockTextTokenizer<R>.Request, MockTextTokenizer<R>.Request) -> Bool'
3 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:26:72: error: cannot find type 'TextGranularity' in scope
24 | 	}
25 |
26 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
27 | 		requests.append(.position(position, granularity, direction))
28 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:26:112: error: cannot find type 'TextDirection' in scope
24 | 	}
25 |
26 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
27 | 		requests.append(.position(position, granularity, direction))
28 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:37:77: error: cannot find type 'TextGranularity' in scope
35 | 	}
36 |
37 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> R? {
   |                                                                             `- error: cannot find type 'TextGranularity' in scope
38 | 		return nil
39 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:37:117: error: cannot find type 'TextDirection' in scope
35 | 	}
36 |
37 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> R? {
   |                                                                                                                     `- error: cannot find type 'TextDirection' in scope
38 | 		return nil
39 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:41:71: error: cannot find type 'TextGranularity' in scope
39 | 	}
40 |
41 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                       `- error: cannot find type 'TextGranularity' in scope
42 | 		return false
43 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:41:111: error: cannot find type 'TextDirection' in scope
39 | 	}
40 |
41 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                               `- error: cannot find type 'TextDirection' in scope
42 | 		return false
43 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:45:75: error: cannot find type 'TextGranularity' in scope
43 | 	}
44 |
45 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                           `- error: cannot find type 'TextGranularity' in scope
46 | 		return false
47 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:45:115: error: cannot find type 'TextDirection' in scope
43 | 	}
44 |
45 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                                   `- error: cannot find type 'TextDirection' in scope
46 | 		return false
47 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:65: error: cannot find type 'TextGranularity' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                 `- error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:105: error: cannot find type 'TextDirection' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                         `- error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:131: error: cannot find type 'CGFloat' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                                                   `- error: cannot find type 'CGFloat' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:70: error: cannot find type 'TextGranularity' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                      `- error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:110: error: cannot find type 'TextDirection' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                                                              `- error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:64: error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                `- error: cannot find type 'TextGranularity' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:104: error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                        `- error: cannot find type 'TextDirection' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:68: error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                    `- error: cannot find type 'TextGranularity' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:108: error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                            `- error: cannot find type 'TextDirection' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/NSTextSelection+Extensions.swift:9:11: error: cannot find type 'NSTextSelection' in scope
 7 | @available(iOS 15.0, macOS 12.0, tvOS 15.0, *)
 8 | @available(watchOS, unavailable)
 9 | extension NSTextSelection.Granularity {
   |           `- error: cannot find type 'NSTextSelection' in scope
10 | 	public init(_ granularity: TextGranularity) {
11 | 		switch granularity {
/host/spi-builder-workspace/Sources/Ligature/NSTextSelection+Extensions.swift:10:29: error: cannot find type 'TextGranularity' in scope
 8 | @available(watchOS, unavailable)
 9 | extension NSTextSelection.Granularity {
10 | 	public init(_ granularity: TextGranularity) {
   |                             `- error: cannot find type 'TextGranularity' in scope
11 | 		switch granularity {
12 | 		case .character:
/host/spi-builder-workspace/Sources/Ligature/NSTextSelection+Extensions.swift:29:30: error: cannot find type 'TextGranularity' in scope
27 | 	}
28 |
29 | 	public var textGranularity: TextGranularity {
   |                              `- error: cannot find type 'TextGranularity' in scope
30 | 		switch self {
31 | 		case .character:
[32/34] Compiling Ligature TextRange+Bounded.swift
[33/34] Compiling Ligature TextInputStringTokenizer.swift
error: emit-module command failed with exit code 1 (use -v to see invocation)
[34/34] Emitting module Ligature
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:8:27: error: cannot find type 'TextGranularity' in scope
 6 |
 7 | 	public enum Request: Equatable {
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                           `- error: cannot find type 'TextGranularity' in scope
 9 | 	}
10 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:8:44: error: cannot find type 'TextDirection' in scope
 6 |
 7 | 	public enum Request: Equatable {
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                                            `- error: cannot find type 'TextDirection' in scope
 9 | 	}
10 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:7:14: error: type 'MockTextTokenizer<R>.Request' does not conform to protocol 'Equatable'
 5 | 	public typealias TextRange = R
 6 |
 7 | 	public enum Request: Equatable {
   |              |- error: type 'MockTextTokenizer<R>.Request' does not conform to protocol 'Equatable'
   |              `- note: add stubs for conformance
 8 | 		case position(Position, TextGranularity, TextDirection)
   |                           |                `- note: associated value type '<<error type>>' does not conform to protocol 'Equatable', preventing synthesized conformance of 'MockTextTokenizer<R>.Request' to 'Equatable'
   |                           `- note: associated value type '<<error type>>' does not conform to protocol 'Equatable', preventing synthesized conformance of 'MockTextTokenizer<R>.Request' to 'Equatable'
 9 | 	}
10 |
Swift.==:1:24: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'RawRepresentable'
1 | @inlinable public func == <T>(lhs: T, rhs: T) -> Bool where T : RawRepresentable, T.RawValue : Equatable
  |                        `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'RawRepresentable'
Swift.FloatingPoint.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'FloatingPoint'
1 | protocol FloatingPoint {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'FloatingPoint'
3 |
Swift.BinaryInteger.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'BinaryInteger'
1 | protocol BinaryInteger {
2 | public static func == <Other>(lhs: Self, rhs: Other) -> Bool where Other : BinaryInteger}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'BinaryInteger'
3 |
Swift._Pointer.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
1 | protocol _Pointer {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
3 |
Swift._Pointer.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
1 | protocol _Pointer {
2 | @inlinable public static func == <Other>(lhs: Self, rhs: Other) -> Bool where Other : _Pointer}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_Pointer'
3 |
Swift.Strideable.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'Strideable'
1 | protocol Strideable {
2 | @inlinable public static func == (x: Self, y: Self) -> Bool}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'Strideable'
3 |
Swift.StringProtocol.==:2:31: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'StringProtocol'
1 | protocol StringProtocol {
2 | @inlinable public static func == <RHS>(lhs: Self, rhs: RHS) -> Bool where RHS : StringProtocol}
  |                               `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'StringProtocol'
3 |
Swift.SIMD.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'SIMD'
1 | protocol SIMD {
2 | public static func == (a: Self, b: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'SIMD'
3 |
Foundation.__BridgedNSError.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '__BridgedNSError'
1 | protocol __BridgedNSError {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '__BridgedNSError'
3 |
Foundation._BridgedStoredNSError.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_BridgedStoredNSError'
1 | protocol _BridgedStoredNSError {
2 | public static func == (lhs: Self, rhs: Self) -> Bool}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to '_BridgedStoredNSError'
3 |
FoundationEssentials.AttributedStringProtocol.==:2:20: note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'AttributedStringProtocol'
1 | protocol AttributedStringProtocol {
2 | public static func == <RHS>(lhs: Self, rhs: RHS) -> Bool where RHS : AttributedStringProtocol}
  |                    `- note: candidate would match if 'MockTextTokenizer<R>.Request' conformed to 'AttributedStringProtocol'
3 |
Swift.Equatable.==:2:13: note: protocol requires function '==' with type '(MockTextTokenizer<R>.Request, MockTextTokenizer<R>.Request) -> Bool'
1 | protocol Equatable {
2 | static func == (lhs: Self, rhs: Self) -> Bool}
  |             `- note: protocol requires function '==' with type '(MockTextTokenizer<R>.Request, MockTextTokenizer<R>.Request) -> Bool'
3 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:26:72: error: cannot find type 'TextGranularity' in scope
24 | 	}
25 |
26 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
27 | 		requests.append(.position(position, granularity, direction))
28 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:26:112: error: cannot find type 'TextDirection' in scope
24 | 	}
25 |
26 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
27 | 		requests.append(.position(position, granularity, direction))
28 |
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:37:77: error: cannot find type 'TextGranularity' in scope
35 | 	}
36 |
37 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> R? {
   |                                                                             `- error: cannot find type 'TextGranularity' in scope
38 | 		return nil
39 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:37:117: error: cannot find type 'TextDirection' in scope
35 | 	}
36 |
37 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> R? {
   |                                                                                                                     `- error: cannot find type 'TextDirection' in scope
38 | 		return nil
39 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:41:71: error: cannot find type 'TextGranularity' in scope
39 | 	}
40 |
41 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                       `- error: cannot find type 'TextGranularity' in scope
42 | 		return false
43 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:41:111: error: cannot find type 'TextDirection' in scope
39 | 	}
40 |
41 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                               `- error: cannot find type 'TextDirection' in scope
42 | 		return false
43 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:45:75: error: cannot find type 'TextGranularity' in scope
43 | 	}
44 |
45 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                           `- error: cannot find type 'TextGranularity' in scope
46 | 		return false
47 | 	}
/host/spi-builder-workspace/Sources/Ligature/MockTextTokenizer.swift:45:115: error: cannot find type 'TextDirection' in scope
43 | 	}
44 |
45 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                                   `- error: cannot find type 'TextDirection' in scope
46 | 		return false
47 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:65: error: cannot find type 'TextGranularity' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                 `- error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:105: error: cannot find type 'TextDirection' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                         `- error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:15:131: error: cannot find type 'CGFloat' in scope
13 | 	typealias Position = TextRange.Bound
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
   |                                                                                                                                   `- error: cannot find type 'CGFloat' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:70: error: cannot find type 'TextGranularity' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                      `- error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:16:110: error: cannot find type 'TextDirection' in scope
14 |
15 | 	func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position?
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
   |                                                                                                              `- error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:64: error: cannot find type 'TextGranularity' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                `- error: cannot find type 'TextGranularity' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:18:104: error: cannot find type 'TextDirection' in scope
16 | 	func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> TextRange?
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                        `- error: cannot find type 'TextDirection' in scope
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
20 | }
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:68: error: cannot find type 'TextGranularity' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                    `- error: cannot find type 'TextGranularity' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:19:108: error: cannot find type 'TextDirection' in scope
17 |
18 | 	func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
19 | 	func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool
   |                                                                                                            `- error: cannot find type 'TextDirection' in scope
20 | }
21 |
/host/spi-builder-workspace/Sources/Ligature/NSTextSelection+Extensions.swift:9:11: error: cannot find type 'NSTextSelection' in scope
 7 | @available(iOS 15.0, macOS 12.0, tvOS 15.0, *)
 8 | @available(watchOS, unavailable)
 9 | extension NSTextSelection.Granularity {
   |           `- error: cannot find type 'NSTextSelection' in scope
10 | 	public init(_ granularity: TextGranularity) {
11 | 		switch granularity {
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:14:72: error: cannot find type 'TextGranularity' in scope
12 |
13 | extension SourceTokenizer : TextTokenizer {
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
16 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:14:112: error: cannot find type 'TextDirection' in scope
12 |
13 | extension SourceTokenizer : TextTokenizer {
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
16 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:18:77: error: cannot find type 'TextGranularity' in scope
16 | 	}
17 |
18 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> FallbackTokenzier.TextRange? {
   |                                                                             `- error: cannot find type 'TextGranularity' in scope
19 | 		return fallbackTokenzier.rangeEnclosingPosition(position, with: granularity, inDirection: direction)
20 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:18:117: error: cannot find type 'TextDirection' in scope
16 | 	}
17 |
18 | 	public func rangeEnclosingPosition(_ position: Position, with granularity: TextGranularity, inDirection direction: TextDirection) -> FallbackTokenzier.TextRange? {
   |                                                                                                                     `- error: cannot find type 'TextDirection' in scope
19 | 		return fallbackTokenzier.rangeEnclosingPosition(position, with: granularity, inDirection: direction)
20 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:22:71: error: cannot find type 'TextGranularity' in scope
20 | 	}
21 |
22 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                       `- error: cannot find type 'TextGranularity' in scope
23 | 		return fallbackTokenzier.isPosition(position, atBoundary: granularity, inDirection: direction)
24 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:22:111: error: cannot find type 'TextDirection' in scope
20 | 	}
21 |
22 | 	public func isPosition(_ position: Position, atBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                               `- error: cannot find type 'TextDirection' in scope
23 | 		return fallbackTokenzier.isPosition(position, atBoundary: granularity, inDirection: direction)
24 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:26:75: error: cannot find type 'TextGranularity' in scope
24 | 	}
25 |
26 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                           `- error: cannot find type 'TextGranularity' in scope
27 | 		return fallbackTokenzier.isPosition(position, withinTextUnit: granularity, inDirection: direction)
28 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:26:115: error: cannot find type 'TextDirection' in scope
24 | 	}
25 |
26 | 	public func isPosition(_ position: Position, withinTextUnit granularity: TextGranularity, inDirection direction: TextDirection) -> Bool {
   |                                                                                                                   `- error: cannot find type 'TextDirection' in scope
27 | 		return fallbackTokenzier.isPosition(position, withinTextUnit: granularity, inDirection: direction)
28 | 	}
/host/spi-builder-workspace/Sources/Ligature/SourceTokenizer.swift:13:1: error: type 'SourceTokenizer<FallbackTokenzier>' does not conform to protocol 'TextTokenizer'
11 | }
12 |
13 | extension SourceTokenizer : TextTokenizer {
   | |- error: type 'SourceTokenizer<FallbackTokenzier>' does not conform to protocol 'TextTokenizer'
   | `- note: add stubs for conformance
14 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection, alignment: CGFloat?) -> Position? {
15 | 		return fallbackTokenzier.position(from: position, toBoundary: granularity, inDirection: direction, alignment: alignment)
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:11:17: note: protocol requires nested type 'TextRange'
 9 | @MainActor
10 | public protocol TextTokenizer<TextRange> {
11 | 	associatedtype TextRange: Bounded
   |                 `- note: protocol requires nested type 'TextRange'
12 |
13 | 	typealias Position = TextRange.Bound
/host/spi-builder-workspace/Sources/Ligature/TextDirection+Extensions.swift:1:11: error: cannot find type 'TextLayoutDirection' in scope
 1 | extension TextLayoutDirection {
   |           `- error: cannot find type 'TextLayoutDirection' in scope
 2 | 	public func textStorageDirection(with layout: UserInterfaceLayoutDirection) -> TextStorageDirection? {
 3 | 		switch (self, layout) {
/host/spi-builder-workspace/Sources/Ligature/TextDirection+Extensions.swift:16:11: error: cannot find type 'TextDirection' in scope
14 | }
15 |
16 | extension TextDirection {
   |           `- error: cannot find type 'TextDirection' in scope
17 | 	public func textStorageDirection(with layout: UserInterfaceLayoutDirection) -> TextStorageDirection? {
18 | 		switch rawValue {
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:23:72: error: cannot find type 'TextGranularity' in scope
21 |
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
   |                                                                        `- error: cannot find type 'TextGranularity' in scope
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
25 | 	}
/host/spi-builder-workspace/Sources/Ligature/TextTokenizer.swift:23:112: error: cannot find type 'TextDirection' in scope
21 |
22 | extension TextTokenizer {
23 | 	public func position(from position: Position, toBoundary granularity: TextGranularity, inDirection direction: TextDirection) -> Position? {
   |                                                                                                                `- error: cannot find type 'TextDirection' in scope
24 | 		self.position(from: position, toBoundary: granularity, inDirection: direction, alignment: nil)
25 | 	}
BUILD FAILURE 6.1 android