{"id":13995808,"url":"https://github.com/jessesquires/swift-proposal-analyzer","last_synced_at":"2025-07-22T22:32:37.486Z","repository":{"id":88763521,"uuid":"67910473","full_name":"jessesquires/swift-proposal-analyzer","owner":"jessesquires","description":"An analysis of Swift Evolution proposals","archived":true,"fork":false,"pushed_at":"2018-02-03T19:16:12.000Z","size":1983,"stargazers_count":58,"open_issues_count":0,"forks_count":5,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-08-10T14:21:21.721Z","etag":null,"topics":["analysis","proposal","swift","swift-evolution","swift-evolution-proposals"],"latest_commit_sha":null,"homepage":"https://jessesquires.github.io/swift-proposal-analyzer/","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jessesquires.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2016-09-11T04:39:59.000Z","updated_at":"2023-01-28T15:02:02.000Z","dependencies_parsed_at":"2024-01-20T18:07:17.826Z","dependency_job_id":"6c189cea-ac4c-4e51-b8ce-ca4e2f35ebf4","html_url":"https://github.com/jessesquires/swift-proposal-analyzer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jessesquires%2Fswift-proposal-analyzer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jessesquires%2Fswift-proposal-analyzer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jessesquires%2Fswift-proposal-analyzer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jessesquires%2Fswift-proposal-analyzer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jessesquires","download_url":"https://codeload.github.com/jessesquires/swift-proposal-analyzer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":227190408,"owners_count":17745257,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analysis","proposal","swift","swift-evolution","swift-evolution-proposals"],"created_at":"2024-08-09T14:03:35.656Z","updated_at":"2024-11-29T18:31:06.524Z","avatar_url":"https://github.com/jessesquires.png","language":"Swift","funding_links":[],"categories":["Swift"],"sub_categories":[],"readme":"# swift-proposal-analyzer [![Build Status](https://travis-ci.org/jessesquires/swift-proposal-analyzer.svg?branch=master)](https://travis-ci.org/jessesquires/swift-proposal-analyzer)\n\n*An analysis of Swift Evolution proposals*\n\n## About\n\nAll of the swift-evolution proposals are publicly available [on GitHub](https://github.com/apple/swift-evolution), however they are just markdown files — plain text. There's no way to query or filter the proposals. For example, you can't search for *\"all proposals written by Chris Lattner\"* or *\"all rejected proposals\"* or *\"all proposals that mention Objective-C\"*.\n\nThis project contains tools to analyze, query, and filter the Swift Evolution proposals based on any criteria you like.\n\nThis project accompanies [my talk](https://speakerdeck.com/jessesquires/140-proposals-in-30-minutes) from [FrenchKit](http://frenchkit.fr).\n\n## Requirements\n\n- macOS 10.11+\n- Xcode 8+\n- Swift 3.0+\n\n## Setup\n\nThis repo contains a number of different components:\n\n- The [`swift-evolution`](https://github.com/apple/swift-evolution) repo is a [git submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules). This is how proposals are synced to stay updated.\n- `main.swift` is a swift script that generates playground pages for all of the proposals. You can open `proposal-page-generator.xcodeproj` to modify the script.\n- `ProposalAnalyzer.xcodeproj` is a CocoaTouch framework that includes all the source code and the playground. This framework is imported in the playground.\n- `swift-proposal-analyzer.playground` is the playground (part of the `.xcodeproj`) that contains:\n    - All of the proposals as playground pages\n    - All of the proposals as raw `Resources/`\n    - Examples\n- `update_proposals.sh` is a bash script that does the following:\n    1.  Updates the `swift-evolution` submodule\n    2.  Copies the proposals from the submodule directory, into the playground `Resources/` directory\n    2.  Runs `main.swift` to generate the playground pages\n\n#### Cloning this repo\n\n```bash\n$ git clone https://github.com/jessesquires/swift-proposal-analyzer.git\n$ cd swift-proposal-analyzer/\n$ git submodule init\n$ git submodule update --remote\n$ ./update_proposals.sh\n```\n\n## Usage\n\nOpen and build `ProposalAnalyzer.xcodeproj`, then select the `swift-proposal-analyzer.playground` and run it like a normal playground.\n\nAfter parsing completes, you'll have an array of `Proposal` types:\n\n```swift\npublic final class Proposal {\n    public let title: String\n    public let seNumber: String\n\n    public let authors: [Author]\n    public let status: Status\n\n    public let fileName: String\n    public let fileContents: String\n    public let wordCount: Int\n}\n```\n\nMost proposal metadata is available, as well as the raw file contents. You can now perform different queries or apply filters to the proposal data.\n\n## Examples\n\n```swift\n// Find proposals implemented in Swift 3.0\nlet implementedInSwift3 = analyzer.proposalsWith(status: .implemented(.v3_0))\n```\n\n```swift\n// Find proposals authored or co-authored by Chris Lattner\nlet proposalsByLattner = analyzer.proposals.filter { p -\u003e Bool in\n    p.writtenBy(\"Chris Lattner\")\n}\n```\n\n```swift\n// Find total mentions of \"Objective-C\" across all proposals\nlet count = analyzer.occurrences(of: \"Objective-C\")\n```\n\n## Documentation\n\nYou can find the (unfinished) [docs here](http://jessesquires.github.io/swift-proposal-analyzer/).\n\n## Caveats\n\nSome of the code here is pretty \"quicky and dirty\", but it works! So `¯\\_(ツ)_/¯ ` :laughing: If there's a better way to do something, please [submit a pull request](https://github.com/jessesquires/swift-proposal-analyzer/pulls)!\n\nThis is a small dataset, so any conclusions should be taken with a grain of salt. :smile:\n\n## Credits\n\nCreated and maintained by [**@jesse_squires**](https://twitter.com/jesse_squires).\n\n## License\n\nReleased under an [MIT License](http://opensource.org/licenses/MIT). See `LICENSE` for details.\n\n\u003e**Copyright \u0026copy; 2016-present Jesse Squires.**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjessesquires%2Fswift-proposal-analyzer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjessesquires%2Fswift-proposal-analyzer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjessesquires%2Fswift-proposal-analyzer/lists"}