A Swift package for encoding and decoding Swift Symbol Graph files.

Overview

SymbolKit

The specification and reference model for the Symbol Graph File Format.

A Symbol Graph models a module, also known in various programming languages as a "framework", "library", or "package", as a directed graph. In this graph, the nodes are declarations, and the edges connecting nodes are relationships between declarations.

To illustrate the shape of a symbol graph, take the following Swift code as a module called MyModule:

public struct MyStruct {
  public var x: Int
}

There are two nodes in this module's graph: the structure MyStruct and its property, x:

x is related to MyStruct: it is a member of MyStruct. SymbolKit represents relationships as directed edges in the graph:

The source of an edge points to its target. You can read this edge as x is a member of MyStruct. Every edge is qualified by some kind of relationship; in this case, the kind is membership. There can be many kinds of relationships, even multiple relationships between the same two nodes. Here's another example, adding a Swift protocol to the mix:

public protocol P {}

public struct MyStruct: P {
  public var x: Int
}

Now we've added a new node for the protocol P, and a new conformance relationship between MyStruct and P:

By modeling different kinds of relationships, SymbolKit can provide rich data to power documentation, answering interesting questions, such as:

  • Which types conform to this protocol?
  • What is the class hierarchy rooted at this class?
  • Which protocol provides a requirement called count?
  • Which types customize this protocol requirement?

In addition, graph representations of data also present opportunities for visualizations in documentation, illustrating the structure or hierarchy of a module.

Comments
  • Split Symbol.swift to reduce complexity of the file

    Split Symbol.swift to reduce complexity of the file

    The Symbol.swift currently has 1400 lines.

    This PR is intended to split the Symbol.swift file into a file system hierarchy.

    So that the Symbol.swift only have SymbolGraph.Symbol definition and also makes it easier for writing test case.

    Discussion

    • [x] Which style do you prefer?
    - Symbol
    	- Availability
    		- Availability.swift
    		- Domain.swift
    	- Symbol.swift  	
    

    Or

    - Symbol
    	- Availability
    		- Domain.swift
    	- Availability.swift
    - Symbol.swift  	
    
    • [x] What should we do if there are 2 struct/enum both named as "Kind"

    Currently there are SymbolGraph.Symbol.DeclarationFragments.Fragment.Kind and SymbolGraph.Symbol.Kind.

    Although they are not in the same folder, they are in the same module. Which is not allowed by Swift

    error: filename "Kind.swift" used twice: 'Symbol/DeclarationFragments/Fragment/Kind.swift' and 'SymbolKit/SymbolGraph/Symbol/Kind.swift'
    note: filenames are used to distinguish private declarations with the same name
    

    https://belkadan.com/blog/2021/11/Swift-Mangling-Regret-Private-Discriminators/

    Status

    • [x] ~WIP~ After the above 2 discussion is solved, I'll complete the full PR.
    opened by Kyle-Ye 23
  • Publish Swift SymbolKit's documentation to GitHub pages

    Publish Swift SymbolKit's documentation to GitHub pages

    Summary

    This sets the foundation for deploying Swift SymbolKit's documentation to GitHub pages.

    • Adds the Swift-DocC Plugin as a dependency of Swift-SymbolKit.
    • Adds a script to simplify deployment of documentation to GitHub pages.
    • Adds check-source and test script and fix missing headers.
    • Update README docs (Remove some duplication and add a link to the github page).
    • Adds pull request template file as other swift-docc related repo.

    After merging this PR, we should be able to prepare a gh-pages branch on the main swift-docc-symbolkit repo with no content on it, run the bin/update-gh-pages-documentation-site script and have docs available.

    Dependencies

    None.

    Testing

    With Swift 5.6, run:

    swift package --disable-sandbox preview-documentation --target SymbolKit
    

    and confirm the Swift-DocC preview works as expected.

    Checklist

    Make sure you check off the following items. If they cannot be completed, provide a reason.

    • [x] Added tests
    • [x] Ran the ./bin/test script and it succeeded
    • [x] Updated documentation if necessary

    Most of the content of this PR comes from @ethan-kusters. This is just a port for swift-docc-symbolkit repo. See more info here https://github.com/apple/swift-markdown/pull/32

    opened by Kyle-Ye 17
  • [NFC] Avoid shared prefixes in file names

    [NFC] Avoid shared prefixes in file names

    This was discussed lightly in #8 after it was merged.

    Shared prefixes lead to long file names that are difficult to tell apart. We should only use prefixes that derive from parent type/module etc names without trailing "+"s when there is a naming clash. (Ideally, SwiftPM should be able to handle same-name files in different paths, but that's outside the scope of this PR.) "+" should be reserved for protocol conformances, such as "SemanticVersion+Comparable", which I believe is the convention in all other official open-source projects.

    Currently each nested type definition is defined in its own file. I don't think this is necessary, and types that are closely related can be grouped in the same file. But that can be a follow-up PR.

    opened by WowbaggersLiquidLunch 15
  • Make Symbol Graph Format Extensible

    Make Symbol Graph Format Extensible

    This PR is required to allow SwiftDocC to restructure the Symbol Graph Format after decoding the Symbol Graph Files. This is necessary to implement extensions to external types (fix apple/swift-docc#210).

    Summary

    This PR contains four major changes:

    • change Symbol.KindIdentifier to use a struct-type with static properties for known values
    • allow for registering new Symbol.KindIdentifiers to ensure identifiers get parsed correctly
    • change Codable conformance of Symbol and Relationship to allow for encoding and decoding unknown Mixins
    • change Hashable conformance of Relationship so unknown Mixins can be taken into account while hashing

    Please refer to SymbolKit.docc/GraphFormatExtensions.md to see how the new APIs are to be used.

    The most critical part of this implementation is how to handle decoding (and encoding) of custom Symbol.KindIdentifiers and Mixins. Symbol (and Relationship's) Codable implementations must know how to encode/decode the custom types. This PR solves this problem by having the instance defining the custom extensions register the extensions to the Encoder/Decoder. This is realized via Encoder/Decoder's userInfo. This choice has two key advantages over registering the extensions to the static context:

    • no need for synchronization
    • different extension views on the symbol graph format can coexist within one executable without influencing each other

    Next to the user info based approach, this PR also offers the option to register Symbol.KindIdentifier to the static context for convenience.

    #7 only provided a solution for Symbol.KindIdentifier which did not register custom identifiers in a global context, but stored the raw value in the Symbol.KindIdentifier locally. This, however, has one disadvantage: Custom identifiers are parsed differently than those defined by SymbolKit. The language prefix cannot be removed, since the initializer cannot know, if the first section of the identifier is a language, or already important for the language-agnostic identifier.

    Dependencies

    This PR should be merged after #45 as this PR is based on that branch.

    Furthermore, this PR incorporates similar changes as #7 which seems to be stale.

    Testing

    I added test cases that:

    • check encoding/decoding works with custom mixins
    • Symbol.KindIdentifiers registered on the static context are parsed as expected and appear in allCases
    • Symbol.KindIdentifiers registered on a decoder are decoded as expected and do not appear in allCases
    • Hashable conformance of Relationships works as intended with unknown Mixins which do or do not conform to Hashable

    Benchmark

    Benchmarked this PR (e6478fd383a01e4f79421d9bbac5610bbffdc9dc) against main (cfa80d701f7d8699d64237c7bcc760d6c9616529) using Swift-DocC's bin/benchmark.swift. Swift-DocC was on main (ed1770f974c3a1c6d2d1437cc07bc90a8f220c89). I used a bundle generated using swift run make-test-bundle --sizeFactor 50.

    There is no significant change in runtime:

    +-----------------------------------------------------------------------------------------------------+
    | Metric                                   | Change     | Before               | After                |
    +-----------------------------------------------------------------------------------------------------+
    | Duration for 'bundle-registration' (sec) | +0.54%     | 12.01                | 12.08                |
    | Duration for 'convert-total-time' (sec)  | +0.28%     | 19.92                | 19.98                |
    | Duration for 'documentation-processing'  | -0.15%     | 7.38                 | 7.37                 |
    | Duration for 'finalize-navigation-index' | no change  | 0.24                 | 0.24                 |
    | Peak memory footprint (MB)               | -0.21%     | 1966.29              | 1962.25              |
    | Data subdirectory size (MB)              | no change  | 538.01               | 538.01               |
    | Index subdirectory size (MB)             | no change  | 4.84                 | 4.84                 |
    | Total DocC archive size (MB)             | no change  | 566.93               | 566.93               |
    | Topic Anchor Checksum                    | no change  | 08d0a84bec913460905f | 08d0a84bec913460905f |
    | Topic Graph Checksum                     | no change  | 74d25c4f1ee185ad5676 | 74d25c4f1ee185ad5676 |
    +-----------------------------------------------------------------------------------------------------+
    

    Checklist

    Make sure you check off the following items. If they cannot be completed, provide a reason.

    • [x] Added tests
    • [x] Ran the ./bin/test script and it succeeded
    • [x] Updated documentation if necessary
    • [x] Ran Benchmarks
    opened by theMomax 13
  • separate relationships by the graph they came from

    separate relationships by the graph they came from

    Bug/issue #, if applicable: rdar://91246013

    Summary

    This PR updates the UnifiedSymbolGraph to also differentiate relationships by a Selector. Since relationships don't have an interfaceLanguage of their own, their respective symbols are searched to supply one. They are first searched in the graph being processed, then in the in-progress unified graph as a whole. The latter step is intended to catch protocol conformance on an external type when it's being loaded from an extension symbol graph.

    Dependencies

    While the change was made in a way that preserved source compatibility, a corresponding change to Swift-DocC (https://github.com/apple/swift-docc/pull/304) is required to use the new information.

    Testing

    A new test case is added to verify the relationship sorting behavior in a basic case. As end-to-end behavior is not fully implemented yet, a debugger and/or test project is required to observe the new behavior.

    Checklist

    Make sure you check off the following items. If they cannot be completed, provide a reason.

    • [x] Added tests
    • [x] Ran the ./bin/test script and it succeeded
    • [x] Updated documentation if necessary
    opened by QuietMisdreavus 10
  • Add snippet mixin for symbols

    Add snippet mixin for symbols

    Snippets need a place to put the chunks of its code listing.

    Chunks contain source code, and an optional source language and name for a subheading at the minimum.

    opened by bitjammer 8
  • Enable library evolution via a conditional

    Enable library evolution via a conditional

    Bug/issue #, if applicable: rdar://91237393

    Summary

    Adds support for building the SymbolKit library with library evolution enabled. This is disabled by default, and to enable the behavior, add an .enable-library-evolution file at the root of your checkout.

    Dependencies

    None.

    Testing

    Verify that SymbolKit is built with library evolution enabled by inspecting build logs if and only if the checkout has an .enable-library-evolution file at its root.

    Checklist

    • ~[ ] Added tests~ N/A
    • [x] Ran the ./bin/test script and it succeeded
    • [x] Updated documentation if necessary
    opened by franklinsch 7
  • update images in docs

    update images in docs

    This PR updates the images used in the README and the docs to allow for the doc catalog added in https://github.com/apple/swift-docc-symbolkit/pull/6 to have proper dark-mode images.

    opened by QuietMisdreavus 6
  • add `ivar` and `macro` to the known symbol kinds

    add `ivar` and `macro` to the known symbol kinds

    Bug/issue #, if applicable: rdar://91166981

    Summary

    To allow SymbolKit to load symbol graphs from the in-progress Clang symbol-graph support (cf. https://reviews.llvm.org/D122611 and https://reviews.llvm.org/D122446), two new symbol kinds need to be added: One for C preprocessor macros, and one for Objective-C interface variables. This PR also adds a new test that ensures that all the KindIdentifier cases can parse back as themselves, to ensure that the .init(identifier:) and lookupIdentifier() functions don't get out of sync.

    Dependencies

    None

    Testing

    The "ExtractAPI" symbol graph support in Clang is still experimental, but symbol graphs can be found as part of the ExtractAPI tests in the LLVM main branch. Loading either the macros.c output or the objc_interface.m output should result in a parsed SymbolGraph that has no .unknown symbols.

    Checklist

    Make sure you check off the following items. If they cannot be completed, provide a reason.

    • [x] Added tests
    • [x] Ran the ./bin/test script and it succeeded
    • [ n/a ] Updated documentation if necessary
    opened by QuietMisdreavus 5
  • Add Slice to replace Snippet Chunks

    Add Slice to replace Snippet Chunks

    SE-0356 latest changes include parsing "slices" out of snippets. These are not quite the same as the current "chunks", which were a speculation that eventually formed into "slices". Deprecate chunks and add the slice data model.

    Move snippet presentation code to a line-based format: slices are represented simply as a name and index range to pull their code lines.

    Add the isVirtual property to modules, for modules that are created implicitly to hold relationships. When snippet symbol graphs are created, a fake module is created to hold the snippets, since snippets do not come from any one module. This property simplifies what is basically just a heuristic in DocC to a simple factual check.

    rdar://95220716

    Required for related changes:

    • https://github.com/apple/swift-docc/pull/338
    • https://github.com/apple/swift-docc-plugin/pull/20
    opened by bitjammer 4
  • MergeStrategy with ExtensionGraphAssociation Option for GraphCollector

    MergeStrategy with ExtensionGraphAssociation Option for GraphCollector

    This adaption is required to fix apple/swift-docc#210

    Summary

    Adds a strategy option to GraphCollector's init. The ExtensionGraphAssociation option decides if extension graphs are merged with the extending or extended graph.

    Dependencies

    This PR does not introduce a breaking change and can be merged independently.

    Testing

    I added a new unit test to test the merging behavior for both ExtensionGraphAssociation options.

    Checklist

    Make sure you check off the following items. If they cannot be completed, provide a reason.

    • [x] Added tests
    • [x] Ran the ./bin/test script and it succeeded
    • [x] Updated documentation if necessary
    opened by theMomax 4
  • encode relationshipsByLanguage and orphanRelationships in dump-unified-graph

    encode relationshipsByLanguage and orphanRelationships in dump-unified-graph

    Bug/issue #, if applicable: None

    Summary

    When https://github.com/apple/swift-docc-symbolkit/pull/28 landed, the code for dump-unified-graph was not updated to use the new relationship data. This PR updates the Encodable extension on UnifiedSymbolGraph to use the relationshipsByLanguage and orphanRelationships properties instead of the old unified relationships property. This removes a deprecation warning when building SymbolKit.

    Dependencies

    None

    Testing

    Rerun the testing instructions for https://github.com/apple/swift-docc-symbolkit/pull/29. The Xcode 14 beta will generate multiple symbol graphs per-language, so passing the symbol-graph directory from a project's build folder to --symbol-graph-dir will work.

    Checklist

    Make sure you check off the following items. If they cannot be completed, provide a reason.

    • [ n/a ] Added tests
    • [x] Ran the ./bin/test script and it succeeded
    • [ n/a ] Updated documentation if necessary
    opened by QuietMisdreavus 1
  • [DNM] Comply `SymbolGraph.SemanticVersion` to SemVer 2.0.0

    [DNM] Comply `SymbolGraph.SemanticVersion` to SemVer 2.0.0

    This is a correct but somewhat over-engineered reinplementation of SymbolGraph.SemanticVersion.

    The most important (and also most invasive) changes are the handling of pre-release and build metadata. These include their validation and (their contribution to version-) comparison.

    Some less important changes include the following:

    • Version core identifiers are changed to be backed by UInt, because they’re not allowed be less than 0. This might appear to be a departure from the convention of using Int for even always-positive integers (e.g. Array.Index). However, in this specific case, the use of version coure identifiers is mostly contained in the domain of constructing semantic versions, and does not have any apparent need to participate in numeric operations outside of the domain other than comparing individual identifiers. And considering Swift’s current lack of build-time evaluation and error handling, using UInt looks like the right trade off between ergnomics and “safety”.

    • Deprecated the initializer for a new one that throws error, so that erros can be handled instead of runtime trapping.

    • Added some facilities for inspecting and working with versions’ semantics in general.

    • ~Updated the tools version specifier in the main package manifest to “5.6”, because Swift 5.2 has some type-checking bugs that affect the new implementation.~

    • Added a lot of tests, which should cover a large area of (edge) cases.

    Checklist

    • [x] Added tests
    • [ ] Ran the ./bin/test script and it succeeded (Tests pass using the 2020-05-23 trunk toolchain on Xcode, but ./bin/test fails with "_$s14SymbolKitTests05ErrorC0C26testOversizedNumericValuesyyF3sumL_ySsSS_SStF10zeroPaddedL__8toLengthSaySJGSS_SitF", referenced from: _$s14SymbolKitTests05ErrorC0C26testOversizedNumericValuesyyF3sumL_ySsSS_SStF in ErrorTests.swift.o"
    • [x] Updated documentation if necessary
    opened by WowbaggersLiquidLunch 4
  • [SR-16111] [SymbolKit] Provide a simplified method for reading a symbol's or relationship's mixins

    [SR-16111] [SymbolKit] Provide a simplified method for reading a symbol's or relationship's mixins

    | | | |------------------|-----------------| |Previous ID | SR-16111 | |Radar | None | |Original Reporter | @QuietMisdreavus | |Type | Improvement |

    Additional Detail from JIRA

    | | | |------------------|-----------------| |Votes | 0 | |Component/s | Swift-DocC | |Labels | Improvement | |Assignee | None | |Priority | Medium |

    md5: 9c3463d48a54fbd06e0e7b6bba7d89d2

    Issue Description:

    SymbolKit currently defines optional data fields for symbols and relationships as a set of "mixins", which is represented as a map from a "mixin key" to the parsed value of that mixin. Swift-DocC uses these mixins for various uses, but checking for a value and reading it out is a bit cumbersome. For example, this is how Swift-DocC loads availability information from a symbol:

    if var availability = symbol.mixins[SymbolGraph.Symbol.Availability.mixinKey] as? SymbolGraph.Symbol.Availability

    This could be greatly simplified into some kind of getMixin method on symbols and relationships in SymbolKit. It could look something like this:

    func getMixin<T>() -> T? where T: Mixin {
        self.mixins[T.mixinKey] as? T
    }
    

    In fact, Swift-DocC already defines something similar, as an extension on mixin dictionaries themselves:

    extension Dictionary where Key == String, Value == Mixin {
        func getValueIfPresent<T>(for mixinType: T.Type) -> T? where T: Mixin {
            return self[mixinType.mixinKey] as? T
        }
    }
    

    Adding one of these methods to SymbolKit and encouraging its use throughout Swift-DocC would make its codebase much more readable.

    opened by QuietMisdreavus 1
  • [SR-15982] SymbolKit crashes when encoding unknown mixins

    [SR-15982] SymbolKit crashes when encoding unknown mixins

    | | | |------------------|-----------------| |Previous ID | SR-15982 | |Radar | rdar://problem/90348996 | |Original Reporter | @franklinsch | |Type | Improvement |

    Additional Detail from JIRA

    | | | |------------------|-----------------| |Votes | 0 | |Component/s | Swift-DocC | |Labels | Improvement | |Assignee | None | |Priority | Medium |

    md5: 7a780d28224eef5a62504852074094c5

    Issue Description:

    SymbolKit decodes unknown Symbol mixins just fine by adding them to Symbol.mixins, but {{fatalError}}s when encoding unknown mixins: https://github.com/apple/swift-docc-symbolkit/blob/main/Sources/SymbolKit/SymbolGraph/Symbol/Symbol.swift#L180.

    For example, when decoding a symbol graph from the Swift compiler (which includes the location mixin) and encoding it back, SymbolKit crashes.

    We should make SymbolKit encode unknown mixins.

    opened by franklinsch 1
  • change KindIdentifier into a struct to handle unknown symbol kinds

    change KindIdentifier into a struct to handle unknown symbol kinds

    Resolves rdar://84276085

    This PR changes the type definition of KindIdentifier from an enum into a struct with static fields for common values. This has two effects:

    1. Symbol kinds that don't match the currently-known set can still be properly handled and parsed, by saving the identifier string from the symbol graph.
    2. Adding new symbol kinds to the set of known kinds is no longer a breaking change for downstream users; matching KindIdentifier now requires a case default branch to handle unknown values, instead of simply matching on the .unknown enum case.
    opened by QuietMisdreavus 16
  • [SR-15551] Provide public API to access the available languages of both a symbol and a unified symbol graph

    [SR-15551] Provide public API to access the available languages of both a symbol and a unified symbol graph

    | | | |------------------|-----------------| |Previous ID | SR-15551 | |Radar | rdar://85982095 | |Original Reporter | @ethan-kusters | |Type | Improvement |

    Additional Detail from JIRA

    | | | |------------------|-----------------| |Votes | 0 | |Component/s | Swift-DocC | |Labels | Improvement | |Assignee | None | |Priority | Medium |

    md5: dffbe7c5d5fcaa47f128391aa1a6450a

    Issue Description:

    SymbolKit should provide public API to access the available languages of both a symbol and a unified symbol graph.

    We ran into the need for this in the work for mixed language support implemented here: https://github.com/apple/swift-docc/pull/47/files.

    Improvement 
    opened by ethan-kusters 0
Owner
Apple
Apple
Command line tool for exporting resources and generating code from your Figma files

Fugen Fugen is a command line tool for exporting resources and generating code from your Figma files. Currently, Fugen supports the following entities

Almaz Ibragimov 69 Dec 17, 2022
Beak 🐦 Peck into your Swift files from the command line

Beak ?? Peck into your Swift files from the command line Beak can take a standard Swift file and then list and run any public global functions in it v

Yonas Kolb 566 Dec 6, 2022
A plugin to allow Lightroom to export HEIC files

LRExportHEIC A plugin to allow Lightroom to export HEIC files. There are two components: The plugin itself, which is the component that interfaces wit

Manu Wallner 21 Jan 3, 2023
Aplikasi iReader adalah Aplikasi Pemindai Barcode dan Teks untuk iOS & MacOS dengan fitur Text Scanner via Kamera & Import Files.

Aplikasi iReader adalah Aplikasi Pemindai Barcode dan Teks untuk iOS & MacOS dengan fitur Text Scanner via Kamera & Import Files. Aplikasi ini dibuat dengan SwiftUI, AVKit, dan VisionKit (On Device Machine Learning Processing).

DK 8 Oct 6, 2022
A Swift package that provides convenient Lorem Ipsum text, images, colors and other placeholders for rapidly prototyping, building and testing your iOS applications.

Lorem Introducing Lorem, a placeholder generator library for iOS to help you rapidly prototype, build and test your iOS applications. By leveraging Sw

Thirdfort Limited 10 Dec 5, 2022
WebDomHandling - A Swift Package for handling JavaScript code between WebKit and Swift implemented by WebKit

WebDomHandling A Swift Package for handling JavaScript code between WebKit and S

null 0 Jan 23, 2022
A corresponding package to RxKotlin Plus, but for Swift and iOS

A corresponding package to RxKotlin Plus, but for Swift and iOS

Lightning Kite 0 Dec 15, 2021
An IPFS client/api Swift Package, with the ability to add and pin any data on iOS/iPadOS/macOS

An IPFS client/api Swift Package, with the ability to add and pin any data on iOS/iPadOS/macOS. Originally bundled with GraniteUI, pulled out for independant use by any party.

Kala 4 Dec 8, 2022
Flutter package for detecting NSFW images and videos using native implementation

Flutter NSFW 1- Download, tflite modle and put it in assets folder 2 - Add the path of the tfliet to pubspec.yaml 3 - Read the file using path_provide

Syed Ahsan Ali 8 Oct 16, 2022
FlutterNativeDragAndDrop - A package that allows you to add native drag and drop support into your flutter app

native_drag_n_drop A package that allows you to add native drag and drop support

Alex Rabin 21 Dec 21, 2022
This is a Swift Package bundling different Train APIs into one simple Swift interface.

This is a Swift Package bundling different Train APIs into one simple Swift interface.

ICE Buddy 8 Jul 5, 2022
This repository hosts the PushwooshGeozones iOS SDK as an XCFramework based Swift Package.

This repository hosts the PushwooshGeozones iOS SDK as an XCFramework based Swift Package. Use this repository's Swift Package in Xcode 12+

Pushwoosh 2 Nov 23, 2021
SafeDecoder - a swift package that set defaults when Codable fails to decode a field

SafeDecoder is a swift package that set defaults when Codable fails to decode a field. SafeDecoder supports configurable default values, See SafeDecoder.Configuration.

GodL 4 Mar 21, 2022
A macOS application for accessing the output of the SimpleAnalytics package on the desktop.

The SimpleAnalytics package allows you to collect data user interaction analytic data in iOS and macOS applications. This SimpleAnalytics Reader app project allows you to more easily make sense of that collected data by displaying it on your Mac.

Dennis Birch 10 Dec 22, 2022
React Native package for interacting with HomeKit devices

React Native package for interacting with HomeKit devices

Ibrahim Berat Kaya 4 Dec 24, 2021
A simple protocol package that does nothing

HasResult A simple protocol package that does nothing. The HasResult protocol has a simple result property and a ResultType associated type. This is m

François Lamboley 0 Nov 6, 2021
Package that extends Combine with some useful APIs

CombineExpanded Package that extends Combine with some useful APIs. New API: then shareReplay Future.deferred then Wait for completion of self, then f

Cogniteq 1 Nov 24, 2021
Trigonometry - A small package to calculate values in an right angled triangle

Trigonometry - A small package to calculate values in an right angled triangle

null 2 Sep 12, 2022
A package for building sentence-based UI in SwiftUI

SentenceUI SentenceUI is an SwiftUI package for building form interfaces with natural language. Features The goal for SentenceUI is to make it as easy

Ricky 5 Dec 6, 2022