[
  {
    "path": ".circleci/config.yml",
    "content": "version: 2\n\njobs:\n  test:\n    macos:\n      xcode: \"14.3.1\"\n    environment:\n      BUNDLE_JOBS: 3\n      BUNDLE_RETRY: 3\n      BUNDLE_PATH: vendor/bundle\n    shell: /bin/bash --login -eo pipefail\n    steps:\n      - checkout\n      - run: sudo defaults write com.apple.dt.Xcode IDEPackageSupportUseBuiltinSCM YES\n      - run: rm ~/.ssh/id_rsa || true\n      - run: for ip in $(dig @8.8.8.8 bitbucket.org +short); do ssh-keyscan bitbucket.org,$ip; ssh-keyscan $ip; done 2>/dev/null >> ~/.ssh/known_hosts || true \n      - run: for ip in $(dig @8.8.8.8 github.com +short); do ssh-keyscan github.com,$ip; ssh-keyscan $ip; done 2>/dev/null >> ~/.ssh/known_hosts || true\n      - run: brew update 1> /dev/null 2> /dev/null\n      - run: brew install sourcekitten\n      - run: brew install coreutils\n      - run: echo \"ruby-3.0.6\" > ~/.ruby-version\n      - run: bundle install\n      - run: bundle exec rake validate_docs\n      - run: bundle exec danger || true\n      - run: set -o pipefail\n      - run: bundle exec rake build\n      - run: bundle exec rake tests\nworkflows:\n  version: 2\n  build-test:\n    jobs:\n      - test\n"
  },
  {
    "path": ".codecov.yml",
    "content": "coverage:\n  ignore:\n    - Sourcery/main.swift\n    - Sourcery/CodeGenerated/*\n    - Pods/*\n  status:\n    patch: false\n    changes: false\n    project:\n      default:\n        target: 70\ncomment: false\n"
  },
  {
    "path": ".github/workflows/bump_homebrew.yml",
    "content": "name: Bump Homebrew formula\n\non:\n  workflow_dispatch:\n    inputs:\n      tag-name:\n        description: 'The git tag name to bump the formula to'\n        required: true\n\njobs:\n  homebrew:\n    name: Bump Homebrew formula\n    runs-on: macos-13\n    steps:\n      - uses: mislav/bump-homebrew-formula-action@v3\n        with:\n          formula-name: sourcery\n          tag-name: ${{ github.event.inputs.tag-name }}\n        env:\n          COMMITTER_TOKEN: ${{ secrets.HOMEBREW_COMMITTER_TOKEN }}"
  },
  {
    "path": ".github/workflows/docker.yml",
    "content": "name: Docker\n\npermissions:\n  contents: read\n  packages: write\n\non:\n  push:\n    branches:\n      - master\n    tags:\n      - '*'\n\n# https://docs.docker.com/build/ci/github-actions/multi-platform/#distribute-build-across-multiple-runners\njobs:\n  build:\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n          - os: ubuntu-24.04\n            platform: linux-amd64\n          - os: ubuntu-24.04-arm\n            platform: linux-arm64\n    runs-on: ${{ matrix.os }}\n    steps:\n    - name: Set lowercase repository name\n      run: |\n        echo \"REPOSITORY_LC=${REPOSITORY,,}\" >>${GITHUB_ENV}\n      env:\n        REPOSITORY: '${{ github.repository }}'\n\n    - name: Set up Docker Buildx\n      uses: docker/setup-buildx-action@v3\n\n    - name: Login to GitHub registry\n      uses: docker/login-action@v3\n      with:\n        registry: ghcr.io\n        username: ${{ github.actor }}\n        password: ${{ secrets.GITHUB_TOKEN }}\n\n    - uses: docker/build-push-action@v6\n      id: build\n      with:\n        tags: ghcr.io/${{ env.REPOSITORY_LC }}\n        outputs: type=image,push-by-digest=true,name-canonical=true,push=true\n\n    - name: Export digest\n      run: |\n        mkdir -p ${{ runner.temp }}/digests\n        digest=\"${{ steps.build.outputs.digest }}\"\n        touch \"${{ runner.temp }}/digests/${digest#sha256:}\"\n    \n    - name: Upload digest\n      uses: actions/upload-artifact@v4\n      with:\n        name: digests-${{ matrix.platform }}\n        path: ${{ runner.temp }}/digests/*\n        if-no-files-found: error\n        retention-days: 1\n\n  merge:\n    runs-on: ubuntu-24.04\n    needs: build\n    steps:\n    - name: Set lowercase repository name\n      run: |\n        echo \"REPOSITORY_LC=${REPOSITORY,,}\" >>${GITHUB_ENV}\n      env:\n        REPOSITORY: '${{ github.repository }}'\n\n    - name: Download digests\n      uses: actions/download-artifact@v4\n      with:\n        path: ${{ runner.temp }}/digests\n        pattern: digests-*\n        merge-multiple: true\n\n    - name: Login to GitHub registry\n      uses: docker/login-action@v3\n      with:\n        username: ${{ github.actor }}\n        password: ${{ secrets.GITHUB_TOKEN }}\n        registry: ghcr.io\n\n    - name: Set up Docker Buildx\n      uses: docker/setup-buildx-action@v3\n\n    - name: Docker meta\n      id: meta\n      uses: docker/metadata-action@v5\n      with:\n        images: ghcr.io/${{ env.REPOSITORY_LC }}\n\n    - name: Create manifest list and push\n      working-directory: ${{ runner.temp }}/digests\n      run: |\n        docker buildx imagetools create $(jq -cr '.tags | map(\"-t \" + .) | join(\" \")' <<< \"$DOCKER_METADATA_OUTPUT_JSON\") \\\n          $(printf 'ghcr.io/${{ env.REPOSITORY_LC }}@sha256:%s ' *)\n\n    - name: Inspect image\n      run: |\n        docker buildx imagetools inspect ghcr.io/${{ env.REPOSITORY_LC }}:${{ steps.meta.outputs.version }}\n"
  },
  {
    "path": ".github/workflows/jazzy.yml",
    "content": "# This workflow will build a Swift project\n# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-swift\n\nname: rake docs\n\non:\n  workflow_call:\n  workflow_dispatch:\n    inputs:\n      ref:\n        description: 'Ref to build (branch, tag or SHA)'\n        required: false\n        default: 'master'\n  push:\n    branches: [ \"master\" ]\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}\n\njobs:\n  update_docs:\n    runs-on: macos-14\n    steps:\n    - name: Set Xcode 15.3.0\n      run: sudo xcode-select -s /Applications/Xcode_15.3.0.app/Contents/Developer\n    - name: Print Current Xcode\n      run: xcode-select -p\n    - uses: actions/checkout@v3\n    - name: Update Docs\n      run: |\n        brew install coreutils\n        brew install sourcekitten\n        bundle install\n        rake docs\n    - uses: EndBug/add-and-commit@v9.1.3\n      with:\n        add: '.'\n        message: 'Update Docs'\n        committer_name: GitHub Actions\n        committer_email: actions@github.com\n\n \n"
  },
  {
    "path": ".github/workflows/release_macOS.yml",
    "content": "name: release macOS\n\non:\n  workflow_dispatch:\n    inputs:\n      ref:\n        description: 'Ref to build (branch, tag or SHA)'\n        required: false\n        default: 'master'\n  push:\n    tags:\n      - '*'\n      \njobs:\n  tests:\n    uses: ./.github/workflows/test_macOS.yml\n  build:\n    needs: [tests]\n    name: Build Sourcery for macOS\n    runs-on: macos-14\n    steps:\n      - name: Set Xcode 15.3.0\n        run: sudo xcode-select -s /Applications/Xcode_15.3.0.app/Contents/Developer\n      - name: Print Current Xcode\n        run: xcode-select -p\n      - uses: actions/checkout@v3\n        with:\n          ref: ${{ github.event.inputs.ref }}\n      - name: Build it\n        id: build\n        run: |\n          brew install coreutils\n          brew install sourcekitten\n          bundle install\n          rake docs\n\n          CLI_DIR=\"${HOME}/cli/\"\n          RESOURCES_DIR=\"${CLI_DIR}Resources/\"\n          TEMPLATES_DIR=\"${CLI_DIR}Templates/\"\n          BUILD_DIR=\"${HOME}/build/\"\n          BIN_DIR=\"${CLI_DIR}bin/\"\n          ARTIFACT_BUNDLE_PATH=\"${HOME}/artifactbundle/\"\n          path_to_sourcery_binary=\"${BIN_DIR}/sourcery\"\n\n          mkdir -p $BIN_DIR\n          mkdir -p $RESOURCES_DIR\n          mkdir -p $TEMPLATES_DIR\n          mkdir -p ${ARTIFACT_BUNDLE_PATH}bin\n\n          cp -r docs/docsets/Sourcery.docset $CLI_DIR\n          cp -r \"Templates/Templates/\" $TEMPLATES_DIR\n          cp Resources/daemon.gif $RESOURCES_DIR\n          cp Resources/icon-128.png $RESOURCES_DIR\n          cp CHANGELOG.md $CLI_DIR\n          cp README.md $CLI_DIR\n          cp LICENSE $CLI_DIR\n\n          cp -r SourceryJS/Resources/ejs.js $BIN_DIR\n          cp -r $CLI_DIR/ \"${ARTIFACT_BUNDLE_PATH}sourcery\"\n          cp Templates/artifactbundle.info.json.template ${ARTIFACT_BUNDLE_PATH}/info.json\n\n          swift build --disable-sandbox -c release --arch arm64 --build-path $BUILD_DIR\n          swift build --disable-sandbox -c release --arch x86_64 --build-path $BUILD_DIR\n          lipo -create -output $path_to_sourcery_binary ${BUILD_DIR}arm64-apple-macosx/release/sourcery ${BUILD_DIR}x86_64-apple-macosx/release/sourcery\n          strip -rSTX ${path_to_sourcery_binary}\n\n          cp $path_to_sourcery_binary \"${ARTIFACT_BUNDLE_PATH}sourcery/bin/\"\n\n          pushd $CLI_DIR\n          TAG=$GITHUB_REF_NAME\n          FILENAME=\"sourcery-$TAG.zip\"\n          zip -r -X $FILENAME .\n          mv $FILENAME \"${HOME}/\"\n          popd\n\n          pushd $ARTIFACT_BUNDLE_PATH\n          sed -i '' \"s/VERSION/${TAG}/g\" ${ARTIFACT_BUNDLE_PATH}/info.json\n          ARTIFACTBUNDLENAME=$FILENAME.artifactbundle.zip\n          zip -r -X $ARTIFACTBUNDLENAME .\n          mv $ARTIFACTBUNDLENAME \"${HOME}/\"\n          popd\n\n          echo \"FILENAME=${FILENAME}\" >> $GITHUB_OUTPUT\n          echo \"ARTIFACTBUNDLENAME=${ARTIFACTBUNDLENAME}\" >> $GITHUB_OUTPUT\n      - name: 'Upload Sourcery Artifact'\n        uses: actions/upload-artifact@v4\n        with:\n          name: ${{ steps.build.outputs.FILENAME }}\n          path: \"~/${{ steps.build.outputs.FILENAME }}\"\n          retention-days: 5\n      - name: 'Upload Bundle Artifact'\n        uses: actions/upload-artifact@v4\n        with:\n          name: ${{ steps.build.outputs.ARTIFACTBUNDLENAME }}\n          path: \"~/${{ steps.build.outputs.ARTIFACTBUNDLENAME }}\"\n          retention-days: 5"
  },
  {
    "path": ".github/workflows/release_ubuntu.yml",
    "content": "name: release ubuntu\n\non:\n  workflow_dispatch:\n    inputs:\n      ref:\n        description: 'Ref to build (branch, tag or SHA)'\n        required: false\n        default: 'master'\n  push:\n    tags:\n      - '*'\n\njobs:\n  tests:\n    uses: ./.github/workflows/test_ubuntu.yml\n  build:\n    needs: [tests]\n    name: Build Sourcery for Ubuntu (latest)\n    runs-on: ubuntu-22.04\n    outputs:\n      filename: ${{ steps.build.outputs.filename }}\n    steps:\n      - uses: actions/checkout@v3\n        with:\n          ref: ${{ github.event.inputs.ref }}\n      - name: Setup Swift\n        uses: swift-actions/setup-swift@v2\n        with:\n          swift-version: \"5.10\"\n      - name: Build it\n        id: build\n        run: |\n          BUILD_DIR=\"${HOME}/build/\"\n          swift build --disable-sandbox -c release --build-path $BUILD_DIR\n          mv \"${BUILD_DIR}x86_64-unknown-linux-gnu/release/sourcery\" \"${BUILD_DIR}/sourcery\"\n          \n          UNAME=$(uname -m)\n          CODENAME=$(lsb_release -c -s)\n          DESCRIPTION=$(lsb_release -d -s | sed \"s/ /-/g\" | sed \"s/./\\L&/g\")\n          SUFFIX=$DESCRIPTION-$CODENAME-$UNAME\n          TAG=$GITHUB_REF_NAME\n          FILENAME=\"sourcery-${TAG}-${SUFFIX}.tar.xz\"\n\n          pushd $BUILD_DIR\n          tar -zcvf $FILENAME sourcery\n          mv $FILENAME \"${HOME}/\"\n          popd\n          \n          echo \"FILENAME=${FILENAME}\" >> $GITHUB_OUTPUT\n      - name: 'Upload Artifact'\n        uses: actions/upload-artifact@v4\n        with:\n          name: ${{ steps.build.outputs.FILENAME }}\n          path: \"~/${{ steps.build.outputs.FILENAME }}\"\n          retention-days: 5\n"
  },
  {
    "path": ".github/workflows/test_macOS.yml",
    "content": "# This workflow will build a Swift project\n# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-swift\n\nname: test macOS\n\non:\n  workflow_call:\n  push:\n    branches: [ \"master\" ]\n  pull_request:\n    branches: [ \"master\" ]\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: ${{ github.ref_type != 'tag' }}\n\njobs:\n  macos_build:\n    runs-on: macos-14\n    steps:\n    - name: Set Xcode 15.3.0\n      run: sudo xcode-select -s /Applications/Xcode_15.3.0.app/Contents/Developer\n    - name: Print Current Xcode\n      run: xcode-select -p\n    - uses: actions/checkout@v3\n    - name: Run tests\n      run: swift test\n\n \n"
  },
  {
    "path": ".github/workflows/test_ubuntu.yml",
    "content": "# This workflow will build a Swift project\n# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-swift\n\nname: test ubuntu\n\non:\n  workflow_call:\n  push:\n    branches: [ \"master\" ]\n  pull_request:\n    branches: [ \"master\" ]\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: ${{ github.ref_type != 'tag' }}\n\njobs:\n  linux_build:\n    runs-on: ubuntu-22.04\n    steps:\n    - name: Setup Swift\n      uses: YOCKOW/Action-setup-swift@main\n      with:\n        swift-version: \"5.10\"\n    - name: Get swift version\n      run: swift --version\n    - uses: actions/checkout@v3\n    - name: Run tests\n      run: swift test\n"
  },
  {
    "path": ".gitignore",
    "content": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n## Bundler\n.bundle*\n\n## macOS\n.DS_Store\n\n## GitHub Token\n.apitoken\n\n## Build generated\nbuild/\ncli/\nDerivedData/\n\n## Various settings\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata/\n*.xcscmblueprint\n\n## Other\n*.moved-aside\n*.xcuserstate\n*.profraw\n\n## Obj-C/Swift specific\n*.hmap\n*.ipa\n*.dSYM.zip\n*.dSYM\n\n## Playgrounds\ntimeline.xctimeline\nplayground.xcworkspace\n\n# Swift Package Manager\n#\n# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.\nPackages/\nPackage.pins\n.build/\n.swiftpm/\n\n# CocoaPods\n#\n# We recommend against adding the Pods directory to your .gitignore. However\n# you should judge for yourself, the pros and cons are mentioned at:\n# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control\n#\n# Pods/\n\n# Ruby\nVendor/\n\n# Carthage\n#\n# Add this line if you want to avoid checking in source code from Carthage dependencies.\n# Carthage/Checkouts\n\nCarthage/Build\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md\n\nfastlane/report.xml\nfastlane/Preview.html\nfastlane/screenshots\nfastlane/test_output\nSourcery/CodeGenerated/TypedSpec.generated.swift\n\n# jazzy\ndocs/docsets\ndocs/undocumented.json\n\n# IDEA based IDEs (AppCode, CLion) configuration\n.idea\n\n# Local binary distributions downloads\ndistributions/\n\nSourcery.xcodeproj\n"
  },
  {
    "path": ".gitmodules",
    "content": ""
  },
  {
    "path": ".jazzy.yaml",
    "content": "author: Krzysztof Zabłocki\nauthor_url: https://twitter.com/merowing_\nmodule: Sourcery\nsourcekitten_sourcefile: docs.json \ngithub_url: https://github.com/krzysztofzablocki/Sourcery\ncopyright: 'Copyright © 2016-2021 Pixle. All rights reserved.'\nreadme: About.md\ndocumentation: guides/*.md\nexclude: [\"*_Linux.swift\"] \n\ncustom_categories:\n  - name: Guides\n    children:\n      - Installing\n      - Usage\n      - Writing templates\n\n  - name: Examples\n    children:\n      - Equatable\n      - Hashable\n      - Enum cases\n      - Lenses\n      - Mocks\n      - Codable\n      - Diffable\n      - LinuxMain\n      - Decorator\n\n  - name: Types\n    children:\n      - Types \n      - Type\n      - Protocol\n      - Class\n      - Struct\n      - Enum\n      - EnumCase\n      - AssociatedValue\n      - AssociatedType\n      - Variable \n      - Method\n      - MethodParameter\n      - Subscript\n      - TypeName\n      - TupleType\n      - TupleElement\n      - ArrayType\n      - DictionaryType\n      - ClosureType\n      - GenericType\n      - GenericTypeParameter\n      - Attribute\n      - ProtocolComposition\n"
  },
  {
    "path": ".pre-commit-hooks.yaml",
    "content": "- id: sourcery\n  name: Sourcery\n  description: 'Meta-programming for Swift, stop writing boilerplate code.'\n  language: swift\n  entry: sourcery\n  require_serial: true\n  pass_filenames: false\n  always_run: true\n"
  },
  {
    "path": ".ruby-version",
    "content": "3.4.1"
  },
  {
    "path": ".sourcery-macOS.yml",
    "content": "sources:\n - SourceryRuntime/Sources/Common\n - SourceryRuntime/Sources/macOS\ntemplates:\n - Sourcery/Templates/Coding.stencil\n - Sourcery/Templates/JSExport.ejs\n - Sourcery/Templates/Typed.stencil\n - Sourcery/Templates/TypedSpec.stencil\noutput:\n SourceryRuntime/Sources/Generated\n"
  },
  {
    "path": ".sourcery-ubuntu.yml",
    "content": "sources:\n - SourceryRuntime/Sources/Common\n - SourceryRuntime/Sources/Linux\ntemplates:\n - Sourcery/Templates/Coding.stencil\n - Sourcery/Templates/JSExport.ejs\n - Sourcery/Templates/Typed.stencil\n - Sourcery/Templates/TypedSpec.stencil\noutput:\n SourceryRuntime/Sources/Generated\n"
  },
  {
    "path": ".swift-version",
    "content": "5.8\n"
  },
  {
    "path": ".swiftlint.yml",
    "content": "disabled_rules: # rule identifiers to exclude from running\n  - function_parameter_count\n  - line_length\n  - variable_name\n  - cyclomatic_complexity\n  - nesting\n  - conditional_binding_cascade\n  - large_tuple\n\nopt_in_rules: # some rules are only opt-in\n  - force_unwrapping\n  - force_https\n  - empty_count\n  - conditional_binding_cascade\n\nincluded:\n  - Sourcery\n  - SourceryRuntime\n  - SourceryTests\n  - Templates/Tests\n\nexcluded: # paths to ignore during linting. Takes precedence over `included`.\n  - Carthage\n  - Pods\n  - Packages\n  - SourceryTests/Stub\n  - Templates/Tests/Generated\n  - Templates/Tests/Expected\n\ntype_body_length:\n  - 700 #warning\n  - 1000 #error\n\nfile_length:\n  - 1000 #warning\n  - 1200 #error\n\nfunction_body_length:\n  - 125 #warning\n  - 200 #error\n\ntype_name:\n  min_length: 3 # only warning\n  max_length: # warning and error\n    warning: 50\n    error: 50\n\ncustom_rules:\n  force_https:\n    name: \"Force HTTPS over HTTP\"\n    regex: \"((?i)http(?!s))\"\n    match_kinds: string\n    message: \"HTTPS should be favored over HTTP\"\n    severity: warning\n\n  explicit_failure_calls:\n    name: \"Avoid asserting 'false'\"\n    regex: '((assert|precondition)\\(false)'\n    message: \"Use assertionFailure() or preconditionFailure() instead.\"\n    severity: warning\n"
  },
  {
    "path": ".vscode/launch.json",
    "content": "{\n    \"configurations\": [\n        {\n            \"type\": \"lldb\",\n            \"request\": \"launch\",\n            \"sourceLanguages\": [\n                \"swift\"\n            ],\n            \"name\": \"Debug sourcery\",\n            \"program\": \"${workspaceFolder:Sourcery}/.build/debug/sourcery\",\n            \"args\": [],\n            \"cwd\": \"${workspaceFolder:Sourcery}\",\n            \"preLaunchTask\": \"swift: Build Debug sourcery\"\n        },\n        {\n            \"type\": \"lldb\",\n            \"request\": \"launch\",\n            \"sourceLanguages\": [\n                \"swift\"\n            ],\n            \"name\": \"Release sourcery\",\n            \"program\": \"${workspaceFolder:Sourcery}/.build/release/sourcery\",\n            \"args\": [],\n            \"cwd\": \"${workspaceFolder:Sourcery}\",\n            \"preLaunchTask\": \"swift: Build Release sourcery\"\n        }\n    ]\n}"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{}"
  },
  {
    "path": "ABOUT.md",
    "content": "## What is Sourcery?\n_**Sourcery** scans your source code, applies your personal templates and generates Swift code for you, allowing you to use meta-programming techniques to save time and decrease potential mistakes._\n\nUsing it offers many benefits:\n\n- Write less repetitive code and make it easy to adhere to [DRY principle](https://en.wikipedia.org/wiki/Don't_repeat_yourself).\n- It allows you to create better code, one that would be hard to maintain without it, e.g. [performing automatic property level difference in tests](https://github.com/krzysztofzablocki/Sourcery/blob/master/Sourcery/Templates/Diffable.stencil)\n- Limits the risk of introducing human error when refactoring.\n- Sourcery **doesn't use runtime tricks**, in fact, it allows you to leverage compiler, even more, creating more safety.\n- **Immediate feedback:** Sourcery features built-in daemon support, enabling you to write your templates in real-time side-by-side with generated code.\n\n**Sourcery is so meta that it is used to code-generate its boilerplate code**\n\n## Why?\n\nSwift features very limited runtime and no meta-programming features. Which leads our projects to contain boilerplate code.\n\nSourcery exists to allow Swift developers to stop doing the same thing over and over again while still maintaining strong typing, preventing bugs and leveraging compiler.\n\nHave you ever?\n\n- Had to write equatable/hashable?\n- Had to write NSCoding support?\n- Had to implement JSON serialization?\n- Wanted to use Lenses?\n\nIf you did then you probably found yourself writing repetitive code to deal with those scenarios, does this feel right?\n\nEven worse, if you ever add a new property to a type all of those implementations have to be updated, or you will end up with bugs.\nIn those scenarios usually **compiler will not generate the error for you**, which leads to error prone code.\n\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Sourcery CHANGELOG\n\n## 2.3.0\n* Added `withExtendedLifetime` support for better lifetime management in templates (#1419) — @swiftty\n* Fix PBXGroup duplication while linking (#1422, #1423) — @markmax12\n* Fix deadlock when using EJS templates in watch mode (#1421) — @robertjpayne\n* Fix `AutoMockable` Generation for a couple of cases with existential `any` (#1420) — @musiienko\n* Ensured compatibility with Xcode 26 (#1428, #1434, #1439) — @bo2themax \n* Update docker workflow to also build ARM64 image (#1436) - @Cyberbeni\n\n## 2.2.7\n* Feature/typed throws support by @alexandre-pod in https://github.com/krzysztofzablocki/Sourcery/pull/1401\n* Add missing `isGeneric` dynamic member by @tayloraswift in https://github.com/krzysztofzablocki/Sourcery/pull/1408\n\n## 2.2.6 \n* Method/Initializer parameter types now resolve to the local type if it exists by @liamnichols in https://github.com/krzysztofzablocki/Sourcery/pull/1347\n* Fixed wrong relative path in symbolic link by @pavel-trafimuk in https://github.com/krzysztofzablocki/Sourcery/pull/1350\n* chore: add unchecked Sendable conformance to AutoMockable by @nekrich in https://github.com/krzysztofzablocki/Sourcery/pull/1355\n* Fixes issue around mutable capture of 'inout' parameter 'buffer' is not allowed in concurrently-executing code by @mapierce in https://github.com/krzysztofzablocki/Sourcery/pull/1363\n* chore(deps): bump rexml from 3.2.8 to 3.3.6 by @dependabot in https://github.com/krzysztofzablocki/Sourcery/pull/1360\n* Updated swift-syntax package's url (#1354) by @akhmedovgg in https://github.com/krzysztofzablocki/Sourcery/pull/1364\n* `Templates/AutoMockable.stencil`: fix stencil to consider nullable closures as escaping by @alexdmotoc in https://github.com/krzysztofzablocki/Sourcery/pull/1358\n* Fix AutoMockable for closure with multiple parameters by @MontakOleg in https://github.com/krzysztofzablocki/Sourcery/pull/1373\n* fix: AutoEquatable Stencil to use `any` for protocols by @iDevid in https://github.com/krzysztofzablocki/Sourcery/pull/1367\n* Add support for child configs by @jimmya in https://github.com/krzysztofzablocki/Sourcery/pull/1338\n* Try to fix associated types messing up types unification by @fabianmuecke in https://github.com/krzysztofzablocki/Sourcery/pull/1377\n* Added annotations to typealiases and typealiases property to EJS template context. by @fabianmuecke in https://github.com/krzysztofzablocki/Sourcery/pull/1379\n* Fix module name for xcframework by @till0xff in https://github.com/krzysztofzablocki/Sourcery/pull/1381\n* Fix protocol inheritance by @till0xff in https://github.com/krzysztofzablocki/Sourcery/pull/1383\n* Fixed nested type resolution by @till0xff in https://github.com/krzysztofzablocki/Sourcery/pull/1384\n* fix: Fixes description of Method's genericParameters by @sergiocampama in https://github.com/krzysztofzablocki/Sourcery/pull/1386\n* Ability to use custom header prefix by @ilia3546 in https://github.com/krzysztofzablocki/Sourcery/pull/1389\n* Fixed tests under linux by @art-divin in https://github.com/krzysztofzablocki/Sourcery/pull/1390\n* chore(deps): bump rexml from 3.3.6 to 3.3.9 by @dependabot in https://github.com/krzysztofzablocki/Sourcery/pull/1376\n* Fixing dockerfile by @art-divin in https://github.com/krzysztofzablocki/Sourcery/pull/1391\n\n## 2.2.5\n* chore(deps): bump nokogiri from 1.16.2 to 1.16.5 by @dependabot in https://github.com/krzysztofzablocki/Sourcery/pull/1331\n* Fix typo in Decorator.md by @ahmedk92 in https://github.com/krzysztofzablocki/Sourcery/pull/1339\n* chore(deps): bump rexml from 3.2.5 to 3.2.8 by @dependabot in https://github.com/krzysztofzablocki/Sourcery/pull/1332\n* Fixed incorrect case prefix parsing by @art-divin in https://github.com/krzysztofzablocki/Sourcery/pull/1341\n* Fixed crash when inline function has out of bound indexes by @art-divin in https://github.com/krzysztofzablocki/Sourcery/pull/1342\n* Improved concurrency support in SwiftTemplate caching by @art-divin in https://github.com/krzysztofzablocki/Sourcery/pull/1344\n* Fix associatedtype generics by @art-divin in https://github.com/krzysztofzablocki/Sourcery/pull/1345\n* AutoMockable: fix generating static reset func by @MontakOleg in https://github.com/krzysztofzablocki/Sourcery/pull/1336\n* Enabled lookup for generic type information in arrays by @art-divin in https://github.com/krzysztofzablocki/Sourcery/pull/1346\n\n## 2.2.4\n- Fixed typealias resolution breaking resolution of real types. by @fabianmuecke ([#1325](https://github.com/krzysztofzablocki/Sourcery/pull/1325))\n- Disabled type resolving for local method generic parameters by @art-divin ([#1327](https://github.com/krzysztofzablocki/Sourcery/pull/1327))\n- Added hideVersionHeader to configuration arguments by @art-divin ([#1328](https://github.com/krzysztofzablocki/Sourcery/pull/1328))\n\n## 2.2.3\n## Changes\n- Fixed Issue when Caching of SwiftTemplate Binary Failes by @art-divin ([#1323](https://github.com/krzysztofzablocki/Sourcery/pull/1323))\n\n## 2.2.2\n## Changes\n- Improved Logging/Error Handling during SwiftTemplate Processing by @art-divin ([#1320](https://github.com/krzysztofzablocki/Sourcery/pull/1320))\n\n## 2.2.1\n## Changes\n- Set minimum platform for macOS by @art-divin ([#1319](https://github.com/krzysztofzablocki/Sourcery/pull/1319))\n\n## 2.2.0\n## Changes\n- Remove Sourcery version from header by @dcacenabes in ([#1309](https://github.com/krzysztofzablocki/Sourcery/pull/1309))\n- Enable Single Print when Generating Based on Swifttemplate by @art-divin in ([#1308](https://github.com/krzysztofzablocki/Sourcery/pull/1308))\n- [Bug] Annotations aren't being extracted from initializers by @liamnichols in ([#1311](https://github.com/krzysztofzablocki/Sourcery/pull/1311))\n- Implemented Proper Protocol Composition Type Parsing by @art-divin in ([#1314](https://github.com/krzysztofzablocki/Sourcery/pull/1314))\n- Renamed parenthesis to parentheses by @art-divin in ([#1315](https://github.com/krzysztofzablocki/Sourcery/pull/1315))\n- Switched to Double for CLI argument processing by @art-divin in ([#1317](https://github.com/krzysztofzablocki/Sourcery/pull/1317))\n- Added isDistributed to Actor and Method by @art-divin in ([#1318](https://github.com/krzysztofzablocki/Sourcery/pull/1318))\n- Enable Quotes when parsing arguments in property wrapper parameters by @art-divin in ([#1316](https://github.com/krzysztofzablocki/Sourcery/pull/1316))\n\n## 2.1.8\n## Changes\n- ClosureParameter isVariadic Support by @art-divin in ([#1268](https://github.com/krzysztofzablocki/Sourcery/pull/1268))\n- Update Usage.md to include --parseDocumentation option by @MarcoEidinger in ([#1272](https://github.com/krzysztofzablocki/Sourcery/pull/1272))\n- Format processing time log message by @MontakOleg in ([#1274](https://github.com/krzysztofzablocki/Sourcery/pull/1274))\n- Fixed swift-package-manager version by @art-divin in ([#1280](https://github.com/krzysztofzablocki/Sourcery/pull/1280))\n- Added isSet to TypeName by @art-divin in ([#1281](https://github.com/krzysztofzablocki/Sourcery/pull/1281))\n- chore(deps): bump nokogiri from 1.15.4 to 1.16.2 by @dependabot in ([#1273](https://github.com/krzysztofzablocki/Sourcery/pull/1273))\n- Implement GenericRequirement support for member type disambiguation by @art-divin in ([#1283](https://github.com/krzysztofzablocki/Sourcery/pull/1283))\n- Add generic requirements to Method by @art-divin in ([#1284](https://github.com/krzysztofzablocki/Sourcery/pull/1284))\n- Recognize subclasses with generics by @art-divin in ([#1287](https://github.com/krzysztofzablocki/Sourcery/pull/1287))\n- Implemented typealias unboxing during type resolution by @art-divin in ([#1288](https://github.com/krzysztofzablocki/Sourcery/pull/1288))\n- Added documentation to typealias by @art-divin in ([#1289](https://github.com/krzysztofzablocki/Sourcery/pull/1289))\n- Fix: Function with completion as parameter that contains itself an optional any parameter produces wrong mock by @paul1893 in ([#1290](https://github.com/krzysztofzablocki/Sourcery/pull/1290))\n- Fix: Function with inout parameter when function has more than one parameter produces wrong mock by @paul1893 in ([#1291](https://github.com/krzysztofzablocki/Sourcery/pull/1291))\n- Substitute underlying type from typealias by @art-divin in ([#1292](https://github.com/krzysztofzablocki/Sourcery/pull/1292))\n- Added support for multiline documentation comments by @art-divin in ([#1293](https://github.com/krzysztofzablocki/Sourcery/pull/1293))\n- Update SwiftSyntax dependency to 510.0.0 by @calda in ([#1294](https://github.com/krzysztofzablocki/Sourcery/pull/1294))\n- Resolved all SwiftSyntax Warnings by @art-divin in ([#1295](https://github.com/krzysztofzablocki/Sourcery/pull/1295))\n- Trailing Annotation Parsing by @art-divin in ([#1296](https://github.com/krzysztofzablocki/Sourcery/pull/1296))\n- Fixed Crash in AnnotationParser by @art-divin in ([#1297](https://github.com/krzysztofzablocki/Sourcery/pull/1297))\n- Disabled Optimization During Generated Code Verification by @art-divin in ([#1300](https://github.com/krzysztofzablocki/Sourcery/pull/1300))\n- Adjusted file structure to accommodate two generated files by @art-divin in ([#1299](https://github.com/krzysztofzablocki/Sourcery/pull/1299))\n- Expand --serialParse flag to also apply to Composer.uniqueTypesAndFunctions by @calda in ([#1301](https://github.com/krzysztofzablocki/Sourcery/pull/1301))\n- Make AutoMockable Generate Compilable Swift Code by @art-divin in ([#1304](https://github.com/krzysztofzablocki/Sourcery/pull/1304))\n- Fix Closure Parameter CVarArg with Existential by @art-divin in ([#1305](https://github.com/krzysztofzablocki/Sourcery/pull/1305))\n\n## 2.1.7\n## Changes\n- Podspec updates - set correct filepath for Sourcery\n- Fixed generated AutoMockable compilation issue due to generated variable names containing & character. Added support for existential any for throwable errors. ([#1263](https://github.com/krzysztofzablocki/Sourcery/pull/1263))\n\n## 2.1.6\n## Changes\n- Podspec updates - set specific version per supported platform\n\n## 2.1.5\n## Changes\n- Podspec updates\n- Add support for inout parameter for AutoMockable protocols ([#1261](https://github.com/krzysztofzablocki/Sourcery/pull/1261))\n\n## 2.1.4\n## Changes\n- Added generic requirements and generic parameters to Subscript ([#1242](https://github.com/krzysztofzablocki/Sourcery/issues/1242))\n- Added isAsync and throws to Subscript ([#1249](https://github.com/krzysztofzablocki/Sourcery/issues/1249))\n- Initialise Subscript's returnTypeName with TypeSyntax, not String ([#1250](https://github.com/krzysztofzablocki/Sourcery/issues/1250))\n- Swifty generated variable names + fixed generated mocks compilation issues due to method generic parameters ([#1252](https://github.com/krzysztofzablocki/Sourcery/issues/1252))\n\n## 2.1.3\n## Changes\n- Add support for `typealias`es in EJS templates. ([#1208](https://github.com/krzysztofzablocki/Sourcery/pull/1208))\n- Add support for existential to Automockable Protocol with generic types. ([#1220](https://github.com/krzysztofzablocki/Sourcery/pull/1220))\n- Add support for generic parameters and requirements in subscripts.\n    ([#1242](https://github.com/krzysztofzablocki/Sourcery/pull/1242))\n- Throw throwable error after updating mocks's calls counts and received parameters/invocations.\n    ([#1224](https://github.com/krzysztofzablocki/Sourcery/pull/1224))\n- Fix unit tests on Linux ([#1225](https://github.com/krzysztofzablocki/Sourcery/pull/1225))\n- Updated XcodeProj to 8.16.0 ([#1228](https://github.com/krzysztofzablocki/Sourcery/pull/1228))\n- Fixed Unable to mock a protocol with methods that differ in parameter type - Error: \"Invalid redeclaration\" ([#1238](https://github.com/krzysztofzablocki/Sourcery/issues/1238))\n- Support for variadic arguments as method parameters ([#1222](https://github.com/krzysztofzablocki/Sourcery/issues/1222))\n\n## 2.1.2\n## Changes\n- Bump SPM version to support Swift 5.9 ([#1213](https://github.com/krzysztofzablocki/Sourcery/pull/1213))\n- Add Dockerfile ([#1211](https://github.com/krzysztofzablocki/Sourcery/pull/1211))\n\n## 2.1.1\n## Changes\n- Separate EJSTemplate.swift for swift test and for swift build -c release ([#1203](https://github.com/krzysztofzablocki/Sourcery/pull/1203))\n\n## 2.1.0\n## Changes\n- Added support for Swift Package Manager config ([#1184](https://github.com/krzysztofzablocki/Sourcery/pull/1184))\n- Add support to any keyword for function parameter type to AutoMockable.stencil ([#1169](https://github.com/krzysztofzablocki/Sourcery/pull/1169))\n- Add support to any keyword for function return type to AutoMockable.stencil([#1186](https://github.com/krzysztofzablocki/Sourcery/pull/1186))\n- Add support for protocol compositions in EJS templates. ([#1192](https://github.com/krzysztofzablocki/Sourcery/pull/1192))\n- Linux Support (experimental) ([#1188](https://github.com/krzysztofzablocki/Sourcery/pull/1188))\n- Add support for opaque type (some keyword) to function parameter type in AutoMockable.stencil ([#1197](https://github.com/krzysztofzablocki/Sourcery/pull/1197))\n\n## 2.0.3\n## Internal Changes\n- Modifications to included files of Swift Templates are now detected by hashing instead of using the modification date when invalidating the cache ([#1161](https://github.com/krzysztofzablocki/Sourcery/pull/1161))\n- Fixes incorrectly parsed /r/n newline sequences ([#1165](https://github.com/krzysztofzablocki/Sourcery/issues/1165) and [#1138](https://github.com/krzysztofzablocki/Sourcery/issues/1138))\n- Fixes incorrect parsing of annotations if there are attributes on lines preceeding declaration ([#1141](https://github.com/krzysztofzablocki/Sourcery/issues/1141))\n- Fixes incorrect parsing of trailing inline comments following enum case' rawValue ([#1154](https://github.com/krzysztofzablocki/Sourcery/issues/1154))\n- Fixes incorrect parsing of multibyte enum case identifiers with associated values\n- Improves type inference when using contained types for variables ([#1091](https://github.com/krzysztofzablocki/Sourcery/issues/1091))\n\n## 2.0.2\n- Fixes incorrectly parsed variable names that include property wrapper and comments, closes #1140\n\n## 2.0.1\n## Internal Changes\n- Fixed non-ASCII characters handling in source code parsing [#1130](https://github.com/krzysztofzablocki/Sourcery/pull/1130)\n- Improved performance by about 20%\n\n## Changes\n- sourcery:auto inline fragments will appear on the body definition level\n    - added baseIndentation/base-indentation option that will be taken into as default adjustment when using those fragments\n- add support for type methods to AutoMockable\n\n## 1.9.2\n## Internal Changes\n- Reverts part of [#1113](https://github.com/krzysztofzablocki/Sourcery/pull/1113) due to incomplete implementation breaking type complex resolution\n- Files that had to be parsed will be logged if their count is less than 50 (or always in verbose mode)\n\n## 1.9.1\n## New Features\n- Adds support for public protocols in AutoMockable template [#1100](https://github.com/krzysztofzablocki/Sourcery/pull/1100)\n- Adds support for async and throwing properties to AutoMockable template [#1101](https://github.com/krzysztofzablocki/Sourcery/pull/1101)\n- Adds support for actors and nonisolated methods [#1112](https://github.com/krzysztofzablocki/Sourcery/pull/1112)\n\n## Internal Changes\n- Fixed parsing of extensions and nested types in swiftinterface files [#1113](https://github.com/krzysztofzablocki/Sourcery/pull/1113)\n\n## 1.9.0\n- Update StencilSwiftKit to fix SPM resolving issue when building as a Command Plugin [#1023](https://github.com/krzysztofzablocki/Sourcery/issues/1023)\n- Adds new `--cacheBasePath` option to `SourceryExecutable` to allow for plugins setting a default cache [#1093](https://github.com/krzysztofzablocki/Sourcery/pull/1093)\n- Adds new `--dry` option to `SourceryExecutable` to check output without file system modifications [#1097](https://github.com/krzysztofzablocki/Sourcery/pull/1097)\n- Changes parser to new [SwiftSyntax Parser](https://github.com/apple/swift-syntax/pull/767)\n- Drops dylib dependency\n\n## 1.8.2\n## New Features\n- Added `deletingLastComponent` filter to turn `/Path/Class.swift` into `/Path`\n- Added `directory` computed property to `Type`\n\n## 1.8.1\n## New Features\n- Added a new flag `--serialParse` to support parsing the sources in serial, rather than in parallel (the default), which can address stability issues in SwiftSyntax [#1063](https://github.com/krzysztofzablocki/Sourcery/pull/1063)\n\n## Internal Changes\n- Lower project requirements to allow compilation using Swift 5.5/Xcode 13.x [#1049](https://github.com/krzysztofzablocki/Sourcery/pull/1049)\n- Update Stencil to 0.14.2\n- Use `swift build` insead of `xcodebuild` when building binary [#1057](https://github.com/krzysztofzablocki/Sourcery/pull/1057)\n\n## 1.8.0\n## New Features\n- Adds `xcframework` key to `target` object in configuration file to enable processing of `swiftinterface`\n\n## Fixes\n- Fixed issues generating Swift Templates when using Xcode 13.3 [#1040](https://github.com/krzysztofzablocki/Sourcery/issues/1040)\n- Modifications to included files of Swift Templates now correctly invalidate the cache - [#889](https://github.com/krzysztofzablocki/Sourcery/issues/889)\n\n## Internal Changes\n- Swift 5.6 and Xcode 13.3 is now required to build the project\n- `lib_internalSwiftSyntaxParser` is now statically linked enabling better support when installing through SPM and Mint [#1037](https://github.com/krzysztofzablocki/Sourcery/pull/1037)\n\n## 1.7.0\n\n## New Features\n- Adds `fileName` to `Type` and exposes `path` as well\n- Adds support for parsing async methods, closures and variables\n\n## Fixes\n- correct parsing of rawValue initializer in enum cases, fixes #1010\n- Use name or path parameter to parse groups to avoid duplicated group creation, fixes #904, #906\n\n---\n\n## 1.6.1\n## New Features\n- Added `CLI-Only` subspec to `Sourcery.podspec` [#997](https://github.com/krzysztofzablocki/Sourcery/pull/997)\n- Added documentation comment parsing for all declarations [#1002](https://github.com/krzysztofzablocki/Sourcery/pull/1002)\n- Updates Yams to 4.0.6\n- Enables universal binary\n\n---\n\n## 1.6.0\n## Fixes\n- Update dependencies to fix build on Xcode 13 and support Swift 5.5 [#989](https://github.com/krzysztofzablocki/Sourcery/issues/989)\n- Improves performance\n- Skips hidden files / directories and doesn't step into packages\n- added `after-auto:` generation mode to inline codegen\n- Fixes unstable ordering of `TypeName.attributes` \n- Fixing `Type.uniqueMethodFilter(_:_:)` so it compares return types of methods as well.\n\n## 1.5.0\n## Features\n- Adds support for variadic parameters in functions\n- Adds support for parsing property wrappers\n- Added `titleCase` filter that turns `somethingNamedLikeThis` into `Something Named Like This`\n\n## Fixes\n- correct passing `force-parse` argument to specific file parsers and renames it to `forceParse` to align with other naming\n- corrects `isMutable` regression on protocol variables #964\n- Added multiple targets to link\n- Fix groups creation\n\n---\n## 1.4.2\n\n## Fixes\n- Fix a test failing on macOS 11.3\n- Fix generation of inline:auto annotations in files with other inline annotations.\n- Fixes modifier access for things like `isLazy`, `isOptional`, `isConvienceInitializer`, `isFinal`\n- Fixes `isMutable` on subscripts\n- Fixes `open` access parsing\n- Removes symlinks in project, since these can confuse Xcode\n- [Fixes `inout` being incorrectly parsed for closures](https://github.com/krzysztofzablocki/Sourcery/issues/956)\n\n## New Feature\n- Updated to Swift / SwiftSyntax 5.4\n- Added ability to parse inline code generated by sourcery if annotation ends with argument provided in `--force-parse` option\n\n---\n## 1.4.1\n\n## New Feature\n- Extending AutoMockable template by adding handling of \"autoMockableImports\" and \"autoMockableTestableImports\" args.\n- Sourcery now supports [sourcerytemplates generated by Sourcery Pro](https://merowing.info/sourcery-pro/)\n\n## Fixes\n- Adds trim option for Stencil template leading / trailing whitespace and replaces newline tag markers with normal newline after that\n- Fixes broken output for files with inline annotations from multiple templates\n\n---\n## 1.4.0\n\n## Features\n- Added `allImports` property to `Type`, which returns all imports existed in all files containing this type and all its super classes/protocols.\n- Added `basedTypes` property to `Type`, which contains all Types this type inherits from or implements, including unknown (not scanned) types with extensions defined.\n- Added inference logic for basic generics from variable initialization block\n- Added `newline` and `typed` stencil tags from [Sourcery Pro](https://merowing.info/sourcery-pro/)\n\n## Fixes\n- Fixed inferring raw value type from inherited types for enums with no cases or with associated values\n- Fixed access level of protocol members\n- Fixes parsing indirect enum cases correctly even when inline documentation is used\n- Fixes TypeName.isClosure to handle composed types correctly\n- Fixes issue where Annotations for Protocol Composition types are empty\n- Fixes `sourcery:inline:auto` position calculation when the file contains UTF16 characters\n- Fixes `sourcery:inline:auto` position calculation when the file already contains code generated by Sourcery\n\n## Internal changes\n- Removes manual parsing of `TypeName`, only explicit parser / configuration is now used\n- Add support for testing via `SPM`\n- Updted SwiftLint, Quick and Nible to latest versions\n\n## 1.3.4\n## Fixes\n- `isClosure` / `isArray` / `isTuple` / `isDictionary` should now consistently report correct values, this code broke in few cases in 1.3.2\n- Trivia (comments etc) will be ignored when parsing attribute description\n\n## 1.3.3\n## Fixes\n- Fixes information being lost when extending unknown type more than once\n- Multiple configuration files can be now passed through command line arguments\n\n## Templates\n- AutoEquatable will use type.accessLevel for it's function, closes #675\n## Internal changes\n- If you are using `.swifttemplate` in your configuration you might notice performance degradation, this is due to new composer added in `1.3.2` that can create memory graph cycles between AST with which our current persistence doesn't deal properly, to workaround this we need to perform additional work for storing copy of parsed AST and compose it later on when running SwiftTemplates. This will be fixed in future release when AST changes are brought in, if you notice too much of a performance drop you can just switch to `1.3.1`.  \n\n## 1.3.2\n## New Features\n- Configuration file now supports multiple configurations at once\n\n## Fixes\n- When resolving extensions inherit their access level for methods/subscripts/variables and sub-types fixes #910\n- When resolving Parent.ChildGenericType<Type> properly parses generic information\n\n## Internal changes\n- Faster composing phase\n\n## 1.3.1\n## Internal changes\n- SwiftSyntax dylib is now bundled with the binary\n\n## 1.3.0\n## Internal changes\n- Sourcery is now using SwiftSyntax not SourceKit\n- Performance is significantly improved\n- Memory usage for common case (cached) is drastically lowered\n- If you want to use Sourcery as framework you'll need to use SPM integration since SwiftSyntax doesn't have Podspec\n\n## Configuration changes\n- added `logAST` that will cause AST warnings and errors to be logged, default `false`\n- added `logBenchmarks` that will cause benchmark informations to be logged, default `false`\n\n## AST Data Changes\n- initializers are now considered as static method not instance\n- typealiases and protocol compositions now provide proper `accessLevel`\n- if a tuple arguments are unnamed their `name` will be automatically set to index\n- default `accessLevel` when not provided in code is internal everywhere\n- Added `modifiers` to everything that had `attributes` and split them across, in sync with Swift naming\n- block annotations will be applied to associated values that are inside them\n- extensions of unknown types will not have the definition module name added in their `globalName` property. (You can still access it via `module`)\n- if you had some weird formatting around syntax declarations (newlines in-between etc) the AST data should be cleaned up rather than trying to reproduce that style\n- Imports are now proper types, with additional information\n- Protocol now has `genericRequirements`, it will also inherit `associatedType` from it's parent if it's not present\n- Single value tuples will be automatically unwrapped when parsing\n\n### Attributes\n- Attributes are now of stored in dictionary of arrays `[String: [Attribute]]` since you can have multiple attributes of the same name e.g. `@available`\n- Name when not named will be using index same as associated value do e.g. objc(name) will have `0: name` as argument \n- spaces will no longer be replaced with `_`\n\n## 1.2.1\n\n## Internal Changes\nTweaks some warnings into info logs to not generate Xcode warnings\n\n## 1.2.0\n\n### New Features\n- `Self` reference is resolved to correct type. [Enchancement Request](https://github.com/krzysztofzablocki/Sourcery/issues/900)\n- Sourcery will now attempt to resolve local type names across modules when it can be done without ambiguity. Previously we only supported fully qualified names. [Enchancement Request](https://github.com/krzysztofzablocki/Sourcery/issues/899)\n\n## Internal Changes\n- Sourcery is now always distributed via SPM, this creates much nicer diffs when using CocoaPods distribution.\n\n## 1.1.1\n\n- Updates StencilSwiftKit to 2.8.0\n\n## 1.1.0\n\n### New Features\n- [PR](https://github.com/krzysztofzablocki/Sourcery/pull/897) Methods, Variables and Subscripts are now uniqued in all accessors:\n  - `methods` and `allMethods` \n  - `variables` and `allVariables`\n  - `subscripts` and `allSubscripts`\n  - New accessor is introduced that doesn't get rid of duplicates `rawMethods`, `rawVariables`, `rawSubscripts`s. \n  - The deduping process works by priority order (highest to lowest):\n    - base declaration\n    - inheritance\n    - protocol conformance\n    - extensions\n\n## 1.0.3\n\n### Internal Changes\n- updated xcodeproj, Stencil and StencilSwiftKit to newest versions\n\n### Bug fixes\n- [Fixes type resolution when using xcode project integration](https://github.com/krzysztofzablocki/Sourcery/issues/887)\n- Matches the behaviour of `allMethods` to `allVariables` by only listing the same method once, even if defined in both base protocol and extended class. You could still walk the inheritance tree if you need to (to get all original methods), but for purpose of majority of codegen this is unneccessary.\n\n## 1.0.2\n\n### Bug fixes\n- Fixes an issue when a very complicated variable initialization that contained `.init` call to unrelated case would cause the parser to assume the whole codeblock was a type and that could lead to mistakes in processing and even stack overflows\n\n## 1.0.1\n\n### Internal Changes\n\n- Updated project and CI to Xcode 12.1\n- Updated SourceKitten, Commander.\n\n### Bug fixes\n\n- Fix multiline method declarations parsing\n- Fix an issue, where \"types.implementing.<protocolName>\" did not work due to an additional module name.\n- Using tuple for associated values in enum case is deprecated since Swift 5.2. Fix AutoEquatable and AutoHashable templates to avoid the warning (#842)\n\n## 1.0.0\n\n### New Features\n\n- Added support for associated types (#539)\n\n### Bug fixes\n\n- Disallow protocol compositions from being considered as the `rawType` of an `enum` (#830)\n- Add missing documentation for the `ProtocolComposition` type.\n- Fix incorrectly taking closure optional return value as sign that whole variable is optional (#823) \n- Fix incorrectly taking return values with closure as generic type as sign that whole variable is a closure (#845)\n- Fix empty error at build time when using SwiftTemplate on Xcode 11.4 and higher (#817)\n\n## 0.18.0\n\n### New Features\n\n- Added `optional` filter for variables\n- Added `json` filter to output raw JSON objects\n- Added `.defaultValue` to `AssociatedValue`\n- Added support for parsing [Protocol Compositions](https://docs.swift.org/swift-book/ReferenceManual/Types.html#ID454)\n- Added support for parsing free functions\n- Added support for indirect enum cases\n- Added support for accessing all typealiases via `typealiases` and `typesaliasesByName`\n- Added support for parsing global typealiases\n\n### Internal Changes\n\n- Improved error logging when running with `--watch` option\n- Updated CI to Xcode 11.4.1\n\n### Bug fixes\n\n- Fixed expansion of undefined environment variables (now consistent with command line behaviour, where such args are empty strings)\n- Fixed a bug in inferring extensions of Dictionary and Array types\n- Fixed a bug that was including default values as part of AssociatedValues type names\n- Fixed an issue with AutoMockable.stencil template when mocked function's return type was closure\n- Fixed missing SourceryRuntime dependency of SourceryFramework (SPM)\n\n## 0.17.0\n\n### Internal Changes\n\n- Parallelized combining phase that yields 5-10x speed improvement for New York Times codebase\n- Switched cache logic to rely on file modification date instead of content Sha256\n- Additional benchmark logs showing how long does each phase take\n- update dependencies to fix cocoapods setup when using Swift 5.0 everywhere. Update Quick to 2.1.0, SourceKitten to 0.23.1 and Yams to 2.0.0\n\n## 0.16.2\n\n### New Features\n\n- Support automatic linking of files generated by annotations to project target\n\n### Bug fixes\n\n- Fixes always broken sourcery cache\n- Add missing SourceryFramework library product in Package.swift\n\n## 0.16.1\n\n### Bug fixes\n- Fix ReceivedInvocations's type for the method which have only one parameter in AutoMockable.stencil\n- Fix missing folder error that could happen when running a Swift template with existing cache\n- Don't add indentation to empty line when using inline generated code.\n- Fix issue where errors in Swift Template would not be reported correctly when using Xcode 10.2.\n- Fix annotations for enum cases with associated values that wouldn't parses them correctly when commas were used\n\n### Internal Changes\n\n- Removed dependency on SwiftTryCatch pod in order to avoid Swift Package Manager errors.\n\n## 0.16.0\n\n- Replaces environment variables inside .yml configurations (like ${PROJECT_NAME}), if a value is set.\n- Fixes warning in generated AutoMockable methods that have implicit optional return values\n- Support for `optional` methods in ObjC protocols\n- Support for parsing lazy vars into Variable's attributes.\n- Updated Stencil to 0.13.1 and SwiftStencilKit to 2.7.0\n- In Swift templates CLI arguments should now be accessed via `argument` instead of `arguments`, to be consistent with Stencil and JS templates.\n- Now in swift templates you can define types, extensions and use other Swift features that require file scope, without using separate files. All templates code is now placed at the top level of the template executable code, instead of being placed inside an extension of `TemplateContext` type.\n- Fixed missing generated code annotated with `inline` annotation when corresponding annotation in sources are missing. This generated code will be now present in `*.generated.swift` file.\n- Updated AutoHashable template to use Swift 4.2's `hash(into:)` method from `Hashable`, and enable support for inheritance.\n- Record all method invocations in the `AutoMockable` template.\n- Replace `swiftc` with the Swift Package Manager to build Swift templates\n- Swift templates can now be used when using a SPM build of Sourcery.\n\n## 0.15.0\n\n### New Features\n\n- You can now pass a json string as a command line arg or annotation and have it parsed into a Dictionary or Array to be used in the template.\n- Support for Xcode 10 and Swift 4.2\n\n## 0.14.0\n\n### New Features\n\n- You can now include entire Swift files in Swift templates\n- You can now use AutoEquatable with annotations\n- Content from multiple file annotations will now be concatenated instead of writing only the latest generated content.\n\nFor example content generated by two following templates\n\n```\n// sourcery:file:Generated/Foo.swift\nline one\n// sourcery:end\n```\nand\n\n```\n// sourcery:file:Generated/Foo.swift\nline two\n// sourcery:end\n```\n\nwill be written to one file:\n\n```\nline one\n\nline two\n\n```\n\n### Internal Changes\n\n- Use AnyObject for class-only protocols\n\n### Bug fixes\n\n- Fixed parsing associated enum cases in Xcode 10\n- Fixed AutoEquatable access level for `==` func\n- Fixed path of generated files when linked to Xcode project\n- Fixed extraction of inline annotations in multi line comments with documentation style\n- Fixed compile error when used AutoHashable in NSObject subclass.\n\n## 0.13.1\n\n### New Features\n\n- Added support for enums in AutoCodable template\n- You can now specify the base path for the Sourcery cache directory with a `cacheBasePath` key in the config file\n\n## 0.13.0\n\n### New Features\n\n- Added AutoCodable template\n\n### Bug fixes\n\n- Fixed parsing protocol method return type followed by declaration with attribute\n- Fixed inserting auto-inlined code on the last line of declaration body\n- AutoEquatable and AutoHashable templates should not add protocol conformances in extensions\n\n## 0.12.0\n\n### Internal Changes\n\n- Migrate to Swift 4.1 and Xcode 9.3\n\n## 0.11.2\n\n### Bug fixes\n\n- Autocases template not respecting type access level\n- Ensure SPM and CocoaPods dependencies match\n- Improve AutoMockable template to handle methods with optional return values\n- Fixed crash while compiling swift templates\n\n## 0.11.1\n\n### Internal changes\n\n- Do not fail the build if slather fails\n- Updated SourceKitten to 0.20.0\n\n### Bug fixes\n\n- Fixed parsing protocol methods return type (#579)\n\n## 0.11.0\n\n### New Features\n\n- Supports adding new templates files while in watcher mode\n- Supports adding new source files while in watcher mode\n- Added support for subscripts\n- Added `isGeneric` property for `Method`\n- You can now pass additional arguments one by one, i.e. `--args arg1=value1 --args arg2 --args arg3=value3`\n- Improved support for generic types. Now you can access basic generic type information with `TypeName.generic` property\n- added `@objcMembers` attribute\n- Moved EJS and Swift templates to separate framework targets\n- EJS templates now can be used when building Sourcery with SPM\n- Added Closures to AutoMockable\n- You can now link generated files to projects using config file\n- You can now use AutoMockable with annotations\n- Updated to latest version of Stencil (commit 9184720)\n- Added support for annotation namespaces\n- Added `--exclude-sources` and `--exclude-templates` CLI options\n\n** Breaking **\n\n- @objc attribute now has a `name` argument that contains Objective-C name of attributed declaration\n- Type collections `types.based`, `types.implementing` and `types.inheriting` now return non-optional array. If no types found, empty array will be returned.\nThis is a breaking change for template code like this:\n\n ```swift\n<% for type in (types.implementing[\"SomeProtocol\"] ?? []) { %>\n```\n\n The new correct syntax would be:\n\n ```swift\n<% for type in types.implementing[\"SomeProtocol\"] { %>\n```\n\n### Internal changes\n\n- Migrate to Swift 4, SwiftPM 4 and Xcode 9.2\n- `selectorName` for methods without parameters now will not contain `()`\n- `returnTypeName` for initializers will be the type name of defining type, with `?` for failable initializers\n- Improved compile time of AutoHashable template\n- Updated StencilSwiftKit and Stencil to 0.10.1\n\n### Bug fixes\n\n- Fixes FSEvents errors reported in #465 that happen on Sierra\n- JS exceptions no more override syntax errors in JS templates\n- Accessing unknown property on `types` now results in a better error than `undefined is not an object` in JS templates\n- Fixed issue in AutoMockable, where generated non-optional variables wouldn't meet protocol's requirements. For this purpose, underlying variable was introduced\n- Fixed `inline:auto` not inserting code if Sourcery is run with cache enabled #467\n- Fixed parsing @objc attributes on types\n- Fixed parsing void return type in methods without spaces between method name and body open curly brace and in protocols\n- Fixed AutoMockable template generating throwing method with void return type\n- Fixed parsing throwing initializers\n- Fixed trying to process files which do not exist\n- Automockable will not generate mocks for methods defined in protocol extensions\n- Fixed parsing typealiases of generic types\n- AutoLenses template will create lenses only for stored properties\n- Fixed resolving actual type name for generics with inner types\n- Fixed parsing nested types from extensions\n- Fixed removing back ticks in types names\n- Fixed creating output folder if it does not exist\n- Fixed inferring variable types with closures and improved inferring types of enum default values\n- Fixed enum cases with empty parentheses not having () associated value\n\n## 0.10.1\n\n* When installing Sourcery via CocoaPods, the unneeded `file.zip` is not kept in `Pods/Sourcery/` anymore _(freeing ~12MB on each install of Sourcery made via CocoaPods!)_.\n\n## 0.10.0\n\n### New Features\n\n- Added test for count Stencil filter\n- Added new reversed Stencil filter\n- Added new isEmpty Stencil filter\n- Added new sorted and sortedDescending Stencil filters. This can sort arrays by calling e.g. `protocol.allVariables|sorted:\"name\"`\n- Added new toArray Stencil filter\n- Added a console warning when a yaml is available but any parameter between 'sources', templates', 'forceParse', 'output' are provided\n\n### Internal changes\n\n- Add release to Homebrew rake task\n- Fixed Swiftlint warnings\n- Fixed per file generation if there is long (approx. 150KB) output inside `sourcery:file` annotation\n- Do not generate default.profraw\n- Remove filters in favor of same filters from StencilSwiftKit\n\n## 0.9.0\n\n### New Features\n\n- Added support for file paths in `config` parameter\n- Added `isDeinitializer` property for methods\n- Improved config file validation and error reporting\n- Various improvements for `AutoMockable` template:\n  - support methods with reserved keywords name\n  - support methods that throws\n  - improved generated declarations names\n\n### Bug fixes\n\n- Fixed single file generation not skipping writing the file when there is no generated content\n\n### Internal changes\n\n- Updated dependencies for Swift 4\n- Update internal ruby dependencies\n\n## 0.8.0\n\n### New Features\n\n- Added support in `AutoHashable` for static variables, `[Hashable]` array and `[Hashable: Hashable]` dictionary\n- Added `definedInType` property for `Method` and `Variable`\n- Added `extensions` filter for stencil template\n- Added include support in Swift templates\n- Swift templates now can throw errors. You can also throw just string literals.\n- Added support for TypeName in string filters (except filters from StencilSwiftKit).\n\n### Bug fixes\n\n- Fixed linker issue when using Swift templates\n- Updated `AutoMockable` to exclude generated code collisions\n- Fixed parsing of default values for variables that also have a body (e.g. for `didSet`)\n- Fixed line number display when an error occur while parsing a Swift template\n- Fixed `rsync` issue on `SourceryRuntime.framework` when using Swift templates\n- Fixed `auto:inline` for nested types (this concerns the first time the code is inserted)\n\n### Internal changes\n\n- Fix link for template in docs\n- Fix running Sourcery in the example app\n- Add step to update internal boilerplate code during the release\n\n\n## 0.7.2\n\n### Internal changes\n\n- Add Version.swift to represent CLI tool version\n\n\n## 0.7.1\n\n### Bug fixes\n\n- Fixed regression in parsing templates from config file\n- Removed meaningless `isMutating` property for `Variable`\n\n### Internal changes\n\n- Improvements in release script\n- Updated boilerplate code to reflect latest changes\n\n\n## 0.7.0\n\n### New Features\n\n- Added `inout` flag for `MethodParameter`\n- Added parsing `mutating` and `final` attributes with convenience `isMutating` and `isFinal` properties\n- Added support for `include` Stencil tag\n- Added support for excluded paths\n\n### Bug fixes\n\n- Fixed inserting generated code inline automatically at wrong position\n- Fixed regression in AutoEquatable & AutoHashable template with private computed variables\n\n### Internal changes\n\n- Internal release procedure improvements\n- Improved `TemplatesTests` scheme running\n- Fixed swiftlint warnings (version 0.19.0)\n\n\n## 0.6.1\n\n### New Features\n\n- Paths in config file are now relative to config file path by default, absolute paths should start with `/`\n- Improved logging and error reporting, added `--quiet` CLI option, added runtime errors for using invalid types in `implementing` and `inheriting`\n- Added support for includes in EJS templates (for example: `<%- include('myTemplate.js') %>`)\n- Add the `lowerFirst` filter for Stencil templates.\n- Added `isRequired` property for `Method`\n- Improved parsing of closure types\n- Check if Current Project Version match version in podspec in release task\n- Improved swift templates performance\n- Added `// sourcery:file` annotation for source code\n\n### Bug fixes\n\n- Fixed detecting computed properties\n- Fixed typo in `isConvenienceInitialiser` property\n- Fixed creating cache folder when cache is disabled\n- Fixed parsing multiple enum cases annotations\n- Fixed parsing inline annotations when there is an access level or attribute\n- Fixed parsing `required` attribute\n- Fixed typo in `guides/Writing templates.md`\n\n### Internal changes\n\n- Improved `AutoMockable.stencil` to support protocols with `init` methods\n- Improved `AutoCases.stencil` to use `let` instead of computed `var`\n- Updated StencilSwiftKit to 1.0.2 which includes Stencil 0.9.0\n- Adding docset to release archive\n- Add tests for bundled stencil templates\n- Moved to CocoaPods 1.2.1\n- Made Array.parallelMap's block non-escaping\n\n\n## 0.6.0\n\n### New Features\n\n- Added some convenience accessors for classic, static and instance methods, and types and contained types grouped by names\n\n## 0.6\n\n### New Features\n\n- Added support for inline code generation without requiring explicit `// sourcery:inline` comments in the source files. To use, use `sourcery:inline:auto` in a template: `// sourcery:inline:auto:MyType.TemplateName`\n- Added `isMutable` property for `Variable`\n- Added support for scanning multiple targets\n- Added access level filters and disabled filtering private declarations\n- Added support for inline comments for annotations with `/*` and `*/`\n- Added annotations for enum case associated values and method parameters\n- Added `isConvenienceInitializer` property for `Method`\n- Added `defaultValue` for variables and method parameters\n- Added docs generated with jazzy\n- Sourcery now will not create empty files and will remove existing generated files with empty content if CLI flag `prune` is set to `true` (`false` by default)\n- Sourcery now will remove inline annotation comments from generated code.\n- Added `rethrows` property to `Method`\n- Allow duplicated annotations to be agregated into array\n- Added ejs-style tags to control whitespaces and new lines in swift templates\n- Added CLI option to provide path to config file\n\n### Bug Fixes\n\n- Inserting multiple inline code block in one file\n- Suppress warnings when compiling swift templates\n- Accessing protocols in Swift templates\n- Crash that would happen sometimes when parsing typealiases\n\n### Internal changes\n\n- Replaced `TypeReflectionBox` and `GenerationContext` types with common `TemplateContext`.\n\n## 0.5.9\n\n### New Features\n\n- Added flag to check if `TypeName` is dictionary\n- Added support for multiple sources and templates paths, sources, templates and output paths now should be provided with `--sources`, `--templates` and `--output` options\n- Added support for YAML file configuration\n- Added generation of non-swift files using `sourcery:file` annotation\n\n### Bug Fixes\n\n- Fixed observing swift and js templates\n- Fixed parsing generic array types\n- Fixed using dictionary in annotations\n\n## 0.5.8\n\n### New Features\n\n- Added parsing array types\n- Added support for JavaScript templates (using EJS)\n\n### Bug Fixes\n\n- Fixed escaping variables with reserved names\n- Fixed duplicated methods and variables in `allMethods` and `allVariables`\n- Fixed trimming attributes in type names\n\n## 0.5.7\n\n### Bug Fixes\n- Cache initial file contents, including the inline generated ranges so that they are always up to date\n\n## 0.5.6\n\n### New Features\n\n- Added per file code generation\n\n### Bug Fixes\n\n- Fixed parsing annotations with complex content\n- Fixed inline parser using wrong caching logic\n\n## 0.5.5\n\n### New Features\n\n- Sourcery will no longer write files if content didn't change, this improves behaviour of things depending on modification date like Xcode, Swiftlint.\n\n### Internal changes\n\n- Improved support for contained types\n\n### Bug Fixes\n\n- Fixes cache handling that got broken in 0.5.4\n\n## 0.5.4\n\n### New Features\n\n- Added inline code generation\n- Added `isClosure` property to `TypeName` to detect closure types\n\n### Bug Fixes\n\n- Fixed parsing of associated values separater by newlines\n- Fixed preserving order of inherited types\n- Improved support for throwing methods in protocols\n- Fixed extracting parameters of methods with closures in their bodies\n- Fixed extracting method return types of tuple types\n- Improved support for typealises as tuple elements types\n- Method parameters with `_` argument label will now have `nil` in `argumentLabel` property\n- Improved support for generic methods\n- Improved support for contained types\n\n### Internal changes\n\n- adjusted internal templates and updated generated code\n- moved methods parsing related tests in a separate spec\n\n## 0.5.3\n\n### New Features\n- Added support for method return types with `throws` and `rethrows`\n- Added a new filter `replace`. Usage: `{{ name|replace:\"substring\",\"replacement\" }}` - replaces occurrences of `substring` with `replacement` in `name` (case sensitive)\n- Improved support for inferring types of variables with initial values\n- Sourcery is now bundling a set of example templates, you can access them in Templates folder.\n- We now use parallel parsing and cache source artifacts. This leads to massive performance improvements:\n- e.g. on big codebase of over 300 swift files:\n```\nSourcery 0.5.2\nProcessing time 8.69941002130508 seconds\n\nSourcery 0.5.3\nFirst time 4.69904798269272 seconds\nSubsequent time: 0.882099032402039 seconds\n```\n\n### Bug Fixes\n- Method `accessLevel` was not exposed as string so not accessible properly via templates, fixed that.\n- Fixes on Swift Templates\n\n## 0.5.2\n\n### New Features\n\n- Added support for `ImplicitlyUnwrappedOptional`\n- `actualTypeName` property of `Method.Parameter`, `Variable`, `Enum.Case.AssociatedValue`, `TupleType.Element` now returns `typeName` if type is not a type alias\n- `Enum` now contains type information for its raw value type. `rawType` now return `Type` object, `rawTypeName` returns its `TypeName`\n- Added `annotated` filter to filter by annotations\n- Added negative filters counterparts\n- Added support for attributes, i.e. `@escaping`\n- Experimental support for Swift Templates\n\n- Swift Templates are now supported\n\n```\n<% for type in types.classes { %>\n    extension <%= type.name %>: Equatable {}\n\n    <% if type.annotations[\"showComment\"] != nil { %> // <%= type.name %> has Annotations <% } %>\n\n        func == (lhs: <%= type.name %>, rhs: <%= type.name %>) -> Bool {\n    <% for variable in type.variables { %> if lhs.<%= variable.name %> != rhs.<%= variable.name %> { return false }\n        <% } %>\n        return true\n    }\n<% } %>\n```\n\n### 0.5.1\n\n### New Features\n- Variables with default initializer are now supported, e.g. `var variable = Type(...)`\n- Added support for special escaped names in enum cases e.g. `default` or `for`\n- Added support for tuple types and `tuple` filter for variables\n- Enum associated values now have `localName` and `externalName` properties.\n- Added `actualTypeName` for `TypeName` that is typealias\n- Added `implements`, `inherits` and `based` filters\n\n### Bug Fixes\n- Using protocols doesn't expose variables using KVC, which meant some of the typeName properties weren't accessible via Templates, we fixed that using Sourcery itself to generate specific functions.\n- Fixed parsing typealiases for tuples and closure types\n- Fixed parsing associated values of generic types\n\n### Internal Changes\n- Performed significant refactoring and simplified mutations in parsers\n\n## 0.5.0\n- You can now pass arbitrary values to templates with `--args` argument.\n- Added `open` access level\n- Type `inherits` and `implements` now allow you to access full type information, not just name\n- Type `allVariables` will now include all variables, including those inherited from supertype and known protocols.\n- Type `allMethods` will now include all methods, including those inherited from supertype and known protocols.\n- AssociatedValue exposes `unwrappedTypeName`, `isOptional`\n- New Available stencil filters:\n  - `static`, `instance`, `computed`, `stored` for Variables\n  - `enum`, `class`, `struct`, `protocol` for Types\n  - `class`, `initializer`, `static`, `instance` for Methods\n  - `count` for Arrays, this is used when chaining arrays with filters where Stencil wouldn't allow us to do `.count`, e.g. `{{ variables|instance|count }}`\n- Now you can avoid inferring unknown protocols as enum raw types by adding conformance in extension (instead of `enum Foo: Equatable {}` do `enum Foo {}; extension Foo: Equatable {}`)\n\n### Internal changes\n- Refactor code around typenames\n\n## 0.4.9\n\n### New Features\n- Watch mode now works with folders, reacting to source-code changes and adding templates/source files.\n- When using watch mode, status info will be displayed in the generated code so that you don't need to look at console at all.\n- You can now access types of enum's associated values\n- You can now access type's `methods` and `initializers`\n\n## 0.4.8\n\n### New Features\n- You can now access `supertype` of a class\n- Associated values will now automatically use idx as name if no name is provided\n\n### Bug Fixes\n- Fix dealing with multibyte characters\n- `types.implementing` and `types.based` should include protocols that are based on other protocols\n\n### Internal changes\n- TDD Development is now easier thanks to Diffable results, no longer we need to scan wall of text on failures, instead we see exactly what's different.\n\n## 0.4.7\n\n### New Features\n- Added `contains`, `hasPrefix`, `hasPrefix` filters\n\n### Bug Fixes\n- AccessLevel is now stored as string\n\n## 0.4.6\n\n### Bug Fixes\n- Typealiases parsing could cause crash, implemented a workaround for that until we can find a little more reliable solution\n\n## 0.4.5\n\n### New Features\n\n* Swift Package Manager support.\n\n## 0.4.4\n\n### New Features\n\n* Enum cases also have annotation support\n\n### Internal changes\n\n* Improved handling of global and local typealiases.\n\n## 0.4.3\n\n### New Features\n* Add upperFirst stencil filter\n\n## 0.4.2\n\n### Bug Fixes\n\n* Fixes a bug with flattening `inherits`, `implements` for protocols implementing other protocols\n* Improve `rawType` logic for Enums\n\n### New Features\n\n* Annotations can now be declared also with sections e.g. `sourcery:begin: attribute1, attribute2 = 234`\n* Adds scanning class variables as static\n\n### Internal changes\n\n* Refactored models\n* Improved performance of annotation scanning\n\n## 0.4.1\n\n### New Features\n\n* Implements inherits, implements, based reflection on each Type\n* Flattens inheritance, e.g. Foo implements Decodable, then FooSubclass also implements it\n\n### Internal changes\n\n* Stop parsing private variables as they wouldn't be accessible to code-generated code\n\n## 0.4.0\n\n### New Features\n\n* improve detecting raw type\n* add `isGeneric` property\n\n## 0.3.9\n\n### New Features\n\n* Enables support for scanning extensions of unknown type, providing partial metadata via types.based or types.all reflection\n\n## 0.3.8\n### New Features\n\n* Adds real type reflection into Variable, not only it's name\n* Resolves known typealiases\n\n## 0.3.7\n### Bug Fixes\n\n* Fixes a bug that caused Sourcery to drop previous type information when encountering generated code, closes #33\n\n## 0.3.6\n### Bug Fixes\n\n* Fixes bug in escaping path\n* Fixes missing protocol variant in kind\n\n\n## 0.3.5\n\n### New Features\n* added support for type/variable source annotations\n* added property kind to Type, it contains info whether this is struct, class or enum entry\n* Automatically skips .swift files that were generated with Sourcery\n\n### Internal changes\n\n* improved detecting enums with rawType\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our project and\nour community a harassment-free experience for everyone, regardless of age, body\nsize, disability, ethnicity, gender identity and expression, level of experience,\nnationality, personal appearance, race, religion, or sexual identity and\norientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or\nadvances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic\n  address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n  professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable\nbehavior and are expected to take appropriate and fair corrective action in\nresponse to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or\nreject comments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct, or to ban temporarily or\npermanently any contributor for other behaviors that they deem inappropriate,\nthreatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community. Examples of\nrepresenting a project or community include using an official project e-mail\naddress, posting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event. Representation of a project may be\nfurther defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported by contacting the project team at krzysztof.zablocki@pixle.pl. All\ncomplaints will be reviewed and investigated and will result in a response that\nis deemed necessary and appropriate to the circumstances. The project team is\nobligated to maintain confidentiality with regard to the reporter of an incident.\nFurther details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good\nfaith may face temporary or permanent repercussions as determined by other\nmembers of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,\navailable at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to Sourcery\n\nSourcery is an open source project started by Krzysztof Zabłocki and open to the entire Cocoa community.\n\nI really appreciate your help!\n\n## Filing issues\n\nWhen filing an issue, make sure to answer these questions:\n\n1. What version of Swift are you using (`swift --version`)?\n2. What did you do?\n3. What did you expect to see?\n4. What did you see instead?\n\n## Contributing code\n\nBefore submitting changes, please follow these guidelines:\n\n1. Check the open issues and pull requests for existing discussions.\n2. Open an issue to discuss a new feature.\n3. Write tests.\n4. Make sure your changes pass existing tests.\n5. Make sure the entire test suite passes locally and on Circle CI.\n6. Open a Pull Request.\n\nUnless otherwise noted, the Sourcery source files are distributed under\nthe MIT-style [LICENSE](LICENSE).\n\n[Please review our Code of Conduct](https://github.com/krzysztofzablocki/Sourcery/blob/master/CODE_OF_CONDUCT.md)\n"
  },
  {
    "path": "Dangerfile",
    "content": "# Sometimes it's a README fix, or something like that - which isn't relevant for\n# including in a project's CHANGELOG for example\nnot_declared_trivial = !(github.pr_title.include? \"#trivial\")\nhas_app_changes = !git.modified_files.grep(/(Sourcery|Templates)/).empty?\n\n# Make it more obvious that a PR is a work in progress and shouldn't be merged yet\nwarn(\"PR is classed as Work in Progress\") if github.pr_title.include? \"[WIP]\"\n\n# Warn when there is a big PR\nwarn(\"Big PR\") if git.lines_of_code > 500\n\n# Don't let testing shortcuts get into master by accident\nfail(\"fit left in tests\") if `grep -rI \"fit(\" SourceryTests/`.length > 1\nfail(\"fdescribe left in tests\") if `grep -rI \"fdescribe(\" SourceryTests/`.length > 1\nfail(\"fcontext left in tests\") if `grep -rI \"fcontext(\" SourceryTests/`.length > 1\n\n# Changelog entries are required for changes to library files.\nno_changelog_entry = !git.modified_files.include?(\"CHANGELOG.md\")\nif has_app_changes && no_changelog_entry && not_declared_trivial\n  fail(\"Any changes to library code need a summary in the Changelog.\")\nend\n\n# New templates must be covered with tests\nhas_new_stencil_template = !git.added_files.grep(/Templates\\/Templates.*\\.stencil$/).empty?\nhas_new_template_test = !git.added_files.grep(/Templates\\/Tests\\/Generated/).empty? && !git.added_files.grep(/Templates\\/Tests\\/Context/).empty? && !git.added_files.grep(/Templates\\/Tests\\/Expected/).empty?\nif has_new_stencil_template && !has_new_template_test\n  fail(\"Any new stencil template must be covered with test.\")\nend\n"
  },
  {
    "path": "Dockerfile",
    "content": "ARG BUILDER_IMAGE=swift:6.0-jammy\nARG RUNTIME_IMAGE=swift:6.0-jammy-slim\n\n# Builder image\nFROM ${BUILDER_IMAGE} AS builder\nRUN apt-get update && apt-get install -y \\\n    build-essential \\\n    libffi-dev \\\n    libncurses5-dev \\\n    libsqlite3-dev \\\n && rm -r /var/lib/apt/lists/*\nWORKDIR /workdir/\nCOPY Sourcery Sourcery/\nCOPY SourceryExecutable SourceryExecutable/\nCOPY SourceryFramework SourceryFramework/\nCOPY SourceryJS SourceryJS/\nCOPY SourceryRuntime SourceryRuntime/\nCOPY SourceryStencil SourceryStencil/\nCOPY SourcerySwift SourcerySwift/\nCOPY SourceryTests SourceryTests/\nCOPY SourceryUtils SourceryUtils/\nCOPY Plugins Plugins/\nCOPY Templates Templates/\nCOPY Tests Tests/\nCOPY Package.* ./\n\nRUN swift package --only-use-versions-from-resolved-file resolve\nARG SWIFT_FLAGS=\"-c release\"\nRUN swift build $SWIFT_FLAGS --product sourcery\nRUN mv `swift build $SWIFT_FLAGS --show-bin-path`/sourcery /usr/bin\nRUN sourcery --version\n\n# Runtime image\nFROM ${RUNTIME_IMAGE}\nLABEL org.opencontainers.image.source https://github.com/krzysztofzablocki/Sourcery\nRUN apt-get update && apt-get install -y \\\n    libcurl4 \\\n    libsqlite3-0 \\\n    libxml2 \\\n && rm -r /var/lib/apt/lists/*\nCOPY --from=builder /usr/bin/sourcery /usr/bin\n\nRUN sourcery --version\n\nCMD [\"sourcery\"]\n"
  },
  {
    "path": "Funding.yml",
    "content": "github: krzysztofzablocki\ncustom: https://www.merowing.info/membership\n"
  },
  {
    "path": "Gemfile",
    "content": "source 'https://rubygems.org'\n\ngem 'cocoapods', '1.14.3'\ngem 'danger'\ngem 'rake'\ngem 'slather'\ngem 'xcpretty'\ngem 'ffi', '1.15.3'\ngem 'json', '2.5.1'\ngem 'jazzy', '0.14.0'\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2016-2021 Krzysztof Zabłocki\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "LINUX.md",
    "content": "## Linux Support\n\nCurrently (as per 2.1.0 release), Linux Support is **experimental**. This means the following:\n\n1. Running `sourcery` in the root folder of Sourcery project was generating `Equatable.generated.swift` and other autogenerated files with extensions of classes used by `SourceryRuntime`, but they were moved to class definitions due to the abscense of `@objc` attribute on non-Darwin platforms. Thus, `.sourcery.yaml` file was disabled for the moment, until #1198 is resolved.\n2. Some unit tests were disabled with `#if canImport(ObjectiveC)`, that is some due to Swift compiler crashes, some due to abscence of `JavaScriptCore`.\n3. `FileWatcher` needs to be re-implemented (see [this comment](https://github.com/krzysztofzablocki/Sourcery/pull/1188#issue-1828038476) for a possible fix)\n\n\nAll issues related to Linux will be mentioned in #1198\n\n## Using Sourcery under Linux\n\nSimply add package dependency of Sourcery as described in the [README](README.md).\n\n## Using Sourcery with Docker\n\nYou can build Docker container with Sourcery installed using this command:\n\n```console\ndocker build -t sourcery-image .\n```\n\nThen you can run this Docker image passing the arguments you'd like:\n\n```console\ndocker run sourcery-image sourcery --help\n```\n\n## Contributing\n### Installation of Linux Environment\n\nI have installed ubuntu VM through [tart](https://github.com/cirruslabs/tart/issues/62#issuecomment-1225956540) and updated to 22.04 according to [this guide](https://www.linuxtechi.com/upgrade-ubuntu-20-04-to-ubuntu-22-04/).\n\nI had to run the following commands prior to being able to run `bundle install` in Sourcery:\n\n1. `sudo apt install libffi-dev`\n2. `sudo apt install build-essential`\n3. `sudo apt install libsqlite3-dev`\n4. `sudo apt-get install libncurses5-dev`\n\nThen, `swiftly` needs to be installed to easily manage Swift installation under Linux. How to install Swiftly is described [in this README](https://github.com/swift-server/swiftly).\n\n### Running Tests Under Linux\n\nTo run tests, you can use either Visual Studio Code distribution, or simply `swift test` in Sourcery root directory.\n\n#### Visual Studio Code\n\nTo install VS Code, you can follow [the official guide](https://code.visualstudio.com/docs/setup/linux), which mentions the following commands:\n\n```bash\nsudo apt-get install wget gpg\nwget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg\nsudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg\nsudo sh -c 'echo \"deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main\" > /etc/apt/sources.list.d/vscode.list'\nrm -f packages.microsoft.gpg\n\n# Then update the package cache and install the package using:\n\nsudo apt install apt-transport-https\nsudo apt update\nsudo apt install code # or code-insiders\n```\n\n### Test Discovery Under Linux\n\nDue to a missing feature in Swift Package Manager, tests under Linux are not discovered if the root class, from which tests are inherited, is located \"in another Package/Module\". Details regarding this [can be found here](https://github.com/apple/swift-package-manager/issues/5573).\n\nAnd so, if a new `Spec` needs to be added, that Spec file needs to be put into `LinuxMain.swift` similarly to what is there already, mentioning the new class name accordingly.\n"
  },
  {
    "path": "LinuxMain.swift",
    "content": "import XCTest\nimport Quick\n\n@testable import SourceryLibTests\n@testable import TemplatesTests\n@testable import CodableContextTests\n\n@main struct Main {\n    static func main() {\n        Quick.QCKMain([\n            ActorSpec.self,\n            AnnotationsParserSpec.self,\n            ClassSpec.self,\n            ConfigurationSpec.self,\n            DiffableSpec.self,\n            DryOutputSpec.self,\n            EnumSpec.self,\n            FileParserAssociatedTypeSpec.self,\n            FileParserAttributesSpec.self,\n            FileParserMethodsSpec.self,\n            FileParserProtocolCompositionSpec.self,\n            FileParserSpec.self,\n            FileParserSubscriptsSpec.self,\n            FileParserVariableSpec.self,\n            GeneratorSpec.self,\n            MethodSpec.self,\n            ParserComposerSpec.self,\n            ProtocolSpec.self,\n            SourcerySpecTests.self,\n            StencilTemplateSpec.self,\n            StringViewSpec.self,\n            StructSpec.self,\n            SwiftTemplateTests.self,\n            TemplateAnnotationsParserSpec.self,\n            TemplatesAnnotationParserPassInlineCodeSpec.self,\n            TypeNameSpec.self,\n            TypeSpec.self,\n            TypealiasSpec.self,\n            TypedSpec.self,\n            VariableSpec.self,\n            VerifierSpec.self,\n            CodableContextTests.self,\n            TemplatesTests.self\n        ],\n        configurations: [],\n        testCases: [\n            testCase(ActorSpec.allTests),\n            testCase(AnnotationsParserSpec.allTests),\n            testCase(ClassSpec.allTests),\n            testCase(ConfigurationSpec.allTests),\n            testCase(DiffableSpec.allTests),\n            testCase(DryOutputSpec.allTests),\n            testCase(EnumSpec.allTests),\n            testCase(FileParserAssociatedTypeSpec.allTests),\n            testCase(FileParserAttributesSpec.allTests),\n            testCase(FileParserMethodsSpec.allTests),\n            testCase(FileParserProtocolCompositionSpec.allTests),\n            testCase(FileParserSpec.allTests),\n            testCase(FileParserSubscriptsSpec.allTests),\n            testCase(FileParserVariableSpec.allTests),\n            testCase(GeneratorSpec.allTests),\n            testCase(MethodSpec.allTests),\n            testCase(ParserComposerSpec.allTests),\n            testCase(ProtocolSpec.allTests),\n            testCase(SourcerySpecTests.allTests),\n            testCase(StencilTemplateSpec.allTests),\n            testCase(StringViewSpec.allTests),\n            testCase(StructSpec.allTests),\n            testCase(SwiftTemplateTests.allTests),\n            testCase(TemplateAnnotationsParserSpec.allTests),\n            testCase(TemplatesAnnotationParserPassInlineCodeSpec.allTests),\n            testCase(TypeNameSpec.allTests),\n            testCase(TypeSpec.allTests),\n            testCase(TypealiasSpec.allTests),\n            testCase(TypedSpec.allTests),\n            testCase(VariableSpec.allTests),\n            testCase(VerifierSpec.allTests),\n            testCase(CodableContextTests.allTests),\n            testCase(TemplatesTests.allTests)\n        ])\n    }\n}"
  },
  {
    "path": "Package.resolved",
    "content": "{\n  \"pins\" : [\n    {\n      \"identity\" : \"aexml\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/tadija/AEXML.git\",\n      \"state\" : {\n        \"revision\" : \"38f7d00b23ecd891e1ee656fa6aeebd6ba04ecc3\",\n        \"version\" : \"4.6.1\"\n      }\n    },\n    {\n      \"identity\" : \"commander\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/kylef/Commander.git\",\n      \"state\" : {\n        \"revision\" : \"4b6133c3071d521489a80c38fb92d7983f19d438\",\n        \"version\" : \"0.9.1\"\n      }\n    },\n    {\n      \"identity\" : \"cwlcatchexception\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/mattgallagher/CwlCatchException.git\",\n      \"state\" : {\n        \"revision\" : \"07b2ba21d361c223e25e3c1e924288742923f08c\",\n        \"version\" : \"2.2.1\"\n      }\n    },\n    {\n      \"identity\" : \"cwlpreconditiontesting\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/mattgallagher/CwlPreconditionTesting.git\",\n      \"state\" : {\n        \"revision\" : \"0139c665ebb45e6a9fbdb68aabfd7c39f3fe0071\",\n        \"version\" : \"2.2.2\"\n      }\n    },\n    {\n      \"identity\" : \"nimble\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/Quick/Nimble.git\",\n      \"state\" : {\n        \"revision\" : \"e491a6731307bb23783bf664d003be9b2fa59ab5\",\n        \"version\" : \"9.0.0\"\n      }\n    },\n    {\n      \"identity\" : \"pathkit\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/kylef/PathKit.git\",\n      \"state\" : {\n        \"revision\" : \"3bfd2737b700b9a36565a8c94f4ad2b050a5e574\",\n        \"version\" : \"1.0.1\"\n      }\n    },\n    {\n      \"identity\" : \"quick\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/Quick/Quick.git\",\n      \"state\" : {\n        \"revision\" : \"8cce6acd38f965f5baa3167b939f86500314022b\",\n        \"version\" : \"3.1.2\"\n      }\n    },\n    {\n      \"identity\" : \"spectre\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/kylef/Spectre.git\",\n      \"state\" : {\n        \"revision\" : \"26cc5e9ae0947092c7139ef7ba612e34646086c7\",\n        \"version\" : \"0.10.1\"\n      }\n    },\n    {\n      \"identity\" : \"stencil\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/art-divin/Stencil.git\",\n      \"state\" : {\n        \"revision\" : \"03a1dca8923bef5a34c08f5a560fb420326f7244\",\n        \"version\" : \"0.15.3\"\n      }\n    },\n    {\n      \"identity\" : \"stencilswiftkit\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/art-divin/StencilSwiftKit.git\",\n      \"state\" : {\n        \"revision\" : \"6b07f85def6984e7015d65502d41b91f3f8db6d5\",\n        \"version\" : \"2.10.4\"\n      }\n    },\n    {\n      \"identity\" : \"swift-argument-parser\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-argument-parser.git\",\n      \"state\" : {\n        \"revision\" : \"8f4d2753f0e4778c76d5f05ad16c74f707390531\",\n        \"version\" : \"1.2.3\"\n      }\n    },\n    {\n      \"identity\" : \"swift-asn1\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-asn1.git\",\n      \"state\" : {\n        \"revision\" : \"7faebca1ea4f9aaf0cda1cef7c43aecd2311ddf6\",\n        \"version\" : \"1.3.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-certificates\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-certificates.git\",\n      \"state\" : {\n        \"revision\" : \"01d7664523af5c169f26038f1e5d444ce47ae5ff\",\n        \"version\" : \"1.0.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-collections\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-collections.git\",\n      \"state\" : {\n        \"revision\" : \"671108c96644956dddcd89dd59c203dcdb36cec7\",\n        \"version\" : \"1.1.4\"\n      }\n    },\n    {\n      \"identity\" : \"swift-crypto\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-crypto.git\",\n      \"state\" : {\n        \"revision\" : \"629f0b679d0fd0a6ae823d7f750b9ab032c00b80\",\n        \"version\" : \"3.0.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-driver\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/art-divin/swift-driver.git\",\n      \"state\" : {\n        \"revision\" : \"1c07ced84c1dfc1f9c3253dcbaa216fc9c76ee25\",\n        \"version\" : \"1.0.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-llbuild\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/art-divin/swift-llbuild.git\",\n      \"state\" : {\n        \"revision\" : \"783aec21649a6c47d1a8314db4144bdceb11df30\",\n        \"version\" : \"1.0.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-package-manager\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/art-divin/swift-package-manager.git\",\n      \"state\" : {\n        \"revision\" : \"7df9321541e544d711dd93f5b97dd4e8bf7e100e\",\n        \"version\" : \"1.0.8\"\n      }\n    },\n    {\n      \"identity\" : \"swift-syntax\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/swiftlang/swift-syntax.git\",\n      \"state\" : {\n        \"revision\" : \"0687f71944021d616d34d922343dcef086855920\",\n        \"version\" : \"600.0.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-system\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-system.git\",\n      \"state\" : {\n        \"revision\" : \"836bc4557b74fe6d2660218d56e3ce96aff76574\",\n        \"version\" : \"1.1.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-tools-support-core\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/art-divin/swift-tools-support-core.git\",\n      \"state\" : {\n        \"revision\" : \"930e82e5ae2432c71fe05f440b5d778285270bdb\",\n        \"version\" : \"1.0.0\"\n      }\n    },\n    {\n      \"identity\" : \"xcodeproj\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/tuist/xcodeproj\",\n      \"state\" : {\n        \"revision\" : \"f6c9cb05835086af13f91317f92693848b43ea47\",\n        \"version\" : \"8.24.6\"\n      }\n    },\n    {\n      \"identity\" : \"yams\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/jpsim/Yams.git\",\n      \"state\" : {\n        \"revision\" : \"c7facc5ccb8c5a4577ea8c491aa875762cdee57a\",\n        \"version\" : \"5.0.3\"\n      }\n    }\n  ],\n  \"version\" : 2\n}\n"
  },
  {
    "path": "Package.swift",
    "content": "// swift-tools-version:5.8\n\nimport PackageDescription\nimport Foundation\n\nvar sourceryLibDependencies: [Target.Dependency] = [\n    \"SourceryFramework\",\n    \"SourceryRuntime\",\n    \"SourceryStencil\",\n    \"SourceryJS\",\n    \"SourcerySwift\",\n    \"Commander\",\n    \"PathKit\",\n    \"Yams\",\n    \"StencilSwiftKit\",\n    .product(name: \"SwiftSyntax\", package: \"swift-syntax\"),\n    \"XcodeProj\",\n    .product(name: \"SwiftPM-auto\", package: \"swift-package-manager\"),\n]\n\n// Note: when Swift Linux doesn't bug out on [String: String], add a test back for it\n// See https://github.com/krzysztofzablocki/Sourcery/pull/1208#issuecomment-1752185381\n#if canImport(ObjectiveC)\nsourceryLibDependencies.append(\"TryCatch\")\nlet templatesTestsResourcesCopy: [Resource] = [\n    .copy(\"Templates\"),\n    .copy(\"Tests/Context\"),\n    .copy(\"Tests/Expected\")\n]\n#else\nsourceryLibDependencies.append(.product(name: \"Crypto\", package: \"swift-crypto\"))\nlet templatesTestsResourcesCopy: [Resource] = [\n    .copy(\"Templates\"),\n    .copy(\"Tests/Context_Linux\"),\n    .copy(\"Tests/Expected\")\n]\n#endif\n\n// Note: when Swift Linux doesn't bug out on [String: String], add a test back for it\n// See https://github.com/krzysztofzablocki/Sourcery/pull/1208#issuecomment-1752185381\n#if canImport(ObjectiveC)\nlet sourceryLibTestsResources: [Resource] = [\n    .copy(\"Stub/Configs\"),\n    .copy(\"Stub/Errors\"),\n    .copy(\"Stub/JavaScriptTemplates\"),\n    .copy(\"Stub/SwiftTemplates\"),\n    .copy(\"Stub/Performance-Code\"),\n    .copy(\"Stub/DryRun-Code\"),\n    .copy(\"Stub/Result\"),\n    .copy(\"Stub/Templates\"),\n    .copy(\"Stub/Source\")\n]\n#else\nlet sourceryLibTestsResources: [Resource] = [\n    .copy(\"Stub/Configs\"),\n    .copy(\"Stub/Errors\"),\n    .copy(\"Stub/JavaScriptTemplates\"),\n    .copy(\"Stub/SwiftTemplates\"),\n    .copy(\"Stub/Performance-Code\"),\n    .copy(\"Stub/DryRun-Code\"),\n    .copy(\"Stub/Result\"),\n    .copy(\"Stub/Templates\"),\n    .copy(\"Stub/Source_Linux\")\n]\n#endif\n\nvar targets: [Target] = [\n    .executableTarget(\n        name: \"SourceryExecutable\",\n        dependencies: [\"SourceryLib\"],\n        path: \"SourceryExecutable\",\n        exclude: [\n            \"Info.plist\"\n        ]\n    ),\n    .target(\n        // Xcode doesn't like when a target has the same name as a product but in different case.\n        name: \"SourceryLib\",\n        dependencies: sourceryLibDependencies,\n        path: \"Sourcery\",\n        exclude: [\n            \"Templates\",\n        ]\n    ),\n    .target(\n        name: \"SourceryRuntime\",\n        dependencies: [\n            \"StencilSwiftKit\"\n        ],\n        path: \"SourceryRuntime\",\n        exclude: [\n            \"Supporting Files/Info.plist\"\n        ]\n    ),\n    .target(\n        name: \"SourceryFramework\",\n        dependencies: [\n            \"PathKit\",\n            .product(name: \"SwiftSyntax\", package: \"swift-syntax\"),\n            .product(name: \"SwiftParser\", package: \"swift-syntax\"),\n            \"SourceryUtils\",\n            \"SourceryRuntime\"\n        ],\n        path: \"SourceryFramework\",\n        exclude: [\n            \"Info.plist\"\n        ]\n    ),\n    .target(\n        name: \"SourceryStencil\",\n        dependencies: [\n            \"PathKit\",\n            \"SourceryRuntime\",\n            \"StencilSwiftKit\",\n        ],\n        path: \"SourceryStencil\",\n        exclude: [\n            \"Info.plist\"\n        ]\n    ),\n    .target(\n        name: \"SourceryJS\",\n        dependencies: [\n            \"PathKit\"\n        ],\n        path: \"SourceryJS\",\n        exclude: [\n            \"Info.plist\"\n        ],\n        resources: [\n            .copy(\"Resources/ejs.js\")\n        ]\n    ),\n    .target(\n        name: \"SourcerySwift\",\n        dependencies: [\n            \"PathKit\",\n            \"SourceryRuntime\",\n            \"SourceryUtils\"\n        ],\n        path: \"SourcerySwift\",\n        exclude: [\n            \"Info.plist\"\n        ]\n    ),\n    .target(\n        name: \"CodableContext\",\n        path: \"Templates/Tests\",\n        exclude: [\n            \"Context/AutoCases.swift\",\n            \"Context/AutoEquatable.swift\",\n            \"Context/AutoHashable.swift\",\n            \"Context/AutoLenses.swift\",\n            \"Context/AutoMockable.swift\",\n            \"Context/LinuxMain.swift\",\n            \"Generated/AutoCases.generated.swift\",\n            \"Generated/AutoEquatable.generated.swift\",\n            \"Generated/AutoHashable.generated.swift\",\n            \"Generated/AutoLenses.generated.swift\",\n            \"Generated/AutoMockable.generated.swift\",\n            \"Generated/LinuxMain.generated.swift\",\n            \"Expected\",\n            \"Info.plist\",\n            \"TemplatesTests.swift\"\n        ],\n        sources: [\n            \"Context/AutoCodable.swift\",\n            \"Generated/AutoCodable.generated.swift\"\n        ]\n    ),\n    .testTarget(\n        name: \"SourceryLibTests\",\n        dependencies: [\n            \"SourceryLib\",\n            \"Quick\",\n            \"Nimble\"\n        ],\n        exclude: [\n            \"Info.plist\"\n        ],\n        resources: sourceryLibTestsResources,\n        swiftSettings: [.unsafeFlags([\"-enable-testing\"])]\n    ),\n    .testTarget(\n        name: \"CodableContextTests\",\n        dependencies: [\n            \"CodableContext\",\n            \"Quick\",\n            \"Nimble\"\n        ],\n        path: \"Templates/CodableContextTests\",\n        exclude: [\n            \"Info.plist\"\n        ],\n        swiftSettings: [.unsafeFlags([\"-enable-testing\"])]\n    ),\n    .testTarget(\n        name: \"TemplatesTests\",\n        dependencies: [\n            \"Quick\",\n            \"Nimble\",\n            \"PathKit\"\n        ],\n        path: \"Templates\",\n        exclude: [\n            \"CodableContext\",\n            \"CodableContextTests\",\n            \"Tests/Generated\",\n            \"Tests/Info.plist\"\n        ],\n        sources: [\n            // LinuxMain is not compiled as part of the target\n            // since there is no way to run script before compilation begins.\n            \"Tests/TemplatesTests.swift\"\n        ],\n        resources: templatesTestsResourcesCopy,\n        swiftSettings: [.unsafeFlags([\"-enable-testing\"])]\n    ),\n    .plugin(\n        name: \"SourceryCommandPlugin\",\n        capability: .command(\n            intent: .custom(\n                verb: \"sourcery-command\",\n                description: \"Sourcery command plugin for code generation\"\n            ),\n            permissions: [\n                .writeToPackageDirectory(reason: \"Need permission to write generated files to package directory\")\n            ]\n        ),\n        dependencies: [\"SourceryExecutable\"]\n    )\n]\n\n#if canImport(ObjectiveC)\nlet sourceryUtilsDependencies: [Target.Dependency] = [\"PathKit\"]\ntargets.append(.target(name: \"TryCatch\", path: \"TryCatch\", exclude: [\"Info.plist\"]))\n#else\nlet sourceryUtilsDependencies: [Target.Dependency] = [\n    \"PathKit\",\n    .product(name: \"Crypto\", package: \"swift-crypto\")\n]\n#endif\ntargets.append(\n    .target(\n        name: \"SourceryUtils\",\n        dependencies: sourceryUtilsDependencies,\n        path: \"SourceryUtils\",\n        exclude: [\n            \"Supporting Files/Info.plist\"\n        ]\n    )\n)\n\nvar dependencies: [Package.Dependency] = [\n    .package(url: \"https://github.com/jpsim/Yams.git\", from: \"5.0.3\"),\n    .package(url: \"https://github.com/kylef/Commander.git\", exact: \"0.9.1\"),\n    // PathKit needs to be exact to avoid a SwiftPM bug where dependency resolution takes a very long time.\n    .package(url: \"https://github.com/kylef/PathKit.git\", exact: \"1.0.1\"),\n    .package(url: \"https://github.com/art-divin/StencilSwiftKit.git\", exact: \"2.10.4\"),\n    .package(url: \"https://github.com/tuist/XcodeProj.git\", exact: \"8.24.6\"),\n    .package(url: \"https://github.com/swiftlang/swift-syntax.git\", from: \"600.0.0\"),\n    .package(url: \"https://github.com/Quick/Quick.git\", from: \"3.0.0\"),\n    .package(url: \"https://github.com/Quick/Nimble.git\", from: \"9.0.0\"),\n]\n\n#if compiler(>=6.2)\ndependencies.append(.package(url: \"https://github.com/swiftlang/swift-package-manager.git\", revision: \"swift-6.2-RELEASE\"))\n#else\ndependencies.append(.package(url: \"https://github.com/art-divin/swift-package-manager.git\", exact: \"1.0.8\"))\n#endif\n\n#if !canImport(ObjectiveC)\ndependencies.append(.package(url: \"https://github.com/apple/swift-crypto.git\", from: \"3.0.0\"))\n#endif\n\nlet package = Package(\n    name: \"Sourcery\",\n    platforms: [\n        .macOS(.v13),\n    ],\n    products: [\n        // SPM won't generate .swiftmodule for a target directly used by a product,\n        // hence it can't be imported by tests. Executable target can't be imported too.\n        .executable(name: \"sourcery\", targets: [\"SourceryExecutable\"]),\n        .library(name: \"SourceryRuntime\", targets: [\"SourceryRuntime\"]),\n        .library(name: \"SourceryStencil\", targets: [\"SourceryStencil\"]),\n        .library(name: \"SourceryJS\", targets: [\"SourceryJS\"]),\n        .library(name: \"SourcerySwift\", targets: [\"SourcerySwift\"]),\n        .library(name: \"SourceryFramework\", targets: [\"SourceryFramework\"]),\n        .library(name: \"SourceryLib\", targets: [\"SourceryLib\"]),\n        .plugin(name: \"SourceryCommandPlugin\", targets: [\"SourceryCommandPlugin\"])\n    ],\n    dependencies: dependencies,\n    targets: targets\n)\n"
  },
  {
    "path": "Plugins/SourceryCommandPlugin/SourceryCommandPlugin.swift",
    "content": "import PackagePlugin\nimport Foundation\n\n@main\nstruct SourceryCommandPlugin {\n    private func run(_ sourcery: String, withConfig configFilePath: String, cacheBasePath: String) throws {\n        let sourceryURL = URL(fileURLWithPath: sourcery)\n        \n        let process = Process()\n        process.executableURL = sourceryURL\n        process.arguments = [\n            \"--config\",\n            configFilePath,\n            \"--cacheBasePath\",\n            cacheBasePath\n        ]\n        \n        try process.run()\n        process.waitUntilExit()\n        \n        let gracefulExit = process.terminationReason == .exit && process.terminationStatus == 0\n        if !gracefulExit {\n            throw \"🛑 The plugin execution failed with reason: \\(process.terminationReason.rawValue) and status: \\(process.terminationStatus) \"\n        }\n    }\n}\n\n// MARK: - CommandPlugin\n\nextension SourceryCommandPlugin: CommandPlugin {\n    func performCommand(context: PluginContext, arguments: [String]) async throws {\n        // Run one per target\n        for target in context.package.targets {\n            let configFilePath = target.directory.appending(subpath: \".sourcery.yml\").string\n            let sourcery = try context.tool(named: \"SourceryExecutable\").path.string\n            \n            guard FileManager.default.fileExists(atPath: configFilePath) else {\n                Diagnostics.warning(\"⚠️ Could not find `.sourcery.yml` for target \\(target.name)\")\n                continue\n            }\n            \n            try run(sourcery, withConfig: configFilePath, cacheBasePath: context.pluginWorkDirectory.string)\n        }\n    }\n}\n\n// MARK: - XcodeProjectPlugin\n\n#if canImport(XcodeProjectPlugin)\nimport XcodeProjectPlugin\n\nextension SourceryCommandPlugin: XcodeCommandPlugin {\n    func performCommand(context: XcodePluginContext, arguments: [String]) throws {\n        for target in context.xcodeProject.targets {\n            guard let configFilePath = target\n                .inputFiles\n                .filter({ $0.path.lastComponent == \".sourcery.yml\" })\n                .first?\n                .path\n                .string else {\n                Diagnostics.warning(\"⚠️ Could not find `.sourcery.yml` in Xcode's input file list\")\n                return\n            }\n            let sourcery = try context.tool(named: \"SourceryExecutable\").path.string\n            \n            try run(sourcery, withConfig: configFilePath, cacheBasePath: context.pluginWorkDirectory.string)\n        }\n    }\n}\n#endif\n\nextension String: LocalizedError {\n    public var errorDescription: String? { return self }\n}\n"
  },
  {
    "path": "README.md",
    "content": "[![macOS 13](https://github.com/krzysztofzablocki/Sourcery/actions/workflows/test_macOS.yml/badge.svg)](https://github.com/krzysztofzablocki/Sourcery/actions/workflows/test_macOS.yml)\n[![ubuntu x86_64](https://github.com/krzysztofzablocki/Sourcery/actions/workflows/test_ubuntu.yml/badge.svg?branch=master)](https://github.com/krzysztofzablocki/Sourcery/actions/workflows/test_ubuntu.yml)\n<!-- [![codecov](https://codecov.io/gh/krzysztofzablocki/Sourcery/branch/master/graph/badge.svg)](https://codecov.io/gh/krzysztofzablocki/Sourcery) -->\n[![docs](https://krzysztofzablocki.github.io/Sourcery/badge.svg)](https://krzysztofzablocki.github.io/Sourcery/index.html)\n[![Version](https://img.shields.io/cocoapods/v/Sourcery.svg?style=flat)](http://cocoapods.org/pods/Sourcery)\n[![License](https://img.shields.io/cocoapods/l/Sourcery.svg?style=flat)](http://cocoapods.org/pods/Sourcery)\n[![Platform](https://img.shields.io/cocoapods/p/Sourcery.svg?style=flat)](http://cocoapods.org/pods/Sourcery)\n\n[**In-Depth Sourcery guide is covered as part of my SwiftyStack engineering course.**](https://www.swiftystack.com/)\n\n**Sourcery Pro provides a powerful Stencil editor and extends Xcode with the ability to handle live AST templates: [available on Mac App Store](https://apps.apple.com/us/app/sourcery-pro/id1561780836?mt=12)**\n\nhttps://user-images.githubusercontent.com/1468993/114271090-f6c19200-9a0f-11eb-9bd8-d7bb15129eb2.mp4\n\n[Learn more about Sourcery Pro](http://merowing.info/sourcery-pro/)\n\n<img src=\"Resources/icon-128.png\">\n\n**Sourcery** is a code generator for Swift language, built on top of Apple's own SwiftSyntax. It extends the language abstractions to allow you to generate boilerplate code automatically.\n\nIt's used in over 40,000 projects on both iOS and macOS and it powers some of the most popular and critically-acclaimed apps you have used (including Airbnb, Bumble, New York Times). Its massive community adoption was one of the factors that pushed Apple to implement derived Equality and automatic Codable conformance. Sourcery is maintained by a growing community of [contributors](https://github.com/krzysztofzablocki/Sourcery/graphs/contributors).\n\nTry **Sourcery** for your next project or add it to an existing one -- you'll save a lot of time and be happy you did!\n\n## TL;DR\nSourcery allows you to get rid of repetitive code and create better architecture and developer workflows. \nAn example might be implementing `Mocks` for all your protocols, without Sourcery you will need to write **hundreds lines of code per each protocol** like this:\n\n```swift\nclass MyProtocolMock: MyProtocol {\n\n    //MARK: - sayHelloWith\n    var sayHelloWithNameCallsCount = 0\n    var sayHelloWithNameCalled: Bool {\n        return sayHelloWithNameCallsCount > 0\n    }\n    var sayHelloWithNameReceivedName: String?\n    var sayHelloWithNameReceivedInvocations: [String] = []\n    var sayHelloWithNameClosure: ((String) -> Void)?\n\n    func sayHelloWith(name: String) {\n        sayHelloWithNameCallsCount += 1\n        sayHelloWithNameReceivedName = name\n        sayHelloWithNameReceivedInvocations.append(name)\n        sayHelloWithNameClosure?(name)\n    }\n\n}\n```\n\nand with Sourcery ?\n\n```swift\nextension MyProtocol: AutoMockable {}\n```\n\nSourcery removes the need to write any of the mocks code, how many protocols do you have in your project? Imagine how much time you'll save, using Sourcery will also make every single mock consistent and if you refactor or add properties, the mock code will be automatically updated for you, eliminating possible human errors. \n\nSourcery can be applied to arbitrary problems across your codebase, if you can describe an algorithm to another human, you can automate it using Sourcery.\n\nMost common uses are:\n\n- [Equality](https://krzysztofzablocki.github.io/Sourcery/equatable.html) & [Hashing](https://krzysztofzablocki.github.io/Sourcery/hashable.html)\n- [Enum cases & Counts](https://krzysztofzablocki.github.io/Sourcery/enum-cases.html)\n- [Lenses](https://krzysztofzablocki.github.io/Sourcery/lenses.html)\n- [Mocks & Stubs](https://krzysztofzablocki.github.io/Sourcery/mocks.html)\n- [LinuxMain](https://krzysztofzablocki.github.io/Sourcery/linuxmain.html)\n- [Decorators](https://krzysztofzablocki.github.io/Sourcery/decorator.html)\n- [Persistence and advanced Codable](https://krzysztofzablocki.github.io/Sourcery/codable.html)\n- [Property level diffing](https://krzysztofzablocki.github.io/Sourcery/diffable.html)\n\nBut how about more specific use-cases, like automatically generating all the UI for your app `BetaSetting`? [you can use Sourcery for that too](https://github.com/krzysztofzablocki/AutomaticSettings)\n\nOnce you start writing your own template and learn the power of Sourcery you won't be able to live without it.\n\n## How To Get Started\nThere are plenty of tutorials for different uses of Sourcery, and you can always ask for help in our [Swift Forum Category](https://forums.swift.org/c/related-projects/sourcery).\n\n- [The Magic of Sourcery](https://www.caseyliss.com/2017/3/31/the-magic-of-sourcery) is a great starting tutorial\n- [Generating Swift Code for iOS](https://www.raywenderlich.com/158803/sourcery-tutorial-generating-swift-code-ios) deals with JSON handling code\n- [How To Automate Swift Boilerplate with Sourcery](https://atomicrobot.io/blog/sourcery/) generates conversions to dictionaries\n- [Codable Enums](https://littlebitesofcocoa.com/318-codable-enums) implements Codable support for Enumerations\n- [Sourcery Workshops](https://github.com/krzysztofzablocki/SourceryWorkshops)\n\n### Quick Mocking Intro & Getting Started Video\n\nYou can also watch this quick getting started and intro to mocking video by Inside iOS Dev: \n<br />\n\n[![Watch the video](Resources/Inside-iOS-Dev-Sourcery-Intro-To-Mocking-Video-Thumbnail.png)](https://youtu.be/-ZbBNuttlt4?t=214)\n\n## Installation\n\n- _Binary form_\n\n    Download the latest release with the prebuilt binary from [release tab](https://github.com/krzysztofzablocki/Sourcery/releases/latest). Unzip the archive into the desired destination and run `bin/sourcery`\n    \n- _[Homebrew](https://brew.sh)_\n\n\t`brew install sourcery`\n\n- _[CocoaPods](https://cocoapods.org)_\n\n    Add `pod 'Sourcery'` to your `Podfile` and run `pod update Sourcery`. This will download the latest release binary and will put it in your project's CocoaPods path so you will run it with `$PODS_ROOT/Sourcery/bin/sourcery`\n\n    If you only want to install the `sourcery` binary, you may want to use the `CLI-Only` subspec: `pod 'Sourcery', :subspecs => ['CLI-Only']`.\n\n- _[Mint](https://github.com/yonaskolb/Mint)_\n\n    `mint run krzysztofzablocki/Sourcery`\n\n- _Building from Source_\n\n    Download the latest release source code from [the release tab](https://github.com/krzysztofzablocki/Sourcery/releases/latest) or clone the repository and build Sourcery manually.\n\n    - _Building with Swift Package Manager_\n\n        Run `swift build -c release` in the root folder and then copy `.build/release/sourcery` to your desired destination.\n\n        > Note: JS templates are not supported when building with SPM yet.\n\n    - _Building with Xcode_\n\n        Run `xcodebuild -scheme sourcery -destination generic/platform=macOS -archivePath sourcery.xcarchive archive` and export the binary from the archive.\n\n- _SPM (for plugin use only)_\nAdd the package dependency to your `Package.swift` manifest from version `1.8.3`.\n\n```\n.package(url: \"https://github.com/krzysztofzablocki/Sourcery.git\", from: \"1.8.3\")\n```\n\n- _[pre-commit](https://pre-commit.com/)_\nAdd the dependency to `.pre-commit-config.yaml`.\n\n```\n- repo: https://github.com/krzysztofzablocki/Sourcery\n  rev: 1.9.1\n  hooks:\n  - id: sourcery\n```\n\n## Documentation\n\nFull documentation for the latest release is available [here](https://krzysztofzablocki.github.io/Sourcery/).\n\n## Linux Support\n\nLinux support is [described on this page](LINUX.md).\n\n## Usage\n\n### Running the executable\n\nSourcery is a command line tool; you can either run it manually or in a custom build phase using the following command:\n\n```\n$ ./bin/sourcery --sources <sources path> --templates <templates path> --output <output path>\n```\n\n> Note: this command differs depending on how you installed Sourcery (see [Installation](#installation))\n\n### Swift Package command\n\nSourcery can now be used as a Swift package command plugin. In order to do this, the package must be added as a dependency to your Swift package or Xcode project (see [Installation](#installation) above).\n\nTo provide a configuration for the plugin to use, place a `.sourcery.yml` file at the root of the target's directory (in the sources folder rather than the root of the package).\n\n#### Running from the command line\n\nTo verify the plugin can be found by SwiftPM, use:\n\n```\n$ swift package plugin --list\n```\n\nTo run the code generator, you need to allow changes to the project with the `--allow-writing-to-package-directory` flag:\n\n```\n$ swift package --allow-writing-to-package-directory sourcery-command\n```\n\n#### Running in Xcode\n\nInside a project/package that uses this command plugin, right-click the project and select \"SourceryCommand\" from the \"SourceryPlugins\" menu group.\n\n> ⚠️ Note that this is only available from Xcode 14 onwards.\n\n### Command line options\n\n- `--sources` - Path to a source swift files or directories. You can provide multiple paths using multiple `--sources` option.\n- `--templates` - Path to templates. File or Directory. You can provide multiple paths using multiple `--templates` options.\n- `--force-parse` - File extensions of Sourcery generated file you want to parse. You can provide multiple extension using multiple `--force-parse` options. (i.e. `file.toparse.swift` will be parsed even if generated by Sourcery if `--force-parse toparse`). Useful when trying to implement a multiple phases generation. `--force-parse` can also be used to process within a sourcery annotation. For example to process code within `sourcery:inline:auto:Type.AutoCodable` annotation you can use `--force-parse AutoCodable`\n- `--output` [default: current path] - Path to output. File or Directory.\n- `--config` [default: current path] - Path to config file. File or Directory. See [Configuration file](#configuration-file).\n- `--args` - Additional arguments to pass to templates. Each argument can have an explicit value or will have implicit `true` value. Arguments should be separated with `,` without spaces (i.e. `--args arg1=value,arg2`). Arguments are accessible in templates via `argument.name`\n- `--watch` [default: false] - Watch both code and template folders for changes and regenerate automatically.\n- `--verbose` [default: false] - Turn on verbose logging\n- `--quiet` [default: false] - Turn off any logging, only emit errors\n- `--disableCache` [default: false] - Turn off caching of parsed data\n- `--prune` [default: false] - Prune empty generated files\n- `--version` - Display the current version of Sourcery\n- `--help` - Display help information\n- `--cacheBasePath` - Base path to the cache directory. Can be overriden by the config file.\n- `--buildPath` - Path to directory used when building from .swifttemplate files. This defaults to system temp directory\n- `--hideVersionHeader` [default: false] - Stop adding the Sourcery version to the generated files headers.\n- `--headerPrefix` - Additional prefix for headers.\n\n### Configuration file\n\nInstead of CLI arguments, you can use a `.sourcery.yml` configuration file:\n\n```yaml\nsources:\n  - <sources path>\n  - <sources path>\ntemplates:\n  - <templates path>\n  - <templates path>\nforceParse:\n  - <string value>\n  - <string value>\noutput:\n  <output path>\nargs:\n  <name>: <value>\n```\n\nRead more about this configuration file [here](https://krzysztofzablocki.github.io/Sourcery/usage.html#configuration-file).\n\n## Issues\nIf you get an unverified developer warning when using binary zip distribution try:\n`xattr -dr com.apple.quarantine Sourcery-1.1.1`\n\n## Contributing\n\nContributions to Sourcery are welcomed and encouraged!\n\nIt is easy to get involved. Please see the [Contributing guide](CONTRIBUTING.md) for more details.\n\n[A list of contributors is available through GitHub](https://github.com/krzysztofzablocki/Sourcery/graphs/contributors).\n\nTo clarify what is expected of our community, Sourcery has adopted the code of conduct defined by the Contributor Covenant. This document is used across many open source communities, and articulates my values well. For more, see the [Code of Conduct](CODE_OF_CONDUCT.md).\n\n## Sponsoring\n\nIf you'd like to support Sourcery development you can do so through [GitHub Sponsors](https://github.com/sponsors/krzysztofzablocki) or [Open Collective](https://opencollective.com/sourcery), it's highly appreciated 🙇‍\n\nIf you are a company and would like to sponsor the project directly and get it's logo here, you can [contact me directly](mailto:krzysztof.zablocki@pixle.pl?subject=[Sourcery-Sponsorship])\n\n### Sponsors \n\n[<img alt=\"Bumble Inc\" width=\"256px\" src=\"https://github.com/krzysztofzablocki/Sourcery/assets/1468993/159e0943-c890-42b7-9de7-9de9e70dd720\" />](https://team.bumble.com/teams/engineering)\n\n[<img alt=\"Airbnb Engineering\" width=\"128px\" src=\"https://github.com/krzysztofzablocki/Sourcery/assets/1468993/b1c06e1c-06da-4a77-a4f1-7dabd02bbaba\" />](https://airbnb.io/)\n\n## License\n\nSourcery is available under the MIT license. See [LICENSE](LICENSE) for more information.\n\n## Attributions\n\nThis tool is powered by\n\n- [Stencil](https://github.com/kylef/Stencil) and few other libs by [Kyle Fuller](https://github.com/kylef)\n\nThank you! to:\n\n- [Mariusz Ostrowski](http://twitter.com/faktory) for creating the logo.\n- [Artsy Eidolon](https://github.com/artsy/eidolon) team, because we use their codebase as a stub data for performance testing the parser.\n- [Olivier Halligon](https://github.com/AliSoftware) for showing me his setup scripts for CLI tools which are powering our rakefile.\n- [JP Simard](https://github.com/jpsim) for creating [SourceKitten](https://github.com/jpsim/SourceKitten) that originally powered Sourcery and was instrumental in making this project happen. \n\n## Other Libraries / Tools\n\nIf you want to generate code for asset related data like .xib, .storyboards etc. use [SwiftGen](https://github.com/AliSoftware/SwiftGen). SwiftGen and Sourcery are complementary tools.\n\nMake sure to check my other libraries and tools, especially:\n- [KZPlayground](https://github.com/krzysztofzablocki/KZPlayground) - Powerful playgrounds for Swift and Objective-C\n- [KZFileWatchers](https://github.com/krzysztofzablocki/KZFileWatchers) - Daemon for observing local and remote file changes, used for building other developer tools (Sourcery uses it)\n\nYou can [follow me on Twitter][1] for news/updates about other projects I am creating.\n\n [1]: http://twitter.com/merowing_\n"
  },
  {
    "path": "RELEASING.md",
    "content": "# Releasing Sourcery\n\n## Note\n\nSee https://github.com/krzysztofzablocki/Sourcery/issues/1247#issuecomment-1892571851 for the exact, step by step guide how to release a new version.\n\n# Releasing Sourcery (Deprecated)\n\nThere're no hard rules about when to release Sourcery. Release bug fixes frequently, features not so frequently and breaking API changes rarely.\n\nFollowing the [Semantic Versioning](http://semver.org/):\n*  Increment the third number if the release has bug fixes and/or very minor features with backward compatibility, only (eg. change `0.6.0` to `0.6.1`).\n*  Increment the second number if the release contains major features or breaking API changes (eg. change `0.6.1` to `0.7.0`).\n\nMake sure you've been added as owner for [CocoaPods Trunk](https://guides.cocoapods.org/making/getting-setup-with-trunk.html) and have push access to the [Sourcery](https://github.com/krzysztofzablocki/Sourcery) repository.\n\nTo create automatic GitHub releases, set up [API Token](https://github.com/settings/tokens/new). We recommend giving the token the smallest scope possible. This means just `public_repo`. After getting the token add the following ENV variables:\n\n```\nexport SOURCERY_GITHUB_USERNAME=YOUR_GITHUB_USERNAME\nexport SOURCERY_GITHUB_API_TOKEN=YOUR_TOKEN\n```\n\nTo be able to release a [Homebrew](https://github.com/Homebrew/homebrew-core) formula update, install [brew](https://brew.sh/).\n\n### Release\n\nExample is for releasing `0.6.1` version of the Sourcery.\n\nTo release a new version of the Sourcery please rake task and follow the commands.\n```\nrake release:new\n```\n\nIt will perform the following steps:\n1. Install Bundler and CocoaPods dependencies;\n2. Check if the docs are up-to-date or not;\n3. Check if the master branch is green on [CI](https://circleci.com/gh/krzysztofzablocki/Sourcery);\n4. Update internal boilerplate code;\n5. Run tests;\n6. Ask for the new release version and updates metadata for it;\n7. Create a new release on [GitHub](https://github.com/krzysztofzablocki/Sourcery/releases);\n8. Push new release to [CocoaPods Trunk](https://guides.cocoapods.org/making/getting-setup-with-trunk.html);\n9. Push new formula to [Homebrew](https://github.com/Homebrew/homebrew-core), this will ask you for manual input of your username and password to open a GitHub PR;\n10. Prepare a new development iteration.\n\nSome tasks require manual approvement or input, please pay attention to the automatic changes before confirming them.\n"
  },
  {
    "path": "Rakefile",
    "content": "#!/usr/bin/rake\n## Most of this code is adapted from Sourcery https://github.com/AliSoftware/Sourcery/blob/master/Rakefile\n\nrequire 'pathname'\nrequire 'yaml'\nrequire 'json'\nrequire 'net/http'\nrequire 'uri'\nrequire 'rbconfig'\n\nBUILD_DIR = 'build/'\nCLI_DIR = 'cli/'\nVERSION_FILE = 'SourceryUtils/Sources/Version.swift'\n\n## [ Utils ] ##################################################################\ndef version_select\n  latest_xcode_version = `xcode-select -p`.chomp\n  %Q(DEVELOPER_DIR=\"#{latest_xcode_version}\" TOOLCHAINS=com.apple.dt.toolchain.XcodeDefault.xctoolchain)\nend\n\ndef xcpretty(cmd)\n  if `which xcpretty` && $?.success?\n    sh \"set -o pipefail && #{cmd} | xcpretty -c\"\n  else\n    sh cmd\n  end\nend\n\ndef print_info(str)\n  (red,clr) = (`tput colors`.chomp.to_i >= 8) ? %W(\\e[33m \\e[m) : [\"\", \"\"]\n  puts red, \"== #{str.chomp} ==\", clr\nend\n\n## [ Bundler ] ####################################################\n\ndesc \"Install dependencies\"\ntask :install_dependencies do\n  sh %Q(bundle install)\nend\n\n## [ Tests & Clean ] ##########################################################\n\ndesc \"Run the Unit Tests on all projects\"\ntask :tests do\n  print_info \"Running Unit Tests\"\n  sh %Q(swift test)\nend\n\ndesc \"Delete the build/ directory\"\ntask :clean do\n  print_info \"Cleaning build folder\"\n  sh %Q(rm -fr build)\nend\n\ndef build_framework(fat_library)\n  print_info \"Building project (fat: #{fat_library})\"\n\n  # Prepare the export directory\n  sh %Q(rm -fr #{CLI_DIR})\n  sh %Q(mkdir -p \"#{CLI_DIR}bin\")\n  output_path=\"#{CLI_DIR}bin/sourcery\"\n\n  if fat_library\n    sh %Q(swift build --disable-sandbox -c release --arch arm64 --build-path #{BUILD_DIR})\n    sh %Q(swift build --disable-sandbox -c release --arch x86_64 --build-path #{BUILD_DIR})\n    sh %Q(lipo -create -output #{output_path} #{BUILD_DIR}arm64-apple-macosx/release/sourcery #{BUILD_DIR}x86_64-apple-macosx/release/sourcery)\n    sh %Q(strip -rSTX #{output_path})\n  else\n    sh %Q(swift build --disable-sandbox -c release --build-path #{BUILD_DIR})\n    sh %Q(cp #{BUILD_DIR}release/sourcery #{output_path})\n  end\n\n  # Export the build products and clean up\n  sh %Q(cp SourceryJS/Resources/ejs.js #{CLI_DIR}bin)\n  sh %Q(rm -fr #{BUILD_DIR})\nend\n\ntask :build do\n  build_framework(false)\nend\n\ntask :fat_build do\n  build_framework(true)\nend\n\n## [ Code Generated ] ################################################\n\ntask :run_sourcery do\n  print_info \"Generating internal boilerplate code\"\n  sh \"#{CLI_DIR}bin/sourcery --config .sourcery-macOS.yml\"\n  sh \"#{CLI_DIR}bin/sourcery --config .sourcery-ubuntu.yml\"\nend\n\ndesc \"Update internal boilerplate code\"\ntask :generate_internal_boilerplate_code => [:build, :run_sourcery] do\n  sh \"Scripts/package_content \\\"SourceryRuntime/Sources/Common,SourceryRuntime/Sources/macOS,SourceryRuntime/Sources/Generated\\\" \\\"true\\\" > \\\"SourcerySwift/Sources/SourceryRuntime.content.generated.swift\\\"\"\n  sh \"Scripts/package_content \\\"SourceryRuntime/Sources/Common,SourceryRuntime/Sources/Linux,SourceryRuntime/Sources/Generated\\\" \\\"false\\\" > \\\"SourcerySwift/Sources/SourceryRuntime_Linux.content.generated.swift\\\"\"\n  generated_files = `git status --porcelain`\n                      .split(\"\\n\")\n                      .select { |item| item.include?('.generated.') }\n                      .map { |item| item.split.last }\n  manual_commit(generated_files, \"update internal boilerplate code.\")\nend\n\n## [ Docs ] ##########################################################\ndef clean_jazzy\n  # jazzy divs are broken, so we need to fix them\n  sh \"find docs -type f -name '*.html' -print0 | xargs -0 -I % sh -c \\\"tac '%' | sed '2d' | tac > tmp && mv tmp '%';\\\"\"\nend\n\ndesc \"Update docs\"\ntask :docs do\n  print_info \"Updating docs\"\n  temp_build_dir = \"#{BUILD_DIR}tmp/\"\n  # tac Enum.html | sed '2d' | tac > Enum.html\n  sh \"bundle exec sourcekitten doc --spm --module-name SourceryRuntime > docs.json && bundle exec jazzy --clean --skip-undocumented && rm docs.json\"\n  clean_jazzy\n  sh \"rm -fr #{temp_build_dir}\"\nend\n\ndesc \"Validate docs\"\ntask :validate_docs do\n  print_info \"Checking docs are up to date\"\n  temp_build_dir = \"#{BUILD_DIR}tmp/\"\n  ## TODO: RA this step is disabled due to error comming only on CI and only sometimes locally:\n  ## [1/1] Compiling plugin SourceryCommandPlugin\n  ## Building for debugging...\n  ## error: command /Users/art-divin/Documents/Projects/Sourcery/.build/arm64-apple-macosx/debug/Sourcery_SourceryJS.bundle/ejs.js not registered\n  ## [1/12] Copying ejs.js\n  ## [1/12] Compiling scanner.c\n  ## ...\n  #sh \"bundle exec sourcekitten doc --spm --module-name SourceryRuntime -- --very-verbose > docs.json && bundle exec jazzy --skip-undocumented && rm docs.json\"\n  ## clean_jazzy\n  sh \"rm -fr #{temp_build_dir}\"\nend\n\n## [ Release ] ##########################################################\n\nnamespace :release do\n\n  desc 'Perform pre-release tasks'\n  task :prepare => [:clean, :install_dependencies, :check_environment_variables, :check_docs, :update_metadata, :generate_internal_boilerplate_code, :tests]\n\n  desc 'Build the current version and release it to GitHub, CocoaPods'\n  task :build_and_deploy => [:check_versions, :fat_build, :tag_release, :push_to_origin, :github, :cocoapods]\n\n  desc 'Create a new release on GitHub, CocoaPods'\n  task :new => [:prepare, :build_and_deploy]\n\n  def podspec_update_version(version, file = 'Sourcery.podspec')\n    # The code is mainly taken from https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/helper/podspec_helper.rb\n    podspec_content = File.read(file)\n    version_var_name = 'version'\n    version_regex = /^(?<begin>[^#]*version\\s*=\\s*['\"])(?<value>(?<major>[0-9]+)(\\.(?<minor>[0-9]+))?(\\.(?<patch>[0-9]+))?)(?<end>['\"])/i\n    version_match = version_regex.match(podspec_content)\n    updated_podspec_content = podspec_content.gsub(version_regex, \"#{version_match[:begin]}#{version}#{version_match[:end]}\")\n    File.open(file, \"w\") { |f| f.puts updated_podspec_content }\n  end\n\n  def podspec_version(file = 'Sourcery')\n    JSON.parse(`bundle exec pod ipc spec #{file}.podspec`)[\"version\"]\n  end\n\n  VERSION_REGEX = /(?<begin>public static let current\\s*=\\s*SourceryVersion\\(value:\\s*.*\")(?<value>(?<major>[0-9]+)(\\.(?<minor>[0-9]+))?(\\.(?<patch>[0-9]+))?)(?<end>\"\\))/i.freeze\n\n  def command_line_tool_update_version(version, file = VERSION_FILE)\n    version_content = File.read(file)\n    version_match = VERSION_REGEX.match(version_content)\n    updated_version_content = version_content.gsub(VERSION_REGEX, \"#{version_match[:begin]}#{version}#{version_match[:end]}\")\n    File.open(file, \"w\") { |f| f.puts updated_version_content }\n  end\n\n  def command_line_tool_version(file = VERSION_FILE)\n    version_content = File.read(file)\n    version_match = VERSION_REGEX.match(version_content)\n    version_match[:value]\n  end\n\n  def log_result(result, label, error_msg)\n    if result\n      puts \"#{label.ljust(25)} \\u{2705}\"\n    else\n      puts \"#{label.ljust(25)} \\u{274C}  - #{error_msg}\"\n    end\n    result\n  end\n\n  def get(url, content_type = 'application/json')\n    uri = URI.parse(url)\n    req = Net::HTTP::Get.new(uri, initheader = {'Content-Type' => content_type})\n    yield req if block_given?\n\n    response = Net::HTTP.start(uri.host, uri.port, :use_ssl => (uri.scheme == 'https')) do |http|\n      http.request(req)\n    end\n    unless response.code == '200'\n      puts \"Error: #{response.code} - #{response.message}\"\n      puts response.body\n      exit 3\n    end\n    JSON.parse(response.body)\n  end\n\n  def post(url, content_type = 'application/json')\n    uri = URI.parse(url)\n    req = Net::HTTP::Post.new(uri, initheader = {'Content-Type' => content_type})\n    yield req if block_given?\n\n    response = Net::HTTP.start(uri.host, uri.port, :use_ssl => (uri.scheme == 'https')) do |http|\n      http.request(req)\n    end\n    unless response.code == '201' || response.code == '202'\n      puts \"Error: #{response.code} - #{response.message}\"\n      puts response.body\n      exit 3\n    end\n    JSON.parse(response.body)\n  end\n\n  def manual_commit(files, message)\n    print_info \"Preparing commit\"\n    system(%Q{git --no-pager diff #{files.join(\" \")}})\n    print \"Now review the above diff. Do you wish to commit the changes? [Y/n] \"\n    commit_changes = STDIN.gets.chomp == 'Y'\n    if commit_changes then\n      system(%Q{git add #{files.join(\" \")}})\n      system(%Q{git commit -m '#{message}'})\n    else\n      puts \"Aborting commit, checkout pending changes\"\n      system(%Q{git checkout #{files.join(\" \")}})\n      exit 2\n    end\n  end\n\n  def git_tag(tag)\n    system(%Q{git tag #{tag}})\n  end\n\n  def git_push(remote = 'origin', branch = 'master')\n    system(%Q{git push #{remote} #{branch} --tags})\n  end\n\n  def sourcery_targz_url(version)\n    \"https://github.com/krzysztofzablocki/Sourcery/archive/#{version}.tar.gz\"\n  end\n\n  def extract_sha256(archive_url)\n    sha256_res = `curl -L #{archive_url} | shasum -a 256`\n    sha256 = /^[A-Fa-f0-9]+/.match(sha256_res)\n    if sha256.nil? then\n      print \"Unable to extract SHA256\"\n      exit 3\n    end\n    sha256\n  end\n\n  desc 'Check ENV variables required for release'\n  task :check_environment_variables do\n    print_info \"Checking ENV variables\"\n    results = []\n\n    results << log_result(!ENV['SOURCERY_GITHUB_USERNAME'].nil?, \"SOURCERY_GITHUB_USERNAME is set up\", \"Please add SOURCERY_GITHUB_USERNAME environment variable\")\n    results << log_result(!ENV['SOURCERY_GITHUB_API_TOKEN'].nil?, \"SOURCERY_GITHUB_API_TOKEN is set up\", \"Please add SOURCERY_GITHUB_API_TOKEN environment variable\")\n\n    exit 1 unless results.all?\n  end\n\n  desc 'Check if CI is green'\n  task :check_ci do\n    print_info \"Checking Circle CI master branch status\"\n    results = []\n\n    json = get('https://circleci.com/api/v1.1/project/github/krzysztofzablocki/Sourcery/tree/master')\n    master_branch_status = json[0]['status']\n    results << log_result(master_branch_status == 'success' || master_branch_status == 'fixed', 'Master branch is green on CI', 'Please check master branch CI status first')\n    exit 1 unless results.all?\n  end\n\n  desc 'Check if docs are up to date'\n  task :check_docs => [:validate_docs] do\n    results = []\n\n    docs_not_changed = `git diff --name-only docs` == \"\"\n    results << log_result(docs_not_changed, 'Docs are up to date', 'Please push updated docs first')\n    exit 1 unless results.all?\n  end\n\n  desc 'Check if all versions from the podspecs, CHANGELOG and build settings match'\n  task :check_versions do\n    print_info \"Checking versions match\"\n    results = []\n\n    # Check if bundler is installed first, as we'll need it for the cocoapods task (and we prefer to fail early)\n    `which bundle`\n    results << log_result( $?.success?, 'Bundler installed', 'Please install bundler using `gem install bundler` and run `bundle install` first.')\n\n    # Extract version from Sourcery.podspec\n    version = podspec_version\n    puts \"#{'Sourcery.podspec'.ljust(25)} \\u{1F449}  #{version}\"\n\n    # Check if entry present in CHANGELOG\n    changelog_entry = system(%Q{grep -q '^## #{Regexp.quote(version)}$' CHANGELOG.md})\n    results << log_result(changelog_entry, \"CHANGELOG, Entry added\", \"Please add an entry for #{version} in CHANGELOG.md\")\n\n    changelog_master = system(%q{grep -qi '^## Master' CHANGELOG.md})\n    results << log_result(!changelog_master, \"CHANGELOG, No master\", 'Please remove entry for master in CHANGELOG')\n\n    # Check if Command Line Tool version match podspec version\n    results << log_result(version == command_line_tool_version, \"Command line tool version correct\", \"Please update current version in #{VERSION_FILE} to #{version}\")\n\n    exit 1 unless results.all?\n\n    print \"Release version #{version} [Y/n]? \"\n    exit 2 unless (STDIN.gets.chomp == 'Y')\n  end\n\n  desc 'Updates metadata for the new release'\n  task :update_metadata do\n    print \"New version of Sourcery in sematic format major.minor.patch? \"\n    new_version = STDIN.gets.chomp\n    unless new_version =~ /^\\d+\\.\\d+\\.\\d+$/ then\n      print \"Please set version following the semantic format http://semver.org/\\n\"\n      exit 3\n    end\n\n    print_info \"Updating metadata for #{new_version} release\\n\"\n\n    # Replace master with the new release version in CHANGELOG.md\n    system(%Q{sed -i '' -e 's/## Master/## #{new_version}/' CHANGELOG.md})\n\n    # Update podspec version\n    podspec_update_version(new_version, 'Sourcery.podspec')\n    podspec_update_version(new_version, 'SourceryFramework.podspec')\n    podspec_update_version(new_version, 'SourceryRuntime.podspec')\n    podspec_update_version(new_version, 'SourceryUtils.podspec')\n\n    # Update command line tool version\n    command_line_tool_update_version(new_version)\n\n    manual_commit([\"CHANGELOG.md\", \"Sourcery.podspec\", \"SourceryFramework.podspec\", \"SourceryRuntime.podspec\", \"SourceryUtils.podspec\", VERSION_FILE], \"docs: update metadata for #{new_version} release\")\n  end\n\n  desc 'Create a tag for the project version and push to remote'\n  task :tag_release do\n    print_info \"Tagging the release\"\n    git_tag(podspec_version)\n  end\n\n\n  desc 'Create a zip containing all the prebuilt binaries'\n  task :zip => [:clean] do\n    print_info \"Creating zip\"\n\n    sh %Q(mkdir -p \"build\")\n    sh %Q(mkdir -p \"build/sourcery\")\n    sh %Q(mkdir -p \"build/sourcery/Resources\")\n    sh %Q(cp -r #{CLI_DIR} build/sourcery/)\n    sh %Q(cp -r Templates/Templates build/sourcery/)\n    sh %Q(cp -r docs/docsets/Sourcery.docset build/sourcery/)\n    `cp LICENSE README.md CHANGELOG.md build/sourcery`\n    `cp Resources/daemon.gif Resources/icon-128.png build/sourcery/Resources`\n    `cd build/sourcery; zip -r -X ../sourcery-#{podspec_version}.zip .`\n  end\n\n  desc 'Create a zip containing all the prebuilt binaries in the artifact bundle format (for SwiftPM Package Plugins)'\n  task :artifactbundle => :zip do\n    bundle_dir = 'build/sourcery.artifactbundle'\n    bin_dir = \"#{bundle_dir}/sourcery/bin\"\n\n    # Copy the built product to an artifact bundle\n    `mkdir -p #{bin_dir}`\n    `cp -Rf build/sourcery #{bin_dir}`\n\n    # Write the `info.json` artifact bundle manifest\n    info_template = File.read(\"Templates/artifactbundle.info.json.template\")\n    info_file_content = info_template.gsub(/(VERSION)/, podspec_version)\n\n    File.open(\"#{bundle_dir}/info.json\", \"w\") do |f|\n      f.write(info_file_content)\n    end\n\n    # Zip the bundle\n    `cd build; zip -r -X sourcery-#{podspec_version}.artifactbundle.zip sourcery.artifactbundle/`\n  end\n\n  def upload_zip(filename)\n    upload_url = json['upload_url'].gsub(/\\{.*\\}/, \"?name=#{filename}\")\n    zipfile = \"build/#{filename}\"\n    zipsize = File.size(zipfile)\n\n    print_info \"Uploading ZIP (#{zipsize} bytes)\"\n    post(upload_url, 'application/zip') do |req|\n      req.body_stream = File.open(zipfile, 'rb')\n      req.add_field('Content-Length', zipsize)\n      req.add_field('Content-Transfer-Encoding', 'binary')\n      req.basic_auth ENV['SOURCERY_GITHUB_USERNAME'], ENV['SOURCERY_GITHUB_API_TOKEN'].chomp\n    end\n  end\n\n  desc 'Upload the zipped binaries to a new GitHub release'\n  task :github => :artifactbundle do\n    v = podspec_version\n\n    changelog = `sed -n /'^## #{v}$'/,/'^## '/p CHANGELOG.md`.gsub(/^## .*$/,'').strip\n    print_info \"Releasing version #{v} on GitHub\"\n    puts changelog\n\n    json = post('https://api.github.com/repos/krzysztofzablocki/Sourcery/releases', 'application/json') do |req|\n      req.body = { :tag_name => v, :name => v, :body => changelog, :draft => false, :prerelease => false }.to_json\n      req.basic_auth ENV['SOURCERY_GITHUB_USERNAME'], ENV['SOURCERY_GITHUB_API_TOKEN'].chomp\n    end\n\n    upload_zip(\"Sourcery-#{v}.zip\")\n    upload_zip(\"Sourcery-#{v}.artifactbundle.zip\")\n  end\n\n  desc 'pod trunk push Sourcery to CocoaPods'\n  task :cocoapods do\n    print_info \"Pushing pod to CocoaPods Trunk\"\n    sh 'bundle exec pod trunk push Sourcery.podspec --allow-warnings --verbose --skip-tests'\n  end\n\n  desc 'Push the pending master changes to origin'\n  task :push_to_origin do\n    git_push\n  end\n\n  desc 'prepare for the new development iteration'\n  task :prepare_next_development_iteration do\n    print_info \"Preparing for the next development iteration\"\n    `sed -i '' -e '3 a \\\\\n     ## Master\\\\\n     \\\\\n     \\\\\n     ' CHANGELOG.md`\n\n     manual_commit([\"CHANGELOG.md\"], \"docs: preparing for next development iteration.\")\n  end\nend\n"
  },
  {
    "path": "Scripts/SwiftLint.sh",
    "content": "#!/bin/zsh\n\nif which swiftlint >/dev/null; then\n    swiftlint autocorrect\n    swiftlint\nelse\n    echo \"warning: SwiftLint not installed. Install using brew update && brew install swiftlint or download from https://github.com/realm/SwiftLint.\"\nfi\n"
  },
  {
    "path": "Scripts/bootstrap",
    "content": "#!/usr/bin/env bash\n# Usage: scripts/bootstrap\n# Prepares git and pods integration by providing pre-commit hook and isolated CocoaPods environment via Bundler\n\nset -eu\n\nif [ -h .git/hooks/pre-commit ]; then\n    rm .git/hooks/pre-commit\nfi\n\nif [ -f .git/hooks/pre-commit ]; then\n    echo \"A git pre-commit hook already exists. Please remove it and re-run this script.\"\nfi\n\nln -s ../../scripts/pre-commit.sh .git/hooks/pre-commit\n\nbundle install --path Vendor/bundle\n\nbundle exec pod install\n"
  },
  {
    "path": "Scripts/package_content",
    "content": "#!/usr/bin/env swift\n/// Usage: $0 FOLDER\n/// Description:\n///   Merge all Swift files contained in FOLDER into swift code that can be used by the FolderSynchronizer.\n/// Example: $0 Sources/SourceryRuntime > file.swift\n/// Options:\n///   FOLDERS: the paths where the Swift files to merge are, separated with comma \",\"\n///   isForDarwinPlatform: if true, the generated code will be compilable on Darwin platforms\n///   -h: Display this help message\nimport Foundation\n\nfunc printUsage() {\n    guard let scriptPath = CommandLine.arguments.first else {\n        fatalError(\"Could not find script path in arguments (\\(CommandLine.arguments))\")\n    }\n    guard let lines = (try? String(contentsOfFile: scriptPath, encoding: .utf8))?\n            .components(separatedBy: .newlines) else {\n        fatalError(\"Could not read the script at path \\(scriptPath)\")\n    }\n    let documentationPrefix = \"/// \"\n    lines\n      .filter { $0.hasPrefix(documentationPrefix) }\n      .map { $0.dropFirst(documentationPrefix.count) }\n      .map { $0.replacingOccurrences(of: \"$0\", with: scriptPath) }\n      .forEach { print(\"\\($0)\") }\n}\n\nextension String {\n    func escapedSwiftTokens() -> String {\n        // return self\n        let replacements = [\n          \"\\\\(\": \"\\\\\\\\(\",\n          \"\\\\\\\"\": \"\\\\\\\\\\\"\",\n          \"\\\\n\": \"\\\\\\\\n\",\n        ]\n        var escapedString = self\n        replacements.forEach {\n            escapedString = escapedString.replacingOccurrences(of: $0, with: $1)\n        }\n        return escapedString\n    }\n}\n\nfunc package(folders folderPaths: [String], isForDarwinPlatform: Bool) throws {\n    if !isForDarwinPlatform {\n        print(\"#if !canImport(ObjectiveC)\")\n    } else {\n        print(\"#if canImport(ObjectiveC)\")\n    }\n    print(\"let sourceryRuntimeFiles: [FolderSynchronizer.File] = [\")\n    for folderPath in folderPaths {\n        let folderURL = URL(fileURLWithPath: folderPath)\n\n        guard let enumerator = FileManager.default.enumerator(at: folderURL, includingPropertiesForKeys: [.isRegularFileKey], options: [.skipsHiddenFiles, .skipsPackageDescendants]) else {\n            print(\"Unable to retrieve file enumerator\")\n            exit(1)\n        }\n        var files = [URL]()\n        for case let fileURL as URL in enumerator {\n            do {\n                let fileAttributes = try fileURL.resourceValues(forKeys:[.isRegularFileKey])\n                if fileAttributes.isRegularFile! {\n                    files.append(fileURL)\n                }\n            } catch { \n                print(error, fileURL) \n            }\n        }\n        \n        try files\n        .sorted(by: { $0.lastPathComponent < $1.lastPathComponent })\n        .forEach { sourceFileURL in\n            print(\"    .init(name: \\\"\\(sourceFileURL.lastPathComponent)\\\", content:\")\n            print(\"\\\"\\\"\\\"\")\n            let content = try String(contentsOf: sourceFileURL, encoding: .utf8)\n                .escapedSwiftTokens()\n            print(content)\n            print(\"\\\"\\\"\\\"),\")\n        }\n    }\n    print(\"]\")\n    print(\"#endif\")\n}\n\nfunc main() {\n    if CommandLine.arguments.contains(\"-h\") {\n        printUsage()\n        exit(0)\n    }\n    guard CommandLine.arguments.count > 1 else {\n        print(\"Missing folderPath argument\")\n        exit(1)\n    }\n    guard CommandLine.arguments.count > 2 else {\n        print(\"Missing isForDarwinPlatform argument\")\n        exit(1)\n    }\n    let foldersPaths = CommandLine.arguments[1]\n    let isForDarwinPlatform = Bool(CommandLine.arguments[2]) ?? false\n    let folders = foldersPaths.split(separator: \",\").map(String.init)\n\n    do {\n        try package(folders: folders, isForDarwinPlatform: isForDarwinPlatform)\n    } catch {\n        print(\"Failed with error: \\(error)\")\n        exit(1)\n    }\n}\n\nmain()\n"
  },
  {
    "path": "Scripts/pre-commit.sh",
    "content": "#!/usr/bin/env bash\nset -eu\n\nfailed=0\n\ntest_pattern='\\b(fdescribe|fit|fcontext|xdescribe|xit|xcontext)\\b'\nif git diff-index -p -M --cached HEAD -- '*Tests.swift' '*Specs.swift' | grep '^+' | egrep \"$test_pattern\" >/dev/null 2>&1\nthen\n  echo \"COMMIT REJECTED for fdescribe/fit/fcontext/xdescribe/xit/xcontext.\" >&2\n  echo \"Remove focused and disabled tests before committing.\" >&2\n  echo '----' >&2\n  git grep --cached -E \"$test_pattern\" '*Tests.swift' '*Specs.swift'  >&2\n  echo '----' >&2\n  failed=1\nfi\n\nmisplaced_pattern='misplaced=\"YES\"'\n\nif git diff-index -p -M --cached HEAD -- '*.xib' '*.storyboard' | grep '^+' | egrep \"$misplaced_pattern\" >/dev/null 2>&1\nthen\n  echo \"COMMIT REJECTED for misplaced views. Correct them before committing.\" >&2\n  echo '----' >&2\n  git grep --cached -E \"$misplaced_pattern\" '*.xib' '*.storyboard' >&2\n  echo '----' >&2\n  failed=1\nfi\n\nexit $failed\n"
  },
  {
    "path": "Scripts/update-placeholders",
    "content": "#!/usr/bin/swift\n//\n//  main.swift\n//  UpdateAutogenerated\n//\n//  Created by Krunoslav Zaher on 1/6/17.\n//  Copyright © 2017 Krunoslav Zaher. All rights reserved.\n//\n\nimport Foundation\n\nif CommandLine.argc < 2 {\n    print(\"find Sourcery -name \\\"*.swift\\\" | xargs ./Scripts/update-placeholders ./Sourcery/CodeGenerated/Coding.Generated.swift\")\n    exit(-1)\n}\n\nlet finalVersions = CommandLine.arguments[1]\nlet targetFiles = CommandLine.arguments.dropFirst(2)\n\nfunc escape(_ text: String) -> String {\n    return NSRegularExpression.escapedPattern(for: text)\n}\n\nextension NSString {\n    var entireRange: NSRange {\n        return NSRange(location: 0, length: self.length)\n    }\n}\n\nfunc placeholderRegex(name: String) -> NSRegularExpression {\n    let startPattern = \"\\(escape(\"//\"))\\\\s+(\\(name))\\\\s+\\(escape(\"{\"))\"\n    let endPattern = \"\\(escape(\"//\"))\\\\s+\\(escape(\"}\"))\\\\s+(\\(name))\"\n    let ignoreMiddle = \"(?:(?!\\(endPattern)).)*\"\n    return try! NSRegularExpression(pattern:\n        startPattern +\n        ignoreMiddle +\n        endPattern, options: [.allowCommentsAndWhitespace, .dotMatchesLineSeparators])\n}\n\nfunc placeholderNames(content: String) -> [String] {\n    let regex = placeholderRegex(name: \"\\\\S+\")\n\n    // if this cast doesn't exist, it will crash, Swift :(\n    let nsContent = content as NSString\n    return regex.matches(in: nsContent as String,\n                         options: [],\n                         range: nsContent.entireRange).map { match in\n                            return (content as NSString).substring(with: match.rangeAt(1))\n    }\n}\n\nextension String {\n    func getPlaceholderValue(name: String) -> String? {\n        let regex = placeholderRegex(name: escape(name))\n\n        let range = regex.matches(in: self, options: [], range: self.entireRange).first!\n        return (self as NSString).substring(with: range.rangeAt(0))\n    }\n\n    func setPlaceholder(name: String, value: String) -> String {\n        let regex = placeholderRegex(name: escape(name))\n        let first = regex.matches(in: self, options: [], range: self.entireRange).first!\n        return (self as NSString).replacingCharacters(in: first.rangeAt(0), with: value)\n    }\n}\n\nlet content = try! String(contentsOfFile: finalVersions)\n\nvar placeholders: [String: String] = [:]\nfor name in placeholderNames(content: content) {\n    placeholders[name] = content.getPlaceholderValue(name: name)\n}\n\nvar replacedPlaceholders = Set<String>()\nfor filePath in targetFiles {\n    let targetFile = try! String(contentsOfFile: filePath)\n\n    if targetFile.hasPrefix(\"// Generated using Sourcery\") {\n        continue\n    }\n\n    let finalFile = placeholderNames(content: targetFile).reduce(targetFile){ (content, name) -> String in\n        replacedPlaceholders.insert(name)\n        guard let value = placeholders[name] else {\n            fatalError(\"\\(filePath): \\(name) placeholder not found\")\n        }\n        return content.setPlaceholder(name: name, value: value)\n    }\n\n    try! finalFile.write(toFile: filePath, atomically: true, encoding: .utf8)\n}\n\nlet notReplaced = Set(placeholders.keys).subtracting(replacedPlaceholders)\n\nif !notReplaced.isEmpty {\n    print(\"We've not been able to find files to update \\(notReplaced)\")\n    exit(-1)\n}\n"
  },
  {
    "path": "Sourcery/Configuration.swift",
    "content": "import Foundation\nimport XcodeProj\nimport PathKit\nimport Yams\nimport SourceryRuntime\nimport Basics\nimport TSCBasic\nimport Workspace\nimport PackageModel\nimport SourceryFramework\nimport SourceryUtils\n\npublic struct Project {\n    public let file: XcodeProj\n    public let root: Path\n    public let targets: [Target]\n    public let exclude: [Path]\n\n    public struct Target {\n\n        public struct XCFramework {\n\n            public let path: Path\n            public let swiftInterfacePath: Path\n            public let module: String\n\n            public init(rawPath: String, relativePath: Path) throws {\n                let frameworkRelativePath = Path(rawPath, relativeTo: relativePath)\n                guard let framework = frameworkRelativePath.components.last else {\n                    throw Configuration.Error.invalidXCFramework(message: \"Framework path invalid. Expected String.\")\n                }\n                let `extension` = Path(framework).`extension`\n                guard `extension` == \"xcframework\" else {\n                    throw Configuration.Error.invalidXCFramework(message: \"Framework path invalid. Expected path to xcframework file.\")\n                }\n                let moduleName = Path(framework).lastComponentWithoutExtension\n                guard\n                    let simulatorSlicePath = frameworkRelativePath.glob(\"*\")\n                        .first(where: { $0.lastComponent.contains(\"simulator\") })\n                else {\n                    throw Configuration.Error.invalidXCFramework(path: frameworkRelativePath, message: \"Framework path invalid. Expected to find simulator slice.\")\n                }\n                let modulePath = simulatorSlicePath + Path(\"\\(moduleName).framework/Modules/\\(moduleName).swiftmodule/\")\n                guard let interfacePath = modulePath.glob(\"*.swiftinterface\").first(where: { $0.lastComponent.contains(\"simulator\") })\n                else {\n                    throw Configuration.Error.invalidXCFramework(path: frameworkRelativePath, message: \"Framework path invalid. Expected to find .swiftinterface.\")\n                }\n                self.path = frameworkRelativePath\n                self.swiftInterfacePath = interfacePath\n                self.module = moduleName\n            }\n        }\n\n        public let name: String\n        public let module: String\n        public let xcframeworks: [XCFramework]\n\n        public init(dict: [String: Any], relativePath: Path) throws {\n            guard let name = dict[\"name\"] as? String else {\n                throw Configuration.Error.invalidSources(message: \"Target name is not provided. Expected string.\")\n            }\n            self.name = name\n            self.module = (dict[\"module\"] as? String) ?? name\n            do {\n                self.xcframeworks = try (dict[\"xcframeworks\"] as? [String])?\n                    .map { try XCFramework(rawPath: $0, relativePath: relativePath) } ?? []\n            } catch let error as Configuration.Error {\n                Log.warning(error.description)\n                self.xcframeworks = []\n            }\n        }\n    }\n\n    public init(dict: [String: Any], relativePath: Path) throws {\n        guard let file = dict[\"file\"] as? String else {\n            throw Configuration.Error.invalidSources(message: \"Project file path is not provided. Expected string.\")\n        }\n\n        let targetsArray: [Target]\n        if let targets = dict[\"target\"] as? [[String: Any]] {\n            targetsArray = try targets.map({ try Target(dict: $0, relativePath: relativePath) })\n        } else if let target = dict[\"target\"] as? [String: Any] {\n            targetsArray = try [Target(dict: target, relativePath: relativePath)]\n        } else {\n            throw Configuration.Error.invalidSources(message: \"'target' key is missing. Expected object or array of objects.\")\n        }\n        guard !targetsArray.isEmpty else {\n            throw Configuration.Error.invalidSources(message: \"No targets provided.\")\n        }\n        self.targets = targetsArray\n\n        let exclude = (dict[\"exclude\"] as? [String])?.map({ Path($0, relativeTo: relativePath) }) ?? []\n        self.exclude = exclude.flatMap { $0.allPaths }\n\n        let path = Path(file, relativeTo: relativePath)\n        self.file = try XcodeProj(path: path)\n        self.root = path.parent()\n    }\n\n}\n\npublic struct Paths {\n    public let include: [Path]\n    public let exclude: [Path]\n    public let allPaths: [Path]\n\n    public var isEmpty: Bool {\n        return allPaths.isEmpty\n    }\n\n    public init(dict: Any, relativePath: Path) throws {\n        if let sources = dict as? [String: [String]],\n            let include = sources[\"include\"]?.map({ Path($0, relativeTo: relativePath) }) {\n\n            let exclude = sources[\"exclude\"]?.map({ Path($0, relativeTo: relativePath) }) ?? []\n            self.init(include: include, exclude: exclude)\n        } else if let sources = dict as? [String] {\n\n            let sources = sources.map({ Path($0, relativeTo: relativePath) })\n            guard !sources.isEmpty else {\n                throw Configuration.Error.invalidPaths(message: \"No paths provided.\")\n            }\n            self.init(include: sources)\n        } else {\n            throw Configuration.Error.invalidPaths(message: \"No paths provided. Expected list of strings or object with 'include' and optional 'exclude' keys.\")\n        }\n    }\n\n    public init(include: [Path], exclude: [Path] = []) {\n        self.include = include\n        self.exclude = exclude\n\n        let include = self.include.parallelFlatMap { $0.processablePaths }\n        let exclude = self.exclude.parallelFlatMap { $0.processablePaths }\n\n        self.allPaths = Array(Set(include).subtracting(Set(exclude))).sorted()\n    }\n\n}\n\nextension Path {\n    public var processablePaths: [Path] {\n        if isDirectory {\n            return (try? recursiveUnhiddenChildren()) ?? []\n        } else {\n            return [self]\n        }\n    }\n\n    public func recursiveUnhiddenChildren() throws -> [Path] {\n        FileManager.default.enumerator(at: url, includingPropertiesForKeys: [.pathKey], options: [.skipsHiddenFiles, .skipsPackageDescendants], errorHandler: nil)?.compactMap { object in\n            if let url = object as? URL {\n                return self + Path(url.path)\n            }\n            return nil\n        } ?? []\n    }\n}\n\npublic struct Package {\n    public let root: Path\n    public let targets: [Target]\n\n    public struct Target {\n        let name: String\n        let root: Path\n        let excludes: [Path]\n    }\n\n    public init(dict: [String: Any], relativePath: Path) throws {\n        guard let packageRootPath = dict[\"path\"] as? String else {\n            throw Configuration.Error.invalidSources(message: \"Package file directory path is not provided. Expected string.\")\n        }\n        let path = Path(packageRootPath, relativeTo: relativePath)\n        \n        let packagePath = try Basics.AbsolutePath(validating: path.string)\n        let observability = ObservabilitySystem { Log.verbose(\"\\($0): \\($1)\") }\n        let workspace = try Workspace(forRootPackage: packagePath)\n\n        var manifestResult: Result<Manifest, Error>?\n        let semaphore = DispatchSemaphore(value: 0)\n        workspace.loadRootManifest(at: packagePath, observabilityScope: observability.topScope, completion: { result in\n            manifestResult = result\n            semaphore.signal()\n        })\n        semaphore.wait()\n        \n        guard let manifest = try manifestResult?.get() else {\n            throw Configuration.Error.invalidSources(message: \"Unable to load manifest\")\n        }\n        self.root = path\n        let targetNames: [String]\n        if let targets = dict[\"target\"] as? [String] {\n            targetNames = targets\n        } else if let target = dict[\"target\"] as? String {\n            targetNames = [target]\n        } else {\n            throw Configuration.Error.invalidSources(message: \"'target' key is missing. Expected object or array of objects.\")\n        }\n        let sourcesPath = Path(\"Sources\", relativeTo: path)\n        self.targets = manifest.targets.compactMap({ target in\n            guard targetNames.contains(target.name) else {\n                return nil\n            }\n            let rootPath = target.path.map { Path($0, relativeTo: path) } ?? Path(target.name, relativeTo: sourcesPath)\n            let excludePaths = target.exclude.map { path in\n                Path(path, relativeTo: rootPath)\n            }\n            return Target(name: target.name, root: rootPath, excludes: excludePaths)\n        })\n    }\n}\n\npublic enum Source {\n    case projects([Project])\n    case sources(Paths)\n    case packages([Package])\n\n    public init(dict: [String: Any], relativePath: Path) throws {\n        if let projects = (dict[\"project\"] as? [[String: Any]]) ?? (dict[\"project\"] as? [String: Any]).map({ [$0] }) {\n            guard !projects.isEmpty else { throw Configuration.Error.invalidSources(message: \"No projects provided.\") }\n            self = try .projects(projects.map({ try Project(dict: $0, relativePath: relativePath) }))\n        } else if let sources = dict[\"sources\"] {\n            do {\n                self = try .sources(Paths(dict: sources, relativePath: relativePath))\n            } catch {\n                throw Configuration.Error.invalidSources(message: \"\\(error)\")\n            }\n        } else if let packages = (dict[\"package\"] as? [[String: Any]]) ?? (dict[\"package\"] as? [String: Any]).map({ [$0] }) {\n            guard !packages.isEmpty else { throw Configuration.Error.invalidSources(message: \"No packages provided.\") }\n            self = try .packages(packages.map({ try Package(dict: $0, relativePath: relativePath) }))\n        } else if dict[\"child\"] != nil {\n            throw Configuration.Error.internalError(message: \"'child' should have been parsed already.\")\n        } else {\n            throw Configuration.Error.invalidSources(message: \"'sources', 'project' or 'package' key are missing.\")\n        }\n    }\n\n    public var isEmpty: Bool {\n        switch self {\n        case let .sources(paths):\n            return paths.allPaths.isEmpty\n        case let .projects(projects):\n            return projects.isEmpty\n        case let .packages(packages):\n            return packages.isEmpty\n        }\n    }\n}\n\npublic struct Output {\n    public struct LinkTo {\n        public let project: XcodeProj\n        public let projectPath: Path\n        public let targets: [String]\n        public let group: String?\n\n        public init(dict: [String: Any], relativePath: Path) throws {\n            guard let project = dict[\"project\"] as? String else {\n                throw Configuration.Error.invalidOutput(message: \"No project file path provided.\")\n            }\n            if let target = dict[\"target\"] as? String {\n                self.targets = [target]\n            } else if let targets = dict[\"targets\"] as? [String] {\n                self.targets = targets\n            } else {\n                throw Configuration.Error.invalidOutput(message: \"No target(s) provided.\")\n            }\n            let projectPath = Path(project, relativeTo: relativePath)\n            self.projectPath = projectPath\n            self.project = try XcodeProj(path: projectPath)\n            self.group = dict[\"group\"] as? String\n        }\n    }\n\n    public let path: Path\n    public let linkTo: LinkTo?\n\n    public var isDirectory: Bool {\n        guard path.exists else {\n            return path.lastComponentWithoutExtension == path.lastComponent || path.string.hasSuffix(\"/\")\n        }\n        return path.isDirectory\n    }\n\n    public init(dict: [String: Any], relativePath: Path) throws {\n        guard let path = dict[\"path\"] as? String else {\n            throw Configuration.Error.invalidOutput(message: \"No path provided.\")\n        }\n\n        self.path = Path(path, relativeTo: relativePath)\n\n        if let linkToDict = dict[\"link\"] as? [String: Any] {\n            do {\n                self.linkTo = try LinkTo(dict: linkToDict, relativePath: relativePath)\n            } catch {\n                self.linkTo = nil\n                Log.warning(error)\n            }\n        } else {\n            self.linkTo = nil\n        }\n    }\n\n    public init(_ path: Path, linkTo: LinkTo? = nil) {\n        self.path = path\n        self.linkTo = linkTo\n    }\n\n}\n\npublic struct Configuration {\n\n    public enum Error: Swift.Error, CustomStringConvertible {\n        case invalidFormat(message: String)\n        case invalidSources(message: String)\n        case invalidXCFramework(path: Path? = nil, message: String)\n        case invalidTemplates(message: String)\n        case invalidOutput(message: String)\n        case invalidCacheBasePath(message: String)\n        case invalidPaths(message: String)\n        case internalError(message: String)\n\n        public var description: String {\n            switch self {\n            case .invalidFormat(let message):\n                return \"Invalid config file format. \\(message)\"\n            case .invalidSources(let message):\n                return \"Invalid sources. \\(message)\"\n            case .invalidXCFramework(let path, let message):\n                return \"Invalid xcframework\\(path.map { \" at path '\\($0)'\" } ?? \"\")'. \\(message)\"\n            case .invalidTemplates(let message):\n                return \"Invalid templates. \\(message)\"\n            case .invalidOutput(let message):\n                return \"Invalid output. \\(message)\"\n            case .invalidCacheBasePath(let message):\n                return \"Invalid cacheBasePath. \\(message)\"\n            case .invalidPaths(let message):\n                return \"\\(message)\"\n            case .internalError(let message):\n                return \"\\(message)\"\n            }\n        }\n    }\n\n    public let source: Source\n    public let templates: Paths\n    public let output: Output\n    public let cacheBasePath: Path\n    public let forceParse: [String]\n    public let parseDocumentation: Bool\n    public let baseIndentation: Int\n    public let args: [String: NSObject]\n\n    public init(\n        path: Path,\n        relativePath: Path,\n        env: [String: String] = [:]\n    ) throws {\n        guard let dict = try Yams.load(yaml: path.read(), .default, Constructor.sourceryContructor(env: env)) as? [String: Any] else {\n            throw Configuration.Error.invalidFormat(message: \"Expected dictionary.\")\n        }\n\n        try self.init(dict: dict, relativePath: relativePath)\n    }\n\n    public init(dict: [String: Any], relativePath: Path) throws {\n        let source = try Source(dict: dict, relativePath: relativePath)\n        guard !source.isEmpty else {\n            throw Configuration.Error.invalidSources(message: \"No sources provided.\")\n        }\n        self.source = source\n\n        let templates: Paths\n        guard let templatesDict = dict[\"templates\"] else {\n            throw Configuration.Error.invalidTemplates(message: \"'templates' key is missing.\")\n        }\n        do {\n            templates = try Paths(dict: templatesDict, relativePath: relativePath)\n        } catch {\n            throw Configuration.Error.invalidTemplates(message: \"\\(error)\")\n        }\n        guard !templates.isEmpty else {\n            throw Configuration.Error.invalidTemplates(message: \"No templates provided.\")\n        }\n        self.templates = templates\n\n        self.forceParse = dict[\"forceParse\"] as? [String] ?? []\n\n        self.parseDocumentation = dict[\"parseDocumentation\"] as? Bool ?? false\n\n        if let output = dict[\"output\"] as? String {\n            self.output = Output(Path(output, relativeTo: relativePath))\n        } else if let output = dict[\"output\"] as? [String: Any] {\n            self.output = try Output(dict: output, relativePath: relativePath)\n        } else {\n            throw Configuration.Error.invalidOutput(message: \"'output' key is missing or is not a string or object.\")\n        }\n\n        if let cacheBasePath = dict[\"cacheBasePath\"] as? String {\n            self.cacheBasePath = Path(cacheBasePath, relativeTo: relativePath)\n        } else if dict[\"cacheBasePath\"] != nil {\n            throw Configuration.Error.invalidCacheBasePath(message: \"'cacheBasePath' key is not a string.\")\n        } else {\n            self.cacheBasePath = Path.defaultBaseCachePath\n        }\n\n        self.baseIndentation = dict[\"baseIndentation\"] as? Int ?? 0\n        self.args = dict[\"args\"] as? [String: NSObject] ?? [:]\n    }\n\n    public init(sources: Paths, templates: Paths, output: Path, cacheBasePath: Path, forceParse: [String], parseDocumentation: Bool, baseIndentation: Int, args: [String: NSObject]) {\n        self.source = .sources(sources)\n        self.templates = templates\n        self.output = Output(output, linkTo: nil)\n        self.cacheBasePath = cacheBasePath\n        self.forceParse = forceParse\n        self.parseDocumentation = parseDocumentation\n        self.baseIndentation = baseIndentation\n        self.args = args\n    }\n\n}\n\npublic enum Configurations {\n    public static func make(\n        path: Path,\n        relativePath: Path,\n        env: [String: String] = [:]\n    ) throws -> [Configuration] {\n        guard let dict = try Yams.load(yaml: path.read(), .default, Constructor.sourceryContructor(env: env)) as? [String: Any] else {\n            throw Configuration.Error.invalidFormat(message: \"Expected dictionary.\")\n        }\n\n        let start = currentTimestamp()\n        defer {\n            Log.benchmark(\"Resolving configurations took \\(currentTimestamp() - start)\")\n        }\n\n        if let configurations = dict[\"configurations\"] as? [[String: Any]] {\n            return try configurations.flatMap { dict in\n                if let child = dict[\"child\"] as? String {\n                    let childPath = Path(child, relativeTo: relativePath)\n                    let childRelativePath = Path(components: childPath.components.dropLast())\n                    return try Configurations.make(path: childPath, relativePath: childRelativePath, env: env)\n                } else {\n                    return try [Configuration(dict: dict, relativePath: relativePath)]\n                }\n            }\n        } else {\n            return try [Configuration(dict: dict, relativePath: relativePath)]\n        }\n    }\n}\n\n// Copied from https://github.com/realm/SwiftLint/blob/0.29.2/Source/SwiftLintFramework/Models/YamlParser.swift\n// and https://github.com/SwiftGen/SwiftGen/blob/6.1.0/Sources/SwiftGenKit/Utils/YAML.swift\n\nprivate extension Constructor {\n    static func sourceryContructor(env: [String: String]) -> Constructor {\n        return Constructor(customScalarMap(env: env))\n    }\n\n    static func customScalarMap(env: [String: String]) -> ScalarMap {\n        var map = defaultScalarMap\n        map[.str] = String.constructExpandingEnvVars(env: env)\n        return map\n    }\n}\n\nprivate extension String {\n    static func constructExpandingEnvVars(env: [String: String]) -> (_ scalar: Node.Scalar) -> String? {\n        return { (scalar: Node.Scalar) -> String? in\n            scalar.string.expandingEnvVars(env: env)\n        }\n    }\n\n    func expandingEnvVars(env: [String: String]) -> String? {\n        // check if entry has an env variable\n        guard let match = self.range(of: #\"\\$\\{(.)\\w+\\}\"#, options: .regularExpression) else {\n            return self\n        }\n\n        // get the env variable as \"${ENV_VAR}\"\n        let key = String(self[match])\n\n        // get the env variable as \"ENV_VAR\" - note missing $ and brackets\n        let keyString = String(key[2..<key.count-1])\n\n        guard let value = env[keyString] else { return \"\" }\n\n        return self.replacingOccurrences(of: key, with: value)\n    }\n}\n\nprivate extension StringProtocol {\n    subscript(bounds: CountableClosedRange<Int>) -> SubSequence {\n        let start = index(startIndex, offsetBy: bounds.lowerBound)\n        let end = index(start, offsetBy: bounds.count)\n        return self[start..<end]\n    }\n\n    subscript(bounds: CountableRange<Int>) -> SubSequence {\n        let start = index(startIndex, offsetBy: bounds.lowerBound)\n        let end = index(start, offsetBy: bounds.count)\n        return self[start..<end]\n    }\n}\n"
  },
  {
    "path": "Sourcery/Generating/Templates/JavaScript/JavaScriptTemplate.swift",
    "content": "import SourceryFramework\nimport SourceryJS\nimport SourceryRuntime\n#if canImport(ObjectiveC)\nimport JavaScriptCore\n\nclass JavaScriptTemplate: EJSTemplate, Template {\n\n    override var context: [String: Any] {\n        didSet {\n            jsContext.catchTypesAccessErrors()\n            jsContext.catchTemplateContextTypesUnknownProperties()\n        }\n    }\n\n    func render(_ context: TemplateContext) throws -> String {\n        return try render(context.jsContext)\n    }\n\n}\n\nprivate extension JSContext {\n\n    // this will catch errors accessing types through wrong collections (i.e. using `implementing` instead of `based`)\n    func catchTypesAccessErrors() {\n        let valueForKey: @convention(block) (TypesCollection, String) -> Any? = { target, key in\n            do {\n                return try target.types(forKey: key)\n            } catch {\n                JSContext.current().evaluateScript(\"throw \\\"\\(error)\\\"\")\n                return nil\n            }\n        }\n        setObject(valueForKey, forKeyedSubscript: \"valueForKey\" as NSString)\n        evaluateScript(\"templateContext.types.implementing = new Proxy(templateContext.types.implementing, { get: valueForKey })\")\n        evaluateScript(\"templateContext.types.inheriting = new Proxy(templateContext.types.inheriting, { get: valueForKey })\")\n        evaluateScript(\"templateContext.types.based = new Proxy(templateContext.types.based, { get: valueForKey })\")\n    }\n\n    // this will catch errors when accessing context types properties (i.e. using `implements` instead of `implementing`)\n    func catchTemplateContextTypesUnknownProperties() {\n        evaluateScript(\"\"\"\n            templateContext.types = new Proxy(templateContext.types, {\n                get(target, propertyKey, receiver) {\n                    if (!(propertyKey in target)) {\n                        throw new TypeError('Unknown property `'+propertyKey+'`');\n                    }\n                    // Make sure we don’t block access to Object.prototype\n                    return Reflect.get(target, propertyKey, receiver);\n                }\n            });\n            \"\"\")\n    }\n\n}\n#endif\n"
  },
  {
    "path": "Sourcery/Generating/Templates/Stencil/StencilTemplate.swift",
    "content": "import Foundation\nimport SourceryFramework\nimport SourceryRuntime\nimport SourceryStencil\n\nextension StencilTemplate: SourceryFramework.Template {\n    public func render(_ context: TemplateContext) throws -> String {\n        do {\n            return try self.render(context.stencilContext)\n        } catch {\n            throw \"\\(sourcePath): \\(error)\"\n        }\n    }\n}\n"
  },
  {
    "path": "Sourcery/Generating/Templates/Swift/SwiftTemplate.swift",
    "content": "//\n//  SwiftTemplate.swift\n//  Sourcery\n//\n//  Created by Krunoslav Zaher on 12/30/16.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\nimport SourceryFramework\nimport SourceryRuntime\nimport SourcerySwift\n\nextension SwiftTemplate: Template {\n\n    public func render(_ context: TemplateContext) throws -> String {\n        return try self.render(context as Any)\n    }\n\n}\n"
  },
  {
    "path": "Sourcery/Sourcery.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 14/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\nimport PathKit\nimport SourceryFramework\nimport SourceryUtils\nimport SourceryRuntime\nimport SourceryJS\nimport SourcerySwift\nimport SourceryStencil\n#if canImport(ObjectiveC)\nimport TryCatch\n#endif\nimport XcodeProj\n\npublic class Sourcery {\n    public static let version: String = SourceryVersion.current.value\n    public static let generationMarker: String = \"// Generated using Sourcery\"\n    public let generationHeader: String\n\n    enum Error: Swift.Error {\n        case containsMergeConflictMarkers\n    }\n\n    fileprivate let verbose: Bool\n    fileprivate let watcherEnabled: Bool\n    fileprivate let arguments: [String: NSObject]\n    fileprivate let cacheDisabled: Bool\n    fileprivate let cacheBasePath: Path?\n    fileprivate let buildPath: Path?\n    fileprivate let prune: Bool\n    fileprivate let serialParse: Bool\n    fileprivate let hideVersionHeader: Bool\n\n    fileprivate var status = \"\"\n    fileprivate var templatesPaths = Paths(include: [])\n    fileprivate var outputPath = Output(\"\", linkTo: nil)\n    fileprivate var isDryRun: Bool = false\n    fileprivate lazy var dryOutputBuffer = [DryOutputValue]()\n\n    internal var dryOutput: (String) -> Void = Log.output(_:)\n\n    // content annotated with file annotations per file path to write it to\n    fileprivate var fileAnnotatedContent: [Path: [String]] = [:]\n\n    /// Creates Sourcery processor\n    public init(\n        verbose: Bool = false,\n        watcherEnabled: Bool = false,\n        cacheDisabled: Bool = false,\n        cacheBasePath: Path? = nil,\n        buildPath: Path? = nil,\n        prune: Bool = false,\n        serialParse: Bool = false,\n        hideVersionHeader: Bool = false,\n        arguments: [String: NSObject] = [:],\n        logConfiguration: Log.Configuration? = nil,\n        headerPrefix: String? = nil\n    ) {\n        self.verbose = verbose\n        self.arguments = arguments\n        self.watcherEnabled = watcherEnabled\n        self.cacheDisabled = cacheDisabled\n        self.cacheBasePath = cacheBasePath\n        self.buildPath = buildPath\n        self.prune = prune\n        self.serialParse = serialParse\n        if let hideVersionHeader = arguments[\"hideVersionHeader\"] {\n            self.hideVersionHeader = (hideVersionHeader as? NSNumber)?.boolValue == true\n        } else {\n            self.hideVersionHeader = hideVersionHeader\n        }\n        if let logConfiguration {\n            Log.setup(using: logConfiguration)\n        }\n\n        var prefix = \"\"\n        if let headerPrefix {\n            prefix += headerPrefix + \"\\n\"\n        }\n        prefix += Sourcery.generationMarker\n        if !self.hideVersionHeader {\n          prefix += \" \\(Sourcery.version)\"\n        }\n        self.generationHeader = \"\\(prefix) — https://github.com/krzysztofzablocki/Sourcery\\n\"\n        + \"// DO NOT EDIT\\n\"\n    }\n\n    /// Processes source files and generates corresponding code.\n    ///\n    /// - Parameters:\n    ///   - files: Path of files to process, can be directory or specific file.\n    ///   - templatePath: Specific Template to use for code generation.\n    ///   - output: Path to output source code to.\n    ///   - forceParse: extensions of generated sourcery file that can be parsed\n    ///   - watcherEnabled: Whether daemon watcher should be enabled.\n    /// - Throws: Potential errors.\n    public func processFiles(_ source: Source, usingTemplates templatesPaths: Paths, output: Output, isDryRun: Bool = false, forceParse: [String] = [], parseDocumentation: Bool = false, baseIndentation: Int) throws -> [FolderWatcher.Local]? {\n        self.templatesPaths = templatesPaths\n        self.outputPath = output\n        self.isDryRun = isDryRun\n\n        let hasSwiftTemplates = templatesPaths.allPaths.contains(where: { $0.extension == \"swifttemplate\" })\n\n        let watchPaths: Paths\n        switch source {\n        case let .sources(paths):\n            watchPaths = paths\n        case let .projects(projects):\n            watchPaths = Paths(include: projects.map(\\.root),\n                               exclude: projects.flatMap(\\.exclude))\n        case let .packages(packages):\n            watchPaths = Paths(include: packages.flatMap({ $0.targets.map(\\.root) }),\n                               exclude: packages.flatMap({ $0.targets.flatMap(\\.excludes) }))\n        }\n\n        let process: (Source) throws -> ParsingResult = { source in\n            var result: ParsingResult\n            switch source {\n            case let .sources(paths):\n                result = try self.parse(from: paths.include, exclude: paths.exclude, forceParse: forceParse, parseDocumentation: parseDocumentation, modules: nil, requiresFileParserCopy: hasSwiftTemplates)\n            case let .projects(projects):\n                var paths: [Path] = []\n                var modules = [String]()\n                projects.forEach { project in\n                    project.targets.forEach { target in\n                        guard let projectTarget = project.file.target(named: target.name) else { return }\n\n                        let files: [Path] = project.file.sourceFilesPaths(target: projectTarget, sourceRoot: project.root)\n                        files.forEach { file in\n                            guard !project.exclude.contains(file) else { return }\n                            paths.append(file)\n                            modules.append(target.module)\n                        }\n                        for framework in target.xcframeworks {\n                            paths.append(framework.swiftInterfacePath)\n                            modules.append(framework.module)\n                        }\n                    }\n                }\n                result = try self.parse(from: paths, forceParse: forceParse, parseDocumentation: parseDocumentation, modules: modules, requiresFileParserCopy: hasSwiftTemplates)\n            case let .packages(packages):\n                let paths: [Path] = packages.flatMap({ $0.targets.map(\\.root) })\n                let excludePaths: [Path] = packages.flatMap({ $0.targets.flatMap(\\.excludes) })\n                let modules = packages.flatMap({ $0.targets.map(\\.name) })\n                result = try self.parse(from: paths, exclude: excludePaths, forceParse: forceParse, parseDocumentation: parseDocumentation, modules: modules, requiresFileParserCopy: hasSwiftTemplates)\n            }\n\n            try self.generate(source: source, templatePaths: templatesPaths, output: output, parsingResult: &result, forceParse: forceParse, baseIndentation: baseIndentation)\n            return result\n        }\n\n        var result = try process(source)\n\n        if isDryRun {\n            let encoder = JSONEncoder()\n            encoder.outputFormatting = .prettyPrinted\n            let data: Data = try encoder.encode(DryOutputSuccess(outputs: self.dryOutputBuffer))\n            self.dryOutput(String(data: data, encoding: .utf8) ?? \"\")\n        }\n\n        guard watcherEnabled else {\n            return nil\n        }\n\n        Log.info(\"Starting watching sources.\")\n#if canImport(ObjectiveC)\n        let sourceWatchers = topPaths(from: watchPaths.allPaths).map({ watchPath in\n            return FolderWatcher.Local(path: watchPath.string) { events in\n                let eventPaths: [Path] = events\n                    .filter { $0.flags.contains(.isFile) }\n                    .compactMap {\n                        let path = Path($0.path)\n                        return path.isSwiftSourceFile ? path : nil\n                    }\n\n                var pathThatForcedRegeneration: Path?\n                for path in eventPaths {\n                    guard let file = try? path.read(.utf8) else { continue }\n                    if !file.hasPrefix(Sourcery.generationMarker) {\n                        pathThatForcedRegeneration = path\n                        break\n                    }\n                }\n\n                if let path = pathThatForcedRegeneration {\n                    do {\n                        Log.info(\"Source changed at \\(path.string)\")\n                        result = try process(source)\n                    } catch {\n                        Log.error(error)\n                    }\n                }\n            }\n        })\n\n        Log.info(\"Starting watching templates.\")\n\n        let templateWatchers = topPaths(from: templatesPaths.allPaths).map({ templatesPath in\n            return FolderWatcher.Local(path: templatesPath.string) { events in\n                let events = events\n                    .filter { $0.flags.contains(.isFile) && Path($0.path).isTemplateFile }\n\n                if !events.isEmpty {\n                    do {\n                        if events.count == 1 {\n                            Log.info(\"Template changed \\(events[0].path)\")\n                        } else {\n                            Log.info(\"Templates changed: \")\n                        }\n                        try self.generate(source: source, templatePaths: Paths(include: [templatesPath]), output: output, parsingResult: &result, forceParse: forceParse, baseIndentation: baseIndentation)\n                    } catch {\n                        Log.error(error)\n                    }\n                }\n            }\n        })\n\n        return Array([sourceWatchers, templateWatchers].joined())\n#else\n        return []\n#endif\n    }\n\n    private func topPaths(from paths: [Path]) -> [Path] {\n        var top: [(Path, [Path])] = []\n        paths.forEach { path in\n            // See if its already contained by the topDirectories\n            guard top.first(where: { (_, children) -> Bool in\n                return children.contains(path)\n            }) == nil else { return }\n\n            if path.isDirectory {\n                top.append((path, (try? path.recursiveUnhiddenChildren()) ?? []))\n            } else {\n                let dir = path.parent()\n                let children = (try? dir.recursiveUnhiddenChildren()) ?? []\n                if children.contains(path) {\n                    top.append((dir, children))\n                } else {\n                    top.append((path, []))\n                }\n            }\n        }\n\n        return top.map { $0.0 }\n    }\n\n    /// This function should be used to retrieve the path to the cache instead of `Path.cachesDir`,\n    /// as it considers the `--cacheDisabled` and `--cacheBasePath` command line parameters.\n    fileprivate func cachesDir(sourcePath: Path, createIfMissing: Bool = true) -> Path? {\n        return cacheDisabled\n            ? nil\n            : Path.cachesDir(sourcePath: sourcePath, basePath: cacheBasePath, createIfMissing: createIfMissing)\n    }\n\n    /// Remove the existing cache artifacts if it exists.\n    /// Currently this is only called from tests, and the `--cacheDisabled` and `--cacheBasePath` command line parameters are not considered.\n    ///\n    /// - Parameter sources: paths of the sources you want to delete the\n    static func removeCache(for sources: [Path], cacheDisabled: Bool = false, cacheBasePath: Path? = nil) {\n        if cacheDisabled {\n            return\n        }\n        sources.forEach { path in\n            let cacheDir = Path.cachesDir(sourcePath: path, basePath: cacheBasePath, createIfMissing: false)\n            _ = try? cacheDir.delete()\n        }\n    }\n\n    private func templatePaths(from: Paths) -> [Path] {\n        return from.allPaths.filter { $0.isTemplateFile }\n    }\n\n}\n\n#if canImport(ObjectiveC)\nprivate extension Sourcery {\n    func templates(from: Paths) throws -> [Template] {\n        return try templatePaths(from: from).compactMap {\n            if $0.extension == \"sourcerytemplate\" {\n                let template = try JSONDecoder().decode(SourceryTemplate.self, from: $0.read())\n                switch template.instance.kind {\n                case .ejs:\n                    guard let ejsPath = EJSTemplate.ejsPath else {\n                        Log.warning(\"Skipping template \\($0). JavaScript templates require EJS path to be set manually when using Sourcery built with Swift Package Manager. Use `--ejsPath` command line argument to set it.\")\n                        return nil\n                    }\n                    return try JavaScriptTemplate(path: $0, templateString: template.instance.content, ejsPath: ejsPath)\n                case .stencil:\n                    return try StencilTemplate(path: $0, templateString: template.instance.content)\n                }\n            } else if $0.extension == \"swifttemplate\" {\n                let cachePath = cachesDir(sourcePath: $0)\n                return try SwiftTemplate(path: $0, cachePath: cachePath, version: type(of: self).version, buildPath: buildPath)\n            } else if $0.extension == \"ejs\" {\n                guard let ejsPath = EJSTemplate.ejsPath else {\n                    Log.warning(\"Skipping template \\($0). JavaScript templates require EJS path to be set manually when using Sourcery built with Swift Package Manager. Use `--ejsPath` command line argument to set it.\")\n                    return nil\n                }\n                return try JavaScriptTemplate(path: $0, ejsPath: ejsPath)\n            } else {\n                return try StencilTemplate(path: $0)\n            }\n        }\n    }\n}\n#else\nprivate extension Sourcery {\n    func templates(from: Paths) throws -> [Template] {\n        return try templatePaths(from: from).compactMap {\n            if $0.extension == \"sourcerytemplate\" {\n                let template = try JSONDecoder().decode(SourceryTemplate.self, from: $0.read())\n                return try StencilTemplate(path: $0, templateString: template.instance.content)\n            } else if $0.extension == \"swifttemplate\" {\n                let cachePath = cachesDir(sourcePath: $0)\n                return try SwiftTemplate(path: $0, cachePath: cachePath, version: type(of: self).version, buildPath: buildPath)\n            } else {\n                return try StencilTemplate(path: $0)\n            }\n        }\n    }\n}\n#endif\n\n// MARK: - Parsing\n\nextension Sourcery {\n    typealias ParsingResult = (\n        parserResult: FileParserResult?,\n        types: Types,\n        functions: [SourceryMethod],\n        inlineRanges: [(file: String, ranges: [String: NSRange], indentations: [String: String])])\n\n    typealias ParserWrapper = (path: Path, parse: () throws -> FileParserResult?)\n\n  fileprivate func parse(from: [Path], exclude: [Path] = [], forceParse: [String] = [], parseDocumentation: Bool, modules: [String]?, requiresFileParserCopy: Bool) throws -> ParsingResult {\n        if let modules = modules {\n            precondition(from.count == modules.count, \"There should be module for each file to parse\")\n        }\n\n        let startScan = currentTimestamp()\n        Log.info(\"Scanning sources...\")\n\n        var inlineRanges = [(file: String, ranges: [String: NSRange], indentations: [String: String])]()\n        var allResults = [(changed: Bool, result: FileParserResult)]()\n\n        let excludeSet = Set(exclude\n            .map { $0.processablePaths }\n            .compactMap({ $0 }).flatMap({ $0 }))\n\n        try from.enumerated().forEach { index, from in\n            let fileList = from.processablePaths\n            let parserGenerator: [ParserWrapper] = fileList\n                .filter { $0.isSwiftSourceFile }\n                .filter {\n                    return !excludeSet.contains($0)\n                }\n                .map { path in\n                    return (path: path, parse: {\n                        let module = modules?[index]\n\n                        guard path.exists else {\n                            return nil\n                        }\n\n                        let content = try path.read(.utf8)\n                        let status = Verifier.canParse(content: content, path: path, generationMarker: Sourcery.generationMarker, forceParse: forceParse)\n                        switch status {\n                        case .containsConflictMarkers:\n                            throw Error.containsMergeConflictMarkers\n                        case .isCodeGenerated:\n                            return nil\n                        case .approved:\n                            return try makeParser(for: content, forceParse: forceParse, parseDocumentation: parseDocumentation, path: path, module: module).parse()\n                        }\n                    })\n                }\n\n            var lastError: Swift.Error?\n\n            let transform: (ParserWrapper) -> (changed: Bool, result: FileParserResult)? = { parser in\n                do {\n                    return try self.loadOrParse(parser: parser, cachesPath: self.cachesDir(sourcePath: from))\n                } catch {\n                    lastError = error\n                    Log.error(\"Unable to parse \\(parser.path), error \\(error)\")\n                    return nil\n                }\n            }\n\n            let results: [(changed: Bool, result: FileParserResult)]\n            if serialParse {\n                results = parserGenerator.compactMap(transform)\n            } else {\n                results = parserGenerator.parallelCompactMap(transform: transform)\n            }\n\n            if let error = lastError {\n                throw error\n            }\n\n            if !results.isEmpty {\n                allResults.append(contentsOf: results)\n            }\n        }\n\n        Log.benchmark(\"\\tloadOrParse: \\(currentTimestamp() - startScan)\")\n        let reduceStart = currentTimestamp()\n\n        var allTypealiases = [Typealias]()\n        var allTypes = [Type]()\n        var allFunctions = [SourceryMethod]()\n\n        for pair in allResults {\n            let next = pair.result\n            allTypealiases += next.typealiases\n            allTypes += next.types\n            allFunctions += next.functions\n\n            // swiftlint:disable:next force_unwrapping\n            inlineRanges.append((next.path!, next.inlineRanges, next.inlineIndentations))\n        }\n\n        let parserResult = FileParserResult(path: nil, module: nil, types: allTypes, functions: allFunctions, typealiases: allTypealiases)\n\n        var parserResultCopy: FileParserResult?\n        if requiresFileParserCopy {\n            let data = try NSKeyedArchiver.archivedData(withRootObject: parserResult, requiringSecureCoding: false)\n            parserResultCopy = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? FileParserResult\n        }\n\n        let uniqueTypeStart = currentTimestamp()\n\n        // ! All files have been scanned, time to join extensions with base class\n        let (types, functions, typealiases) = Composer.uniqueTypesAndFunctions(parserResult, serial: serialParse)\n\n\n        let filesThatHadToBeParsed = allResults\n            .filter { $0.changed }\n            .compactMap { $0.result.path }\n\n        Log.benchmark(\"\\treduce: \\(uniqueTypeStart - reduceStart)\\n\\tcomposer: \\(currentTimestamp() - uniqueTypeStart)\\n\\ttotal: \\(currentTimestamp() - startScan)\")\n        Log.info(\"Found \\(types.count) types in \\(allResults.count) files, \\(filesThatHadToBeParsed.count) changed from last run.\")\n\n        if !filesThatHadToBeParsed.isEmpty, (filesThatHadToBeParsed.count < 50 || Log.level == .verbose) {\n            let files = filesThatHadToBeParsed\n                .joined(separator: \"\\n\")\n            Log.info(\"Files changed:\\n\\(files)\")\n        }\n        return (parserResultCopy, Types(types: types, typealiases: typealiases), functions, inlineRanges)\n    }\n\n    private func loadOrParse(parser: ParserWrapper, cachesPath: @autoclosure () -> Path?) throws -> (changed: Bool, result: FileParserResult)? {\n        guard let cachesPath = cachesPath() else {\n            return try parser.parse().map { (changed: true, result: $0) }\n        }\n\n        let path = parser.path\n        let artifactsPath = cachesPath + \"\\(path.string.sha256()?.addingPercentEncoding(withAllowedCharacters: .alphanumerics) ?? \"\\(path.string.hash)\").srf\"\n\n        guard\n            artifactsPath.exists,\n            let modifiedDate = path.modifiedDate,\n            let unarchived = load(artifacts: artifactsPath.string, modifiedDate: modifiedDate, path: path) else {\n\n            guard let result = try parser.parse() else {\n                return nil\n            }\n\n            do {\n                let data = try NSKeyedArchiver.archivedData(withRootObject: result, requiringSecureCoding: false)\n                try artifactsPath.write(data)\n            } catch {\n                fatalError(\"Unable to save artifacts for \\(path) under \\(artifactsPath), error: \\(error)\")\n            }\n\n            return (changed: true, result: result)\n        }\n\n        return (changed: false, result: unarchived)\n    }\n\n    private func load(artifacts: String, modifiedDate: Date, path: Path) -> FileParserResult? {\n        var unarchivedResult: FileParserResult?\n\n#if canImport(ObjectiveC)\n        SwiftTryCatch.try({\n            // this deprecation can't be removed atm, new API is 10x slower\n            if let unarchived = NSKeyedUnarchiver.unarchiveObject(withFile: artifacts) as? FileParserResult {\n                if unarchived.sourceryVersion == Sourcery.version, unarchived.modifiedDate == modifiedDate {\n                    unarchivedResult = unarchived\n                }\n            }\n        }, catch: { _ in\n            Log.warning(\"Failed to unarchive cache for \\(path.string) due to error, re-parsing file\")\n        }, finallyBlock: {})\n#else\n            // this deprecation can't be removed atm, new API is 10x slower\n            if let unarchived = NSKeyedUnarchiver.unarchiveObject(withFile: artifacts) as? FileParserResult {\n                if unarchived.sourceryVersion == Sourcery.version, unarchived.modifiedDate == modifiedDate {\n                    unarchivedResult = unarchived\n                }\n            }\n#endif\n\n        return unarchivedResult\n    }\n}\n\n// MARK: - Generation\nextension Sourcery {\n    private typealias SourceChange = (path: String, rangeInFile: NSRange, newRangeInFile: NSRange)\n    private typealias GenerationResult = (String, [SourceChange])\n\n    fileprivate func generate(source: Source, templatePaths: Paths, output: Output, parsingResult: inout ParsingResult, forceParse: [String], baseIndentation: Int) throws {\n        let generationStart = currentTimestamp()\n\n        Log.info(\"Loading templates...\")\n        let allTemplates = try templates(from: templatePaths)\n        Log.info(\"Loaded \\(allTemplates.count) templates.\")\n        Log.benchmark(\"\\tLoading took \\(currentTimestamp() - generationStart)\")\n\n        Log.info(\"Generating code...\")\n        status = \"\"\n\n        if output.isDirectory {\n            try allTemplates.forEach { template in\n                let (result, sourceChanges) = try generate(template, forParsingResult: parsingResult, outputPath: output.path, forceParse: forceParse, baseIndentation: baseIndentation)\n                updateRanges(in: &parsingResult, sourceChanges: sourceChanges)\n                let outputPath = output.path + generatedPath(for: template.sourcePath)\n                let isEmptyFile = result.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty\n                let willSkipResultFile = prune && isEmptyFile\n                try self.output(type: .template(template.sourcePath.string), result: result, to: outputPath, isEmptyFile: isEmptyFile)\n\n                if !isDryRun, !willSkipResultFile, let linkTo = output.linkTo {\n                    linkTo.targets.forEach { target in\n                        link(outputPath, to: linkTo, target: target)\n                    }\n                }\n            }\n        } else {\n            let result = try allTemplates.reduce((contents: \"\", parsingResult: parsingResult)) { state, template in\n                var (result, parsingResult) = state\n                let (generatedCode, sourceChanges) = try generate(template, forParsingResult: parsingResult, outputPath: output.path, forceParse: forceParse, baseIndentation: baseIndentation)\n                result += \"\\n\" + generatedCode\n                updateRanges(in: &parsingResult, sourceChanges: sourceChanges)\n                return (result, parsingResult)\n            }\n            parsingResult = result.parsingResult\n            let isEmptyFile = result.contents.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty\n            let willSkipResultFile = prune && isEmptyFile\n            try self.output(type: .allTemplates, result: result.contents, to: output.path, isEmptyFile: isEmptyFile)\n\n            if !isDryRun, !willSkipResultFile, let linkTo = output.linkTo {\n                linkTo.targets.forEach { target in\n                    link(output.path, to: linkTo, target: target)\n                }\n            }\n        }\n\n        try fileAnnotatedContent.forEach { (path, contents) in\n            let result = contents.joined(separator: \"\\n\")\n            let isEmptyFile = result.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty\n            let willSkipResultFile = prune && isEmptyFile\n            try self.output(type: .path(path.string), result: result, to: path, isEmptyFile: isEmptyFile)\n\n            if !isDryRun, !willSkipResultFile, let linkTo = output.linkTo {\n                linkTo.targets.forEach { target in\n                    link(path, to: linkTo, target: target)\n                }\n            }\n        }\n\n        if !isDryRun, let linkTo = output.linkTo {\n            try linkTo.project.writePBXProj(path: linkTo.projectPath, outputSettings: .init())\n        }\n\n        Log.benchmark(\"\\tGeneration took \\(currentTimestamp() - generationStart)\")\n        Log.info(\"Finished.\")\n    }\n\n    private func updateRanges(in parsingResult: inout ParsingResult, sourceChanges: [SourceChange]) {\n        for (path, rangeInFile, newRangeInFile) in sourceChanges {\n            if let inlineRangesIndex = parsingResult.inlineRanges.firstIndex(where: { $0.file == path }) {\n                let inlineRanges = parsingResult.inlineRanges[inlineRangesIndex].ranges\n                    .mapValues { inlineRange -> NSRange in\n                        let change = NSRange(\n                            location: newRangeInFile.location,\n                            length: newRangeInFile.length - rangeInFile.length\n                        )\n                        return inlineRange.changingContent(change)\n                    }\n                parsingResult.inlineRanges[inlineRangesIndex].ranges = inlineRanges\n            }\n\n            func stringViewForContent(at path: String) -> StringView? {\n                do {\n                    return StringView(try Path(path).read(.utf8))\n                } catch {\n                    return nil\n                }\n            }\n\n            for type in parsingResult.types.types {\n                guard\n                    type.path == path,\n                    let bytesRange = type.bodyBytesRange,\n                    let completeDeclarationRange = type.completeDeclarationRange,\n                    let content = stringViewForContent(at: path),\n                    let byteRangeInFile = content.NSRangeToByteRange(rangeInFile),\n                    let newByteRangeInFile = content.NSRangeToByteRange(newRangeInFile)\n                else {\n                    continue\n                }\n\n                let change = ByteRange(\n                    location: newByteRangeInFile.location,\n                    length: newByteRangeInFile.length - byteRangeInFile.length\n                )\n                type.bodyBytesRange = bytesRange.changingContent(change)\n                type.completeDeclarationRange = completeDeclarationRange.changingContent(change)\n            }\n        }\n    }\n\n    private func link(_ output: Path, to linkTo: Output.LinkTo, target targetName: String) {\n        guard let target = linkTo.project.target(named: targetName) else {\n            Log.warning(\"Unable to find target \\(targetName)\")\n            return\n        }\n\n        let sourceRoot = linkTo.projectPath.parent()\n\n        guard let fileGroup = linkTo.project.createGroupIfNeeded(named: linkTo.group, sourceRoot: sourceRoot) else {\n            Log.warning(\"Unable to create group \\(String(describing: linkTo.group))\")\n            return\n        }\n\n        do {\n            try linkTo.project.addSourceFile(at: output, toGroup: fileGroup, target: target, sourceRoot: sourceRoot)\n        } catch {\n            Log.warning(\"Failed to link file at \\(output) to \\(linkTo.projectPath). \\(error)\")\n        }\n    }\n\n    private func output(type: DryOutputType, result: consuming String, to outputPath: Path, isEmptyFile: Bool) throws {\n        var result = result\n        if !isEmptyFile, outputPath.extension == \"swift\" {\n            result = generationHeader + result\n        }\n\n        if isDryRun {\n            dryOutputBuffer.append(.init(type: type,\n                                         outputPath: outputPath.string,\n                                         value: result))\n            return\n        }\n\n        if !isEmptyFile {\n            if !outputPath.parent().exists {\n                try outputPath.parent().mkpath()\n            }\n            try writeIfChanged(result, to: outputPath)\n        } else {\n            if prune && outputPath.exists {\n                Log.verbose(\"Removing \\(outputPath) as it is empty.\")\n                do { try outputPath.delete() } catch { Log.error(\"\\(error)\") }\n            } else {\n                Log.verbose(\"Skipping \\(outputPath) as it is empty.\")\n            }\n        }\n    }\n    private func output(range: NSRange, in file: String,\n                        insertedContent: String,\n                        updatedContent: @autoclosure () -> String, to path: Path) throws {\n        if isDryRun {\n            dryOutputBuffer.append(.init(type: .range(range, in: file),\n                                         outputPath: path.string,\n                                         value: insertedContent))\n            return\n        }\n\n        try writeIfChanged(updatedContent(), to: path)\n    }\n\n    private func generate(_ template: Template, forParsingResult parsingResult: ParsingResult, outputPath: Path, forceParse: [String], baseIndentation: Int) throws -> GenerationResult {\n        guard watcherEnabled else {\n            let generationStart = currentTimestamp()\n            let result = try Generator.generate(parsingResult.parserResult, types: parsingResult.types, functions: parsingResult.functions, template: template, arguments: self.arguments)\n            Log.benchmark(\"\\tGenerating \\(template.sourcePath.lastComponent) took \\(currentTimestamp() - generationStart)\")\n\n            return try processRanges(in: parsingResult, result: result, outputPath: outputPath, forceParse: forceParse, baseIndentation: baseIndentation)\n        }\n\n        var result: String = \"\"\n#if canImport(ObjectiveC)\n        SwiftTryCatch.try({\n            do {\n                result = try Generator.generate(parsingResult.parserResult, types: parsingResult.types, functions: parsingResult.functions, template: template, arguments: self.arguments)\n            } catch {\n                Log.error(error)\n            }\n        }, catch: { error in\n            result = error?.description ?? \"\"\n        }, finallyBlock: {})\n#else\n        do {\n                result = try Generator.generate(parsingResult.parserResult, types: parsingResult.types, functions: parsingResult.functions, template: template, arguments: self.arguments)\n            } catch {\n                Log.error(error)\n            }\n#endif\n\n        return try processRanges(in: parsingResult, result: result, outputPath: outputPath, forceParse: forceParse, baseIndentation: baseIndentation)\n    }\n\n    private func processRanges(in parsingResult: ParsingResult, result: String, outputPath: Path, forceParse: [String], baseIndentation: Int) throws -> GenerationResult {\n        let start = currentTimestamp()\n        defer {\n            Log.benchmark(\"\\t\\tProcessing Ranges took \\(currentTimestamp() - start)\")\n        }\n        var result = result\n        result = processFileRanges(for: parsingResult, in: result, outputPath: outputPath, forceParse: forceParse)\n        let sourceChanges: [SourceChange]\n        (result, sourceChanges) = try processInlineRanges(for: parsingResult, in: result, forceParse: forceParse, baseIndentation: baseIndentation)\n        return (TemplateAnnotationsParser.removingEmptyAnnotations(from: result), sourceChanges)\n    }\n\n    private func processInlineRanges(`for` parsingResult: ParsingResult, in contents: String, forceParse: [String], baseIndentation: Int) throws -> GenerationResult {\n        var (annotatedRanges, rangesToReplace) = TemplateAnnotationsParser.annotationRanges(\"inline\", contents: contents, forceParse: forceParse)\n\n        typealias MappedInlineAnnotations = (\n            range: NSRange,\n            filePath: String,\n            rangeInFile: NSRange,\n            toInsert: String,\n            indentation: String\n        )\n\n        var sourceChanges: [SourceChange] = []\n\n        try annotatedRanges\n            .map { (key: $0, range: $1[0].range) }\n            .compactMap { (key, range) -> MappedInlineAnnotations? in\n                let generatedBody = contents.bridge().substring(with: range)\n\n                if let (filePath, inlineRanges, inlineIndentations) = parsingResult.inlineRanges.first(where: { $0.ranges[key] != nil }) {\n                    // swiftlint:disable:next force_unwrapping\n                    return MappedInlineAnnotations(range, filePath, inlineRanges[key]!, generatedBody, inlineIndentations[key] ?? \"\")\n                }\n\n\n                guard let autoRange = key.range(of: \"auto:\") else {\n                    rangesToReplace.remove(range)\n                    return nil\n                }\n\n                enum AutoType: String {\n                    case after = \"after-\"\n                    case normal = \"\"\n                }\n\n                let autoKey = key[..<autoRange.lowerBound]\n                let autoType = AutoType(rawValue: String(autoKey)) ?? .normal\n\n                let autoTypeName = key[autoRange.upperBound..<key.endIndex].components(separatedBy: \".\").dropLast().joined(separator: \".\")\n                var toInsert = \"\\n// sourcery:inline:\\(key)\\n\\(generatedBody)// sourcery:end\"\n\n                guard let definition = parsingResult.types.types.first(where: { $0.name == autoTypeName }),\n                    let filePath = definition.path,\n                    let path = definition.path.map({ Path($0) }),\n                    let contents = try? path.read(.utf8),\n                    let bodyRange = bodyRange(for: definition, contentsView: StringView(contents)) else {\n                        rangesToReplace.remove(range)\n                        return nil\n                }\n                let bodyEndRange = NSRange(location: NSMaxRange(bodyRange), length: 0)\n                let bodyEndLineRange = contents.bridge().lineRange(for: bodyEndRange)\n                let bodyEndLine = contents.bridge().substring(with: bodyEndLineRange)\n                let indentRange: NSRange?\n                if !bodyEndLine.contains(\"{\") {\n                    indentRange = (bodyEndLine as NSString).rangeOfCharacter(from: .whitespacesAndNewlines.inverted)\n                } else {\n                    indentRange = nil\n                }\n                let rangeInFile: NSRange\n\n                switch autoType {\n                case .after:\n                    rangeInFile = NSRange(location: max(bodyRange.location, bodyEndLineRange.location) + 1, length: 0)\n                case .normal:\n                    rangeInFile = NSRange(location: max(bodyRange.location, bodyEndLineRange.location), length: 0)\n                    toInsert += \"\\n\"\n                }\n\n                let indent = String(repeating: \" \", count: (indentRange?.location ?? 0) + baseIndentation)\n                return MappedInlineAnnotations(range, filePath, rangeInFile, toInsert, indent)\n            }\n            .sorted { lhs, rhs in\n                return lhs.rangeInFile.location > rhs.rangeInFile.location\n            }.forEach { (arg) in\n                let (_, filePath, rangeInFile, toInsert, indentation) = arg\n                let path = Path(filePath)\n                let content = try path.read(.utf8)\n                let newContent = indent(toInsert: toInsert, indentation: indentation)\n\n                try output(range: rangeInFile,\n                           in: filePath,\n                           insertedContent: newContent,\n                           updatedContent: content.bridge().replacingCharacters(in: rangeInFile, with: newContent),\n                           to: path)\n\n                let newLength = newContent.bridge().length\n\n                sourceChanges.append((\n                    path: filePath,\n                    rangeInFile: rangeInFile,\n                    newRangeInFile: NSRange(location: rangeInFile.location, length: newLength)\n                ))\n        }\n\n\n        var bridged = contents.bridge()\n        if isDryRun {\n            // fix file ranges, cause they not changed\n            sourceChanges = sourceChanges.map{ (path, rangeInFile, newRangeInFile) in\n                (path, rangeInFile, .init(location: newRangeInFile.location, length: 0))\n            }\n        }\n\n        rangesToReplace\n            .sorted(by: { $0.location > $1.location })\n            .forEach {\n                bridged = bridged.replacingCharacters(in: $0, with: \"\") as NSString\n            }\n        return (bridged as String, sourceChanges)\n    }\n\n    private func bodyRange(for type: Type, contentsView: StringView) -> NSRange? {\n        guard let bytesRange = type.bodyBytesRange else { return nil }\n        return contentsView.byteRangeToNSRange(ByteRange(location: ByteCount(bytesRange.offset), length: ByteCount(bytesRange.length)))\n    }\n\n    private func processFileRanges(`for` parsingResult: ParsingResult, in contents: String, outputPath: Path, forceParse: [String]) -> String {\n        let files = TemplateAnnotationsParser.parseAnnotations(\"file\", contents: contents, aggregate: true, forceParse: forceParse)\n\n        files\n            .annotatedRanges\n            .map { ($0, $1) }\n            .forEach({ (filePath, ranges) in\n                let generatedBody = ranges.map { contents.bridge().substring(with: $0.range) }.joined(separator: \"\\n\")\n                let path = outputPath + (Path(filePath).extension == nil ? \"\\(filePath).generated.swift\" : filePath)\n                var fileContents = fileAnnotatedContent[path] ?? []\n                fileContents.append(generatedBody)\n                fileAnnotatedContent[path] = fileContents\n            })\n        return files.contents\n    }\n\n    fileprivate func writeIfChanged(_ content: String, to path: Path) throws {\n        guard path.exists else {\n            return try path.write(content)\n        }\n\n        let existing = try path.read(.utf8)\n        if existing != content {\n            try path.write(content)\n        }\n    }\n\n    private func indent(toInsert: String, indentation: String) -> String {\n        guard indentation.isEmpty == false else {\n            return toInsert\n        }\n        let lines = toInsert.components(separatedBy: \"\\n\")\n        return lines.enumerated()\n            .map { index, line in\n                guard !line.isEmpty else {\n                    return line\n                }\n\n                return index == lines.count - 1 ? line : indentation + line\n            }\n            .joined(separator: \"\\n\")\n    }\n\n    internal func generatedPath(`for` templatePath: Path) -> Path {\n        return Path(\"\\(templatePath.lastComponentWithoutExtension).generated.swift\")\n    }\n}\n"
  },
  {
    "path": "Sourcery/Templates/Coding.stencil",
    "content": "// swiftlint:disable vertical_whitespace trailing_newline\n\nimport Foundation\n\n\nextension NSCoder {\n\n    @nonobjc func decode(forKey: String) -> String? {\n        return self.maybeDecode(forKey: forKey) as String?\n    }\n\n    @nonobjc func decode(forKey: String) -> TypeName? {\n        return self.maybeDecode(forKey: forKey) as TypeName?\n    }\n\n    @nonobjc func decode(forKey: String) -> AccessLevel? {\n        return self.maybeDecode(forKey: forKey) as AccessLevel?\n    }\n\n    @nonobjc func decode(forKey: String) -> Bool {\n        return self.decodeBool(forKey: forKey)\n    }\n\n    @nonobjc func decode(forKey: String) -> Int {\n        return self.decodeInteger(forKey: forKey)\n    }\n\n    func decode<E>(forKey: String) -> E? {\n        return maybeDecode(forKey: forKey) as E?\n    }\n\n    fileprivate func maybeDecode<E>(forKey: String) -> E? {\n        guard let object = self.decodeObject(forKey: forKey) else {\n            return nil\n        }\n\n        return object as? E\n    }\n\n}\n\n{% for type in types.implementing.AutoCoding|class|!annotated:\"skipCoding\" %}\n{% if not type.supertype.implements.AutoCoding %}extension {{ type.name }}: NSCoding {}{% endif %}\n    // sourcery:inline:{{ type.name }}.AutoCoding\n\n        /// :nodoc:\n        required {{ type.accessLevel }} init?(coder aDecoder: NSCoder) {\n            {% for variable in type.storedVariables|!annotated:\"skipCoding\" %}{% if variable.typeName.name == \"Bool\" or variable.typeName.name == \"Int\" %}self.{{variable.name}} = aDecoder.decode(forKey: \"{{variable.name}}\"){% elif variable.typeName.name == \"Int32\" or variable.typeName.name == \"Int64\" %}self.{{variable.name}} = aDecoder.decode{{variable.typeName.name}}(forKey: \"{{variable.name}}\"){% else %}{% if not variable.typeName.isOptional %}guard let {{variable.name}}: {{ variable.typeName.unwrappedTypeName }} = aDecoder.decode(forKey: \"{{variable.name}}\") else { \n                withVaList([\"{{ variable.name }}\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.{{variable.name}} = {{variable.name}}{% else %}self.{{variable.name}} = aDecoder.{% if variable.typeName.unwrappedTypeName == \"Any\" %}decodeObject{% else %}decode{% endif %}(forKey: \"{{variable.name}}\"){% endif %}{% endif %}\n            {% endfor %}{% if type.supertype.implements.AutoCoding %}super.init(coder: aDecoder){% endif %}\n        }\n\n        /// :nodoc:\n        {% if type.supertype.implements.AutoCoding %}override {% endif %}{{ type.accessLevel }} func encode(with aCoder: NSCoder) {\n            {% if type.supertype.implements.AutoCoding %}super.encode(with: aCoder){% endif %}\n            {% for variable in type.storedVariables|!annotated:\"skipCoding\" %}aCoder.encode(self.{{variable.name}}, forKey: \"{{variable.name}}\")\n            {% endfor %}\n        }\n    // sourcery:end\n    {% endfor %}\n"
  },
  {
    "path": "Sourcery/Templates/Description.stencil",
    "content": "// swiftlint:disable vertical_whitespace\n\n\n{% for type in types.implementing.AutoDescription|class %} {% if type.variables.count %}\nextension {{ type.name }} {\n    /// :nodoc:\n    override {{ type.accessLevel }} var description: String {\n        var string = {% if type.inheritedTypes.first == \"NSObject\" %}\"\\(Swift.type(of: self)): \"{% else %}super.description\n        string += \", \"{% endif %}\n        {% for variable in type.variables|!annotated:\"skipDescription\" %}string += \"{{ variable.name }} = \\(String(describing: self.{{ variable.name }})){% if not forloop.last %}, {% endif %}\"\n        {% endfor %}return string\n    }\n}\n{% endif %}{% endfor %}\n"
  },
  {
    "path": "Sourcery/Templates/Diffable.stencil",
    "content": "import Foundation\n\n{% for type in types.implementing.AutoDiffable|!protocol|!annotated:\"skipDiffing\" %}\nextension {{ type.name }}{% if not type.supertype.implements.AutoDiffable %}: Diffable{% endif %} {\n    {% if type.based.Type %}override {% else %}@objc {% endif %}public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? {{ type.name }} else {\n            results.append(\"Incorrect type <expected: {{ type.name }}, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        {% for variable in type.storedVariables|!annotated:\"skipEquality\" %}results.append(contentsOf: DiffableResult(identifier: \"{{ variable.name }}\").trackDifference(actual: self.{{ variable.name }}, expected: castObject.{{ variable.name }}))\n        {% endfor %}\n        {% if type.supertype.implements.AutoDiffable %}results.append(contentsOf: super.diffAgainst(castObject))\n        return results{% else %}return results{% endif %}\n    }\n}{% endfor %}\n"
  },
  {
    "path": "Sourcery/Templates/Equality.stencil",
    "content": "// swiftlint:disable vertical_whitespace\n\n\n{% for type in types.implementing.AutoEquatable|class %}\nextension {{ type.name }} {\n    /// :nodoc:\n    {{ type.accessLevel }} override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? {{ type.name }} else { return false }\n        {% for variable in type.storedVariables|!annotated:\"skipEquality\" %}if self.{{ variable.name }} != rhs.{{ variable.name }} { return false }\n        {% endfor %}\n        {% for variable in type.computedVariables|annotated:\"forceEquality\" %}if self.{{ variable.name }} != rhs.{{ variable.name }} { return false }\n        {% endfor %}\n        {% if type.inheritedTypes.first == \"NSObject\" %}return true{% else %}return super.isEqual(rhs){% endif %}\n    }\n}\n{% endfor %}\n\n{% for type in types.implementing.AutoEquatable|class %}\n// MARK: - {{ type.name }} AutoHashable\nextension {{ type.name }} {\n    {{ type.accessLevel }} override var hash: Int {\n        var hasher = Hasher()\n        {% for variable in type.storedVariables|!annotated:\"skipEquality\" %}hasher.combine(self.{{ variable.name }})\n        {% endfor %}\n        {% for variable in type.computedVariables|annotated:\"forceEquality\" %}hasher.combine({{ variable.name }})\n        {% endfor %}\n        {% if not type.inheritedTypes.first == \"NSObject\" %}hasher.combine(super.hash){% endif %}\n        return hasher.finalize()\n    }\n}\n{% endfor %}\n"
  },
  {
    "path": "Sourcery/Templates/JSExport.ejs",
    "content": "// swiftlint:disable vertical_whitespace trailing_newline\n\n#if canImport(JavaScriptCore)\nimport JavaScriptCore\n\n<%_ for (type of types.implementing.AutoJSExport) { -%>\n<%_ if (type.kind != \"protocol\" && !type.annotations.skipJSExport) { -%>\n@objc protocol <%= type.name %>AutoJSExport: JSExport {\n    <%_ for (variable of type.allVariables) { -%>\n    <%_ if (!variable.annotations.skipJSExport) { -%>\n    var <%= variable.name %>: <%= variable.typeName.name %> { get }\n    <%_ } -%>\n    <%_ } -%>\n}\n\nextension <%= type.name %>: <%= type.name %>AutoJSExport {}\n<%_ } %>\n<%_ } %>\n#endif"
  },
  {
    "path": "Sourcery/Templates/Typed.stencil",
    "content": "// swiftlint:disable vertical_whitespace\n\n\n{% for type in types.implementing.Typed %}\nextension {{ type.name }} {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    {{ type.accessLevel }} var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    {{ type.accessLevel }} var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    {{ type.accessLevel }} var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    {{ type.accessLevel }} var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    {{ type.accessLevel }} var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    {{ type.accessLevel }} var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    {{ type.accessLevel }} var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    {{ type.accessLevel }} var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    {{ type.accessLevel }} var isDictionary: Bool { return typeName.isDictionary }\n}{% endfor %}\n"
  },
  {
    "path": "Sourcery/Templates/TypedSpec.stencil",
    "content": "//sourcery:file:../../../SourceryTests/Models/TypedSpec\nimport Quick\nimport Nimble\n#if SWIFT_PACKAGE\nimport SourceryLib\n#else\nimport Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\n\n// swiftlint:disable function_body_length\n\nclass TypedSpec: QuickSpec {\n    override func spec() {\n        {% for type in types.implementing.Typed %}\n        describe(\"{{ type.name }}\") {\n            func typeName(_ code: String) -> TypeName {\n                let wrappedCode =\n                  \"\"\"\n                  struct Wrapper {\n                      var myFoo: \\(code)\n                  }\n                  \"\"\"\n                guard let parser = try? makeParser(for: wrappedCode) else { fail(); return TypeName(name: \"\") }\n                let result = try? parser.parse()\n                let variable = result?.types.first?.variables.first\n                return variable?.typeName ?? TypeName(name: \"\")\n            }\n\n#if canImport(ObjectiveC)\n            it(\"can report optional via KVC\") {\n                expect({{ type.name }}({% if type.name == \"MethodParameter\" %}index: 0, {% endif %}typeName: typeName(\"Int?\")).value(forKeyPath: \"isOptional\") as? Bool).to(equal(true))\n                expect({{ type.name }}({% if type.name == \"MethodParameter\" %}index: 0, {% endif %}typeName: typeName(\"Int!\")).value(forKeyPath: \"isOptional\") as? Bool).to(equal(true))\n                expect({{ type.name }}({% if type.name == \"MethodParameter\" %}index: 0, {% endif %}typeName: typeName(\"Int?\")).value(forKeyPath: \"isImplicitlyUnwrappedOptional\") as? Bool).to(equal(false))\n                expect({{ type.name }}({% if type.name == \"MethodParameter\" %}index: 0, {% endif %}typeName: typeName(\"Int!\")).value(forKeyPath: \"isImplicitlyUnwrappedOptional\") as? Bool).to(equal(true))\n                expect({{ type.name }}({% if type.name == \"MethodParameter\" %}index: 0, {% endif %}typeName: typeName(\"Int?\")).value(forKeyPath: \"unwrappedTypeName\") as? String).to(equal(\"Int\"))\n            }\n\n            it(\"can report tuple type via KVC\") {\n                let sut = {{ type.name }}({% if type.name == \"MethodParameter\" %}index: 0, {% endif %}typeName: typeName(\"(Int, Int)\"))\n                expect(sut.value(forKeyPath: \"isTuple\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report closure type via KVC\") {\n                let sut = {{ type.name }}({% if type.name == \"MethodParameter\" %}index: 0, {% endif %}typeName: typeName(\"(Int) -> (Int)\"))\n                expect(sut.value(forKeyPath: \"isClosure\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report array type via KVC\") {\n                let sut = {{ type.name }}({% if type.name == \"MethodParameter\" %}index: 0, {% endif %}typeName: typeName(\"[Int]\"))\n                expect(sut.value(forKeyPath: \"isArray\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report set type via KVC\") {\n                let sut = {{ type.name }}({% if type.name == \"MethodParameter\" %}index: 0, {% endif %}typeName: typeName(\"Set<Int>\"))\n                expect(sut.value(forKeyPath: \"isSet\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report dictionary type via KVC\") {\n                let sut = {{ type.name }}({% if type.name == \"MethodParameter\" %}index: 0, {% endif %}typeName: typeName(\"[Int: Int]\"))\n                expect(sut.value(forKeyPath: \"isDictionary\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report actual type name via KVC\") {\n                let sut = {{ type.name }}({% if type.name == \"MethodParameter\" %}index: 0, {% endif %}typeName: typeName(\"Alias\"))\n                expect(sut.value(forKeyPath: \"actualTypeName\") as? TypeName).to(equal(typeName(\"Alias\")))\n\n                sut.typeName.actualTypeName = typeName(\"Int\")\n                expect(sut.value(forKeyPath: \"actualTypeName\") as? TypeName).to(equal(typeName(\"Int\")))\n            }\n#endif\n        }\n        {% endfor %}\n    }\n}\n//sourcery:end\n"
  },
  {
    "path": "Sourcery/Utils/ByteRangeConversion.swift",
    "content": "//\n//  ByteRangeConversion.swift\n//  Sourcery\n//\n//  Created by Evgeniy Gubin on 16.04.2021.\n//  Copyright © 2021 Pixle. All rights reserved.\n//\n\nimport class SourceryRuntime.BytesRange\nimport struct SourceryFramework.ByteRange\nimport struct SourceryFramework.ByteCount\n\nextension ByteRange {\n    init(bytesRange: BytesRange) {\n        self.init(location: ByteCount(bytesRange.offset), length: ByteCount(bytesRange.length))\n    }\n}\n\nextension BytesRange {\n    convenience init(byteRange: ByteRange) {\n        self.init(offset: Int64(byteRange.location.value), length: Int64(byteRange.length.value))\n    }\n}\n"
  },
  {
    "path": "Sourcery/Utils/BytesRange + Editing.swift",
    "content": "//\n//  BytesRange + Editing.swift\n//  Sourcery\n//\n//  Created by Evgeniy Gubin on 16.04.2021.\n//  Copyright © 2021 Pixle. All rights reserved.\n//\n\nimport class SourceryRuntime.BytesRange\nimport struct SourceryFramework.ByteRange\nimport struct SourceryFramework.ByteCount\n\nextension BytesRange {\n    /*\n     See ByteRange.changingContent(_:)\n     */\n    func changingContent(_ change: ByteRange) -> BytesRange {\n        let byteRange = ByteRange(bytesRange: self)\n        let result = byteRange.editingContent(change)\n        return BytesRange(byteRange: result)\n    }\n}\n"
  },
  {
    "path": "Sourcery/Utils/DryOutputModels.swift",
    "content": "import Foundation\n\nstruct DryOutputType: Codable {\n    enum SubType: String, Codable {\n        case allTemplates\n        case template\n        case path\n        case range\n    }\n\n    let id: String?\n    let subType: SubType\n\n    static var allTemplates: DryOutputType {\n        .init(id: nil, subType: .allTemplates)\n    }\n    static func template(_ path: String) -> DryOutputType {\n        .init(id: path, subType: .template)\n    }\n    static func path(_ path: String) -> DryOutputType {\n        .init(id: path, subType: .path)\n    }\n    static func range(_ range: NSRange, in file: String) -> DryOutputType {\n        let startIndex = range.location\n        let endIndex = range.location + range.length\n\n        if startIndex == endIndex {\n            return .init(id: \"\\(file):\\(startIndex)\", subType: .range)\n        }\n\n        return .init(id: \"\\(file):\\(startIndex)-\\(endIndex)\", subType: .range)\n    }\n}\n\nstruct DryOutputValue: Codable {\n    let type: DryOutputType\n    let outputPath: String\n    let value: String\n}\n\nstruct DryOutputSuccess: Codable {\n    let outputs: [DryOutputValue]\n}\n\npublic struct DryOutputFailure: Codable {\n    public let error: String\n    public let log: [String]\n\n    public init(error: String, log: [String]) {\n        self.error = error\n        self.log = log\n    }\n}\n"
  },
  {
    "path": "Sourcery/Utils/FolderWatcher.swift",
    "content": "//\n//  FolderWatcher.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zabłocki on 24/12/2016.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n#if canImport(ObjectiveC)\npublic enum FolderWatcher {\n\n    struct Event {\n        let path: String\n        let flags: Flag\n\n        struct Flag: OptionSet {\n            let rawValue: FSEventStreamEventFlags\n            init(rawValue: FSEventStreamEventFlags) {\n                self.rawValue = rawValue\n            }\n            init(_ value: Int) {\n                self.rawValue = FSEventStreamEventFlags(value)\n            }\n\n            static let isDirectory = Flag(kFSEventStreamEventFlagItemIsDir)\n            static let isFile = Flag(kFSEventStreamEventFlagItemIsFile)\n\n            static let created = Flag(kFSEventStreamEventFlagItemCreated)\n            static let modified = Flag(kFSEventStreamEventFlagItemModified)\n            static let removed = Flag(kFSEventStreamEventFlagItemRemoved)\n            static let renamed = Flag(kFSEventStreamEventFlagItemRenamed)\n\n            static let isHardlink = Flag(kFSEventStreamEventFlagItemIsHardlink)\n            static let isLastHardlink = Flag(kFSEventStreamEventFlagItemIsLastHardlink)\n            static let isSymlink = Flag(kFSEventStreamEventFlagItemIsSymlink)\n            static let changeOwner = Flag(kFSEventStreamEventFlagItemChangeOwner)\n            static let finderInfoModified = Flag(kFSEventStreamEventFlagItemFinderInfoMod)\n            static let inodeMetaModified = Flag(kFSEventStreamEventFlagItemInodeMetaMod)\n            static let xattrsModified = Flag(kFSEventStreamEventFlagItemXattrMod)\n\n            var description: String {\n\n                var names: [String] = []\n                if self.contains(.isDirectory) { names.append(\"isDir\") }\n                if self.contains(.isFile) { names.append(\"isFile\") }\n\n                if self.contains(.created) { names.append(\"created\") }\n                if self.contains(.modified) { names.append(\"modified\") }\n                if self.contains(.removed) { names.append(\"removed\") }\n                if self.contains(.renamed) { names.append(\"renamed\") }\n\n                if self.contains(.isHardlink) { names.append(\"isHardlink\") }\n                if self.contains(.isLastHardlink) { names.append(\"isLastHardlink\") }\n                if self.contains(.isSymlink) { names.append(\"isSymlink\") }\n                if self.contains(.changeOwner) { names.append(\"changeOwner\") }\n                if self.contains(.finderInfoModified) { names.append(\"finderInfoModified\") }\n                if self.contains(.inodeMetaModified) { names.append(\"inodeMetaModified\") }\n                if self.contains(.xattrsModified) { names.append(\"xattrsModified\") }\n\n                return names.joined(separator: \", \")\n            }\n        }\n    }\n\n    public class Local {\n        private let path: String\n        private var stream: FSEventStreamRef!\n        private let closure: (_ events: [Event]) -> Void\n\n        /// Creates folder watcher.\n        ///\n        /// - Parameters:\n        ///   - path: Path to observe\n        ///   - latency: Latency to use\n        ///   - closure: Callback closure\n        init(path: String, latency: TimeInterval = 1/60, closure: @escaping (_ events: [Event]) -> Void) {\n            self.path = path\n            self.closure = closure\n\n            func handler(_ stream: ConstFSEventStreamRef, clientCallbackInfo: UnsafeMutableRawPointer?, numEvents: Int, eventPaths: UnsafeMutableRawPointer, eventFlags: UnsafePointer<FSEventStreamEventFlags>, eventIDs: UnsafePointer<FSEventStreamEventId>) {\n                let eventStream = unsafeBitCast(clientCallbackInfo, to: Local.self)\n                let paths = unsafeBitCast(eventPaths, to: NSArray.self)\n\n                let events = (0..<numEvents).compactMap { idx in\n                    return (paths[idx] as? String).flatMap { Event(path: $0, flags: Event.Flag(rawValue: eventFlags[idx])) }\n                }\n\n                eventStream.closure(events)\n            }\n\n            var context = FSEventStreamContext()\n            context.info = unsafeBitCast(self, to: UnsafeMutableRawPointer.self)\n            let flags = UInt32(kFSEventStreamCreateFlagUseCFTypes | kFSEventStreamCreateFlagFileEvents)\n\n            stream = FSEventStreamCreate(nil, handler, &context, [path] as CFArray, FSEventStreamEventId(kFSEventStreamEventIdSinceNow), latency, flags)\n\n            FSEventStreamScheduleWithRunLoop(stream, CFRunLoopGetCurrent(), CFRunLoopMode.defaultMode.rawValue)\n            FSEventStreamStart(stream)\n        }\n\n        deinit {\n            FSEventStreamStop(stream)\n            FSEventStreamInvalidate(stream)\n            FSEventStreamRelease(stream)\n        }\n    }\n}\n#else\npublic enum FolderWatcher {\n\n    struct Event {\n        let path: String\n        let flags: Flag\n\n        struct Flag: OptionSet {\n            let rawValue: UInt\n\n            static let isFile = Flag(rawValue: 1)\n        }\n    }\n    public class Local {\n        private let path: String\n        \n        private let closure: (_ events: [Event]) -> Void\n\n        /// Creates folder watcher.\n        ///\n        /// - Parameters:\n        ///   - path: Path to observe\n        ///   - latency: Latency to use\n        ///   - closure: Callback closure\n        init(path: String, latency: TimeInterval = 1/60, closure: @escaping (_ events: [Event]) -> Void) {\n            self.path = path\n            self.closure = closure\n        }\n    }\n}\n#endif\n"
  },
  {
    "path": "Sourcery/Utils/NSRange + Editing.swift",
    "content": "//\n// Created by hemet_000 on 14.04.2021.\n//\n\nimport Foundation\nimport struct SourceryFramework.ByteRange\nimport struct SourceryFramework.ByteCount\n\nextension NSRange {\n    /*\n     See ByteRange.changingContent(_:)\n     */\n    func changingContent(_ change: NSRange) -> NSRange {\n        let byteRange = ByteRange(location: ByteCount(location), length: ByteCount(length))\n        let changeByteRange = ByteRange(location: ByteCount(change.location), length: ByteCount(change.length))\n        let result = byteRange.editingContent(changeByteRange)\n        return NSRange(location: result.location.value, length: result.length.value)\n    }\n}\n"
  },
  {
    "path": "Sourcery/Utils/Xcode+Extensions.swift",
    "content": "import Foundation\nimport PathKit\nimport XcodeProj\nimport SourceryRuntime\n\nprivate struct UnableToAddSourceFile: Error {\n    var targetName: String\n    var path: String\n}\n\nextension XcodeProj {\n\n    func target(named targetName: String) -> PBXTarget? {\n        return pbxproj.targets(named: targetName).first\n    }\n\n    func fullPath<E: PBXFileElement>(fileElement: E, sourceRoot: Path) -> Path? {\n        return try? fileElement.fullPath(sourceRoot: sourceRoot)\n    }\n\n    func sourceFilesPaths(target: PBXTarget, sourceRoot: Path) -> [Path] {\n        let sourceFiles = (try? target.sourceFiles()) ?? []\n        return sourceFiles\n            .compactMap({ fullPath(fileElement: $0, sourceRoot: sourceRoot) })\n    }\n\n    var rootGroup: PBXGroup? {\n        do {\n            return try pbxproj.rootGroup()\n        } catch {\n            Log.error(\"Can't find root group for pbxproj\")\n            return nil\n        }\n    }\n\n    func addGroup(named groupName: String, to toGroup: PBXGroup, options: GroupAddingOptions = []) -> PBXGroup? {\n        do {\n            return try toGroup.addGroup(named: groupName, options: options).last\n        } catch {\n            Log.error(\"Can't add group \\(groupName) to group (uuid: \\(toGroup.uuid), name: \\(String(describing: toGroup.name))\")\n            return nil\n        }\n    }\n\n    func addSourceFile(at filePath: Path, toGroup: PBXGroup, target: PBXTarget, sourceRoot: Path) throws {\n        let fileReference = try toGroup.addFile(at: filePath, sourceRoot: sourceRoot)\n        let file = PBXBuildFile(file: fileReference, product: nil, settings: nil)\n\n        guard let fileElement = file.file, let sourcePhase = try target.sourcesBuildPhase() else {\n            throw UnableToAddSourceFile(targetName: target.name, path: filePath.string)\n        }\n        let buildFile = try sourcePhase.add(file: fileElement)\n        pbxproj.add(object: buildFile)\n    }\n\n    func createGroupIfNeeded(named group: String? = nil, sourceRoot: Path) -> PBXGroup? {\n\n        guard let rootGroup = rootGroup else {\n            Log.warning(\"Unable to find rootGroup for the project\")\n            return nil\n        }\n\n        guard let group = group else {\n            return rootGroup\n        }\n\n        var fileGroup: PBXGroup = rootGroup\n        var parentGroup: PBXGroup = rootGroup\n        let components = group.components(separatedBy: \"/\")\n\n        // Find existing group to reuse\n        // Having `ProjectRoot/Data/` exists and given group to create `ProjectRoot/Data/Generated`\n        // will create `Generated` group under ProjectRoot/Data to link files to\n        let existingGroup = findGroup(in: fileGroup, components: components, validate: { $0?.path == $1 || $0?.name == $1 })\n\n        var groupName: String?\n\n        switch existingGroup {\n        case let (group, components) where group != nil:\n            if components.isEmpty {\n                // Group path is already exists\n                fileGroup = group!\n            } else {\n                // Create rest of the group and attach to last found parent\n                groupName = components.joined(separator: \"/\")\n                parentGroup = group!\n            }\n        default:\n            // Create new group from scratch\n            groupName = group\n        }\n\n        if let groupName = groupName {\n            do {\n                if let addedGroup = addGroup(named: groupName, to: parentGroup),\n                   let groupPath = fullPath(fileElement: addedGroup, sourceRoot: sourceRoot) {\n                    fileGroup = addedGroup\n                    try groupPath.mkpath()\n                }\n            } catch {\n                Log.warning(\"Failed to create a folder for group '\\(fileGroup.name ?? \"\")'. \\(error)\")\n            }\n        }\n        return fileGroup\n    }\n\n}\n\nprivate extension XcodeProj {\n\n    func findGroup(in group: PBXGroup, components: [String], validate: (PBXFileElement?, String?) -> Bool) -> (group: PBXGroup?, components: [String]) {\n        return components.reduce((group: group as PBXGroup?, components: components)) { current, name in\n            let first = current.group?.children.first { validate($0, name) } as? PBXGroup\n            let result = first ?? current.group\n            return (result, current.components.filter { !validate(result, $0) })\n        }\n    }\n}\n"
  },
  {
    "path": "Sourcery-Example/CodeGenerated/Basic.generated.swift",
    "content": "// Found 2 Types\n//  AppDelegate   ViewController\n"
  },
  {
    "path": "Sourcery-Example/Podfile",
    "content": "# Uncomment the next line to define a global platform for your project\n# platform :ios, '9.0'\n\ntarget 'Sourcery-Example' do\n  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks\n  use_frameworks!\n\n  pod 'Sourcery'\nend\n"
  },
  {
    "path": "Sourcery-Example/Sourcery-Example/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  Sourcery-Example\n//\n//  Created by Krzysztof Zablocki on 11/12/2016.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    var window: UIWindow?\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {\n        // Override point for customization after application launch.\n        return true\n    }\n\n    func applicationWillResignActive(_ application: UIApplication) {\n        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n        // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.\n    }\n\n    func applicationDidEnterBackground(_ application: UIApplication) {\n        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n    }\n\n    func applicationWillEnterForeground(_ application: UIApplication) {\n        // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.\n    }\n\n    func applicationDidBecomeActive(_ application: UIApplication) {\n        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n    }\n\n    func applicationWillTerminate(_ application: UIApplication) {\n        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n    }\n\n}\n"
  },
  {
    "path": "Sourcery-Example/Sourcery-Example/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Sourcery-Example/Sourcery-Example/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"11134\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"11106\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Llm-lL-Icb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xb3-aO-Qok\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Sourcery-Example/Sourcery-Example/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"11134\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"11106\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"ViewController\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Sourcery-Example/Sourcery-Example/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sourcery-Example/Sourcery-Example/ViewController.swift",
    "content": "//\n//  ViewController.swift\n//  Sourcery-Example\n//\n//  Created by Krzysztof Zablocki on 11/12/2016.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport UIKit\n\nclass ViewController: UIViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        // Do any additional setup after loading the view, typically from a nib.\n    }\n\n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n\n}\n"
  },
  {
    "path": "Sourcery-Example/Sourcery-Example.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t34CCB887B3207379DB00C8C5 /* Pods_Sourcery_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49752C023C6E494348990AB1 /* Pods_Sourcery_Example.framework */; };\n\t\tCDE744371DFDBEE4008F034F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDE744361DFDBEE4008F034F /* AppDelegate.swift */; };\n\t\tCDE744391DFDBEE4008F034F /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDE744381DFDBEE4008F034F /* ViewController.swift */; };\n\t\tCDE7443C1DFDBEE4008F034F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CDE7443A1DFDBEE4008F034F /* Main.storyboard */; };\n\t\tCDE7443E1DFDBEE4008F034F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CDE7443D1DFDBEE4008F034F /* Assets.xcassets */; };\n\t\tCDE744411DFDBEE4008F034F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CDE7443F1DFDBEE4008F034F /* LaunchScreen.storyboard */; };\n\t\tCDE7444D1DFDBF1E008F034F /* Basic.generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDE7444A1DFDBF1E008F034F /* Basic.generated.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t1EFEACB54B4325DABA1DBB07 /* Pods-Sourcery-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Sourcery-Example.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-Sourcery-Example/Pods-Sourcery-Example.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t49752C023C6E494348990AB1 /* Pods_Sourcery_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Sourcery_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tCDE744331DFDBEE4008F034F /* Sourcery-Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = \"Sourcery-Example.app\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tCDE744361DFDBEE4008F034F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\tCDE744381DFDBEE4008F034F /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = \"<group>\"; };\n\t\tCDE7443B1DFDBEE4008F034F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tCDE7443D1DFDBEE4008F034F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tCDE744401DFDBEE4008F034F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\tCDE744421DFDBEE4008F034F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tCDE7444A1DFDBF1E008F034F /* Basic.generated.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Basic.generated.swift; sourceTree = \"<group>\"; };\n\t\tCDE7444C1DFDBF1E008F034F /* Basic.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Basic.stencil; sourceTree = \"<group>\"; };\n\t\tE4A9E5091819FB951D4B3A46 /* Pods-Sourcery-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Sourcery-Example.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-Sourcery-Example/Pods-Sourcery-Example.release.xcconfig\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tCDE744301DFDBEE4008F034F /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t34CCB887B3207379DB00C8C5 /* Pods_Sourcery_Example.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\tA178E0EAA2A3D943868853A9 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t49752C023C6E494348990AB1 /* Pods_Sourcery_Example.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA8996A44841590FAAE2A4932 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1EFEACB54B4325DABA1DBB07 /* Pods-Sourcery-Example.debug.xcconfig */,\n\t\t\t\tE4A9E5091819FB951D4B3A46 /* Pods-Sourcery-Example.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tCDE7442A1DFDBEE4008F034F = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCDE744491DFDBF1E008F034F /* CodeGenerated */,\n\t\t\t\tCDE7444B1DFDBF1E008F034F /* Templates */,\n\t\t\t\tCDE744351DFDBEE4008F034F /* Sourcery-Example */,\n\t\t\t\tCDE744341DFDBEE4008F034F /* Products */,\n\t\t\t\tA8996A44841590FAAE2A4932 /* Pods */,\n\t\t\t\tA178E0EAA2A3D943868853A9 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tCDE744341DFDBEE4008F034F /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCDE744331DFDBEE4008F034F /* Sourcery-Example.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tCDE744351DFDBEE4008F034F /* Sourcery-Example */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCDE744361DFDBEE4008F034F /* AppDelegate.swift */,\n\t\t\t\tCDE744381DFDBEE4008F034F /* ViewController.swift */,\n\t\t\t\tCDE7443A1DFDBEE4008F034F /* Main.storyboard */,\n\t\t\t\tCDE7443D1DFDBEE4008F034F /* Assets.xcassets */,\n\t\t\t\tCDE7443F1DFDBEE4008F034F /* LaunchScreen.storyboard */,\n\t\t\t\tCDE744421DFDBEE4008F034F /* Info.plist */,\n\t\t\t);\n\t\t\tpath = \"Sourcery-Example\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tCDE744491DFDBF1E008F034F /* CodeGenerated */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCDE7444A1DFDBF1E008F034F /* Basic.generated.swift */,\n\t\t\t);\n\t\t\tpath = CodeGenerated;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tCDE7444B1DFDBF1E008F034F /* Templates */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCDE7444C1DFDBF1E008F034F /* Basic.stencil */,\n\t\t\t);\n\t\t\tpath = Templates;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tCDE744321DFDBEE4008F034F /* Sourcery-Example */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = CDE744451DFDBEE4008F034F /* Build configuration list for PBXNativeTarget \"Sourcery-Example\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tCF5282FB5B7BED7A23689E75 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tCDE744481DFDBF02008F034F /* Sourcery */,\n\t\t\t\tCDE7442F1DFDBEE4008F034F /* Sources */,\n\t\t\t\tCDE744301DFDBEE4008F034F /* Frameworks */,\n\t\t\t\tCDE744311DFDBEE4008F034F /* Resources */,\n\t\t\t\t4EBFAE0E1A61E496337AD26D /* [CP] Embed Pods Frameworks */,\n\t\t\t\tDC0863A8265E3FBE00248C74 /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"Sourcery-Example\";\n\t\t\tproductName = \"Sourcery-Example\";\n\t\t\tproductReference = CDE744331DFDBEE4008F034F /* Sourcery-Example.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tCDE7442B1DFDBEE4008F034F /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0820;\n\t\t\t\tLastUpgradeCheck = 0820;\n\t\t\t\tORGANIZATIONNAME = Pixle;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tCDE744321DFDBEE4008F034F = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.2;\n\t\t\t\t\t\tDevelopmentTeam = 9XH89LE46J;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = CDE7442E1DFDBEE4008F034F /* Build configuration list for PBXProject \"Sourcery-Example\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = CDE7442A1DFDBEE4008F034F;\n\t\t\tproductRefGroup = CDE744341DFDBEE4008F034F /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tCDE744321DFDBEE4008F034F /* Sourcery-Example */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tCDE744311DFDBEE4008F034F /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tCDE744411DFDBEE4008F034F /* LaunchScreen.storyboard in Resources */,\n\t\t\t\tCDE7443E1DFDBEE4008F034F /* Assets.xcassets in Resources */,\n\t\t\t\tCDE7443C1DFDBEE4008F034F /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t4EBFAE0E1A61E496337AD26D /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-Sourcery-Example/Pods-Sourcery-Example-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tCDE744481DFDBF02008F034F /* Sourcery */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = Sourcery;\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Sourcery/bin/sourcery\\\" --sources \\\"${SRCROOT}/Sourcery-Example\\\" --templates \\\"${SRCROOT}/Templates\\\" --output \\\"${SRCROOT}/CodeGenerated\\\"\";\n\t\t};\n\t\tCF5282FB5B7BED7A23689E75 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_ROOT}/../Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tDC0863A8265E3FBE00248C74 /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-Sourcery-Example/Pods-Sourcery-Example-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tCDE7442F1DFDBEE4008F034F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tCDE744391DFDBEE4008F034F /* ViewController.swift in Sources */,\n\t\t\t\tCDE7444D1DFDBF1E008F034F /* Basic.generated.swift in Sources */,\n\t\t\t\tCDE744371DFDBEE4008F034F /* AppDelegate.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\tCDE7443A1DFDBEE4008F034F /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tCDE7443B1DFDBEE4008F034F /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tCDE7443F1DFDBEE4008F034F /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tCDE744401DFDBEE4008F034F /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\tCDE744431DFDBEE4008F034F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.2;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tCDE744441DFDBEE4008F034F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.2;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tCDE744461DFDBEE4008F034F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 1EFEACB54B4325DABA1DBB07 /* Pods-Sourcery-Example.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tDEVELOPMENT_TEAM = 9XH89LE46J;\n\t\t\t\tINFOPLIST_FILE = \"Sourcery-Example/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"Pixle.Sourcery-Example\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tCDE744471DFDBEE4008F034F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E4A9E5091819FB951D4B3A46 /* Pods-Sourcery-Example.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tDEVELOPMENT_TEAM = 9XH89LE46J;\n\t\t\t\tINFOPLIST_FILE = \"Sourcery-Example/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"Pixle.Sourcery-Example\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tCDE7442E1DFDBEE4008F034F /* Build configuration list for PBXProject \"Sourcery-Example\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tCDE744431DFDBEE4008F034F /* Debug */,\n\t\t\t\tCDE744441DFDBEE4008F034F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tCDE744451DFDBEE4008F034F /* Build configuration list for PBXNativeTarget \"Sourcery-Example\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tCDE744461DFDBEE4008F034F /* Debug */,\n\t\t\t\tCDE744471DFDBEE4008F034F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = CDE7442B1DFDBEE4008F034F /* Project object */;\n}\n"
  },
  {
    "path": "Sourcery-Example/Sourcery-Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:Sourcery-Example.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Sourcery-Example/Sourcery-Example.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Sourcery-Example.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Sourcery-Example/Templates/Basic.stencil",
    "content": "// Found {{ types.all.count }} Types\n// {% for type in types.all %} {{ type.name }}  {% endfor %}\n"
  },
  {
    "path": "Sourcery.podspec",
    "content": "Pod::Spec.new do |s|\n\n  s.name         = \"Sourcery\"\n  s.version      = \"2.3.0\"\n  s.summary      = \"A tool that brings meta-programming to Swift, allowing you to code generate Swift code.\"\n  s.ios.deployment_target = '12'\n  s.osx.deployment_target = '10.15'\n  s.tvos.deployment_target = '12'\n  s.watchos.deployment_target = '4'\n\n  s.description  = <<-DESC\n                 A tool that brings meta-programming to Swift, allowing you to code generate Swift code.\n                   * Featuring daemon mode that allows you to write templates side-by-side with generated code.\n                   * Using SourceKit so you can scan your regular code.\n                   DESC\n\n  s.homepage     = \"https://github.com/krzysztofzablocki/Sourcery\"\n  s.license      = 'MIT'\n  s.author       = { \"Krzysztof Zabłocki\" => \"krzysztof.zablocki@pixle.pl\" }\n  s.social_media_url = \"https://twitter.com/merowing_\"\n\n  s.source       = { :http => \"https://github.com/krzysztofzablocki/Sourcery/releases/download/#{s.version}/sourcery-#{s.version}.zip\" }\n  s.preserve_paths = '*'\n  s.exclude_files = '**/file.zip'\n\n  s.subspec 'CLI-Only' do |subspec|\n    subspec.preserve_paths = \"bin\"\n  end\nend\n"
  },
  {
    "path": "SourceryExecutable/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>$(MACOSX_DEPLOYMENT_TARGET)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2016 Pixle. All rights reserved.</string>\n\t<key>NSMainNibFile</key>\n\t<string>MainMenu</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "SourceryExecutable/main.swift",
    "content": "//\n//  main.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zablocki on 09/12/2016.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\nimport Commander\nimport PathKit\nimport SourceryRuntime\nimport SourceryFramework\nimport SourceryUtils\nimport SourceryJS\nimport SourceryLib\n\nextension Path: ArgumentConvertible {\n    /// :nodoc:\n    public init(parser: ArgumentParser) throws {\n        if let path = parser.shift() {\n            self.init(path)\n        } else {\n            throw ArgumentError.missingValue(argument: nil)\n        }\n    }\n}\n\nprivate enum Validators {\n    static func isReadable(path: Path) -> Path {\n        if !path.isReadable {\n            Log.error(\"'\\(path)' does not exist or is not readable.\")\n            exit(.invalidePath)\n        }\n\n        return path\n    }\n\n    static func isFileOrDirectory(path: Path) -> Path {\n        _ = isReadable(path: path)\n\n        if !(path.isDirectory || path.isFile) {\n            Log.error(\"'\\(path)' isn't a directory or proper file.\")\n            exit(.invalidePath)\n        }\n\n        return path\n    }\n\n    static func isWritable(path: Path) -> Path {\n        if path.exists && !path.isWritable {\n            Log.error(\"'\\(path)' isn't writable.\")\n            exit(.invalidePath)\n        }\n        return path\n    }\n}\n\nextension Configuration {\n\n    func validate() {\n        guard !source.isEmpty else {\n            Log.error(\"No sources provided.\")\n            exit(.invalidConfig)\n        }\n        if case let .sources(sources) = source {\n            _ = sources.allPaths.map(Validators.isReadable(path:))\n        }\n\n        guard !templates.isEmpty else {\n            Log.error(\"No templates provided.\")\n            exit(.invalidConfig)\n        }\n        _ = templates.allPaths.map(Validators.isReadable(path:))\n        _ = output.path.map(Validators.isWritable(path:))\n    }\n\n}\n\nenum ExitCode: Int32 {\n    case invalidePath = 1\n    case invalidConfig\n    case other\n}\n\nprivate func exit(_ code: ExitCode) -> Never {\n    exit(code.rawValue)\n}\n\n#if canImport(ObjectiveC)\nfunc runCLI() {\n    command(\n        Flag(\"watch\", flag: \"w\", description: \"Watch template for changes and regenerate as needed.\"),\n        Flag(\"disableCache\", description: \"Stops using cache.\"),\n        Flag(\"verbose\", flag: \"v\", description: \"Turn on verbose logging, this causes to log everything we can.\"),\n        Flag(\"logAST\", description: \"Log AST messages\"),\n        Flag(\"logBenchmarks\", description: \"Log time benchmark info\"),\n        Flag(\"parseDocumentation\", description: \"Include documentation comments for all declarations.\"),\n        Flag(\"quiet\", flag: \"q\", description: \"Turn off any logging, only emmit errors.\"),\n        Flag(\"prune\", flag: \"p\", description: \"Remove empty generated files\"),\n        Flag(\"serialParse\", description: \"Parses the specified sources in serial, rather than in parallel (the default), which can address stability issues in SwiftSyntax.\"),\n        VariadicOption<Path>(\"sources\", description: \"Path to a source swift files. File or Directory.\"),\n        VariadicOption<Path>(\"exclude-sources\", description: \"Path to a source swift files to exclude. File or Directory.\"),\n        VariadicOption<Path>(\"templates\", description: \"Path to templates. File or Directory.\"),\n        VariadicOption<Path>(\"exclude-templates\", description: \"Path to templates to exclude. File or Directory.\"),\n        Option<Path>(\"output\", default: \"\", description: \"Path to output. File or Directory. Default is current path.\"),\n        Flag(\"dry\", default: false, description: \"Dry run, without file system modifications, will output result and errors in JSON format. Not working with --watch.\"),\n        VariadicOption<Path>(\"config\", default: [\".\"], description: \"Path to config file. File or Directory. Default is current path.\"),\n        VariadicOption<String>(\"force-parse\", description: \"File extensions that Sourcery will be forced to parse, even if they were generated by Sourcery.\"),\n        Option<Int>(\"base-indentation\", default: 0, description: \"Base indendation to add to sourcery:auto fragments.\"),\n        VariadicOption<String>(\"args\", description:\n        \t\"\"\"\n        \tAdditional arguments to pass to templates. Each argument can have an explicit value or will have \\\n        \tan implicit `true` value. Arguments should be comma-separated without spaces (e.g. --args arg1=value,arg2) \\\n        \tor should be passed one by one (e.g. --args arg1=value --args arg2). Arguments are accessible in templates \\\n        \tvia `argument.<name>`. To pass in string you should use escaped quotes (\\\\\").\n        \t\"\"\"),\n        Option<Path>(\"ejsPath\", default: \"\", description: \"Path to EJS file for JavaScript templates.\"),\n        Option<Path>(\"cacheBasePath\", default: \"\", description: \"Base path to Sourcery's cache directory\"),\n        Option<Path>(\"buildPath\", default: \"\", description: \"Sets a custom build path\"),\n        Flag(\"hideVersionHeader\", description: \"Do not include Sourcery version in the generated files headers.\"),\n        Option<String?>(\"headerPrefix\", default: nil, description: \"Additional prefix for headers.\")\n    ) { watcherEnabled, disableCache, verboseLogging, logAST, logBenchmark, parseDocumentation, quiet, prune, serialParse, sources, excludeSources, templates, excludeTemplates, output, isDryRun, configPaths, forceParse, baseIndentation, args, ejsPath, cacheBasePath, buildPath, hideVersionHeader, headerPrefix in\n        do {\n            let logConfiguration = Log.Configuration(\n                isDryRun: isDryRun,\n                isQuiet: quiet,\n                isVerboseLoggingEnabled: verboseLogging,\n                isLogBenchmarkEnabled: logBenchmark,\n                shouldLogAST: logAST\n            )\n            Log.setup(using: logConfiguration)\n\n            // if ejsPath is not provided use default value or executable path\n            EJSTemplate.ejsPath = ejsPath.string.isEmpty\n                ? (EJSTemplate.ejsPath ?? Path(ProcessInfo.processInfo.arguments[0]).parent() + \"ejs.js\")\n                : ejsPath\n\n            let configurations = configPaths.flatMap { configPath -> [Configuration] in\n                let yamlPath: Path = configPath.isDirectory ? configPath + \".sourcery.yml\" : configPath\n\n                if !yamlPath.exists {\n                    Log.info(\"No config file provided or it does not exist. Using command line arguments.\")\n                    let args = args.joined(separator: \",\")\n                    let arguments = AnnotationsParser.parse(line: args)\n                    return [\n                        Configuration(\n                            sources: Paths(include: sources, exclude: excludeSources) ,\n                            templates: Paths(include: templates, exclude: excludeTemplates),\n                            output: output.string.isEmpty ? \".\" : output,\n                            cacheBasePath: cacheBasePath.string.isEmpty ? Path.defaultBaseCachePath : cacheBasePath,\n                            forceParse: forceParse,\n                            parseDocumentation: parseDocumentation,\n                            baseIndentation: baseIndentation,\n                            args: arguments\n                        )\n                    ]\n                } else {\n                    _ = Validators.isFileOrDirectory(path: configPath)\n                    _ = Validators.isReadable(path: yamlPath)\n\n                    do {\n                        let relativePath: Path = configPath.isDirectory ? configPath : configPath.parent()\n\n                        // Check if the user is passing parameters\n                        // that are ignored cause read from the yaml file\n                        let hasAnyYamlDuplicatedParameter = (\n                            !sources.isEmpty ||\n                                !excludeSources.isEmpty ||\n                                !templates.isEmpty ||\n                                !excludeTemplates.isEmpty ||\n                                !forceParse.isEmpty ||\n                                output != \"\" ||\n                                !args.isEmpty\n                        )\n\n                        if hasAnyYamlDuplicatedParameter {\n                            Log.info(\"Using configuration file at '\\(yamlPath)'. WARNING: Ignoring the parameters passed in the command line.\")\n                        } else {\n                            Log.info(\"Using configuration file at '\\(yamlPath)'\")\n                        }\n\n                        return try Configurations.make(\n                            path: yamlPath,\n                            relativePath: relativePath,\n                            env: ProcessInfo.processInfo.environment\n                        )\n                    } catch {\n                        Log.error(\"while reading .yml '\\(yamlPath)'. '\\(error)'\")\n                        exit(.invalidConfig)\n                    }\n                }\n            }\n\n            let start = currentTimestamp()\n\n            let keepAlive = try configurations.flatMap { configuration -> [FolderWatcher.Local] in\n                configuration.validate()\n                \n                let shouldUseCacheBasePathArg = configuration.cacheBasePath == Path.defaultBaseCachePath && !cacheBasePath.string.isEmpty\n\n                let sourcery = Sourcery(verbose: verboseLogging,\n                                        watcherEnabled: watcherEnabled,\n                                        cacheDisabled: disableCache,\n                                        cacheBasePath: shouldUseCacheBasePathArg ? cacheBasePath : configuration.cacheBasePath,\n                                        buildPath: buildPath.string.isEmpty ? nil : buildPath,\n                                        prune: prune,\n                                        serialParse: serialParse,\n                                        hideVersionHeader: hideVersionHeader,\n                                        arguments: configuration.args,\n                                        headerPrefix: headerPrefix)\n\n                if isDryRun, watcherEnabled {\n                    throw \"--dry not compatible with --watch\"\n                }\n\n                return try sourcery.processFiles(\n                    configuration.source,\n                    usingTemplates: configuration.templates,\n                    output: configuration.output,\n                    isDryRun: isDryRun,\n                    forceParse: configuration.forceParse,\n                    parseDocumentation: configuration.parseDocumentation,\n                    baseIndentation: configuration.baseIndentation\n                ) ?? []\n            }\n\n            if keepAlive.isEmpty {\n                Log.info(String(format: \"Processing time %.2f seconds\", currentTimestamp() - start))\n            } else {\n                RunLoop.current.run()\n                withExtendedLifetime(keepAlive) {\n                    _ = keepAlive\n                }\n            }\n        } catch {\n            if isDryRun {\n                let encoder = JSONEncoder()\n                encoder.outputFormatting = .prettyPrinted\n                let data = try? encoder.encode(DryOutputFailure(error: \"\\(error)\",\n                                                                log: Log.messagesStack))\n                data.flatMap { Log.output(String(data: $0, encoding: .utf8) ?? \"\") }\n            } else {\n                Log.error(\"\\(error)\")\n            }\n\n            exit(.other)\n        }\n        }.run(Sourcery.version)\n}\n\nimport AppKit\n\nif !inUnitTests {\n    runCLI()\n} else {\n    // ! Need to run something for tests to work\n    final class TestApplicationController: NSObject, NSApplicationDelegate {\n        let window =   NSWindow()\n\n        func applicationDidFinishLaunching(aNotification: NSNotification) {\n            window.setFrame(CGRect(x: 0, y: 0, width: 0, height: 0), display: false)\n            window.makeKeyAndOrderFront(self)\n        }\n\n        func applicationWillTerminate(aNotification: NSNotification) {\n        }\n\n    }\n\n    autoreleasepool { () -> Void in\n        let app =   NSApplication.shared\n        let controller =   TestApplicationController()\n\n        app.delegate   = controller\n        app.run()\n    }\n}\n#else\nfunc runCLI() {\n    command(\n        Flag(\"disableCache\", description: \"Stops using cache.\"),\n        Flag(\"verbose\", flag: \"v\", description: \"Turn on verbose logging, this causes to log everything we can.\"),\n        Flag(\"logAST\", description: \"Log AST messages\"),\n        Flag(\"logBenchmarks\", description: \"Log time benchmark info\"),\n        Flag(\"parseDocumentation\", description: \"Include documentation comments for all declarations.\"),\n        Flag(\"quiet\", flag: \"q\", description: \"Turn off any logging, only emmit errors.\"),\n        Flag(\"prune\", flag: \"p\", description: \"Remove empty generated files\"),\n        Flag(\"serialParse\", description: \"Parses the specified sources in serial, rather than in parallel (the default), which can address stability issues in SwiftSyntax.\"),\n        VariadicOption<Path>(\"sources\", description: \"Path to a source swift files. File or Directory.\"),\n        VariadicOption<Path>(\"exclude-sources\", description: \"Path to a source swift files to exclude. File or Directory.\"),\n        VariadicOption<Path>(\"templates\", description: \"Path to templates. File or Directory.\"),\n        VariadicOption<Path>(\"exclude-templates\", description: \"Path to templates to exclude. File or Directory.\"),\n        Option<Path>(\"output\", default: \"\", description: \"Path to output. File or Directory. Default is current path.\"),\n        Flag(\"dry\", default: false, description: \"Dry run, without file system modifications, will output result and errors in JSON format. Not working with --watch.\"),\n        VariadicOption<Path>(\"config\", default: [\".\"], description: \"Path to config file. File or Directory. Default is current path.\"),\n        VariadicOption<String>(\"force-parse\", description: \"File extensions that Sourcery will be forced to parse, even if they were generated by Sourcery.\"),\n        Option<Int>(\"base-indentation\", default: 0, description: \"Base indendation to add to sourcery:auto fragments.\"),\n        VariadicOption<String>(\"args\", description:\n        \t\"\"\"\n        \tAdditional arguments to pass to templates. Each argument can have an explicit value or will have \\\n        \tan implicit `true` value. Arguments should be comma-separated without spaces (e.g. --args arg1=value,arg2) \\\n        \tor should be passed one by one (e.g. --args arg1=value --args arg2). Arguments are accessible in templates \\\n        \tvia `argument.<name>`. To pass in string you should use escaped quotes (\\\\\").\n        \t\"\"\"),\n        Option<Path>(\"cacheBasePath\", default: \"\", description: \"Base path to Sourcery's cache directory\"),\n        Option<Path>(\"buildPath\", default: \"\", description: \"Sets a custom build path\"),\n        Flag(\"hideVersionHeader\", description: \"Do not include Sourcery version in the generated files headers.\"),\n        Option<String?>(\"headerPrefix\", default: nil, description: \"Additional prefix for headers.\")\n    ) { disableCache, verboseLogging, logAST, logBenchmark, parseDocumentation, quiet, prune, serialParse, sources, excludeSources, templates, excludeTemplates, output, isDryRun, configPaths, forceParse, baseIndentation, args, cacheBasePath, buildPath, hideVersionHeader, headerPrefix in\n        do {\n            let logConfiguration = Log.Configuration(\n                isDryRun: isDryRun,\n                isQuiet: quiet,\n                isVerboseLoggingEnabled: verboseLogging,\n                isLogBenchmarkEnabled: logBenchmark,\n                shouldLogAST: logAST\n            )\n            Log.setup(using: logConfiguration)\n\n            let configurations = configPaths.flatMap { configPath -> [Configuration] in\n                let yamlPath: Path = configPath.isDirectory ? configPath + \".sourcery.yml\" : configPath\n\n                if !yamlPath.exists {\n                    Log.info(\"No config file provided or it does not exist. Using command line arguments.\")\n                    let args = args.joined(separator: \",\")\n                    let arguments = AnnotationsParser.parse(line: args)\n                    return [\n                        Configuration(\n                            sources: Paths(include: sources, exclude: excludeSources) ,\n                            templates: Paths(include: templates, exclude: excludeTemplates),\n                            output: output.string.isEmpty ? \".\" : output,\n                            cacheBasePath: cacheBasePath.string.isEmpty ? Path.defaultBaseCachePath : cacheBasePath,\n                            forceParse: forceParse,\n                            parseDocumentation: parseDocumentation,\n                            baseIndentation: baseIndentation,\n                            args: arguments\n                        )\n                    ]\n                } else {\n                    _ = Validators.isFileOrDirectory(path: configPath)\n                    _ = Validators.isReadable(path: yamlPath)\n\n                    do {\n                        let relativePath: Path = configPath.isDirectory ? configPath : configPath.parent()\n\n                        // Check if the user is passing parameters\n                        // that are ignored cause read from the yaml file\n                        let hasAnyYamlDuplicatedParameter = (\n                            !sources.isEmpty ||\n                                !excludeSources.isEmpty ||\n                                !templates.isEmpty ||\n                                !excludeTemplates.isEmpty ||\n                                !forceParse.isEmpty ||\n                                output != \"\" ||\n                                !args.isEmpty\n                        )\n\n                        if hasAnyYamlDuplicatedParameter {\n                            Log.info(\"Using configuration file at '\\(yamlPath)'. WARNING: Ignoring the parameters passed in the command line.\")\n                        } else {\n                            Log.info(\"Using configuration file at '\\(yamlPath)'\")\n                        }\n\n                        return try Configurations.make(\n                            path: yamlPath,\n                            relativePath: relativePath,\n                            env: ProcessInfo.processInfo.environment\n                        )\n                    } catch {\n                        Log.error(\"while reading .yml '\\(yamlPath)'. '\\(error)'\")\n                        exit(.invalidConfig)\n                    }\n                }\n            }\n\n            let start = currentTimestamp()\n\n            let keepAlive = try configurations.flatMap { configuration -> [FolderWatcher.Local] in\n                configuration.validate()\n                \n                let shouldUseCacheBasePathArg = configuration.cacheBasePath == Path.defaultBaseCachePath && !cacheBasePath.string.isEmpty\n\n                let sourcery = Sourcery(verbose: verboseLogging,\n                                        watcherEnabled: false,\n                                        cacheDisabled: disableCache,\n                                        cacheBasePath: shouldUseCacheBasePathArg ? cacheBasePath : configuration.cacheBasePath,\n                                        buildPath: buildPath.string.isEmpty ? nil : buildPath,\n                                        prune: prune,\n                                        serialParse: serialParse,\n                                        hideVersionHeader: hideVersionHeader,\n                                        arguments: configuration.args,\n                                        headerPrefix: headerPrefix)\n\n                return try sourcery.processFiles(\n                    configuration.source,\n                    usingTemplates: configuration.templates,\n                    output: configuration.output,\n                    isDryRun: isDryRun,\n                    forceParse: configuration.forceParse,\n                    parseDocumentation: configuration.parseDocumentation,\n                    baseIndentation: configuration.baseIndentation\n                ) ?? []\n            }\n\n            if keepAlive.isEmpty {\n                Log.info(String(format: \"Processing time %.2f seconds\", currentTimestamp() - start))\n            } else {\n                RunLoop.current.run()\n                _ = keepAlive\n            }\n        } catch {\n            if isDryRun {\n                let encoder = JSONEncoder()\n                encoder.outputFormatting = .prettyPrinted\n                let data = try? encoder.encode(DryOutputFailure(error: \"\\(error)\",\n                                                                log: Log.messagesStack))\n                data.flatMap { Log.output(String(data: $0, encoding: .utf8) ?? \"\") }\n            } else {\n                Log.error(\"\\(error)\")\n            }\n\n            exit(.other)\n        }\n        }.run(Sourcery.version)\n}\n\nrunCLI()\n#endif\n"
  },
  {
    "path": "SourceryFramework/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2018 Pixle. All rights reserved.</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "SourceryFramework/SourceryFramework.h",
    "content": "//\n//  SourceryFramework.h\n//  SourceryFramework\n//\n//  Created by Ilya Puchka on 24/12/2018.\n//  Copyright © 2018 Pixle. All rights reserved.\n//\n\n#import <Cocoa/Cocoa.h>\n\n//! Project version number for SourceryFramework.\nFOUNDATION_EXPORT double SourceryFrameworkVersionNumber;\n\n//! Project version string for SourceryFramework.\nFOUNDATION_EXPORT const unsigned char SourceryFrameworkVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <SourceryFramework/PublicHeader.h>\n\n\n"
  },
  {
    "path": "SourceryFramework/Sources/Generating/Generator.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\nimport SourceryRuntime\n\npublic enum Generator {\n    public static func generate(_ parserResult: FileParserResult?, types: Types, functions: [SourceryMethod], template: Template, arguments: [String: NSObject] = [:]) throws -> String {\n        Log.verbose(\"Rendering template \\(template.sourcePath)\")\n        return try template.render(TemplateContext(parserResult: parserResult, types: types, functions: functions, arguments: arguments))\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Generating/SourceryTemplate.swift",
    "content": "import Foundation\n\npublic struct SourceryTemplate: Decodable {\n    public struct Instance: Decodable {\n        public enum Kind: String, Codable, Equatable {\n            case stencil\n            case ejs\n        }\n\n        public var content: String\n        public var kind: Kind\n    }\n\n    enum CodingKeys: CodingKey {\n        case instance\n    }\n    \n    public let instance: Instance\n    \n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        let data = try container.decode(Data.self, forKey: .instance)\n        instance = try JSONDecoder().decode(Instance.self, from: data)\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Generating/Template.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\nimport PathKit\nimport SourceryRuntime\n\n/// Generic template that can be used for any of the Sourcery output variants\npublic protocol Template {\n    /// Path to template\n    var sourcePath: Path { get }\n\n    /// Generate\n    ///\n    /// - Parameter types: List of types to generate.\n    /// - Parameter arguments: List of template arguments.\n    /// - Returns: Generated code.\n    /// - Throws: `Throws` template errors\n    func render(_ context: TemplateContext) throws -> String\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/FileParserType.swift",
    "content": "import Foundation\nimport PathKit\nimport SourceryRuntime\n\npublic protocol FileParserType {\n\n    var path: String? { get }\n    var modifiedDate: Date? { get }\n\n    /// Creates parser for a given contents and path.\n    /// - Throws: parsing errors.\n    init(contents: String, forceParse: [String], parseDocumentation: Bool, path: Path?, module: String?) throws\n\n    /// Parses given file context.\n    ///\n    /// - Returns: All types we could find.\n    func parse() throws -> FileParserResult\n}\n\npublic enum ParserEngine {\n    case swiftSyntax\n}\n\npublic var parserEngine: ParserEngine = .swiftSyntax\n\npublic func makeParser(for contents: String, forceParse: [String] = [], parseDocumentation: Bool = false, path: Path? = nil, module: String? = nil) throws -> FileParserType {\n    switch parserEngine {\n    case .swiftSyntax:\n        return try FileParserSyntax(contents: contents, forceParse: forceParse, parseDocumentation: parseDocumentation, path: path, module: module)\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/String+TypeInference.swift",
    "content": "import Foundation\nimport SourceryRuntime\n\nextension String {\n    private static let optionalTypeName: TypeName = {\n        let t = TypeName(name: \"Optional\", isOptional: true)\n        t.name = \"Optional\"\n        return t\n    }()\n    \n    /// infers type or return self as type if it's a single word\n    private var inferElementType: TypeName? {\n        if let inferred = inferType {\n            return inferred\n        }\n        \n        let trimmed = self.trimmed\n        if trimmed.rangeOfCharacter(from: .whitespacesAndNewlines) == nil {\n            return TypeName(trimmed)\n        }\n        \n        return nil\n    }\n    \n    /// Infers type from input string\n    internal var inferType: TypeName? {\n        let string = self\n            .trimmingCharacters(in: .whitespacesAndNewlines)\n            .strippingComments()\n            .trimmingCharacters(in: .whitespacesAndNewlines)\n        \n        // probably lazy property or default value with closure,\n        // we expect explicit type, as we don't know return type\n        guard !(string.hasPrefix(\"{\") && string.hasSuffix(\")\")) else {\n            let body = String(string.dropFirst())\n            guard !body.contains(\"return\") else {\n                return nil\n            }\n            \n            // if there is no return statement it means the return value is the first expression\n            let components = body.components(separatedBy: \"(\", excludingDelimiterBetween: (\"<[(\", \")]>\"))\n            if let first = components.first {\n                return (first + \"()\").inferType\n            }\n            return nil\n        }\n        \n        var inferredType: String\n        if string == \"nil\" {\n            // TODO: add generic\n            return Self.optionalTypeName\n        } else if string.first == \"\\\"\" {\n            return TypeName(name: \"String\")\n        } else if Bool(string) != nil {\n            return TypeName(name: \"Bool\")\n        } else if Int(string) != nil {\n            return TypeName(name: \"Int\")\n        } else if Double(string) != nil {\n            return TypeName(name: \"Double\")\n        } else if string.isValidTupleName() {\n            //tuple\n            let string = string.dropFirstAndLast()\n            let elements = string.commaSeparated()\n            \n            var types = [TupleElement]()\n            var keys = [String?]()\n            for (idx, element) in elements.enumerated() {\n                let nameAndValue = element.colonSeparated()\n                if nameAndValue.count == 1 {\n                    guard let type = element.inferType else { return nil }\n                    keys.append(nil)\n                    types.append(TupleElement(name: \"\\(idx)\", typeName: type))\n                } else {\n                    guard let type = nameAndValue[1].inferElementType else { return nil }\n                    let name = nameAndValue[0]\n                        .replacingOccurrences(of: \"_\", with: \"\")\n                        .trimmingCharacters(in: .whitespaces)\n                    if name.isEmpty {\n                        keys.append(nil)\n                        types.append(TupleElement(name: \"\\(idx)\", typeName: type))\n                    } else {\n                        keys.append(name)\n                        types.append(TupleElement(name: name, typeName: type))\n                    }\n                }\n            }\n            let body = zip(keys, types).map { key, element in\n                if let key = key {\n                    return \"\\(key): \\(element.typeName.asSource)\"\n                } else {\n                    return element.typeName.asSource\n                }\n            }.joined(separator: \", \")\n            let name = \"(\\(body))\"\n            \n            let tuple = TupleType(name: name, elements: types)\n            return TypeName(name: name, tuple: tuple)\n        } else if string.first == \"[\", string.last == \"]\" {\n            //collection\n            let string = string.dropFirstAndLast()\n            let items = string\n                .commaSeparated()\n                .map {\n                    $0\n                        .trimmingCharacters(in: .whitespacesAndNewlines)\n                        .strippingComments()\n                        .trimmingCharacters(in: .whitespacesAndNewlines)\n                }\n            \n            func genericType(from itemsTypes: [TypeName]) -> TypeName {\n                var unique = Set(itemsTypes)\n                \n                if unique.count == 1, let type = unique.first {\n                    return type\n                } else if unique.count == 2, unique.remove(Self.optionalTypeName) != nil, let type = unique.first {\n                    return TypeName(name: type.name,\n                                    isOptional: true,\n                                    isImplicitlyUnwrappedOptional: false,\n                                    tuple: type.tuple,\n                                    array: type.array,\n                                    dictionary: type.dictionary,\n                                    closure: type.closure,\n                                    set: type.set,\n                                    generic: type.generic\n                    )\n                }\n                \n                return TypeName(name: \"Any\")\n            }\n            \n            if items[0].colonSeparated().count == 1 {\n                var itemsTypes = [TypeName]()\n                for item in items {\n                    guard let type = item.inferElementType else {\n                        return nil\n                    }\n                    itemsTypes.append(type)\n                }\n                let elementType = genericType(from: itemsTypes)\n                let arrayType = ArrayType(name: \"[\\(elementType.asSource)]\", elementTypeName: elementType)\n                return TypeName(name: arrayType.name, array: arrayType, generic: arrayType.asGeneric)\n            } else {\n                var keysTypes = [TypeName]()\n                var valuesTypes = [TypeName]()\n                for items in items {\n                    let keyAndValue = items.colonSeparated()\n                    guard keyAndValue.count == 2,\n                          let keyType = keyAndValue[0].inferElementType,\n                          let valueType = keyAndValue[1].inferElementType\n                    else {\n                        return nil\n                    }\n                    \n                    keysTypes.append(keyType)\n                    valuesTypes.append(valueType)\n                }\n                let keyType = genericType(from: keysTypes)\n                let valueType = genericType(from: valuesTypes)\n                \n                let dictionaryType = DictionaryType(name: \"[\\(keyType.asSource): \\(valueType.asSource)]\", valueTypeName: valueType, keyTypeName: keyType)\n                return TypeName(name: dictionaryType.name, dictionary: dictionaryType, generic: dictionaryType.asGeneric)\n            }\n        } else if let generic = string.genericType() {\n            return TypeName(name: generic.asSource, generic: generic)\n        } else {\n            // Enums, i.e. `Optional.some(...)` or `Optional.none` should be inferred to `Optional`\n            // Contained types, i.e. `Foo.Bar()` should be inferred to `Foo.Bar`\n            // This also supports initializers i.e. `MyType.SubType.init()`\n            // But rarely enum cases can also start with capital letters, so we still may wrongly infer them as a type\n            func possibleEnumType(_ string: String) -> String? {\n                let components = string.components(separatedBy: \".\", excludingDelimiterBetween: (\"<[(\", \")]>\"))\n                if components.count > 1, let lastComponentFirstLetter = components.last?.first.map(String.init) {\n                    if lastComponentFirstLetter.lowercased() == lastComponentFirstLetter {\n                        return components\n                            .dropLast()\n                            .joined(separator: \".\")\n                    }\n                }\n                return nil\n            }\n            \n            // get everything before `(`\n            let components = string.components(separatedBy: \"(\", excludingDelimiterBetween: (\"<[(\", \")]>\"))\n            \n            // scenario for '}' is for property setter / getter logic\n            // scenario for ! is for unwrapped optional\n            let unwrappedOptional = string.last == \"!\"\n            if components.count > 1 && (string.last == \")\" || string.last == \"}\" || unwrappedOptional) {\n                //initializer without `init`\n                inferredType = components[0]\n                let name = possibleEnumType(inferredType) ?? inferredType\n                return name.inferType ?? TypeName(name + (unwrappedOptional ? \"!\" : \"\"))\n            } else {\n                return possibleEnumType(string).map { TypeName($0) }\n            }\n        }\n    }\n    \n    func strippingComments() -> String {\n        var finished: Bool\n        var stripped = self\n        repeat {\n            finished = true\n            let lines = StringView(stripped).lines\n            if lines.count > 1 {\n                stripped = lines.lazy\n                    .filter({ line in !line.content.hasPrefix(\"//\") })\n                    .map(\\.content)\n                    .joined(separator: \"\\n\")\n            }\n            if let annotationStart = stripped.range(of: \"/*\")?.lowerBound, let annotationEnd = stripped.range(of: \"*/\")?.upperBound {\n                stripped = stripped.replacingCharacters(in: annotationStart ..< annotationEnd, with: \"\")\n                    .trimmingCharacters(in: .whitespacesAndNewlines)\n                finished = false\n            }\n        } while !finished\n        \n        return stripped\n    }\n    \n    func strippingDefaultValues() -> String {\n        if let defaultValueRange = self.range(of: \"=\") {\n            return String(self[self.startIndex ..< defaultValueRange.lowerBound]).trimmingCharacters(in: .whitespaces)\n        } else {\n            return self\n        }\n    }\n    \n    fileprivate func genericType() -> GenericType? {\n        var trimmed = self.trimmed\n        \n        guard let initializerCall = trimmed.lastIndex(of: \"(\") else {\n            return nil\n        }\n        \n        trimmed = String(trimmed[..<initializerCall])\n        trimmed.trimSuffix(\".init\")\n        \n        guard let start = trimmed.firstIndex(of: \"<\"),\n              trimmed.last == \">\",\n              start > trimmed.startIndex else {\n            return nil\n        }\n        \n        let body = trimmed[trimmed.index(after: start)..<trimmed.index(before: trimmed.endIndex)]\n        return GenericType(name: String(trimmed[..<start]), typeParameters: String(body).commaSeparated().compactMap({ value in\n            let stripped = value.stripped()\n            guard !stripped.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { return nil }\n            return GenericTypeParameter(typeName: stripped.inferType ?? TypeName(stripped))\n        }))\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/AccessLevel+SwiftSyntax.swift",
    "content": "import SourceryRuntime\nimport SwiftSyntax\n\nextension AccessLevel {\n    init?(_ modifier: Modifier) {\n        switch modifier.tokenKind {\n        case .keyword(.public):\n            self = .public\n        case .keyword(.package):\n          self = .package\n        case .keyword(.private):\n            self = .private\n        case .keyword(.fileprivate):\n            self = .fileprivate\n        case .keyword(.internal):\n            self = .internal\n        case .keyword(.open), .identifier(\"open\"):\n            self = .open\n        default:\n            return nil\n        }\n    }\n\n    static func `default`(for parent: Type?) -> AccessLevel {\n        var defaultAccess = AccessLevel.internal\n        if let type = parent, type.isExtension || type is SourceryProtocol {\n            defaultAccess = AccessLevel(rawValue: type.accessLevel) ?? defaultAccess\n        }\n\n        return defaultAccess\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/Actor+SwiftSyntax.swift",
    "content": "import Foundation\nimport SourceryRuntime\nimport SwiftSyntax\n\nextension Actor {\n    convenience init(_ node: ActorDeclSyntax, parent: Type?, annotationsParser: AnnotationsParser) {\n        let modifiers = node.modifiers.map(Modifier.init)\n\n        self.init(\n          name: node.name.text.trimmingCharacters(in: .whitespaces),\n          parent: parent,\n          accessLevel: modifiers.lazy.compactMap(AccessLevel.init).first ?? .default(for: parent),\n          isExtension: false,\n          variables: [],\n          methods: [],\n          subscripts: [],\n          inheritedTypes: node.inheritanceClause?.inheritedTypes.map { $0.type.description.trimmed } ?? [],\n          containedTypes: [],\n          typealiases: [],\n          attributes: Attribute.from(node.attributes),\n          modifiers: modifiers.map(SourceryModifier.init),\n          annotations: annotationsParser.annotations(from: node),\n          documentation: annotationsParser.documentation(from: node),\n          isGeneric: node.genericParameterClause?.parameters.isEmpty == false\n        )\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/Attribute+SwiftSyntax.swift",
    "content": "import Foundation\nimport SourceryRuntime\nimport SwiftSyntax\n\nextension Attribute {\n    convenience init(_ attribute: AttributeSyntax) {\n        var arguments = [String: NSObject]()\n        attribute.arguments?.description\n          .split(separator: \",\")\n          .enumerated()\n          .forEach { (idx, part) in\n              let components = part.split(separator: \":\", maxSplits: 1)\n              switch components.count {\n              case 2:\n                  arguments[components[0].trimmed] = components[1].trimmed as NSString\n              case 1:\n                  arguments[\"\\(idx)\"] = components[0].trimmed as NSString\n              default:\n                  Log.astError(\"Unrecognized attribute format \\(attribute.arguments?.description ?? \"\")\")\n                  return\n              }\n          }\n\n        self.init(name: attribute.attributeName.description.trimmed, arguments: arguments,  description: attribute.withoutTrivia().description.trimmed)\n    }\n\n    static func from(_ attributes: AttributeListSyntax?) -> AttributeList {\n        let array = attributes?\n          .compactMap { syntax -> Attribute? in\n            if let syntax = syntax.as(AttributeSyntax.self) {\n                return Attribute(syntax)\n            } else {\n                return nil\n            }\n          } ?? []\n\n        var final = AttributeList()\n        array.forEach { attribute in\n            var attributes = final[attribute.name, default: []]\n            attributes.append(attribute)\n            final[attribute.name] = attributes\n        }\n\n        return final\n    }\n}\n\nprivate extension TokenKind {\n    var isIdentifier: Bool {\n        switch self {\n        case .identifier:\n            return true\n        default:\n            return false\n        }\n    }\n\n    var isComma: Bool {\n        switch self {\n        case .comma:\n            return true\n        default:\n            return false\n        }\n    }\n}\n\nprivate extension LabeledExprSyntax {\n    /// Returns key and value strings for a tuple element. If the tuple does not have an argument label,\n    /// `nil` will be returned for the key.\n    var keyAndValue: (key: String?, value: String) {\n        var iterator = tokens(viewMode: .fixedUp).makeIterator()\n        if let argumentLabelToken = iterator.next(),\n           let colonToken = iterator.next(),\n           case let .identifier(argumentLabel) = argumentLabelToken.tokenKind,\n           colonToken.tokenKind == .colon {\n            // This argument has a label\n            let valueText = getConcatenatedTokenText(iterator: &iterator)\n            return (argumentLabel.trimmed, valueText)\n        } else {\n            // This argument does not have a label\n            iterator = tokens(viewMode: .fixedUp).makeIterator()\n            let valueText = getConcatenatedTokenText(iterator: &iterator)\n            return (nil, valueText)\n        }\n    }\n\n    private func getConcatenatedTokenText(iterator: inout TokenSequence.Iterator) -> String {\n        var valueText = \"\"\n        var lastTokenWasComma = false\n        while let nextToken = iterator.next() {\n            lastTokenWasComma = nextToken.tokenKind.isComma\n            valueText += nextToken.text.trimmed\n        }\n\n        valueText = valueText.replacingOccurrences(of: \"\\\"\", with: \"\").trimmed\n        if lastTokenWasComma && valueText.hasSuffix(\",\") {\n            valueText.remove(at: valueText.index(before: valueText.endIndex))\n        }\n        return valueText\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/Class+SwiftSyntax.swift",
    "content": "import Foundation\nimport SourceryRuntime\nimport SwiftSyntax\n\nextension Class {\n    convenience init(_ node: ClassDeclSyntax, parent: Type?, annotationsParser: AnnotationsParser) {\n        let modifiers = node.modifiers.map(Modifier.init)\n\n        let genericRequirements: [GenericRequirement] = node.genericWhereClause?.requirements.compactMap { requirement in\n            if let sameType = requirement.requirement.as(SameTypeRequirementSyntax.self) {\n                return GenericRequirement(sameType)\n            } else if let conformanceType = requirement.requirement.as(ConformanceRequirementSyntax.self) {\n                return GenericRequirement(conformanceType)\n            }\n            return nil\n        } ?? []\n\n        self.init(\n          name: node.name.text.trimmingCharacters(in: .whitespaces),\n          parent: parent,\n          accessLevel: modifiers.lazy.compactMap(AccessLevel.init).first ?? .default(for: parent),\n          isExtension: false,\n          variables: [],\n          methods: [],\n          subscripts: [],\n          inheritedTypes: node.inheritanceClause?.inheritedTypes.map { $0.type.description.trimmed } ?? [],\n          containedTypes: [],\n          typealiases: [],\n          genericRequirements: genericRequirements,\n          attributes: Attribute.from(node.attributes),\n          modifiers: modifiers.map(SourceryModifier.init),\n          annotations: annotationsParser.annotations(from: node),\n          documentation: annotationsParser.documentation(from: node),\n          isGeneric: node.genericParameterClause?.parameters.isEmpty == false\n        )\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/Enum+SwiftSyntax.swift",
    "content": "import Foundation\nimport SourceryRuntime\nimport SwiftSyntax\n\nextension Enum {\n    convenience init(_ node: EnumDeclSyntax, parent: Type?, annotationsParser: AnnotationsParser) {\n        let modifiers = node.modifiers.map(Modifier.init)\n\n        //let rawTypeName: String? = node.inheritanceClause?.inheritedTypeCollection.first?.typeName.description.trimmed ?? nil\n        self.init(\n          name: node.name.text.trimmingCharacters(in: .whitespaces),\n          parent: parent,\n          accessLevel: modifiers.lazy.compactMap(AccessLevel.init).first ?? .default(for: parent),\n          isExtension: false,\n          inheritedTypes: node.inheritanceClause?.inheritedTypes.map { $0.type.description.trimmed } ?? [], // TODO: type name?\n          rawTypeName: nil,\n          cases: [],\n          variables: [],\n          methods: [],\n          containedTypes: [],\n          typealiases: [],\n          attributes: Attribute.from(node.attributes),\n          modifiers: modifiers.map(SourceryModifier.init),\n          annotations: annotationsParser.annotations(from: node),\n          documentation: annotationsParser.documentation(from: node),\n          isGeneric: node.genericParameterClause?.parameters.isEmpty == false\n        )\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/EnumCase+SwiftSyntax.swift",
    "content": "import Foundation\nimport SwiftSyntax\nimport SourceryRuntime\n\nextension EnumCase {\n\n    convenience init(_ node: EnumCaseElementSyntax, parent: EnumCaseDeclSyntax, annotationsParser: AnnotationsParser) {\n        var associatedValues: [AssociatedValue] = []\n        if let paramList = node.parameterClause?.parameters {\n            let hasManyValues = paramList.count > 1\n            associatedValues = paramList\n              .enumerated()\n              .map { (idx, param) in\n                  let name = param.firstName?.text.trimmed.nilIfNotValidParameterName\n                  let secondName = param.secondName?.text.trimmed\n\n                  let defaultValue = param.defaultValue?.value.description.trimmed\n                  var externalName: String? = secondName\n                  if externalName == nil, hasManyValues {\n                      externalName = name ?? \"\\(idx)\"\n                  }\n\n                  let collectedAnnotations = annotationsParser.annotations(fromToken: param.type)\n\n                  return AssociatedValue(localName: name,\n                                         externalName: externalName,\n                                         typeName: TypeName(param.type),\n                                         type: nil,\n                                         defaultValue: defaultValue,\n                                         annotations: collectedAnnotations\n                  )\n              }\n        }\n\n        let rawValue: String? = { () -> String? in\n            var value = node.rawValue?.value.withoutTrivia().description.trimmed\n            if let unwrapped = value, unwrapped.hasPrefix(\"\\\"\"), unwrapped.hasSuffix(\"\\\"\"), unwrapped.count > 2 {\n                let substring = unwrapped[unwrapped.index(after: unwrapped.startIndex) ..< unwrapped.index(before: unwrapped.endIndex)]\n                value = String(substring)\n            }\n            return value\n        }()\n\n        let modifiers = parent.modifiers.map(Modifier.init)\n        let indirect = modifiers.contains(where: {\n            $0.tokenKind == .keyword(.indirect)\n        })\n\n        self.init(\n          name: node.name.text.trimmed,\n          rawValue: rawValue,\n          associatedValues: associatedValues,\n          annotations: annotationsParser.annotations(from: node),\n          documentation: annotationsParser.documentation(from: node),\n          indirect: indirect\n        )\n    }\n\n    static func from(_ node: EnumCaseDeclSyntax, annotationsParser: AnnotationsParser) -> [EnumCase] {\n        node.elements.compactMap {\n            EnumCase($0, parent: node, annotationsParser: annotationsParser)\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/GenericParameter+SwiftSyntax.swift",
    "content": "import Foundation\nimport SwiftSyntax\nimport SourceryRuntime\n\nextension GenericParameter {\n    convenience init(_ node: GenericParameterSyntax) {\n        self.init(name: node.name.description.trimmed, inheritedTypeName: node.inheritedType.flatMap(TypeName.init(_:)))\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/GenericRequirement+SwiftSyntax.swift",
    "content": "import Foundation\nimport SwiftSyntax\nimport SourceryRuntime\n\nextension GenericRequirement {\n    convenience init(_ node: SameTypeRequirementSyntax) {\n        let leftType = node.leftType.description.trimmed\n        let rightTypeName = TypeName(node.rightType.description.trimmed)\n        let rightType = Type(name: rightTypeName.unwrappedTypeName, isGeneric: true)\n        let protocolType = SourceryProtocol(name: rightTypeName.unwrappedTypeName, implements: [rightTypeName.unwrappedTypeName: rightType])\n        self.init(leftType: .init(name: leftType), rightType: .init(typeName: rightTypeName, type: protocolType), relationship: .equals)\n    }\n\n    convenience init(_ node: ConformanceRequirementSyntax) {\n        let leftType = node.leftType.description.trimmed\n        let rightTypeName = TypeName(node.rightType.description.trimmed)\n        let rightType = Type(name: rightTypeName.unwrappedTypeName, isGeneric: true)\n        let protocolType = SourceryProtocol(name: rightTypeName.unwrappedTypeName, implements: [rightTypeName.unwrappedTypeName: rightType])\n        self.init(leftType: .init(name: leftType), rightType: .init(typeName: rightTypeName, type: protocolType), relationship: .conformsTo)\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/GenericType+SwiftSyntax.swift",
    "content": "import Foundation\nimport SourceryRuntime\nimport SwiftSyntax\n\nextension GenericType {\n    convenience init(name: String, node: GenericArgumentClauseSyntax) {\n        #if compiler(>=6.2)\n        // TODO: ExprSyntax may need to be handled\n        let parameters = node.arguments.compactMap { argument -> GenericTypeParameter? in\n            switch argument.argument {\n            case .type(let type):\n                let typeName = TypeName(type)\n                guard !typeName.name.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { return nil }\n                return GenericTypeParameter(typeName: typeName)\n            default: // case .expr\n                return nil\n            }\n        }\n        #else\n        let parameters = node.arguments.compactMap { argument -> GenericTypeParameter? in\n            let typeName = TypeName(argument.argument)\n            guard !typeName.name.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { return nil }\n            return GenericTypeParameter(typeName: typeName)\n        }\n        #endif\n\n        self.init(name: name, typeParameters: parameters)\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/Method+SwiftSyntax.swift",
    "content": "import Foundation\nimport SwiftSyntax\nimport SourceryRuntime\n\nextension SourceryMethod {\n    convenience init(_ node: FunctionDeclSyntax, parent: Type?, typeName: TypeName?, annotationsParser: AnnotationsParser) {\n        self.init(\n          node: node,\n          parent: parent,\n          identifier: node.name.text.trimmed,\n          typeName: typeName,\n          signature: Signature(node.signature, annotationsParser: annotationsParser, parent: parent),\n          modifiers: node.modifiers,\n          attributes: node.attributes,\n          genericParameterClause: node.genericParameterClause,\n          genericWhereClause: node.genericWhereClause,\n          annotationsParser: annotationsParser\n        )\n    }\n\n    convenience init(_ node: InitializerDeclSyntax, parent: Type, typeName: TypeName, annotationsParser: AnnotationsParser) {\n        let signature = node.signature\n        self.init(\n          node: node,\n          parent: parent,\n          identifier: \"init\\(node.optionalMark?.text.trimmed ?? \"\")\",\n          typeName: typeName,\n          signature: Signature(\n            parameters: signature.parameterClause.parameters,\n            output: nil,\n            asyncKeyword: nil,\n            throwsOrRethrowsKeyword: signature.effectSpecifiers?.throwsClause?.throwsSpecifier.description.trimmed,\n            throwsTypeName: signature.effectSpecifiers?.throwsClause?.type.map { TypeName($0) },\n            annotationsParser: annotationsParser,\n            parent: parent\n          ),\n          modifiers: node.modifiers,\n          attributes: node.attributes,\n          genericParameterClause: node.genericParameterClause,\n          genericWhereClause: node.genericWhereClause,\n          annotationsParser: annotationsParser\n        )\n    }\n\n    convenience init(_ node: DeinitializerDeclSyntax, parent: Type, typeName: TypeName, annotationsParser: AnnotationsParser) {\n        self.init(\n          node: node,\n          parent: parent,\n          identifier: \"deinit\",\n          typeName: typeName,\n          signature: Signature(\n            parameters: nil,\n            output: nil,\n            asyncKeyword: nil,\n            throwsOrRethrowsKeyword: nil,\n            throwsTypeName: nil,\n            annotationsParser: annotationsParser,\n            parent: parent\n          ),\n          modifiers: node.modifiers,\n          attributes: node.attributes,\n          genericParameterClause: nil,\n          genericWhereClause: nil,\n          annotationsParser: annotationsParser\n        )\n    }\n\n    convenience init(\n      node: DeclSyntaxProtocol,\n      parent: Type?,\n      identifier: String,\n      typeName: TypeName?,\n      signature: Signature,\n      modifiers: DeclModifierListSyntax?,\n      attributes: AttributeListSyntax?,\n      genericParameterClause: GenericParameterClauseSyntax?,\n      genericWhereClause: GenericWhereClauseSyntax?,\n      annotationsParser: AnnotationsParser\n    ) {\n        let initializerNode = node as? InitializerDeclSyntax\n\n        let modifiers = modifiers?.map(Modifier.init) ?? []\n        let baseModifiers = modifiers.baseModifiers(parent: parent)\n\n        var returnTypeName: TypeName\n        if let initializer = initializerNode, let typeName = typeName {\n            if let optional = initializer.optionalMark {\n                returnTypeName = TypeName(name: typeName.name + optional.text.trimmed)\n            } else {\n                returnTypeName = typeName\n            }\n        } else {\n            returnTypeName = signature.output ?? TypeName(name: \"Void\")\n        }\n\n        let funcName = identifier.last == \"?\" ? String(identifier.dropLast()) : identifier\n        var fullName = identifier\n        if let generics = genericParameterClause?.parameters {\n            fullName = funcName + \"<\\(generics.description.trimmed)>\"\n        }\n\n        let genericParameters = genericParameterClause?.parameters.compactMap { parameter in\n            return GenericParameter(parameter)\n        } ?? []\n        var genericRequirements: [GenericRequirement] = []\n        if let genericWhereClause = genericWhereClause {\n            genericRequirements = genericWhereClause.requirements.compactMap { requirement in\n                if let sameType = requirement.requirement.as(SameTypeRequirementSyntax.self) {\n                    return GenericRequirement(sameType)\n                } else if let conformanceType = requirement.requirement.as(ConformanceRequirementSyntax.self) {\n                    return GenericRequirement(conformanceType)\n                }\n                return nil\n            }\n\n            if !genericParameters.isEmpty {\n                // assign types from `where` clause to the associated generic parameters\n                for parameter in genericParameters where parameter.inheritedTypeName == nil {\n                    if let lookupInGenericReqs = genericRequirements.first(where: {\n                        $0.leftType.name == parameter.name\n                    }) {\n                        parameter.inheritedTypeName = lookupInGenericReqs.rightType.typeName\n                    }\n                }\n            }\n\n            // TODO: TBR\n            returnTypeName = TypeName(name: returnTypeName.name + \" \\(genericWhereClause.withoutTrivia().description.trimmed)\",\n                                      unwrappedTypeName: returnTypeName.unwrappedTypeName,\n                                      attributes: returnTypeName.attributes,\n                                      isOptional: returnTypeName.isOptional,\n                                      isImplicitlyUnwrappedOptional: returnTypeName.isImplicitlyUnwrappedOptional,\n                                      tuple: returnTypeName.tuple,\n                                      array: returnTypeName.array,\n                                      dictionary: returnTypeName.dictionary,\n                                      closure: returnTypeName.closure,\n                                      set: returnTypeName.set,\n                                      generic: returnTypeName.generic\n            )\n        }\n\n        let name = signature.definition(with: fullName)\n        let selectorName = signature.selector(with: funcName)\n\n        let annotations: Annotations\n        let documentation: Documentation\n        if let function = node as? FunctionDeclSyntax {\n            annotations = annotationsParser.annotations(from: function)\n            documentation = annotationsParser.documentation(from: function)\n        } else {\n            annotations = annotationsParser.annotations(fromToken: node)\n            documentation = annotationsParser.documentation(fromToken: node)\n        }\n\n        self.init(\n          name: name,\n          selectorName: selectorName,\n          parameters: signature.input,\n          returnTypeName: returnTypeName,\n          isAsync: signature.asyncKeyword == \"async\",\n          throws: signature.throwsOrRethrowsKeyword == \"throws\" && !(signature.throwsTypeName?.isNever ?? false),\n          throwsTypeName: signature.throwsOrRethrowsKeyword == \"throws\" ? signature.throwsTypeName : nil,\n          rethrows: signature.throwsOrRethrowsKeyword == \"rethrows\",\n          accessLevel: baseModifiers.readAccess,\n          isStatic: initializerNode != nil ? true : baseModifiers.isStatic,\n          isClass: baseModifiers.isClass,\n          isFailableInitializer: initializerNode?.optionalMark != nil,\n          attributes: Attribute.from(attributes),\n          modifiers: modifiers.map(SourceryModifier.init),\n          annotations: annotations,\n          documentation: documentation,\n          definedInTypeName: typeName,\n          genericRequirements: genericRequirements,\n          genericParameters: genericParameters\n        )\n    }\n\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/MethodParameter+SwiftSyntax.swift",
    "content": "import SwiftSyntax\nimport SourceryRuntime\n\nextension MethodParameter {\n    convenience init(_ node: FunctionParameterSyntax, index: Int, annotationsParser: AnnotationsParser, parent: Type?) {\n        let firstName = node.firstName.text.trimmed.nilIfNotValidParameterName\n\n        let isVisitingTypeSourceryProtocol = parent is SourceryProtocol\n        let specifiers = TypeName.specifiers(from: node.type)\n\n        // NOTE: This matches implementation in Variable+SwiftSyntax.swift\n        // TODO: Walk up the `parent` in the event that there are multiple levels of nested types\n        var typeName = TypeName(node.type)\n        if !isVisitingTypeSourceryProtocol {\n            // we are in a custom type, which may contain other types\n            // in order to assign correct type to the variable, we need to match\n            // all of the contained types against the variable type\n            if let matchingContainedType = parent?.containedTypes.first(where: { $0.localName == typeName.name }) {\n                typeName = TypeName(matchingContainedType.name)\n            }\n        }\n\n        if specifiers.isInOut {\n            // TODO: TBR\n            typeName.name = \"inout \\(typeName.name)\"\n        }\n        \n        self.init(\n          argumentLabel: firstName,\n          name: node.secondName?.text.trimmed ?? firstName ?? \"\",\n          index: index,\n          typeName: typeName,\n          type: nil,\n          defaultValue: node.defaultValue?.value.description.trimmed,\n          annotations: node.firstToken(viewMode: .sourceAccurate).map { annotationsParser.annotations(fromToken: $0) } ?? [:],\n          isInout: specifiers.isInOut,\n          isVariadic: node.ellipsis != nil\n        )\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/Modifier+SwiftSyntax.swift",
    "content": "import Foundation\nimport SwiftSyntax\nimport SourceryRuntime\n\n/// modifier can be thing like `private`, `class`, `nonmutating`\n/// if a declaration has modifier like `private(set)` it's name will be `private` and detail will be `set`\nstruct Modifier {\n    /// The declaration modifier name.\n    public let name: String\n\n    /// The modifier detail, if any.\n    public let detail: String?\n\n    /// The modifier token kind\n    public let tokenKind: TokenKind\n\n    /// Creates an instance initialized with the given syntax node.\n    public init(_ node: DeclModifierSyntax) {\n        name = node.name.text.trimmed\n        tokenKind = node.name.tokenKind\n        detail = node.detail?.detail.description.trimmed\n    }\n}\n\nextension SourceryModifier {\n    convenience init(modifier: Modifier) {\n        self.init(name: modifier.name, detail: modifier.detail)\n    }\n\n    convenience init(_ node: DeclModifierSyntax) {\n        self.init(name: node.name.text.trimmed, detail: node.detail?.description.trimmed)\n    }\n}\n\nextension Array where Element == Modifier {\n    func baseModifiers(parent: Type?) -> (readAccess: AccessLevel, writeAccess: AccessLevel, isStatic: Bool, isClass: Bool) {\n\n        var readAccess: AccessLevel = .none\n        var writeAccess: AccessLevel = .none\n        var isStatic: Bool = false\n        var isClass: Bool = false\n\n        forEach { modifier in\n            if modifier.tokenKind == .keyword(.static) {\n                isStatic = true\n            } else if modifier.tokenKind == .keyword(.class) {\n                isClass = true\n            }\n\n            guard let accessLevel = AccessLevel(modifier) else {\n                return\n            }\n\n            if let detail = modifier.detail, detail == \"set\" {\n                writeAccess = accessLevel\n            } else {\n                readAccess = accessLevel\n                if writeAccess == .none {\n                    writeAccess = accessLevel\n                }\n            }\n        }\n\n        if readAccess == .none {\n            readAccess = .default(for: parent)\n        }\n        if writeAccess == .none {\n            writeAccess = readAccess\n        }\n\n        return (readAccess: readAccess, writeAccess: writeAccess, isStatic: isStatic, isClass: isClass)\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/Protocol+SwiftSyntax.swift",
    "content": "import Foundation\nimport SourceryRuntime\nimport SwiftSyntax\n\nextension SourceryProtocol {\n    convenience init(_ node: ProtocolDeclSyntax, parent: Type?, annotationsParser: AnnotationsParser) {\n        let modifiers = node.modifiers.map(Modifier.init)\n\n        let genericRequirements: [GenericRequirement] = node.genericWhereClause?.requirements.compactMap { requirement in\n            if let sameType = requirement.requirement.as(SameTypeRequirementSyntax.self) {\n                return GenericRequirement(sameType)\n            } else if let conformanceType = requirement.requirement.as(ConformanceRequirementSyntax.self) {\n                return GenericRequirement(conformanceType)\n            }\n            return nil\n        } ?? []\n\n        self.init(\n          name: node.name.text.trimmingCharacters(in: .whitespaces),\n          parent: parent,\n          accessLevel: modifiers.lazy.compactMap(AccessLevel.init).first ?? .internal,\n          isExtension: false,\n          variables: [],\n          methods: [],\n          subscripts: [],\n          inheritedTypes: node.inheritanceClause?.inheritedTypes.map { $0.type.description.trimmed } ?? [],\n          containedTypes: [],\n          typealiases: [],\n          genericRequirements: genericRequirements,\n          attributes: Attribute.from(node.attributes),\n          modifiers: modifiers.map(SourceryModifier.init),\n          annotations: annotationsParser.annotations(from: node),\n          documentation: annotationsParser.documentation(from: node)\n        )\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/Signature.swift",
    "content": "import SwiftSyntax\nimport SourceryRuntime\n\npublic struct Signature {\n    /// The function inputs.\n    public let input: [MethodParameter]\n\n    /// The function output, if any.\n    public let output: TypeName?\n    \n    /// The `async` keyword, if any.\n    public let asyncKeyword: String?\n\n    /// The `throws` or `rethrows` keyword, if any.\n    public let throwsOrRethrowsKeyword: String?\n\n    /// The ThrownError type in `throws(ThrownError)`\n    public let throwsTypeName: TypeName?\n\n    public init(_ node: FunctionSignatureSyntax, annotationsParser: AnnotationsParser, parent: Type?) {\n        let isVisitingTypeSourceryProtocol = parent is SourceryProtocol\n\n        // NOTE: This matches implementation in Variable+SwiftSyntax.swift\n        // TODO: Walk up the `parent` in the event that there are multiple levels of nested types\n        var returnTypeName = node.returnClause.map { TypeName($0.type) }\n        if !isVisitingTypeSourceryProtocol {\n            // we are in a custom type, which may contain other types\n            // in order to assign correct type to the variable, we need to match\n            // all of the contained types against the variable type\n            if let matchingContainedType = parent?.containedTypes.first(where: { $0.localName == returnTypeName?.name }) {\n                returnTypeName = TypeName(matchingContainedType.name)\n            }\n        }\n\n        self.init(parameters: node.parameterClause.parameters,\n                  output: returnTypeName,\n                  asyncKeyword: node.effectSpecifiers?.asyncSpecifier?.text,\n                  throwsOrRethrowsKeyword: node.effectSpecifiers?.throwsClause?.throwsSpecifier.description.trimmed,\n                  throwsTypeName: node.effectSpecifiers?.throwsClause?.type.map { TypeName($0) },\n                  annotationsParser: annotationsParser,\n                  parent: parent\n        )\n    }\n\n    public init(\n        parameters: FunctionParameterListSyntax?,\n        output: TypeName?,\n        asyncKeyword: String?,\n        throwsOrRethrowsKeyword: String?,\n        throwsTypeName: TypeName?,\n        annotationsParser: AnnotationsParser,\n        parent: Type?\n    ) {\n        var methodParameters: [MethodParameter] = []\n        if let parameters {\n            for (idx, param) in parameters.enumerated() {\n                methodParameters.append(MethodParameter(param, index: idx, annotationsParser: annotationsParser, parent: parent))\n            }\n        }\n        input = methodParameters\n        self.output = output\n        self.asyncKeyword = asyncKeyword\n        self.throwsOrRethrowsKeyword = throwsOrRethrowsKeyword\n        self.throwsTypeName = throwsTypeName\n    }\n\n    public func definition(with name: String) -> String {\n        let parameters = input\n          .map { $0.asSource }\n          .joined(separator: \", \")\n\n        let final = \"\\(name)(\\(parameters))\"\n        return final\n    }\n\n    public func selector(with name: String) -> String {\n        if input.isEmpty {\n            return name\n        }\n\n        let parameters = input\n          .map { \"\\($0.argumentLabel ?? \"_\"):\" }\n          .joined(separator: \"\")\n\n        return \"\\(name)(\\(parameters))\"\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/Struct+SwiftSyntax.swift",
    "content": "import Foundation\nimport SourceryRuntime\nimport SwiftSyntax\n\nextension Struct {\n    convenience init(_ node: StructDeclSyntax, parent: Type?, annotationsParser: AnnotationsParser) {\n        let modifiers = node.modifiers.map(Modifier.init)\n\n        let genericRequirements: [GenericRequirement] = node.genericWhereClause?.requirements.compactMap { requirement in\n            if let sameType = requirement.requirement.as(SameTypeRequirementSyntax.self) {\n                return GenericRequirement(sameType)\n            } else if let conformanceType = requirement.requirement.as(ConformanceRequirementSyntax.self) {\n                return GenericRequirement(conformanceType)\n            }\n            return nil\n        } ?? []\n\n        self.init(\n          name: node.name.text.trimmed,\n          parent: parent,\n          accessLevel: modifiers.lazy.compactMap(AccessLevel.init).first ?? .default(for: parent),\n          isExtension: false,\n          variables: [],\n          methods: [],\n          subscripts: [],\n          inheritedTypes: node.inheritanceClause?.inheritedTypes.map { $0.type.description.trimmed } ?? [],\n          containedTypes: [],\n          typealiases: [],\n          genericRequirements: genericRequirements,\n          attributes: Attribute.from(node.attributes),\n          modifiers: modifiers.map(SourceryModifier.init),\n          annotations: annotationsParser.annotations(from: node),\n          documentation: annotationsParser.documentation(from: node),\n          isGeneric: node.genericParameterClause?.parameters.isEmpty == false\n        )\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/Subscript+SwiftSyntax.swift",
    "content": "import Foundation\nimport SwiftSyntax\nimport SourceryRuntime\n\nextension Subscript {\n    convenience init(_ node: SubscriptDeclSyntax, parent: Type, annotationsParser: AnnotationsParser) {\n        let modifiers = node.modifiers.map(Modifier.init)\n        let baseModifiers = modifiers.baseModifiers(parent: parent)\n        let parentAccess = AccessLevel(rawValue: parent.accessLevel) ?? .internal\n\n        var writeAccess = baseModifiers.writeAccess\n        var readAccess = baseModifiers.readAccess\n        var hadGetter = false\n        var hadSetter = false\n        var hadAsync = false\n        var hadThrowable = false\n        var hadThrowsTypeName: TypeName?\n\n        if let block = node\n          .accessorBlock {\n            enum Kind: Hashable {\n                case get(isAsync: Bool, throws: Bool, throwsTypeName: TypeName?)\n                case set\n            }\n\n          let computeAccessors: Set<Kind>\n          switch block.accessors {\n          case .getter:\n            computeAccessors = [.get(isAsync: false, throws: false, throwsTypeName: nil)]\n\n            case .accessors(let accessors):\n              computeAccessors = Set(accessors.compactMap { accessor -> Kind? in\n                  let kindRaw = accessor.accessorSpecifier.text.trimmed\n                  if kindRaw == \"get\" {\n                    return Kind.get(\n                        isAsync: accessor.effectSpecifiers?.asyncSpecifier != nil,\n                        throws: accessor.effectSpecifiers?.throwsClause?.throwsSpecifier != nil,\n                        throwsTypeName: accessor.effectSpecifiers?.throwsClause?.type.map { TypeName($0) }\n                    )\n                  }\n\n                  if kindRaw == \"set\" {\n                      return Kind.set\n                  }\n\n                  return nil\n              })\n            }\n\n            if !computeAccessors.isEmpty {\n                if !computeAccessors.contains(Kind.set) {\n                    writeAccess = .none\n                } else {\n                    hadSetter = true\n                }\n\n                for accessor in computeAccessors {\n                    if case let .get(isAsync: isAsync, throws: `throws`, throwsTypeName: throwsTypeName) = accessor {\n                        hadGetter = true\n                        hadAsync = isAsync\n                        hadThrowable = `throws`\n                        hadThrowsTypeName = throwsTypeName\n                        break\n                    }\n                }\n            }\n        } else if node.accessorBlock != nil {\n            hadGetter = true\n        }\n\n        let isComputed = hadGetter && !(parent is SourceryProtocol)\n        let isWritable = (!(parent is SourceryProtocol) && !isComputed) || hadSetter\n\n        if parent is SourceryProtocol {\n            writeAccess = parentAccess\n            readAccess = parentAccess\n        }\n\n        let genericParameters = node.genericParameterClause?.parameters.compactMap { parameter in\n            return GenericParameter(parameter)\n        } ?? []\n\n        let genericRequirements: [GenericRequirement] = node.genericWhereClause?.requirements.compactMap { requirement in\n            if let sameType = requirement.requirement.as(SameTypeRequirementSyntax.self) {\n                return GenericRequirement(sameType)\n            } else if let conformanceType = requirement.requirement.as(ConformanceRequirementSyntax.self) {\n                return GenericRequirement(conformanceType)\n            }\n            return nil\n        } ?? []\n\n        var parameters: [MethodParameter] = []\n        for (idx, param) in node.parameterClause.parameters.enumerated() {\n            parameters.append(MethodParameter(param, index: idx, annotationsParser: annotationsParser, parent: parent))\n        }\n        self.init(\n          parameters: parameters,\n          returnTypeName: TypeName(node.returnClause.type),\n          accessLevel: (read: readAccess, write: isWritable ? writeAccess : .none),\n          isAsync: hadAsync,\n          throws: hadThrowable && !(hadThrowsTypeName?.isNever ?? false),\n          throwsTypeName: hadThrowsTypeName,\n          genericParameters: genericParameters,\n          genericRequirements: genericRequirements,\n          attributes: Attribute.from(node.attributes),\n          modifiers: modifiers.map(SourceryModifier.init),\n          annotations: node.firstToken(viewMode: .sourceAccurate).map { annotationsParser.annotations(fromToken: $0) } ?? [:],\n          documentation: node.firstToken(viewMode: .sourceAccurate).map { annotationsParser.documentation(fromToken: $0) } ?? [],\n          definedInTypeName: TypeName(parent.name)\n        )\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/Type+SwiftSyntax.swift",
    "content": "import Foundation\nimport SourceryRuntime\nimport SwiftSyntax\n\nextension Type {\n    convenience init?(_ node: TypeSyntax) {\n        guard let typeIdentifier = node.as(IdentifierTypeSyntax.self) else { return nil }\n        let name = typeIdentifier.name.text.trimmed\n        let generic = typeIdentifier.genericArgumentClause.map { GenericType(name: typeIdentifier.name.text, node: $0) }\n        self.init(name: name, isGeneric: generic != nil)\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/TypeName+SwiftSyntax.swift",
    "content": "import Foundation\nimport SourceryRuntime\nimport SwiftSyntax\n\nextension SyntaxProtocol {\n    @inlinable\n    var sourcerySafeTypeIdentifier: String {\n        let content = description\n        return String(content[content.utf8.index(content.startIndex, offsetBy: leadingTriviaLength.utf8Length)..<content.utf8.index(content.endIndex, offsetBy: -trailingTriviaLength.utf8Length)])\n\n        // TBR: we only need this because we are trying to fit into old AST naming\n        // TODO: there is a bug in syntax that sometimes crashes with unexpected nil when removing trivia\n\n//        if trailingTriviaLength.utf8Length != 0 || leadingTriviaLength.utf8Length != 0 {\n////            return withoutTrivia().description.trimmed\n//        } else {\n//            return description.trimmed\n//        }\n    }\n}\n\nextension TypeName {\n    convenience init(_ node: TypeSyntax) {\n        /* TODO: redesign what `TypeName` represents, it can represent all those different variants\n         Furthermore if `TypeName` was used to store Type the whole composer process could probably be simplified / optimized?\n         */\n        if let typeIdentifier = node.as(IdentifierTypeSyntax.self) {\n            let name = typeIdentifier.name.text.trimmed // TODO: typeIdentifier.sourcerySafeTypeIdentifier ?\n            let generic = typeIdentifier.genericArgumentClause.map { GenericType(name: typeIdentifier.name.text, node: $0) }\n\n            // optional gets special treatment\n            if name == \"Optional\", let unwrappedTypeName = generic?.typeParameters.first?.typeName.name, generic?.typeParameters.count == 1 {\n                // TODO: TBR\n                self.init(name: typeIdentifier.sourcerySafeTypeIdentifier, isOptional: true, generic: nil)\n                self.unwrappedTypeName = unwrappedTypeName\n            } else {\n                // special treatment for spelled out literals\n                switch (name, generic?.typeParameters.count) {\n                case (\"Array\", 1?):\n                    let elementTypeName = generic!.typeParameters[0].typeName\n                    let array = ArrayType(name: \"Array<\\(elementTypeName.asSource)>\", elementTypeName: elementTypeName)\n                    self.init(name: array.name, array: array, generic: array.asGeneric)\n                case (\"Dictionary\", 2?):\n                    let keyTypeName = generic!.typeParameters[0].typeName\n                    let valueTypeName = generic!.typeParameters[1].typeName\n                    let dictionary = DictionaryType(name: \"Dictionary<\\(keyTypeName.asSource), \\(valueTypeName.asSource)>\", valueTypeName: valueTypeName, keyTypeName: keyTypeName)\n                    self.init(name: dictionary.name, dictionary: dictionary, generic: dictionary.asGeneric)\n                case (\"Set\", 1?):\n                    let elementTypeName = generic!.typeParameters[0].typeName\n                    let set = SetType(name: \"Set<\\(elementTypeName.asSource)>\", elementTypeName: elementTypeName)\n                    self.init(name: set.name, set: set, generic: set.asGeneric)\n                default:\n                    self.init(name: typeIdentifier.sourcerySafeTypeIdentifier, generic: generic)\n                }\n            }\n        } else if let typeIdentifier = node.as(MemberTypeSyntax.self) {\n            let base = TypeName(typeIdentifier.baseType) // TODO: VERIFY IF THIS SHOULD FULLY WRAP\n            let fullName = \"\\(base.name).\\(typeIdentifier.name.text.trimmed)\"\n            let generic = typeIdentifier.genericArgumentClause.map { GenericType(name: fullName, node: $0) }\n            if let genericComponent = generic?.typeParameters.map({ $0.typeName.asSource }).joined(separator: \", \") {\n                self.init(name: \"\\(fullName)<\\(genericComponent)>\", generic: generic)\n            } else {\n                self.init(name: fullName, generic: generic)\n            }\n        } else if let typeIdentifier = node.as(CompositionTypeSyntax.self) {\n            let types = typeIdentifier.elements.map { TypeName($0.type) }\n            let name = types.map({ $0.name }).joined(separator:\" & \")\n            self.init(name: name, isProtocolComposition: true)\n        } else if let typeIdentifier = node.as(OptionalTypeSyntax.self) {\n            let type = TypeName(typeIdentifier.wrappedType)\n            let needsWrapping = type.isClosure || type.isProtocolComposition\n            self.init(name: needsWrapping ? \"(\\(type.asSource))\" : type.name,\n                      isOptional: true,\n                      isImplicitlyUnwrappedOptional: false,\n                      tuple: type.tuple,\n                      array: type.array,\n                      dictionary: type.dictionary,\n                      closure: type.closure,\n                      set: type.set,\n                      generic: type.generic,\n                      isProtocolComposition: type.isProtocolComposition\n            )\n        } else if let typeIdentifier = node.as(ImplicitlyUnwrappedOptionalTypeSyntax.self) {\n            let type = TypeName(typeIdentifier.wrappedType)\n            let needsWrapping = type.isClosure || type.isProtocolComposition\n            self.init(name: needsWrapping ? \"(\\(type.asSource))\" : type.name,\n                      isOptional: false,\n                      isImplicitlyUnwrappedOptional: true,\n                      tuple: type.tuple,\n                      array: type.array,\n                      dictionary: type.dictionary,\n                      closure: type.closure,\n                      set: type.set,\n                      generic: type.generic,\n                      isProtocolComposition: type.isProtocolComposition\n            )\n        } else if let typeIdentifier = node.as(ArrayTypeSyntax.self) {\n            let elementType = TypeName(typeIdentifier.element)\n            let name = typeIdentifier.sourcerySafeTypeIdentifier\n            let array = ArrayType(name: name, elementTypeName: elementType)\n            self.init(name: name, array: array, generic: array.asGeneric)\n        } else if let typeIdentifier = node.as(DictionaryTypeSyntax.self) {\n            let keyType = TypeName(typeIdentifier.key)\n            let valueType = TypeName(typeIdentifier.value)\n            let name = typeIdentifier.sourcerySafeTypeIdentifier\n            let dictionary = DictionaryType(name: name, valueTypeName: valueType, keyTypeName: keyType)\n            self.init(name: name, dictionary: dictionary, generic: dictionary.asGeneric)\n        } else if let typeIdentifier = node.as(TupleTypeSyntax.self) {\n            let elements = typeIdentifier.elements.enumerated().map { idx, element -> TupleElement in\n                var firstName = element.firstName?.text.trimmed\n                let secondName = element.secondName?.text.trimmed\n\n                if firstName?.nilIfNotValidParameterName == nil, secondName == nil {\n                    firstName = \"\\(idx)\"\n                }\n\n                return TupleElement(name: firstName, typeName: TypeName(element.type))\n            }\n            let name = typeIdentifier.sourcerySafeTypeIdentifier\n\n            // TODO: TBR\n            if elements.count == 1, let type = elements.first?.typeName {\n                self.init(name: type.name,\n                          attributes: type.attributes,\n                          isOptional: type.isOptional,\n                          isImplicitlyUnwrappedOptional: type.isImplicitlyUnwrappedOptional,\n                          tuple: type.tuple,\n                          array: type.array,\n                          dictionary: type.dictionary,\n                          closure: type.closure,\n                          set: type.set,\n                          generic: type.generic,\n                          isProtocolComposition: type.isProtocolComposition\n                )\n            } else if elements.count == 0 { // Void\n                self.init(name: \"()\")\n            } else {\n                self.init(name: name, tuple: TupleType(name: name, elements: elements))\n            }\n        } else if let typeIdentifier = node.as(FunctionTypeSyntax.self) {\n            let elements = typeIdentifier.parameters.map { node -> ClosureParameter in\n                let firstName = node.firstName?.text.trimmed.nilIfNotValidParameterName\n                let typeName = TypeName(node.type)\n                let specifiers = TypeName.specifiers(from: node.type)\n                \n                return ClosureParameter(\n                  argumentLabel: firstName,\n                  name: node.secondName?.text.trimmed ?? firstName,\n                  typeName: typeName,\n                  isInout: specifiers.isInOut,\n                  isVariadic: node.ellipsis != nil\n                )\n            }\n            let returnTypeName = TypeName(typeIdentifier.returnClause.type)\n            let asyncKeyword = typeIdentifier.effectSpecifiers?.asyncSpecifier.map { $0.text.trimmed }\n            let throwsOrRethrows = typeIdentifier.effectSpecifiers?.throwsClause?.throwsSpecifier.text.trimmed\n            let throwsTypeName = typeIdentifier.effectSpecifiers?.throwsClause?.type.map { TypeName($0) }\n            let name = \"\\(elements.asSource)\\(asyncKeyword != nil ? \" \\(asyncKeyword!)\" : \"\")\\(throwsOrRethrows != nil ? \" \\(throwsOrRethrows!)\" : \"\")\\(throwsTypeName != nil ? \"(\\(throwsTypeName!.asSource))\": \"\") -> \\(returnTypeName.asSource)\"\n            self.init(\n                name: name,\n                closure: ClosureType(\n                    name: name,\n                    parameters: elements,\n                    returnTypeName: returnTypeName,\n                    asyncKeyword: asyncKeyword,\n                    throwsOrRethrowsKeyword: throwsOrRethrows,\n                    throwsTypeName: throwsOrRethrows == \"throws\" ? throwsTypeName : nil)\n            )\n        } else if let typeIdentifier = node.as(AttributedTypeSyntax.self) {\n            let type = TypeName(typeIdentifier.baseType) // TODO: add test for nested type with attributes at multiple level?\n            let attributes = Attribute.from(typeIdentifier.attributes)\n\n            self.init(name: type.name,\n                      attributes: attributes,\n                      isOptional: type.isOptional,\n                      isImplicitlyUnwrappedOptional: type.isImplicitlyUnwrappedOptional,\n                      tuple: type.tuple,\n                      array: type.array,\n                      dictionary: type.dictionary,\n                      closure: type.closure,\n                      set: type.set,\n                      generic: type.generic,\n                      isProtocolComposition: type.isProtocolComposition\n            )\n        } else if node.as(ClassRestrictionTypeSyntax.self) != nil {\n            self.init(name: \"AnyObject\")\n        } else if let typeIdentifier = node.as(PackExpansionTypeSyntax.self) {\n            self.init(typeIdentifier.repetitionPattern)\n        } else {\n//            assertionFailure(\"This is unexpected \\(node)\")\n            self.init(node.sourcerySafeTypeIdentifier)\n        }\n    }\n}\n\nextension TypeName {\n    static func specifiers(from type: TypeSyntax?) -> (isInOut: Bool, unused: Bool) {\n        guard let type = type else {\n            return (false, false)\n        }\n\n        var isInOut = false\n        if let typeIdentifier = type.as(AttributedTypeSyntax.self), let specifier = typeIdentifier.specifier {\n            if specifier.tokenKind == .keyword(.inout) {\n                isInOut = true\n            } else {\n                assertionFailure(\"Unhandled specifier\")\n            }\n        }\n        \n        return (isInOut, false)\n    }\n}\n\n// TODO: when I don't need to adapt to old formats\n//import Foundation\n//import SourceryRuntime\n//import SwiftSyntax\n//\n//extension TypeName {\n//    convenience init(_ node: TypeSyntax) {\n//        /* TODO: redesign what `TypeName` represents, it can represent all those different variants\n//         Furthermore if `TypeName` was used to store Type the whole composer process could probably be simplified / optimized?\n//         */\n//        if let typeIdentifier = node.as(SimpleTypeIdentifierSyntax.self) {\n//            let name = typeIdentifier.name.text.trimmed\n//            let generic = typeIdentifier.genericArgumentClause.map { GenericType(name: typeIdentifier.name.text, node: $0) }\n//\n//            // optional gets special treatment\n//            if name == \"Optional\", let wrappedTypeName = generic?.typeParameters.first?.typeName.name, generic?.typeParameters.count == 1 {\n//                self.init(name: wrappedTypeName, isOptional: true, generic: generic)\n//            } else {\n//                self.init(name: name, generic: generic)\n//            }\n//        } else if let typeIdentifier = node.as(MemberTypeIdentifierSyntax.self) {\n//            let base = TypeName(typeIdentifier.baseType) // TODO: VERIFY IF THIS SHOULD FULLY WRAP\n//            self.init(name: \"\\(base.name).\\(typeIdentifier.name.text.trimmed)\")\n//        } else if let typeIdentifier = node.as(CompositionTypeSyntax.self) {\n//            let types = typeIdentifier.elements.map { TypeName($0.type) }\n//            let name = types.map({ $0.name }).joined(separator:\" & \")\n//            self.init(name: name)\n//        } else if let typeIdentifier = node.as(OptionalTypeSyntax.self) {\n//            let type = TypeName(typeIdentifier.wrappedType)\n//            self.init(name: type.name,\n//                      isOptional: true,\n//                      isImplicitlyUnwrappedOptional: type.isImplicitlyUnwrappedOptional,\n//                      tuple: type.tuple,\n//                      array: type.array,\n//                      dictionary: type.dictionary,\n//                      closure: type.closure,\n//                      generic: type.generic\n//            )\n//        } else if let typeIdentifier = node.as(ImplicitlyUnwrappedOptionalTypeSyntax.self) {\n//            let type = TypeName(typeIdentifier.wrappedType)\n//            self.init(name: type.name,\n//                      isOptional: type.isOptional,\n//                      isImplicitlyUnwrappedOptional: true,\n//                      tuple: type.tuple,\n//                      array: type.array,\n//                      dictionary: type.dictionary,\n//                      closure: type.closure,\n//                      generic: type.generic\n//            )\n//        } else if let typeIdentifier = node.as(ArrayTypeSyntax.self) {\n//            let elementType = TypeName(typeIdentifier.elementType)\n//            let name = typeIdentifier.description.trimmed\n//            let array = ArrayType(name: name, elementTypeName: elementType)\n//            self.init(name: name, array: array, generic: array.asGeneric)\n//        } else if let typeIdentifier = node.as(DictionaryTypeSyntax.self) {\n//            let keyType = TypeName(typeIdentifier.keyType)\n//            let valueType = TypeName(typeIdentifier.valueType)\n//            let name = typeIdentifier.description.trimmed\n//            let dictionary = DictionaryType(name: name, valueTypeName: valueType, keyTypeName: keyType)\n//            self.init(name: name, dictionary: dictionary, generic: dictionary.asGeneric)\n//        } else if let typeIdentifier = node.as(TupleTypeSyntax.self) {\n//            let elements = typeIdentifier.elements.map { TupleElement(name: $0.name?.text.trimmed, secondName: $0.secondName?.text.trimmed, typeName: TypeName($0.type)) }\n//            let name = typeIdentifier.description.trimmed\n//            self.init(name: name, tuple: TupleType(name: name, elements: elements))\n//        } else if let typeIdentifier = node.as(FunctionTypeSyntax.self) {\n//            let name = typeIdentifier.description.trimmed\n//            let elements = typeIdentifier.arguments.map { TupleElement(name: $0.name?.text.trimmed, secondName: $0.secondName?.text.trimmed, typeName: TypeName($0.type)) }\n//            self.init(name: name, closure: ClosureType(name: name, parameters: elements, returnTypeName: TypeName(typeIdentifier.returnType)))\n//        } else if let typeIdentifier = node.as(AttributedTypeSyntax.self) {\n//            let type = TypeName(typeIdentifier.baseType) // TODO: add test for nested type with attributes at multiple level?\n//            let attributes = Attribute.from(typeIdentifier.attributes)\n//            self.init(name: type.name,\n//                      attributes: attributes,\n//                      isOptional: type.isOptional,\n//                      isImplicitlyUnwrappedOptional: type.isImplicitlyUnwrappedOptional,\n//                      tuple: type.tuple,\n//                      array: type.array,\n//                      dictionary: type.dictionary,\n//                      closure: type.closure,\n//                      generic: type.generic\n//            )\n//        } else if node.as(ClassRestrictionTypeSyntax.self) != nil {\n//            self.init(name: \"AnyObject\")\n//        } else {\n//            assertionFailure(\"This is unexpected \\(node)\")\n//            self.init(node.description.trimmed)\n//        }\n//    }\n//}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/AST/Variable+SwiftSyntax.swift",
    "content": "import Foundation\nimport SourceryRuntime\nimport SwiftSyntax\n\nextension Variable {\n    convenience init(\n      _ node: PatternBindingSyntax,\n      variableNode: VariableDeclSyntax,\n      readAccess: AccessLevel,\n      writeAccess: AccessLevel,\n      isStatic: Bool,\n      modifiers: [Modifier],\n      visitingType: Type?,\n      annotationParser: AnnotationsParser\n    ) {\n        var writeAccess = writeAccess\n        var hadGetter = false\n        var hadSetter = false\n        var hadAsync = false\n        var hadThrowable = false\n        var hadThrowsTypeName: TypeName?\n\n        if let block = node\n            .accessorBlock {\n            enum Kind: Hashable {\n                case get(isAsync: Bool, throws: Bool, throwsTypeName: TypeName?)\n                case set\n            }\n\n            let computeAccessors: Set<Kind>\n            switch block.accessors {\n            case .getter:\n                computeAccessors = [.get(isAsync: false, throws: false, throwsTypeName: nil)]\n\n            case .accessors(let accessors):\n              computeAccessors = Set(accessors.compactMap { accessor -> Kind? in\n                  let kindRaw = accessor.accessorSpecifier.text.trimmed\n                  if kindRaw == \"get\" {\n                      return Kind.get(\n                        isAsync: accessor.effectSpecifiers?.asyncSpecifier != nil,\n                        throws: accessor.effectSpecifiers?.throwsClause?.throwsSpecifier != nil,\n                        throwsTypeName: accessor.effectSpecifiers?.throwsClause?.type.map { TypeName($0) }\n                      )\n                  }\n\n                  if kindRaw == \"set\" {\n                      return Kind.set\n                  }\n\n                  return nil\n              })\n            }\n\n            if !computeAccessors.isEmpty {\n                if !computeAccessors.contains(Kind.set) {\n                    writeAccess = .none\n                } else {\n                    hadSetter = true\n                }\n                \n                for accessor in computeAccessors {\n                    if case let .get(isAsync: isAsync, throws: `throws`, throwsTypeName: throwsTypeName) = accessor {\n                        hadGetter = true\n                        hadAsync = isAsync\n                        hadThrowable = `throws`\n                        hadThrowsTypeName = throwsTypeName\n                        break\n                    }\n                }\n            }\n        } else if node.accessorBlock != nil {\n            hadGetter = true\n        }\n\n        let isVisitingTypeSourceryProtocol = visitingType is SourceryProtocol\n        let isComputed = node.initializer == nil && hadGetter && !isVisitingTypeSourceryProtocol\n        let isAsync = hadAsync\n        let throwsTypeName = hadThrowsTypeName\n        let `throws` = hadThrowable && !(throwsTypeName?.isNever ?? false)\n        let isWritable = variableNode.bindingSpecifier.tokens(viewMode: .fixedUp).contains { $0.tokenKind == .keyword(.var) } && (!isComputed || hadSetter)\n\n        var typeName: TypeName? = node.typeAnnotation.map { TypeName($0.type) } ??\n        node.initializer.flatMap { Self.inferType($0.value.description.trimmed) }\n        if !isVisitingTypeSourceryProtocol {\n            // we are in a custom type, which may contain other types\n            // in order to assign correct type to the variable, we need to match\n            // all of the contained types against the variable type\n            if let matchingContainedType = visitingType?.containedTypes.first(where: {\n                $0.localName == typeName?.name\n            }) {\n                typeName = TypeName(matchingContainedType.name)\n            }\n        }\n\n        self.init(\n          name: node.pattern.withoutTrivia().description.trimmed,\n          typeName: typeName ?? TypeName.unknown(description: node.description.trimmed),\n          type: nil,\n          accessLevel: (read: readAccess, write: isWritable ? writeAccess : .none),\n          isComputed: isComputed,\n          isAsync: isAsync,\n          throws: `throws`,\n          throwsTypeName: throwsTypeName,\n          isStatic: isStatic,\n          defaultValue: node.initializer?.value.description.trimmingCharacters(in: .whitespacesAndNewlines),\n          attributes: Attribute.from(variableNode.attributes),\n          modifiers: modifiers.map(SourceryModifier.init),\n          annotations: annotationParser.annotations(fromToken: variableNode.bindingSpecifier),\n          documentation: annotationParser.documentation(fromToken: variableNode.bindingSpecifier),\n          definedInTypeName: visitingType.map { TypeName($0.name) }\n        )\n    }\n\n    static func from(_ variableNode: VariableDeclSyntax, visitingType: Type?,\n                     annotationParser: AnnotationsParser) -> [Variable] {\n\n        let modifiers = variableNode.modifiers.map(Modifier.init)\n        let baseModifiers = modifiers.baseModifiers(parent: visitingType)\n\n        return variableNode.bindings.map { (node: PatternBindingSyntax) -> Variable in\n            Variable(\n              node,\n              variableNode: variableNode,\n              readAccess: baseModifiers.readAccess,\n              writeAccess: baseModifiers.writeAccess,\n              isStatic: baseModifiers.isStatic || baseModifiers.isClass,\n              modifiers: modifiers,\n              visitingType: visitingType,\n              annotationParser: annotationParser\n            )\n        }\n    }\n\n    private static func inferType(_ code: String) -> TypeName? {\n        var code = code\n        if code.hasSuffix(\"{\") {\n            code = String(code.dropLast())\n              .trimmingCharacters(in: .whitespaces)\n        }\n\n        return code.inferType\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/FileParserSyntax.swift",
    "content": "import Foundation\nimport SwiftSyntax\nimport SwiftParser\nimport PathKit\nimport SourceryRuntime\nimport SourceryUtils\n\npublic final class FileParserSyntax: SyntaxVisitor, FileParserType {\n\n    public let path: String?\n    public let modifiedDate: Date?\n\n    private let module: String?\n    private let initialContents: String\n \n    fileprivate var inlineRanges: [String: NSRange]!\n    fileprivate var inlineIndentations: [String: String]!\n    fileprivate var forceParse: [String] = []\n    fileprivate var parseDocumentation: Bool = false\n\n    /// Parses given contents.\n    /// - Throws: parsing errors.\n    public init(contents: String, forceParse: [String] = [], parseDocumentation: Bool, path: Path? = nil, module: String? = nil) throws {\n        self.path = path?.string\n        self.modifiedDate = path.flatMap({ (try? FileManager.default.attributesOfItem(atPath: $0.string)[.modificationDate]) as? Date })\n        self.module = module\n        self.initialContents = contents\n        self.forceParse = forceParse\n        self.parseDocumentation = parseDocumentation\n        super.init(viewMode: .fixedUp)\n    }\n\n    /// Parses given file context.\n    ///\n    /// - Returns: All types we could find.\n    public func parse() throws -> FileParserResult {\n        // Inline handling\n        let inline = TemplateAnnotationsParser.parseAnnotations(\"inline\", contents: initialContents, forceParse: self.forceParse)\n        let contents = inline.contents\n        inlineRanges = inline.annotatedRanges.mapValues { $0[0].range }\n        inlineIndentations = inline.annotatedRanges.mapValues { $0[0].indentation }\n\n        // Syntax walking\n        let tree = Parser.parse(source: contents)\n        let fileName = path ?? \"in-memory\"\n        let sourceLocationConverter = SourceLocationConverter(fileName: fileName, tree: tree)\n        let collector = SyntaxTreeCollector(\n          file: fileName,\n          module: module,\n          annotations: AnnotationsParser(contents: contents, parseDocumentation: parseDocumentation, sourceLocationConverter: sourceLocationConverter),\n          sourceLocationConverter: sourceLocationConverter)\n        collector.walk(tree)\n\n        collector.types.forEach {\n            $0.imports = collector.imports\n            $0.path = path\n        }\n        \n        collector.typealiases.forEach {\n            $0.imports = collector.imports\n        }\n\n        return FileParserResult(\n          path: path,\n          module: module,\n          types: collector.types,\n          functions: collector.methods,\n          typealiases: collector.typealiases,\n          inlineRanges: inlineRanges,\n          inlineIndentations: inlineIndentations,\n          modifiedDate: modifiedDate ?? Date(),\n          sourceryVersion: SourceryVersion.current.value\n        )\n    }\n\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/Syntax+Extensions.swift",
    "content": "import SwiftSyntax\n\npublic extension TriviaPiece {\n    /// Returns string value of a comment piece or nil otherwise\n    var comment: String? {\n        switch self {\n        case .spaces,\n             .tabs,\n             .verticalTabs,\n             .formfeeds,\n             .newlines,\n             .carriageReturns,\n             .carriageReturnLineFeeds,\n             .unexpectedText,\n             .backslashes,\n             .pounds:\n            return nil\n        case .lineComment(let comment),\n             .blockComment(let comment),\n             .docLineComment(let comment),\n             .docBlockComment(let comment):\n            return comment\n        }\n    }\n}\n\nprotocol IdentifierSyntax: SyntaxProtocol {\n    var identifier: TokenSyntax { get }\n}\n\nextension ActorDeclSyntax: IdentifierSyntax {}\n\nextension ClassDeclSyntax: IdentifierSyntax {}\n\nextension StructDeclSyntax: IdentifierSyntax {}\n\nextension EnumDeclSyntax: IdentifierSyntax {}\n\nextension ProtocolDeclSyntax: IdentifierSyntax {}\n\nextension FunctionDeclSyntax: IdentifierSyntax {}\n\nextension TypeAliasDeclSyntax: IdentifierSyntax {}\n\nextension OperatorDeclSyntax: IdentifierSyntax {}\n\nextension EnumCaseElementSyntax: IdentifierSyntax {}\n\nextension SyntaxProtocol {\n  func withoutTrivia() -> Self {\n    with(\\.leadingTrivia, [])\n      .with(\\.trailingTrivia, [])\n  }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/SwiftSyntax/SyntaxTreeCollector.swift",
    "content": "import SwiftSyntax\nimport SourceryRuntime\nimport SourceryUtils\nimport Foundation\n\nclass SyntaxTreeCollector: SyntaxVisitor {\n    var types = [Type]()\n    var typealiases = [Typealias]()\n    var methods = [SourceryMethod]()\n    var imports = [Import]()\n    private var visitingType: Type?\n\n    let annotationsParser: AnnotationsParser\n    let sourceLocationConverter: SourceLocationConverter\n    let module: String?\n    let file: String\n\n    init(file: String, module: String?, annotations: AnnotationsParser, sourceLocationConverter: SourceLocationConverter) {\n        self.annotationsParser = annotations\n        self.file = file\n        self.module = module\n        self.sourceLocationConverter = sourceLocationConverter\n        super.init(viewMode: .fixedUp)\n    }\n\n    private func startVisitingType(_ node: DeclSyntaxProtocol, _ builder: (_ parent: Type?) -> Type) {\n        let type = builder(visitingType)\n        let tokens = node.tokens(viewMode: .fixedUp)\n        if let open = tokens.first(where: { $0.tokenKind == .leftBrace }),\n           let close = tokens\n             .reversed()\n             .first(where: { $0.tokenKind == .rightBrace }) {\n            let startLocation = open.endLocation(converter: sourceLocationConverter)\n            let endLocation = close.startLocation(converter: sourceLocationConverter)\n            type.bodyBytesRange = SourceryRuntime.BytesRange(offset: Int64(startLocation.offset), length: Int64(endLocation.offset - startLocation.offset))\n        } else {\n            logError(\"Unable to find bodyRange for \\(type.name)\")\n        }\n\n        let startLocation = node.startLocation(converter: sourceLocationConverter, afterLeadingTrivia: true)\n        let endLocation = node.endLocation(converter: sourceLocationConverter, afterTrailingTrivia: false)\n        type.completeDeclarationRange = SourceryRuntime.BytesRange(offset: Int64(startLocation.offset), length: Int64(endLocation.offset - startLocation.offset))\n\n        visitingType?.containedTypes.append(type)\n        visitingType = type\n        types.append(type)\n    }\n\n    public override func visit(_ node: StructDeclSyntax) -> SyntaxVisitorContinueKind {\n        startVisitingType(node) { parent in\n            Struct(node, parent: parent, annotationsParser: annotationsParser)\n        }\n        return .visitChildren\n    }\n\n    public override func visitPost(_ node: StructDeclSyntax) {\n        visitingType = visitingType?.parent\n    }\n\n    public override func visit(_ node: ClassDeclSyntax) -> SyntaxVisitorContinueKind {\n        startVisitingType(node) { parent in\n            Class(node, parent: parent, annotationsParser: annotationsParser)\n        }\n        return .visitChildren\n    }\n\n    public override func visitPost(_ node: ClassDeclSyntax) {\n        visitingType = visitingType?.parent\n    }\n\n    public override func visit(_ node: ActorDeclSyntax) -> SyntaxVisitorContinueKind {\n        startVisitingType(node) { parent in\n            Actor(node, parent: parent, annotationsParser: annotationsParser)\n        }\n        return .visitChildren\n    }\n\n    public override func visitPost(_ node: ActorDeclSyntax) {\n        visitingType = visitingType?.parent\n    }\n\n    public override func visit(_ node: EnumDeclSyntax) -> SyntaxVisitorContinueKind {\n        startVisitingType(node) { parent in\n            Enum(node, parent: parent, annotationsParser: annotationsParser)\n        }\n\n        return .visitChildren\n    }\n\n    public override func visitPost(_ node: EnumDeclSyntax) {\n        visitingType = visitingType?.parent\n    }\n\n    public override func visit(_ node: VariableDeclSyntax) -> SyntaxVisitorContinueKind {\n        let variables = Variable.from(node, visitingType: visitingType, annotationParser: annotationsParser)\n        if let visitingType = visitingType {\n            visitingType.rawVariables.append(contentsOf: variables)\n        }\n\n        return .skipChildren\n    }\n\n    public override func visit(_ node: EnumCaseDeclSyntax) -> SyntaxVisitorContinueKind {\n        guard let enumeration = visitingType as? Enum else {\n            logError(\"EnumCase shouldn't appear outside of enum declaration \\(node.description.trimmed)\")\n            return .skipChildren\n        }\n\n        enumeration.cases.append(contentsOf: EnumCase.from(node, annotationsParser: annotationsParser))\n        return .skipChildren\n    }\n\n    public override func visit(_ node: DeinitializerDeclSyntax) -> SyntaxVisitorContinueKind {\n        guard let visitingType = visitingType else {\n            logError(\"deinit shouldn't appear outside of type declaration \\(node.description.trimmed)\")\n            return .skipChildren\n        }\n        visitingType.rawMethods.append(\n            SourceryMethod(node, parent: visitingType, typeName: TypeName(visitingType.name), annotationsParser: annotationsParser)\n        )\n        return .skipChildren\n    }\n\n    public override func visit(_ node: ExtensionDeclSyntax) -> SyntaxVisitorContinueKind {\n        startVisitingType(node) { parent in\n            let modifiers = node.modifiers.map(Modifier.init)\n            let base = modifiers.baseModifiers(parent: nil)\n\n            return Type(\n              name: node.extendedType.description.trimmingCharacters(in: .whitespaces),\n              parent: parent,\n              accessLevel: base.readAccess,\n              isExtension: true,\n              variables: [],\n              methods: [],\n              subscripts: [],\n              inheritedTypes: node.inheritanceClause?.inheritedTypes.map { $0.type.description.trimmed } ?? [],\n              containedTypes: [],\n              typealiases: [],\n              attributes: Attribute.from(node.attributes),\n              modifiers: modifiers.map(SourceryModifier.init),\n              annotations: annotationsParser.annotations(fromToken: node.extensionKeyword),\n              documentation: annotationsParser.documentation(fromToken: node.extensionKeyword),\n              isGeneric: false\n            )\n        }\n        return .visitChildren\n    }\n\n    public override func visitPost(_ node: ExtensionDeclSyntax) {\n        visitingType = visitingType?.parent\n    }\n\n    public override func visit(_ node: FunctionDeclSyntax) -> SyntaxVisitorContinueKind {\n        let method = SourceryMethod(node, parent: visitingType, typeName: visitingType.map { TypeName($0.name) }, annotationsParser: annotationsParser)\n        if let visitingType = visitingType {\n            visitingType.rawMethods.append(method)\n        } else {\n            methods.append(method)\n        }\n\n        return .skipChildren\n    }\n\n    public override func visit(_ node: ImportDeclSyntax) -> SyntaxVisitorContinueKind {\n        imports.append(Import(path: node.path.description.trimmed, kind: node.importKindSpecifier?.text.trimmed))\n        return .skipChildren\n    }\n\n    public override func visit(_ node: InitializerDeclSyntax) -> SyntaxVisitorContinueKind {\n        guard let visitingType = visitingType else {\n            logError(\"init shouldn't appear outside of type declaration \\(node.description.trimmed)\")\n            return .skipChildren\n        }\n        let method = SourceryMethod(node, parent: visitingType, typeName: TypeName(visitingType.name), annotationsParser: annotationsParser)\n        visitingType.rawMethods.append(method)\n        return .skipChildren\n    }\n\n    public override func visit(_ node: ProtocolDeclSyntax) -> SyntaxVisitorContinueKind {\n        startVisitingType(node) { parent in\n            SourceryProtocol(node, parent: parent, annotationsParser: annotationsParser)\n        }\n        return .visitChildren\n    }\n\n    public override func visitPost(_ node: ProtocolDeclSyntax) {\n        visitingType = visitingType?.parent\n    }\n\n    public override func visit(_ node: SubscriptDeclSyntax) -> SyntaxVisitorContinueKind {\n        guard let visitingType = visitingType else {\n            logError(\"subscript shouldn't appear outside of type declaration \\(node.description.trimmed)\")\n            return .skipChildren\n        }\n\n        visitingType.rawSubscripts.append(\n          Subscript(node, parent: visitingType, annotationsParser: annotationsParser)\n        )\n\n        return .skipChildren\n    }\n\n    public override func visit(_ node: TypeAliasDeclSyntax) -> SyntaxVisitorContinueKind {\n        let localName = node.name.text.trimmed\n        let typeName = TypeName(node.initializer.value)\n        let modifiers = node.modifiers.map(Modifier.init)\n        let baseModifiers = modifiers.baseModifiers(parent: visitingType)\n        let annotations = annotationsParser.annotations(from: node)\n        let documentation = annotationsParser.documentation(from: node)\n\n        if let composition = processPossibleProtocolComposition(for: typeName.name, localName: localName, annotations: annotations, accessLevel: baseModifiers.readAccess) {\n            if let visitingType = visitingType {\n                visitingType.containedTypes.append(composition)\n            } else {\n                types.append(composition)\n            }\n\n            return .skipChildren\n        }\n\n        let alias = Typealias(\n          aliasName: localName,\n          typeName: typeName,\n          accessLevel: baseModifiers.readAccess,\n          parent: visitingType,\n          module: module,\n          annotations: annotations,\n          documentation: documentation\n        )\n\n        // TODO: add generic requirements\n        if let visitingType = visitingType {\n            visitingType.typealiases[localName] = alias\n        } else {\n            // global typealias\n            typealiases.append(alias)\n        }\n        return .skipChildren\n    }\n\n    public override func visit(_ node: AssociatedTypeDeclSyntax) -> SyntaxVisitorContinueKind {\n        guard let sourceryProtocol = visitingType as? SourceryProtocol else {\n            return .skipChildren\n        }\n\n        let name = node.name.text.trimmed\n        var typeName: TypeName?\n        var type: Type?\n\n        if let possibleTypeName = node.inheritanceClause?.inheritedTypes.description.trimmed {\n            var genericRequirements: [GenericRequirement] = []\n            if let genericWhereClause = node.genericWhereClause {\n                genericRequirements = genericWhereClause.requirements.compactMap { requirement in\n                    if let sameType = requirement.requirement.as(SameTypeRequirementSyntax.self) {\n                        return GenericRequirement(sameType)\n                    } else if let conformanceType = requirement.requirement.as(ConformanceRequirementSyntax.self) {\n                        return GenericRequirement(conformanceType)\n                    }\n                    return nil\n                }\n            }\n            if let composition = processPossibleProtocolComposition(for: possibleTypeName, localName: \"\") {\n                type = composition\n            } else {\n                type = Protocol(name: possibleTypeName, genericRequirements: genericRequirements)\n            }\n            typeName = TypeName(possibleTypeName)\n        } else if let possibleTypeName = (node.initializer?.value as? TypeSyntax)?.description.trimmed {\n            type = processPossibleProtocolComposition(for: possibleTypeName, localName: \"\")\n            typeName = TypeName(possibleTypeName)\n        } else {\n            type = Type(name: \"Any\")\n            typeName = TypeName(name: \"Any\", actualTypeName: TypeName(name: \"Any\"))\n        }\n\n        sourceryProtocol.associatedTypes[name] = AssociatedType(name: name, typeName: typeName, type: type)\n        return .skipChildren\n    }\n\n    public override func visit(_ node: OperatorDeclSyntax) -> SyntaxVisitorContinueKind {\n        return .skipChildren\n    }\n\n    public override func visit(_ node: PrecedenceGroupDeclSyntax) -> SyntaxVisitorContinueKind {\n        return .skipChildren\n    }\n\n    public override func visit(_ node: IfConfigDeclSyntax) -> SyntaxVisitorContinueKind {\n        return .visitChildren\n    }\n\n    private func processPossibleProtocolComposition(for typeName: String, localName: String, annotations: [String: NSObject] = [:], accessLevel: AccessLevel = .internal) -> Type? {\n        if let composedTypeNames = extractComposedTypeNames(from: typeName, trimmingCharacterSet: .whitespaces), composedTypeNames.count > 1 {\n            let inheritedTypes = composedTypeNames.map { $0.name }\n            let composition = ProtocolComposition(\n                name: localName,\n                parent: visitingType,\n                accessLevel: accessLevel,\n                inheritedTypes: inheritedTypes,\n                annotations: annotations,\n                composedTypeNames: composedTypeNames\n            )\n            return composition\n        }\n\n        return nil\n    }\n\n    /// Extracts list of type names from composition e.g. `ProtocolA & ProtocolB`\n    internal func extractComposedTypeNames(from value: String, trimmingCharacterSet: CharacterSet? = nil) -> [TypeName]? {\n        guard case let closureComponents = value.components(separatedBy: \"->\"),\n              closureComponents.count <= 1 else { return nil }\n        guard case let components = value.components(separatedBy: CharacterSet(charactersIn: \"&\")),\n              components.count > 1 else { return nil }\n\n        var characterSet: CharacterSet = .whitespacesAndNewlines\n        if let trimmingCharacterSet = trimmingCharacterSet {\n            characterSet = characterSet.union(trimmingCharacterSet)\n        }\n\n        let suffixes = components.map { source in\n            source.trimmingCharacters(in: characterSet)\n        }\n        return suffixes.map { TypeName($0) }\n    }\n\n    private func logError(_ message: Any) {\n        let prefix = file + \": \"\n        if let module = module {\n            Log.astError(\"\\(prefix) \\(message) in module \\(module)\")\n        } else {\n            Log.astError(\"\\(prefix) \\(message)\")\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/Utils/AnnotationsParser.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\nimport SwiftSyntax\nimport SourceryRuntime\n\n/// Parser for annotations, and also documentation\npublic struct AnnotationsParser {\n\n    private enum AnnotationType {\n        case begin(Annotations)\n        case annotations(Annotations)\n        case end\n        case inlineStart\n        case file(Annotations)\n    }\n\n    private struct Line {\n        enum LineType {\n            case propertyWrapper\n            case macros\n            case comment\n            case documentationComment\n            case blockStart\n            case blockEnd\n            case other\n            case inlineStart\n            case inlineEnd\n            case file\n        }\n        let content: String\n        let type: LineType\n        let annotations: Annotations\n        let blockAnnotations: Annotations\n    }\n\n    private let lines: [AnnotationsParser.Line]\n    private let contents: String\n    private var parseDocumentation: Bool\n    internal var sourceLocationConverter: SourceLocationConverter\n\n    /// Initializes parser\n    ///\n    /// - Parameter contents: Contents to parse\n    init(contents: String, parseDocumentation: Bool = false, sourceLocationConverter: SourceLocationConverter) {\n        self.parseDocumentation = parseDocumentation\n        self.lines = AnnotationsParser.parse(contents: contents)\n        self.sourceLocationConverter = sourceLocationConverter\n        self.contents = contents\n    }\n\n    /// returns all annotations in the contents\n    var all: Annotations {\n        var all = Annotations()\n        lines.forEach {\n            $0.annotations.forEach {\n                AnnotationsParser.append(key: $0.key, value: $0.value, to: &all)\n            }\n        }\n        return all\n    }\n\n    func annotations(from node: IdentifierSyntax) -> Annotations {\n        from(\n            positionAfterLeadingTrivia: findLocationAfterLeadingTrivia(syntax: node.identifier),\n            positionBeforeTrailingTrivia: findLocationBeforeTrailingTrivia(syntax: node.identifier)\n        )\n    }\n\n    func annotations(fromToken token: SyntaxProtocol) -> Annotations {\n        from(\n            positionAfterLeadingTrivia: findLocationAfterLeadingTrivia(syntax: token),\n            positionBeforeTrailingTrivia: findLocationBeforeTrailingTrivia(syntax: token)\n        )\n    }\n\n    func documentation(from node: IdentifierSyntax) -> Documentation {\n        guard parseDocumentation else {\n            return []\n        }\n        return documentationFrom(\n          location: findLocationAfterLeadingTrivia(syntax: node.identifier)\n        )\n    }\n\n    func documentation(fromToken token: SyntaxProtocol) -> Documentation {\n        guard parseDocumentation else {\n            return []\n        }\n        return documentationFrom(\n          location: findLocationAfterLeadingTrivia(syntax: token)\n        )\n    }\n\n    private func findLocationAfterLeadingTrivia(syntax: SyntaxProtocol) -> SwiftSyntax.SourceLocation {\n        sourceLocationConverter.location(for: syntax.positionAfterSkippingLeadingTrivia)\n    }\n\n    private func findLocationBeforeTrailingTrivia(syntax: SyntaxProtocol) -> SwiftSyntax.SourceLocation {\n        sourceLocationConverter.location(for: syntax.endPositionBeforeTrailingTrivia)\n    }\n\n    private func from(positionAfterLeadingTrivia: SwiftSyntax.SourceLocation, positionBeforeTrailingTrivia: SwiftSyntax.SourceLocation) -> Annotations {\n        var stop = false\n        var position = positionAfterLeadingTrivia\n        var (annotations, shouldUsePositionBeforeTrailing) = inlineFrom(\n            positionAfterLeadingTrivia: (positionAfterLeadingTrivia.line, positionAfterLeadingTrivia.column),\n            positionBeforeTrailingTrivia: (positionBeforeTrailingTrivia.line, positionBeforeTrailingTrivia.column),\n            stop: &stop\n        )\n        if shouldUsePositionBeforeTrailing {\n            position = positionBeforeTrailingTrivia\n        }\n        guard !stop else { return annotations }\n\n        let reversedArray = lines[0..<position.line-1].reversed()\n        for line in reversedArray {\n            line.annotations.forEach { annotation in\n                AnnotationsParser.append(key: annotation.key, value: annotation.value, to: &annotations)\n            }\n\n            if line.type != .comment\n                && line.type != .documentationComment\n                && line.type != .macros\n                && line.type != .propertyWrapper\n            {\n                break\n            }\n        }\n\n        lines[position.line-1].annotations.forEach { annotation in\n            AnnotationsParser.append(key: annotation.key, value: annotation.value, to: &annotations)\n        }\n\n        return annotations\n    }\n\n    private func documentationFrom(location: SwiftSyntax.SourceLocation) -> Documentation {\n      guard parseDocumentation else {\n            return []\n        }\n\n        // Inline documentation not currently supported\n        _ = location.column\n\n        // var stop = false\n        // var documentation = inlineDocumentationFrom(line: (lineNumber, column), stop: &stop)\n        // guard !stop else { return annotations }\n\n        var documentation: Documentation = []\n\n        for line in lines[0..<location.line-1].reversed() {\n            if line.type == .documentationComment {\n                var clearedLine = line.content.trimmingCharacters(in: .whitespaces)\n                clearedLine = clearedLine.trimmingPrefix(\"///\")\n                clearedLine = clearedLine.trimmingPrefix(\"/**\")\n                clearedLine = clearedLine.trimmingSuffix(\"*/\")\n                clearedLine = clearedLine.trimmingPrefix(\" \")\n                clearedLine = clearedLine.trimmingSuffix(\" \")\n                documentation.append(clearedLine)\n            }\n            if line.type != .comment && line.type != .documentationComment && line.type != .macros && line.type != .propertyWrapper {\n                break\n            }\n        }\n\n        return documentation.reversed()\n    }\n\n    func inlineFrom(positionAfterLeadingTrivia: (line: Int, character: Int), positionBeforeTrailingTrivia: (line: Int, character: Int), stop: inout Bool) -> (Annotations, Bool) {\n        var shouldUsePositionBeforeTrailing = false\n        var position: (line: Int, character: Int) = positionAfterLeadingTrivia\n        // first try checking for annotations in the beginning of the line (i.e. `positionAfterLeadingTrivia`)\n        // next, try checking for annotations in the end of the line (i.e. `positionBeforeTrailingTrivia`)\n        let findPrefix: (((line: Int, character: Int), Bool) -> (String, Line)) = { position, shouldStart in\n            let sourceLine = lines[position.line - 1]\n            let utf8View = sourceLine.content.utf8\n            var startIndex: String.UTF8View.Index\n            var endIndex: String.UTF8View.Index\n            guard utf8View.count > position.character else {\n                return (\"\", sourceLine)\n            }\n            if shouldUsePositionBeforeTrailing {\n                startIndex = utf8View.index(utf8View.startIndex, offsetBy: (position.character - 1))\n                endIndex = utf8View.endIndex\n            } else {\n                startIndex = utf8View.startIndex\n                endIndex = utf8View.index(startIndex, offsetBy: (position.character - 1))\n            }\n            let utf8Slice = utf8View[startIndex ..< endIndex]\n            let relevantContent = String(decoding: utf8Slice, as: UTF8.self)\n            return (relevantContent.trimmingCharacters(in: .whitespaces), sourceLine)\n        }\n\n        var (prefix, sourceLine) = findPrefix(positionAfterLeadingTrivia, shouldUsePositionBeforeTrailing)\n        if prefix.isEmpty {\n            shouldUsePositionBeforeTrailing = true\n            (prefix, sourceLine) = findPrefix(positionBeforeTrailingTrivia, shouldUsePositionBeforeTrailing)\n            if shouldUsePositionBeforeTrailing && !prefix.isEmpty {\n                position = positionBeforeTrailingTrivia\n            } else {\n                shouldUsePositionBeforeTrailing = false\n            }\n        }\n        guard !prefix.isEmpty else { return ([:], shouldUsePositionBeforeTrailing) }\n        var annotations = sourceLine.blockAnnotations // get block annotations for this line\n        sourceLine.annotations.forEach { annotation in  // TODO: verify\n            AnnotationsParser.append(key: annotation.key, value: annotation.value, to: &annotations)\n        }\n\n        // `case` is not included in the key of enum case definition, so we strip it manually\n        let isInsideCaseDefinition = prefix.trimmingCharacters(in: .whitespacesAndNewlines).hasPrefix(\"case \")\n        prefix = prefix.trimmingPrefix(\"case \").trimmingCharacters(in: .whitespaces)\n        var inlineCommentFound = false\n\n        while !prefix.isEmpty {\n            guard prefix.hasSuffix(\"*/\"), let commentStart = prefix.range(of: \"/*\", options: [.backwards]) else {\n                break\n            }\n\n            inlineCommentFound = true\n\n            let comment = String(prefix[commentStart.lowerBound...])\n            for annotation in AnnotationsParser.parse(contents: comment)[0].annotations {\n                AnnotationsParser.append(key: annotation.key, value: annotation.value, to: &annotations)\n            }\n            prefix = prefix[..<commentStart.lowerBound].trimmingCharacters(in: .whitespaces)\n        }\n\n        if (inlineCommentFound || isInsideCaseDefinition) && !prefix.isEmpty {\n            stop = true\n            return (annotations, shouldUsePositionBeforeTrailing)\n        }\n\n        // if previous line is not comment or has some trailing non-comment blocks\n        // we return currently aggregated annotations\n        // as annotations on previous line belong to previous declaration\n        if position.line - 2 > 0 {\n            let previousLine = lines[position.line - 2]\n            let content = previousLine.content.trimmingCharacters(in: .whitespaces)\n            \n            guard\n                previousLine.type == .comment\n                    || previousLine.type == .documentationComment\n                    || previousLine.type == .propertyWrapper\n                    || previousLine.type == .macros,\n\n                    content.hasPrefix(\"//\")\n                    || content.hasSuffix(\"*/\")\n                    || content.hasPrefix(\"@\")\n                    || content.hasPrefix(\"#\")\n            else {\n                stop = true\n                return (annotations, shouldUsePositionBeforeTrailing)\n            }\n        }\n\n        return (annotations, shouldUsePositionBeforeTrailing)\n    }\n\n    private static func parse(contents: String) -> [Line] {\n        var annotationsBlock: Annotations?\n        var fileAnnotationsBlock = Annotations()\n\n        class MultilineCommentStack {\n            private var lines: [String] = []\n            var hasOpenedComment: Bool {\n                !lines.isEmpty && lines.last?.contains(\"*/\") == false\n            }\n            func reset() {\n                lines.removeAll()\n            }\n            func push(_ line: String) {\n                lines.append(line)\n            }\n            func contains(_ line: String) -> Bool {\n                lines.contains(line)\n            }\n        }\n        let multilineCommentStack = MultilineCommentStack()\n        return StringView(contents).lines\n                .map { line in\n                    let content = line.content.trimmingCharacters(in: .whitespaces)\n                    var annotations = Annotations()\n                    var isComment = content.hasPrefix(\"//\") || content.hasPrefix(\"/*\") && !content.hasPrefix(\"/**\") || content.hasPrefix(\"*\") && !content.hasPrefix(\"*/\")\n                    let isClosingMultilineDocumentationComment = (content.contains(\"*/\") && multilineCommentStack.hasOpenedComment)\n                    let isOpeningMultilineDocumentationComment = content.hasPrefix(\"/**\")\n                    let isDocumentationComment = content.hasPrefix(\"///\") || isOpeningMultilineDocumentationComment || isClosingMultilineDocumentationComment\n                    let isPropertyWrapper = content.isPropertyWrapper\n                    let isMacros = content.hasPrefix(\"#\")\n                    var type = Line.LineType.other\n                    if isOpeningMultilineDocumentationComment {\n                        multilineCommentStack.push(content)\n                        if content == \"/**\" {\n                            // ignoring the actual token which indicates the start of a multiline comment\n                            // but not stopping traversal of comments by setting the type to `comment`\n                            type = .comment\n                            isComment = true\n                        } else {\n                            type = .documentationComment\n                        }\n                    } else if isClosingMultilineDocumentationComment {\n                        if content == \"*/\" {\n                            // ignoring the actual token which indicates the start of a multiline comment\n                            // but not stopping traversal of comments by setting the type to `comment`\n                            type = .comment\n                            isComment = true\n                        } else {\n                            type = .documentationComment\n                        }\n                        multilineCommentStack.reset()\n                    } else if multilineCommentStack.hasOpenedComment {\n                        type = .documentationComment\n                    } else if isDocumentationComment {\n                        type = .documentationComment\n                    } else if isComment {\n                        type = .comment\n                    } else if isPropertyWrapper {\n                        type = .propertyWrapper\n                    } else if isMacros {\n                        type = .macros\n                    }\n                    if isComment || (type == .documentationComment) {\n                        switch searchForAnnotations(commentLine: content) {\n                        case let .begin(items):\n                            type = .blockStart\n                            annotationsBlock = Annotations()\n                            items.forEach { annotationsBlock?[$0.key] = $0.value }\n                        case let .annotations(items):\n                            items.forEach { annotations[$0.key] = $0.value }\n                        case .end:\n                            if annotationsBlock != nil {\n                                type = .blockEnd\n                                annotationsBlock?.removeAll()\n                            } else {\n                                type = .inlineEnd\n                            }\n                        case .inlineStart:\n                            type = .inlineStart\n                        case let .file(items):\n                            type = .file\n                            items.forEach {\n                                fileAnnotationsBlock[$0.key] = $0.value\n                            }\n                        }\n                    } else {\n                        searchForTrailingAnnotations(codeLine: content)\n                            .forEach { annotations[$0.key] = $0.value }\n                    }\n\n                    annotationsBlock?.forEach { annotation in\n                        annotations[annotation.key] = annotation.value\n                    }\n\n                    fileAnnotationsBlock.forEach { annotation in\n                        annotations[annotation.key] = annotation.value\n                    }\n\n                    return Line(content: line.content,\n                                type: type,\n                                annotations: annotations,\n                                blockAnnotations: annotationsBlock ?? [:])\n                }\n    }\n\n    private static func searchForTrailingAnnotations(codeLine: String) -> Annotations {\n        let blockComponents = codeLine.components(separatedBy: \"/*\", excludingDelimiterBetween: (\"\", \"\"))\n        if blockComponents.count > 1,\n           let lastBlockComponent = blockComponents.last,\n           let endBlockRange = lastBlockComponent.range(of: \"*/\"),\n           let lowerBound = lastBlockComponent.range(of: \"sourcery:\")?.upperBound {\n            let trailingStart = endBlockRange.upperBound\n            let trailing = String(lastBlockComponent[trailingStart...])\n            if trailing.components(separatedBy: \"//\", excludingDelimiterBetween: (\"\", \"\")).first?.trimmed.count == 0 {\n                let upperBound = endBlockRange.lowerBound\n                return AnnotationsParser.parse(line: String(lastBlockComponent[lowerBound..<upperBound]))\n            }\n        }\n\n        let components = codeLine.components(separatedBy: \"//\", excludingDelimiterBetween: (\"\", \"\"))\n        if components.count > 1,\n           let trailingComment = components.last?.stripped(),\n           let lowerBound = trailingComment.range(of: \"sourcery:\")?.upperBound {\n            return AnnotationsParser.parse(line: String(trailingComment[lowerBound...]))\n        }\n\n        return [:]\n    }\n\n    private static func searchForAnnotations(commentLine: String) -> AnnotationType {\n        let comment = commentLine.trimmingPrefix(\"///\").trimmingPrefix(\"//\").trimmingPrefix(\"/**\").trimmingPrefix(\"/*\").trimmingPrefix(\"*\").stripped()\n\n        guard comment.hasPrefix(\"sourcery:\") else { return .annotations([:]) }\n\n        if comment.hasPrefix(\"sourcery:inline:\") {\n            return .inlineStart\n        }\n\n        let lowerBound: String.Index?\n        let upperBound: String.Index?\n        var insideBlock: Bool = false\n        var insideFileBlock: Bool = false\n\n        if comment.hasPrefix(\"sourcery:begin:\") {\n            lowerBound = commentLine.range(of: \"sourcery:begin:\")?.upperBound\n            upperBound = commentLine.indices.endIndex\n            insideBlock = true\n        } else if comment.hasPrefix(\"sourcery:end\") {\n            return .end\n        } else if comment.hasPrefix(\"sourcery:file\") {\n            lowerBound = commentLine.range(of: \"sourcery:file:\")?.upperBound\n            upperBound = commentLine.indices.endIndex\n            insideFileBlock = true\n        } else {\n            lowerBound = commentLine.range(of: \"sourcery:\")?.upperBound\n            if commentLine.hasPrefix(\"//\") || commentLine.hasPrefix(\"*\") {\n                upperBound = commentLine.indices.endIndex\n            } else {\n                upperBound = commentLine.range(of: \"*/\")?.lowerBound\n            }\n        }\n\n        if let lowerBound = lowerBound, let upperBound = upperBound {\n            let annotations = AnnotationsParser.parse(line: String(commentLine[lowerBound..<upperBound]))\n            if insideBlock {\n                return .begin(annotations)\n            } else if insideFileBlock {\n                return .file(annotations)\n            } else {\n                return .annotations(annotations)\n            }\n        } else {\n            return .annotations([:])\n        }\n    }\n\n    /// Parses annotations from the given line\n    ///\n    /// - Parameter line: Line to parse.\n    /// - Returns: Dictionary containing all annotations.\n    public static func parse(line: String) -> Annotations {\n        var annotationDefinitions = line.trimmingCharacters(in: .whitespaces)\n            .commaSeparated()\n            .map { $0.trimmingCharacters(in: .whitespaces) }\n\n        var namespaces = annotationDefinitions[0].components(separatedBy: \":\", excludingDelimiterBetween: (open: \"\\\"'\", close: \"\\\"'\"))\n        annotationDefinitions[0] = namespaces.removeLast()\n\n        var annotations = Annotations()\n        annotationDefinitions.forEach { annotation in\n            let parts = annotation\n                .components(separatedBy: \"=\", excludingDelimiterBetween: (\"\", \"\"))\n                .map({ $0.trimmingCharacters(in: .whitespaces) })\n\n            if let name = parts.first, !name.isEmpty {\n\n                guard parts.count > 1, var value = parts.last, value.isEmpty == false else {\n                    append(key: name, value: NSNumber(value: true), to: &annotations)\n                    return\n                }\n\n                if let number = Double(value) {\n                    append(key: name, value: NSNumber(value: number), to: &annotations)\n                } else {\n                    if (value.hasPrefix(\"'\") && value.hasSuffix(\"'\")) || (value.hasPrefix(\"\\\"\") && value.hasSuffix(\"\\\"\")) {\n                        value = String(value[value.index(after: value.startIndex) ..< value.index(before: value.endIndex)])\n                        value = value.trimmingCharacters(in: .whitespaces)\n                    }\n\n                    guard let data = (value as String).data(using: .utf8),\n                        let json = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) else {\n                            append(key: name, value: value as NSString, to: &annotations)\n                            return\n                    }\n                    if let array = json as? [Any] {\n                        append(key: name, value: array as NSArray, to: &annotations)\n                    } else if let dict = json as? [String: Any] {\n                        append(key: name, value: dict as NSDictionary, to: &annotations)\n                    } else {\n                        append(key: name, value: value as NSString, to: &annotations)\n                    }\n                }\n            }\n        }\n\n        if namespaces.isEmpty {\n            return annotations\n        } else {\n            var namespaced = Annotations()\n            for namespace in namespaces.reversed() {\n                namespaced[namespace] = annotations as NSObject\n                annotations = namespaced\n                namespaced = Annotations()\n            }\n            return annotations\n        }\n    }\n\n    static func append(key: String, value: NSObject, to annotations: inout Annotations) {\n        if let oldValue = annotations[key] {\n            if var array = oldValue as? [NSObject] {\n                if !array.contains(value) {\n                    array.append(value)\n                    annotations[key] = array as NSObject\n                }\n            } else if var oldDict = oldValue as? [String: NSObject], let newDict = value as? [String: NSObject] {\n                newDict.forEach({ (key, value) in\n                    append(key: key, value: value, to: &oldDict)\n                })\n                annotations[key] = oldDict as NSObject\n            } else if oldValue != value {\n                annotations[key] = [oldValue, value] as NSObject\n            }\n        } else {\n            annotations[key] = value\n        }\n    }\n\n}\n\n// Parses string to see if it is a macros or not\nprivate extension String {\n    /// @objc // true\n    /// @objc var paosdjapsodji = 1 // false\n    /// @MyAttribute(some     thing) // true\n    /// @MyAttribute(some     thing) var paosdjapsodji = 1 // false\n    /// @objc let asdasd // false\n    var isPropertyWrapper: Bool {\n        guard hasPrefix(\"@\") else { return false }\n        guard contains(\")\") || !contains(\" \") else { return false }\n        return true\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/Utils/Bridges.swift",
    "content": "import Foundation\n\nextension Array {\n    public func bridge() -> NSArray {\n        return self as NSArray\n    }\n}\n\nextension CharacterSet {\n    public func bridge() -> NSCharacterSet {\n        return self as NSCharacterSet\n    }\n}\n\nextension Dictionary {\n    public func bridge() -> NSDictionary {\n        return self as NSDictionary\n    }\n}\n\nextension NSString {\n    public func bridge() -> String {\n        return self as String\n    }\n}\n\nextension String {\n    public func bridge() -> NSString {\n        return self as NSString\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/Utils/InlineParser.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 16/01/2017.\n// Copyright (c) 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\npublic enum TemplateAnnotationsParser {\n\n    public typealias AnnotatedRanges = [String: [(range: NSRange, indentation: String)]]\n\n    private static func regex(annotation: String) throws -> NSRegularExpression {\n        let commentPattern = NSRegularExpression.escapedPattern(for: \"//\")\n        let regex = try NSRegularExpression(\n            pattern: \"(^(?:\\\\s*?\\\\n)?(\\\\s*)\\(commentPattern)\\\\s*?sourcery:\\(annotation):)(\\\\S*)\\\\s*?(^.*?)(^\\\\s*?\\(commentPattern)\\\\s*?sourcery:end)\",\n            options: [.allowCommentsAndWhitespace, .anchorsMatchLines, .dotMatchesLineSeparators]\n        )\n        return regex\n    }\n\n    public static func parseAnnotations(_ annotation: String, contents: String, aggregate: Bool = false, forceParse: [String]) -> (contents: String, annotatedRanges: AnnotatedRanges) {\n        let (annotatedRanges, rangesToReplace) = annotationRanges(annotation, contents: contents, aggregate: aggregate, forceParse: forceParse)\n\n        let strigView = StringView(contents)\n        var bridged = contents.bridge()\n        rangesToReplace\n            .sorted(by: { $0.location > $1.location })\n            .forEach {\n                bridged = bridged.replacingCharacters(in: $0, with: String(repeating: \" \", count: strigView.NSRangeToByteRange($0)!.length.value)) as NSString\n        }\n        return (bridged as String, annotatedRanges)\n    }\n\n    public static func annotationRanges(_ annotation: String, contents: String, aggregate: Bool = false, forceParse: [String]) -> (annotatedRanges: AnnotatedRanges, rangesToReplace: Set<NSRange>) {\n        let bridged = contents.bridge()\n        let regex = try? self.regex(annotation: annotation)\n\n        var rangesToReplace = Set<NSRange>()\n        var annotatedRanges = AnnotatedRanges()\n\n        regex?.enumerateMatches(in: contents, options: [], range: bridged.entireRange) { result, _, _ in\n            guard let result = result, result.numberOfRanges == 6 else {\n                return\n            }\n\n            let indentationRange = result.range(at: 2)\n            let nameRange = result.range(at: 3)\n            let startLineRange = result.range(at: 4)\n            let endLineRange = result.range(at: 5)\n\n            let indentation = bridged.substring(with: indentationRange)\n            let name = bridged.substring(with: nameRange)\n            let range = NSRange(\n                location: startLineRange.location,\n                length: endLineRange.location - startLineRange.location\n            )\n            if aggregate {\n                var ranges = annotatedRanges[name] ?? []\n                ranges.append((range: range, indentation: indentation))\n                annotatedRanges[name] = ranges\n            } else {\n                annotatedRanges[name] = [(range: range, indentation: indentation)]\n            }\n            let rangeToBeRemoved = !forceParse.contains(where: { name.hasSuffix(\".\" + $0) || name == $0 })\n            if rangeToBeRemoved {\n                rangesToReplace.insert(range)\n            }\n        }\n        return (annotatedRanges, rangesToReplace)\n    }\n\n    public static func removingEmptyAnnotations(from content: String) -> String {\n        var bridged = content.bridge()\n        let regex = try? self.regex(annotation: \"\\\\S*\")\n\n        var rangesToReplace = [NSRange]()\n\n        regex?.enumerateMatches(in: content, options: [], range: bridged.entireRange) { result, _, _ in\n            guard let result = result, result.numberOfRanges == 6 else {\n                return\n            }\n\n            let annotationStartRange = result.range(at: 1)\n            let startLineRange = result.range(at: 4)\n            let endLineRange = result.range(at: 5)\n            if startLineRange.length == 0 {\n                rangesToReplace.append(NSRange(\n                    location: annotationStartRange.location,\n                    length: NSMaxRange(endLineRange) - annotationStartRange.location\n                ))\n            }\n        }\n\n        rangesToReplace\n            .reversed()\n            .forEach {\n                bridged = bridged.replacingCharacters(in: $0, with: \"\") as NSString\n        }\n\n        return bridged as String\n    }\n\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/Utils/StringView.swift",
    "content": "import Foundation\nimport SwiftSyntax\n\n// Represents the number of bytes in a string. Could be used to model offsets into a string, or the distance between\n/// two locations in a string.\npublic struct ByteCount: ExpressibleByIntegerLiteral, Hashable {\n    /// The byte value as an integer.\n    public var value: Int\n\n    /// Create a byte count by its integer value.\n    ///\n    /// - parameter value: Integer value.\n    public init(integerLiteral value: Int) {\n        self.value = value\n    }\n\n    /// Create a byte count by its integer value.\n    ///\n    /// - parameter value: Integer value.\n    public init(_ value: Int) {\n        self.value = value\n    }\n\n    /// Create a byte count by its integer value.\n    ///\n    /// - parameter value: Integer value.\n    public init(_ value: Int64) {\n        self.value = Int(value)\n    }\n}\n\nextension ByteCount: CustomStringConvertible {\n    public var description: String {\n        return value.description\n    }\n}\n\nextension ByteCount: Comparable {\n    public static func < (lhs: ByteCount, rhs: ByteCount) -> Bool {\n        return lhs.value < rhs.value\n    }\n}\n\nextension ByteCount: AdditiveArithmetic {\n    public static func - (lhs: ByteCount, rhs: ByteCount) -> ByteCount {\n        return ByteCount(lhs.value - rhs.value)\n    }\n\n    public static func -= (lhs: inout ByteCount, rhs: ByteCount) {\n        lhs.value -= rhs.value\n    }\n\n    public static func + (lhs: ByteCount, rhs: ByteCount) -> ByteCount {\n        return ByteCount(lhs.value + rhs.value)\n    }\n\n    public static func += (lhs: inout ByteCount, rhs: ByteCount) {\n        lhs.value += rhs.value\n    }\n}\n\n/// Structure that represents a string range in bytes.\npublic struct ByteRange: Equatable {\n    /// The starting location of the range.\n    public let location: ByteCount\n\n    /// The length of the range.\n    public let length: ByteCount\n\n    /// Creates a byte range from a location and a length.\n    ///\n    /// - parameter location: The starting location of the range.\n    /// - parameter length:   The length of the range.\n    public init(location: ByteCount, length: ByteCount) {\n        self.location = location\n        self.length = length\n    }\n\n    /// The range's upper bound.\n    public var upperBound: ByteCount {\n        return location + length\n    }\n\n    /// The range's lower bound.\n    public var lowerBound: ByteCount {\n        return location\n    }\n\n    public func contains(_ value: ByteCount) -> Bool {\n        return location <= value && upperBound > value\n    }\n\n    public func intersects(_ otherRange: ByteRange) -> Bool {\n        return contains(otherRange.lowerBound) ||\n            contains(otherRange.upperBound - 1) ||\n            otherRange.contains(lowerBound) ||\n            otherRange.contains(upperBound - 1)\n    }\n\n    public func intersects(_ ranges: [ByteRange]) -> Bool {\n        return ranges.contains { intersects($0) }\n    }\n\n    public func union(with otherRange: ByteRange) -> ByteRange {\n        let maxUpperBound = max(upperBound, otherRange.upperBound)\n        let minLocation = min(location, otherRange.location)\n        return ByteRange(location: minLocation, length: maxUpperBound - minLocation)\n    }\n\n    /*\n     Returns a new range which is the receiver after inserting or removing some content\n     before, within or after the receiver.\n     change.length is amount of content inserted or removed.\n    */\n    public func editingContent(_ change: ByteRange) -> ByteRange {\n        // bytes inserted after type definition\n        if change.location > upperBound {\n            return self\n        }\n        // bytes inserted within type definition\n        if change.location >= location {\n            return ByteRange(location: location, length: length + change.length)\n        }\n        // bytes inserted before type definition\n        return ByteRange(location: location + change.length, length: length)\n    }\n}\n\n/// Representation of a single line in a larger String.\npublic struct Line {\n    /// origin = 0.\n    public let index: Int\n    /// Content.\n    public let content: String\n    /// UTF16 based range in entire String. Equivalent to `Range<UTF16Index>`.\n    public let range: NSRange\n    /// Byte based range in entire String. Equivalent to `Range<UTF8Index>`.\n    public let byteRange: ByteRange\n}\n\nprivate extension RandomAccessCollection {\n    /// Binary search assuming the collection is already sorted.\n    ///\n    /// - parameter comparing: Comparison function.\n    ///\n    /// - returns: The index in the collection of the element matching the `comparing` function.\n    func indexAssumingSorted(comparing: (Element) throws -> ComparisonResult) rethrows -> Index? {\n        guard !isEmpty else {\n            return nil\n        }\n\n        var lowerBound = startIndex\n        var upperBound = index(before: endIndex)\n        var midIndex: Index\n\n        while lowerBound <= upperBound {\n            let boundDistance = distance(from: lowerBound, to: upperBound)\n            midIndex = index(lowerBound, offsetBy: boundDistance / 2)\n            let midElem = self[midIndex]\n\n            switch try comparing(midElem) {\n            case .orderedDescending: lowerBound = index(midIndex, offsetBy: 1)\n            case .orderedAscending: upperBound = index(midIndex, offsetBy: -1)\n            case .orderedSame: return midIndex\n            }\n        }\n\n        return nil\n    }\n}\n\n// swiftlint:disable:next line_length\n// According to https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/LexicalStructure.html#//apple_ref/swift/grammar/line-break\n// there are 3 types of line breaks:\n// line-break → U+000A\n// line-break → U+000D\n// line-break → U+000D followed by U+000A\nprivate let carriageReturnCharacter = \"\\u{000D}\"\nprivate let lineFeedCharacter = \"\\u{000A}\"\nprivate let newlinesCharacters = carriageReturnCharacter + lineFeedCharacter\n\n/// Structure that precalculates lines for the specified string and then uses this information for\n/// ByteRange to NSRange and NSRange to ByteRange operations\npublic struct StringView {\n\n    /// Reference to the NSString of represented string\n    public let nsString: NSString\n\n    /// Full range of nsString\n    public let range: NSRange\n\n    /// Reference to the String of the represented string\n    public let string: String\n\n    /// All lines of the original string\n    public let lines: [Line]\n\n    let utf8View: String.UTF8View\n    let utf16View: String.UTF16View\n\n    public init(_ string: String) {\n        self.init(string, string as NSString)\n    }\n\n    public init(_ nsstring: NSString) {\n        self.init(nsstring as String, nsstring)\n    }\n\n    // parses the given string into lines. Lines are split using\n    //\n    /*\n     //sourcery: Annotation\\n\n     @MainActor\\r\\n\n     protocol Something {\\r\\n\n       var variable: Bool { get }\\r\\n\n     }\\n\n\n     First iteration:\n\n     [\n      \"//sourcery: Annotation\\n\",\n      \"@MainActor\",\n      \"protocol Something {\",\n      \"  var variable: Bool { get }\",\n      \"}\\n\"\n     ]\n\n     Second iteration:\n\n     [\n      \"//sourcery: Annotation\",\n      \"\",\n      \"@MainActor\",\n      \"protocol Something {\",\n      \"  var variable: Bool { get }\",\n      \"}\",\n      \"\"\n     ]\n     */\n    private init(_ string: String, _ nsString: NSString) {\n        self.string = string\n        self.nsString = nsString\n        self.range = NSRange(location: 0, length: nsString.length)\n\n        utf8View = string.utf8\n        utf16View = string.utf16\n\n        var utf16CountSoFar = 0\n        var bytesSoFar: ByteCount = 0\n        var lines = [Line]()\n\n        let lineContents = string.components(separatedBy: newlinesCharacters)\n            .expandComponents(splitBy: lineFeedCharacter)\n\n        // Be compatible with `NSString.getLineStart(_:end:contentsEnd:forRange:)`\n        let endsWithNewLineCharacter: Bool\n        if let lastChar = utf16View.last,\n            let lastCharScalar = UnicodeScalar(lastChar) {\n            endsWithNewLineCharacter = newlinesCharacters.contains(Character(lastCharScalar))\n        } else {\n            endsWithNewLineCharacter = false\n        }\n        // if string ends with new line character, no empty line is generated after that.\n        let enumerator = endsWithNewLineCharacter\n            ? AnySequence(lineContents.dropLast().enumerated())\n            : AnySequence(lineContents.enumerated())\n        for (index, content) in enumerator {\n            let index = index + 1\n            let rangeStart = utf16CountSoFar\n            let utf16Count = content.utf16.count\n            utf16CountSoFar += utf16Count\n\n            let byteRangeStart = bytesSoFar\n            let byteCount = ByteCount(content.lengthOfBytes(using: .utf8))\n            bytesSoFar += byteCount\n\n            let newlineLength = index != lineContents.count ? 1 : 0 // FIXME: assumes \\n\n\n            let line = Line(\n                index: index,\n                content: content,\n                range: NSRange(location: rangeStart, length: utf16Count + newlineLength),\n                byteRange: ByteRange(location: byteRangeStart, length: byteCount + ByteCount(newlineLength))\n            )\n            lines.append(line)\n\n            utf16CountSoFar += newlineLength\n            bytesSoFar += ByteCount(newlineLength)\n        }\n        self.lines = lines\n    }\n\n    /// Returns substring in with UTF-16 range specified.\n    ///\n    /// - parameter range: UTF16 range.\n    public func substring(with range: NSRange) -> String {\n        return nsString.substring(with: range)\n    }\n\n    /**\n     Returns a substring from a start and end SourceLocation.\n     */\n    public func substringWithSourceRange(start: SourceLocation, end: SourceLocation) -> String? {\n        guard start.offset < end.offset else {\n            return nil\n        }\n        let byteRange = ByteRange(location: ByteCount(Int(start.offset)),\n                                  length: ByteCount(Int(end.offset - start.offset)))\n        return substringWithByteRange(byteRange)\n    }\n\n\n    /**\n     Returns a substring with the provided byte range.\n\n     - parameter start: Starting byte offset.\n     - parameter length: Length of bytes to include in range.\n     */\n    public func substringWithByteRange(_ byteRange: ByteRange) -> String? {\n        return byteRangeToNSRange(byteRange).map(nsString.substring)\n    }\n\n    /// Returns a substictg, started at UTF-16 location.\n    ///\n    /// - parameter location: UTF-16 location.\n    func substring(from location: Int) -> String {\n        return nsString.substring(from: location)\n    }\n\n    /**\n     Converts a range of byte offsets in `self` to an `NSRange` suitable for filtering `self` as an\n     `NSString`.\n\n     - parameter start: Starting byte offset.\n     - parameter length: Length of bytes to include in range.\n\n     - returns: An equivalent `NSRange`.\n     */\n    public func byteRangeToNSRange(_ byteRange: ByteRange) -> NSRange? {\n        guard !string.isEmpty else { return nil }\n        let utf16Start = location(fromByteOffset: byteRange.location)\n        if byteRange.length == 0 {\n            return NSRange(location: utf16Start, length: 0)\n        }\n        let utf16End = location(fromByteOffset: byteRange.upperBound)\n        return NSRange(location: utf16Start, length: utf16End - utf16Start)\n    }\n\n    /**\n     Returns UTF8 offset from UTF16 offset.\n\n     - parameter location: UTF16-based offset of string.\n\n     - returns: UTF8 based offset of string.\n     */\n    public func byteOffset(fromLocation location: Int) -> ByteCount {\n        if lines.isEmpty {\n            return 0\n        }\n        let index = lines.indexAssumingSorted { line in\n            if location < line.range.location {\n                return .orderedAscending\n            } else if location >= line.range.location + line.range.length {\n                return .orderedDescending\n            }\n            return .orderedSame\n        }\n        // location may be out of bounds when NSRegularExpression points end of string.\n        guard let line = (index.map { lines[$0] } ?? lines.last) else {\n            fatalError()\n        }\n        let diff = location - line.range.location\n        if diff == 0 {\n            return line.byteRange.location\n        } else if line.range.length == diff {\n            return line.byteRange.upperBound\n        }\n        let utf16View = line.content.utf16\n        let endUTF8index = utf16View.index(utf16View.startIndex, offsetBy: diff, limitedBy: utf16View.endIndex)!\n            .samePosition(in: line.content.utf8)!\n        let byteDiff = line.content.utf8.distance(from: line.content.utf8.startIndex, to: endUTF8index)\n        return ByteCount(line.byteRange.location.value + byteDiff)\n    }\n\n    /**\n    Converts an `NSRange` suitable for filtering `self` as an\n    `NSString` to a range of byte offsets in `self`.\n\n    - parameter start: Starting character index in the string.\n    - parameter length: Number of characters to include in range.\n\n    - returns: An equivalent `NSRange`.\n    */\n    public func NSRangeToByteRange(start: Int, length: Int) -> ByteRange? {\n        guard\n            let startUTF16Index = utf16View.index(utf16View.startIndex, offsetBy: start, limitedBy: utf16View.endIndex),\n            let endUTF16Index = utf16View.index(startUTF16Index, offsetBy: length, limitedBy: utf16View.endIndex) \n        else {\n            return nil\n        }\n\n        guard let startUTF8Index = startUTF16Index.samePosition(in: utf8View),\n            let endUTF8Index = endUTF16Index.samePosition(in: utf8View) else {\n                return nil\n        }\n\n        let length = utf8View.distance(from: startUTF8Index, to: endUTF8Index)\n        return ByteRange(location: byteOffset(fromLocation: start), length: ByteCount(length))\n    }\n\n    public func NSRangeToByteRange(_ range: NSRange) -> ByteRange? {\n        return NSRangeToByteRange(start: range.location, length: range.length)\n    }\n\n    /**\n     Returns UTF16 offset from UTF8 offset.\n\n     - parameter byteOffset: UTF8-based offset of string.\n\n     - returns: UTF16 based offset of string.\n     */\n    public func location(fromByteOffset byteOffset: ByteCount) -> Int {\n        if lines.isEmpty {\n            return 0\n        }\n        let index = lines.indexAssumingSorted { line in\n            if byteOffset < line.byteRange.location {\n                return .orderedAscending\n            } else if byteOffset >= line.byteRange.upperBound {\n                return .orderedDescending\n            }\n            return .orderedSame\n        }\n        // byteOffset may be out of bounds when sourcekitd points end of string.\n        guard let line = (index.map { lines[$0] } ?? lines.last) else {\n            fatalError()\n        }\n        let diff = byteOffset - line.byteRange.location\n        if diff == 0 {\n            return line.range.location\n        } else if line.byteRange.length == diff {\n            return NSMaxRange(line.range)\n        }\n        let utf8View = line.content.utf8\n        let endUTF8Index = utf8View.index(utf8View.startIndex, offsetBy: diff.value, limitedBy: utf8View.endIndex) ?? utf8View.endIndex\n        let utf16Diff = line.content.utf16.distance(from: line.content.utf16.startIndex, to: endUTF8Index)\n        return line.range.location + utf16Diff\n    }\n\n    public func substringStartingLinesWithByteRange(_ byteRange: ByteRange) -> String? {\n        return byteRangeToNSRange(byteRange).map { range in\n            var lineStart = 0, lineEnd = 0\n            nsString.getLineStart(&lineStart, end: &lineEnd, contentsEnd: nil, for: range)\n            return nsString.substring(with: NSRange(location: lineStart, length: NSMaxRange(range) - lineStart))\n        }\n    }\n\n    /**\n     Returns a substring starting at the beginning of `start`'s line and ending at the end of `end`'s\n     line. Returns `start`'s entire line if `end` is nil.\n\n     - parameter start: Starting byte offset.\n     - parameter length: Length of bytes to include in range.\n     */\n    public func substringLinesWithByteRange(_ byteRange: ByteRange) -> String? {\n        return byteRangeToNSRange(byteRange).map { range in\n            var lineStart = 0, lineEnd = 0\n            nsString.getLineStart(&lineStart, end: &lineEnd, contentsEnd: nil, for: range)\n            return nsString.substring(with: NSRange(location: lineStart, length: lineEnd - lineStart))\n        }\n    }\n\n    /**\n     Returns line numbers containing starting and ending byte offsets.\n\n     - parameter start: Starting byte offset.\n     - parameter length: Length of bytes to include in range.\n     */\n    public func lineRangeWithByteRange(_ byteRange: ByteRange) -> (start: Int, end: Int)? {\n        return byteRangeToNSRange(byteRange).flatMap { range in\n            var numberOfLines = 0, index = 0, lineRangeStart = 0\n            while index < nsString.length {\n                numberOfLines += 1\n                if index <= range.location {\n                    lineRangeStart = numberOfLines\n                }\n                index = NSMaxRange(nsString.lineRange(for: NSRange(location: index, length: 1)))\n                if index > NSMaxRange(range) {\n                    return (lineRangeStart, numberOfLines)\n                }\n            }\n            return nil\n        }\n    }\n\n    public func lineAndCharacter(forByteOffset offset: ByteCount, expandingTabsToWidth tabWidth: Int = 1) -> (line: Int, character: Int)? {\n        let characterOffset = location(fromByteOffset: offset)\n        return lineAndCharacter(forCharacterOffset: characterOffset, expandingTabsToWidth: tabWidth)\n    }\n\n    public func lineAndCharacter(forCharacterOffset offset: Int, expandingTabsToWidth tabWidth: Int = 1) -> (line: Int, character: Int)? {\n        assert(tabWidth > 0)\n\n        let index = lines.indexAssumingSorted { line in\n            if offset < line.range.location {\n                return .orderedAscending\n            } else if offset >= line.range.location + line.range.length {\n                return .orderedDescending\n            }\n            return .orderedSame\n        }\n        return index.map {\n            let line = lines[$0]\n\n            let prefixLength = offset - line.range.location\n            let character: Int\n\n            if tabWidth == 1 {\n                character = prefixLength\n            } else {\n                character = line.content.prefix(prefixLength).reduce(0) { sum, character in\n                    if character == \"\\t\" {\n                        return sum - (sum % tabWidth) + tabWidth\n                    } else {\n                        return sum + 1\n                    }\n                }\n            }\n\n            return (line: line.index, character: character + 1)\n        }\n    }\n\n}\n\nprivate extension Array where Element == String {\n    func expandComponents(splitBy separator: String) -> [String] {\n        flatMap { $0.components(separatedBy: separator) }\n    }\n}\n"
  },
  {
    "path": "SourceryFramework/Sources/Parsing/Utils/Verifier.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 23/01/2017.\n// Copyright (c) 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\nimport PathKit\nimport SourceryUtils\n\npublic enum Verifier {\n\n    // swiftlint:disable:next force_try\n    private static let conflictRegex = try! NSRegularExpression(pattern: \"^\\\\s+?(<<<<<|>>>>>)\")\n\n    public enum Result {\n        case isCodeGenerated\n        case containsConflictMarkers\n        case approved\n    }\n\n    public static func canParse(content: String,\n                                path: Path,\n                                generationMarker: String,\n                                forceParse: [String] = []) -> Result {\n        guard !content.isEmpty else { return .approved }\n\n        let shouldForceParse = forceParse.contains { name in\n            return path.hasExtension(as: name)\n        }\n\n        if content.hasPrefix(generationMarker) && shouldForceParse == false {\n            return .isCodeGenerated\n        }\n\n        if conflictRegex.numberOfMatches(in: content, options: .anchored, range: content.bridge().entireRange) > 0 {\n            return .containsConflictMarkers\n        }\n\n        return .approved\n    }\n}\n"
  },
  {
    "path": "SourceryFramework.podspec",
    "content": "Pod::Spec.new do |s|\n\n  s.name         = \"SourceryFramework\"\n  s.version      = \"2.3.0\"\n  s.summary      = \"A tool that brings meta-programming to Swift, allowing you to code generate Swift code.\"\n  s.platform     = :osx, '10.15'\n\n  s.description  = <<-DESC\n                 A tool that brings meta-programming to Swift, allowing you to code generate Swift code.\n                   * Featuring daemon mode that allows you to write templates side-by-side with generated code.\n                   * Using SourceKit so you can scan your regular code.\n                   DESC\n\n  s.homepage     = \"https://github.com/krzysztofzablocki/Sourcery\"\n  s.license      = 'MIT'\n  s.author       = { \"Krzysztof Zabłocki\" => \"krzysztof.zablocki@pixle.pl\" }\n  s.social_media_url = \"https://twitter.com/merowing_\"\n  s.source       = { :http => \"https://github.com/krzysztofzablocki/Sourcery/releases/download/#{s.version}/sourcery-#{s.version}.zip\" }\n\n  s.source_files = \"SourceryFramework/Sources/**/*.swift\"\n  \n  s.osx.deployment_target  = '10.15'\n  \n  s.dependency 'SourceryUtils'\n  s.dependency 'SourceryRuntime'\nend\n"
  },
  {
    "path": "SourceryJS/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2018 Pixle. All rights reserved.</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "SourceryJS/Resources/ejs.js",
    "content": "(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n(function (global){\n  \n  let ejs = require('ejs');\n  \n  function renderTemplate(source, context, filename, folder) {\n    let fn = ejs.compile(source, {client: true, filename});\n    \n    return fn(context, null, function(path, d) {\n      let data = Object.assign({}, context, d);\n      \n      if (folder) {\n        path = `${folder}/${path}`;\n      }\n      \n      let { template, basePath } = include(path);\n      return renderTemplate(template, data, path, basePath);\n     });\n  }\n  \n  global.content = renderTemplate(template, templateContext, templateName);\n  \n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"ejs\":2}],2:[function(require,module,exports){\n/*\n * EJS Embedded JavaScript templates\n * Copyright 2112 Matthew Eernisse (mde@fleegix.org)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *         http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n*/\n\n'use strict';\n\n/**\n * @file Embedded JavaScript templating engine. {@link http://ejs.co}\n * @author Matthew Eernisse <mde@fleegix.org>\n * @author Tiancheng \"Timothy\" Gu <timothygu99@gmail.com>\n * @project EJS\n * @license {@link http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0}\n */\n\n/**\n * EJS internal functions.\n *\n * Technically this \"module\" lies in the same file as {@link module:ejs}, for\n * the sake of organization all the private functions re grouped into this\n * module.\n *\n * @module ejs-internal\n * @private\n */\n\n/**\n * Embedded JavaScript templating engine.\n *\n * @module ejs\n * @public\n */\n\nvar fs = require('fs');\nvar path = require('path');\nvar utils = require('./utils');\n\nvar scopeOptionWarned = false;\nvar _VERSION_STRING = require('../package.json').version;\nvar _DEFAULT_DELIMITER = '%';\nvar _DEFAULT_LOCALS_NAME = 'locals';\nvar _NAME = 'ejs';\nvar _REGEX_STRING = '(<%%|%%>|<%=|<%-|<%_|<%#|<%|%>|-%>|_%>)';\nvar _OPTS = ['delimiter', 'scope', 'context', 'debug', 'compileDebug',\n  'client', '_with', 'rmWhitespace', 'strict', 'filename'];\n// We don't allow 'cache' option to be passed in the data obj\n// for the normal `render` call, but this is where Express puts it\n// so we make an exception for `renderFile`\nvar _OPTS_EXPRESS = _OPTS.concat('cache');\nvar _BOM = /^\\uFEFF/;\n\n/**\n * EJS template function cache. This can be a LRU object from lru-cache NPM\n * module. By default, it is {@link module:utils.cache}, a simple in-process\n * cache that grows continuously.\n *\n * @type {Cache}\n */\n\nexports.cache = utils.cache;\n\n/**\n * Custom file loader. Useful for template preprocessing or restricting access\n * to a certain part of the filesystem.\n *\n * @type {fileLoader}\n */\n\nexports.fileLoader = fs.readFileSync;\n\n/**\n * Name of the object containing the locals.\n *\n * This variable is overridden by {@link Options}`.localsName` if it is not\n * `undefined`.\n *\n * @type {String}\n * @public\n */\n\nexports.localsName = _DEFAULT_LOCALS_NAME;\n\n/**\n * Get the path to the included file from the parent file path and the\n * specified path.\n *\n * @param {String}  name     specified path\n * @param {String}  filename parent file path\n * @param {Boolean} isDir    parent file path whether is directory\n * @return {String}\n */\nexports.resolveInclude = function(name, filename, isDir) {\n  var dirname = path.dirname;\n  var extname = path.extname;\n  var resolve = path.resolve;\n  var includePath = resolve(isDir ? filename : dirname(filename), name);\n  var ext = extname(name);\n  if (!ext) {\n    includePath += '.ejs';\n  }\n  return includePath;\n};\n\n/**\n * Get the path to the included file by Options\n *\n * @param  {String}  path    specified path\n * @param  {Options} options compilation options\n * @return {String}\n */\nfunction getIncludePath(path, options){\n  var includePath;\n  if (path.charAt(0) == '/') {\n    includePath = exports.resolveInclude(path.replace(/^\\/*/,''), options.root || '/', true);\n  }\n  else {\n    if (!options.filename) {\n      throw new Error('`include` use relative path requires the \\'filename\\' option.');\n    }\n    includePath = exports.resolveInclude(path, options.filename);\n  }\n  return includePath;\n}\n\n/**\n * Get the template from a string or a file, either compiled on-the-fly or\n * read from cache (if enabled), and cache the template if needed.\n *\n * If `template` is not set, the file specified in `options.filename` will be\n * read.\n *\n * If `options.cache` is true, this function reads the file from\n * `options.filename` so it must be set prior to calling this function.\n *\n * @memberof module:ejs-internal\n * @param {Options} options   compilation options\n * @param {String} [template] template source\n * @return {(TemplateFunction|ClientFunction)}\n * Depending on the value of `options.client`, either type might be returned.\n * @static\n */\n\nfunction handleCache(options, template) {\n  var func;\n  var filename = options.filename;\n  var hasTemplate = arguments.length > 1;\n\n  if (options.cache) {\n    if (!filename) {\n      throw new Error('cache option requires a filename');\n    }\n    func = exports.cache.get(filename);\n    if (func) {\n      return func;\n    }\n    if (!hasTemplate) {\n      template = fileLoader(filename).toString().replace(_BOM, '');\n    }\n  }\n  else if (!hasTemplate) {\n    // istanbul ignore if: should not happen at all\n    if (!filename) {\n      throw new Error('Internal EJS error: no file name or template '\n                    + 'provided');\n    }\n    template = fileLoader(filename).toString().replace(_BOM, '');\n  }\n  func = exports.compile(template, options);\n  if (options.cache) {\n    exports.cache.set(filename, func);\n  }\n  return func;\n}\n\n/**\n * Try calling handleCache with the given options and data and call the\n * callback with the result. If an error occurs, call the callback with\n * the error. Used by renderFile().\n *\n * @memberof module:ejs-internal\n * @param {Options} options    compilation options\n * @param {Object} data        template data\n * @param {RenderFileCallback} cb callback\n * @static\n */\n\nfunction tryHandleCache(options, data, cb) {\n  var result;\n  try {\n    result = handleCache(options)(data);\n  }\n  catch (err) {\n    return cb(err);\n  }\n  return cb(null, result);\n}\n\n/**\n * fileLoader is independent\n *\n * @param {String} filePath ejs file path.\n * @return {String} The contents of the specified file.\n * @static\n */\n\nfunction fileLoader(filePath){\n  return exports.fileLoader(filePath);\n}\n\n/**\n * Get the template function.\n *\n * If `options.cache` is `true`, then the template is cached.\n *\n * @memberof module:ejs-internal\n * @param {String}  path    path for the specified file\n * @param {Options} options compilation options\n * @return {(TemplateFunction|ClientFunction)}\n * Depending on the value of `options.client`, either type might be returned\n * @static\n */\n\nfunction includeFile(path, options) {\n  var opts = utils.shallowCopy({}, options);\n  opts.filename = getIncludePath(path, opts);\n  return handleCache(opts);\n}\n\n/**\n * Get the JavaScript source of an included file.\n *\n * @memberof module:ejs-internal\n * @param {String}  path    path for the specified file\n * @param {Options} options compilation options\n * @return {Object}\n * @static\n */\n\nfunction includeSource(path, options) {\n  var opts = utils.shallowCopy({}, options);\n  var includePath;\n  var template;\n  includePath = getIncludePath(path, opts);\n  template = fileLoader(includePath).toString().replace(_BOM, '');\n  opts.filename = includePath;\n  var templ = new Template(template, opts);\n  templ.generateSource();\n  return {\n    source: templ.source,\n    filename: includePath,\n    template: template\n  };\n}\n\n/**\n * Re-throw the given `err` in context to the `str` of ejs, `filename`, and\n * `lineno`.\n *\n * @implements RethrowCallback\n * @memberof module:ejs-internal\n * @param {Error}  err      Error object\n * @param {String} str      EJS source\n * @param {String} filename file name of the EJS file\n * @param {String} lineno   line number of the error\n * @static\n */\n\nfunction rethrow(err, str, flnm, lineno, esc){\n  var lines = str.split('\\n');\n  var start = Math.max(lineno - 3, 0);\n  var end = Math.min(lines.length, lineno + 3);\n  var filename = esc(flnm); // eslint-disable-line\n  // Error context\n  var context = lines.slice(start, end).map(function (line, i){\n    var curr = i + start + 1;\n    return (curr == lineno ? ' >> ' : '    ')\n      + curr\n      + '| '\n      + line;\n  }).join('\\n');\n\n  // Alter exception message\n  err.path = filename;\n  err.message = (filename || 'ejs') + ':'\n    + lineno + '\\n'\n    + context + '\\n\\n'\n    + err.message;\n\n  throw err;\n}\n\nfunction stripSemi(str){\n  return str.replace(/;(\\s*$)/, '$1');\n}\n\n/**\n * Compile the given `str` of ejs into a template function.\n *\n * @param {String}  template EJS template\n *\n * @param {Options} opts     compilation options\n *\n * @return {(TemplateFunction|ClientFunction)}\n * Depending on the value of `opts.client`, either type might be returned.\n * @public\n */\n\nexports.compile = function compile(template, opts) {\n  var templ;\n\n  // v1 compat\n  // 'scope' is 'context'\n  // FIXME: Remove this in a future version\n  if (opts && opts.scope) {\n    if (!scopeOptionWarned){\n      console.warn('`scope` option is deprecated and will be removed in EJS 3');\n      scopeOptionWarned = true;\n    }\n    if (!opts.context) {\n      opts.context = opts.scope;\n    }\n    delete opts.scope;\n  }\n  templ = new Template(template, opts);\n  return templ.compile();\n};\n\n/**\n * Render the given `template` of ejs.\n *\n * If you would like to include options but not data, you need to explicitly\n * call this function with `data` being an empty object or `null`.\n *\n * @param {String}   template EJS template\n * @param {Object}  [data={}] template data\n * @param {Options} [opts={}] compilation and rendering options\n * @return {String}\n * @public\n */\n\nexports.render = function (template, d, o) {\n  var data = d || {};\n  var opts = o || {};\n\n  // No options object -- if there are optiony names\n  // in the data, copy them to options\n  if (arguments.length == 2) {\n    utils.shallowCopyFromList(opts, data, _OPTS);\n  }\n\n  return handleCache(opts, template)(data);\n};\n\n/**\n * Render an EJS file at the given `path` and callback `cb(err, str)`.\n *\n * If you would like to include options but not data, you need to explicitly\n * call this function with `data` being an empty object or `null`.\n *\n * @param {String}             path     path to the EJS file\n * @param {Object}            [data={}] template data\n * @param {Options}           [opts={}] compilation and rendering options\n * @param {RenderFileCallback} cb callback\n * @public\n */\n\nexports.renderFile = function () {\n  var filename = arguments[0];\n  var cb = arguments[arguments.length - 1];\n  var opts = {filename: filename};\n  var data;\n\n  if (arguments.length > 2) {\n    data = arguments[1];\n\n    // No options object -- if there are optiony names\n    // in the data, copy them to options\n    if (arguments.length === 3) {\n      // Express 4\n      if (data.settings && data.settings['view options']) {\n        utils.shallowCopyFromList(opts, data.settings['view options'], _OPTS_EXPRESS);\n      }\n      // Express 3 and lower\n      else {\n        utils.shallowCopyFromList(opts, data, _OPTS_EXPRESS);\n      }\n    }\n    else {\n      // Use shallowCopy so we don't pollute passed in opts obj with new vals\n      utils.shallowCopy(opts, arguments[2]);\n    }\n\n    opts.filename = filename;\n  }\n  else {\n    data = {};\n  }\n\n  return tryHandleCache(opts, data, cb);\n};\n\n/**\n * Clear intermediate JavaScript cache. Calls {@link Cache#reset}.\n * @public\n */\n\nexports.clearCache = function () {\n  exports.cache.reset();\n};\n\nfunction Template(text, opts) {\n  opts = opts || {};\n  var options = {};\n  this.templateText = text;\n  this.mode = null;\n  this.truncate = false;\n  this.currentLine = 1;\n  this.source = '';\n  this.dependencies = [];\n  options.client = opts.client || false;\n  options.escapeFunction = opts.escape || utils.escapeXML;\n  options.compileDebug = opts.compileDebug !== false;\n  options.debug = !!opts.debug;\n  options.filename = opts.filename;\n  options.delimiter = opts.delimiter || exports.delimiter || _DEFAULT_DELIMITER;\n  options.strict = opts.strict || false;\n  options.context = opts.context;\n  options.cache = opts.cache || false;\n  options.rmWhitespace = opts.rmWhitespace;\n  options.root = opts.root;\n  options.localsName = opts.localsName || exports.localsName || _DEFAULT_LOCALS_NAME;\n\n  if (options.strict) {\n    options._with = false;\n  }\n  else {\n    options._with = typeof opts._with != 'undefined' ? opts._with : true;\n  }\n\n  this.opts = options;\n\n  this.regex = this.createRegex();\n}\n\nTemplate.modes = {\n  EVAL: 'eval',\n  ESCAPED: 'escaped',\n  RAW: 'raw',\n  COMMENT: 'comment',\n  LITERAL: 'literal'\n};\n\nTemplate.prototype = {\n  createRegex: function () {\n    var str = _REGEX_STRING;\n    var delim = utils.escapeRegExpChars(this.opts.delimiter);\n    str = str.replace(/%/g, delim);\n    return new RegExp(str);\n  },\n\n  compile: function () {\n    var src;\n    var fn;\n    var opts = this.opts;\n    var prepended = '';\n    var appended = '';\n    var escapeFn = opts.escapeFunction;\n\n    if (!this.source) {\n      this.generateSource();\n      prepended += '  var __output = [], __append = __output.push.bind(__output);' + '\\n';\n      if (opts._with !== false) {\n        prepended +=  '  with (' + opts.localsName + ' || {}) {' + '\\n';\n        appended += '  }' + '\\n';\n      }\n      appended += '  return __output.join(\"\");' + '\\n';\n      this.source = prepended + this.source + appended;\n    }\n\n    if (opts.compileDebug) {\n      src = 'var __line = 1' + '\\n'\n          + '  , __lines = ' + JSON.stringify(this.templateText) + '\\n'\n          + '  , __filename = ' + (opts.filename ?\n                JSON.stringify(opts.filename) : 'undefined') + ';' + '\\n'\n          + 'try {' + '\\n'\n          + this.source\n          + '} catch (e) {' + '\\n'\n          + '  rethrow(e, __lines, __filename, __line, escapeFn);' + '\\n'\n          + '}' + '\\n';\n    }\n    else {\n      src = this.source;\n    }\n\n    if (opts.debug) {\n      console.log(src);\n    }\n\n    if (opts.client) {\n      src = 'escapeFn = escapeFn || ' + escapeFn.toString() + ';' + '\\n' + src;\n      if (opts.compileDebug) {\n        src = 'rethrow = rethrow || ' + rethrow.toString() + ';' + '\\n' + src;\n      }\n    }\n\n    if (opts.strict) {\n      src = '\"use strict\";\\n' + src;\n    }\n\n    try {\n      fn = new Function(opts.localsName + ', escapeFn, include, rethrow', src);\n    }\n    catch(e) {\n      // istanbul ignore else\n      if (e instanceof SyntaxError) {\n        if (opts.filename) {\n          e.message += ' in ' + opts.filename;\n        }\n        e.message += ' while compiling ejs\\n\\n';\n        e.message += 'If the above error is not helpful, you may want to try EJS-Lint:\\n';\n        e.message += 'https://github.com/RyanZim/EJS-Lint';\n      }\n      throw e;\n    }\n\n    if (opts.client) {\n      fn.dependencies = this.dependencies;\n      return fn;\n    }\n\n    // Return a callable function which will execute the function\n    // created by the source-code, with the passed data as locals\n    // Adds a local `include` function which allows full recursive include\n    var returnedFn = function (data) {\n      var include = function (path, includeData) {\n        var d = utils.shallowCopy({}, data);\n        if (includeData) {\n          d = utils.shallowCopy(d, includeData);\n        }\n        return includeFile(path, opts)(d);\n      };\n      return fn.apply(opts.context, [data || {}, escapeFn, include, rethrow]);\n    };\n    returnedFn.dependencies = this.dependencies;\n    return returnedFn;\n  },\n\n  generateSource: function () {\n    var opts = this.opts;\n\n    if (opts.rmWhitespace) {\n      // Have to use two separate replace here as `^` and `$` operators don't\n      // work well with `\\r`.\n      this.templateText =\n        this.templateText.replace(/\\r/g, '').replace(/^\\s+|\\s+$/gm, '');\n    }\n\n    // Slurp spaces and tabs before <%_ and after _%>\n    this.templateText =\n      this.templateText.replace(/[ \\t]*<%_/gm, '<%_').replace(/_%>[ \\t]*/gm, '_%>');\n\n    var self = this;\n    var matches = this.parseTemplateText();\n    var d = this.opts.delimiter;\n\n    if (matches && matches.length) {\n      matches.forEach(function (line, index) {\n        var opening;\n        var closing;\n        var include;\n        var includeOpts;\n        var includeObj;\n        var includeSrc;\n        // If this is an opening tag, check for closing tags\n        // FIXME: May end up with some false positives here\n        // Better to store modes as k/v with '<' + delimiter as key\n        // Then this can simply check against the map\n        if ( line.indexOf('<' + d) === 0        // If it is a tag\n          && line.indexOf('<' + d + d) !== 0) { // and is not escaped\n          closing = matches[index + 2];\n          if (!(closing == d + '>' || closing == '-' + d + '>' || closing == '_' + d + '>')) {\n            throw new Error('Could not find matching close tag for \"' + line + '\".');\n          }\n        }\n        // HACK: backward-compat `include` preprocessor directives\n        if ((include = line.match(/^\\s*include\\s+(\\S+)/))) {\n          opening = matches[index - 1];\n          // Must be in EVAL or RAW mode\n          if (opening && (opening == '<' + d || opening == '<' + d + '-' || opening == '<' + d + '_')) {\n            includeOpts = utils.shallowCopy({}, self.opts);\n            includeObj = includeSource(include[1], includeOpts);\n            if (self.opts.compileDebug) {\n              includeSrc =\n                  '    ; (function(){' + '\\n'\n                  + '      var __line = 1' + '\\n'\n                  + '      , __lines = ' + JSON.stringify(includeObj.template) + '\\n'\n                  + '      , __filename = ' + JSON.stringify(includeObj.filename) + ';' + '\\n'\n                  + '      try {' + '\\n'\n                  + includeObj.source\n                  + '      } catch (e) {' + '\\n'\n                  + '        rethrow(e, __lines, __filename, __line);' + '\\n'\n                  + '      }' + '\\n'\n                  + '    ; }).call(this)' + '\\n';\n            }else{\n              includeSrc = '    ; (function(){' + '\\n' + includeObj.source +\n                  '    ; }).call(this)' + '\\n';\n            }\n            self.source += includeSrc;\n            self.dependencies.push(exports.resolveInclude(include[1],\n                includeOpts.filename));\n            return;\n          }\n        }\n        self.scanLine(line);\n      });\n    }\n\n  },\n\n  parseTemplateText: function () {\n    var str = this.templateText;\n    var pat = this.regex;\n    var result = pat.exec(str);\n    var arr = [];\n    var firstPos;\n\n    while (result) {\n      firstPos = result.index;\n\n      if (firstPos !== 0) {\n        arr.push(str.substring(0, firstPos));\n        str = str.slice(firstPos);\n      }\n\n      arr.push(result[0]);\n      str = str.slice(result[0].length);\n      result = pat.exec(str);\n    }\n\n    if (str) {\n      arr.push(str);\n    }\n\n    return arr;\n  },\n\n  scanLine: function (line) {\n    var self = this;\n    var d = this.opts.delimiter;\n    var newLineCount = 0;\n\n    function _addOutput() {\n      if (self.truncate) {\n        // Only replace single leading linebreak in the line after\n        // -%> tag -- this is the single, trailing linebreak\n        // after the tag that the truncation mode replaces\n        // Handle Win / Unix / old Mac linebreaks -- do the \\r\\n\n        // combo first in the regex-or\n        line = line.replace(/^(?:\\r\\n|\\r|\\n)/, '');\n        self.truncate = false;\n      }\n      else if (self.opts.rmWhitespace) {\n        // rmWhitespace has already removed trailing spaces, just need\n        // to remove linebreaks\n        line = line.replace(/^\\n/, '');\n      }\n      if (!line) {\n        return;\n      }\n\n      // Preserve literal slashes\n      line = line.replace(/\\\\/g, '\\\\\\\\');\n\n      // Convert linebreaks\n      line = line.replace(/\\n/g, '\\\\n');\n      line = line.replace(/\\r/g, '\\\\r');\n\n      // Escape double-quotes\n      // - this will be the delimiter during execution\n      line = line.replace(/\"/g, '\\\\\"');\n      self.source += '    ; __append(\"' + line + '\")' + '\\n';\n    }\n\n    newLineCount = (line.split('\\n').length - 1);\n\n    switch (line) {\n    case '<' + d:\n    case '<' + d + '_':\n      this.mode = Template.modes.EVAL;\n      break;\n    case '<' + d + '=':\n      this.mode = Template.modes.ESCAPED;\n      break;\n    case '<' + d + '-':\n      this.mode = Template.modes.RAW;\n      break;\n    case '<' + d + '#':\n      this.mode = Template.modes.COMMENT;\n      break;\n    case '<' + d + d:\n      this.mode = Template.modes.LITERAL;\n      this.source += '    ; __append(\"' + line.replace('<' + d + d, '<' + d) + '\")' + '\\n';\n      break;\n    case d + d + '>':\n      this.mode = Template.modes.LITERAL;\n      this.source += '    ; __append(\"' + line.replace(d + d + '>', d + '>') + '\")' + '\\n';\n      break;\n    case d + '>':\n    case '-' + d + '>':\n    case '_' + d + '>':\n      if (this.mode == Template.modes.LITERAL) {\n        _addOutput();\n      }\n\n      this.mode = null;\n      this.truncate = line.indexOf('-') === 0 || line.indexOf('_') === 0;\n      break;\n    default:\n        // In script mode, depends on type of tag\n      if (this.mode) {\n          // If '//' is found without a line break, add a line break.\n        switch (this.mode) {\n        case Template.modes.EVAL:\n        case Template.modes.ESCAPED:\n        case Template.modes.RAW:\n          if (line.lastIndexOf('//') > line.lastIndexOf('\\n')) {\n            line += '\\n';\n          }\n        }\n        switch (this.mode) {\n            // Just executing code\n        case Template.modes.EVAL:\n          this.source += '    ; ' + line + '\\n';\n          break;\n            // Exec, esc, and output\n        case Template.modes.ESCAPED:\n          this.source += '    ; __append(escapeFn(' + stripSemi(line) + '))' + '\\n';\n          break;\n            // Exec and output\n        case Template.modes.RAW:\n          this.source += '    ; __append(' + stripSemi(line) + ')' + '\\n';\n          break;\n        case Template.modes.COMMENT:\n              // Do nothing\n          break;\n            // Literal <%% mode, append as raw output\n        case Template.modes.LITERAL:\n          _addOutput();\n          break;\n        }\n      }\n        // In string mode, just add the output\n      else {\n        _addOutput();\n      }\n    }\n\n    if (self.opts.compileDebug && newLineCount) {\n      this.currentLine += newLineCount;\n      this.source += '    ; __line = ' + this.currentLine + '\\n';\n    }\n  }\n};\n\n/**\n * Escape characters reserved in XML.\n *\n * This is simply an export of {@link module:utils.escapeXML}.\n *\n * If `markup` is `undefined` or `null`, the empty string is returned.\n *\n * @param {String} markup Input string\n * @return {String} Escaped string\n * @public\n * @func\n * */\nexports.escapeXML = utils.escapeXML;\n\n/**\n * Express.js support.\n *\n * This is an alias for {@link module:ejs.renderFile}, in order to support\n * Express.js out-of-the-box.\n *\n * @func\n */\n\nexports.__express = exports.renderFile;\n\n// Add require support\n/* istanbul ignore else */\nif (require.extensions) {\n  require.extensions['.ejs'] = function (module, flnm) {\n    var filename = flnm || /* istanbul ignore next */ module.filename;\n    var options = {\n      filename: filename,\n      client: true\n    };\n    var template = fileLoader(filename).toString();\n    var fn = exports.compile(template, options);\n    module._compile('module.exports = ' + fn.toString() + ';', filename);\n  };\n}\n\n/**\n * Version of EJS.\n *\n * @readonly\n * @type {String}\n * @public\n */\n\nexports.VERSION = _VERSION_STRING;\n\n/**\n * Name for detection of EJS.\n *\n * @readonly\n * @type {String}\n * @public\n */\n\nexports.name = _NAME;\n\n/* istanbul ignore if */\nif (typeof window != 'undefined') {\n  window.ejs = exports;\n}\n\n},{\"../package.json\":4,\"./utils\":3,\"fs\":5,\"path\":6}],3:[function(require,module,exports){\n/*\n * EJS Embedded JavaScript templates\n * Copyright 2112 Matthew Eernisse (mde@fleegix.org)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *         http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n*/\n\n/**\n * Private utility functions\n * @module utils\n * @private\n */\n\n'use strict';\n\nvar regExpChars = /[|\\\\{}()[\\]^$+*?.]/g;\n\n/**\n * Escape characters reserved in regular expressions.\n *\n * If `string` is `undefined` or `null`, the empty string is returned.\n *\n * @param {String} string Input string\n * @return {String} Escaped string\n * @static\n * @private\n */\nexports.escapeRegExpChars = function (string) {\n  // istanbul ignore if\n  if (!string) {\n    return '';\n  }\n  return String(string).replace(regExpChars, '\\\\$&');\n};\n\nvar _ENCODE_HTML_RULES = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&#34;',\n  \"'\": '&#39;'\n};\nvar _MATCH_HTML = /[&<>\\'\"]/g;\n\nfunction encode_char(c) {\n  return _ENCODE_HTML_RULES[c] || c;\n}\n\n/**\n * Stringified version of constants used by {@link module:utils.escapeXML}.\n *\n * It is used in the process of generating {@link ClientFunction}s.\n *\n * @readonly\n * @type {String}\n */\n\nvar escapeFuncStr =\n  'var _ENCODE_HTML_RULES = {\\n'\n+ '      \"&\": \"&amp;\"\\n'\n+ '    , \"<\": \"&lt;\"\\n'\n+ '    , \">\": \"&gt;\"\\n'\n+ '    , \\'\"\\': \"&#34;\"\\n'\n+ '    , \"\\'\": \"&#39;\"\\n'\n+ '    }\\n'\n+ '  , _MATCH_HTML = /[&<>\\'\"]/g;\\n'\n+ 'function encode_char(c) {\\n'\n+ '  return _ENCODE_HTML_RULES[c] || c;\\n'\n+ '};\\n';\n\n/**\n * Escape characters reserved in XML.\n *\n * If `markup` is `undefined` or `null`, the empty string is returned.\n *\n * @implements {EscapeCallback}\n * @param {String} markup Input string\n * @return {String} Escaped string\n * @static\n * @private\n */\n\nexports.escapeXML = function (markup) {\n  return markup == undefined\n    ? ''\n    : String(markup)\n        .replace(_MATCH_HTML, encode_char);\n};\nexports.escapeXML.toString = function () {\n  return Function.prototype.toString.call(this) + ';\\n' + escapeFuncStr;\n};\n\n/**\n * Naive copy of properties from one object to another.\n * Does not recurse into non-scalar properties\n * Does not check to see if the property has a value before copying\n *\n * @param  {Object} to   Destination object\n * @param  {Object} from Source object\n * @return {Object}      Destination object\n * @static\n * @private\n */\nexports.shallowCopy = function (to, from) {\n  from = from || {};\n  for (var p in from) {\n    to[p] = from[p];\n  }\n  return to;\n};\n\n/**\n * Naive copy of a list of key names, from one object to another.\n * Only copies property if it is actually defined\n * Does not recurse into non-scalar properties\n *\n * @param  {Object} to   Destination object\n * @param  {Object} from Source object\n * @param  {Array} list List of properties to copy\n * @return {Object}      Destination object\n * @static\n * @private\n */\nexports.shallowCopyFromList = function (to, from, list) {\n  for (var i = 0; i < list.length; i++) {\n    var p = list[i];\n    if (typeof from[p] != 'undefined') {\n      to[p] = from[p];\n    }\n  }\n  return to;\n};\n\n/**\n * Simple in-process cache implementation. Does not implement limits of any\n * sort.\n *\n * @implements Cache\n * @static\n * @private\n */\nexports.cache = {\n  _data: {},\n  set: function (key, val) {\n    this._data[key] = val;\n  },\n  get: function (key) {\n    return this._data[key];\n  },\n  reset: function () {\n    this._data = {};\n  }\n};\n\n},{}],4:[function(require,module,exports){\nmodule.exports={\n  \"name\": \"ejs\",\n  \"description\": \"Embedded JavaScript templates\",\n  \"keywords\": [\n    \"template\",\n    \"engine\",\n    \"ejs\"\n  ],\n  \"version\": \"2.5.6\",\n  \"author\": {\n    \"name\": \"Matthew Eernisse\",\n    \"email\": \"mde@fleegix.org\",\n    \"url\": \"http://fleegix.org\"\n  },\n  \"contributors\": [\n    {\n      \"name\": \"Timothy Gu\",\n      \"email\": \"timothygu99@gmail.com\",\n      \"url\": \"https://timothygu.github.io\"\n    }\n  ],\n  \"license\": \"Apache-2.0\",\n  \"main\": \"./lib/ejs.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/mde/ejs.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/mde/ejs/issues\"\n  },\n  \"homepage\": \"https://github.com/mde/ejs\",\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"browserify\": \"^13.0.1\",\n    \"eslint\": \"^3.0.0\",\n    \"git-directory-deploy\": \"^1.5.1\",\n    \"istanbul\": \"~0.4.3\",\n    \"jake\": \"^8.0.0\",\n    \"jsdoc\": \"^3.4.0\",\n    \"lru-cache\": \"^4.0.1\",\n    \"mocha\": \"^3.0.2\",\n    \"uglify-js\": \"^2.6.2\"\n  },\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha\",\n    \"lint\": \"eslint \\\"**/*.js\\\" Jakefile\",\n    \"coverage\": \"istanbul cover node_modules/mocha/bin/_mocha\",\n    \"doc\": \"jake doc\",\n    \"devdoc\": \"jake doc[dev]\"\n  },\n  \"_id\": \"ejs@2.5.6\",\n  \"_shasum\": \"479636bfa3fe3b1debd52087f0acb204b4f19c88\",\n  \"_resolved\": \"https://registry.npmjs.org/ejs/-/ejs-2.5.6.tgz\",\n  \"_from\": \"ejs@*\",\n  \"_npmVersion\": \"3.10.8\",\n  \"_nodeVersion\": \"6.9.1\",\n  \"_npmUser\": {\n    \"name\": \"mde\",\n    \"email\": \"mde@fleegix.org\"\n  },\n  \"dist\": {\n    \"shasum\": \"479636bfa3fe3b1debd52087f0acb204b4f19c88\",\n    \"tarball\": \"https://registry.npmjs.org/ejs/-/ejs-2.5.6.tgz\"\n  },\n  \"maintainers\": [\n    {\n      \"name\": \"mde\",\n      \"email\": \"mde@fleegix.org\"\n    }\n  ],\n  \"_npmOperationalInternal\": {\n    \"host\": \"packages-12-west.internal.npmjs.com\",\n    \"tmp\": \"tmp/ejs-2.5.6.tgz_1487277787176_0.4875628533773124\"\n  },\n  \"directories\": {},\n  \"readme\": \"ERROR: No README data found!\"\n}\n\n},{}],5:[function(require,module,exports){\n\n},{}],6:[function(require,module,exports){\n(function (process){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n    /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n  return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : process.cwd();\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n  var isAbsolute = exports.isAbsolute(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isAbsolute).join('/');\n\n  if (!path && !isAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n  return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return exports.normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n  from = exports.resolve(from).substr(1);\n  to = exports.resolve(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n  var result = splitPath(path),\n      root = result[0],\n      dir = result[1];\n\n  if (!root && !dir) {\n    // No dirname whatsoever\n    return '.';\n  }\n\n  if (dir) {\n    // It has a dirname, strip trailing slash\n    dir = dir.substr(0, dir.length - 1);\n  }\n\n  return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n  var f = splitPath(path)[2];\n  // TODO: make this comparison case-insensitive on windows?\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n};\n\n\nexports.extname = function(path) {\n  return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n    ? function (str, start, len) { return str.substr(start, len) }\n    : function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    }\n;\n\n}).call(this,require('_process'))\n},{\"_process\":7}],7:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}]},{},[1]);\n"
  },
  {
    "path": "SourceryJS/SourceryJS.h",
    "content": "//\n//  SourceryJS.h\n//  SourceryJS\n//\n//  Created by Ilya Puchka on 25/01/2018.\n//  Copyright © 2018 Pixle. All rights reserved.\n//\n\n#import <Cocoa/Cocoa.h>\n\n//! Project version number for SourceryJS.\nFOUNDATION_EXPORT double SourceryJSVersionNumber;\n\n//! Project version string for SourceryJS.\nFOUNDATION_EXPORT const unsigned char SourceryJSVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <SourceryJS/PublicHeader.h>\n\n\n"
  },
  {
    "path": "SourceryJS/Sources/EJSTemplate+Tests.swift",
    "content": "// swift test runs tests in DEBUG, thus this file will only be compiled for `swift test`\n#if canImport(ObjectiveC) && DEBUG\nimport JavaScriptCore\nimport PathKit\n\n// (c) https://forums.swift.org/t/swift-5-3-spm-resources-in-tests-uses-wrong-bundle-path/37051/46\nprivate extension Bundle {\n    static let mypackageResources: Bundle = {\n        #if DEBUG\n            if let moduleName = Bundle(for: BundleFinder.self).bundleIdentifier,\n               let testBundlePath = ProcessInfo.processInfo.environment[\"XCTestBundlePath\"] {\n                if let resourceBundle = Bundle(path: testBundlePath + \"/\\(moduleName)_\\(moduleName).bundle\") {\n                    return resourceBundle\n                }\n            }\n        #endif\n        return Bundle.module\n    }()\n\n    private final class BundleFinder {}\n}\n\npublic extension Foundation.Bundle {\n    /// Returns the resource bundle associated with the current Swift module.\n    static var jsModule: Bundle = {\n        let bundleName = \"Sourcery_SourceryJS\"\n\n        let candidates = [\n            // Bundle should be present here when the package is linked into an App.\n            Bundle.main.resourceURL,\n\n            // Bundle should be present here when the package is linked into a framework.\n            Bundle(for: EJSTemplate.self).resourceURL,\n\n            // For command-line tools.\n            Bundle.main.bundleURL,\n        ]\n\n        for candidate in candidates {\n            let bundlePath = candidate?.appendingPathComponent(bundleName + \".bundle\")\n            if let bundle = bundlePath.flatMap(Bundle.init(url:)) {\n                return bundle\n            }\n        }\n        return Bundle.mypackageResources\n    }()\n}\n\nopen class EJSTemplate {\n\n    public struct Error: Swift.Error, CustomStringConvertible {\n        public let description: String\n        public init(_ value: String) {\n            self.description = value\n        }\n    }\n\n    /// Should be set to the path of EJS before rendering any template.\n    /// By default reads ejs.js from framework bundle.\n    #if SWIFT_PACKAGE\n    static let bundle = Bundle.jsModule\n    #else\n    static let bundle = Bundle(for: EJSTemplate.self)\n    #endif\n    public static var ejsPath: Path? = {\n        let bundle = EJSTemplate.bundle\n        guard let path = bundle.path(forResource: \"ejs\", ofType: \"js\") else {\n            return nil\n        }\n        return Path(path)\n    }()\n\n    private static let jsVm = JSVirtualMachine()\n\n    public let sourcePath: Path\n    public let templateString: String\n    let ejs: String\n\n    public private(set) lazy var jsContext: JSContext = {\n        let jsContext = JSContext(virtualMachine: EJSTemplate.jsVm)!\n        jsContext.setObject(self.templateString, forKeyedSubscript: \"template\" as NSString)\n        jsContext.setObject(self.sourcePath.lastComponent, forKeyedSubscript: \"templateName\" as NSString)\n        jsContext.setObject(self.context, forKeyedSubscript: \"templateContext\" as NSString)\n        let include: @convention(block) (String) -> [String:String] = { [unowned self] in self.includeFile($0) }\n        jsContext.setObject(include, forKeyedSubscript: \"include\" as NSString)\n        return jsContext\n    }()\n\n    open var context: [String: Any] = [:] {\n        didSet {\n            jsContext.setObject(context, forKeyedSubscript: \"templateContext\" as NSString)\n        }\n    }\n\n    public convenience init(path: Path, ejsPath: Path) throws {\n        try self.init(path: path, templateString: try path.read(), ejsPath: ejsPath)\n    }\n\n    public init(path: Path, templateString: String, ejsPath: Path) throws {\n        self.templateString = templateString\n        sourcePath = path\n        self.ejs = try ejsPath.read(.utf8)\n    }\n\n    public init(templateString: String, ejsPath: Path) throws {\n        self.templateString = templateString\n        sourcePath = \"\"\n        self.ejs = try ejsPath.read(.utf8)\n    }\n\n    public func render(_ context: [String: Any]) throws -> String {\n        self.context = context\n\n        var error: Error?\n        jsContext.exceptionHandler = {\n            error = error ?? $1.map({ Error($0.toString()) }) ?? Error(\"Unknown JavaScript error\")\n        }\n\n        jsContext.evaluateScript(\"var window = this; \\(ejs)\")\n\n        if let error = error {\n            throw Error(\"\\(sourcePath): \\(error)\")\n        }\n\n        let content = jsContext.objectForKeyedSubscript(\"content\").toString()\n        return content ?? \"\"\n    }\n\n    func includeFile(_ requestedPath: String) -> [String: String] {\n        let requestedPath = Path(requestedPath)\n        let path = sourcePath.parent() + requestedPath\n        var includedTemplate: String? = try? path.read()\n\n        /// The template extension may be omitted, so try to read again by adding it if a template was not found\n        if includedTemplate == nil, path.extension != \"ejs\" {\n            includedTemplate = try? Path(path.string + \".ejs\").read()\n        }\n\n        var templateDictionary = [String: String]()\n        templateDictionary[\"template\"] = includedTemplate\n        if requestedPath.components.count > 1 {\n            templateDictionary[\"basePath\"] = Path(components: requestedPath.components.dropLast()).string\n        }\n\n        return templateDictionary\n    }\n\n}\n#endif\n"
  },
  {
    "path": "SourceryJS/Sources/EJSTemplate.swift",
    "content": "#if canImport(ObjectiveC) && !DEBUG\nimport JavaScriptCore\nimport PathKit\n\nprivate extension Foundation.Bundle {\n    /// Returns the resource bundle associated with the current Swift module.\n    static var jsModule: Bundle = {\n        let bundleName = \"Sourcery_SourceryJS\"\n\n        let candidates = [\n            // Bundle should be present here when the package is linked into an App.\n            Bundle.main.resourceURL,\n\n            // Bundle should be present here when the package is linked into a framework.\n            Bundle(for: EJSTemplate.self).resourceURL,\n\n            // For command-line tools.\n            Bundle.main.bundleURL,\n        ]\n\n        for candidate in candidates {\n            let bundlePath = candidate?.appendingPathComponent(bundleName + \".bundle\")\n            if let bundle = bundlePath.flatMap(Bundle.init(url:)) {\n                return bundle\n            }\n        }\n\n        return Bundle(for: EJSTemplate.self)\n    }()\n}\n\nopen class EJSTemplate {\n\n    public struct Error: Swift.Error, CustomStringConvertible {\n        public let description: String\n        public init(_ value: String) {\n            self.description = value\n        }\n    }\n\n    /// Should be set to the path of EJS before rendering any template.\n    /// By default reads ejs.js from framework bundle.\n    #if SWIFT_PACKAGE\n    static let bundle = Bundle.jsModule\n    #else\n    static let bundle = Bundle(for: EJSTemplate.self)\n    #endif\n    public static var ejsPath: Path! = bundle.path(forResource: \"ejs\", ofType: \"js\").map({ Path($0) })\n\n    private static let jsVm = JSVirtualMachine()\n\n    public let sourcePath: Path\n    public let templateString: String\n    let ejs: String\n\n    public private(set) lazy var jsContext: JSContext = {\n        let jsContext = JSContext(virtualMachine: EJSTemplate.jsVm)!\n        jsContext.setObject(self.templateString, forKeyedSubscript: \"template\" as NSString)\n        jsContext.setObject(self.sourcePath.lastComponent, forKeyedSubscript: \"templateName\" as NSString)\n        jsContext.setObject(self.context, forKeyedSubscript: \"templateContext\" as NSString)\n        let include: @convention(block) (String) -> [String:String] = { [unowned self] in self.includeFile($0) }\n        jsContext.setObject(include, forKeyedSubscript: \"include\" as NSString)\n        return jsContext\n    }()\n\n    open var context: [String: Any] = [:] {\n        didSet {\n            jsContext.setObject(context, forKeyedSubscript: \"templateContext\" as NSString)\n        }\n    }\n\n    public convenience init(path: Path, ejsPath: Path = EJSTemplate.ejsPath) throws {\n        try self.init(path: path, templateString: try path.read(), ejsPath: ejsPath)\n    }\n\n    public init(path: Path, templateString: String, ejsPath: Path = EJSTemplate.ejsPath) throws {\n        self.templateString = templateString\n        sourcePath = path\n        self.ejs = try ejsPath.read(.utf8)\n    }\n    \n    public init(templateString: String, ejsPath: Path = EJSTemplate.ejsPath) throws {\n        self.templateString = templateString\n        sourcePath = \"\"\n        self.ejs = try ejsPath.read(.utf8)\n    }\n\n    public func render(_ context: [String: Any]) throws -> String {\n        self.context = context\n\n        var error: Error?\n        jsContext.exceptionHandler = {\n            error = error ?? $1.map({ Error($0.toString()) }) ?? Error(\"Unknown JavaScript error\")\n        }\n\n        jsContext.evaluateScript(\"var window = this; \\(ejs)\")\n\n        if let error = error {\n            throw Error(\"\\(sourcePath): \\(error)\")\n        }\n\n        let content = jsContext.objectForKeyedSubscript(\"content\").toString()\n        return content ?? \"\"\n    }\n\n    func includeFile(_ requestedPath: String) -> [String: String] {\n        let requestedPath = Path(requestedPath)\n        let path = sourcePath.parent() + requestedPath\n        var includedTemplate: String? = try? path.read()\n\n        /// The template extension may be omitted, so try to read again by adding it if a template was not found\n        if includedTemplate == nil, path.extension != \"ejs\" {\n            includedTemplate = try? Path(path.string + \".ejs\").read()\n        }\n\n        var templateDictionary = [String: String]()\n        templateDictionary[\"template\"] = includedTemplate\n        if requestedPath.components.count > 1 {\n            templateDictionary[\"basePath\"] = Path(components: requestedPath.components.dropLast()).string\n        }\n\n        return templateDictionary\n    }\n\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/AccessLevel.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n/// :nodoc:\npublic enum AccessLevel: String {\n    case `package` = \"package\"\n    case `internal` = \"internal\"\n    case `private` = \"private\"\n    case `fileprivate` = \"fileprivate\"\n    case `public` = \"public\"\n    case `open` = \"open\"\n    case none = \"\"\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/Actor.swift",
    "content": "import Foundation\n\n// sourcery: skipDescription\n/// Descibes Swift actor\n#if canImport(ObjectiveC)\n@objc(SwiftActor) @objcMembers\n#endif\npublic final class Actor: Type {\n    \n    // sourcery: skipJSExport\n    public class var kind: String { return \"actor\" }\n\n    /// Returns \"actor\"\n    public override var kind: String { Self.kind }\n\n    /// Whether type is final\n    public var isFinal: Bool {\n        modifiers.contains { $0.name == \"final\" }\n    }\n\n    /// Whether method is distributed method\n    public var isDistributed: Bool {\n        modifiers.contains(where: { $0.name == \"distributed\" })\n    }\n\n    /// :nodoc:\n    public override init(name: String = \"\",\n                         parent: Type? = nil,\n                         accessLevel: AccessLevel = .internal,\n                         isExtension: Bool = false,\n                         variables: [Variable] = [],\n                         methods: [Method] = [],\n                         subscripts: [Subscript] = [],\n                         inheritedTypes: [String] = [],\n                         containedTypes: [Type] = [],\n                         typealiases: [Typealias] = [],\n                         genericRequirements: [GenericRequirement] = [],\n                         attributes: AttributeList = [:],\n                         modifiers: [SourceryModifier] = [],\n                         annotations: [String: NSObject] = [:],\n                         documentation: [String] = [],\n                         isGeneric: Bool = false,\n                         implements: [String: Type] = [:],\n                         kind: String = Actor.kind) {\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            genericRequirements: genericRequirements,\n            attributes: attributes,\n            modifiers: modifiers,\n            annotations: annotations,\n            documentation: documentation,\n            isGeneric: isGeneric,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string.append(\", \")\n        string.append(\"kind = \\(String(describing: self.kind)), \")\n        string.append(\"isFinal = \\(String(describing: self.isFinal)), \")\n        string.append(\"isDistributed = \\(String(describing: self.isDistributed))\")\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Actor else {\n            results.append(\"Incorrect type <expected: Actor, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Actor else { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Actor.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n        }\n// sourcery:end\n    \n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/Annotations.swift",
    "content": "import Foundation\n\npublic typealias Annotations = [String: NSObject]\n\n/// Describes annotated declaration, i.e. type, method, variable, enum case\npublic protocol Annotated {\n    /**\n     All annotations of declaration stored by their name. Value can be `bool`, `String`, float `NSNumber`\n     or array of those types if you use several annotations with the same name.\n    \n     **Example:**\n     \n     ```\n     //sourcery: booleanAnnotation\n     //sourcery: stringAnnotation = \"value\"\n     //sourcery: numericAnnotation = 0.5\n     \n     [\n      \"booleanAnnotation\": true,\n      \"stringAnnotation\": \"value\",\n      \"numericAnnotation\": 0.5\n     ]\n     ```\n    */\n    var annotations: Annotations { get }\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/Attribute.swift",
    "content": "import Foundation\n\n/// Describes Swift attribute\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic class Attribute: NSObject, AutoCoding, AutoEquatable, AutoDiffable, AutoJSExport, Diffable {\n\n    /// Attribute name\n    public let name: String\n\n    /// Attribute arguments\n    public let arguments: [String: NSObject]\n\n    // sourcery: skipJSExport\n    let _description: String\n\n    // sourcery: skipEquality, skipDescription, skipCoding, skipJSExport\n    /// :nodoc:\n    public var __parserData: Any?\n\n    /// :nodoc:\n    public init(name: String, arguments: [String: NSObject] = [:], description: String? = nil) {\n        self.name = name\n        self.arguments = arguments\n        let argumentDescription = arguments.map { \"\\($0.key): \\($0.value is String ? \"\\\"\" : \"\")\\($0.value)\\($0.value is String ? \"\\\"\" : \"\")\" }.joined(separator: \", \")\n        self._description = description ?? \"@\\(name)\\(!argumentDescription.isEmpty ? \"(\" : \"\")\\(argumentDescription)\\(!argumentDescription.isEmpty ? \")\" : \"\")\"\n    }\n\n    /// TODO: unify `asSource` / `description`?\n    public var asSource: String {\n        description\n    }\n\n    /// Attribute description that can be used in a template.\n    public override var description: String {\n        _description\n    }\n\n    /// :nodoc:\n    public enum Identifier: String {\n        case convenience\n        case required\n        case available\n        case discardableResult\n        case GKInspectable = \"gkinspectable\"\n        case objc\n        case objcMembers\n        case nonobjc\n        case NSApplicationMain\n        case NSCopying\n        case NSManaged\n        case UIApplicationMain\n        case IBOutlet = \"iboutlet\"\n        case IBInspectable = \"ibinspectable\"\n        case IBDesignable = \"ibdesignable\"\n        case autoclosure\n        case convention\n        case mutating\n        case nonisolated\n        case isolated\n        case escaping\n        case final\n        case open\n        case lazy\n        case `package` = \"package\"\n        case `public` = \"public\"\n        case `internal` = \"internal\"\n        case `private` = \"private\"\n        case `fileprivate` = \"fileprivate\"\n        case publicSetter = \"setter_access.public\"\n        case internalSetter = \"setter_access.internal\"\n        case privateSetter = \"setter_access.private\"\n        case fileprivateSetter = \"setter_access.fileprivate\"\n        case optional\n        case dynamic\n\n        public init?(identifier: String) {\n            let identifier = identifier.trimmingPrefix(\"source.decl.attribute.\")\n            if identifier == \"objc.name\" {\n                self.init(rawValue: \"objc\")\n            } else {\n                self.init(rawValue: identifier)\n            }\n        }\n\n        public static func from(string: String) -> Identifier? {\n            switch string {\n            case \"GKInspectable\":\n                return Identifier.GKInspectable\n            case \"objc\":\n                return .objc\n            case \"IBOutlet\":\n                return .IBOutlet\n            case \"IBInspectable\":\n                return .IBInspectable\n            case \"IBDesignable\":\n                return .IBDesignable\n            default:\n                return Identifier(rawValue: string)\n            }\n        }\n\n        public var name: String {\n            switch self {\n            case .GKInspectable:\n                return \"GKInspectable\"\n            case .objc:\n                return \"objc\"\n            case .IBOutlet:\n                return \"IBOutlet\"\n            case .IBInspectable:\n                return \"IBInspectable\"\n            case .IBDesignable:\n                return \"IBDesignable\"\n            case .fileprivateSetter:\n                return \"fileprivate\"\n            case .privateSetter:\n                return \"private\"\n            case .internalSetter:\n                return \"internal\"\n            case .publicSetter:\n                return \"public\"\n            default:\n                return rawValue\n            }\n        }\n\n        public var description: String {\n            return hasAtPrefix ? \"@\\(name)\" : name\n        }\n\n        public var hasAtPrefix: Bool {\n            switch self {\n            case .available,\n                 .discardableResult,\n                 .GKInspectable,\n                 .objc,\n                 .objcMembers,\n                 .nonobjc,\n                 .NSApplicationMain,\n                 .NSCopying,\n                 .NSManaged,\n                 .UIApplicationMain,\n                 .IBOutlet,\n                 .IBInspectable,\n                 .IBDesignable,\n                 .autoclosure,\n                 .convention,\n                 .escaping:\n                return true\n            default:\n                return false\n            }\n        }\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Attribute else {\n            results.append(\"Incorrect type <expected: Attribute, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"arguments\").trackDifference(actual: self.arguments, expected: castObject.arguments))\n        results.append(contentsOf: DiffableResult(identifier: \"_description\").trackDifference(actual: self._description, expected: castObject._description))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.arguments)\n        hasher.combine(self._description)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Attribute else { return false }\n        if self.name != rhs.name { return false }\n        if self.arguments != rhs.arguments { return false }\n        if self._description != rhs._description { return false }\n        return true\n    }\n\n// sourcery:inline:Attribute.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let arguments: [String: NSObject] = aDecoder.decode(forKey: \"arguments\") else { \n                withVaList([\"arguments\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.arguments = arguments\n            guard let _description: String = aDecoder.decode(forKey: \"_description\") else { \n                withVaList([\"_description\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self._description = _description\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.arguments, forKey: \"arguments\")\n            aCoder.encode(self._description, forKey: \"_description\")\n        }\n// sourcery:end\n\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/Class.swift",
    "content": "import Foundation\n// sourcery: skipDescription\n/// Descibes Swift class\n#if canImport(ObjectiveC)\n@objc(SwiftClass) @objcMembers\n#endif\npublic final class Class: Type {\n    // sourcery: skipJSExport\n    public class var kind: String { return \"class\" }\n\n    /// Returns \"class\"\n    public override var kind: String { Self.kind }\n\n    /// Whether type is final \n    public var isFinal: Bool {\n        modifiers.contains { $0.name == \"final\" }\n    }\n\n    /// :nodoc:\n    public override init(name: String = \"\",\n                         parent: Type? = nil,\n                         accessLevel: AccessLevel = .internal,\n                         isExtension: Bool = false,\n                         variables: [Variable] = [],\n                         methods: [Method] = [],\n                         subscripts: [Subscript] = [],\n                         inheritedTypes: [String] = [],\n                         containedTypes: [Type] = [],\n                         typealiases: [Typealias] = [],\n                         genericRequirements: [GenericRequirement] = [],\n                         attributes: AttributeList = [:],\n                         modifiers: [SourceryModifier] = [],\n                         annotations: [String: NSObject] = [:],\n                         documentation: [String] = [],\n                         isGeneric: Bool = false,\n                         implements: [String: Type] = [:],\n                         kind: String = Class.kind) {\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            genericRequirements: genericRequirements,\n            attributes: attributes,\n            modifiers: modifiers,\n            annotations: annotations,\n            documentation: documentation,\n            isGeneric: isGeneric,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string.append(\", \")\n        string.append(\"kind = \\(String(describing: self.kind)), \")\n        string.append(\"isFinal = \\(String(describing: self.isFinal))\")\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Class else {\n            results.append(\"Incorrect type <expected: Class, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Class else { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Class.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n        }\n// sourcery:end\n\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/Definition.swift",
    "content": "import Foundation\n\n/// Describes that the object is defined in a context of some `Type`\npublic protocol Definition: AnyObject {\n    /// Reference to type name where the object is defined, \n    /// nil if defined outside of any `enum`, `struct`, `class` etc\n    var definedInTypeName: TypeName? { get }\n\n    /// Reference to actual type where the object is defined, \n    /// nil if defined outside of any `enum`, `struct`, `class` etc or type is unknown\n    var definedInType: Type? { get }\n\n    // sourcery: skipJSExport\n    /// Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a `definedInTypeName`\n    var actualDefinedInTypeName: TypeName? { get }\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/Documentation.swift",
    "content": "import Foundation\n\npublic typealias Documentation = [String]\n\n/// Describes a declaration with documentation, i.e. type, method, variable, enum case\npublic protocol Documented {\n    var documentation: Documentation { get }\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/Import.swift",
    "content": "import Foundation\n\n/// Defines import type\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic class Import: NSObject, SourceryModelWithoutDescription, Diffable {\n    /// Import kind, e.g. class, struct in `import class Module.ClassName`\n    public var kind: String?\n\n    /// Import path\n    public var path: String\n\n    /// :nodoc:\n    public init(path: String, kind: String? = nil) {\n        self.path = path\n        self.kind = kind\n    }\n\n    /// Full import value e.g. `import struct Module.StructName`\n    public override var description: String {\n        if let kind = kind {\n            return \"\\(kind) \\(path)\"\n        }\n\n        return path\n    }\n\n    /// Returns module name from a import, e.g. if you had `import struct Module.Submodule.Struct` it will return `Module.Submodule`\n    public var moduleName: String {\n        if kind != nil {\n            if let idx = path.lastIndex(of: \".\") {\n                return String(path[..<idx])\n            } else {\n                return path\n            }\n        } else {\n            return path\n        }\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Import else {\n            results.append(\"Incorrect type <expected: Import, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"kind\").trackDifference(actual: self.kind, expected: castObject.kind))\n        results.append(contentsOf: DiffableResult(identifier: \"path\").trackDifference(actual: self.path, expected: castObject.path))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.kind)\n        hasher.combine(self.path)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Import else { return false }\n        if self.kind != rhs.kind { return false }\n        if self.path != rhs.path { return false }\n        return true\n    }\n\n// sourcery:inline:Import.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.kind = aDecoder.decode(forKey: \"kind\")\n            guard let path: String = aDecoder.decode(forKey: \"path\") else { \n                withVaList([\"path\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.path = path\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.kind, forKey: \"kind\")\n            aCoder.encode(self.path, forKey: \"path\")\n        }\n\n// sourcery:end\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/Modifier.swift",
    "content": "import Foundation\n\npublic typealias SourceryModifier = Modifier\n/// modifier can be thing like `private`, `class`, `nonmutating`\n/// if a declaration has modifier like `private(set)` it's name will be `private` and detail will be `set`\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic class Modifier: NSObject, AutoCoding, AutoEquatable, AutoDiffable, AutoJSExport, Diffable {\n\n    /// The declaration modifier name.\n    public let name: String\n\n    /// The modifier detail, if any.\n    public let detail: String?\n\n    public init(name: String, detail: String? = nil) {\n        self.name = name\n        self.detail = detail\n    }\n\n    public var asSource: String {\n        if let detail = detail {\n            return \"\\(name)(\\(detail))\"\n        } else {\n            return name\n        }\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Modifier else {\n            results.append(\"Incorrect type <expected: Modifier, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"detail\").trackDifference(actual: self.detail, expected: castObject.detail))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.detail)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Modifier else { return false }\n        if self.name != rhs.name { return false }\n        if self.detail != rhs.detail { return false }\n        return true\n    }\n\n    // sourcery:inline:Modifier.AutoCoding\n\n            /// :nodoc:\n            required public init?(coder aDecoder: NSCoder) {\n                guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                    withVaList([\"name\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.name = name\n                self.detail = aDecoder.decode(forKey: \"detail\")\n            }\n\n            /// :nodoc:\n            public func encode(with aCoder: NSCoder) {\n                aCoder.encode(self.name, forKey: \"name\")\n                aCoder.encode(self.detail, forKey: \"detail\")\n            }\n    // sourcery:end\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/PhantomProtocols.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 23/01/2017.\n// Copyright (c) 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n/// Phantom protocol for diffing\nprotocol AutoDiffable {}\n\n/// Phantom protocol for equality\nprotocol AutoEquatable {}\n\n/// Phantom protocol for equality\nprotocol AutoDescription {}\n\n/// Phantom protocol for NSCoding\nprotocol AutoCoding {}\n\nprotocol AutoJSExport {}\n\n/// Phantom protocol for NSCoding, Equatable and Diffable\nprotocol SourceryModelWithoutDescription: AutoDiffable, AutoEquatable, AutoCoding, AutoJSExport {}\n\nprotocol SourceryModel: SourceryModelWithoutDescription, AutoDescription {}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/Protocol.swift",
    "content": "//\n//  Protocol.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zablocki on 09/12/2016.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n#if canImport(ObjectiveC)\n\n/// :nodoc:\npublic typealias SourceryProtocol = Protocol\n\n/// Describes Swift protocol\n@objcMembers\npublic final class Protocol: Type {\n\n    // sourcery: skipJSExport\n    public class var kind: String { return \"protocol\" }\n\n    /// Returns \"protocol\"\n    public override var kind: String { Self.kind }\n\n    /// list of all declared associated types with their names as keys\n    public var associatedTypes: [String: AssociatedType] {\n        didSet {\n            isGeneric = !associatedTypes.isEmpty || !genericRequirements.isEmpty\n        }\n    }\n\n    // sourcery: skipCoding\n    /// list of generic requirements\n    public override var genericRequirements: [GenericRequirement] {\n        didSet {\n            isGeneric = !associatedTypes.isEmpty || !genericRequirements.isEmpty\n        }\n    }\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                parent: Type? = nil,\n                accessLevel: AccessLevel = .internal,\n                isExtension: Bool = false,\n                variables: [Variable] = [],\n                methods: [Method] = [],\n                subscripts: [Subscript] = [],\n                inheritedTypes: [String] = [],\n                containedTypes: [Type] = [],\n                typealiases: [Typealias] = [],\n                associatedTypes: [String: AssociatedType] = [:],\n                genericRequirements: [GenericRequirement] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                implements: [String: Type] = [:],\n                kind: String = Protocol.kind) {\n        self.associatedTypes = associatedTypes\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            genericRequirements: genericRequirements,\n            attributes: attributes,\n            modifiers: modifiers,\n            annotations: annotations,\n            documentation: documentation,\n            isGeneric: !associatedTypes.isEmpty || !genericRequirements.isEmpty,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string.append(\", \")\n        string.append(\"kind = \\(String(describing: self.kind)), \")\n        string.append(\"associatedTypes = \\(String(describing: self.associatedTypes)), \")\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Protocol else {\n            results.append(\"Incorrect type <expected: Protocol, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"associatedTypes\").trackDifference(actual: self.associatedTypes, expected: castObject.associatedTypes))\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.associatedTypes)\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Protocol else { return false }\n        if self.associatedTypes != rhs.associatedTypes { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Protocol.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let associatedTypes: [String: AssociatedType] = aDecoder.decode(forKey: \"associatedTypes\") else { \n                withVaList([\"associatedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.associatedTypes = associatedTypes\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n            aCoder.encode(self.associatedTypes, forKey: \"associatedTypes\")\n        }\n// sourcery:end\n}\n#endif"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/ProtocolComposition.swift",
    "content": "// Created by eric_horacek on 2/12/20.\n// Copyright © 2020 Airbnb Inc. All rights reserved.\n\nimport Foundation\n\n/// Describes a Swift [protocol composition](https://docs.swift.org/swift-book/ReferenceManual/Types.html#ID454).\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class ProtocolComposition: Type {\n\n    // sourcery: skipJSExport\n    public class var kind: String { return \"protocolComposition\" }\n\n    /// Returns \"protocolComposition\"\n    public override var kind: String { Self.kind }\n\n    /// The names of the types composed to form this composition\n    public let composedTypeNames: [TypeName]\n\n    // sourcery: skipEquality, skipDescription\n    /// The types composed to form this composition, if known\n    public var composedTypes: [Type]?\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                parent: Type? = nil,\n                accessLevel: AccessLevel = .internal,\n                isExtension: Bool = false,\n                variables: [Variable] = [],\n                methods: [Method] = [],\n                subscripts: [Subscript] = [],\n                inheritedTypes: [String] = [],\n                containedTypes: [Type] = [],\n                typealiases: [Typealias] = [],\n                attributes: AttributeList = [:],\n                annotations: [String: NSObject] = [:],\n                isGeneric: Bool = false,\n                composedTypeNames: [TypeName] = [],\n                composedTypes: [Type]? = nil,\n                implements: [String: Type] = [:],\n                kind: String = ProtocolComposition.kind) {\n        self.composedTypeNames = composedTypeNames\n        self.composedTypes = composedTypes\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            annotations: annotations,\n            isGeneric: isGeneric,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string += \", \"\n        string += \"kind = \\(String(describing: self.kind)), \"\n        string += \"composedTypeNames = \\(String(describing: self.composedTypeNames))\"\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? ProtocolComposition else {\n            results.append(\"Incorrect type <expected: ProtocolComposition, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"composedTypeNames\").trackDifference(actual: self.composedTypeNames, expected: castObject.composedTypeNames))\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.composedTypeNames)\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? ProtocolComposition else { return false }\n        if self.composedTypeNames != rhs.composedTypeNames { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:ProtocolComposition.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let composedTypeNames: [TypeName] = aDecoder.decode(forKey: \"composedTypeNames\") else { \n                withVaList([\"composedTypeNames\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.composedTypeNames = composedTypeNames\n            self.composedTypes = aDecoder.decode(forKey: \"composedTypes\")\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n            aCoder.encode(self.composedTypeNames, forKey: \"composedTypeNames\")\n            aCoder.encode(self.composedTypes, forKey: \"composedTypes\")\n        }\n// sourcery:end\n\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/Struct.swift",
    "content": "//\n//  Struct.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zablocki on 13/09/2016.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n// sourcery: skipDescription\n/// Describes Swift struct\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class Struct: Type {\n\n    // sourcery: skipJSExport\n    public class var kind: String { return \"struct\" }\n\n    /// Returns \"struct\"\n    public override var kind: String { Self.kind }\n\n    /// :nodoc:\n    public override init(name: String = \"\",\n                         parent: Type? = nil,\n                         accessLevel: AccessLevel = .internal,\n                         isExtension: Bool = false,\n                         variables: [Variable] = [],\n                         methods: [Method] = [],\n                         subscripts: [Subscript] = [],\n                         inheritedTypes: [String] = [],\n                         containedTypes: [Type] = [],\n                         typealiases: [Typealias] = [],\n                         genericRequirements: [GenericRequirement] = [],\n                         attributes: AttributeList = [:],\n                         modifiers: [SourceryModifier] = [],\n                         annotations: [String: NSObject] = [:],\n                         documentation: [String] = [],\n                         isGeneric: Bool = false,\n                         implements: [String: Type] = [:],\n                         kind: String = Struct.kind) {\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            genericRequirements: genericRequirements,\n            attributes: attributes,\n            modifiers: modifiers,\n            annotations: annotations,\n            documentation: documentation,\n            isGeneric: isGeneric,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string += \", \"\n        string += \"kind = \\(String(describing: self.kind))\"\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Struct else {\n            results.append(\"Incorrect type <expected: Struct, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Struct else { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Struct.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n        }\n// sourcery:end\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/TypeName/Array.swift",
    "content": "import Foundation\n\n/// Describes array type\n#if canImport(ObjectiveC)\n@objcMembers \n#endif\npublic final class ArrayType: NSObject, SourceryModel, Diffable {\n    /// Type name used in declaration\n    public var name: String\n\n    /// Array element type name\n    public var elementTypeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Array element type, if known\n    public var elementType: Type?\n\n    /// :nodoc:\n    public init(name: String, elementTypeName: TypeName, elementType: Type? = nil) {\n        self.name = name\n        self.elementTypeName = elementTypeName\n        self.elementType = elementType\n    }\n\n    /// Returns array as generic type\n    public var asGeneric: GenericType {\n        GenericType(name: \"Array\", typeParameters: [\n            .init(typeName: elementTypeName, type: elementType)\n        ])\n    }\n\n    public var asSource: String {\n        \"[\\(elementTypeName.asSource)]\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"elementTypeName = \\(String(describing: self.elementTypeName)), \")\n        string.append(\"asGeneric = \\(String(describing: self.asGeneric)), \")\n        string.append(\"asSource = \\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? ArrayType else {\n            results.append(\"Incorrect type <expected: ArrayType, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"elementTypeName\").trackDifference(actual: self.elementTypeName, expected: castObject.elementTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.elementTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? ArrayType else { return false }\n        if self.name != rhs.name { return false }\n        if self.elementTypeName != rhs.elementTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:ArrayType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let elementTypeName: TypeName = aDecoder.decode(forKey: \"elementTypeName\") else { \n                withVaList([\"elementTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.elementTypeName = elementTypeName\n            self.elementType = aDecoder.decode(forKey: \"elementType\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.elementTypeName, forKey: \"elementTypeName\")\n            aCoder.encode(self.elementType, forKey: \"elementType\")\n        }\n// sourcery:end\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/TypeName/Dictionary.swift",
    "content": "import Foundation\n\n/// Describes dictionary type\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class DictionaryType: NSObject, SourceryModel, Diffable {\n    /// Type name used in declaration\n    public var name: String\n\n    /// Dictionary value type name\n    public var valueTypeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Dictionary value type, if known\n    public var valueType: Type?\n\n    /// Dictionary key type name\n    public var keyTypeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Dictionary key type, if known\n    public var keyType: Type?\n\n    /// :nodoc:\n    public init(name: String, valueTypeName: TypeName, valueType: Type? = nil, keyTypeName: TypeName, keyType: Type? = nil) {\n        self.name = name\n        self.valueTypeName = valueTypeName\n        self.valueType = valueType\n        self.keyTypeName = keyTypeName\n        self.keyType = keyType\n    }\n\n    /// Returns dictionary as generic type\n    public var asGeneric: GenericType {\n        GenericType(name: \"Dictionary\", typeParameters: [\n            .init(typeName: keyTypeName),\n            .init(typeName: valueTypeName)\n        ])\n    }\n\n    public var asSource: String {\n        \"[\\(keyTypeName.asSource): \\(valueTypeName.asSource)]\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"valueTypeName = \\(String(describing: self.valueTypeName)), \")\n        string.append(\"keyTypeName = \\(String(describing: self.keyTypeName)), \")\n        string.append(\"asGeneric = \\(String(describing: self.asGeneric)), \")\n        string.append(\"asSource = \\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? DictionaryType else {\n            results.append(\"Incorrect type <expected: DictionaryType, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"valueTypeName\").trackDifference(actual: self.valueTypeName, expected: castObject.valueTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"keyTypeName\").trackDifference(actual: self.keyTypeName, expected: castObject.keyTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.valueTypeName)\n        hasher.combine(self.keyTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? DictionaryType else { return false }\n        if self.name != rhs.name { return false }\n        if self.valueTypeName != rhs.valueTypeName { return false }\n        if self.keyTypeName != rhs.keyTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:DictionaryType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let valueTypeName: TypeName = aDecoder.decode(forKey: \"valueTypeName\") else { \n                withVaList([\"valueTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.valueTypeName = valueTypeName\n            self.valueType = aDecoder.decode(forKey: \"valueType\")\n            guard let keyTypeName: TypeName = aDecoder.decode(forKey: \"keyTypeName\") else { \n                withVaList([\"keyTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.keyTypeName = keyTypeName\n            self.keyType = aDecoder.decode(forKey: \"keyType\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.valueTypeName, forKey: \"valueTypeName\")\n            aCoder.encode(self.valueType, forKey: \"valueType\")\n            aCoder.encode(self.keyTypeName, forKey: \"keyTypeName\")\n            aCoder.encode(self.keyType, forKey: \"keyType\")\n        }\n// sourcery:end\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/TypeName/Generic.swift",
    "content": "import Foundation\n\n/// Descibes Swift generic type\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class GenericType: NSObject, SourceryModelWithoutDescription, Diffable {\n    /// The name of the base type, i.e. `Array` for `Array<Int>`\n    public var name: String\n\n    /// This generic type parameters\n    public let typeParameters: [GenericTypeParameter]\n\n    /// :nodoc:\n    public init(name: String, typeParameters: [GenericTypeParameter] = []) {\n        self.name = name\n        self.typeParameters = typeParameters\n    }\n\n    public var asSource: String {\n        let arguments = typeParameters\n          .map({ $0.typeName.asSource })\n          .joined(separator: \", \")\n        return \"\\(name)<\\(arguments)>\"\n    }\n\n    public override var description: String {\n        asSource\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? GenericType else {\n            results.append(\"Incorrect type <expected: GenericType, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeParameters\").trackDifference(actual: self.typeParameters, expected: castObject.typeParameters))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.typeParameters)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? GenericType else { return false }\n        if self.name != rhs.name { return false }\n        if self.typeParameters != rhs.typeParameters { return false }\n        return true\n    }   \n\n// sourcery:inline:GenericType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let typeParameters: [GenericTypeParameter] = aDecoder.decode(forKey: \"typeParameters\") else { \n                withVaList([\"typeParameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeParameters = typeParameters\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeParameters, forKey: \"typeParameters\")\n        }\n\n// sourcery:end\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/TypeName/Set.swift",
    "content": "import Foundation\n\n/// Describes set type\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class SetType: NSObject, SourceryModel, Diffable {\n    /// Type name used in declaration\n    public var name: String\n\n    /// Array element type name\n    public var elementTypeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Array element type, if known\n    public var elementType: Type?\n\n    /// :nodoc:\n    public init(name: String, elementTypeName: TypeName, elementType: Type? = nil) {\n        self.name = name\n        self.elementTypeName = elementTypeName\n        self.elementType = elementType\n    }\n\n    /// Returns array as generic type\n    public var asGeneric: GenericType {\n        GenericType(name: \"Set\", typeParameters: [\n            .init(typeName: elementTypeName)\n        ])\n    }\n\n    public var asSource: String {\n        \"[\\(elementTypeName.asSource)]\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"elementTypeName = \\(String(describing: self.elementTypeName)), \")\n        string.append(\"asGeneric = \\(String(describing: self.asGeneric)), \")\n        string.append(\"asSource = \\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? SetType else {\n            results.append(\"Incorrect type <expected: SetType, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"elementTypeName\").trackDifference(actual: self.elementTypeName, expected: castObject.elementTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.elementTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? SetType else { return false }\n        if self.name != rhs.name { return false }\n        if self.elementTypeName != rhs.elementTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:SetType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let elementTypeName: TypeName = aDecoder.decode(forKey: \"elementTypeName\") else { \n                withVaList([\"elementTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.elementTypeName = elementTypeName\n            self.elementType = aDecoder.decode(forKey: \"elementType\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.elementTypeName, forKey: \"elementTypeName\")\n            aCoder.encode(self.elementType, forKey: \"elementType\")\n        }\n// sourcery:end\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/TypeName/Typed.swift",
    "content": "import Foundation\n\n/// Descibes typed declaration, i.e. variable, method parameter, tuple element, enum case associated value\npublic protocol Typed {\n\n    // sourcery: skipEquality, skipDescription\n    /// Type, if known\n    var type: Type? { get }\n\n    // sourcery: skipEquality, skipDescription\n    /// Type name\n    var typeName: TypeName { get }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether type is optional\n    var isOptional: Bool { get }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether type is implicitly unwrapped optional\n    var isImplicitlyUnwrappedOptional: Bool { get }\n\n    // sourcery: skipEquality, skipDescription\n    /// Type name without attributes and optional type information\n    var unwrappedTypeName: String { get }\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/AST/Typealias.swift",
    "content": "import Foundation\n\n/// :nodoc:\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class Typealias: NSObject, Typed, SourceryModel, Diffable {\n    // New typealias name\n    public let aliasName: String\n\n    // Target name\n    public let typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    public var type: Type?\n\n    /// module in which this typealias was declared\n    public var module: String?\n    \n    /// Imports that existed in the file that contained this typealias declaration\n    public var imports: [Import] = []\n\n    /// typealias annotations\n    public var annotations: Annotations = [:]\n\n    /// typealias documentation\n    public var documentation: Documentation = []\n\n    // sourcery: skipEquality, skipDescription\n    public var parent: Type? {\n        didSet {\n            parentName = parent?.name\n        }\n    }\n\n    /// Type access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let accessLevel: String\n\n    var parentName: String?\n\n    public var name: String {\n        if let parentName = parent?.name {\n            return \"\\(module != nil ? \"\\(module!).\" : \"\")\\(parentName).\\(aliasName)\"\n        } else {\n            return \"\\(module != nil ? \"\\(module!).\" : \"\")\\(aliasName)\"\n        }\n    }\n\n    public init(aliasName: String = \"\", typeName: TypeName, accessLevel: AccessLevel = .internal, parent: Type? = nil, module: String? = nil, annotations: [String: NSObject] = [:], documentation: [String] = []) {\n        self.aliasName = aliasName\n        self.typeName = typeName\n        self.accessLevel = accessLevel.rawValue\n        self.parent = parent\n        self.parentName = parent?.name\n        self.module = module\n        self.annotations = annotations\n        self.documentation = documentation\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"aliasName = \\(String(describing: self.aliasName)), \")\n        string.append(\"typeName = \\(String(describing: self.typeName)), \")\n        string.append(\"module = \\(String(describing: self.module)), \")\n        string.append(\"accessLevel = \\(String(describing: self.accessLevel)), \")\n        string.append(\"parentName = \\(String(describing: self.parentName)), \")\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\(String(describing: self.documentation)), \")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Typealias else {\n            results.append(\"Incorrect type <expected: Typealias, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"aliasName\").trackDifference(actual: self.aliasName, expected: castObject.aliasName))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        results.append(contentsOf: DiffableResult(identifier: \"module\").trackDifference(actual: self.module, expected: castObject.module))\n        results.append(contentsOf: DiffableResult(identifier: \"accessLevel\").trackDifference(actual: self.accessLevel, expected: castObject.accessLevel))\n        results.append(contentsOf: DiffableResult(identifier: \"parentName\").trackDifference(actual: self.parentName, expected: castObject.parentName))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.aliasName)\n        hasher.combine(self.typeName)\n        hasher.combine(self.module)\n        hasher.combine(self.accessLevel)\n        hasher.combine(self.parentName)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Typealias else { return false }\n        if self.aliasName != rhs.aliasName { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.module != rhs.module { return false }\n        if self.accessLevel != rhs.accessLevel { return false }\n        if self.parentName != rhs.parentName { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.annotations != rhs.annotations { return false }\n        return true\n    }\n    \n// sourcery:inline:Typealias.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let aliasName: String = aDecoder.decode(forKey: \"aliasName\") else { \n                withVaList([\"aliasName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.aliasName = aliasName\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n            self.module = aDecoder.decode(forKey: \"module\")\n            guard let imports: [Import] = aDecoder.decode(forKey: \"imports\") else { \n                withVaList([\"imports\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.imports = imports\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            self.parent = aDecoder.decode(forKey: \"parent\")\n            guard let accessLevel: String = aDecoder.decode(forKey: \"accessLevel\") else { \n                withVaList([\"accessLevel\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.accessLevel = accessLevel\n            self.parentName = aDecoder.decode(forKey: \"parentName\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.aliasName, forKey: \"aliasName\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n            aCoder.encode(self.module, forKey: \"module\")\n            aCoder.encode(self.imports, forKey: \"imports\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.parent, forKey: \"parent\")\n            aCoder.encode(self.accessLevel, forKey: \"accessLevel\")\n            aCoder.encode(self.parentName, forKey: \"parentName\")\n        }\n// sourcery:end\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/Array+Parallel.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 06/01/2017.\n// Copyright (c) 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\npublic extension Array {\n    func parallelFlatMap<T>(transform: (Element) -> [T]) -> [T] {\n        return parallelMap(transform: transform).flatMap { $0 }\n    }\n\n    func parallelCompactMap<T>(transform: (Element) -> T?) -> [T] {\n        return parallelMap(transform: transform).compactMap { $0 }\n    }\n\n    func parallelMap<T>(transform: (Element) -> T) -> [T] {\n        var result = ContiguousArray<T?>(repeating: nil, count: count)\n        return result.withUnsafeMutableBufferPointer { buffer in\n            nonisolated(unsafe) let buffer = buffer\n            DispatchQueue.concurrentPerform(iterations: buffer.count) { idx in\n                buffer[idx] = transform(self[idx])\n            }\n            return buffer.map { $0! }\n        }\n    }\n\n    func parallelPerform(_ work: (Element) -> Void) {\n        DispatchQueue.concurrentPerform(iterations: count) { idx in\n            work(self[idx])\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/BytesRange.swift",
    "content": "//\n//  Created by Sébastien Duperron on 03/01/2018.\n//  Copyright © 2018 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n/// :nodoc:\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class BytesRange: NSObject, SourceryModel, Diffable {\n\n    public let offset: Int64\n    public let length: Int64\n\n    public init(offset: Int64, length: Int64) {\n        self.offset = offset\n        self.length = length\n    }\n\n    public convenience init(range: (offset: Int64, length: Int64)) {\n        self.init(offset: range.offset, length: range.length)\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string += \"offset = \\(String(describing: self.offset)), \"\n        string += \"length = \\(String(describing: self.length))\"\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? BytesRange else {\n            results.append(\"Incorrect type <expected: BytesRange, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"offset\").trackDifference(actual: self.offset, expected: castObject.offset))\n        results.append(contentsOf: DiffableResult(identifier: \"length\").trackDifference(actual: self.length, expected: castObject.length))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.offset)\n        hasher.combine(self.length)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? BytesRange else { return false }\n        if self.offset != rhs.offset { return false }\n        if self.length != rhs.length { return false }\n        return true\n    }\n\n// sourcery:inline:BytesRange.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.offset = aDecoder.decodeInt64(forKey: \"offset\")\n            self.length = aDecoder.decodeInt64(forKey: \"length\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.offset, forKey: \"offset\")\n            aCoder.encode(self.length, forKey: \"length\")\n        }\n// sourcery:end\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/Composer/Composer.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\nprivate func currentTimestamp() -> TimeInterval {\n    return Date().timeIntervalSince1970\n}\n\n/// Responsible for composing results of `FileParser`.\npublic enum Composer {\n\n    /// Performs final processing of discovered types:\n    /// - extends types with their corresponding extensions;\n    /// - replaces typealiases with actual types\n    /// - finds actual types for variables and enums raw values\n    /// - filters out any private types and extensions\n    ///\n    /// - Parameter parserResult: Result of parsing source code.\n    /// - Parameter serial: Whether to process results serially instead of concurrently\n    /// - Returns: Final types and extensions of unknown types.\n    public static func uniqueTypesAndFunctions(_ parserResult: FileParserResult, serial: Bool = false) -> (types: [Type], functions: [SourceryMethod], typealiases: [Typealias]) {\n        let composed = ParserResultsComposed(parserResult: parserResult)\n\n        let resolveType = { (typeName: TypeName, containingType: Type?) -> Type? in\n            composed.resolveType(typeName: typeName, containingType: containingType)\n        }\n\n        let methodResolveType = { (typeName: TypeName, containingType: Type?, method: Method) -> Type? in\n            composed.resolveType(typeName: typeName, containingType: containingType, method: method)\n        }\n\n        let processType = { (type: Type) in\n            type.variables.forEach {\n                resolveVariableTypes($0, of: type, resolve: resolveType)\n            }\n            type.methods.forEach {\n                resolveMethodTypes($0, of: type, resolve: methodResolveType)\n            }\n            type.subscripts.forEach {\n                resolveSubscriptTypes($0, of: type, resolve: resolveType)\n            }\n\n            if let enumeration = type as? Enum {\n                resolveEnumTypes(enumeration, types: composed.typeMap, resolve: resolveType)\n            }\n\n            if let composition = type as? ProtocolComposition {\n                resolveProtocolCompositionTypes(composition, resolve: resolveType)\n            }\n\n            if let sourceryProtocol = type as? SourceryProtocol {\n                resolveAssociatedTypes(sourceryProtocol, resolve: resolveType)\n            }\n        }\n\n        let processFunction = { (function: SourceryMethod) in\n            resolveMethodTypes(function, of: nil, resolve: methodResolveType)\n        }\n\n        if serial {\n            composed.types.forEach(processType)\n            composed.functions.forEach(processFunction)\n        } else {\n            composed.types.parallelPerform(processType)\n            composed.functions.parallelPerform(processFunction)\n        }\n\n        updateTypeRelationships(types: composed.types)\n\n        return (\n            types: composed.types.sorted { $0.globalName < $1.globalName },\n            functions: composed.functions.sorted { $0.name < $1.name },\n            typealiases: composed.unresolvedTypealiases.values.sorted(by: { $0.name < $1.name })\n        )\n    }\n\n    typealias TypeResolver = (TypeName, Type?) -> Type?\n    typealias MethodArgumentTypeResolver = (TypeName, Type?, Method) -> Type?\n\n    private static func resolveVariableTypes(_ variable: Variable, of type: Type, resolve: TypeResolver) {\n        variable.type = resolve(variable.typeName, type)\n\n        /// The actual `definedInType` is assigned in `uniqueTypes` but we still\n        /// need to resolve the type to correctly parse typealiases\n        /// @see https://github.com/krzysztofzablocki/Sourcery/pull/374\n        if let definedInTypeName = variable.definedInTypeName {\n            _ = resolve(definedInTypeName, type)\n        }\n    }\n\n    private static func resolveSubscriptTypes(_ subscript: Subscript, of type: Type, resolve: TypeResolver) {\n        `subscript`.parameters.forEach { (parameter) in\n            parameter.type = resolve(parameter.typeName, type)\n        }\n\n        `subscript`.returnType = resolve(`subscript`.returnTypeName, type)\n        if let definedInTypeName = `subscript`.definedInTypeName {\n            _ = resolve(definedInTypeName, type)\n        }\n    }\n\n    private static func resolveMethodTypes(_ method: SourceryMethod, of type: Type?, resolve: MethodArgumentTypeResolver) {\n        method.parameters.forEach { parameter in\n            parameter.type = resolve(parameter.typeName, type, method)\n        }\n\n        /// The actual `definedInType` is assigned in `uniqueTypes` but we still\n        /// need to resolve the type to correctly parse typealiases\n        /// @see https://github.com/krzysztofzablocki/Sourcery/pull/374\n        var definedInType: Type?\n        if let definedInTypeName = method.definedInTypeName {\n            definedInType = resolve(definedInTypeName, type, method)\n        }\n\n        guard !method.returnTypeName.isVoid else { return }\n\n        if method.isInitializer || method.isFailableInitializer {\n            method.returnType = definedInType\n            if let type = method.actualDefinedInTypeName {\n                if method.isFailableInitializer {\n                    method.returnTypeName = TypeName(\n                        name: type.name,\n                        isOptional: true,\n                        isImplicitlyUnwrappedOptional: false,\n                        tuple: type.tuple,\n                        array: type.array,\n                        dictionary: type.dictionary,\n                        closure: type.closure,\n                        set: type.set,\n                        generic: type.generic,\n                        isProtocolComposition: type.isProtocolComposition\n                    )\n                } else if method.isInitializer {\n                    method.returnTypeName = type\n                }\n            }\n        } else {\n            method.returnType = resolve(method.returnTypeName, type, method)\n        }\n    }\n\n    private static func resolveEnumTypes(_ enumeration: Enum, types: [String: Type], resolve: TypeResolver) {\n        enumeration.cases.forEach { enumCase in\n            enumCase.associatedValues.forEach { associatedValue in\n                associatedValue.type = resolve(associatedValue.typeName, enumeration)\n            }\n        }\n\n        guard enumeration.hasRawType else { return }\n\n        if let rawValueVariable = enumeration.variables.first(where: { $0.name == \"rawValue\" && !$0.isStatic }) {\n            enumeration.rawTypeName = rawValueVariable.actualTypeName\n            enumeration.rawType = rawValueVariable.type\n        } else if let rawTypeName = enumeration.inheritedTypes.first {\n            // enums with no cases or enums with cases that contain associated values can't have raw type\n            guard !enumeration.cases.isEmpty,\n                  !enumeration.hasAssociatedValues else {\n                return enumeration.rawTypeName = nil\n            }\n\n            if let rawTypeCandidate = types[rawTypeName] {\n                if !((rawTypeCandidate is SourceryProtocol) || (rawTypeCandidate is ProtocolComposition)) {\n                    enumeration.rawTypeName = TypeName(rawTypeName)\n                    enumeration.rawType = rawTypeCandidate\n                }\n            } else {\n                enumeration.rawTypeName = TypeName(rawTypeName)\n            }\n        }\n    }\n\n    private static func resolveProtocolCompositionTypes(_ protocolComposition: ProtocolComposition, resolve: TypeResolver) {\n        let composedTypes = protocolComposition.composedTypeNames.compactMap { typeName in\n            resolve(typeName, protocolComposition)\n        }\n\n        protocolComposition.composedTypes = composedTypes\n    }\n\n    private static func resolveAssociatedTypes(_ sourceryProtocol: SourceryProtocol, resolve: TypeResolver) {\n        sourceryProtocol.associatedTypes.forEach { (_, value) in\n            guard let typeName = value.typeName,\n                  let type = resolve(typeName, sourceryProtocol)\n            else {\n                return\n            }\n            value.type = type\n        }\n\n        sourceryProtocol.genericRequirements.forEach { requirment in\n            if let knownAssociatedType = sourceryProtocol.associatedTypes[requirment.leftType.name] {\n                requirment.leftType = knownAssociatedType\n            }\n            requirment.rightType.type = resolve(requirment.rightType.typeName, sourceryProtocol)\n        }\n    }\n\n    private static func updateTypeRelationships(types: [Type]) {\n        var typesByName = [String: Type]()\n        types.forEach { typesByName[$0.globalName] = $0 }\n\n        var processed = [String: Bool]()\n        types.forEach { type in\n            if let type = type as? Class, let supertype = type.inheritedTypes.first.flatMap({ typesByName[$0] }) as? Class {\n                type.supertype = supertype\n            }\n            processed[type.globalName] = true\n            updateTypeRelationship(for: type, typesByName: typesByName, processed: &processed)\n        }\n    }\n\n    internal static func findBaseType(for type: Type, name: String, typesByName: [String: Type]) -> Type? {\n        // special case to check if the type is based on one of the recognized types\n        // and the superclass has a generic constraint in `name` part of the `TypeName`\n        var name = name\n        if name.contains(\"<\") && name.contains(\">\") {\n            let parts = name.split(separator: \"<\")\n            name = String(parts.first!)\n        }\n        if let baseType = typesByName[name] {\n            return baseType\n        }\n        if let module = type.module, let baseType = typesByName[\"\\(module).\\(name)\"] {\n            return baseType\n        }\n        for importModule in type.imports {\n            if let baseType = typesByName[\"\\(importModule).\\(name)\"] {\n                return baseType\n            }\n        }\n        guard name.contains(\"&\") else { return nil }\n        // this can happen for a type which consists of mutliple types composed together (i.e. (A & B))\n        let nameComponents = name.components(separatedBy: \"&\").map { $0.trimmingCharacters(in: .whitespaces) }\n        let types: [Type] = nameComponents.compactMap {\n            typesByName[$0]\n        }\n        let typeNames = types.map {\n            TypeName(name: $0.name)\n        }\n        return ProtocolComposition(name: name, inheritedTypes: types.map { $0.globalName }, composedTypeNames: typeNames, composedTypes: types)\n    }\n\n    private static func updateTypeRelationship(for type: Type, typesByName: [String: Type], processed: inout [String: Bool]) {\n        type.based.keys.forEach { name in\n            guard let baseType = findBaseType(for: type, name: name, typesByName: typesByName) else { return }\n            let globalName = baseType.globalName\n            if processed[globalName] != true {\n                processed[globalName] = true\n                updateTypeRelationship(for: baseType, typesByName: typesByName, processed: &processed)\n            }\n            copyTypeRelationships(from: baseType, to: type)\n            if let composedType = baseType as? ProtocolComposition {\n                let implements = composedType.composedTypes?.filter({ $0 is SourceryProtocol })\n                implements?.forEach { updateInheritsAndImplements(from: $0, to: type) }\n                if implements?.count == composedType.composedTypes?.count\n                    || composedType.composedTypes == nil\n                    || composedType.composedTypes?.isEmpty == true\n                {\n                    type.implements[globalName] = baseType\n                }\n            } else {\n                updateInheritsAndImplements(from: baseType, to: type)\n            }\n            type.basedTypes[globalName] = baseType\n        }\n    }\n\n    private static func updateInheritsAndImplements(from baseType: Type, to type: Type) {\n        if baseType is Class {\n            type.inherits[baseType.name] = baseType\n        } else if let `protocol` = baseType as? SourceryProtocol {\n            type.implements[baseType.globalName] = baseType\n            if let extendingProtocol = type as? SourceryProtocol {\n                `protocol`.associatedTypes.forEach {\n                    if extendingProtocol.associatedTypes[$0.key] == nil {\n                        extendingProtocol.associatedTypes[$0.key] = $0.value\n                    }\n                }\n            }\n        }\n    }\n\n    private static func copyTypeRelationships(from baseType: Type, to type: Type) {\n        baseType.based.keys.forEach { type.based[$0] = $0 }\n        baseType.basedTypes.forEach { type.basedTypes[$0.key] = $0.value }\n        baseType.inherits.forEach { type.inherits[$0.key] = $0.value }\n        baseType.implements.forEach { type.implements[$0.key] = $0.value }\n    }\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/Composer/ParserResultsComposed.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\ninternal struct ParserResultsComposed {\n    private(set) var typeMap = [String: Type]()\n    private(set) var modules = [String: [String: Type]]()\n    private(set) var types = [Type]()\n\n    let parsedTypes: [Type]\n    let functions: [SourceryMethod]\n    let resolvedTypealiases: [String: Typealias]\n    let associatedTypes: [String: AssociatedType]\n    let unresolvedTypealiases: [String: Typealias]\n\n    init(parserResult: FileParserResult) {\n        // TODO: This logic should really be more complicated\n        // For any resolution we need to be looking at accessLevel and module boundaries\n        // e.g. there might be a typealias `private typealias Something = MyType` in one module and same name in another with public modifier, one could be accessed and the other could not\n        self.functions = parserResult.functions\n        let aliases = Self.typealiases(parserResult)\n        resolvedTypealiases = aliases.resolved\n        unresolvedTypealiases = aliases.unresolved\n        associatedTypes = Self.extractAssociatedTypes(parserResult)\n        parsedTypes = parserResult.types\n\n        var moduleAndTypeNameCollisions: Set<String> = []\n\n        for type in parsedTypes where !type.isExtension && type.parent == nil {\n            if let module = type.module, type.localName == module {\n                moduleAndTypeNameCollisions.insert(module)\n            }\n        }\n\n        // set definedInType for all methods and variables\n        parsedTypes\n            .forEach { type in\n                type.variables.forEach { $0.definedInType = type }\n                type.methods.forEach { $0.definedInType = type }\n                type.subscripts.forEach { $0.definedInType = type }\n            }\n\n        // map all known types to their names\n\n        for type in parsedTypes where !type.isExtension && type.parent == nil {\n            let name = type.name\n            // If a type name has the `<module>.` prefix, and the type `<module>.<module>` is undefined, we can safely remove the `<module>.` prefix\n            if let module = type.module, name.hasPrefix(module), name.dropFirst(module.count).hasPrefix(\".\"), !moduleAndTypeNameCollisions.contains(module) {\n                type.localName.removeFirst(module.count + 1)\n            }\n        }\n\n        for type in parsedTypes where !type.isExtension {\n            typeMap[type.globalName] = type\n            if let module = type.module {\n                var typesByModules = modules[module, default: [:]]\n                typesByModules[type.name] = type\n                modules[module] = typesByModules\n            }\n        }\n\n        /// Resolve typealiases\n        let typealiases = Array(unresolvedTypealiases.values)\n        typealiases.forEach { alias in\n            alias.type = resolveType(typeName: alias.typeName, containingType: alias.parent)\n        }\n\n        /// Map associated types\n        associatedTypes.forEach {\n            if let globalName = $0.value.type?.globalName,\n               let type = typeMap[globalName] {\n                typeMap[$0.key] = type\n            } else {\n                typeMap[$0.key] = $0.value.type\n            }\n        }\n\n        types = unifyTypes()\n    }\n\n    mutating private func resolveExtensionOfNestedType(_ type: Type) {\n        var components = type.localName.components(separatedBy: \".\")\n        let rootName: String\n        if type.parent != nil, let module = type.module {\n            rootName = module\n        } else {\n            rootName = components.removeFirst()\n        }\n        if let moduleTypes = modules[rootName], let baseType = moduleTypes[components.joined(separator: \".\")] ?? moduleTypes[type.localName] {\n            type.localName = baseType.localName\n            type.module = baseType.module\n            type.parent = baseType.parent\n        } else {\n            for _import in type.imports {\n                let parentKey = \"\\(rootName).\\(components.joined(separator: \".\"))\"\n                let parentKeyFull = \"\\(_import.moduleName).\\(parentKey)\"\n                if let moduleTypes = modules[_import.moduleName], let baseType = moduleTypes[parentKey] ?? moduleTypes[parentKeyFull] {\n                    type.localName = baseType.localName\n                    type.module = baseType.module\n                    type.parent = baseType.parent\n                    return\n                }\n            }\n        }\n        // Parent extensions should always be processed before `type`, as this affects the globalName of `type`.\n        for parent in type.parentTypes where parent.isExtension && parent.localName.contains(\".\") {\n            let oldName = parent.globalName\n            resolveExtensionOfNestedType(parent)\n            if oldName != parent.globalName {\n                rewriteChildren(of: parent)\n            }\n        }\n    }\n\n    // if it had contained types, they might have been fully defined and so their name has to be noted in uniques\n    private mutating func rewriteChildren(of type: Type) {\n        // child is never an extension so no need to check\n        for child in type.containedTypes {\n            typeMap[child.globalName] = child\n            rewriteChildren(of: child)\n        }\n    }\n\n    private mutating func unifyTypes() -> [Type] {\n        /// Resolve actual names of extensions, as they could have been done on typealias and note updated child names in uniques if needed\n        parsedTypes\n            .filter { $0.isExtension }\n            .forEach { (type: Type) in\n                let oldName = type.globalName\n\n                if type.localName.contains(\".\") {\n                    resolveExtensionOfNestedType(type)\n                } else if let resolved = resolveGlobalName(for: oldName, containingType: type.parent, unique: typeMap, modules: modules, typealiases: resolvedTypealiases, associatedTypes: associatedTypes)?.name {\n                    var moduleName: String = \"\"\n                    if let module = type.module {\n                        moduleName = \"\\(module).\"\n                    }\n                    type.localName = resolved.replacingOccurrences(of: moduleName, with: \"\")\n                }\n\n                // nothing left to do\n                guard oldName != type.globalName else {\n                    return\n                }\n                rewriteChildren(of: type)\n            }\n\n        // extend all types with their extensions\n        parsedTypes.forEach { type in\n            let inheritedTypes: [[String]] = type.inheritedTypes.compactMap { inheritedName in\n                if let resolvedGlobalName = resolveGlobalName(for: inheritedName, containingType: type.parent, unique: typeMap, modules: modules, typealiases: resolvedTypealiases, associatedTypes: associatedTypes)?.name {\n                    return [resolvedGlobalName]\n                }\n                if let baseType = Composer.findBaseType(for: type, name: inheritedName, typesByName: typeMap) {\n                    if let composed = baseType as? ProtocolComposition, let composedTypes = composed.composedTypes {\n                        // ignore inheritedTypes when it is a `ProtocolComposition` and composedType is a protocol\n                        var combinedTypes = composedTypes.map { $0.globalName }\n                        combinedTypes.append(baseType.globalName)\n                        return combinedTypes\n                    }\n                }\n                return [inheritedName]\n            }\n            type.inheritedTypes = inheritedTypes.flatMap { $0 }\n            let uniqueType: Type?\n            if let mappedType = typeMap[type.globalName] {\n                // this check will only fail on an extension?\n                uniqueType = mappedType\n            } else if let composedNameType = typeFromComposedName(type.name, modules: modules) {\n                // this can happen for an extension on unknown type, this case should probably be handled by the inferTypeNameFromModules\n                uniqueType = composedNameType\n            } else {\n                uniqueType = inferTypeNameFromModules(from: type.localName, containedInType: type.parent, uniqueTypes: typeMap, modules: modules).flatMap { typeMap[$0] }\n            }\n            guard let current = uniqueType else {\n                assert(type.isExtension, \"Type \\(type.globalName) should be extension\")\n\n                // for unknown types we still store their extensions but mark them as unknown\n                type.isUnknownExtension = true\n                if let existingType = typeMap[type.globalName] {\n                    existingType.extend(type)\n                    typeMap[type.globalName] = existingType\n                } else {\n                    typeMap[type.globalName] = type\n                }\n\n                let inheritanceClause = type.inheritedTypes.isEmpty ? \"\" :\n                    \": \\(type.inheritedTypes.joined(separator: \", \"))\"\n\n                Log.astWarning(\"Found \\\"extension \\(type.name)\\(inheritanceClause)\\\" of type for which there is no original type declaration information.\")\n                return\n            }\n\n            if current == type { return }\n\n            current.extend(type)\n            typeMap[current.globalName] = current\n        }\n\n        let values = typeMap.values\n        var processed = Set<String>(minimumCapacity: values.count)\n        return typeMap.values.filter({\n            let name = $0.globalName\n            let wasProcessed = processed.contains(name)\n            processed.insert(name)\n            return !wasProcessed\n        })\n    }\n\n    // extract associated types from all types and add them to types\n    private static func extractAssociatedTypes(_ parserResult: FileParserResult) -> [String: AssociatedType] {\n        parserResult.types\n            .compactMap { $0 as? SourceryProtocol }\n            .map { $0.associatedTypes }\n            .flatMap { $0 }.reduce(into: [:]) { $0[$1.key] = $1.value }\n    }\n\n    /// returns typealiases map to their full names, with `resolved` removing intermediate\n    /// typealises and `unresolved` including typealiases that reference other typealiases.\n    private static func typealiases(_ parserResult: FileParserResult) -> (resolved: [String: Typealias], unresolved: [String: Typealias]) {\n        var typealiasesByNames = [String: Typealias]()\n        parserResult.typealiases.forEach { typealiasesByNames[$0.name] = $0 }\n        parserResult.types.forEach { type in\n            type.typealiases.forEach({ (_, alias) in\n                // TODO: should I deal with the fact that alias.name depends on type name but typenames might be updated later on\n                // maybe just handle non extension case here and extension aliases after resolving them?\n                typealiasesByNames[alias.name] = alias\n            })\n        }\n\n        let unresolved = typealiasesByNames\n\n        // ! if a typealias leads to another typealias, follow through and replace with final type\n        typealiasesByNames.forEach { _, alias in\n            var aliasNamesToReplace = [alias.name]\n            var finalAlias = alias\n            var visitedAliasNames = Set<String>()\n            visitedAliasNames.insert(alias.name)\n            while let targetAlias = typealiasesByNames[finalAlias.typeName.name] {\n                if visitedAliasNames.contains(targetAlias.name) {\n                    Log.astWarning(\"Detected typealias cycle while resolving '\\(alias.name)' -> '\\(targetAlias.name)' (type name: \\(finalAlias.typeName.name)).\")\n                    break\n                }\n                aliasNamesToReplace.append(targetAlias.name)\n                visitedAliasNames.insert(targetAlias.name)\n                finalAlias = targetAlias\n            }\n\n            // ! replace all keys\n            aliasNamesToReplace.forEach { typealiasesByNames[$0] = finalAlias }\n        }\n\n        return (resolved: typealiasesByNames, unresolved: unresolved)\n    }\n\n    /// Resolves type identifier for name\n    func resolveGlobalName(\n        for type: String,\n        containingType: Type? = nil,\n        unique: [String: Type]? = nil,\n        modules: [String: [String: Type]],\n        typealiases: [String: Typealias],\n        associatedTypes: [String: AssociatedType]\n    ) -> (name: String, typealias: Typealias?)? {\n        // if the type exists for this name and isn't an extension just return it's name\n        // if it's extension we need to check if there aren't other options TODO: verify\n        if let realType = unique?[type], realType.isExtension == false {\n            return (name: realType.globalName, typealias: nil)\n        }\n\n        if let alias = typealiases[type] {\n            return (name: alias.type?.globalName ?? alias.typeName.name, typealias: alias)\n        }\n\n        if let associatedType = associatedTypes[type],\n            let actualType = associatedType.type\n        {\n            let typeName = associatedType.typeName ?? TypeName(name: actualType.name)\n            return (name: actualType.globalName, typealias: Typealias(aliasName: type, typeName: typeName))\n        }\n\n        if let containingType = containingType {\n            if type == \"Self\" {\n                return (name: containingType.globalName, typealias: nil)\n            }\n\n            var currentContainer: Type? = containingType\n            while currentContainer != nil, let parentName = currentContainer?.globalName {\n                /// TODO: no parent for sure?\n                /// manually walk the containment tree\n                if let name = resolveGlobalName(for: \"\\(parentName).\\(type)\", containingType: nil, unique: unique, modules: modules, typealiases: typealiases, associatedTypes: associatedTypes) {\n                    return name\n                }\n\n                currentContainer = currentContainer?.parent\n            }\n\n//            if let name = resolveGlobalName(for: \"\\(containingType.globalName).\\(type)\", containingType: containingType.parent, unique: unique, modules: modules, typealiases: typealiases) {\n//                return name\n//            }\n\n//             last check it's via module\n//            if let module = containingType.module, let name = resolveGlobalName(for: \"\\(module).\\(type)\", containingType: nil, unique: unique, modules: modules, typealiases: typealiases) {\n//                return name\n//            }\n        }\n\n        // TODO: is this needed?\n        if let inferred = inferTypeNameFromModules(from: type, containedInType: containingType, uniqueTypes: unique ?? [:], modules: modules) {\n            return (name: inferred, typealias: nil)\n        }\n\n        return typeFromComposedName(type, modules: modules).map { (name: $0.globalName, typealias: nil) }\n    }\n\n    private func inferTypeNameFromModules(from typeIdentifier: String, containedInType: Type?, uniqueTypes: [String: Type], modules: [String: [String: Type]]) -> String? {\n        func fullName(for module: String) -> String {\n            \"\\(module).\\(typeIdentifier)\"\n        }\n\n        func type(for module: String) -> Type? {\n            return modules[module]?[typeIdentifier]\n        }\n\n        func ambiguousErrorMessage(from types: [Type]) -> String? {\n            Log.astWarning(\"Ambiguous type \\(typeIdentifier), found \\(types.map { $0.globalName }.joined(separator: \", \")). Specify module name at declaration site to disambiguate.\")\n            return nil\n        }\n\n        let explicitModulesAtDeclarationSite: [String] = [\n            containedInType?.module.map { [$0] } ?? [],    // main module for this typename\n            containedInType?.imports.map { $0.moduleName } ?? []    // imported modules\n        ]\n            .flatMap { $0 }\n\n        let remainingModules = Set(modules.keys).subtracting(explicitModulesAtDeclarationSite)\n\n        /// We need to check whether we can find type in one of the modules but we need to be careful to avoid amibiguity\n        /// First checking explicit modules available at declaration site (so source module + all imported ones)\n        /// If there is no ambigiuity there we can assume that module will be resolved by the compiler\n        /// If that's not the case we look after remaining modules in the application and if the typename has no ambigiuity we use that\n        /// But if there is more than 1 typename duplication across modules we have no way to resolve what is the compiler going to use so we fail\n        let moduleSetsToCheck: [[String]] = [\n            explicitModulesAtDeclarationSite,\n            Array(remainingModules)\n        ]\n\n        for modules in moduleSetsToCheck {\n            let possibleTypes = modules\n                .compactMap { type(for: $0) }\n\n            if possibleTypes.count > 1 {\n                return ambiguousErrorMessage(from: possibleTypes)\n            }\n\n            if let type = possibleTypes.first {\n                return type.globalName\n            }\n        }\n\n        // as last result for unknown types / extensions\n        // try extracting type from unique array\n        if let module = containedInType?.module {\n            return uniqueTypes[fullName(for: module)]?.globalName\n        }\n        return nil\n    }\n\n    func typeFromComposedName(_ name: String, modules: [String: [String: Type]]) -> Type? {\n        guard name.contains(\".\") else { return nil }\n        let nameComponents = name.components(separatedBy: \".\")\n        let moduleName = nameComponents[0]\n        let typeName = nameComponents.suffix(from: 1).joined(separator: \".\")\n        return modules[moduleName]?[typeName]\n    }\n\n    func resolveType(typeName: TypeName, containingType: Type?, method: Method? = nil) -> Type? {\n        let resolveTypeWithName = { (typeName: TypeName) -> Type? in\n            return self.resolveType(typeName: typeName, containingType: containingType)\n        }\n\n        let unique = typeMap\n\n        if let name = typeName.actualTypeName {\n            let resolvedIdentifier = name.generic?.name ?? name.unwrappedTypeName\n            return unique[resolvedIdentifier]\n        }\n\n        let retrievedName = actualTypeName(for: typeName, containingType: containingType)\n        let lookupName = retrievedName ?? typeName\n\n        if let tuple = lookupName.tuple {\n            var needsUpdate = false\n\n            tuple.elements.forEach { tupleElement in\n                tupleElement.type = resolveTypeWithName(tupleElement.typeName)\n                if tupleElement.typeName.actualTypeName != nil {\n                    needsUpdate = true\n                }\n            }\n\n            if needsUpdate || retrievedName != nil {\n                let tupleCopy = TupleType(name: tuple.name, elements: tuple.elements)\n                tupleCopy.elements.forEach {\n                    $0.typeName = $0.actualTypeName ?? $0.typeName\n                    $0.typeName.actualTypeName = nil\n                }\n                tupleCopy.name = tupleCopy.elements.asTypeName\n\n                typeName.tuple = tupleCopy // TODO: really don't like this old behaviour\n                typeName.actualTypeName = TypeName(name: tupleCopy.name,\n                                                   isOptional: typeName.isOptional,\n                                                   isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                                                   tuple: tupleCopy,\n                                                   array: lookupName.array,\n                                                   dictionary: lookupName.dictionary,\n                                                   closure: lookupName.closure,\n                                                   set: lookupName.set,\n                                                   generic: lookupName.generic\n                )\n            }\n            return nil\n        } else\n        if let array = lookupName.array {\n            array.elementType = resolveTypeWithName(array.elementTypeName)\n\n            if array.elementTypeName.actualTypeName != nil || retrievedName != nil || array.elementType != nil {\n                let array = ArrayType(name: array.name, elementTypeName: array.elementTypeName, elementType: array.elementType)\n                array.elementTypeName = array.elementTypeName.actualTypeName ?? array.elementTypeName\n                array.elementTypeName.actualTypeName = nil\n                array.name = array.asSource\n                typeName.array = array // TODO: really don't like this old behaviour\n                typeName.generic = array.asGeneric // TODO: really don't like this old behaviour\n\n                typeName.actualTypeName = TypeName(name: array.name,\n                                                   isOptional: typeName.isOptional,\n                                                   isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                                                   tuple: lookupName.tuple,\n                                                   array: array,\n                                                   dictionary: lookupName.dictionary,\n                                                   closure: lookupName.closure,\n                                                   set: lookupName.set,\n                                                   generic: typeName.generic\n                )\n            }\n        } else\n        if let dictionary = lookupName.dictionary {\n            dictionary.keyType = resolveTypeWithName(dictionary.keyTypeName)\n            dictionary.valueType = resolveTypeWithName(dictionary.valueTypeName)\n\n            if dictionary.keyTypeName.actualTypeName != nil || dictionary.valueTypeName.actualTypeName != nil || retrievedName != nil {\n                let dictionary = DictionaryType(name: dictionary.name, valueTypeName: dictionary.valueTypeName, valueType: dictionary.valueType, keyTypeName: dictionary.keyTypeName, keyType: dictionary.keyType)\n                dictionary.keyTypeName = dictionary.keyTypeName.actualTypeName ?? dictionary.keyTypeName\n                dictionary.keyTypeName.actualTypeName = nil // TODO: really don't like this old behaviour\n                dictionary.valueTypeName = dictionary.valueTypeName.actualTypeName ?? dictionary.valueTypeName\n                dictionary.valueTypeName.actualTypeName = nil // TODO: really don't like this old behaviour\n\n                dictionary.name = dictionary.asSource\n\n                typeName.dictionary = dictionary // TODO: really don't like this old behaviour\n                typeName.generic = dictionary.asGeneric // TODO: really don't like this old behaviour\n\n                typeName.actualTypeName = TypeName(name: dictionary.asSource,\n                                                   isOptional: typeName.isOptional,\n                                                   isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                                                   tuple: lookupName.tuple,\n                                                   array: lookupName.array,\n                                                   dictionary: dictionary,\n                                                   closure: lookupName.closure,\n                                                   set: lookupName.set,\n                                                   generic: dictionary.asGeneric\n                )\n            }\n        } else\n        if let closure = lookupName.closure {\n            var needsUpdate = false\n\n            closure.returnType = resolveTypeWithName(closure.returnTypeName)\n            closure.parameters.forEach { parameter in\n                parameter.type = resolveTypeWithName(parameter.typeName)\n                if parameter.typeName.actualTypeName != nil {\n                    needsUpdate = true\n                }\n            }\n\n            if closure.returnTypeName.actualTypeName != nil || needsUpdate || retrievedName != nil {\n                typeName.closure = closure // TODO: really don't like this old behaviour\n\n                typeName.actualTypeName = TypeName(name: closure.asSource,\n                                                   isOptional: typeName.isOptional,\n                                                   isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                                                   tuple: lookupName.tuple,\n                                                   array: lookupName.array,\n                                                   dictionary: lookupName.dictionary,\n                                                   closure: closure,\n                                                   set: lookupName.set,\n                                                   generic: lookupName.generic\n                )\n            }\n\n            return nil\n        } else\n        if let generic = lookupName.generic {\n            var needsUpdate = false\n            generic.typeParameters.forEach { parameter in\n                // Detect if the generic type is local to the method\n                if let method {\n                    for genericParameter in method.genericParameters where parameter.typeName.name == genericParameter.name {\n                        return\n                    }\n                }\n\n                parameter.type = resolveTypeWithName(parameter.typeName)\n                if parameter.typeName.actualTypeName != nil {\n                    needsUpdate = true\n                }\n            }\n\n            if needsUpdate || retrievedName != nil {\n                let generic = GenericType(name: generic.name, typeParameters: generic.typeParameters)\n                generic.typeParameters.forEach {\n                    $0.typeName = $0.typeName.actualTypeName ?? $0.typeName\n                    $0.typeName.actualTypeName = nil // TODO: really don't like this old behaviour\n                }\n                typeName.generic = generic // TODO: really don't like this old behaviour\n                typeName.array = lookupName.array // TODO: really don't like this old behaviour\n                typeName.dictionary = lookupName.dictionary // TODO: really don't like this old behaviour\n\n                let params = generic.typeParameters.map { $0.typeName.asSource }.joined(separator: \", \")\n\n                typeName.actualTypeName = TypeName(name: \"\\(generic.name)<\\(params)>\",\n                                                   isOptional: typeName.isOptional,\n                                                   isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                                                   tuple: lookupName.tuple,\n                                                   array: lookupName.array, // TODO: asArray\n                                                   dictionary: lookupName.dictionary, // TODO: asDictionary\n                                                   closure: lookupName.closure,\n                                                   set: lookupName.set,\n                                                   generic: generic\n                )\n            }\n        }\n\n        if let aliasedName = (typeName.actualTypeName ?? retrievedName), aliasedName.unwrappedTypeName != typeName.unwrappedTypeName {\n            typeName.actualTypeName = aliasedName\n        }\n\n        let hasGenericRequirements = containingType?.genericRequirements.isEmpty == false\n        || (method != nil && method?.genericRequirements.isEmpty == false)\n\n        if hasGenericRequirements,\n           let typeNameForLookup = typeName.name.split(separator: \" \").first,\n           !typeNameForLookup.isEmpty {\n            // we should consider if we are looking up return type of a method with generic constraints\n            // where `typeName` passed would include `... where ...` suffix\n            let genericRequirements: [GenericRequirement]\n            if let requirements = containingType?.genericRequirements, !requirements.isEmpty {\n                genericRequirements = requirements\n            } else {\n                genericRequirements = method?.genericRequirements ?? []\n            }\n            let relevantRequirements = genericRequirements.filter {\n                // matched type against a generic requirement name\n                // thus type should be replaced with a protocol composition\n                $0.leftType.name == typeNameForLookup\n            }\n            if relevantRequirements.count > 1 {\n                // compose protocols into `ProtocolComposition` and generate TypeName\n                var implements: [String: Type] = [:]\n                relevantRequirements.forEach {\n                    implements[$0.rightType.typeName.name] = $0.rightType.type\n                }\n                let composedProtocols = ProtocolComposition(\n                    inheritedTypes: relevantRequirements.map { $0.rightType.typeName.unwrappedTypeName },\n                    isGeneric: true,\n                    composedTypes: relevantRequirements.compactMap { $0.rightType.type },\n                    implements: implements\n                )\n                typeName.actualTypeName = TypeName(name: \"(\\(relevantRequirements.map { $0.rightType.typeName.unwrappedTypeName }.joined(separator: \" & \")))\", isProtocolComposition: true)\n                return composedProtocols\n            } else if let protocolRequirement = relevantRequirements.first {\n                // create TypeName off a single generic's protocol requirement\n                typeName.actualTypeName = TypeName(name: \"(\\(protocolRequirement.rightType.typeName))\")\n                return protocolRequirement.rightType.type\n            }\n        }\n\n        // try to peek into typealias, maybe part of the typeName is a composed identifier from a type and typealias\n        // i.e.\n        // enum Module {\n        //   typealias ID = MyView\n        // }\n        // class MyView {\n        //   class ID: String {}\n        // }\n        //\n        // let variable: Module.ID.ID // should be resolved as MyView.ID type\n        let finalLookup = typeName.actualTypeName ?? typeName\n        var resolvedIdentifier = finalLookup.generic?.name ?? finalLookup.unwrappedTypeName\n        if let type = unique[resolvedIdentifier] {\n            return type\n        }\n        \n        for alias in resolvedTypealiases {\n            /// iteratively replace all typealiases from the resolvedIdentifier to get to the actual type name requested\n            if resolvedIdentifier.contains(alias.value.name), let range = resolvedIdentifier.range(of: alias.value.name) {\n                resolvedIdentifier = resolvedIdentifier.replacingCharacters(in: range, with: alias.value.typeName.name)\n            }\n        }\n        // should we cache resolved typenames?\n        if unique[resolvedIdentifier] == nil {\n            // peek into typealiases, if any of them contain the same typeName\n            // this is done after the initial attempt in order to prioritise local (recognized) types first\n            // before even trying to substitute the requested type with any typealias\n            for alias in resolvedTypealiases {\n                /// iteratively replace all typealiases from the resolvedIdentifier to get to the actual type name requested,\n                /// ignoring namespacing\n                if resolvedIdentifier == alias.value.aliasName {\n                    resolvedIdentifier = alias.value.typeName.name\n                    typeName.actualTypeName = alias.value.typeName\n                    break\n                }\n            }\n        }\n\n        if let associatedType = associatedTypes[resolvedIdentifier] {\n            return associatedType.type\n        }\n\n        return unique[resolvedIdentifier] ?? unique[typeName.name]\n    }\n\n    private func actualTypeName(for typeName: TypeName,\n                                containingType: Type? = nil) -> TypeName? {\n        let unique = typeMap\n        let typealiases = resolvedTypealiases\n        let associatedTypes = associatedTypes\n\n        var unwrapped = typeName.unwrappedTypeName\n        if let generic = typeName.generic {\n            unwrapped = generic.name\n        } else if let type = associatedTypes[unwrapped] {\n            unwrapped = type.name\n        }\n\n        guard let aliased = resolveGlobalName(for: unwrapped, containingType: containingType, unique: unique, modules: modules, typealiases: typealiases, associatedTypes: associatedTypes) else {\n            return nil\n        }\n\n        /// TODO: verify\n        let generic = typeName.generic.map { GenericType(name: $0.name, typeParameters: $0.typeParameters) }\n        generic?.name = aliased.name\n        let dictionary = typeName.dictionary.map { DictionaryType(name: $0.name, valueTypeName: $0.valueTypeName, valueType: $0.valueType, keyTypeName: $0.keyTypeName, keyType: $0.keyType) }\n        dictionary?.name = aliased.name\n        let array = typeName.array.map { ArrayType(name: $0.name, elementTypeName: $0.elementTypeName, elementType: $0.elementType) }\n        array?.name = aliased.name\n        let set = typeName.set.map { SetType(name: $0.name, elementTypeName: $0.elementTypeName, elementType: $0.elementType) }\n        set?.name = aliased.name\n\n        return TypeName(name: aliased.name,\n                        isOptional: typeName.isOptional,\n                        isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                        tuple: aliased.typealias?.typeName.tuple ?? typeName.tuple, // TODO: verify\n                        array: aliased.typealias?.typeName.array ?? array,\n                        dictionary: aliased.typealias?.typeName.dictionary ?? dictionary,\n                        closure: aliased.typealias?.typeName.closure ?? typeName.closure,\n                        set: aliased.typealias?.typeName.set ?? set,\n                        generic: aliased.typealias?.typeName.generic ?? generic\n        )\n    }\n\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/Diffable.swift",
    "content": "//\n//  Diffable.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zabłocki on 22/12/2016.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\npublic protocol Diffable {\n\n    /// Returns `DiffableResult` for the given objects.\n    ///\n    /// - Parameter object: Object to diff against.\n    /// - Returns: Diffable results.\n    func diffAgainst(_ object: Any?) -> DiffableResult\n}\n\n/// :nodoc:\nextension NSRange: Diffable {\n    /// :nodoc:\n    public static func == (lhs: NSRange, rhs: NSRange) -> Bool {\n        return NSEqualRanges(lhs, rhs)\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let rhs = object as? NSRange else {\n            results.append(\"Incorrect type <expected: FileParserResult, received: \\(type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"location\").trackDifference(actual: self.location, expected: rhs.location))\n        results.append(contentsOf: DiffableResult(identifier: \"length\").trackDifference(actual: self.length, expected: rhs.length))\n        return results\n    }\n}\n\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic class DiffableResult: NSObject, AutoEquatable {\n    // sourcery: skipEquality\n    private var results: [String]\n    internal var identifier: String?\n\n    init(results: [String] = [], identifier: String? = nil) {\n        self.results = results\n        self.identifier = identifier\n    }\n\n    func append(_ element: String) {\n        results.append(element)\n    }\n\n    func append(contentsOf contents: DiffableResult) {\n        if !contents.isEmpty {\n            results.append(contents.description)\n        }\n    }\n\n    var isEmpty: Bool { return results.isEmpty }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.identifier)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? DiffableResult else { return false }\n        if self.identifier != rhs.identifier { return false }\n        return true\n    }\n\n    public override var description: String {\n        guard !results.isEmpty else { return \"\" }\n        var description = \"\\(identifier.flatMap { \"\\($0) \" } ?? \"\")\"\n        description.append(results.joined(separator: \"\\n\"))\n        return description\n    }\n}\n\npublic extension DiffableResult {\n\n#if swift(>=4.1)\n#else\n    /// :nodoc:\n    @discardableResult func trackDifference<T: Equatable>(actual: T, expected: T) -> DiffableResult {\n        if actual != expected {\n            let result = DiffableResult(results: [\"<expected: \\(expected), received: \\(actual)>\"])\n            append(contentsOf: result)\n        }\n        return self\n    }\n#endif\n\n    /// :nodoc:\n    @discardableResult func trackDifference<T: Equatable>(actual: T?, expected: T?) -> DiffableResult {\n        if actual != expected {\n            let expected = expected.map({ \"\\($0)\" }) ?? \"nil\"\n            let actual = actual.map({ \"\\($0)\" }) ?? \"nil\"\n            let result = DiffableResult(results: [\"<expected: \\(expected), received: \\(actual)>\"])\n            append(contentsOf: result)\n        }\n        return self\n    }\n\n    /// :nodoc:\n    @discardableResult func trackDifference<T: Equatable>(actual: T, expected: T) -> DiffableResult where T: Diffable {\n        let diffResult = actual.diffAgainst(expected)\n        append(contentsOf: diffResult)\n        return self\n    }\n\n    /// :nodoc:\n    @discardableResult func trackDifference<T: Equatable>(actual: [T], expected: [T]) -> DiffableResult where T: Diffable {\n        let diffResult = DiffableResult()\n        defer { append(contentsOf: diffResult) }\n\n        guard actual.count == expected.count else {\n            diffResult.append(\"Different count, expected: \\(expected.count), received: \\(actual.count)\")\n            return self\n        }\n\n        for (idx, item) in actual.enumerated() {\n            let diff = DiffableResult()\n            diff.trackDifference(actual: item, expected: expected[idx])\n            if !diff.isEmpty {\n                let string = \"idx \\(idx): \\(diff)\"\n                diffResult.append(string)\n            }\n        }\n\n        return self\n    }\n\n    /// :nodoc:\n    @discardableResult func trackDifference<T: Equatable>(actual: [T], expected: [T]) -> DiffableResult {\n        let diffResult = DiffableResult()\n        defer { append(contentsOf: diffResult) }\n\n        guard actual.count == expected.count else {\n            diffResult.append(\"Different count, expected: \\(expected.count), received: \\(actual.count)\")\n            return self\n        }\n\n        for (idx, item) in actual.enumerated() where item != expected[idx] {\n            let string = \"idx \\(idx): <expected: \\(expected), received: \\(actual)>\"\n            diffResult.append(string)\n        }\n\n        return self\n    }\n\n    /// :nodoc:\n    @discardableResult func trackDifference<K, T: Equatable>(actual: [K: T], expected: [K: T]) -> DiffableResult where T: Diffable {\n        let diffResult = DiffableResult()\n        defer { append(contentsOf: diffResult) }\n\n        guard actual.count == expected.count else {\n            append(\"Different count, expected: \\(expected.count), received: \\(actual.count)\")\n\n            if expected.count > actual.count {\n                let missingKeys = Array(expected.keys.filter {\n                    actual[$0] == nil\n                }.map {\n                    String(describing: $0)\n                })\n                diffResult.append(\"Missing keys: \\(missingKeys.joined(separator: \", \"))\")\n            }\n            return self\n        }\n\n        for (key, actualElement) in actual {\n            guard let expectedElement = expected[key] else {\n                diffResult.append(\"Missing key \\\"\\(key)\\\"\")\n                continue\n            }\n\n            let diff = DiffableResult()\n            diff.trackDifference(actual: actualElement, expected: expectedElement)\n            if !diff.isEmpty {\n                let string = \"key \\\"\\(key)\\\": \\(diff)\"\n                diffResult.append(string)\n            }\n        }\n\n        return self\n    }\n\n// MARK: - NSObject diffing\n\n    /// :nodoc:\n    @discardableResult func trackDifference<K, T: NSObjectProtocol>(actual: [K: T], expected: [K: T]) -> DiffableResult {\n        let diffResult = DiffableResult()\n        defer { append(contentsOf: diffResult) }\n\n        guard actual.count == expected.count else {\n            append(\"Different count, expected: \\(expected.count), received: \\(actual.count)\")\n\n            if expected.count > actual.count {\n                let missingKeys = Array(expected.keys.filter {\n                    actual[$0] == nil\n                    }.map {\n                        String(describing: $0)\n                })\n                diffResult.append(\"Missing keys: \\(missingKeys.joined(separator: \", \"))\")\n            }\n            return self\n        }\n\n        for (key, actualElement) in actual {\n            guard let expectedElement = expected[key] else {\n                diffResult.append(\"Missing key \\\"\\(key)\\\"\")\n                continue\n            }\n\n            if !actualElement.isEqual(expectedElement) {\n                diffResult.append(\"key \\\"\\(key)\\\": <expected: \\(expected), received: \\(actual)>\")\n            }\n        }\n\n        return self\n    }\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/Extensions.swift",
    "content": "import Foundation\n\npublic extension StringProtocol {\n    /// Trimms leading and trailing whitespaces and newlines\n    var trimmed: String {\n        self.trimmingCharacters(in: .whitespacesAndNewlines)\n    }\n}\n\npublic extension String {\n\n    /// Returns nil if string is empty\n    var nilIfEmpty: String? {\n        if isEmpty {\n            return nil\n        }\n\n        return self\n    }\n\n    /// Returns nil if string is empty or contains `_` character\n    var nilIfNotValidParameterName: String? {\n        if isEmpty {\n            return nil\n        }\n\n        if self == \"_\" {\n            return nil\n        }\n\n        return self\n    }\n\n    /// :nodoc:\n    /// - Parameter substring: Instance of a substring\n    /// - Returns: Returns number of times a substring appears in self\n    func countInstances(of substring: String) -> Int {\n        guard !substring.isEmpty else { return 0 }\n        var count = 0\n        var searchRange: Range<String.Index>?\n        while let foundRange = range(of: substring, options: [], range: searchRange) {\n            count += 1\n            searchRange = Range(uncheckedBounds: (lower: foundRange.upperBound, upper: endIndex))\n        }\n        return count\n    }\n\n    /// :nodoc:\n    /// Removes leading and trailing whitespace from str. Returns false if str was not altered.\n    @discardableResult\n    mutating func strip() -> Bool {\n        let strippedString = stripped()\n        guard strippedString != self else { return false }\n        self = strippedString\n        return true\n    }\n\n    /// :nodoc:\n    /// Returns a copy of str with leading and trailing whitespace removed.\n    func stripped() -> String {\n        return String(self.trimmingCharacters(in: .whitespaces))\n    }\n\n    /// :nodoc:\n    @discardableResult\n    mutating func trimPrefix(_ prefix: String) -> Bool {\n        guard hasPrefix(prefix) else { return false }\n        self = String(self.suffix(self.count - prefix.count))\n        return true\n    }\n\n    /// :nodoc:\n    func trimmingPrefix(_ prefix: String) -> String {\n        guard hasPrefix(prefix) else { return self }\n        return String(self.suffix(self.count - prefix.count))\n    }\n\n    /// :nodoc:\n    @discardableResult\n    mutating func trimSuffix(_ suffix: String) -> Bool {\n        guard hasSuffix(suffix) else { return false }\n        self = String(self.prefix(self.count - suffix.count))\n        return true\n    }\n\n    /// :nodoc:\n    func trimmingSuffix(_ suffix: String) -> String {\n        guard hasSuffix(suffix) else { return self }\n        return String(self.prefix(self.count - suffix.count))\n    }\n\n    /// :nodoc:\n    func dropFirstAndLast(_ n: Int = 1) -> String {\n        return drop(first: n, last: n)\n    }\n\n    /// :nodoc:\n    func drop(first: Int, last: Int) -> String {\n        return String(self.dropFirst(first).dropLast(last))\n    }\n\n    /// :nodoc:\n    /// Wraps brackets if needed to make a valid type name\n    func bracketsBalancing() -> String {\n        if hasPrefix(\"(\") && hasSuffix(\")\") {\n            let unwrapped = dropFirstAndLast()\n            return unwrapped.commaSeparated().count == 1 ? unwrapped.bracketsBalancing() : self\n        } else {\n            let wrapped = \"(\\(self))\"\n            return wrapped.isValidTupleName() || !isBracketsBalanced() ? wrapped : self\n        }\n    }\n\n    /// :nodoc:\n    /// Returns true if given string can represent a valid tuple type name\n    func isValidTupleName() -> Bool {\n        guard hasPrefix(\"(\") && hasSuffix(\")\") else { return false }\n        let trimmedBracketsName = dropFirstAndLast()\n        return trimmedBracketsName.isBracketsBalanced() && trimmedBracketsName.commaSeparated().count > 1\n    }\n\n    /// :nodoc:\n    func isValidArrayName() -> Bool {\n        if hasPrefix(\"Array<\") { return true }\n        if hasPrefix(\"[\") && hasSuffix(\"]\") {\n            return dropFirstAndLast().colonSeparated().count == 1\n        }\n        return false\n    }\n\n    /// :nodoc:\n    func isValidDictionaryName() -> Bool {\n        if hasPrefix(\"Dictionary<\") { return true }\n        if hasPrefix(\"[\") && contains(\":\") && hasSuffix(\"]\") {\n            return dropFirstAndLast().colonSeparated().count == 2\n        }\n        return false\n    }\n\n    /// :nodoc:\n    func isValidClosureName() -> Bool {\n        return components(separatedBy: \"->\", excludingDelimiterBetween: ([\"(\", \"<\"], [\")\", \">\"])).count > 1\n    }\n\n    /// :nodoc:\n    /// Returns true if all opening brackets are balanced with closed brackets.\n    func isBracketsBalanced() -> Bool {\n        var bracketsCount: Int = 0\n        for char in self {\n            if char == \"(\" { bracketsCount += 1 } else if char == \")\" { bracketsCount -= 1 }\n            if bracketsCount < 0 { return false }\n        }\n        return bracketsCount == 0\n    }\n\n    /// :nodoc:\n    /// Returns components separated with a comma respecting nested types\n    func commaSeparated() -> [String] {\n        return components(separatedBy: \",\", excludingDelimiterBetween: (\"<[({\", \"})]>\"))\n    }\n\n    /// :nodoc:\n    /// Returns components separated with colon respecting nested types\n    func colonSeparated() -> [String] {\n        return components(separatedBy: \":\", excludingDelimiterBetween: (\"<[({\", \"})]>\"))\n    }\n\n    /// :nodoc:\n    /// Returns components separated with semicolon respecting nested contexts\n    func semicolonSeparated() -> [String] {\n        return components(separatedBy: \";\", excludingDelimiterBetween: (\"{\", \"}\"))\n    }\n\n    /// :nodoc:\n    func components(separatedBy delimiter: String, excludingDelimiterBetween between: (open: String, close: String)) -> [String] {\n        return self.components(separatedBy: delimiter, excludingDelimiterBetween: (between.open.map { String($0) }, between.close.map { String($0) }))\n    }\n\n    /// :nodoc:\n    func components(separatedBy delimiter: String, excludingDelimiterBetween between: (open: [String], close: [String])) -> [String] {\n        var boundingCharactersCount: Int = 0\n        var quotesCount: Int = 0\n        var item = \"\"\n        var items = [String]()\n\n        var i = self.startIndex\n        while i < self.endIndex {\n            var offset = 1\n            defer {\n                i = self.index(i, offsetBy: offset)\n            }\n            var currentlyScannedEnd: Index = self.endIndex\n            if let endIndex = self.index(i, offsetBy: delimiter.count, limitedBy: self.endIndex) {\n                currentlyScannedEnd = endIndex\n            }\n            let currentlyScanned: String = String(self[i..<currentlyScannedEnd])\n            if let openString = between.open.first(where: { self[i...].starts(with: $0) }) {\n                if !((boundingCharactersCount == 0) as Bool && (String(self[i]) == delimiter) as Bool) {\n                    boundingCharactersCount += 1\n                }\n                offset = openString.count\n            } else if let closeString = between.close.first(where: { self[i...].starts(with: $0) }) {\n                // do not count `->`\n                if !((self[i] == \">\") as Bool && (item.last == \"-\") as Bool) {\n                    boundingCharactersCount = max(0, boundingCharactersCount - 1)\n                }\n                offset = closeString.count\n            }\n            if (self[i] == \"\\\"\") as Bool {\n                quotesCount += 1\n            }\n\n            let currentIsDelimiter = (currentlyScanned == delimiter) as Bool\n            let boundingCountIsZero = (boundingCharactersCount == 0) as Bool\n            let hasEvenQuotes = (quotesCount % 2 == 0) as Bool\n            if currentIsDelimiter && boundingCountIsZero && hasEvenQuotes {\n                items.append(item)\n                item = \"\"\n                i = self.index(i, offsetBy: delimiter.count - 1)\n            } else {\n                let endIndex: Index = self.index(i, offsetBy: offset)\n                item += self[i..<endIndex]\n            }\n        }\n        items.append(item)\n        return items\n    }\n}\n\npublic extension NSString {\n    /// :nodoc:\n    var entireRange: NSRange {\n        return NSRange(location: 0, length: self.length)\n    }\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/FileParserResult.swift",
    "content": "//\n//  FileParserResult.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zablocki on 11/01/2017.\n//  Copyright © 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n// sourcery: skipJSExport\n/// :nodoc:\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class FileParserResult: NSObject, SourceryModel, Diffable {\n    public let path: String?\n    public let module: String?\n    public var types = [Type]() {\n        didSet {\n            types.forEach { type in\n                guard type.module == nil, type.kind != \"extensions\" else { return }\n                type.module = module\n            }\n        }\n    }\n    public var functions = [SourceryMethod]()\n    public var typealiases = [Typealias]()\n    public var inlineRanges = [String: NSRange]()\n    public var inlineIndentations = [String: String]()\n\n    public var modifiedDate: Date\n    public var sourceryVersion: String\n\n    var isEmpty: Bool {\n        types.isEmpty && functions.isEmpty && typealiases.isEmpty && inlineRanges.isEmpty && inlineIndentations.isEmpty\n    }\n\n    public init(path: String?, module: String?, types: [Type], functions: [SourceryMethod], typealiases: [Typealias] = [], inlineRanges: [String: NSRange] = [:], inlineIndentations: [String: String] = [:], modifiedDate: Date = Date(), sourceryVersion: String = \"\") {\n        self.path = path\n        self.module = module\n        self.types = types\n        self.functions = functions\n        self.typealiases = typealiases\n        self.inlineRanges = inlineRanges\n        self.inlineIndentations = inlineIndentations\n        self.modifiedDate = modifiedDate\n        self.sourceryVersion = sourceryVersion\n\n        super.init()\n\n        defer {\n            self.types = types\n        }\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"path = \\(String(describing: self.path)), \")\n        string.append(\"module = \\(String(describing: self.module)), \")\n        string.append(\"types = \\(String(describing: self.types)), \")\n        string.append(\"functions = \\(String(describing: self.functions)), \")\n        string.append(\"typealiases = \\(String(describing: self.typealiases)), \")\n        string.append(\"inlineRanges = \\(String(describing: self.inlineRanges)), \")\n        string.append(\"inlineIndentations = \\(String(describing: self.inlineIndentations)), \")\n        string.append(\"modifiedDate = \\(String(describing: self.modifiedDate)), \")\n        string.append(\"sourceryVersion = \\(String(describing: self.sourceryVersion)), \")\n        string.append(\"isEmpty = \\(String(describing: self.isEmpty))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? FileParserResult else {\n            results.append(\"Incorrect type <expected: FileParserResult, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"path\").trackDifference(actual: self.path, expected: castObject.path))\n        results.append(contentsOf: DiffableResult(identifier: \"module\").trackDifference(actual: self.module, expected: castObject.module))\n        results.append(contentsOf: DiffableResult(identifier: \"types\").trackDifference(actual: self.types, expected: castObject.types))\n        results.append(contentsOf: DiffableResult(identifier: \"functions\").trackDifference(actual: self.functions, expected: castObject.functions))\n        results.append(contentsOf: DiffableResult(identifier: \"typealiases\").trackDifference(actual: self.typealiases, expected: castObject.typealiases))\n        results.append(contentsOf: DiffableResult(identifier: \"inlineRanges\").trackDifference(actual: self.inlineRanges, expected: castObject.inlineRanges))\n        results.append(contentsOf: DiffableResult(identifier: \"inlineIndentations\").trackDifference(actual: self.inlineIndentations, expected: castObject.inlineIndentations))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiedDate\").trackDifference(actual: self.modifiedDate, expected: castObject.modifiedDate))\n        results.append(contentsOf: DiffableResult(identifier: \"sourceryVersion\").trackDifference(actual: self.sourceryVersion, expected: castObject.sourceryVersion))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.path)\n        hasher.combine(self.module)\n        hasher.combine(self.types)\n        hasher.combine(self.functions)\n        hasher.combine(self.typealiases)\n        hasher.combine(self.inlineRanges)\n        hasher.combine(self.inlineIndentations)\n        hasher.combine(self.modifiedDate)\n        hasher.combine(self.sourceryVersion)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? FileParserResult else { return false }\n        if self.path != rhs.path { return false }\n        if self.module != rhs.module { return false }\n        if self.types != rhs.types { return false }\n        if self.functions != rhs.functions { return false }\n        if self.typealiases != rhs.typealiases { return false }\n        if self.inlineRanges != rhs.inlineRanges { return false }\n        if self.inlineIndentations != rhs.inlineIndentations { return false }\n        if self.modifiedDate != rhs.modifiedDate { return false }\n        if self.sourceryVersion != rhs.sourceryVersion { return false }\n        return true\n    }\n\n// sourcery:inline:FileParserResult.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.path = aDecoder.decode(forKey: \"path\")\n            self.module = aDecoder.decode(forKey: \"module\")\n            guard let types: [Type] = aDecoder.decode(forKey: \"types\") else { \n                withVaList([\"types\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.types = types\n            guard let functions: [SourceryMethod] = aDecoder.decode(forKey: \"functions\") else { \n                withVaList([\"functions\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.functions = functions\n            guard let typealiases: [Typealias] = aDecoder.decode(forKey: \"typealiases\") else { \n                withVaList([\"typealiases\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typealiases = typealiases\n            guard let inlineRanges: [String: NSRange] = aDecoder.decode(forKey: \"inlineRanges\") else { \n                withVaList([\"inlineRanges\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.inlineRanges = inlineRanges\n            guard let inlineIndentations: [String: String] = aDecoder.decode(forKey: \"inlineIndentations\") else { \n                withVaList([\"inlineIndentations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.inlineIndentations = inlineIndentations\n            guard let modifiedDate: Date = aDecoder.decode(forKey: \"modifiedDate\") else { \n                withVaList([\"modifiedDate\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiedDate = modifiedDate\n            guard let sourceryVersion: String = aDecoder.decode(forKey: \"sourceryVersion\") else { \n                withVaList([\"sourceryVersion\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.sourceryVersion = sourceryVersion\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.path, forKey: \"path\")\n            aCoder.encode(self.module, forKey: \"module\")\n            aCoder.encode(self.types, forKey: \"types\")\n            aCoder.encode(self.functions, forKey: \"functions\")\n            aCoder.encode(self.typealiases, forKey: \"typealiases\")\n            aCoder.encode(self.inlineRanges, forKey: \"inlineRanges\")\n            aCoder.encode(self.inlineIndentations, forKey: \"inlineIndentations\")\n            aCoder.encode(self.modifiedDate, forKey: \"modifiedDate\")\n            aCoder.encode(self.sourceryVersion, forKey: \"sourceryVersion\")\n        }\n// sourcery:end\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/Log.swift",
    "content": "//import Darwin\nimport Foundation\n\n/// :nodoc:\npublic enum Log {\n    public struct Configuration {\n        let isDryRun: Bool\n        let isQuiet: Bool\n        let isVerboseLoggingEnabled: Bool\n        let isLogBenchmarkEnabled: Bool\n        let shouldLogAST: Bool\n\n        public init(isDryRun: Bool, isQuiet: Bool, isVerboseLoggingEnabled: Bool, isLogBenchmarkEnabled: Bool, shouldLogAST: Bool) {\n            self.isDryRun = isDryRun\n            self.isQuiet = isQuiet\n            self.isVerboseLoggingEnabled = isVerboseLoggingEnabled\n            self.isLogBenchmarkEnabled = isLogBenchmarkEnabled\n            self.shouldLogAST = shouldLogAST\n        }\n    }\n\n    public static func setup(using configuration: Configuration) {\n        Log.stackMessages = configuration.isDryRun\n        switch (configuration.isQuiet, configuration.isVerboseLoggingEnabled) {\n        case (true, _):\n            Log.level = .errors\n        case (false, let isVerbose):\n            Log.level = isVerbose ? .verbose : .info\n        }\n        Log.logBenchmarks = (configuration.isVerboseLoggingEnabled || configuration.isLogBenchmarkEnabled) && !configuration.isQuiet\n        Log.logAST = (configuration.shouldLogAST) && !configuration.isQuiet\n    }\n\n    public enum Level: Int {\n        case errors\n        case warnings\n        case info\n        case verbose\n    }\n\n    public static var level: Level = .warnings\n    public static var logBenchmarks: Bool = false\n    public static var logAST: Bool = false\n\n    public static var stackMessages: Bool = false\n    public private(set) static var messagesStack = [String]()\n\n    public static func error(_ message: Any) {\n        log(level: .errors, \"error: \\(message)\")\n        // to return error when running swift templates which is done in a different process\n        if ProcessInfo.processInfo.processName != \"Sourcery\" {\n            fputs(\"\\(message)\", stderr)\n        }\n    }\n\n    public static func warning(_ message: Any) {\n        log(level: .warnings, \"warning: \\(message)\")\n    }\n\n    public static func astWarning(_ message: Any) {\n        guard logAST else { return }\n        log(level: .warnings, \"ast warning: \\(message)\")\n    }\n\n    public static func astError(_ message: Any) {\n        guard logAST else { return }\n        log(level: .errors, \"ast error: \\(message)\")\n    }\n\n    public static func verbose(_ message: Any) {\n        log(level: .verbose, message)\n    }\n\n    public static func info(_ message: Any) {\n        log(level: .info, message)\n    }\n\n    public static func benchmark(_ message: Any) {\n        guard logBenchmarks else { return }\n        if stackMessages {\n            messagesStack.append(\"\\(message)\")\n        } else {\n            print(message)\n        }\n    }\n\n    private static func log(level logLevel: Level, _ message: Any) {\n        guard logLevel.rawValue <= Log.level.rawValue else { return }\n        if stackMessages {\n            messagesStack.append(\"\\(message)\")\n        } else {\n            print(message)\n        }\n    }\n\n    public static func output(_ message: String) {\n        print(message)\n    }\n}\n\nextension String: Error {}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Common/TemplateContext.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n/// :nodoc:\n// sourcery: skipCoding\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class TemplateContext: NSObject, SourceryModel, NSCoding, Diffable {\n    // sourcery: skipJSExport\n    public let parserResult: FileParserResult?\n    public let functions: [SourceryMethod]\n    public let types: Types\n    public let argument: [String: NSObject]\n\n    // sourcery: skipDescription\n    public var type: [String: Type] {\n        return types.typesByName\n    }\n\n    public init(parserResult: FileParserResult?, types: Types, functions: [SourceryMethod], arguments: [String: NSObject]) {\n        self.parserResult = parserResult\n        self.types = types\n        self.functions = functions\n        self.argument = arguments\n    }\n\n    /// :nodoc:\n    required public init?(coder aDecoder: NSCoder) {\n        guard let parserResult: FileParserResult = aDecoder.decode(forKey: \"parserResult\") else { \n                withVaList([\"parserResult\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found. FileParserResults are required for template context that needs persisting.\", arguments: arguments)\n                }\n                fatalError()\n             }\n        guard let argument: [String: NSObject] = aDecoder.decode(forKey: \"argument\") else { \n                withVaList([\"argument\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }\n\n        // if we want to support multiple cycles of encode / decode we need deep copy because composer changes reference types\n        let fileParserResultCopy: FileParserResult? = nil\n//      fileParserResultCopy = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(NSKeyedArchiver.archivedData(withRootObject: parserResult)) as? FileParserResult\n\n        let composed = Composer.uniqueTypesAndFunctions(parserResult, serial: false)\n        self.types = .init(types: composed.types, typealiases: composed.typealiases)\n        self.functions = composed.functions\n\n        self.parserResult = fileParserResultCopy\n        self.argument = argument\n    }\n\n    /// :nodoc:\n    public func encode(with aCoder: NSCoder) {\n        aCoder.encode(self.parserResult, forKey: \"parserResult\")\n        aCoder.encode(self.argument, forKey: \"argument\")\n    }\n\n    public var stencilContext: [String: Any] {\n        return [\n            \"types\": types,\n            \"functions\": functions,\n            \"type\": types.typesByName,\n            \"argument\": argument\n        ]\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"parserResult = \\(String(describing: self.parserResult)), \")\n        string.append(\"functions = \\(String(describing: self.functions)), \")\n        string.append(\"types = \\(String(describing: self.types)), \")\n        string.append(\"argument = \\(String(describing: self.argument)), \")\n        string.append(\"stencilContext = \\(String(describing: self.stencilContext))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? TemplateContext else {\n            results.append(\"Incorrect type <expected: TemplateContext, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"parserResult\").trackDifference(actual: self.parserResult, expected: castObject.parserResult))\n        results.append(contentsOf: DiffableResult(identifier: \"functions\").trackDifference(actual: self.functions, expected: castObject.functions))\n        results.append(contentsOf: DiffableResult(identifier: \"types\").trackDifference(actual: self.types, expected: castObject.types))\n        results.append(contentsOf: DiffableResult(identifier: \"argument\").trackDifference(actual: self.argument, expected: castObject.argument))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.parserResult)\n        hasher.combine(self.functions)\n        hasher.combine(self.types)\n        hasher.combine(self.argument)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? TemplateContext else { return false }\n        if self.parserResult != rhs.parserResult { return false }\n        if self.functions != rhs.functions { return false }\n        if self.types != rhs.types { return false }\n        if self.argument != rhs.argument { return false }\n        return true\n    }\n\n    // sourcery: skipDescription, skipEquality\n    public var jsContext: [String: Any] {\n        return [\n            \"types\": [\n                \"all\": types.all,\n                \"protocols\": types.protocols,\n                \"classes\": types.classes,\n                \"structs\": types.structs,\n                \"enums\": types.enums,\n                \"extensions\": types.extensions,\n                \"based\": types.based,\n                \"inheriting\": types.inheriting,\n                \"implementing\": types.implementing,\n                \"protocolCompositions\": types.protocolCompositions,\n                \"typealiases\": types.typealiases\n            ] as [String : Any],\n            \"functions\": functions,\n            \"type\": types.typesByName,\n            \"argument\": argument\n        ]\n    }\n\n}\n\nextension ProcessInfo {\n    /// :nodoc:\n    public var context: TemplateContext! {\n        return NSKeyedUnarchiver.unarchiveObject(withFile: arguments[1]) as? TemplateContext\n    }\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Generated/AutoHashable.generated.swift",
    "content": "// Generated using Sourcery 1.3.1 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable all\n\n\n// MARK: - AutoHashable for classes, protocols, structs\n\n// MARK: - AutoHashable for Enums\n"
  },
  {
    "path": "SourceryRuntime/Sources/Generated/Coding.generated.swift",
    "content": "// Generated using Sourcery 2.2.6 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable vertical_whitespace trailing_newline\n\nimport Foundation\n\n\nextension NSCoder {\n\n    @nonobjc func decode(forKey: String) -> String? {\n        return self.maybeDecode(forKey: forKey) as String?\n    }\n\n    @nonobjc func decode(forKey: String) -> TypeName? {\n        return self.maybeDecode(forKey: forKey) as TypeName?\n    }\n\n    @nonobjc func decode(forKey: String) -> AccessLevel? {\n        return self.maybeDecode(forKey: forKey) as AccessLevel?\n    }\n\n    @nonobjc func decode(forKey: String) -> Bool {\n        return self.decodeBool(forKey: forKey)\n    }\n\n    @nonobjc func decode(forKey: String) -> Int {\n        return self.decodeInteger(forKey: forKey)\n    }\n\n    func decode<E>(forKey: String) -> E? {\n        return maybeDecode(forKey: forKey) as E?\n    }\n\n    fileprivate func maybeDecode<E>(forKey: String) -> E? {\n        guard let object = self.decodeObject(forKey: forKey) else {\n            return nil\n        }\n\n        return object as? E\n    }\n\n}\n\nextension ArrayType: NSCoding {}\n\nextension AssociatedType: NSCoding {}\n\nextension AssociatedValue: NSCoding {}\n\nextension Attribute: NSCoding {}\n\nextension BytesRange: NSCoding {}\n\n\nextension ClosureParameter: NSCoding {}\n\nextension ClosureType: NSCoding {}\n\nextension DictionaryType: NSCoding {}\n\n\nextension EnumCase: NSCoding {}\n\nextension FileParserResult: NSCoding {}\n\nextension GenericParameter: NSCoding {}\n\nextension GenericRequirement: NSCoding {}\n\nextension GenericType: NSCoding {}\n\nextension GenericTypeParameter: NSCoding {}\n\nextension Import: NSCoding {}\n\nextension Method: NSCoding {}\n\nextension MethodParameter: NSCoding {}\n\nextension Modifier: NSCoding {}\n\n\n\nextension SetType: NSCoding {}\n\n\nextension Subscript: NSCoding {}\n\nextension TupleElement: NSCoding {}\n\nextension TupleType: NSCoding {}\n\nextension Type: NSCoding {}\n\nextension TypeName: NSCoding {}\n\nextension Typealias: NSCoding {}\n\nextension Types: NSCoding {}\n\nextension Variable: NSCoding {}\n\n"
  },
  {
    "path": "SourceryRuntime/Sources/Generated/JSExport.generated.swift",
    "content": "// Generated using Sourcery 2.2.6 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable vertical_whitespace trailing_newline\n\n#if canImport(JavaScriptCore)\nimport JavaScriptCore\n\n@objc protocol ActorAutoJSExport: JSExport {\n    var kind: String { get }\n    var isFinal: Bool { get }\n    var isDistributed: Bool { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension Actor: ActorAutoJSExport {}\n\n@objc protocol ArrayTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var elementTypeName: TypeName { get }\n    var elementType: Type? { get }\n    var asGeneric: GenericType { get }\n    var asSource: String { get }\n}\n\nextension ArrayType: ArrayTypeAutoJSExport {}\n\n@objc protocol AssociatedTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var typeName: TypeName? { get }\n    var type: Type? { get }\n}\n\nextension AssociatedType: AssociatedTypeAutoJSExport {}\n\n@objc protocol AssociatedValueAutoJSExport: JSExport {\n    var localName: String? { get }\n    var externalName: String? { get }\n    var typeName: TypeName { get }\n    var type: Type? { get }\n    var defaultValue: String? { get }\n    var annotations: Annotations { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension AssociatedValue: AssociatedValueAutoJSExport {}\n\n@objc protocol AttributeAutoJSExport: JSExport {\n    var name: String { get }\n    var arguments: [String: NSObject] { get }\n    var asSource: String { get }\n    var description: String { get }\n}\n\nextension Attribute: AttributeAutoJSExport {}\n\n@objc protocol BytesRangeAutoJSExport: JSExport {\n    var offset: Int64 { get }\n    var length: Int64 { get }\n}\n\nextension BytesRange: BytesRangeAutoJSExport {}\n\n@objc protocol ClassAutoJSExport: JSExport {\n    var kind: String { get }\n    var isFinal: Bool { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension Class: ClassAutoJSExport {}\n\n@objc protocol ClosureParameterAutoJSExport: JSExport {\n    var argumentLabel: String? { get }\n    var name: String? { get }\n    var typeName: TypeName { get }\n    var `inout`: Bool { get }\n    var type: Type? { get }\n    var isVariadic: Bool { get }\n    var typeAttributes: AttributeList { get }\n    var defaultValue: String? { get }\n    var annotations: Annotations { get }\n    var asSource: String { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension ClosureParameter: ClosureParameterAutoJSExport {}\n\n@objc protocol ClosureTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var parameters: [ClosureParameter] { get }\n    var returnTypeName: TypeName { get }\n    var actualReturnTypeName: TypeName { get }\n    var returnType: Type? { get }\n    var isOptionalReturnType: Bool { get }\n    var isImplicitlyUnwrappedOptionalReturnType: Bool { get }\n    var unwrappedReturnTypeName: String { get }\n    var isAsync: Bool { get }\n    var asyncKeyword: String? { get }\n    var `throws`: Bool { get }\n    var throwsOrRethrowsKeyword: String? { get }\n    var throwsTypeName: TypeName? { get }\n    var asSource: String { get }\n}\n\nextension ClosureType: ClosureTypeAutoJSExport {}\n\n@objc protocol DictionaryTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var valueTypeName: TypeName { get }\n    var valueType: Type? { get }\n    var keyTypeName: TypeName { get }\n    var keyType: Type? { get }\n    var asGeneric: GenericType { get }\n    var asSource: String { get }\n}\n\nextension DictionaryType: DictionaryTypeAutoJSExport {}\n\n@objc protocol EnumAutoJSExport: JSExport {\n    var kind: String { get }\n    var cases: [EnumCase] { get }\n    var rawTypeName: TypeName? { get }\n    var hasRawType: Bool { get }\n    var rawType: Type? { get }\n    var based: [String: String] { get }\n    var hasAssociatedValues: Bool { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension Enum: EnumAutoJSExport {}\n\n@objc protocol EnumCaseAutoJSExport: JSExport {\n    var name: String { get }\n    var rawValue: String? { get }\n    var associatedValues: [AssociatedValue] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var indirect: Bool { get }\n    var hasAssociatedValue: Bool { get }\n}\n\nextension EnumCase: EnumCaseAutoJSExport {}\n\n\n@objc protocol GenericParameterAutoJSExport: JSExport {\n    var name: String { get }\n    var inheritedTypeName: TypeName? { get }\n}\n\nextension GenericParameter: GenericParameterAutoJSExport {}\n\n@objc protocol GenericRequirementAutoJSExport: JSExport {\n    var leftType: AssociatedType { get }\n    var rightType: GenericTypeParameter { get }\n    var relationship: String { get }\n    var relationshipSyntax: String { get }\n}\n\nextension GenericRequirement: GenericRequirementAutoJSExport {}\n\n@objc protocol GenericTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var typeParameters: [GenericTypeParameter] { get }\n    var asSource: String { get }\n    var description: String { get }\n}\n\nextension GenericType: GenericTypeAutoJSExport {}\n\n@objc protocol GenericTypeParameterAutoJSExport: JSExport {\n    var typeName: TypeName { get }\n    var type: Type? { get }\n}\n\nextension GenericTypeParameter: GenericTypeParameterAutoJSExport {}\n\n@objc protocol ImportAutoJSExport: JSExport {\n    var kind: String? { get }\n    var path: String { get }\n    var description: String { get }\n    var moduleName: String { get }\n}\n\nextension Import: ImportAutoJSExport {}\n\n@objc protocol MethodAutoJSExport: JSExport {\n    var name: String { get }\n    var selectorName: String { get }\n    var shortName: String { get }\n    var callName: String { get }\n    var parameters: [MethodParameter] { get }\n    var returnTypeName: TypeName { get }\n    var actualReturnTypeName: TypeName { get }\n    var isThrowsTypeGeneric: Bool { get }\n    var returnType: Type? { get }\n    var isOptionalReturnType: Bool { get }\n    var isImplicitlyUnwrappedOptionalReturnType: Bool { get }\n    var unwrappedReturnTypeName: String { get }\n    var isAsync: Bool { get }\n    var isDistributed: Bool { get }\n    var `throws`: Bool { get }\n    var throwsTypeName: TypeName? { get }\n    var `rethrows`: Bool { get }\n    var accessLevel: String { get }\n    var isStatic: Bool { get }\n    var isClass: Bool { get }\n    var isInitializer: Bool { get }\n    var isDeinitializer: Bool { get }\n    var isFailableInitializer: Bool { get }\n    var isConvenienceInitializer: Bool { get }\n    var isRequired: Bool { get }\n    var isFinal: Bool { get }\n    var isMutating: Bool { get }\n    var isGeneric: Bool { get }\n    var isOptional: Bool { get }\n    var isNonisolated: Bool { get }\n    var isDynamic: Bool { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var definedInTypeName: TypeName? { get }\n    var actualDefinedInTypeName: TypeName? { get }\n    var definedInType: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var genericParameters: [GenericParameter] { get }\n}\n\nextension Method: MethodAutoJSExport {}\n\n@objc protocol MethodParameterAutoJSExport: JSExport {\n    var argumentLabel: String? { get }\n    var name: String { get }\n    var typeName: TypeName { get }\n    var `inout`: Bool { get }\n    var isVariadic: Bool { get }\n    var type: Type? { get }\n    var typeAttributes: AttributeList { get }\n    var defaultValue: String? { get }\n    var annotations: Annotations { get }\n    var index: Int { get }\n    var asSource: String { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension MethodParameter: MethodParameterAutoJSExport {}\n\n@objc protocol ModifierAutoJSExport: JSExport {\n    var name: String { get }\n    var detail: String? { get }\n    var asSource: String { get }\n}\n\nextension Modifier: ModifierAutoJSExport {}\n\n@objc protocol ProtocolAutoJSExport: JSExport {\n    var kind: String { get }\n    var associatedTypes: [String: AssociatedType] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var fileName: String? { get }\n}\n\nextension Protocol: ProtocolAutoJSExport {}\n\n@objc protocol ProtocolCompositionAutoJSExport: JSExport {\n    var kind: String { get }\n    var composedTypeNames: [TypeName] { get }\n    var composedTypes: [Type]? { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension ProtocolComposition: ProtocolCompositionAutoJSExport {}\n\n@objc protocol SetTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var elementTypeName: TypeName { get }\n    var elementType: Type? { get }\n    var asGeneric: GenericType { get }\n    var asSource: String { get }\n}\n\nextension SetType: SetTypeAutoJSExport {}\n\n\n\n@objc protocol StructAutoJSExport: JSExport {\n    var kind: String { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension Struct: StructAutoJSExport {}\n\n@objc protocol SubscriptAutoJSExport: JSExport {\n    var parameters: [MethodParameter] { get }\n    var returnTypeName: TypeName { get }\n    var actualReturnTypeName: TypeName { get }\n    var returnType: Type? { get }\n    var isOptionalReturnType: Bool { get }\n    var isImplicitlyUnwrappedOptionalReturnType: Bool { get }\n    var unwrappedReturnTypeName: String { get }\n    var isFinal: Bool { get }\n    var readAccess: String { get }\n    var writeAccess: String { get }\n    var isAsync: Bool { get }\n    var `throws`: Bool { get }\n    var throwsTypeName: TypeName? { get }\n    var isMutable: Bool { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var definedInTypeName: TypeName? { get }\n    var actualDefinedInTypeName: TypeName? { get }\n    var definedInType: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericParameters: [GenericParameter] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var isGeneric: Bool { get }\n}\n\nextension Subscript: SubscriptAutoJSExport {}\n\n@objc protocol TemplateContextAutoJSExport: JSExport {\n    var functions: [SourceryMethod] { get }\n    var types: Types { get }\n    var argument: [String: NSObject] { get }\n    var type: [String: Type] { get }\n    var stencilContext: [String: Any] { get }\n    var jsContext: [String: Any] { get }\n}\n\nextension TemplateContext: TemplateContextAutoJSExport {}\n\n@objc protocol TupleElementAutoJSExport: JSExport {\n    var name: String? { get }\n    var typeName: TypeName { get }\n    var type: Type? { get }\n    var asSource: String { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension TupleElement: TupleElementAutoJSExport {}\n\n@objc protocol TupleTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var elements: [TupleElement] { get }\n}\n\nextension TupleType: TupleTypeAutoJSExport {}\n\n@objc protocol TypeAutoJSExport: JSExport {\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var kind: String { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension Type: TypeAutoJSExport {}\n\n@objc protocol TypeNameAutoJSExport: JSExport {\n    var name: String { get }\n    var generic: GenericType? { get }\n    var isGeneric: Bool { get }\n    var isProtocolComposition: Bool { get }\n    var actualTypeName: TypeName? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n    var isVoid: Bool { get }\n    var isTuple: Bool { get }\n    var tuple: TupleType? { get }\n    var isArray: Bool { get }\n    var array: ArrayType? { get }\n    var isDictionary: Bool { get }\n    var dictionary: DictionaryType? { get }\n    var isClosure: Bool { get }\n    var closure: ClosureType? { get }\n    var isSet: Bool { get }\n    var set: SetType? { get }\n    var isNever: Bool { get }\n    var asSource: String { get }\n    var description: String { get }\n    var debugDescription: String { get }\n}\n\nextension TypeName: TypeNameAutoJSExport {}\n\n@objc protocol TypealiasAutoJSExport: JSExport {\n    var aliasName: String { get }\n    var typeName: TypeName { get }\n    var type: Type? { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var parent: Type? { get }\n    var accessLevel: String { get }\n    var parentName: String? { get }\n    var name: String { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension Typealias: TypealiasAutoJSExport {}\n\n\n@objc protocol TypesCollectionAutoJSExport: JSExport {\n}\n\nextension TypesCollection: TypesCollectionAutoJSExport {}\n\n@objc protocol VariableAutoJSExport: JSExport {\n    var name: String { get }\n    var typeName: TypeName { get }\n    var type: Type? { get }\n    var isComputed: Bool { get }\n    var isAsync: Bool { get }\n    var `throws`: Bool { get }\n    var throwsTypeName: TypeName? { get }\n    var isStatic: Bool { get }\n    var readAccess: String { get }\n    var writeAccess: String { get }\n    var isMutable: Bool { get }\n    var defaultValue: String? { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var isFinal: Bool { get }\n    var isLazy: Bool { get }\n    var isDynamic: Bool { get }\n    var definedInTypeName: TypeName? { get }\n    var actualDefinedInTypeName: TypeName? { get }\n    var definedInType: Type? { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension Variable: VariableAutoJSExport {}\n\n\n#endif"
  },
  {
    "path": "SourceryRuntime/Sources/Generated/Typed.generated.swift",
    "content": "// Generated using Sourcery 2.2.6 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable vertical_whitespace\n\n\nextension AssociatedValue {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\nextension ClosureParameter {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\nextension MethodParameter {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\nextension TupleElement {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\nextension Typealias {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\nextension Variable {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/AssociatedType_Linux.swift",
    "content": "#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Describes Swift AssociatedType\npublic final class AssociatedType: NSObject, SourceryModel, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"name\":\n                return name\n            case \"typeName\":\n                return typeName\n            case \"type\":\n                return type\n            default:\n                fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }\n    }\n\n    /// Associated type name\n    public let name: String\n\n    /// Associated type type constraint name, if specified\n    public let typeName: TypeName?\n\n    // sourcery: skipEquality, skipDescription\n    /// Associated type constrained type, if known, i.e. if the type is declared in the scanned sources.\n    public var type: Type?\n\n    /// :nodoc:\n    public init(name: String, typeName: TypeName? = nil, type: Type? = nil) {\n        self.name = name\n        self.typeName = typeName\n        self.type = type\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"typeName = \\(String(describing: self.typeName))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? AssociatedType else {\n            results.append(\"Incorrect type <expected: AssociatedType, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? AssociatedType else { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        return true\n    }\n\n// sourcery:inline:AssociatedType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            self.typeName = aDecoder.decode(forKey: \"typeName\")\n            self.type = aDecoder.decode(forKey: \"type\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n        }\n// sourcery:end\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/AssociatedValue_Linux.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Defines enum case associated value\npublic final class AssociatedValue: NSObject, SourceryModel, AutoDescription, Typed, Annotated, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"externalName\":\n                return externalName\n            case \"localName\":\n                return localName\n            case \"typeName\":\n                return typeName\n            case \"type\":\n                return type\n            case \"defaultValue\":\n                return defaultValue\n            case \"annotations\":\n                return annotations\n            case \"isArray\":\n                return isArray\n            case \"isClosure\":\n                return isClosure\n            case \"isDictionary\":\n                return isDictionary\n            case \"isTuple\":\n                return isTuple\n            case \"isOptional\":\n                return isOptional\n            case \"isImplicitlyUnwrappedOptional\":\n                return isImplicitlyUnwrappedOptional\n            case \"isGeneric\":\n                return typeName.isGeneric\n            default:\n                fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }\n    }\n\n    /// Associated value local name.\n    /// This is a name to be used to construct enum case value\n    public let localName: String?\n\n    /// Associated value external name.\n    /// This is a name to be used to access value in value-bindig\n    public let externalName: String?\n\n    /// Associated value type name\n    public let typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Associated value type, if known\n    public var type: Type?\n\n    /// Associated value default value\n    public let defaultValue: String?\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public var annotations: Annotations = [:]\n\n    /// :nodoc:\n    public init(localName: String?, externalName: String?, typeName: TypeName, type: Type? = nil, defaultValue: String? = nil, annotations: [String: NSObject] = [:]) {\n        self.localName = localName\n        self.externalName = externalName\n        self.typeName = typeName\n        self.type = type\n        self.defaultValue = defaultValue\n        self.annotations = annotations\n    }\n\n    convenience init(name: String? = nil, typeName: TypeName, type: Type? = nil, defaultValue: String? = nil, annotations: [String: NSObject] = [:]) {\n        self.init(localName: name, externalName: name, typeName: typeName, type: type, defaultValue: defaultValue, annotations: annotations)\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"localName = \\(String(describing: self.localName)), \")\n        string.append(\"externalName = \\(String(describing: self.externalName)), \")\n        string.append(\"typeName = \\(String(describing: self.typeName)), \")\n        string.append(\"defaultValue = \\(String(describing: self.defaultValue)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? AssociatedValue else {\n            results.append(\"Incorrect type <expected: AssociatedValue, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"localName\").trackDifference(actual: self.localName, expected: castObject.localName))\n        results.append(contentsOf: DiffableResult(identifier: \"externalName\").trackDifference(actual: self.externalName, expected: castObject.externalName))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        results.append(contentsOf: DiffableResult(identifier: \"defaultValue\").trackDifference(actual: self.defaultValue, expected: castObject.defaultValue))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.localName)\n        hasher.combine(self.externalName)\n        hasher.combine(self.typeName)\n        hasher.combine(self.defaultValue)\n        hasher.combine(self.annotations)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? AssociatedValue else { return false }\n        if self.localName != rhs.localName { return false }\n        if self.externalName != rhs.externalName { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.defaultValue != rhs.defaultValue { return false }\n        if self.annotations != rhs.annotations { return false }\n        return true\n    }\n\n// sourcery:inline:AssociatedValue.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.localName = aDecoder.decode(forKey: \"localName\")\n            self.externalName = aDecoder.decode(forKey: \"externalName\")\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n            self.defaultValue = aDecoder.decode(forKey: \"defaultValue\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.localName, forKey: \"localName\")\n            aCoder.encode(self.externalName, forKey: \"externalName\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n            aCoder.encode(self.defaultValue, forKey: \"defaultValue\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n        }\n// sourcery:end\n\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/ClosureParameter_Linux.swift",
    "content": "#if !canImport(ObjectiveC)\nimport Foundation\n\n// sourcery: skipDiffing\npublic final class ClosureParameter: NSObject, SourceryModel, Typed, Annotated, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n        case \"argumentLabel\":\n            return argumentLabel\n        case \"name\":\n            return name\n        case \"typeName\":\n            return typeName\n        case \"inout\":\n            return `inout`\n        case \"type\":\n            return type\n        case \"isVariadic\":\n            return isVariadic\n        case \"defaultValue\":\n            return defaultValue\n        default:\n            fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }\n    }\n    /// Parameter external name\n    public var argumentLabel: String?\n\n    /// Parameter internal name\n    public let name: String?\n\n    /// Parameter type name\n    public let typeName: TypeName\n\n    /// Parameter flag whether it's inout or not\n    public let `inout`: Bool\n\n    // sourcery: skipEquality, skipDescription\n    /// Parameter type, if known\n    public var type: Type?\n\n    /// Parameter if the argument has a variadic type or not\n    public let isVariadic: Bool\n\n    /// Parameter type attributes, i.e. `@escaping`\n    public var typeAttributes: AttributeList {\n        return typeName.attributes\n    }\n\n    /// Method parameter default value expression\n    public var defaultValue: String?\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public var annotations: Annotations = [:]\n\n    /// :nodoc:\n    public init(argumentLabel: String? = nil, name: String? = nil, typeName: TypeName, type: Type? = nil,\n                defaultValue: String? = nil, annotations: [String: NSObject] = [:], isInout: Bool = false, \n                isVariadic: Bool = false) {\n        self.typeName = typeName\n        self.argumentLabel = argumentLabel\n        self.name = name\n        self.type = type\n        self.defaultValue = defaultValue\n        self.annotations = annotations\n        self.`inout` = isInout\n        self.isVariadic = isVariadic\n    }\n\n    public var asSource: String {\n        let typeInfo = \"\\(`inout` ? \"inout \" : \"\")\\(typeName.asSource)\\(isVariadic ? \"...\" : \"\")\"\n        if argumentLabel?.nilIfNotValidParameterName == nil, name?.nilIfNotValidParameterName == nil {\n            return typeInfo\n        }\n\n        let typeSuffix = \": \\(typeInfo)\"\n        guard argumentLabel != name else {\n            return name ?? \"\" + typeSuffix\n        }\n\n        let labels = [argumentLabel ?? \"_\", name?.nilIfEmpty]\n          .compactMap { $0 }\n          .joined(separator: \" \")\n\n        return (labels.nilIfEmpty ?? \"_\") + typeSuffix\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.argumentLabel)\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        hasher.combine(self.`inout`)\n        hasher.combine(self.isVariadic)\n        hasher.combine(self.defaultValue)\n        hasher.combine(self.annotations)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"argumentLabel = \\(String(describing: self.argumentLabel)), \")\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"typeName = \\(String(describing: self.typeName)), \")\n        string.append(\"`inout` = \\(String(describing: self.`inout`)), \")\n        string.append(\"typeAttributes = \\(String(describing: self.typeAttributes)), \")\n        string.append(\"defaultValue = \\(String(describing: self.defaultValue)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations)), \")\n        string.append(\"asSource = \\(String(describing: self.asSource))\")\n        return string\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? ClosureParameter else { return false }\n        if self.argumentLabel != rhs.argumentLabel { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.`inout` != rhs.`inout` { return false }\n        if self.isVariadic != rhs.isVariadic { return false }\n        if self.defaultValue != rhs.defaultValue { return false }\n        if self.annotations != rhs.annotations { return false }\n        return true\n    }\n\n    // sourcery:inline:ClosureParameter.AutoCoding\n\n            /// :nodoc:\n            required public init?(coder aDecoder: NSCoder) {\n                self.argumentLabel = aDecoder.decode(forKey: \"argumentLabel\")\n                self.name = aDecoder.decode(forKey: \"name\")\n                guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                    withVaList([\"typeName\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.typeName = typeName\n                self.`inout` = aDecoder.decode(forKey: \"`inout`\")\n                self.type = aDecoder.decode(forKey: \"type\")\n                self.isVariadic = aDecoder.decode(forKey: \"isVariadic\")\n                self.defaultValue = aDecoder.decode(forKey: \"defaultValue\")\n                guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                    withVaList([\"annotations\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.annotations = annotations\n            }\n\n            /// :nodoc:\n            public func encode(with aCoder: NSCoder) {\n                aCoder.encode(self.argumentLabel, forKey: \"argumentLabel\")\n                aCoder.encode(self.name, forKey: \"name\")\n                aCoder.encode(self.typeName, forKey: \"typeName\")\n                aCoder.encode(self.`inout`, forKey: \"`inout`\")\n                aCoder.encode(self.type, forKey: \"type\")\n                aCoder.encode(self.isVariadic, forKey: \"isVariadic\")\n                aCoder.encode(self.defaultValue, forKey: \"defaultValue\")\n                aCoder.encode(self.annotations, forKey: \"annotations\")\n            }\n\n    // sourcery:end\n}\n\nextension Array where Element == ClosureParameter {\n    public var asSource: String {\n        \"(\\(map { $0.asSource }.joined(separator: \", \")))\"\n    }\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/EnumCase_Linux.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Defines enum case\npublic final class EnumCase: NSObject, SourceryModel, AutoDescription, Annotated, Documented, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"name\":\n                return name\n            case \"hasAssociatedValue\":\n                return hasAssociatedValue\n            case \"associatedValues\":\n                return associatedValues\n            case \"indirect\":\n                return indirect\n            case \"annotations\":\n                return annotations\n            case \"rawValue\":\n                return rawValue\n            default:\n                fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }\n    }\n    /// Enum case name\n    public let name: String\n\n    /// Enum case raw value, if any\n    public let rawValue: String?\n\n    /// Enum case associated values\n    public let associatedValues: [AssociatedValue]\n\n    /// Enum case annotations\n    public var annotations: Annotations = [:]\n\n    public var documentation: Documentation = []\n\n    /// Whether enum case is indirect\n    public let indirect: Bool\n\n    /// Whether enum case has associated value\n    public var hasAssociatedValue: Bool {\n        return !associatedValues.isEmpty\n    }\n\n    // Underlying parser data, never to be used by anything else\n    // sourcery: skipEquality, skipDescription, skipCoding, skipJSExport\n    /// :nodoc:\n    public var __parserData: Any?\n\n    /// :nodoc:\n    public init(name: String, rawValue: String? = nil, associatedValues: [AssociatedValue] = [], annotations: [String: NSObject] = [:], documentation: [String] = [], indirect: Bool = false) {\n        self.name = name\n        self.rawValue = rawValue\n        self.associatedValues = associatedValues\n        self.annotations = annotations\n        self.documentation = documentation\n        self.indirect = indirect\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"rawValue = \\(String(describing: self.rawValue)), \")\n        string.append(\"associatedValues = \\(String(describing: self.associatedValues)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\(String(describing: self.documentation)), \")\n        string.append(\"indirect = \\(String(describing: self.indirect)), \")\n        string.append(\"hasAssociatedValue = \\(String(describing: self.hasAssociatedValue))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? EnumCase else {\n            results.append(\"Incorrect type <expected: EnumCase, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"rawValue\").trackDifference(actual: self.rawValue, expected: castObject.rawValue))\n        results.append(contentsOf: DiffableResult(identifier: \"associatedValues\").trackDifference(actual: self.associatedValues, expected: castObject.associatedValues))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"indirect\").trackDifference(actual: self.indirect, expected: castObject.indirect))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.rawValue)\n        hasher.combine(self.associatedValues)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.indirect)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? EnumCase else { return false }\n        if self.name != rhs.name { return false }\n        if self.rawValue != rhs.rawValue { return false }\n        if self.associatedValues != rhs.associatedValues { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.indirect != rhs.indirect { return false }\n        return true\n    }\n\n// sourcery:inline:EnumCase.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            self.rawValue = aDecoder.decode(forKey: \"rawValue\")\n            guard let associatedValues: [AssociatedValue] = aDecoder.decode(forKey: \"associatedValues\") else { \n                withVaList([\"associatedValues\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.associatedValues = associatedValues\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            self.indirect = aDecoder.decode(forKey: \"indirect\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.rawValue, forKey: \"rawValue\")\n            aCoder.encode(self.associatedValues, forKey: \"associatedValues\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.indirect, forKey: \"indirect\")\n        }\n// sourcery:end\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/Enum_Linux.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Defines Swift enum\npublic final class Enum: Type {\n    public override subscript(dynamicMember member: String) -> Any? {\n        switch member {\n        case \"cases\":\n            return cases\n        case \"hasAssociatedValues\":\n            return hasAssociatedValues\n        default:\n            return super[dynamicMember: member]\n        }\n    }\n\n    // sourcery: skipJSExport\n    public class var kind: String { return \"enum\" }\n\n    // sourcery: skipDescription\n    /// Returns \"enum\"\n    public override var kind: String { Self.kind }\n\n    /// Enum cases\n    public var cases: [EnumCase]\n\n    /**\n     Enum raw value type name, if any. This type is removed from enum's `based` and `inherited` types collections.\n\n        - important: Unless raw type is specified explicitly via type alias RawValue it will be set to the first type in the inheritance chain.\n     So if your enum does not have raw value but implements protocols you'll have to specify conformance to these protocols via extension to get enum with nil raw value type and all based and inherited types.\n     */\n    public var rawTypeName: TypeName? {\n        didSet {\n            if let rawTypeName = rawTypeName {\n                hasRawType = true\n                if let index = inheritedTypes.firstIndex(of: rawTypeName.name) {\n                    inheritedTypes.remove(at: index)\n                }\n                if based[rawTypeName.name] != nil {\n                    based[rawTypeName.name] = nil\n                }\n            } else {\n                hasRawType = false\n            }\n        }\n    }\n\n    // sourcery: skipDescription, skipEquality\n    /// :nodoc:\n    public private(set) var hasRawType: Bool\n\n    // sourcery: skipDescription, skipEquality\n    /// Enum raw value type, if known\n    public var rawType: Type?\n\n    // sourcery: skipEquality, skipDescription, skipCoding\n    /// Names of types or protocols this type inherits from, including unknown (not scanned) types\n    public override var based: [String: String] {\n        didSet {\n            if let rawTypeName = rawTypeName, based[rawTypeName.name] != nil {\n                based[rawTypeName.name] = nil\n            }\n        }\n    }\n\n    /// Whether enum contains any associated values\n    public var hasAssociatedValues: Bool {\n        return cases.contains(where: { $0.hasAssociatedValue })\n    }\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                parent: Type? = nil,\n                accessLevel: AccessLevel = .internal,\n                isExtension: Bool = false,\n                inheritedTypes: [String] = [],\n                rawTypeName: TypeName? = nil,\n                cases: [EnumCase] = [],\n                variables: [Variable] = [],\n                methods: [Method] = [],\n                containedTypes: [Type] = [],\n                typealiases: [Typealias] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                isGeneric: Bool = false) {\n\n        self.cases = cases\n        self.rawTypeName = rawTypeName\n        self.hasRawType = rawTypeName != nil || !inheritedTypes.isEmpty\n\n        super.init(name: name, parent: parent, accessLevel: accessLevel, isExtension: isExtension, variables: variables, methods: methods, inheritedTypes: inheritedTypes, containedTypes: containedTypes, typealiases: typealiases, attributes: attributes, modifiers: modifiers, annotations: annotations, documentation: documentation, isGeneric: isGeneric, kind: Self.kind)\n\n        if let rawTypeName = rawTypeName?.name, let index = self.inheritedTypes.firstIndex(of: rawTypeName) {\n            self.inheritedTypes.remove(at: index)\n        }\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string.append(\", \")\n        string.append(\"cases = \\(String(describing: self.cases)), \")\n        string.append(\"rawTypeName = \\(String(describing: self.rawTypeName)), \")\n        string.append(\"hasAssociatedValues = \\(String(describing: self.hasAssociatedValues))\")\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Enum else {\n            results.append(\"Incorrect type <expected: Enum, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"cases\").trackDifference(actual: self.cases, expected: castObject.cases))\n        results.append(contentsOf: DiffableResult(identifier: \"rawTypeName\").trackDifference(actual: self.rawTypeName, expected: castObject.rawTypeName))\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.cases)\n        hasher.combine(self.rawTypeName)\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Enum else { return false }\n        if self.cases != rhs.cases { return false }\n        if self.rawTypeName != rhs.rawTypeName { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Enum.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let cases: [EnumCase] = aDecoder.decode(forKey: \"cases\") else { \n                withVaList([\"cases\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.cases = cases\n            self.rawTypeName = aDecoder.decode(forKey: \"rawTypeName\")\n            self.hasRawType = aDecoder.decode(forKey: \"hasRawType\")\n            self.rawType = aDecoder.decode(forKey: \"rawType\")\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n            aCoder.encode(self.cases, forKey: \"cases\")\n            aCoder.encode(self.rawTypeName, forKey: \"rawTypeName\")\n            aCoder.encode(self.hasRawType, forKey: \"hasRawType\")\n            aCoder.encode(self.rawType, forKey: \"rawType\")\n        }\n// sourcery:end\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/GenericParameter_Linux.swift",
    "content": "#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Descibes Swift generic parameter\npublic final class GenericParameter: NSObject, SourceryModel, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"name\":\n                return name\n            case \"inheritedTypeName\":\n                return inheritedTypeName\n            default:\n                fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }\n    }\n\n    /// Generic parameter name\n    public var name: String\n\n    /// Generic parameter inherited type\n    public var inheritedTypeName: TypeName?\n\n    /// :nodoc:\n    public init(name: String, inheritedTypeName: TypeName? = nil) {\n        self.name = name\n        self.inheritedTypeName = inheritedTypeName\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"inheritedTypeName = \\(String(describing: self.inheritedTypeName))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? GenericParameter else {\n            results.append(\"Incorrect type <expected: GenericParameter, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"inheritedTypeName\").trackDifference(actual: self.inheritedTypeName, expected: castObject.inheritedTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.inheritedTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? GenericParameter else { return false }\n        if self.name != rhs.name { return false }\n        if self.inheritedTypeName != rhs.inheritedTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:GenericParameter.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            self.inheritedTypeName = aDecoder.decode(forKey: \"inheritedTypeName\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.inheritedTypeName, forKey: \"inheritedTypeName\")\n        }\n\n// sourcery:end\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/GenericRequirement_Linux.swift",
    "content": "#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Descibes Swift generic requirement\npublic class GenericRequirement: NSObject, SourceryModel, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"leftType\":\n                return leftType\n            case \"rightType\":\n                return rightType\n            case \"relationship\":\n                return relationship\n            case \"relationshipSyntax\":\n                return relationshipSyntax\n            default:\n                fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }\n    }\n\n    public enum Relationship: String {\n        case equals\n        case conformsTo\n\n        var syntax: String {\n            switch self {\n            case .equals:\n                return \"==\"\n            case .conformsTo:\n                return \":\"\n            }\n        }\n    }\n\n    public var leftType: AssociatedType\n    public let rightType: GenericTypeParameter\n\n    /// relationship name\n    public let relationship: String\n\n    /// Syntax e.g. `==` or `:`\n    public let relationshipSyntax: String\n\n    public init(leftType: AssociatedType, rightType: GenericTypeParameter, relationship: Relationship) {\n        self.leftType = leftType\n        self.rightType = rightType\n        self.relationship = relationship.rawValue\n        self.relationshipSyntax = relationship.syntax\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"leftType = \\(String(describing: self.leftType)), \")\n        string.append(\"rightType = \\(String(describing: self.rightType)), \")\n        string.append(\"relationship = \\(String(describing: self.relationship)), \")\n        string.append(\"relationshipSyntax = \\(String(describing: self.relationshipSyntax))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? GenericRequirement else {\n            results.append(\"Incorrect type <expected: GenericRequirement, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"leftType\").trackDifference(actual: self.leftType, expected: castObject.leftType))\n        results.append(contentsOf: DiffableResult(identifier: \"rightType\").trackDifference(actual: self.rightType, expected: castObject.rightType))\n        results.append(contentsOf: DiffableResult(identifier: \"relationship\").trackDifference(actual: self.relationship, expected: castObject.relationship))\n        results.append(contentsOf: DiffableResult(identifier: \"relationshipSyntax\").trackDifference(actual: self.relationshipSyntax, expected: castObject.relationshipSyntax))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.leftType)\n        hasher.combine(self.rightType)\n        hasher.combine(self.relationship)\n        hasher.combine(self.relationshipSyntax)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? GenericRequirement else { return false }\n        if self.leftType != rhs.leftType { return false }\n        if self.rightType != rhs.rightType { return false }\n        if self.relationship != rhs.relationship { return false }\n        if self.relationshipSyntax != rhs.relationshipSyntax { return false }\n        return true\n    }\n\n    // sourcery:inline:GenericRequirement.AutoCoding\n\n            /// :nodoc:\n            required public init?(coder aDecoder: NSCoder) {\n                guard let leftType: AssociatedType = aDecoder.decode(forKey: \"leftType\") else { \n                    withVaList([\"leftType\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.leftType = leftType\n                guard let rightType: GenericTypeParameter = aDecoder.decode(forKey: \"rightType\") else { \n                    withVaList([\"rightType\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.rightType = rightType\n                guard let relationship: String = aDecoder.decode(forKey: \"relationship\") else { \n                    withVaList([\"relationship\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.relationship = relationship\n                guard let relationshipSyntax: String = aDecoder.decode(forKey: \"relationshipSyntax\") else { \n                    withVaList([\"relationshipSyntax\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.relationshipSyntax = relationshipSyntax\n            }\n\n            /// :nodoc:\n            public func encode(with aCoder: NSCoder) {\n                aCoder.encode(self.leftType, forKey: \"leftType\")\n                aCoder.encode(self.rightType, forKey: \"rightType\")\n                aCoder.encode(self.relationship, forKey: \"relationship\")\n                aCoder.encode(self.relationshipSyntax, forKey: \"relationshipSyntax\")\n            }\n    // sourcery:end\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/MethodParameter_Linux.swift",
    "content": "#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Describes method parameter\npublic class MethodParameter: NSObject, SourceryModel, Typed, Annotated, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"argumentLabel\":\n                return argumentLabel\n            case \"name\":\n                return name\n            case \"typeName\":\n                return typeName\n            case \"isClosure\":\n                return isClosure\n            case \"typeAttributes\":\n                return typeAttributes\n            case \"isVariadic\":\n                return isVariadic\n            case \"asSource\":\n                return asSource\n            case \"index\":\n                return index\n            case \"isOptional\":\n                return isOptional\n            default:\n                fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }\n    }\n    /// Parameter external name\n    public var argumentLabel: String?\n\n    // Note: although method parameter can have no name, this property is not optional,\n    // this is so to maintain compatibility with existing templates.\n    /// Parameter internal name\n    public let name: String\n\n    /// Parameter type name\n    public let typeName: TypeName\n\n    /// Parameter flag whether it's inout or not\n    public let `inout`: Bool\n\n    /// Is this variadic parameter?\n    public let isVariadic: Bool\n\n    // sourcery: skipEquality, skipDescription\n    /// Parameter type, if known\n    public var type: Type?\n\n    /// Parameter type attributes, i.e. `@escaping`\n    public var typeAttributes: AttributeList {\n        return typeName.attributes\n    }\n\n    /// Method parameter default value expression\n    public var defaultValue: String?\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public var annotations: Annotations = [:]\n\n    /// Method parameter index in the argument list\n    public var index: Int\n\n    /// :nodoc:\n    public init(argumentLabel: String?, name: String = \"\", index: Int, typeName: TypeName, type: Type? = nil, defaultValue: String? = nil, annotations: [String: NSObject] = [:], isInout: Bool = false, isVariadic: Bool = false) {\n        self.typeName = typeName\n        self.argumentLabel = argumentLabel\n        self.name = name\n        self.index = index\n        self.type = type\n        self.defaultValue = defaultValue\n        self.annotations = annotations\n        self.`inout` = isInout\n        self.isVariadic = isVariadic\n    }\n\n    /// :nodoc:\n    public init(name: String = \"\", index: Int, typeName: TypeName, type: Type? = nil, defaultValue: String? = nil, annotations: [String: NSObject] = [:], isInout: Bool = false, isVariadic: Bool = false) {\n        self.typeName = typeName\n        self.argumentLabel = name\n        self.name = name\n        self.index = index\n        self.type = type\n        self.defaultValue = defaultValue\n        self.annotations = annotations\n        self.`inout` = isInout\n        self.isVariadic = isVariadic\n    }\n\n    public var asSource: String {\n        let values: String = defaultValue.map { \" = \\($0)\" } ?? \"\"\n        let variadicity: String = isVariadic ? \"...\" : \"\"\n        let inoutness: String = `inout` ? \"inout \" : \"\"\n        let typeSuffix = \": \\(inoutness)\\(typeName.asSource)\\(values)\\(variadicity)\"\n        guard argumentLabel != name else {\n            return name + typeSuffix\n        }\n\n        let labels = [argumentLabel ?? \"_\", name.nilIfEmpty]\n          .compactMap { $0 }\n          .joined(separator: \" \")\n\n        return (labels.nilIfEmpty ?? \"_\") + typeSuffix\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"argumentLabel = \\(String(describing: self.argumentLabel)), \")\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"typeName = \\(String(describing: self.typeName)), \")\n        string.append(\"`inout` = \\(String(describing: self.`inout`)), \")\n        string.append(\"isVariadic = \\(String(describing: self.isVariadic)), \")\n        string.append(\"typeAttributes = \\(String(describing: self.typeAttributes)), \")\n        string.append(\"defaultValue = \\(String(describing: self.defaultValue)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations)), \")\n        string.append(\"asSource = \\(String(describing: self.asSource)), \")\n        string.append(\"index = \\(String(describing: self.index))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? MethodParameter else {\n            results.append(\"Incorrect type <expected: MethodParameter, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"argumentLabel\").trackDifference(actual: self.argumentLabel, expected: castObject.argumentLabel))\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        results.append(contentsOf: DiffableResult(identifier: \"`inout`\").trackDifference(actual: self.`inout`, expected: castObject.`inout`))\n        results.append(contentsOf: DiffableResult(identifier: \"isVariadic\").trackDifference(actual: self.isVariadic, expected: castObject.isVariadic))\n        results.append(contentsOf: DiffableResult(identifier: \"defaultValue\").trackDifference(actual: self.defaultValue, expected: castObject.defaultValue))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"index\").trackDifference(actual: self.index, expected: castObject.index))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.argumentLabel)\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        hasher.combine(self.`inout`)\n        hasher.combine(self.isVariadic)\n        hasher.combine(self.defaultValue)\n        hasher.combine(self.annotations)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? MethodParameter else { return false }\n        if self.argumentLabel != rhs.argumentLabel { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.`inout` != rhs.`inout` { return false }\n        if self.isVariadic != rhs.isVariadic { return false }\n        if self.defaultValue != rhs.defaultValue { return false }\n        if self.annotations != rhs.annotations { return false }\n        return true\n    }\n\n// sourcery:inline:MethodParameter.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.argumentLabel = aDecoder.decode(forKey: \"argumentLabel\")\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.`inout` = aDecoder.decode(forKey: \"`inout`\")\n            self.isVariadic = aDecoder.decode(forKey: \"isVariadic\")\n            self.type = aDecoder.decode(forKey: \"type\")\n            self.defaultValue = aDecoder.decode(forKey: \"defaultValue\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            self.index = aDecoder.decode(forKey: \"index\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.argumentLabel, forKey: \"argumentLabel\")\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.`inout`, forKey: \"`inout`\")\n            aCoder.encode(self.isVariadic, forKey: \"isVariadic\")\n            aCoder.encode(self.type, forKey: \"type\")\n            aCoder.encode(self.defaultValue, forKey: \"defaultValue\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.index, forKey: \"index\")\n        }\n// sourcery:end\n}\n\nextension Array where Element == MethodParameter {\n    public var asSource: String {\n        \"(\\(map { $0.asSource }.joined(separator: \", \")))\"\n    }\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/Method_Linux.swift",
    "content": "#if !canImport(ObjectiveC)\nimport Foundation\n\n/// :nodoc:\npublic typealias SourceryMethod = Method\n\n/// Describes method\npublic final class Method: NSObject, SourceryModel, Annotated, Documented, Definition, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"definedInType\":\n                return definedInType\n            case \"shortName\":\n                return shortName\n            case \"name\":\n                return name\n            case \"selectorName\":\n                return selectorName\n            case \"callName\":\n                return callName\n            case \"parameters\":\n                return parameters\n            case \"throws\":\n                return `throws`\n            case \"throwsTypeName\":\n                return throwsTypeName\n            case \"isInitializer\":\n                return isInitializer\n            case \"accessLevel\":\n                return accessLevel\n            case \"isStatic\":\n                return isStatic\n            case \"returnTypeName\":\n                return returnTypeName\n            case \"isAsync\":\n                return isAsync\n            case \"attributes\":\n                return attributes\n            case \"isOptionalReturnType\":\n                return isOptionalReturnType\n            case \"actualReturnTypeName\":\n                return actualReturnTypeName\n            case \"isThrowsTypeGeneric\":\n                return isThrowsTypeGeneric\n            case \"isDynamic\":\n                return isDynamic\n            case \"genericRequirements\":\n                return genericRequirements\n            default:\n                fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }\n    }\n\n    /// Full method name, including generic constraints, i.e. `foo<T>(bar: T)`\n    public let name: String\n\n    /// Method name including arguments names, i.e. `foo(bar:)`\n    public var selectorName: String\n\n    // sourcery: skipEquality, skipDescription\n    /// Method name without arguments names and parentheses, i.e. `foo<T>`\n    public var shortName: String {\n        return name.range(of: \"(\").map({ String(name[..<$0.lowerBound]) }) ?? name\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Method name without arguments names, parentheses and generic types, i.e. `foo` (can be used to generate code for method call)\n    public var callName: String {\n        return shortName.range(of: \"<\").map({ String(shortName[..<$0.lowerBound]) }) ?? shortName\n    }\n\n    /// Method parameters\n    public var parameters: [MethodParameter]\n\n    /// Return value type name used in declaration, including generic constraints, i.e. `where T: Equatable`\n    public var returnTypeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Actual return value type name if declaration uses typealias, otherwise just a `returnTypeName`\n    public var actualReturnTypeName: TypeName {\n        return returnTypeName.actualTypeName ?? returnTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Return if the throwsType is generic\n    public var isThrowsTypeGeneric: Bool {\n        return genericParameters.contains { $0.name == throwsTypeName?.name }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Actual return value type, if known\n    public var returnType: Type?\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is optional\n    public var isOptionalReturnType: Bool {\n        return returnTypeName.isOptional || isFailableInitializer\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is implicitly unwrapped optional\n    public var isImplicitlyUnwrappedOptionalReturnType: Bool {\n        return returnTypeName.isImplicitlyUnwrappedOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Return value type name without attributes and optional type information\n    public var unwrappedReturnTypeName: String {\n        return returnTypeName.unwrappedTypeName\n    }\n\n    /// Whether method is async method\n    public let isAsync: Bool\n\n    /// Whether method is distributed\n    public var isDistributed: Bool {\n        modifiers.contains(where: { $0.name == \"distributed\" })\n    }\n\n    /// Whether method throws\n    public let `throws`: Bool\n\n    /// Type of thrown error if specified\n    public let throwsTypeName: TypeName?\n\n    /// Whether method rethrows\n    public let `rethrows`: Bool\n\n    /// Method access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let accessLevel: String\n\n    /// Whether method is a static method\n    public let isStatic: Bool\n\n    /// Whether method is a class method\n    public let isClass: Bool\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is an initializer\n    public var isInitializer: Bool {\n        return selectorName.hasPrefix(\"init(\") || selectorName == \"init\"\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is an deinitializer\n    public var isDeinitializer: Bool {\n        return selectorName == \"deinit\"\n    }\n\n    /// Whether method is a failable initializer\n    public let isFailableInitializer: Bool\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is a convenience initializer\n    public var isConvenienceInitializer: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.convenience.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is required\n    public var isRequired: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.required.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is final\n    public var isFinal: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.final.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is mutating\n    public var isMutating: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.mutating.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is generic\n    public var isGeneric: Bool {\n        shortName.hasSuffix(\">\")\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is optional (in an Objective-C protocol)\n    public var isOptional: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.optional.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is nonisolated (this modifier only applies to actor methods)\n    public var isNonisolated: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.nonisolated.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is dynamic\n    public var isDynamic: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.dynamic.rawValue }\n    }\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public let annotations: Annotations\n\n    public let documentation: Documentation\n\n    /// Reference to type name where the method is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc\n    public let definedInTypeName: TypeName?\n\n    // sourcery: skipEquality, skipDescription\n    /// Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a `definedInTypeName`\n    public var actualDefinedInTypeName: TypeName? {\n        return definedInTypeName?.actualTypeName ?? definedInTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Reference to actual type where the object is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc or type is unknown\n    public var definedInType: Type?\n\n    /// Method attributes, i.e. `@discardableResult`\n    public let attributes: AttributeList\n\n    /// Method modifiers, i.e. `private`\n    public let modifiers: [SourceryModifier]\n\n    // Underlying parser data, never to be used by anything else\n    // sourcery: skipEquality, skipDescription, skipCoding, skipJSExport\n    /// :nodoc:\n    public var __parserData: Any?\n\n    /// list of generic requirements\n    public var genericRequirements: [GenericRequirement]\n\n    /// List of generic parameters\n    ///\n    /// - Example:\n    ///\n    ///   ```swift\n    ///   func method<GenericParameter>(foo: GenericParameter)\n    ///                    ^ ~ a generic parameter\n    ///   ```\n    public var genericParameters: [GenericParameter]\n\n    /// :nodoc:\n    public init(name: String,\n                selectorName: String? = nil,\n                parameters: [MethodParameter] = [],\n                returnTypeName: TypeName = TypeName(name: \"Void\"),\n                isAsync: Bool = false,\n                throws: Bool = false,\n                throwsTypeName: TypeName? = nil,\n                rethrows: Bool = false,\n                accessLevel: AccessLevel = .internal,\n                isStatic: Bool = false,\n                isClass: Bool = false,\n                isFailableInitializer: Bool = false,\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                definedInTypeName: TypeName? = nil,\n                genericRequirements: [GenericRequirement] = [],\n                genericParameters: [GenericParameter] = []) {\n        self.name = name\n        self.selectorName = selectorName ?? name\n        self.parameters = parameters\n        self.returnTypeName = returnTypeName\n        self.isAsync = isAsync\n        self.throws = `throws`\n        self.throwsTypeName = throwsTypeName\n        self.rethrows = `rethrows`\n        self.accessLevel = accessLevel.rawValue\n        self.isStatic = isStatic\n        self.isClass = isClass\n        self.isFailableInitializer = isFailableInitializer\n        self.attributes = attributes\n        self.modifiers = modifiers\n        self.annotations = annotations\n        self.documentation = documentation\n        self.definedInTypeName = definedInTypeName\n        self.genericRequirements = genericRequirements\n        self.genericParameters = genericParameters\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"selectorName = \\(String(describing: self.selectorName)), \")\n        string.append(\"parameters = \\(String(describing: self.parameters)), \")\n        string.append(\"returnTypeName = \\(String(describing: self.returnTypeName)), \")\n        string.append(\"isAsync = \\(String(describing: self.isAsync)), \")\n        string.append(\"`throws` = \\(String(describing: self.`throws`)), \")\n        string.append(\"throwsTypeName = \\(String(describing: self.throwsTypeName)), \")\n        string.append(\"`rethrows` = \\(String(describing: self.`rethrows`)), \")\n        string.append(\"accessLevel = \\(String(describing: self.accessLevel)), \")\n        string.append(\"isStatic = \\(String(describing: self.isStatic)), \")\n        string.append(\"isClass = \\(String(describing: self.isClass)), \")\n        string.append(\"isFailableInitializer = \\(String(describing: self.isFailableInitializer)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\(String(describing: self.documentation)), \")\n        string.append(\"definedInTypeName = \\(String(describing: self.definedInTypeName)), \")\n        string.append(\"attributes = \\(String(describing: self.attributes)), \")\n        string.append(\"modifiers = \\(String(describing: self.modifiers)), \")\n        string.append(\"genericRequirements = \\(String(describing: self.genericRequirements)), \")\n        string.append(\"genericParameters = \\(String(describing: self.genericParameters))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Method else {\n            results.append(\"Incorrect type <expected: Method, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"selectorName\").trackDifference(actual: self.selectorName, expected: castObject.selectorName))\n        results.append(contentsOf: DiffableResult(identifier: \"parameters\").trackDifference(actual: self.parameters, expected: castObject.parameters))\n        results.append(contentsOf: DiffableResult(identifier: \"returnTypeName\").trackDifference(actual: self.returnTypeName, expected: castObject.returnTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"isAsync\").trackDifference(actual: self.isAsync, expected: castObject.isAsync))\n        results.append(contentsOf: DiffableResult(identifier: \"`throws`\").trackDifference(actual: self.`throws`, expected: castObject.`throws`))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsTypeName\").trackDifference(actual: self.throwsTypeName, expected: castObject.throwsTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"`rethrows`\").trackDifference(actual: self.`rethrows`, expected: castObject.`rethrows`))\n        results.append(contentsOf: DiffableResult(identifier: \"accessLevel\").trackDifference(actual: self.accessLevel, expected: castObject.accessLevel))\n        results.append(contentsOf: DiffableResult(identifier: \"isStatic\").trackDifference(actual: self.isStatic, expected: castObject.isStatic))\n        results.append(contentsOf: DiffableResult(identifier: \"isClass\").trackDifference(actual: self.isClass, expected: castObject.isClass))\n        results.append(contentsOf: DiffableResult(identifier: \"isFailableInitializer\").trackDifference(actual: self.isFailableInitializer, expected: castObject.isFailableInitializer))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"definedInTypeName\").trackDifference(actual: self.definedInTypeName, expected: castObject.definedInTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        results.append(contentsOf: DiffableResult(identifier: \"genericRequirements\").trackDifference(actual: self.genericRequirements, expected: castObject.genericRequirements))\n        results.append(contentsOf: DiffableResult(identifier: \"genericParameters\").trackDifference(actual: self.genericParameters, expected: castObject.genericParameters))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.selectorName)\n        hasher.combine(self.parameters)\n        hasher.combine(self.returnTypeName)\n        hasher.combine(self.isAsync)\n        hasher.combine(self.`throws`)\n        hasher.combine(self.throwsTypeName)\n        hasher.combine(self.`rethrows`)\n        hasher.combine(self.accessLevel)\n        hasher.combine(self.isStatic)\n        hasher.combine(self.isClass)\n        hasher.combine(self.isFailableInitializer)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.definedInTypeName)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        hasher.combine(self.genericRequirements)\n        hasher.combine(self.genericParameters)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Method else { return false }\n        if self.name != rhs.name { return false }\n        if self.selectorName != rhs.selectorName { return false }\n        if self.parameters != rhs.parameters { return false }\n        if self.returnTypeName != rhs.returnTypeName { return false }\n        if self.isAsync != rhs.isAsync { return false }\n        if self.isDistributed != rhs.isDistributed { return false }\n        if self.`throws` != rhs.`throws` { return false }\n        if self.throwsTypeName != rhs.throwsTypeName { return false }\n        if self.`rethrows` != rhs.`rethrows` { return false }\n        if self.accessLevel != rhs.accessLevel { return false }\n        if self.isStatic != rhs.isStatic { return false }\n        if self.isClass != rhs.isClass { return false }\n        if self.isFailableInitializer != rhs.isFailableInitializer { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.definedInTypeName != rhs.definedInTypeName { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        if self.genericRequirements != rhs.genericRequirements { return false }\n        if self.genericParameters != rhs.genericParameters { return false }\n        return true\n    }\n\n// sourcery:inline:Method.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let selectorName: String = aDecoder.decode(forKey: \"selectorName\") else { \n                withVaList([\"selectorName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.selectorName = selectorName\n            guard let parameters: [MethodParameter] = aDecoder.decode(forKey: \"parameters\") else { \n                withVaList([\"parameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.parameters = parameters\n            guard let returnTypeName: TypeName = aDecoder.decode(forKey: \"returnTypeName\") else { \n                withVaList([\"returnTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.returnTypeName = returnTypeName\n            self.returnType = aDecoder.decode(forKey: \"returnType\")\n            self.isAsync = aDecoder.decode(forKey: \"isAsync\")\n            self.`throws` = aDecoder.decode(forKey: \"`throws`\")\n            self.throwsTypeName = aDecoder.decode(forKey: \"throwsTypeName\")\n            self.`rethrows` = aDecoder.decode(forKey: \"`rethrows`\")\n            guard let accessLevel: String = aDecoder.decode(forKey: \"accessLevel\") else { \n                withVaList([\"accessLevel\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.accessLevel = accessLevel\n            self.isStatic = aDecoder.decode(forKey: \"isStatic\")\n            self.isClass = aDecoder.decode(forKey: \"isClass\")\n            self.isFailableInitializer = aDecoder.decode(forKey: \"isFailableInitializer\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            self.definedInTypeName = aDecoder.decode(forKey: \"definedInTypeName\")\n            self.definedInType = aDecoder.decode(forKey: \"definedInType\")\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            guard let genericRequirements: [GenericRequirement] = aDecoder.decode(forKey: \"genericRequirements\") else { \n                withVaList([\"genericRequirements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericRequirements = genericRequirements\n            guard let genericParameters: [GenericParameter] = aDecoder.decode(forKey: \"genericParameters\") else { \n                withVaList([\"genericParameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericParameters = genericParameters\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.selectorName, forKey: \"selectorName\")\n            aCoder.encode(self.parameters, forKey: \"parameters\")\n            aCoder.encode(self.returnTypeName, forKey: \"returnTypeName\")\n            aCoder.encode(self.returnType, forKey: \"returnType\")\n            aCoder.encode(self.isAsync, forKey: \"isAsync\")\n            aCoder.encode(self.`throws`, forKey: \"`throws`\")\n            aCoder.encode(self.throwsTypeName, forKey: \"throwsTypeName\")\n            aCoder.encode(self.`rethrows`, forKey: \"`rethrows`\")\n            aCoder.encode(self.accessLevel, forKey: \"accessLevel\")\n            aCoder.encode(self.isStatic, forKey: \"isStatic\")\n            aCoder.encode(self.isClass, forKey: \"isClass\")\n            aCoder.encode(self.isFailableInitializer, forKey: \"isFailableInitializer\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.definedInTypeName, forKey: \"definedInTypeName\")\n            aCoder.encode(self.definedInType, forKey: \"definedInType\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.genericRequirements, forKey: \"genericRequirements\")\n            aCoder.encode(self.genericParameters, forKey: \"genericParameters\")\n        }\n// sourcery:end\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/Protocol_Linux.swift",
    "content": "//\n//  Protocol.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zablocki on 09/12/2016.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n#if !canImport(ObjectiveC)\n\n/// :nodoc:\npublic typealias SourceryProtocol = Protocol\n\n/// Describes Swift protocol\npublic final class Protocol: Type {\n    public override subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"associatedTypes\":\n                return associatedTypes\n            default:\n                return super[dynamicMember: member]\n        }\n    }\n\n    // sourcery: skipJSExport\n    public class var kind: String { return \"protocol\" }\n\n    /// Returns \"protocol\"\n    public override var kind: String { Self.kind }\n\n    /// list of all declared associated types with their names as keys\n    public var associatedTypes: [String: AssociatedType] {\n        didSet {\n            isGeneric = !associatedTypes.isEmpty || !genericRequirements.isEmpty\n        }\n    }\n\n    // sourcery: skipCoding\n    /// list of generic requirements\n    public override var genericRequirements: [GenericRequirement] {\n        didSet {\n            isGeneric = !associatedTypes.isEmpty || !genericRequirements.isEmpty\n        }\n    }\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                parent: Type? = nil,\n                accessLevel: AccessLevel = .internal,\n                isExtension: Bool = false,\n                variables: [Variable] = [],\n                methods: [Method] = [],\n                subscripts: [Subscript] = [],\n                inheritedTypes: [String] = [],\n                containedTypes: [Type] = [],\n                typealiases: [Typealias] = [],\n                associatedTypes: [String: AssociatedType] = [:],\n                genericRequirements: [GenericRequirement] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                implements: [String: Type] = [:],\n                kind: String = Protocol.kind) {\n        self.associatedTypes = associatedTypes\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            genericRequirements: genericRequirements,\n            attributes: attributes,\n            modifiers: modifiers,\n            annotations: annotations,\n            documentation: documentation,\n            isGeneric: !associatedTypes.isEmpty || !genericRequirements.isEmpty,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string.append(\", \")\n        string.append(\"kind = \\(String(describing: self.kind)), \")\n        string.append(\"associatedTypes = \\(String(describing: self.associatedTypes)), \")\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Protocol else {\n            results.append(\"Incorrect type <expected: Protocol, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"associatedTypes\").trackDifference(actual: self.associatedTypes, expected: castObject.associatedTypes))\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.associatedTypes)\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Protocol else { return false }\n        if self.associatedTypes != rhs.associatedTypes { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Protocol.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let associatedTypes: [String: AssociatedType] = aDecoder.decode(forKey: \"associatedTypes\") else { \n                withVaList([\"associatedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.associatedTypes = associatedTypes\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n            aCoder.encode(self.associatedTypes, forKey: \"associatedTypes\")\n        }\n// sourcery:end\n}\n#endif"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/Subscript_Linux.swift",
    "content": "#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Describes subscript\npublic final class Subscript: NSObject, SourceryModel, Annotated, Documented, Definition, Diffable, SourceryDynamicMemberLookup {\n\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"parameters\":\n                return parameters\n            case \"returnTypeName\":\n                return returnTypeName\n            case \"actualReturnTypeName\":\n                return actualReturnTypeName\n            case \"returnType\":\n                return returnType\n            case \"isOptionalReturnType\":\n                return isOptionalReturnType\n            case \"isImplicitlyUnwrappedOptionalReturnType\":\n                return isImplicitlyUnwrappedOptionalReturnType\n            case \"unwrappedReturnTypeName\":\n                return unwrappedReturnTypeName\n            case \"isFinal\":\n                return isFinal\n            case \"readAccess\":\n                return readAccess\n            case \"writeAccess\":\n                return writeAccess\n            case \"isAsync\":\n                return isAsync\n            case \"throws\":\n                return `throws`\n            case \"throwsTypeName\":\n                return throwsTypeName\n            case \"isMutable\":\n                return isMutable\n            case \"annotations\":\n                return annotations\n            case \"documentation\":\n                return documentation\n            case \"definedInTypeName\":\n                return definedInTypeName\n            case \"actualDefinedInTypeName\":\n                return actualDefinedInTypeName\n            case \"attributes\":\n                return attributes\n            case \"modifiers\":\n                return modifiers\n            case \"genericParameters\":\n                return genericParameters\n            case \"genericRequirements\":\n                return genericRequirements\n            case \"isGeneric\":\n                return isGeneric\n            default:\n                fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }\n    }\n\n    /// Method parameters\n    public var parameters: [MethodParameter]\n\n    /// Return value type name used in declaration, including generic constraints, i.e. `where T: Equatable`\n    public var returnTypeName: TypeName\n\n    /// Actual return value type name if declaration uses typealias, otherwise just a `returnTypeName`\n    public var actualReturnTypeName: TypeName {\n        return returnTypeName.actualTypeName ?? returnTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Actual return value type, if known\n    public var returnType: Type?\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is optional\n    public var isOptionalReturnType: Bool {\n        return returnTypeName.isOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is implicitly unwrapped optional\n    public var isImplicitlyUnwrappedOptionalReturnType: Bool {\n        return returnTypeName.isImplicitlyUnwrappedOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Return value type name without attributes and optional type information\n    public var unwrappedReturnTypeName: String {\n        return returnTypeName.unwrappedTypeName\n    }\n\n    /// Whether method is final\n    public var isFinal: Bool {\n        modifiers.contains { $0.name == \"final\" }\n    }\n\n    /// Variable read access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let readAccess: String\n\n    /// Variable write access, i.e. `internal`, `private`, `fileprivate`, `public`, `open`.\n    /// For immutable variables this value is empty string\n    public var writeAccess: String\n\n    /// Whether subscript is async\n    public let isAsync: Bool\n\n    /// Whether subscript throws\n    public let `throws`: Bool\n\n    /// Type of thrown error if specified\n    public let throwsTypeName: TypeName?\n\n    /// Whether variable is mutable or not\n    public var isMutable: Bool {\n        return writeAccess != AccessLevel.none.rawValue\n    }\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public let annotations: Annotations\n\n    public let documentation: Documentation\n\n    /// Reference to type name where the method is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc\n    public let definedInTypeName: TypeName?\n\n    /// Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a `definedInTypeName`\n    public var actualDefinedInTypeName: TypeName? {\n        return definedInTypeName?.actualTypeName ?? definedInTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Reference to actual type where the object is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc or type is unknown\n    public var definedInType: Type?\n\n    /// Method attributes, i.e. `@discardableResult`\n    public let attributes: AttributeList\n\n    /// Method modifiers, i.e. `private`\n    public let modifiers: [SourceryModifier]\n\n    /// list of generic parameters\n    public let genericParameters: [GenericParameter]\n\n    /// list of generic requirements\n    public let genericRequirements: [GenericRequirement]\n\n    /// Whether subscript is generic or not\n    public var isGeneric: Bool {\n        return genericParameters.isEmpty == false\n    }\n\n    // Underlying parser data, never to be used by anything else\n    // sourcery: skipEquality, skipDescription, skipCoding, skipJSExport\n    /// :nodoc:\n    public var __parserData: Any?\n\n    /// :nodoc:\n    public init(parameters: [MethodParameter] = [],\n                returnTypeName: TypeName,\n                accessLevel: (read: AccessLevel, write: AccessLevel) = (.internal, .internal),\n                isAsync: Bool = false,\n                `throws`: Bool = false,\n                throwsTypeName: TypeName? = nil,\n                genericParameters: [GenericParameter] = [],\n                genericRequirements: [GenericRequirement] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                definedInTypeName: TypeName? = nil) {\n\n        self.parameters = parameters\n        self.returnTypeName = returnTypeName\n        self.readAccess = accessLevel.read.rawValue\n        self.writeAccess = accessLevel.write.rawValue\n        self.isAsync = isAsync\n        self.throws = `throws`\n        self.throwsTypeName = throwsTypeName\n        self.genericParameters = genericParameters\n        self.genericRequirements = genericRequirements\n        self.attributes = attributes\n        self.modifiers = modifiers\n        self.annotations = annotations\n        self.documentation = documentation\n        self.definedInTypeName = definedInTypeName\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"parameters = \\(String(describing: self.parameters)), \")\n        string.append(\"returnTypeName = \\(String(describing: self.returnTypeName)), \")\n        string.append(\"actualReturnTypeName = \\(String(describing: self.actualReturnTypeName)), \")\n        string.append(\"isFinal = \\(String(describing: self.isFinal)), \")\n        string.append(\"readAccess = \\(String(describing: self.readAccess)), \")\n        string.append(\"writeAccess = \\(String(describing: self.writeAccess)), \")\n        string.append(\"isAsync = \\(String(describing: self.isAsync)), \")\n        string.append(\"`throws` = \\(String(describing: self.throws)), \")\n        string.append(\"throwsTypeName = \\(String(describing: self.throwsTypeName)), \")\n        string.append(\"isMutable = \\(String(describing: self.isMutable)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\(String(describing: self.documentation)), \")\n        string.append(\"definedInTypeName = \\(String(describing: self.definedInTypeName)), \")\n        string.append(\"actualDefinedInTypeName = \\(String(describing: self.actualDefinedInTypeName)), \")\n        string.append(\"genericParameters = \\(String(describing: self.genericParameters)), \")\n        string.append(\"genericRequirements = \\(String(describing: self.genericRequirements)), \")\n        string.append(\"isGeneric = \\(String(describing: self.isGeneric)), \")\n        string.append(\"attributes = \\(String(describing: self.attributes)), \")\n        string.append(\"modifiers = \\(String(describing: self.modifiers))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Subscript else {\n            results.append(\"Incorrect type <expected: Subscript, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"parameters\").trackDifference(actual: self.parameters, expected: castObject.parameters))\n        results.append(contentsOf: DiffableResult(identifier: \"returnTypeName\").trackDifference(actual: self.returnTypeName, expected: castObject.returnTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"readAccess\").trackDifference(actual: self.readAccess, expected: castObject.readAccess))\n        results.append(contentsOf: DiffableResult(identifier: \"writeAccess\").trackDifference(actual: self.writeAccess, expected: castObject.writeAccess))\n        results.append(contentsOf: DiffableResult(identifier: \"isAsync\").trackDifference(actual: self.isAsync, expected: castObject.isAsync))\n        results.append(contentsOf: DiffableResult(identifier: \"`throws`\").trackDifference(actual: self.throws, expected: castObject.throws))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsTypeName\").trackDifference(actual: self.throwsTypeName, expected: castObject.throwsTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"definedInTypeName\").trackDifference(actual: self.definedInTypeName, expected: castObject.definedInTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"genericParameters\").trackDifference(actual: self.genericParameters, expected: castObject.genericParameters))\n        results.append(contentsOf: DiffableResult(identifier: \"genericRequirements\").trackDifference(actual: self.genericRequirements, expected: castObject.genericRequirements))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.parameters)\n        hasher.combine(self.returnTypeName)\n        hasher.combine(self.readAccess)\n        hasher.combine(self.writeAccess)\n        hasher.combine(self.isAsync)\n        hasher.combine(self.throws)\n        hasher.combine(self.throwsTypeName)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.definedInTypeName)\n        hasher.combine(self.genericParameters)\n        hasher.combine(self.genericRequirements)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Subscript else { return false }\n        if self.parameters != rhs.parameters { return false }\n        if self.returnTypeName != rhs.returnTypeName { return false }\n        if self.readAccess != rhs.readAccess { return false }\n        if self.writeAccess != rhs.writeAccess { return false }\n        if self.isAsync != rhs.isAsync { return false }\n        if self.throws != rhs.throws { return false }\n        if self.throwsTypeName != rhs.throwsTypeName { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.definedInTypeName != rhs.definedInTypeName { return false }\n        if self.genericParameters != rhs.genericParameters { return false }\n        if self.genericRequirements != rhs.genericRequirements { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        return true\n    }\n\n// sourcery:inline:Subscript.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let parameters: [MethodParameter] = aDecoder.decode(forKey: \"parameters\") else { \n                withVaList([\"parameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.parameters = parameters\n            guard let returnTypeName: TypeName = aDecoder.decode(forKey: \"returnTypeName\") else { \n                withVaList([\"returnTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.returnTypeName = returnTypeName\n            self.returnType = aDecoder.decode(forKey: \"returnType\")\n            guard let readAccess: String = aDecoder.decode(forKey: \"readAccess\") else { \n                withVaList([\"readAccess\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.readAccess = readAccess\n            guard let writeAccess: String = aDecoder.decode(forKey: \"writeAccess\") else { \n                withVaList([\"writeAccess\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.writeAccess = writeAccess\n            self.isAsync = aDecoder.decode(forKey: \"isAsync\")\n            self.`throws` = aDecoder.decode(forKey: \"`throws`\")\n            self.throwsTypeName = aDecoder.decode(forKey: \"throwsTypeName\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            self.definedInTypeName = aDecoder.decode(forKey: \"definedInTypeName\")\n            self.definedInType = aDecoder.decode(forKey: \"definedInType\")\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            guard let genericParameters: [GenericParameter] = aDecoder.decode(forKey: \"genericParameters\") else { \n                withVaList([\"genericParameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericParameters = genericParameters\n            guard let genericRequirements: [GenericRequirement] = aDecoder.decode(forKey: \"genericRequirements\") else { \n                withVaList([\"genericRequirements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericRequirements = genericRequirements\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.parameters, forKey: \"parameters\")\n            aCoder.encode(self.returnTypeName, forKey: \"returnTypeName\")\n            aCoder.encode(self.returnType, forKey: \"returnType\")\n            aCoder.encode(self.readAccess, forKey: \"readAccess\")\n            aCoder.encode(self.writeAccess, forKey: \"writeAccess\")\n            aCoder.encode(self.isAsync, forKey: \"isAsync\")\n            aCoder.encode(self.`throws`, forKey: \"`throws`\")\n            aCoder.encode(self.throwsTypeName, forKey: \"throwsTypeName\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.definedInTypeName, forKey: \"definedInTypeName\")\n            aCoder.encode(self.definedInType, forKey: \"definedInType\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.genericParameters, forKey: \"genericParameters\")\n            aCoder.encode(self.genericRequirements, forKey: \"genericRequirements\")\n        }\n// sourcery:end\n\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/TypeName/Closure_Linux.swift",
    "content": "#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Describes closure type\npublic final class ClosureType: NSObject, SourceryModel, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"name\":\n                return name\n            case \"parameters\":\n                return parameters\n            case \"returnTypeName\":\n                return returnTypeName\n            case \"actualReturnTypeName\":\n                return actualReturnTypeName\n            case \"returnType\":\n                return returnType\n            case \"isOptionalReturnType\":\n                return isOptionalReturnType\n            case \"isImplicitlyUnwrappedOptionalReturnType\":\n                return isImplicitlyUnwrappedOptionalReturnType\n            case \"unwrappedReturnTypeName\":\n                return unwrappedReturnTypeName\n            case \"isAsync\":\n                return isAsync\n            case \"asyncKeyword\":\n                return asyncKeyword\n            case \"throws\":\n                return `throws`\n            case \"throwsOrRethrowsKeyword\":\n                return throwsOrRethrowsKeyword\n            case \"throwsTypeName\":\n                return throwsTypeName\n            default:\n                fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }\n    }\n    /// Type name used in declaration with stripped whitespaces and new lines\n    public let name: String\n\n    /// List of closure parameters\n    public let parameters: [ClosureParameter]\n\n    /// Return value type name\n    public let returnTypeName: TypeName\n\n    /// Actual return value type name if declaration uses typealias, otherwise just a `returnTypeName`\n    public var actualReturnTypeName: TypeName {\n        return returnTypeName.actualTypeName ?? returnTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Actual return value type, if known\n    public var returnType: Type?\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is optional\n    public var isOptionalReturnType: Bool {\n        return returnTypeName.isOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is implicitly unwrapped optional\n    public var isImplicitlyUnwrappedOptionalReturnType: Bool {\n        return returnTypeName.isImplicitlyUnwrappedOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Return value type name without attributes and optional type information\n    public var unwrappedReturnTypeName: String {\n        return returnTypeName.unwrappedTypeName\n    }\n    \n    /// Whether method is async method\n    public let isAsync: Bool\n\n    /// async keyword\n    public let asyncKeyword: String?\n\n    /// Whether closure throws\n    public let `throws`: Bool\n\n    /// throws or rethrows keyword\n    public let throwsOrRethrowsKeyword: String?\n\n    /// Type of thrown error if specified\n    public let throwsTypeName: TypeName?\n\n    /// :nodoc:\n    public init(name: String, parameters: [ClosureParameter], returnTypeName: TypeName, returnType: Type? = nil, asyncKeyword: String? = nil, throwsOrRethrowsKeyword: String? = nil, throwsTypeName: TypeName? = nil) {\n        self.name = name\n        self.parameters = parameters\n        self.returnTypeName = returnTypeName\n        self.returnType = returnType\n        self.asyncKeyword = asyncKeyword\n        self.isAsync = asyncKeyword != nil\n        self.throwsOrRethrowsKeyword = throwsOrRethrowsKeyword\n        self.`throws` = throwsOrRethrowsKeyword != nil && !(throwsTypeName?.isNever ?? false)\n        self.throwsTypeName = throwsTypeName\n    }\n\n    public var asSource: String {\n        \"\\(parameters.asSource)\\(asyncKeyword != nil ? \" \\(asyncKeyword!)\" : \"\")\\(throwsOrRethrowsKeyword != nil ? \" \\(throwsOrRethrowsKeyword!)\\(throwsTypeName != nil ? \"(\\(throwsTypeName!.asSource))\" : \"\")\" : \"\") -> \\(returnTypeName.asSource)\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"parameters = \\(String(describing: self.parameters)), \")\n        string.append(\"returnTypeName = \\(String(describing: self.returnTypeName)), \")\n        string.append(\"actualReturnTypeName = \\(String(describing: self.actualReturnTypeName)), \")\n        string.append(\"isAsync = \\(String(describing: self.isAsync)), \")\n        string.append(\"asyncKeyword = \\(String(describing: self.asyncKeyword)), \")\n        string.append(\"`throws` = \\(String(describing: self.`throws`)), \")\n        string.append(\"throwsOrRethrowsKeyword = \\(String(describing: self.throwsOrRethrowsKeyword)), \")\n        string.append(\"throwsTypeName = \\(String(describing: self.throwsTypeName)), \")\n        string.append(\"asSource = \\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? ClosureType else {\n            results.append(\"Incorrect type <expected: ClosureType, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"parameters\").trackDifference(actual: self.parameters, expected: castObject.parameters))\n        results.append(contentsOf: DiffableResult(identifier: \"returnTypeName\").trackDifference(actual: self.returnTypeName, expected: castObject.returnTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"isAsync\").trackDifference(actual: self.isAsync, expected: castObject.isAsync))\n        results.append(contentsOf: DiffableResult(identifier: \"asyncKeyword\").trackDifference(actual: self.asyncKeyword, expected: castObject.asyncKeyword))\n        results.append(contentsOf: DiffableResult(identifier: \"`throws`\").trackDifference(actual: self.`throws`, expected: castObject.`throws`))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsOrRethrowsKeyword\").trackDifference(actual: self.throwsOrRethrowsKeyword, expected: castObject.throwsOrRethrowsKeyword))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsTypeName\").trackDifference(actual: self.throwsTypeName, expected: castObject.throwsTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.parameters)\n        hasher.combine(self.returnTypeName)\n        hasher.combine(self.isAsync)\n        hasher.combine(self.asyncKeyword)\n        hasher.combine(self.`throws`)\n        hasher.combine(self.throwsOrRethrowsKeyword)\n        hasher.combine(self.throwsTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? ClosureType else { return false }\n        if self.name != rhs.name { return false }\n        if self.parameters != rhs.parameters { return false }\n        if self.returnTypeName != rhs.returnTypeName { return false }\n        if self.isAsync != rhs.isAsync { return false }\n        if self.asyncKeyword != rhs.asyncKeyword { return false }\n        if self.`throws` != rhs.`throws` { return false }\n        if self.throwsOrRethrowsKeyword != rhs.throwsOrRethrowsKeyword { return false }\n        if self.throwsTypeName != rhs.throwsTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:ClosureType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let parameters: [ClosureParameter] = aDecoder.decode(forKey: \"parameters\") else { \n                withVaList([\"parameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.parameters = parameters\n            guard let returnTypeName: TypeName = aDecoder.decode(forKey: \"returnTypeName\") else { \n                withVaList([\"returnTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.returnTypeName = returnTypeName\n            self.returnType = aDecoder.decode(forKey: \"returnType\")\n            self.isAsync = aDecoder.decode(forKey: \"isAsync\")\n            self.asyncKeyword = aDecoder.decode(forKey: \"asyncKeyword\")\n            self.`throws` = aDecoder.decode(forKey: \"`throws`\")\n            self.throwsOrRethrowsKeyword = aDecoder.decode(forKey: \"throwsOrRethrowsKeyword\")\n            self.throwsTypeName = aDecoder.decode(forKey: \"throwsTypeName\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.parameters, forKey: \"parameters\")\n            aCoder.encode(self.returnTypeName, forKey: \"returnTypeName\")\n            aCoder.encode(self.returnType, forKey: \"returnType\")\n            aCoder.encode(self.isAsync, forKey: \"isAsync\")\n            aCoder.encode(self.asyncKeyword, forKey: \"asyncKeyword\")\n            aCoder.encode(self.`throws`, forKey: \"`throws`\")\n            aCoder.encode(self.throwsOrRethrowsKeyword, forKey: \"throwsOrRethrowsKeyword\")\n            aCoder.encode(self.throwsTypeName, forKey: \"throwsTypeName\")\n        }\n// sourcery:end\n\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/TypeName/GenericTypeParameter_Linux.swift",
    "content": "#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Descibes Swift generic type parameter\npublic final class GenericTypeParameter: NSObject, SourceryModel, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"typeName\":\n                return typeName\n            case \"type\":\n                return type\n            default:\n                fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }\n    }\n\n    /// Generic parameter type name\n    public var typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Generic parameter type, if known\n    public var type: Type?\n\n    /// :nodoc:\n    public init(typeName: TypeName, type: Type? = nil) {\n        self.typeName = typeName\n        self.type = type\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"typeName = \\(String(describing: self.typeName))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? GenericTypeParameter else {\n            results.append(\"Incorrect type <expected: GenericTypeParameter, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.typeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? GenericTypeParameter else { return false }\n        if self.typeName != rhs.typeName { return false }\n        return true\n    }\n\n// sourcery:inline:GenericTypeParameter.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n        }\n\n// sourcery:end\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/TypeName/Tuple_Linux.swift",
    "content": "#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Describes tuple type\npublic final class TupleType: NSObject, SourceryModel, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"elements\":\n                return elements\n            default:\n                fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }\n    }\n\n    /// Type name used in declaration\n    public var name: String\n\n    /// Tuple elements\n    public var elements: [TupleElement]\n\n    /// :nodoc:\n    public init(name: String, elements: [TupleElement]) {\n        self.name = name\n        self.elements = elements\n    }\n\n    /// :nodoc:\n    public init(elements: [TupleElement]) {\n        self.name = elements.asSource\n        self.elements = elements\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"elements = \\(String(describing: self.elements))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? TupleType else {\n            results.append(\"Incorrect type <expected: TupleType, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"elements\").trackDifference(actual: self.elements, expected: castObject.elements))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.elements)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? TupleType else { return false }\n        if self.name != rhs.name { return false }\n        if self.elements != rhs.elements { return false }\n        return true\n    }\n\n// sourcery:inline:TupleType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let elements: [TupleElement] = aDecoder.decode(forKey: \"elements\") else { \n                withVaList([\"elements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.elements = elements\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.elements, forKey: \"elements\")\n        }\n// sourcery:end\n}\n\n/// Describes tuple type element\npublic final class TupleElement: NSObject, SourceryModel, Typed, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"name\":\n                return name\n            case \"typeName\":\n                return typeName\n            case \"type\":\n                return type\n            default:\n                fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }\n    }\n\n    /// Tuple element name\n    public let name: String?\n\n    /// Tuple element type name\n    public var typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Tuple element type, if known\n    public var type: Type?\n\n    /// :nodoc:\n    public init(name: String? = nil, typeName: TypeName, type: Type? = nil) {\n        self.name = name\n        self.typeName = typeName\n        self.type = type\n    }\n\n    public var asSource: String {\n        // swiftlint:disable:next force_unwrapping\n        \"\\(name != nil ? \"\\(name!): \" : \"\")\\(typeName.asSource)\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"typeName = \\(String(describing: self.typeName)), \")\n        string.append(\"asSource = \\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? TupleElement else {\n            results.append(\"Incorrect type <expected: TupleElement, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? TupleElement else { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        return true\n    }\n\n// sourcery:inline:TupleElement.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.name = aDecoder.decode(forKey: \"name\")\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n        }\n// sourcery:end\n}\n\nextension Array where Element == TupleElement {\n    public var asSource: String {\n        \"(\\(map { $0.asSource }.joined(separator: \", \")))\"\n    }\n\n    public var asTypeName: String {\n        \"(\\(map { $0.typeName.asSource }.joined(separator: \", \")))\"\n    }\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/TypeName/TypeName_Linux.swift",
    "content": "//\n// Created by Krzysztof Zabłocki on 25/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Describes name of the type used in typed declaration (variable, method parameter or return value etc.)\npublic final class TypeName: NSObject, SourceryModelWithoutDescription, LosslessStringConvertible, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"array\":\n                return array\n            case \"closure\":\n                return closure\n            case \"dictionary\":\n                return dictionary\n            case \"generic\":\n                return generic\n            case \"set\":\n                return set\n            case \"tuple\":\n                return tuple\n            case \"name\":\n                return name\n            case \"actualTypeName\":\n                return actualTypeName\n            case \"isOptional\":\n                return isOptional\n            case \"unwrappedTypeName\":\n                return unwrappedTypeName\n            case \"isProtocolComposition\":\n                return isProtocolComposition\n            case \"isVoid\":\n                return isVoid\n            case \"isArray\":\n                return isArray\n            case \"isClosure\":\n                return isClosure\n            case \"isDictionary\":\n                return isDictionary\n            case \"isGeneric\":\n                return isGeneric\n            case \"isSet\":\n                return isSet\n            default:\n                fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }\n    }\n\n    /// :nodoc:\n    public init(name: String,\n                actualTypeName: TypeName? = nil,\n                unwrappedTypeName: String? = nil,\n                attributes: AttributeList = [:],\n                isOptional: Bool = false,\n                isImplicitlyUnwrappedOptional: Bool = false,\n                tuple: TupleType? = nil,\n                array: ArrayType? = nil,\n                dictionary: DictionaryType? = nil,\n                closure: ClosureType? = nil,\n                set: SetType? = nil,\n                generic: GenericType? = nil,\n                isProtocolComposition: Bool = false) {\n\n        let optionalSuffix: String\n        // TODO: TBR\n        if !name.hasPrefix(\"Optional<\") && !name.contains(\" where \") {\n            if isOptional {\n                optionalSuffix = \"?\"\n            } else if isImplicitlyUnwrappedOptional {\n                optionalSuffix = \"!\"\n            } else {\n                optionalSuffix = \"\"\n            }\n        } else {\n            optionalSuffix = \"\"\n        }\n\n        self.name = name + optionalSuffix\n        self.actualTypeName = actualTypeName\n        self.unwrappedTypeName = unwrappedTypeName ?? name\n        self.tuple = tuple\n        self.array = array\n        self.dictionary = dictionary\n        self.closure = closure\n        self.generic = generic\n        self.isOptional = isOptional || isImplicitlyUnwrappedOptional\n        self.isImplicitlyUnwrappedOptional = isImplicitlyUnwrappedOptional\n        self.isProtocolComposition = isProtocolComposition\n        self.set = set\n        self.attributes = attributes\n        self.modifiers = []\n        super.init()\n    }\n\n    /// Type name used in declaration\n    public var name: String\n\n    /// The generics of this TypeName\n    public var generic: GenericType?\n\n    /// Whether this TypeName is generic\n    public var isGeneric: Bool {\n        actualTypeName?.generic != nil || generic != nil\n    }\n\n    /// Whether this TypeName is protocol composition\n    public var isProtocolComposition: Bool\n\n    // sourcery: skipEquality\n    /// Actual type name if given type name is a typealias\n    public var actualTypeName: TypeName?\n\n    /// Type name attributes, i.e. `@escaping`\n    public var attributes: AttributeList\n\n    /// Modifiers, i.e. `escaping`\n    public var modifiers: [SourceryModifier]\n\n    // sourcery: skipEquality\n    /// Whether type is optional\n    public let isOptional: Bool\n\n    // sourcery: skipEquality\n    /// Whether type is implicitly unwrapped optional\n    public let isImplicitlyUnwrappedOptional: Bool\n\n    // sourcery: skipEquality\n    /// Type name without attributes and optional type information\n    public var unwrappedTypeName: String\n\n    // sourcery: skipEquality\n    /// Whether type is void (`Void` or `()`)\n    public var isVoid: Bool {\n        return name == \"Void\" || name == \"()\" || unwrappedTypeName == \"Void\"\n    }\n\n    /// Whether type is a tuple\n    public var isTuple: Bool {\n        actualTypeName?.tuple != nil || tuple != nil\n    }\n\n    /// Tuple type data\n    public var tuple: TupleType?\n\n    /// Whether type is an array\n    public var isArray: Bool {\n        actualTypeName?.array != nil || array != nil\n    }\n\n    /// Array type data\n    public var array: ArrayType?\n\n    /// Whether type is a dictionary\n    public var isDictionary: Bool {\n        actualTypeName?.dictionary != nil || dictionary != nil\n    }\n\n    /// Dictionary type data\n    public var dictionary: DictionaryType?\n\n    /// Whether type is a closure\n    public var isClosure: Bool {\n        actualTypeName?.closure != nil || closure != nil\n    }\n\n    /// Closure type data\n    public var closure: ClosureType?\n\n    /// Whether type is a Set\n    public var isSet: Bool {\n        actualTypeName?.set != nil || set != nil\n    }\n\n    /// Set type data\n    public var set: SetType?\n\n    /// Whether type is `Never`\n    public var isNever: Bool {\n        return name == \"Never\"\n    }\n\n    /// Prints typename as it would appear on definition\n    public var asSource: String {\n        // TODO: TBR special treatment\n        let specialTreatment = isOptional && name.hasPrefix(\"Optional<\")\n\n        var description = (\n          attributes.flatMap({ $0.value }).map({ $0.asSource }).sorted() +\n          modifiers.map({ $0.asSource }) +\n          [specialTreatment ? name : unwrappedTypeName]\n        ).joined(separator: \" \")\n\n        if let _ = self.dictionary { // array and dictionary cases are covered by the unwrapped type name\n//            description.append(dictionary.asSource)\n        } else if let _ = self.array {\n//            description.append(array.asSource)\n        } else if let _ = self.generic {\n//            let arguments = generic.typeParameters\n//              .map({ $0.typeName.asSource })\n//              .joined(separator: \", \")\n//            description.append(\"<\\(arguments)>\")\n        }\n        if !specialTreatment {\n            if isImplicitlyUnwrappedOptional {\n                description.append(\"!\")\n            } else if isOptional {\n                description.append(\"?\")\n            }\n        }\n\n        return description\n    }\n\n    public override var description: String {\n       (\n          attributes.flatMap({ $0.value }).map({ $0.asSource }).sorted() +\n          modifiers.map({ $0.asSource }) +\n          [name]\n        ).joined(separator: \" \")\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? TypeName else {\n            results.append(\"Incorrect type <expected: TypeName, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"generic\").trackDifference(actual: self.generic, expected: castObject.generic))\n        results.append(contentsOf: DiffableResult(identifier: \"isProtocolComposition\").trackDifference(actual: self.isProtocolComposition, expected: castObject.isProtocolComposition))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        results.append(contentsOf: DiffableResult(identifier: \"tuple\").trackDifference(actual: self.tuple, expected: castObject.tuple))\n        results.append(contentsOf: DiffableResult(identifier: \"array\").trackDifference(actual: self.array, expected: castObject.array))\n        results.append(contentsOf: DiffableResult(identifier: \"dictionary\").trackDifference(actual: self.dictionary, expected: castObject.dictionary))\n        results.append(contentsOf: DiffableResult(identifier: \"closure\").trackDifference(actual: self.closure, expected: castObject.closure))\n        results.append(contentsOf: DiffableResult(identifier: \"set\").trackDifference(actual: self.set, expected: castObject.set))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.generic)\n        hasher.combine(self.isProtocolComposition)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        hasher.combine(self.tuple)\n        hasher.combine(self.array)\n        hasher.combine(self.dictionary)\n        hasher.combine(self.closure)\n        hasher.combine(self.set)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? TypeName else { return false }\n        if self.name != rhs.name { return false }\n        if self.generic != rhs.generic { return false }\n        if self.isProtocolComposition != rhs.isProtocolComposition { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        if self.tuple != rhs.tuple { return false }\n        if self.array != rhs.array { return false }\n        if self.dictionary != rhs.dictionary { return false }\n        if self.closure != rhs.closure { return false }\n        if self.set != rhs.set { return false }\n        return true\n    }\n\n// sourcery:inline:TypeName.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            self.generic = aDecoder.decode(forKey: \"generic\")\n            self.isProtocolComposition = aDecoder.decode(forKey: \"isProtocolComposition\")\n            self.actualTypeName = aDecoder.decode(forKey: \"actualTypeName\")\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            self.isOptional = aDecoder.decode(forKey: \"isOptional\")\n            self.isImplicitlyUnwrappedOptional = aDecoder.decode(forKey: \"isImplicitlyUnwrappedOptional\")\n            guard let unwrappedTypeName: String = aDecoder.decode(forKey: \"unwrappedTypeName\") else { \n                withVaList([\"unwrappedTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.unwrappedTypeName = unwrappedTypeName\n            self.tuple = aDecoder.decode(forKey: \"tuple\")\n            self.array = aDecoder.decode(forKey: \"array\")\n            self.dictionary = aDecoder.decode(forKey: \"dictionary\")\n            self.closure = aDecoder.decode(forKey: \"closure\")\n            self.set = aDecoder.decode(forKey: \"set\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.generic, forKey: \"generic\")\n            aCoder.encode(self.isProtocolComposition, forKey: \"isProtocolComposition\")\n            aCoder.encode(self.actualTypeName, forKey: \"actualTypeName\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.isOptional, forKey: \"isOptional\")\n            aCoder.encode(self.isImplicitlyUnwrappedOptional, forKey: \"isImplicitlyUnwrappedOptional\")\n            aCoder.encode(self.unwrappedTypeName, forKey: \"unwrappedTypeName\")\n            aCoder.encode(self.tuple, forKey: \"tuple\")\n            aCoder.encode(self.array, forKey: \"array\")\n            aCoder.encode(self.dictionary, forKey: \"dictionary\")\n            aCoder.encode(self.closure, forKey: \"closure\")\n            aCoder.encode(self.set, forKey: \"set\")\n        }\n// sourcery:end\n\n    // sourcery: skipEquality, skipDescription\n    /// :nodoc:\n    public override var debugDescription: String {\n        return name\n    }\n\n    public convenience init(_ description: String) {\n        self.init(name: description, actualTypeName: nil)\n    }\n}\n\nextension TypeName {\n    public static func unknown(description: String?, attributes: AttributeList = [:]) -> TypeName {\n        if let description = description {\n            Log.astWarning(\"Unknown type, please add type attribution to \\(description)\")\n        } else {\n            Log.astWarning(\"Unknown type, please add type attribution\")\n        }\n        return TypeName(name: \"UnknownTypeSoAddTypeAttributionToVariable\", attributes: attributes)\n    }\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/Type_Linux.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 11/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// :nodoc:\npublic typealias AttributeList = [String: [Attribute]]\n\n/// Defines Swift type\npublic class Type: NSObject, SourceryModel, Annotated, Documented, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"implements\":\n                return implements\n            case \"name\":\n                return name\n            case \"kind\":\n                return kind\n            case \"based\":\n                return based\n            case \"supertype\":\n                return supertype\n            case \"accessLevel\":\n                return accessLevel\n            case \"storedVariables\":\n                return storedVariables\n            case \"variables\":\n                return variables\n            case \"allVariables\":\n                return allVariables\n            case \"allMethods\":\n                return allMethods\n            case \"annotations\":\n                return annotations\n            case \"methods\":\n                return methods\n            case \"containedType\":\n                return containedType\n            case \"computedVariables\":\n                return computedVariables\n            case \"inherits\":\n                return inherits\n            case \"inheritedTypes\":\n                return inheritedTypes\n            case \"subscripts\":\n                return subscripts\n            case \"rawSubscripts\":\n                return rawSubscripts\n            case \"allSubscripts\":\n                return allSubscripts\n            case \"genericRequirements\":\n                return genericRequirements\n            default:\n                fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }   \n    }\n\n    /// :nodoc:\n    public var module: String?\n\n    /// Imports that existed in the file that contained this type declaration\n    public var imports: [Import] = []\n\n    // sourcery: skipEquality\n    /// Imports existed in all files containing this type and all its super classes/protocols\n    public var allImports: [Import] {\n        return self.unique({ $0.gatherAllImports() }, filter: { $0 == $1 })\n    }\n\n    private func gatherAllImports() -> [Import] {\n        var allImports: [Import] = Array(self.imports)\n\n        self.basedTypes.values.forEach { (basedType) in\n            allImports.append(contentsOf: basedType.imports)\n        }\n        return allImports\n    }\n\n    // All local typealiases\n    /// :nodoc:\n    public var typealiases: [String: Typealias] {\n        didSet {\n            typealiases.values.forEach { $0.parent = self }\n        }\n    }\n\n    // sourcery: skipJSExport\n    /// Whether declaration is an extension of some type\n    public var isExtension: Bool\n\n    // sourcery: forceEquality\n    /// Kind of type declaration, i.e. `enum`, `struct`, `class`, `protocol` or `extension`\n    public var kind: String { isExtension ? \"extension\" : _kind }\n\n    // sourcery: skipJSExport\n    /// Kind of a backing store for `self.kind`\n    private var _kind: String\n\n    /// Type access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let accessLevel: String\n\n    /// Type name in global scope. For inner types includes the name of its containing type, i.e. `Type.Inner`\n    public var name: String {\n        guard let parentName = parent?.name else { return localName }\n        return \"\\(parentName).\\(localName)\"\n    }\n\n    // sourcery: skipCoding\n    /// Whether the type has been resolved as unknown extension\n    public var isUnknownExtension: Bool = false\n\n    // sourcery: skipDescription\n    /// Global type name including module name, unless it's an extension of unknown type\n    public var globalName: String {\n        guard let module = module, !isUnknownExtension else { return name }\n        return \"\\(module).\\(name)\"\n    }\n\n    /// Whether type is generic\n    public var isGeneric: Bool\n\n    /// Type name in its own scope.\n    public var localName: String\n\n    // sourcery: skipEquality, skipDescription\n    /// Variables defined in this type only, inluding variables defined in its extensions,\n    /// but not including variables inherited from superclasses (for classes only) and protocols\n    public var variables: [Variable] {\n        unique({ $0.rawVariables }, filter: Self.uniqueVariableFilter)\n    }\n\n    /// Unfiltered (can contain duplications from extensions) variables defined in this type only, inluding variables defined in its extensions,\n    /// but not including variables inherited from superclasses (for classes only) and protocols\n    public var rawVariables: [Variable]\n\n    // sourcery: skipEquality, skipDescription\n    /// All variables defined for this type, including variables defined in extensions,\n    /// in superclasses (for classes only) and protocols\n    public var allVariables: [Variable] {\n        return flattenAll({\n            return $0.variables\n        },\n        isExtension: { $0.definedInType?.isExtension == true },\n        filter: { all, extracted in\n            !all.contains(where: { Self.uniqueVariableFilter($0, rhs: extracted) })\n        })\n    }\n\n    private static func uniqueVariableFilter(_ lhs: Variable, rhs: Variable) -> Bool {\n        return lhs.name == rhs.name && lhs.isStatic == rhs.isStatic && lhs.typeName == rhs.typeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Methods defined in this type only, inluding methods defined in its extensions,\n    /// but not including methods inherited from superclasses (for classes only) and protocols\n    public var methods: [Method] {\n        unique({ $0.rawMethods }, filter: Self.uniqueMethodFilter)\n    }\n\n    /// Unfiltered (can contain duplications from extensions) methods defined in this type only, inluding methods defined in its extensions,\n    /// but not including methods inherited from superclasses (for classes only) and protocols\n    public var rawMethods: [Method]\n\n    // sourcery: skipEquality, skipDescription\n    /// All methods defined for this type, including methods defined in extensions,\n    /// in superclasses (for classes only) and protocols\n    public var allMethods: [Method] {\n        return flattenAll({\n            $0.methods\n        },\n        isExtension: { $0.definedInType?.isExtension == true },\n        filter: { all, extracted in\n            !all.contains(where: { Self.uniqueMethodFilter($0, rhs: extracted) })\n        })\n    }\n\n    private static func uniqueMethodFilter(_ lhs: Method, rhs: Method) -> Bool {\n        return lhs.name == rhs.name && lhs.isStatic == rhs.isStatic && lhs.isClass == rhs.isClass && lhs.actualReturnTypeName == rhs.actualReturnTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Subscripts defined in this type only, inluding subscripts defined in its extensions,\n    /// but not including subscripts inherited from superclasses (for classes only) and protocols\n    public var subscripts: [Subscript] {\n        unique({ $0.rawSubscripts }, filter: Self.uniqueSubscriptFilter)\n    }\n\n    /// Unfiltered (can contain duplications from extensions) Subscripts defined in this type only, inluding subscripts defined in its extensions,\n    /// but not including subscripts inherited from superclasses (for classes only) and protocols\n    public var rawSubscripts: [Subscript]\n\n    // sourcery: skipEquality, skipDescription\n    /// All subscripts defined for this type, including subscripts defined in extensions,\n    /// in superclasses (for classes only) and protocols\n    public var allSubscripts: [Subscript] {\n        return flattenAll({ $0.subscripts },\n            isExtension: { $0.definedInType?.isExtension == true },\n            filter: { all, extracted in\n                !all.contains(where: { Self.uniqueSubscriptFilter($0, rhs: extracted) })\n            })\n    }\n\n    private static func uniqueSubscriptFilter(_ lhs: Subscript, rhs: Subscript) -> Bool {\n        return lhs.parameters == rhs.parameters && lhs.returnTypeName == rhs.returnTypeName && lhs.readAccess == rhs.readAccess && lhs.writeAccess == rhs.writeAccess\n    }\n\n    // sourcery: skipEquality, skipDescription, skipJSExport\n    /// Bytes position of the body of this type in its declaration file if available.\n    public var bodyBytesRange: BytesRange?\n\n    // sourcery: skipEquality, skipDescription, skipJSExport\n    /// Bytes position of the whole declaration of this type in its declaration file if available.\n    public var completeDeclarationRange: BytesRange?\n\n    private func flattenAll<T>(_ extraction: @escaping (Type) -> [T], isExtension: (T) -> Bool, filter: ([T], T) -> Bool) -> [T] {\n        let all = NSMutableOrderedSet()\n        let allObjects = extraction(self)\n\n        /// The order of importance for properties is:\n        /// Base class\n        /// Inheritance\n        /// Protocol conformance\n        /// Extension\n\n        var extensions = [T]()\n        var baseObjects = [T]()\n\n        allObjects.forEach {\n            if isExtension($0) {\n                extensions.append($0)\n            } else {\n                baseObjects.append($0)\n            }\n        }\n\n        all.addObjects(from: baseObjects)\n\n        func filteredExtraction(_ target: Type) -> [T] {\n            // swiftlint:disable:next force_cast\n            let all = all.array as! [T]\n            let extracted = extraction(target).filter({ filter(all, $0) })\n            return extracted\n        }\n\n        inherits.values.sorted(by: { $0.name < $1.name }).forEach { all.addObjects(from: filteredExtraction($0)) }\n        implements.values.sorted(by: { $0.name < $1.name }).forEach { all.addObjects(from: filteredExtraction($0)) }\n\n        // swiftlint:disable:next force_cast\n        let array = all.array as! [T]\n        all.addObjects(from: extensions.filter({ filter(array, $0) }))\n\n        return all.array.compactMap { $0 as? T }\n    }\n\n    private func unique<T>(_ extraction: @escaping (Type) -> [T], filter: (T, T) -> Bool) -> [T] {\n        let all = NSMutableOrderedSet()\n        for nextItem in extraction(self) {\n            // swiftlint:disable:next force_cast\n            if !all.contains(where: { filter($0 as! T, nextItem) }) {\n                all.add(nextItem)\n            }\n        }\n\n        return all.array.compactMap { $0 as? T }\n    }\n\n    /// All initializers defined in this type\n    public var initializers: [Method] {\n        return methods.filter { $0.isInitializer }\n    }\n\n    /// All annotations for this type\n    public var annotations: Annotations = [:]\n\n    public var documentation: Documentation = []\n\n    /// Static variables defined in this type\n    public var staticVariables: [Variable] {\n        return variables.filter { $0.isStatic }\n    }\n\n    /// Static methods defined in this type\n    public var staticMethods: [Method] {\n        return methods.filter { $0.isStatic }\n    }\n\n    /// Class methods defined in this type\n    public var classMethods: [Method] {\n        return methods.filter { $0.isClass }\n    }\n\n    /// Instance variables defined in this type\n    public var instanceVariables: [Variable] {\n        return variables.filter { !$0.isStatic }\n    }\n\n    /// Instance methods defined in this type\n    public var instanceMethods: [Method] {\n        return methods.filter { !$0.isStatic && !$0.isClass }\n    }\n\n    /// Computed instance variables defined in this type\n    public var computedVariables: [Variable] {\n        return variables.filter { $0.isComputed && !$0.isStatic }\n    }\n\n    /// Stored instance variables defined in this type\n    public var storedVariables: [Variable] {\n        return variables.filter { !$0.isComputed && !$0.isStatic }\n    }\n\n    /// Names of types this type inherits from (for classes only) and protocols it implements, in order of definition\n    public var inheritedTypes: [String] {\n        didSet {\n            based.removeAll()\n            inheritedTypes.forEach { name in\n                self.based[name] = name\n            }\n        }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Names of types or protocols this type inherits from, including unknown (not scanned) types\n    public var based = [String: String]()\n\n    // sourcery: skipEquality, skipDescription\n    /// Types this type inherits from or implements, including unknown (not scanned) types with extensions defined\n    public var basedTypes = [String: Type]()\n\n    /// Types this type inherits from\n    public var inherits = [String: Type]()\n\n    // sourcery: skipEquality, skipDescription\n    /// Protocols this type implements. Does not contain classes in case where composition (`&`) is used in the declaration\n    public var implements = [String: Type]()\n\n    /// Contained types\n    public var containedTypes: [Type] {\n        didSet {\n            containedTypes.forEach {\n                containedType[$0.localName] = $0\n                $0.parent = self\n            }\n        }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Contained types groupd by their names\n    public private(set) var containedType: [String: Type] = [:]\n\n    /// Name of parent type (for contained types only)\n    public private(set) var parentName: String?\n\n    // sourcery: skipEquality, skipDescription\n    /// Parent type, if known (for contained types only)\n    public var parent: Type? {\n        didSet {\n            parentName = parent?.name\n        }\n    }\n\n    // sourcery: skipJSExport\n    /// :nodoc:\n    public var parentTypes: AnyIterator<Type> {\n        var next: Type? = self\n        return AnyIterator {\n            next = next?.parent\n            return next\n        }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Superclass type, if known (only for classes)\n    public var supertype: Type?\n\n    /// Type attributes, i.e. `@objc`\n    public var attributes: AttributeList\n\n    /// Type modifiers, i.e. `private`, `final`\n    public var modifiers: [SourceryModifier]\n\n    /// Path to file where the type is defined\n    // sourcery: skipDescription, skipEquality, skipJSExport\n    public var path: String? {\n        didSet {\n            if let path = path {\n                fileName = (path as NSString).lastPathComponent\n            }\n        }\n    }\n\n    /// Directory to file where the type is defined\n    // sourcery: skipDescription, skipEquality, skipJSExport\n    public var directory: String? {\n        get {\n            return (path as? NSString)?.deletingLastPathComponent\n        }\n    }\n\n    /// list of generic requirements\n    public var genericRequirements: [GenericRequirement] {\n        didSet {\n            isGeneric = isGeneric || !genericRequirements.isEmpty\n        }\n    }\n\n    /// File name where the type was defined\n    public var fileName: String?\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                parent: Type? = nil,\n                accessLevel: AccessLevel = .internal,\n                isExtension: Bool = false,\n                variables: [Variable] = [],\n                methods: [Method] = [],\n                subscripts: [Subscript] = [],\n                inheritedTypes: [String] = [],\n                containedTypes: [Type] = [],\n                typealiases: [Typealias] = [],\n                genericRequirements: [GenericRequirement] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                isGeneric: Bool = false,\n                implements: [String: Type] = [:],\n                kind: String = \"unknown\") {\n        self.localName = name\n        self.accessLevel = accessLevel.rawValue\n        self.isExtension = isExtension\n        self.rawVariables = variables\n        self.rawMethods = methods\n        self.rawSubscripts = subscripts\n        self.inheritedTypes = inheritedTypes\n        self.containedTypes = containedTypes\n        self.typealiases = [:]\n        self.parent = parent\n        self.parentName = parent?.name\n        self.attributes = attributes\n        self.modifiers = modifiers\n        self.annotations = annotations\n        self.documentation = documentation\n        self.isGeneric = isGeneric\n        self.genericRequirements = genericRequirements\n        self.implements = implements\n        self._kind = kind\n        super.init()\n        containedTypes.forEach {\n            containedType[$0.localName] = $0\n            $0.parent = self\n        }\n        inheritedTypes.forEach { name in\n            self.based[name] = name\n        }\n        typealiases.forEach({\n            $0.parent = self\n            self.typealiases[$0.aliasName] = $0\n        })\n    }\n\n    /// :nodoc:\n    public func extend(_ type: Type) {\n        type.annotations.forEach { self.annotations[$0.key] = $0.value }\n        type.inherits.forEach { self.inherits[$0.key] = $0.value }\n        type.implements.forEach { self.implements[$0.key] = $0.value }\n        self.inheritedTypes += type.inheritedTypes\n        self.containedTypes += type.containedTypes\n\n        self.rawVariables += type.rawVariables\n        self.rawMethods += type.rawMethods\n        self.rawSubscripts += type.rawSubscripts\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        let type: Type.Type = Swift.type(of: self)\n        var string = \"\\(type): \"\n        string.append(\"module = \\(String(describing: self.module)), \")\n        string.append(\"imports = \\(String(describing: self.imports)), \")\n        string.append(\"allImports = \\(String(describing: self.allImports)), \")\n        string.append(\"typealiases = \\(String(describing: self.typealiases)), \")\n        string.append(\"isExtension = \\(String(describing: self.isExtension)), \")\n        string.append(\"kind = \\(String(describing: self.kind)), \")\n        string.append(\"_kind = \\(String(describing: self._kind)), \")\n        string.append(\"accessLevel = \\(String(describing: self.accessLevel)), \")\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"isUnknownExtension = \\(String(describing: self.isUnknownExtension)), \")\n        string.append(\"isGeneric = \\(String(describing: self.isGeneric)), \")\n        string.append(\"localName = \\(String(describing: self.localName)), \")\n        string.append(\"rawVariables = \\(String(describing: self.rawVariables)), \")\n        string.append(\"rawMethods = \\(String(describing: self.rawMethods)), \")\n        string.append(\"rawSubscripts = \\(String(describing: self.rawSubscripts)), \")\n        string.append(\"initializers = \\(String(describing: self.initializers)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\(String(describing: self.documentation)), \")\n        string.append(\"staticVariables = \\(String(describing: self.staticVariables)), \")\n        string.append(\"staticMethods = \\(String(describing: self.staticMethods)), \")\n        string.append(\"classMethods = \\(String(describing: self.classMethods)), \")\n        string.append(\"instanceVariables = \\(String(describing: self.instanceVariables)), \")\n        string.append(\"instanceMethods = \\(String(describing: self.instanceMethods)), \")\n        string.append(\"computedVariables = \\(String(describing: self.computedVariables)), \")\n        string.append(\"storedVariables = \\(String(describing: self.storedVariables)), \")\n        string.append(\"inheritedTypes = \\(String(describing: self.inheritedTypes)), \")\n        string.append(\"inherits = \\(String(describing: self.inherits)), \")\n        string.append(\"containedTypes = \\(String(describing: self.containedTypes)), \")\n        string.append(\"parentName = \\(String(describing: self.parentName)), \")\n        string.append(\"parentTypes = \\(String(describing: self.parentTypes)), \")\n        string.append(\"attributes = \\(String(describing: self.attributes)), \")\n        string.append(\"modifiers = \\(String(describing: self.modifiers)), \")\n        string.append(\"fileName = \\(String(describing: self.fileName)), \")\n        string.append(\"genericRequirements = \\(String(describing: self.genericRequirements))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Type else {\n            results.append(\"Incorrect type <expected: Type, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"module\").trackDifference(actual: self.module, expected: castObject.module))\n        results.append(contentsOf: DiffableResult(identifier: \"imports\").trackDifference(actual: self.imports, expected: castObject.imports))\n        results.append(contentsOf: DiffableResult(identifier: \"typealiases\").trackDifference(actual: self.typealiases, expected: castObject.typealiases))\n        results.append(contentsOf: DiffableResult(identifier: \"isExtension\").trackDifference(actual: self.isExtension, expected: castObject.isExtension))\n        results.append(contentsOf: DiffableResult(identifier: \"accessLevel\").trackDifference(actual: self.accessLevel, expected: castObject.accessLevel))\n        results.append(contentsOf: DiffableResult(identifier: \"isUnknownExtension\").trackDifference(actual: self.isUnknownExtension, expected: castObject.isUnknownExtension))\n        results.append(contentsOf: DiffableResult(identifier: \"isGeneric\").trackDifference(actual: self.isGeneric, expected: castObject.isGeneric))\n        results.append(contentsOf: DiffableResult(identifier: \"localName\").trackDifference(actual: self.localName, expected: castObject.localName))\n        results.append(contentsOf: DiffableResult(identifier: \"rawVariables\").trackDifference(actual: self.rawVariables, expected: castObject.rawVariables))\n        results.append(contentsOf: DiffableResult(identifier: \"rawMethods\").trackDifference(actual: self.rawMethods, expected: castObject.rawMethods))\n        results.append(contentsOf: DiffableResult(identifier: \"rawSubscripts\").trackDifference(actual: self.rawSubscripts, expected: castObject.rawSubscripts))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"inheritedTypes\").trackDifference(actual: self.inheritedTypes, expected: castObject.inheritedTypes))\n        results.append(contentsOf: DiffableResult(identifier: \"inherits\").trackDifference(actual: self.inherits, expected: castObject.inherits))\n        results.append(contentsOf: DiffableResult(identifier: \"containedTypes\").trackDifference(actual: self.containedTypes, expected: castObject.containedTypes))\n        results.append(contentsOf: DiffableResult(identifier: \"parentName\").trackDifference(actual: self.parentName, expected: castObject.parentName))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        results.append(contentsOf: DiffableResult(identifier: \"fileName\").trackDifference(actual: self.fileName, expected: castObject.fileName))\n        results.append(contentsOf: DiffableResult(identifier: \"genericRequirements\").trackDifference(actual: self.genericRequirements, expected: castObject.genericRequirements))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.module)\n        hasher.combine(self.imports)\n        hasher.combine(self.typealiases)\n        hasher.combine(self.isExtension)\n        hasher.combine(self.accessLevel)\n        hasher.combine(self.isUnknownExtension)\n        hasher.combine(self.isGeneric)\n        hasher.combine(self.localName)\n        hasher.combine(self.rawVariables)\n        hasher.combine(self.rawMethods)\n        hasher.combine(self.rawSubscripts)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.inheritedTypes)\n        hasher.combine(self.inherits)\n        hasher.combine(self.containedTypes)\n        hasher.combine(self.parentName)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        hasher.combine(self.fileName)\n        hasher.combine(self.genericRequirements)\n        hasher.combine(kind)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Type else { return false }\n        if self.module != rhs.module { return false }\n        if self.imports != rhs.imports { return false }\n        if self.typealiases != rhs.typealiases { return false }\n        if self.isExtension != rhs.isExtension { return false }\n        if self.accessLevel != rhs.accessLevel { return false }\n        if self.isUnknownExtension != rhs.isUnknownExtension { return false }\n        if self.isGeneric != rhs.isGeneric { return false }\n        if self.localName != rhs.localName { return false }\n        if self.rawVariables != rhs.rawVariables { return false }\n        if self.rawMethods != rhs.rawMethods { return false }\n        if self.rawSubscripts != rhs.rawSubscripts { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.inheritedTypes != rhs.inheritedTypes { return false }\n        if self.inherits != rhs.inherits { return false }\n        if self.containedTypes != rhs.containedTypes { return false }\n        if self.parentName != rhs.parentName { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        if self.fileName != rhs.fileName { return false }\n        if self.kind != rhs.kind { return false }\n        if self.genericRequirements != rhs.genericRequirements { return false }\n        return true\n    }\n\n// sourcery:inline:Type.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.module = aDecoder.decode(forKey: \"module\")\n            guard let imports: [Import] = aDecoder.decode(forKey: \"imports\") else { \n                withVaList([\"imports\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.imports = imports\n            guard let typealiases: [String: Typealias] = aDecoder.decode(forKey: \"typealiases\") else { \n                withVaList([\"typealiases\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typealiases = typealiases\n            self.isExtension = aDecoder.decode(forKey: \"isExtension\")\n            guard let _kind: String = aDecoder.decode(forKey: \"_kind\") else { \n                withVaList([\"_kind\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self._kind = _kind\n            guard let accessLevel: String = aDecoder.decode(forKey: \"accessLevel\") else { \n                withVaList([\"accessLevel\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.accessLevel = accessLevel\n            self.isGeneric = aDecoder.decode(forKey: \"isGeneric\")\n            guard let localName: String = aDecoder.decode(forKey: \"localName\") else { \n                withVaList([\"localName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.localName = localName\n            guard let rawVariables: [Variable] = aDecoder.decode(forKey: \"rawVariables\") else { \n                withVaList([\"rawVariables\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.rawVariables = rawVariables\n            guard let rawMethods: [Method] = aDecoder.decode(forKey: \"rawMethods\") else { \n                withVaList([\"rawMethods\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.rawMethods = rawMethods\n            guard let rawSubscripts: [Subscript] = aDecoder.decode(forKey: \"rawSubscripts\") else { \n                withVaList([\"rawSubscripts\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.rawSubscripts = rawSubscripts\n            self.bodyBytesRange = aDecoder.decode(forKey: \"bodyBytesRange\")\n            self.completeDeclarationRange = aDecoder.decode(forKey: \"completeDeclarationRange\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            guard let inheritedTypes: [String] = aDecoder.decode(forKey: \"inheritedTypes\") else { \n                withVaList([\"inheritedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.inheritedTypes = inheritedTypes\n            guard let based: [String: String] = aDecoder.decode(forKey: \"based\") else { \n                withVaList([\"based\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.based = based\n            guard let basedTypes: [String: Type] = aDecoder.decode(forKey: \"basedTypes\") else { \n                withVaList([\"basedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.basedTypes = basedTypes\n            guard let inherits: [String: Type] = aDecoder.decode(forKey: \"inherits\") else { \n                withVaList([\"inherits\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.inherits = inherits\n            guard let implements: [String: Type] = aDecoder.decode(forKey: \"implements\") else { \n                withVaList([\"implements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.implements = implements\n            guard let containedTypes: [Type] = aDecoder.decode(forKey: \"containedTypes\") else { \n                withVaList([\"containedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.containedTypes = containedTypes\n            guard let containedType: [String: Type] = aDecoder.decode(forKey: \"containedType\") else { \n                withVaList([\"containedType\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.containedType = containedType\n            self.parentName = aDecoder.decode(forKey: \"parentName\")\n            self.parent = aDecoder.decode(forKey: \"parent\")\n            self.supertype = aDecoder.decode(forKey: \"supertype\")\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            self.path = aDecoder.decode(forKey: \"path\")\n            guard let genericRequirements: [GenericRequirement] = aDecoder.decode(forKey: \"genericRequirements\") else { \n                withVaList([\"genericRequirements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericRequirements = genericRequirements\n            self.fileName = aDecoder.decode(forKey: \"fileName\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.module, forKey: \"module\")\n            aCoder.encode(self.imports, forKey: \"imports\")\n            aCoder.encode(self.typealiases, forKey: \"typealiases\")\n            aCoder.encode(self.isExtension, forKey: \"isExtension\")\n            aCoder.encode(self._kind, forKey: \"_kind\")\n            aCoder.encode(self.accessLevel, forKey: \"accessLevel\")\n            aCoder.encode(self.isGeneric, forKey: \"isGeneric\")\n            aCoder.encode(self.localName, forKey: \"localName\")\n            aCoder.encode(self.rawVariables, forKey: \"rawVariables\")\n            aCoder.encode(self.rawMethods, forKey: \"rawMethods\")\n            aCoder.encode(self.rawSubscripts, forKey: \"rawSubscripts\")\n            aCoder.encode(self.bodyBytesRange, forKey: \"bodyBytesRange\")\n            aCoder.encode(self.completeDeclarationRange, forKey: \"completeDeclarationRange\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.inheritedTypes, forKey: \"inheritedTypes\")\n            aCoder.encode(self.based, forKey: \"based\")\n            aCoder.encode(self.basedTypes, forKey: \"basedTypes\")\n            aCoder.encode(self.inherits, forKey: \"inherits\")\n            aCoder.encode(self.implements, forKey: \"implements\")\n            aCoder.encode(self.containedTypes, forKey: \"containedTypes\")\n            aCoder.encode(self.containedType, forKey: \"containedType\")\n            aCoder.encode(self.parentName, forKey: \"parentName\")\n            aCoder.encode(self.parent, forKey: \"parent\")\n            aCoder.encode(self.supertype, forKey: \"supertype\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.path, forKey: \"path\")\n            aCoder.encode(self.genericRequirements, forKey: \"genericRequirements\")\n            aCoder.encode(self.fileName, forKey: \"fileName\")\n        }\n// sourcery:end\n\n}\n\nextension Type {\n\n    // sourcery: skipDescription, skipJSExport\n    /// :nodoc:\n    var isClass: Bool {\n        let isNotClass = self is Struct || self is Enum || self is Protocol\n        return !isNotClass && !isExtension\n    }\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/AST/Variable_Linux.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// :nodoc:\npublic typealias SourceryVariable = Variable\n\n/// Defines variable\npublic final class Variable: NSObject, SourceryModel, Typed, Annotated, Documented, Definition, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n        case \"readAccess\":\n            return readAccess\n        case \"annotations\":\n            return annotations\n        case \"isOptional\":\n            return isOptional\n        case \"name\":\n            return name\n        case \"typeName\":\n            return typeName\n        case \"type\":\n            return type\n        case \"definedInType\":\n            return definedInType\n        case \"isStatic\":\n            return isStatic\n        case \"isAsync\":\n            return isAsync\n        case \"throws\":\n            return `throws`\n        case \"throwsTypeName\":\n            return throwsTypeName\n        case \"isArray\":\n            return isArray\n        case \"isDictionary\":\n            return isDictionary\n        case \"isDynamic\":\n            return isDynamic\n        default:\n            fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }\n    }\n\n    /// Variable name\n    public let name: String\n\n    /// Variable type name\n    public let typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Variable type, if known, i.e. if the type is declared in the scanned sources.\n    /// For explanation, see <https://cdn.rawgit.com/krzysztofzablocki/Sourcery/master/docs/writing-templates.html#what-are-em-known-em-and-em-unknown-em-types>\n    public var type: Type?\n\n    /// Whether variable is computed and not stored\n    public let isComputed: Bool\n    \n    /// Whether variable is async\n    public let isAsync: Bool\n    \n    /// Whether variable throws\n    public let `throws`: Bool\n\n    /// Type of thrown error if specified\n    public let throwsTypeName: TypeName?\n\n    /// Whether variable is static\n    public let isStatic: Bool\n\n    /// Variable read access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let readAccess: String\n\n    /// Variable write access, i.e. `internal`, `private`, `fileprivate`, `public`, `open`.\n    /// For immutable variables this value is empty string\n    public let writeAccess: String\n\n    /// composed access level\n    /// sourcery: skipJSExport\n    public var accessLevel: (read: AccessLevel, write: AccessLevel) {\n        (read: AccessLevel(rawValue: readAccess) ?? .none, AccessLevel(rawValue: writeAccess) ?? .none)\n    }\n\n    /// Whether variable is mutable or not\n    public var isMutable: Bool {\n        return writeAccess != AccessLevel.none.rawValue\n    }\n\n    /// Variable default value expression\n    public var defaultValue: String?\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public var annotations: Annotations = [:]\n\n    public var documentation: Documentation = []\n\n    /// Variable attributes, i.e. `@IBOutlet`, `@IBInspectable`\n    public var attributes: AttributeList\n\n    /// Modifiers, i.e. `private`\n    public var modifiers: [SourceryModifier]\n\n    /// Whether variable is final or not\n    public var isFinal: Bool {\n        return modifiers.contains { $0.name == Attribute.Identifier.final.rawValue }\n    }\n\n    /// Whether variable is lazy or not\n    public var isLazy: Bool {\n        return modifiers.contains { $0.name == Attribute.Identifier.lazy.rawValue }\n    }\n\n    /// Whether variable is dynamic or not\n    public var isDynamic: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.dynamic.rawValue }\n    }\n\n    /// Reference to type name where the variable is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc\n    public internal(set) var definedInTypeName: TypeName?\n\n    /// Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a `definedInTypeName`\n    public var actualDefinedInTypeName: TypeName? {\n        return definedInTypeName?.actualTypeName ?? definedInTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Reference to actual type where the object is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc or type is unknown\n    public var definedInType: Type?\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                typeName: TypeName,\n                type: Type? = nil,\n                accessLevel: (read: AccessLevel, write: AccessLevel) = (.internal, .internal),\n                isComputed: Bool = false,\n                isAsync: Bool = false,\n                `throws`: Bool = false,\n                throwsTypeName: TypeName? = nil,\n                isStatic: Bool = false,\n                defaultValue: String? = nil,\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                definedInTypeName: TypeName? = nil) {\n\n        self.name = name\n        self.typeName = typeName\n        self.type = type\n        self.isComputed = isComputed\n        self.isAsync = isAsync\n        self.`throws` = `throws`\n        self.throwsTypeName = throwsTypeName\n        self.isStatic = isStatic\n        self.defaultValue = defaultValue\n        self.readAccess = accessLevel.read.rawValue\n        self.writeAccess = accessLevel.write.rawValue\n        self.attributes = attributes\n        self.modifiers = modifiers\n        self.annotations = annotations\n        self.documentation = documentation\n        self.definedInTypeName = definedInTypeName\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"typeName = \\(String(describing: self.typeName)), \")\n        string.append(\"isComputed = \\(String(describing: self.isComputed)), \")\n        string.append(\"isAsync = \\(String(describing: self.isAsync)), \")\n        string.append(\"`throws` = \\(String(describing: self.`throws`)), \")\n        string.append(\"throwsTypeName = \\(String(describing: self.throwsTypeName)), \")\n        string.append(\"isStatic = \\(String(describing: self.isStatic)), \")\n        string.append(\"readAccess = \\(String(describing: self.readAccess)), \")\n        string.append(\"writeAccess = \\(String(describing: self.writeAccess)), \")\n        string.append(\"accessLevel = \\(String(describing: self.accessLevel)), \")\n        string.append(\"isMutable = \\(String(describing: self.isMutable)), \")\n        string.append(\"defaultValue = \\(String(describing: self.defaultValue)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\(String(describing: self.documentation)), \")\n        string.append(\"attributes = \\(String(describing: self.attributes)), \")\n        string.append(\"modifiers = \\(String(describing: self.modifiers)), \")\n        string.append(\"isFinal = \\(String(describing: self.isFinal)), \")\n        string.append(\"isLazy = \\(String(describing: self.isLazy)), \")\n        string.append(\"isDynamic = \\(String(describing: self.isDynamic)), \")\n        string.append(\"definedInTypeName = \\(String(describing: self.definedInTypeName)), \")\n        string.append(\"actualDefinedInTypeName = \\(String(describing: self.actualDefinedInTypeName))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Variable else {\n            results.append(\"Incorrect type <expected: Variable, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        results.append(contentsOf: DiffableResult(identifier: \"isComputed\").trackDifference(actual: self.isComputed, expected: castObject.isComputed))\n        results.append(contentsOf: DiffableResult(identifier: \"isAsync\").trackDifference(actual: self.isAsync, expected: castObject.isAsync))\n        results.append(contentsOf: DiffableResult(identifier: \"`throws`\").trackDifference(actual: self.`throws`, expected: castObject.`throws`))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsTypeName\").trackDifference(actual: self.throwsTypeName, expected: castObject.throwsTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"isStatic\").trackDifference(actual: self.isStatic, expected: castObject.isStatic))\n        results.append(contentsOf: DiffableResult(identifier: \"readAccess\").trackDifference(actual: self.readAccess, expected: castObject.readAccess))\n        results.append(contentsOf: DiffableResult(identifier: \"writeAccess\").trackDifference(actual: self.writeAccess, expected: castObject.writeAccess))\n        results.append(contentsOf: DiffableResult(identifier: \"defaultValue\").trackDifference(actual: self.defaultValue, expected: castObject.defaultValue))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        results.append(contentsOf: DiffableResult(identifier: \"definedInTypeName\").trackDifference(actual: self.definedInTypeName, expected: castObject.definedInTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        hasher.combine(self.isComputed)\n        hasher.combine(self.isAsync)\n        hasher.combine(self.`throws`)\n        hasher.combine(self.throwsTypeName)\n        hasher.combine(self.isStatic)\n        hasher.combine(self.readAccess)\n        hasher.combine(self.writeAccess)\n        hasher.combine(self.defaultValue)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        hasher.combine(self.definedInTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Variable else { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.isComputed != rhs.isComputed { return false }\n        if self.isAsync != rhs.isAsync { return false }\n        if self.`throws` != rhs.`throws` { return false }\n        if self.throwsTypeName != rhs.throwsTypeName { return false }\n        if self.isStatic != rhs.isStatic { return false }\n        if self.readAccess != rhs.readAccess { return false }\n        if self.writeAccess != rhs.writeAccess { return false }\n        if self.defaultValue != rhs.defaultValue { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        if self.definedInTypeName != rhs.definedInTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:Variable.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n            self.isComputed = aDecoder.decode(forKey: \"isComputed\")\n            self.isAsync = aDecoder.decode(forKey: \"isAsync\")\n            self.`throws` = aDecoder.decode(forKey: \"`throws`\")\n            self.throwsTypeName = aDecoder.decode(forKey: \"throwsTypeName\")\n            self.isStatic = aDecoder.decode(forKey: \"isStatic\")\n            guard let readAccess: String = aDecoder.decode(forKey: \"readAccess\") else { \n                withVaList([\"readAccess\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.readAccess = readAccess\n            guard let writeAccess: String = aDecoder.decode(forKey: \"writeAccess\") else { \n                withVaList([\"writeAccess\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.writeAccess = writeAccess\n            self.defaultValue = aDecoder.decode(forKey: \"defaultValue\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            self.definedInTypeName = aDecoder.decode(forKey: \"definedInTypeName\")\n            self.definedInType = aDecoder.decode(forKey: \"definedInType\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n            aCoder.encode(self.isComputed, forKey: \"isComputed\")\n            aCoder.encode(self.isAsync, forKey: \"isAsync\")\n            aCoder.encode(self.`throws`, forKey: \"`throws`\")\n            aCoder.encode(self.throwsTypeName, forKey: \"throwsTypeName\")\n            aCoder.encode(self.isStatic, forKey: \"isStatic\")\n            aCoder.encode(self.readAccess, forKey: \"readAccess\")\n            aCoder.encode(self.writeAccess, forKey: \"writeAccess\")\n            aCoder.encode(self.defaultValue, forKey: \"defaultValue\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.definedInTypeName, forKey: \"definedInTypeName\")\n            aCoder.encode(self.definedInType, forKey: \"definedInType\")\n        }\n// sourcery:end\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/DynamicMemberLookup_Linux.swift",
    "content": "//\n// Stencil\n// Copyright © 2022 Stencil\n// MIT Licence\n//\n\n#if !canImport(ObjectiveC)\n#if canImport(Stencil)\nimport Stencil\n#else\n// This is not supposed to work at all, since in Stencil there is a protocol conformance check against `DynamicMemberLookup`,\n// and, of course, a substitute with the \"same name\" but in `Sourcery` will never satisfy that check.\n// Here, we are just mimicking `Stencil.DynamicMemberLookup` to showcase what is happening within the `Sourcery` during runtime.\n\n/// Marker protocol so we can know which types support `@dynamicMemberLookup`. Add this to your own types that support\n/// lookup by String.\npublic protocol DynamicMemberLookup {\n    /// Get a value for a given `String` key\n    subscript(dynamicMember member: String) -> Any? { get }\n}\n\npublic extension DynamicMemberLookup where Self: RawRepresentable {\n  /// Get a value for a given `String` key\n  subscript(dynamicMember member: String) -> Any? {\n    switch member {\n    case \"rawValue\":\n      return rawValue\n    default:\n      return nil\n    }\n  }\n}\n#endif\n\npublic protocol SourceryDynamicMemberLookup: DynamicMemberLookup {}\n\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/NSException_Linux.swift",
    "content": "#if !canImport(ObjectiveC)\nimport Foundation\n\npublic class NSException {\n    static func raise(_ name: String, format: String, arguments: CVaListPointer) {\n        fatalError (\"\\(name) exception: \\(NSString(format: format, arguments: arguments))\")\n    }\n\n    static func raise(_ name: String) {\n        fatalError(\"\\(name) exception\")\n    }\n}\n\npublic extension NSExceptionName {\n    static var parseErrorException = \"parseErrorException\"\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/TypesCollection_Linux.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// :nodoc:\npublic class TypesCollection: NSObject, AutoJSExport, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        return try? types(forKey: member)\n    }\n\n    // sourcery:begin: skipJSExport\n    let all: [Type]\n    let types: [String: [Type]]\n    let validate: ((Type) throws -> Void)?\n    // sourcery:end\n\n    init(types: [Type], collection: (Type) -> [String], validate: ((Type) throws -> Void)? = nil) {\n        self.all = types\n        var content = [String: [Type]]()\n        self.all.forEach { type in\n            collection(type).forEach { name in\n                var list = content[name] ?? [Type]()\n                list.append(type)\n                content[name] = list\n            }\n        }\n        self.types = content\n        self.validate = validate\n    }\n\n    public func types(forKey key: String) throws -> [Type] {\n        // In some configurations, the types are keyed by \"ModuleName.TypeName\"\n        var longKey: String?\n\n        if let validate = validate {\n            guard let type = all.first(where: { $0.name == key }) else {\n                throw \"Unknown type \\(key), should be used with `based`\"\n            }\n\n            try validate(type)\n\n            if let module = type.module {\n                longKey = [module, type.name].joined(separator: \".\")\n            }\n        }\n\n        // If we find the types directly, return them\n        if let types = types[key] {\n            return types\n        }\n\n        // if we find a types for the longKey, return them\n        if let longKey = longKey, let types = types[longKey] {\n            return types\n        }\n\n        return []\n    }\n\n    /// :nodoc:\n    public func value(forKey key: String) -> Any? {\n        do {\n            return try types(forKey: key)\n        } catch {\n            Log.error(error)\n            return nil\n        }\n    }\n\n    /// :nodoc:\n    public subscript(_ key: String) -> [Type] {\n        do {\n            return try types(forKey: key)\n        } catch {\n            Log.error(error)\n            return []\n        }\n    }\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/Linux/Types_Linux.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if !canImport(ObjectiveC)\nimport Foundation\n\n// sourcery: skipJSExport\n/// Collection of scanned types for accessing in templates\npublic final class Types: NSObject, SourceryModel, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"types\":\n                return types\n            case \"enums\":\n                return enums\n            case \"all\":\n                return all\n            case \"protocols\":\n                return protocols\n            case \"classes\":\n                return classes\n            case \"structs\":\n                return structs\n            case \"extensions\":\n                return extensions\n            case \"implementing\":\n                return implementing\n            case \"inheriting\":\n                return inheriting\n            case \"based\":\n                return based\n            default:\n                fatalError(\"unable to lookup: \\(member) in \\(self)\")\n        }\n    }\n\n    /// :nodoc:\n    public let types: [Type]\n\n    /// All known typealiases\n    public let typealiases: [Typealias]\n\n    /// :nodoc:\n    public init(types: [Type], typealiases: [Typealias] = []) {\n        self.types = types\n        self.typealiases = typealiases\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"types = \\(String(describing: self.types)), \")\n        string.append(\"typealiases = \\(String(describing: self.typealiases))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Types else {\n            results.append(\"Incorrect type <expected: Types, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"types\").trackDifference(actual: self.types, expected: castObject.types))\n        results.append(contentsOf: DiffableResult(identifier: \"typealiases\").trackDifference(actual: self.typealiases, expected: castObject.typealiases))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.types)\n        hasher.combine(self.typealiases)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Types else { return false }\n        if self.types != rhs.types { return false }\n        if self.typealiases != rhs.typealiases { return false }\n        return true\n    }\n\n// sourcery:inline:Types.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let types: [Type] = aDecoder.decode(forKey: \"types\") else { \n                withVaList([\"types\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.types = types\n            guard let typealiases: [Typealias] = aDecoder.decode(forKey: \"typealiases\") else { \n                withVaList([\"typealiases\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typealiases = typealiases\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.types, forKey: \"types\")\n            aCoder.encode(self.typealiases, forKey: \"typealiases\")\n        }\n// sourcery:end\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// :nodoc:\n    public lazy internal(set) var typesByName: [String: Type] = {\n        var typesByName = [String: Type]()\n        self.types.forEach { typesByName[$0.globalName] = $0 }\n        return typesByName\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// :nodoc:\n    public lazy internal(set) var typesaliasesByName: [String: Typealias] = {\n        var typesaliasesByName = [String: Typealias]()\n        self.typealiases.forEach { typesaliasesByName[$0.name] = $0 }\n        return typesaliasesByName\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known types, excluding protocols or protocol compositions.\n    public lazy internal(set) var all: [Type] = {\n        return self.types.filter { !($0 is Protocol || $0 is ProtocolComposition) }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known protocols\n    public lazy internal(set) var protocols: [Protocol] = {\n        return self.types.compactMap { $0 as? Protocol }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known protocol compositions\n    public lazy internal(set) var protocolCompositions: [ProtocolComposition] = {\n        return self.types.compactMap { $0 as? ProtocolComposition }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known classes\n    public lazy internal(set) var classes: [Class] = {\n        return self.all.compactMap { $0 as? Class }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known structs\n    public lazy internal(set) var structs: [Struct] = {\n        return self.all.compactMap { $0 as? Struct }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known enums\n    public lazy internal(set) var enums: [Enum] = {\n        return self.all.compactMap { $0 as? Enum }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known extensions\n    public lazy internal(set) var extensions: [Type] = {\n        return self.all.compactMap { $0.isExtension ? $0 : nil }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// Types based on any other type, grouped by its name, even if they are not known.\n    /// `types.based.MyType` returns list of types based on `MyType`\n    public lazy internal(set) var based: TypesCollection = {\n        TypesCollection(\n            types: self.types,\n            collection: { Array($0.based.keys) }\n        )\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// Classes inheriting from any known class, grouped by its name.\n    /// `types.inheriting.MyClass` returns list of types inheriting from `MyClass`\n    public lazy internal(set) var inheriting: TypesCollection = {\n        TypesCollection(\n            types: self.types,\n            collection: { Array($0.inherits.keys) },\n            validate: { type in\n                guard type is Class else {\n                    throw \"\\(type.name) is not a class and should be used with `implementing` or `based`\"\n                }\n            })\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// Types implementing known protocol, grouped by its name.\n    /// `types.implementing.MyProtocol` returns list of types implementing `MyProtocol`\n    public lazy internal(set) var implementing: TypesCollection = {\n        TypesCollection(\n            types: self.types,\n            collection: { Array($0.implements.keys) },\n            validate: { type in\n                guard type is Protocol else {\n                    throw \"\\(type.name) is a class and should be used with `inheriting` or `based`\"\n                }\n        })\n    }()\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/AST/AssociatedType.swift",
    "content": "#if canImport(ObjectiveC)\nimport Foundation\n\n/// Describes Swift AssociatedType\n@objcMembers\npublic final class AssociatedType: NSObject, SourceryModel {\n    /// Associated type name\n    public let name: String\n\n    /// Associated type type constraint name, if specified\n    public let typeName: TypeName?\n\n    // sourcery: skipEquality, skipDescription\n    /// Associated type constrained type, if known, i.e. if the type is declared in the scanned sources.\n    public var type: Type?\n\n    /// :nodoc:\n    public init(name: String, typeName: TypeName? = nil, type: Type? = nil) {\n        self.name = name\n        self.typeName = typeName\n        self.type = type\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"typeName = \\(String(describing: self.typeName))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? AssociatedType else {\n            results.append(\"Incorrect type <expected: AssociatedType, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? AssociatedType else { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        return true\n    }\n\n// sourcery:inline:AssociatedType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            self.typeName = aDecoder.decode(forKey: \"typeName\")\n            self.type = aDecoder.decode(forKey: \"type\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n        }\n// sourcery:end\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/AST/AssociatedValue.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// Defines enum case associated value\n@objcMembers\npublic final class AssociatedValue: NSObject, SourceryModel, AutoDescription, Typed, Annotated, Diffable {\n\n    /// Associated value local name.\n    /// This is a name to be used to construct enum case value\n    public let localName: String?\n\n    /// Associated value external name.\n    /// This is a name to be used to access value in value-bindig\n    public let externalName: String?\n\n    /// Associated value type name\n    public let typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Associated value type, if known\n    public var type: Type?\n\n    /// Associated value default value\n    public let defaultValue: String?\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public var annotations: Annotations = [:]\n\n    /// :nodoc:\n    public init(localName: String?, externalName: String?, typeName: TypeName, type: Type? = nil, defaultValue: String? = nil, annotations: [String: NSObject] = [:]) {\n        self.localName = localName\n        self.externalName = externalName\n        self.typeName = typeName\n        self.type = type\n        self.defaultValue = defaultValue\n        self.annotations = annotations\n    }\n\n    convenience init(name: String? = nil, typeName: TypeName, type: Type? = nil, defaultValue: String? = nil, annotations: [String: NSObject] = [:]) {\n        self.init(localName: name, externalName: name, typeName: typeName, type: type, defaultValue: defaultValue, annotations: annotations)\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"localName = \\(String(describing: self.localName)), \")\n        string.append(\"externalName = \\(String(describing: self.externalName)), \")\n        string.append(\"typeName = \\(String(describing: self.typeName)), \")\n        string.append(\"defaultValue = \\(String(describing: self.defaultValue)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? AssociatedValue else {\n            results.append(\"Incorrect type <expected: AssociatedValue, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"localName\").trackDifference(actual: self.localName, expected: castObject.localName))\n        results.append(contentsOf: DiffableResult(identifier: \"externalName\").trackDifference(actual: self.externalName, expected: castObject.externalName))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        results.append(contentsOf: DiffableResult(identifier: \"defaultValue\").trackDifference(actual: self.defaultValue, expected: castObject.defaultValue))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.localName)\n        hasher.combine(self.externalName)\n        hasher.combine(self.typeName)\n        hasher.combine(self.defaultValue)\n        hasher.combine(self.annotations)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? AssociatedValue else { return false }\n        if self.localName != rhs.localName { return false }\n        if self.externalName != rhs.externalName { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.defaultValue != rhs.defaultValue { return false }\n        if self.annotations != rhs.annotations { return false }\n        return true\n    }\n\n// sourcery:inline:AssociatedValue.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.localName = aDecoder.decode(forKey: \"localName\")\n            self.externalName = aDecoder.decode(forKey: \"externalName\")\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n            self.defaultValue = aDecoder.decode(forKey: \"defaultValue\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.localName, forKey: \"localName\")\n            aCoder.encode(self.externalName, forKey: \"externalName\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n            aCoder.encode(self.defaultValue, forKey: \"defaultValue\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n        }\n// sourcery:end\n\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/AST/ClosureParameter.swift",
    "content": "#if canImport(ObjectiveC)\nimport Foundation\n\n// sourcery: skipDiffing\n@objcMembers\npublic final class ClosureParameter: NSObject, SourceryModel, Typed, Annotated {\n    /// Parameter external name\n    public var argumentLabel: String?\n\n    /// Parameter internal name\n    public let name: String?\n\n    /// Parameter type name\n    public let typeName: TypeName\n\n    /// Parameter flag whether it's inout or not\n    public let `inout`: Bool\n\n    // sourcery: skipEquality, skipDescription\n    /// Parameter type, if known\n    public var type: Type?\n\n    /// Parameter if the argument has a variadic type or not\n    public let isVariadic: Bool\n\n    /// Parameter type attributes, i.e. `@escaping`\n    public var typeAttributes: AttributeList {\n        return typeName.attributes\n    }\n\n    /// Method parameter default value expression\n    public var defaultValue: String?\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public var annotations: Annotations = [:]\n\n    /// :nodoc:\n    public init(argumentLabel: String? = nil, name: String? = nil, typeName: TypeName, type: Type? = nil,\n                defaultValue: String? = nil, annotations: [String: NSObject] = [:], isInout: Bool = false, \n                isVariadic: Bool = false) {\n        self.typeName = typeName\n        self.argumentLabel = argumentLabel\n        self.name = name\n        self.type = type\n        self.defaultValue = defaultValue\n        self.annotations = annotations\n        self.`inout` = isInout\n        self.isVariadic = isVariadic\n    }\n\n    public var asSource: String {\n        let typeInfo = \"\\(`inout` ? \"inout \" : \"\")\\(typeName.asSource)\\(isVariadic ? \"...\" : \"\")\"\n        if argumentLabel?.nilIfNotValidParameterName == nil, name?.nilIfNotValidParameterName == nil {\n            return typeInfo\n        }\n\n        let typeSuffix = \": \\(typeInfo)\"\n        guard argumentLabel != name else {\n            return name ?? \"\" + typeSuffix\n        }\n\n        let labels = [argumentLabel ?? \"_\", name?.nilIfEmpty]\n          .compactMap { $0 }\n          .joined(separator: \" \")\n\n        return (labels.nilIfEmpty ?? \"_\") + typeSuffix\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.argumentLabel)\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        hasher.combine(self.`inout`)\n        hasher.combine(self.isVariadic)\n        hasher.combine(self.defaultValue)\n        hasher.combine(self.annotations)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"argumentLabel = \\(String(describing: self.argumentLabel)), \")\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"typeName = \\(String(describing: self.typeName)), \")\n        string.append(\"`inout` = \\(String(describing: self.`inout`)), \")\n        string.append(\"typeAttributes = \\(String(describing: self.typeAttributes)), \")\n        string.append(\"defaultValue = \\(String(describing: self.defaultValue)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations)), \")\n        string.append(\"asSource = \\(String(describing: self.asSource))\")\n        return string\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? ClosureParameter else { return false }\n        if self.argumentLabel != rhs.argumentLabel { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.`inout` != rhs.`inout` { return false }\n        if self.isVariadic != rhs.isVariadic { return false }\n        if self.defaultValue != rhs.defaultValue { return false }\n        if self.annotations != rhs.annotations { return false }\n        return true\n    }\n\n    // sourcery:inline:ClosureParameter.AutoCoding\n\n            /// :nodoc:\n            required public init?(coder aDecoder: NSCoder) {\n                self.argumentLabel = aDecoder.decode(forKey: \"argumentLabel\")\n                self.name = aDecoder.decode(forKey: \"name\")\n                guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                    withVaList([\"typeName\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.typeName = typeName\n                self.`inout` = aDecoder.decode(forKey: \"`inout`\")\n                self.type = aDecoder.decode(forKey: \"type\")\n                self.isVariadic = aDecoder.decode(forKey: \"isVariadic\")\n                self.defaultValue = aDecoder.decode(forKey: \"defaultValue\")\n                guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                    withVaList([\"annotations\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.annotations = annotations\n            }\n\n            /// :nodoc:\n            public func encode(with aCoder: NSCoder) {\n                aCoder.encode(self.argumentLabel, forKey: \"argumentLabel\")\n                aCoder.encode(self.name, forKey: \"name\")\n                aCoder.encode(self.typeName, forKey: \"typeName\")\n                aCoder.encode(self.`inout`, forKey: \"`inout`\")\n                aCoder.encode(self.type, forKey: \"type\")\n                aCoder.encode(self.isVariadic, forKey: \"isVariadic\")\n                aCoder.encode(self.defaultValue, forKey: \"defaultValue\")\n                aCoder.encode(self.annotations, forKey: \"annotations\")\n            }\n\n    // sourcery:end\n}\n\nextension Array where Element == ClosureParameter {\n    public var asSource: String {\n        \"(\\(map { $0.asSource }.joined(separator: \", \")))\"\n    }\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/AST/Enum.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// Defines Swift enum\n@objcMembers\npublic final class Enum: Type {\n\n    // sourcery: skipJSExport\n    public class var kind: String { return \"enum\" }\n\n    // sourcery: skipDescription\n    /// Returns \"enum\"\n    public override var kind: String { Self.kind }\n\n    /// Enum cases\n    public var cases: [EnumCase]\n\n    /**\n     Enum raw value type name, if any. This type is removed from enum's `based` and `inherited` types collections.\n\n        - important: Unless raw type is specified explicitly via type alias RawValue it will be set to the first type in the inheritance chain.\n     So if your enum does not have raw value but implements protocols you'll have to specify conformance to these protocols via extension to get enum with nil raw value type and all based and inherited types.\n     */\n    public var rawTypeName: TypeName? {\n        didSet {\n            if let rawTypeName = rawTypeName {\n                hasRawType = true\n                if let index = inheritedTypes.firstIndex(of: rawTypeName.name) {\n                    inheritedTypes.remove(at: index)\n                }\n                if based[rawTypeName.name] != nil {\n                    based[rawTypeName.name] = nil\n                }\n            } else {\n                hasRawType = false\n            }\n        }\n    }\n\n    // sourcery: skipDescription, skipEquality\n    /// :nodoc:\n    public private(set) var hasRawType: Bool\n\n    // sourcery: skipDescription, skipEquality\n    /// Enum raw value type, if known\n    public var rawType: Type?\n\n    // sourcery: skipEquality, skipDescription, skipCoding\n    /// Names of types or protocols this type inherits from, including unknown (not scanned) types\n    public override var based: [String: String] {\n        didSet {\n            if let rawTypeName = rawTypeName, based[rawTypeName.name] != nil {\n                based[rawTypeName.name] = nil\n            }\n        }\n    }\n\n    /// Whether enum contains any associated values\n    public var hasAssociatedValues: Bool {\n        return cases.contains(where: { $0.hasAssociatedValue })\n    }\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                parent: Type? = nil,\n                accessLevel: AccessLevel = .internal,\n                isExtension: Bool = false,\n                inheritedTypes: [String] = [],\n                rawTypeName: TypeName? = nil,\n                cases: [EnumCase] = [],\n                variables: [Variable] = [],\n                methods: [Method] = [],\n                containedTypes: [Type] = [],\n                typealiases: [Typealias] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                isGeneric: Bool = false) {\n\n        self.cases = cases\n        self.rawTypeName = rawTypeName\n        self.hasRawType = rawTypeName != nil || !inheritedTypes.isEmpty\n\n        super.init(name: name, parent: parent, accessLevel: accessLevel, isExtension: isExtension, variables: variables, methods: methods, inheritedTypes: inheritedTypes, containedTypes: containedTypes, typealiases: typealiases, attributes: attributes, modifiers: modifiers, annotations: annotations, documentation: documentation, isGeneric: isGeneric, kind: Self.kind)\n\n        if let rawTypeName = rawTypeName?.name, let index = self.inheritedTypes.firstIndex(of: rawTypeName) {\n            self.inheritedTypes.remove(at: index)\n        }\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string.append(\", \")\n        string.append(\"cases = \\(String(describing: self.cases)), \")\n        string.append(\"rawTypeName = \\(String(describing: self.rawTypeName)), \")\n        string.append(\"hasAssociatedValues = \\(String(describing: self.hasAssociatedValues))\")\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Enum else {\n            results.append(\"Incorrect type <expected: Enum, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"cases\").trackDifference(actual: self.cases, expected: castObject.cases))\n        results.append(contentsOf: DiffableResult(identifier: \"rawTypeName\").trackDifference(actual: self.rawTypeName, expected: castObject.rawTypeName))\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.cases)\n        hasher.combine(self.rawTypeName)\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Enum else { return false }\n        if self.cases != rhs.cases { return false }\n        if self.rawTypeName != rhs.rawTypeName { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Enum.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let cases: [EnumCase] = aDecoder.decode(forKey: \"cases\") else { \n                withVaList([\"cases\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.cases = cases\n            self.rawTypeName = aDecoder.decode(forKey: \"rawTypeName\")\n            self.hasRawType = aDecoder.decode(forKey: \"hasRawType\")\n            self.rawType = aDecoder.decode(forKey: \"rawType\")\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n            aCoder.encode(self.cases, forKey: \"cases\")\n            aCoder.encode(self.rawTypeName, forKey: \"rawTypeName\")\n            aCoder.encode(self.hasRawType, forKey: \"hasRawType\")\n            aCoder.encode(self.rawType, forKey: \"rawType\")\n        }\n// sourcery:end\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/AST/EnumCase.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// Defines enum case\n@objcMembers\npublic final class EnumCase: NSObject, SourceryModel, AutoDescription, Annotated, Documented, Diffable {\n\n    /// Enum case name\n    public let name: String\n\n    /// Enum case raw value, if any\n    public let rawValue: String?\n\n    /// Enum case associated values\n    public let associatedValues: [AssociatedValue]\n\n    /// Enum case annotations\n    public var annotations: Annotations = [:]\n\n    public var documentation: Documentation = []\n\n    /// Whether enum case is indirect\n    public let indirect: Bool\n\n    /// Whether enum case has associated value\n    public var hasAssociatedValue: Bool {\n        return !associatedValues.isEmpty\n    }\n\n    // Underlying parser data, never to be used by anything else\n    // sourcery: skipEquality, skipDescription, skipCoding, skipJSExport\n    /// :nodoc:\n    public var __parserData: Any?\n\n    /// :nodoc:\n    public init(name: String, rawValue: String? = nil, associatedValues: [AssociatedValue] = [], annotations: [String: NSObject] = [:], documentation: [String] = [], indirect: Bool = false) {\n        self.name = name\n        self.rawValue = rawValue\n        self.associatedValues = associatedValues\n        self.annotations = annotations\n        self.documentation = documentation\n        self.indirect = indirect\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"rawValue = \\(String(describing: self.rawValue)), \")\n        string.append(\"associatedValues = \\(String(describing: self.associatedValues)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\(String(describing: self.documentation)), \")\n        string.append(\"indirect = \\(String(describing: self.indirect)), \")\n        string.append(\"hasAssociatedValue = \\(String(describing: self.hasAssociatedValue))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? EnumCase else {\n            results.append(\"Incorrect type <expected: EnumCase, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"rawValue\").trackDifference(actual: self.rawValue, expected: castObject.rawValue))\n        results.append(contentsOf: DiffableResult(identifier: \"associatedValues\").trackDifference(actual: self.associatedValues, expected: castObject.associatedValues))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"indirect\").trackDifference(actual: self.indirect, expected: castObject.indirect))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.rawValue)\n        hasher.combine(self.associatedValues)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.indirect)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? EnumCase else { return false }\n        if self.name != rhs.name { return false }\n        if self.rawValue != rhs.rawValue { return false }\n        if self.associatedValues != rhs.associatedValues { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.indirect != rhs.indirect { return false }\n        return true\n    }\n\n// sourcery:inline:EnumCase.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            self.rawValue = aDecoder.decode(forKey: \"rawValue\")\n            guard let associatedValues: [AssociatedValue] = aDecoder.decode(forKey: \"associatedValues\") else { \n                withVaList([\"associatedValues\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.associatedValues = associatedValues\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            self.indirect = aDecoder.decode(forKey: \"indirect\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.rawValue, forKey: \"rawValue\")\n            aCoder.encode(self.associatedValues, forKey: \"associatedValues\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.indirect, forKey: \"indirect\")\n        }\n// sourcery:end\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/AST/GenericParameter.swift",
    "content": "#if canImport(ObjectiveC)\nimport Foundation\n\n/// Descibes Swift generic parameter\n@objcMembers\npublic final class GenericParameter: NSObject, SourceryModel, Diffable {\n\n    /// Generic parameter name\n    public var name: String\n\n    /// Generic parameter inherited type\n    public var inheritedTypeName: TypeName?\n\n    /// :nodoc:\n    public init(name: String, inheritedTypeName: TypeName? = nil) {\n        self.name = name\n        self.inheritedTypeName = inheritedTypeName\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"inheritedTypeName = \\(String(describing: self.inheritedTypeName))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? GenericParameter else {\n            results.append(\"Incorrect type <expected: GenericParameter, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"inheritedTypeName\").trackDifference(actual: self.inheritedTypeName, expected: castObject.inheritedTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.inheritedTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? GenericParameter else { return false }\n        if self.name != rhs.name { return false }\n        if self.inheritedTypeName != rhs.inheritedTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:GenericParameter.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            self.inheritedTypeName = aDecoder.decode(forKey: \"inheritedTypeName\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.inheritedTypeName, forKey: \"inheritedTypeName\")\n        }\n\n// sourcery:end\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/AST/GenericRequirement.swift",
    "content": "#if canImport(ObjectiveC)\nimport Foundation\n\n/// Descibes Swift generic requirement\n@objcMembers\npublic class GenericRequirement: NSObject, SourceryModel, Diffable {\n\n    public enum Relationship: String {\n        case equals\n        case conformsTo\n\n        var syntax: String {\n            switch self {\n            case .equals:\n                return \"==\"\n            case .conformsTo:\n                return \":\"\n            }\n        }\n    }\n\n    public var leftType: AssociatedType\n    public let rightType: GenericTypeParameter\n\n    /// relationship name\n    public let relationship: String\n\n    /// Syntax e.g. `==` or `:`\n    public let relationshipSyntax: String\n\n    public init(leftType: AssociatedType, rightType: GenericTypeParameter, relationship: Relationship) {\n        self.leftType = leftType\n        self.rightType = rightType\n        self.relationship = relationship.rawValue\n        self.relationshipSyntax = relationship.syntax\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"leftType = \\(String(describing: self.leftType)), \")\n        string.append(\"rightType = \\(String(describing: self.rightType)), \")\n        string.append(\"relationship = \\(String(describing: self.relationship)), \")\n        string.append(\"relationshipSyntax = \\(String(describing: self.relationshipSyntax))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? GenericRequirement else {\n            results.append(\"Incorrect type <expected: GenericRequirement, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"leftType\").trackDifference(actual: self.leftType, expected: castObject.leftType))\n        results.append(contentsOf: DiffableResult(identifier: \"rightType\").trackDifference(actual: self.rightType, expected: castObject.rightType))\n        results.append(contentsOf: DiffableResult(identifier: \"relationship\").trackDifference(actual: self.relationship, expected: castObject.relationship))\n        results.append(contentsOf: DiffableResult(identifier: \"relationshipSyntax\").trackDifference(actual: self.relationshipSyntax, expected: castObject.relationshipSyntax))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.leftType)\n        hasher.combine(self.rightType)\n        hasher.combine(self.relationship)\n        hasher.combine(self.relationshipSyntax)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? GenericRequirement else { return false }\n        if self.leftType != rhs.leftType { return false }\n        if self.rightType != rhs.rightType { return false }\n        if self.relationship != rhs.relationship { return false }\n        if self.relationshipSyntax != rhs.relationshipSyntax { return false }\n        return true\n    }\n\n    // sourcery:inline:GenericRequirement.AutoCoding\n\n            /// :nodoc:\n            required public init?(coder aDecoder: NSCoder) {\n                guard let leftType: AssociatedType = aDecoder.decode(forKey: \"leftType\") else { \n                    withVaList([\"leftType\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.leftType = leftType\n                guard let rightType: GenericTypeParameter = aDecoder.decode(forKey: \"rightType\") else { \n                    withVaList([\"rightType\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.rightType = rightType\n                guard let relationship: String = aDecoder.decode(forKey: \"relationship\") else { \n                    withVaList([\"relationship\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.relationship = relationship\n                guard let relationshipSyntax: String = aDecoder.decode(forKey: \"relationshipSyntax\") else { \n                    withVaList([\"relationshipSyntax\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.relationshipSyntax = relationshipSyntax\n            }\n\n            /// :nodoc:\n            public func encode(with aCoder: NSCoder) {\n                aCoder.encode(self.leftType, forKey: \"leftType\")\n                aCoder.encode(self.rightType, forKey: \"rightType\")\n                aCoder.encode(self.relationship, forKey: \"relationship\")\n                aCoder.encode(self.relationshipSyntax, forKey: \"relationshipSyntax\")\n            }\n    // sourcery:end\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/AST/Method.swift",
    "content": "#if canImport(ObjectiveC)\nimport Foundation\n\n/// :nodoc:\npublic typealias SourceryMethod = Method\n\n/// Describes method\n@objc(SwiftMethod) @objcMembers\npublic final class Method: NSObject, SourceryModel, Annotated, Documented, Definition, Diffable {\n\n    /// Full method name, including generic constraints, i.e. `foo<T>(bar: T)`\n    public let name: String\n\n    /// Method name including arguments names, i.e. `foo(bar:)`\n    public var selectorName: String\n\n    // sourcery: skipEquality, skipDescription\n    /// Method name without arguments names and parentheses, i.e. `foo<T>`\n    public var shortName: String {\n        return name.range(of: \"(\").map({ String(name[..<$0.lowerBound]) }) ?? name\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Method name without arguments names, parentheses and generic types, i.e. `foo` (can be used to generate code for method call)\n    public var callName: String {\n        return shortName.range(of: \"<\").map({ String(shortName[..<$0.lowerBound]) }) ?? shortName\n    }\n\n    /// Method parameters\n    public var parameters: [MethodParameter]\n\n    /// Return value type name used in declaration, including generic constraints, i.e. `where T: Equatable`\n    public var returnTypeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Actual return value type name if declaration uses typealias, otherwise just a `returnTypeName`\n    public var actualReturnTypeName: TypeName {\n        return returnTypeName.actualTypeName ?? returnTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Actual return value type, if known\n    public var returnType: Type?\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is optional\n    public var isOptionalReturnType: Bool {\n        return returnTypeName.isOptional || isFailableInitializer\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is implicitly unwrapped optional\n    public var isImplicitlyUnwrappedOptionalReturnType: Bool {\n        return returnTypeName.isImplicitlyUnwrappedOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Return value type name without attributes and optional type information\n    public var unwrappedReturnTypeName: String {\n        return returnTypeName.unwrappedTypeName\n    }\n\n    /// Whether method is async method\n    public let isAsync: Bool\n\n    /// Whether method is distributed\n    public var isDistributed: Bool {\n        modifiers.contains(where: { $0.name == \"distributed\" })\n    }\n\n    /// Whether method throws\n    public let `throws`: Bool\n\n    /// Type of thrown error if specified\n    public let throwsTypeName: TypeName?\n\n    // sourcery: skipEquality, skipDescription\n    /// Return if the throwsType is generic\n    public var isThrowsTypeGeneric: Bool {\n        return genericParameters.contains { $0.name == throwsTypeName?.name }\n    }\n\n    /// Whether method rethrows\n    public let `rethrows`: Bool\n\n    /// Method access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let accessLevel: String\n\n    /// Whether method is a static method\n    public let isStatic: Bool\n\n    /// Whether method is a class method\n    public let isClass: Bool\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is an initializer\n    public var isInitializer: Bool {\n        return selectorName.hasPrefix(\"init(\") || selectorName == \"init\"\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is an deinitializer\n    public var isDeinitializer: Bool {\n        return selectorName == \"deinit\"\n    }\n\n    /// Whether method is a failable initializer\n    public let isFailableInitializer: Bool\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is a convenience initializer\n    public var isConvenienceInitializer: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.convenience.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is required\n    public var isRequired: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.required.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is final\n    public var isFinal: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.final.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is mutating\n    public var isMutating: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.mutating.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is generic\n    public var isGeneric: Bool {\n        shortName.hasSuffix(\">\")\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is optional (in an Objective-C protocol)\n    public var isOptional: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.optional.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is nonisolated (this modifier only applies to actor methods)\n    public var isNonisolated: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.nonisolated.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is dynamic\n    public var isDynamic: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.dynamic.rawValue }\n    }\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public let annotations: Annotations\n\n    public let documentation: Documentation\n\n    /// Reference to type name where the method is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc\n    public let definedInTypeName: TypeName?\n\n    // sourcery: skipEquality, skipDescription\n    /// Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a `definedInTypeName`\n    public var actualDefinedInTypeName: TypeName? {\n        return definedInTypeName?.actualTypeName ?? definedInTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Reference to actual type where the object is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc or type is unknown\n    public var definedInType: Type?\n\n    /// Method attributes, i.e. `@discardableResult`\n    public let attributes: AttributeList\n\n    /// Method modifiers, i.e. `private`\n    public let modifiers: [SourceryModifier]\n\n    // Underlying parser data, never to be used by anything else\n    // sourcery: skipEquality, skipDescription, skipCoding, skipJSExport\n    /// :nodoc:\n    public var __parserData: Any?\n\n    /// list of generic requirements\n    public var genericRequirements: [GenericRequirement]\n\n    /// List of generic parameters\n    ///\n    /// - Example:\n    ///\n    ///   ```swift\n    ///   func method<GenericParameter>(foo: GenericParameter)\n    ///                    ^ ~ a generic parameter\n    ///   ```\n    public var genericParameters: [GenericParameter]\n\n    /// :nodoc:\n    public init(name: String,\n                selectorName: String? = nil,\n                parameters: [MethodParameter] = [],\n                returnTypeName: TypeName = TypeName(name: \"Void\"),\n                isAsync: Bool = false,\n                throws: Bool = false,\n                throwsTypeName: TypeName? = nil,\n                rethrows: Bool = false,\n                accessLevel: AccessLevel = .internal,\n                isStatic: Bool = false,\n                isClass: Bool = false,\n                isFailableInitializer: Bool = false,\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                definedInTypeName: TypeName? = nil,\n                genericRequirements: [GenericRequirement] = [],\n                genericParameters: [GenericParameter] = []) {\n        self.name = name\n        self.selectorName = selectorName ?? name\n        self.parameters = parameters\n        self.returnTypeName = returnTypeName\n        self.isAsync = isAsync\n        self.throws = `throws`\n        self.throwsTypeName = throwsTypeName\n        self.rethrows = `rethrows`\n        self.accessLevel = accessLevel.rawValue\n        self.isStatic = isStatic\n        self.isClass = isClass\n        self.isFailableInitializer = isFailableInitializer\n        self.attributes = attributes\n        self.modifiers = modifiers\n        self.annotations = annotations\n        self.documentation = documentation\n        self.definedInTypeName = definedInTypeName\n        self.genericRequirements = genericRequirements\n        self.genericParameters = genericParameters\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"selectorName = \\(String(describing: self.selectorName)), \")\n        string.append(\"parameters = \\(String(describing: self.parameters)), \")\n        string.append(\"returnTypeName = \\(String(describing: self.returnTypeName)), \")\n        string.append(\"isAsync = \\(String(describing: self.isAsync)), \")\n        string.append(\"`throws` = \\(String(describing: self.`throws`)), \")\n        string.append(\"throwsTypeName = \\(String(describing: self.throwsTypeName)), \")\n        string.append(\"`rethrows` = \\(String(describing: self.`rethrows`)), \")\n        string.append(\"accessLevel = \\(String(describing: self.accessLevel)), \")\n        string.append(\"isStatic = \\(String(describing: self.isStatic)), \")\n        string.append(\"isClass = \\(String(describing: self.isClass)), \")\n        string.append(\"isFailableInitializer = \\(String(describing: self.isFailableInitializer)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\(String(describing: self.documentation)), \")\n        string.append(\"definedInTypeName = \\(String(describing: self.definedInTypeName)), \")\n        string.append(\"attributes = \\(String(describing: self.attributes)), \")\n        string.append(\"modifiers = \\(String(describing: self.modifiers)), \")\n        string.append(\"genericRequirements = \\(String(describing: self.genericRequirements)), \")\n        string.append(\"genericParameters = \\(String(describing: self.genericParameters))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Method else {\n            results.append(\"Incorrect type <expected: Method, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"selectorName\").trackDifference(actual: self.selectorName, expected: castObject.selectorName))\n        results.append(contentsOf: DiffableResult(identifier: \"parameters\").trackDifference(actual: self.parameters, expected: castObject.parameters))\n        results.append(contentsOf: DiffableResult(identifier: \"returnTypeName\").trackDifference(actual: self.returnTypeName, expected: castObject.returnTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"isAsync\").trackDifference(actual: self.isAsync, expected: castObject.isAsync))\n        results.append(contentsOf: DiffableResult(identifier: \"`throws`\").trackDifference(actual: self.`throws`, expected: castObject.`throws`))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsTypeName\").trackDifference(actual: self.throwsTypeName, expected: castObject.throwsTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"`rethrows`\").trackDifference(actual: self.`rethrows`, expected: castObject.`rethrows`))\n        results.append(contentsOf: DiffableResult(identifier: \"accessLevel\").trackDifference(actual: self.accessLevel, expected: castObject.accessLevel))\n        results.append(contentsOf: DiffableResult(identifier: \"isStatic\").trackDifference(actual: self.isStatic, expected: castObject.isStatic))\n        results.append(contentsOf: DiffableResult(identifier: \"isClass\").trackDifference(actual: self.isClass, expected: castObject.isClass))\n        results.append(contentsOf: DiffableResult(identifier: \"isFailableInitializer\").trackDifference(actual: self.isFailableInitializer, expected: castObject.isFailableInitializer))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"definedInTypeName\").trackDifference(actual: self.definedInTypeName, expected: castObject.definedInTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        results.append(contentsOf: DiffableResult(identifier: \"genericRequirements\").trackDifference(actual: self.genericRequirements, expected: castObject.genericRequirements))\n        results.append(contentsOf: DiffableResult(identifier: \"genericParameters\").trackDifference(actual: self.genericParameters, expected: castObject.genericParameters))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.selectorName)\n        hasher.combine(self.parameters)\n        hasher.combine(self.returnTypeName)\n        hasher.combine(self.isAsync)\n        hasher.combine(self.`throws`)\n        hasher.combine(self.throwsTypeName)\n        hasher.combine(self.`rethrows`)\n        hasher.combine(self.accessLevel)\n        hasher.combine(self.isStatic)\n        hasher.combine(self.isClass)\n        hasher.combine(self.isFailableInitializer)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.definedInTypeName)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        hasher.combine(self.genericRequirements)\n        hasher.combine(self.genericParameters)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Method else { return false }\n        if self.name != rhs.name { return false }\n        if self.selectorName != rhs.selectorName { return false }\n        if self.parameters != rhs.parameters { return false }\n        if self.returnTypeName != rhs.returnTypeName { return false }\n        if self.isAsync != rhs.isAsync { return false }\n        if self.isDistributed != rhs.isDistributed { return false }\n        if self.`throws` != rhs.`throws` { return false }\n        if self.throwsTypeName != rhs.throwsTypeName { return false }\n        if self.`rethrows` != rhs.`rethrows` { return false }\n        if self.accessLevel != rhs.accessLevel { return false }\n        if self.isStatic != rhs.isStatic { return false }\n        if self.isClass != rhs.isClass { return false }\n        if self.isFailableInitializer != rhs.isFailableInitializer { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.definedInTypeName != rhs.definedInTypeName { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        if self.genericRequirements != rhs.genericRequirements { return false }\n        if self.genericParameters != rhs.genericParameters { return false }\n        return true\n    }\n\n// sourcery:inline:Method.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let selectorName: String = aDecoder.decode(forKey: \"selectorName\") else { \n                withVaList([\"selectorName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.selectorName = selectorName\n            guard let parameters: [MethodParameter] = aDecoder.decode(forKey: \"parameters\") else { \n                withVaList([\"parameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.parameters = parameters\n            guard let returnTypeName: TypeName = aDecoder.decode(forKey: \"returnTypeName\") else { \n                withVaList([\"returnTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.returnTypeName = returnTypeName\n            self.returnType = aDecoder.decode(forKey: \"returnType\")\n            self.isAsync = aDecoder.decode(forKey: \"isAsync\")\n            self.`throws` = aDecoder.decode(forKey: \"`throws`\")\n            self.throwsTypeName = aDecoder.decode(forKey: \"throwsTypeName\")\n            self.`rethrows` = aDecoder.decode(forKey: \"`rethrows`\")\n            guard let accessLevel: String = aDecoder.decode(forKey: \"accessLevel\") else { \n                withVaList([\"accessLevel\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.accessLevel = accessLevel\n            self.isStatic = aDecoder.decode(forKey: \"isStatic\")\n            self.isClass = aDecoder.decode(forKey: \"isClass\")\n            self.isFailableInitializer = aDecoder.decode(forKey: \"isFailableInitializer\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            self.definedInTypeName = aDecoder.decode(forKey: \"definedInTypeName\")\n            self.definedInType = aDecoder.decode(forKey: \"definedInType\")\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            guard let genericRequirements: [GenericRequirement] = aDecoder.decode(forKey: \"genericRequirements\") else { \n                withVaList([\"genericRequirements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericRequirements = genericRequirements\n            guard let genericParameters: [GenericParameter] = aDecoder.decode(forKey: \"genericParameters\") else { \n                withVaList([\"genericParameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericParameters = genericParameters\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.selectorName, forKey: \"selectorName\")\n            aCoder.encode(self.parameters, forKey: \"parameters\")\n            aCoder.encode(self.returnTypeName, forKey: \"returnTypeName\")\n            aCoder.encode(self.returnType, forKey: \"returnType\")\n            aCoder.encode(self.isAsync, forKey: \"isAsync\")\n            aCoder.encode(self.`throws`, forKey: \"`throws`\")\n            aCoder.encode(self.throwsTypeName, forKey: \"throwsTypeName\")\n            aCoder.encode(self.`rethrows`, forKey: \"`rethrows`\")\n            aCoder.encode(self.accessLevel, forKey: \"accessLevel\")\n            aCoder.encode(self.isStatic, forKey: \"isStatic\")\n            aCoder.encode(self.isClass, forKey: \"isClass\")\n            aCoder.encode(self.isFailableInitializer, forKey: \"isFailableInitializer\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.definedInTypeName, forKey: \"definedInTypeName\")\n            aCoder.encode(self.definedInType, forKey: \"definedInType\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.genericRequirements, forKey: \"genericRequirements\")\n            aCoder.encode(self.genericParameters, forKey: \"genericParameters\")\n        }\n// sourcery:end\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/AST/MethodParameter.swift",
    "content": "#if canImport(ObjectiveC)\nimport Foundation\n\n/// Describes method parameter\n@objcMembers\npublic class MethodParameter: NSObject, SourceryModel, Typed, Annotated, Diffable {\n    /// Parameter external name\n    public var argumentLabel: String?\n\n    // Note: although method parameter can have no name, this property is not optional,\n    // this is so to maintain compatibility with existing templates.\n    /// Parameter internal name\n    public let name: String\n\n    /// Parameter type name\n    public let typeName: TypeName\n\n    /// Parameter flag whether it's inout or not\n    public let `inout`: Bool\n    \n    /// Is this variadic parameter?\n    public let isVariadic: Bool\n\n    // sourcery: skipEquality, skipDescription\n    /// Parameter type, if known\n    public var type: Type?\n\n    /// Parameter type attributes, i.e. `@escaping`\n    public var typeAttributes: AttributeList {\n        return typeName.attributes\n    }\n\n    /// Method parameter default value expression\n    public var defaultValue: String?\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public var annotations: Annotations = [:]\n\n    /// Method parameter index in the argument list\n    public var index: Int\n\n    /// :nodoc:\n    public init(argumentLabel: String?, name: String = \"\", index: Int, typeName: TypeName, type: Type? = nil, defaultValue: String? = nil, annotations: [String: NSObject] = [:], isInout: Bool = false, isVariadic: Bool = false) {\n        self.typeName = typeName\n        self.argumentLabel = argumentLabel\n        self.name = name\n        self.index = index\n        self.type = type\n        self.defaultValue = defaultValue\n        self.annotations = annotations\n        self.`inout` = isInout\n        self.isVariadic = isVariadic\n    }\n\n    /// :nodoc:\n    public init(name: String = \"\", index: Int, typeName: TypeName, type: Type? = nil, defaultValue: String? = nil, annotations: [String: NSObject] = [:], isInout: Bool = false, isVariadic: Bool = false) {\n        self.typeName = typeName\n        self.argumentLabel = name\n        self.name = name\n        self.index = index\n        self.type = type\n        self.defaultValue = defaultValue\n        self.annotations = annotations\n        self.`inout` = isInout\n        self.isVariadic = isVariadic\n    }\n\n    public var asSource: String {\n        let values: String = defaultValue.map { \" = \\($0)\" } ?? \"\"\n        let variadicity: String = isVariadic ? \"...\" : \"\"\n        let inoutness: String = `inout` ? \"inout \" : \"\"\n        let typeSuffix = \": \\(inoutness)\\(typeName.asSource)\\(values)\\(variadicity)\"\n        guard argumentLabel != name else {\n            return name + typeSuffix\n        }\n\n        let labels = [argumentLabel ?? \"_\", name.nilIfEmpty]\n          .compactMap { $0 }\n          .joined(separator: \" \")\n\n        return (labels.nilIfEmpty ?? \"_\") + typeSuffix\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"argumentLabel = \\(String(describing: self.argumentLabel)), \")\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"typeName = \\(String(describing: self.typeName)), \")\n        string.append(\"`inout` = \\(String(describing: self.`inout`)), \")\n        string.append(\"isVariadic = \\(String(describing: self.isVariadic)), \")\n        string.append(\"typeAttributes = \\(String(describing: self.typeAttributes)), \")\n        string.append(\"defaultValue = \\(String(describing: self.defaultValue)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations)), \")\n        string.append(\"asSource = \\(String(describing: self.asSource)), \")\n        string.append(\"index = \\(String(describing: self.index))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? MethodParameter else {\n            results.append(\"Incorrect type <expected: MethodParameter, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"argumentLabel\").trackDifference(actual: self.argumentLabel, expected: castObject.argumentLabel))\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        results.append(contentsOf: DiffableResult(identifier: \"`inout`\").trackDifference(actual: self.`inout`, expected: castObject.`inout`))\n        results.append(contentsOf: DiffableResult(identifier: \"isVariadic\").trackDifference(actual: self.isVariadic, expected: castObject.isVariadic))\n        results.append(contentsOf: DiffableResult(identifier: \"defaultValue\").trackDifference(actual: self.defaultValue, expected: castObject.defaultValue))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"index\").trackDifference(actual: self.index, expected: castObject.index))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.argumentLabel)\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        hasher.combine(self.`inout`)\n        hasher.combine(self.isVariadic)\n        hasher.combine(self.defaultValue)\n        hasher.combine(self.annotations)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? MethodParameter else { return false }\n        if self.argumentLabel != rhs.argumentLabel { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.`inout` != rhs.`inout` { return false }\n        if self.isVariadic != rhs.isVariadic { return false }\n        if self.defaultValue != rhs.defaultValue { return false }\n        if self.annotations != rhs.annotations { return false }\n        return true\n    }\n\n// sourcery:inline:MethodParameter.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.argumentLabel = aDecoder.decode(forKey: \"argumentLabel\")\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.`inout` = aDecoder.decode(forKey: \"`inout`\")\n            self.isVariadic = aDecoder.decode(forKey: \"isVariadic\")\n            self.type = aDecoder.decode(forKey: \"type\")\n            self.defaultValue = aDecoder.decode(forKey: \"defaultValue\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            self.index = aDecoder.decode(forKey: \"index\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.argumentLabel, forKey: \"argumentLabel\")\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.`inout`, forKey: \"`inout`\")\n            aCoder.encode(self.isVariadic, forKey: \"isVariadic\")\n            aCoder.encode(self.type, forKey: \"type\")\n            aCoder.encode(self.defaultValue, forKey: \"defaultValue\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.index, forKey: \"index\")\n        }\n// sourcery:end\n}\n\nextension Array where Element == MethodParameter {\n    public var asSource: String {\n        \"(\\(map { $0.asSource }.joined(separator: \", \")))\"\n    }\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/AST/Subscript.swift",
    "content": "#if canImport(ObjectiveC)\nimport Foundation\n\n/// Describes subscript\n@objcMembers\npublic final class Subscript: NSObject, SourceryModel, Annotated, Documented, Definition, Diffable {\n    \n    /// Method parameters\n    public var parameters: [MethodParameter]\n\n    /// Return value type name used in declaration, including generic constraints, i.e. `where T: Equatable`\n    public var returnTypeName: TypeName\n\n    /// Actual return value type name if declaration uses typealias, otherwise just a `returnTypeName`\n    public var actualReturnTypeName: TypeName {\n        return returnTypeName.actualTypeName ?? returnTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Actual return value type, if known\n    public var returnType: Type?\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is optional\n    public var isOptionalReturnType: Bool {\n        return returnTypeName.isOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is implicitly unwrapped optional\n    public var isImplicitlyUnwrappedOptionalReturnType: Bool {\n        return returnTypeName.isImplicitlyUnwrappedOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Return value type name without attributes and optional type information\n    public var unwrappedReturnTypeName: String {\n        return returnTypeName.unwrappedTypeName\n    }\n\n    /// Whether method is final\n    public var isFinal: Bool {\n        modifiers.contains { $0.name == \"final\" }\n    }\n\n    /// Variable read access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let readAccess: String\n\n    /// Variable write access, i.e. `internal`, `private`, `fileprivate`, `public`, `open`.\n    /// For immutable variables this value is empty string\n    public var writeAccess: String\n\n    /// Whether subscript is async\n    public let isAsync: Bool\n\n    /// Whether subscript throws\n    public let `throws`: Bool\n\n    /// Type of thrown error if specified\n    public let throwsTypeName: TypeName?\n\n    /// Whether variable is mutable or not\n    public var isMutable: Bool {\n        return writeAccess != AccessLevel.none.rawValue\n    }\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public let annotations: Annotations\n\n    public let documentation: Documentation\n\n    /// Reference to type name where the method is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc\n    public let definedInTypeName: TypeName?\n\n    /// Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a `definedInTypeName`\n    public var actualDefinedInTypeName: TypeName? {\n        return definedInTypeName?.actualTypeName ?? definedInTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Reference to actual type where the object is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc or type is unknown\n    public var definedInType: Type?\n\n    /// Method attributes, i.e. `@discardableResult`\n    public let attributes: AttributeList\n\n    /// Method modifiers, i.e. `private`\n    public let modifiers: [SourceryModifier]\n\n    /// list of generic parameters\n    public let genericParameters: [GenericParameter]\n\n    /// list of generic requirements\n    public let genericRequirements: [GenericRequirement]\n\n    /// Whether subscript is generic or not\n    public var isGeneric: Bool {\n        return genericParameters.isEmpty == false\n    }\n\n    // Underlying parser data, never to be used by anything else\n    // sourcery: skipEquality, skipDescription, skipCoding, skipJSExport\n    /// :nodoc:\n    public var __parserData: Any?\n\n    public init(parameters: [MethodParameter] = [],\n                returnTypeName: TypeName,\n                accessLevel: (read: AccessLevel, write: AccessLevel) = (.internal, .internal),\n                isAsync: Bool = false,\n                `throws`: Bool = false,\n                throwsTypeName: TypeName? = nil,\n                genericParameters: [GenericParameter] = [],\n                genericRequirements: [GenericRequirement] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                definedInTypeName: TypeName? = nil) {\n\n        self.parameters = parameters\n        self.returnTypeName = returnTypeName\n        self.readAccess = accessLevel.read.rawValue\n        self.writeAccess = accessLevel.write.rawValue\n        self.isAsync = isAsync\n        self.throws = `throws`\n        self.throwsTypeName = throwsTypeName\n        self.genericParameters = genericParameters\n        self.genericRequirements = genericRequirements\n        self.attributes = attributes\n        self.modifiers = modifiers\n        self.annotations = annotations\n        self.documentation = documentation\n        self.definedInTypeName = definedInTypeName\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"parameters = \\(String(describing: self.parameters)), \")\n        string.append(\"returnTypeName = \\(String(describing: self.returnTypeName)), \")\n        string.append(\"actualReturnTypeName = \\(String(describing: self.actualReturnTypeName)), \")\n        string.append(\"isFinal = \\(String(describing: self.isFinal)), \")\n        string.append(\"readAccess = \\(String(describing: self.readAccess)), \")\n        string.append(\"writeAccess = \\(String(describing: self.writeAccess)), \")\n        string.append(\"isAsync = \\(String(describing: self.isAsync)), \")\n        string.append(\"`throws` = \\(String(describing: self.throws)), \")\n        string.append(\"throwsTypeName = \\(String(describing: self.throwsTypeName)), \")\n        string.append(\"isMutable = \\(String(describing: self.isMutable)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\(String(describing: self.documentation)), \")\n        string.append(\"definedInTypeName = \\(String(describing: self.definedInTypeName)), \")\n        string.append(\"actualDefinedInTypeName = \\(String(describing: self.actualDefinedInTypeName)), \")\n        string.append(\"genericParameters = \\(String(describing: self.genericParameters)), \")\n        string.append(\"genericRequirements = \\(String(describing: self.genericRequirements)), \")\n        string.append(\"isGeneric = \\(String(describing: self.isGeneric)), \")\n        string.append(\"attributes = \\(String(describing: self.attributes)), \")\n        string.append(\"modifiers = \\(String(describing: self.modifiers))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Subscript else {\n            results.append(\"Incorrect type <expected: Subscript, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"parameters\").trackDifference(actual: self.parameters, expected: castObject.parameters))\n        results.append(contentsOf: DiffableResult(identifier: \"returnTypeName\").trackDifference(actual: self.returnTypeName, expected: castObject.returnTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"readAccess\").trackDifference(actual: self.readAccess, expected: castObject.readAccess))\n        results.append(contentsOf: DiffableResult(identifier: \"writeAccess\").trackDifference(actual: self.writeAccess, expected: castObject.writeAccess))\n        results.append(contentsOf: DiffableResult(identifier: \"isAsync\").trackDifference(actual: self.isAsync, expected: castObject.isAsync))\n        results.append(contentsOf: DiffableResult(identifier: \"`throws`\").trackDifference(actual: self.throws, expected: castObject.throws))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsTypeName\").trackDifference(actual: self.throwsTypeName, expected: castObject.throwsTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"definedInTypeName\").trackDifference(actual: self.definedInTypeName, expected: castObject.definedInTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"genericParameters\").trackDifference(actual: self.genericParameters, expected: castObject.genericParameters))\n        results.append(contentsOf: DiffableResult(identifier: \"genericRequirements\").trackDifference(actual: self.genericRequirements, expected: castObject.genericRequirements))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.parameters)\n        hasher.combine(self.returnTypeName)\n        hasher.combine(self.readAccess)\n        hasher.combine(self.writeAccess)\n        hasher.combine(self.isAsync)\n        hasher.combine(self.throws)\n        hasher.combine(self.throwsTypeName)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.definedInTypeName)\n        hasher.combine(self.genericParameters)\n        hasher.combine(self.genericRequirements)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Subscript else { return false }\n        if self.parameters != rhs.parameters { return false }\n        if self.returnTypeName != rhs.returnTypeName { return false }\n        if self.readAccess != rhs.readAccess { return false }\n        if self.writeAccess != rhs.writeAccess { return false }\n        if self.isAsync != rhs.isAsync { return false }\n        if self.throws != rhs.throws { return false }\n        if self.throwsTypeName != rhs.throwsTypeName { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.definedInTypeName != rhs.definedInTypeName { return false }\n        if self.genericParameters != rhs.genericParameters { return false }\n        if self.genericRequirements != rhs.genericRequirements { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        return true\n    }\n\n// sourcery:inline:Subscript.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let parameters: [MethodParameter] = aDecoder.decode(forKey: \"parameters\") else { \n                withVaList([\"parameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.parameters = parameters\n            guard let returnTypeName: TypeName = aDecoder.decode(forKey: \"returnTypeName\") else { \n                withVaList([\"returnTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.returnTypeName = returnTypeName\n            self.returnType = aDecoder.decode(forKey: \"returnType\")\n            guard let readAccess: String = aDecoder.decode(forKey: \"readAccess\") else { \n                withVaList([\"readAccess\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.readAccess = readAccess\n            guard let writeAccess: String = aDecoder.decode(forKey: \"writeAccess\") else { \n                withVaList([\"writeAccess\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.writeAccess = writeAccess\n            self.isAsync = aDecoder.decode(forKey: \"isAsync\")\n            self.`throws` = aDecoder.decode(forKey: \"`throws`\")\n            self.throwsTypeName = aDecoder.decode(forKey: \"throwsTypeName\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            self.definedInTypeName = aDecoder.decode(forKey: \"definedInTypeName\")\n            self.definedInType = aDecoder.decode(forKey: \"definedInType\")\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            guard let genericParameters: [GenericParameter] = aDecoder.decode(forKey: \"genericParameters\") else { \n                withVaList([\"genericParameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericParameters = genericParameters\n            guard let genericRequirements: [GenericRequirement] = aDecoder.decode(forKey: \"genericRequirements\") else { \n                withVaList([\"genericRequirements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericRequirements = genericRequirements\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.parameters, forKey: \"parameters\")\n            aCoder.encode(self.returnTypeName, forKey: \"returnTypeName\")\n            aCoder.encode(self.returnType, forKey: \"returnType\")\n            aCoder.encode(self.readAccess, forKey: \"readAccess\")\n            aCoder.encode(self.writeAccess, forKey: \"writeAccess\")\n            aCoder.encode(self.isAsync, forKey: \"isAsync\")\n            aCoder.encode(self.`throws`, forKey: \"`throws`\")\n            aCoder.encode(self.throwsTypeName, forKey: \"throwsTypeName\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.definedInTypeName, forKey: \"definedInTypeName\")\n            aCoder.encode(self.definedInType, forKey: \"definedInType\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.genericParameters, forKey: \"genericParameters\")\n            aCoder.encode(self.genericRequirements, forKey: \"genericRequirements\")\n        }\n// sourcery:end\n\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/AST/Type.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 11/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// :nodoc:\npublic typealias AttributeList = [String: [Attribute]]\n\n/// Defines Swift type\n\n@objcMembers\npublic class Type: NSObject, SourceryModel, Annotated, Documented, Diffable {\n\n    /// :nodoc:\n    public var module: String?\n\n    /// Imports that existed in the file that contained this type declaration\n    public var imports: [Import] = []\n\n    // sourcery: skipEquality\n    /// Imports existed in all files containing this type and all its super classes/protocols\n    public var allImports: [Import] {\n        return self.unique({ $0.gatherAllImports() }, filter: { $0 == $1 })\n    }\n\n    private func gatherAllImports() -> [Import] {\n        var allImports: [Import] = Array(self.imports)\n\n        self.basedTypes.values.forEach { (basedType) in\n            allImports.append(contentsOf: basedType.imports)\n        }\n        return allImports\n    }\n\n    // All local typealiases\n    /// :nodoc:\n    public var typealiases: [String: Typealias] {\n        didSet {\n            typealiases.values.forEach { $0.parent = self }\n        }\n    }\n\n    // sourcery: skipJSExport\n    /// Whether declaration is an extension of some type\n    public var isExtension: Bool\n\n    // sourcery: forceEquality\n    /// Kind of type declaration, i.e. `enum`, `struct`, `class`, `protocol` or `extension`\n    public var kind: String { isExtension ? \"extension\" : _kind }\n\n    // sourcery: skipJSExport\n    /// Kind of a backing store for `self.kind`\n    private var _kind: String\n\n    /// Type access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let accessLevel: String\n\n    /// Type name in global scope. For inner types includes the name of its containing type, i.e. `Type.Inner`\n    public var name: String {\n        guard let parentName = parent?.name else { return localName }\n        return \"\\(parentName).\\(localName)\"\n    }\n\n    // sourcery: skipCoding\n    /// Whether the type has been resolved as unknown extension\n    public var isUnknownExtension: Bool = false\n\n    // sourcery: skipDescription\n    /// Global type name including module name, unless it's an extension of unknown type\n    public var globalName: String {\n        guard let module = module, !isUnknownExtension else { return name }\n        return \"\\(module).\\(name)\"\n    }\n\n    /// Whether type is generic\n    public var isGeneric: Bool\n\n    /// Type name in its own scope.\n    public var localName: String\n\n    // sourcery: skipEquality, skipDescription\n    /// Variables defined in this type only, inluding variables defined in its extensions,\n    /// but not including variables inherited from superclasses (for classes only) and protocols\n    public var variables: [Variable] {\n        unique({ $0.rawVariables }, filter: Self.uniqueVariableFilter)\n    }\n\n    /// Unfiltered (can contain duplications from extensions) variables defined in this type only, inluding variables defined in its extensions,\n    /// but not including variables inherited from superclasses (for classes only) and protocols\n    public var rawVariables: [Variable]\n\n    // sourcery: skipEquality, skipDescription\n    /// All variables defined for this type, including variables defined in extensions,\n    /// in superclasses (for classes only) and protocols\n    public var allVariables: [Variable] {\n        return flattenAll({\n            return $0.variables\n        },\n        isExtension: { $0.definedInType?.isExtension == true },\n        filter: { all, extracted in\n            !all.contains(where: { Self.uniqueVariableFilter($0, rhs: extracted) })\n        })\n    }\n\n    private static func uniqueVariableFilter(_ lhs: Variable, rhs: Variable) -> Bool {\n        return lhs.name == rhs.name && lhs.isStatic == rhs.isStatic && lhs.typeName == rhs.typeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Methods defined in this type only, inluding methods defined in its extensions,\n    /// but not including methods inherited from superclasses (for classes only) and protocols\n    public var methods: [Method] {\n        unique({ $0.rawMethods }, filter: Self.uniqueMethodFilter)\n    }\n\n    /// Unfiltered (can contain duplications from extensions) methods defined in this type only, inluding methods defined in its extensions,\n    /// but not including methods inherited from superclasses (for classes only) and protocols\n    public var rawMethods: [Method]\n\n    // sourcery: skipEquality, skipDescription\n    /// All methods defined for this type, including methods defined in extensions,\n    /// in superclasses (for classes only) and protocols\n    public var allMethods: [Method] {\n        return flattenAll({\n            $0.methods\n        },\n        isExtension: { $0.definedInType?.isExtension == true },\n        filter: { all, extracted in\n            !all.contains(where: { Self.uniqueMethodFilter($0, rhs: extracted) })\n        })\n    }\n\n    private static func uniqueMethodFilter(_ lhs: Method, rhs: Method) -> Bool {\n        return lhs.name == rhs.name && lhs.isStatic == rhs.isStatic && lhs.isClass == rhs.isClass && lhs.actualReturnTypeName == rhs.actualReturnTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Subscripts defined in this type only, inluding subscripts defined in its extensions,\n    /// but not including subscripts inherited from superclasses (for classes only) and protocols\n    public var subscripts: [Subscript] {\n        unique({ $0.rawSubscripts }, filter: Self.uniqueSubscriptFilter)\n    }\n\n    /// Unfiltered (can contain duplications from extensions) Subscripts defined in this type only, inluding subscripts defined in its extensions,\n    /// but not including subscripts inherited from superclasses (for classes only) and protocols\n    public var rawSubscripts: [Subscript]\n\n    // sourcery: skipEquality, skipDescription\n    /// All subscripts defined for this type, including subscripts defined in extensions,\n    /// in superclasses (for classes only) and protocols\n    public var allSubscripts: [Subscript] {\n        return flattenAll({ $0.subscripts },\n            isExtension: { $0.definedInType?.isExtension == true },\n            filter: { all, extracted in\n                !all.contains(where: { Self.uniqueSubscriptFilter($0, rhs: extracted) })\n            })\n    }\n\n    private static func uniqueSubscriptFilter(_ lhs: Subscript, rhs: Subscript) -> Bool {\n        return lhs.parameters == rhs.parameters && lhs.returnTypeName == rhs.returnTypeName && lhs.readAccess == rhs.readAccess && lhs.writeAccess == rhs.writeAccess\n    }\n\n    // sourcery: skipEquality, skipDescription, skipJSExport\n    /// Bytes position of the body of this type in its declaration file if available.\n    public var bodyBytesRange: BytesRange?\n\n    // sourcery: skipEquality, skipDescription, skipJSExport\n    /// Bytes position of the whole declaration of this type in its declaration file if available.\n    public var completeDeclarationRange: BytesRange?\n\n    private func flattenAll<T>(_ extraction: @escaping (Type) -> [T], isExtension: (T) -> Bool, filter: ([T], T) -> Bool) -> [T] {\n        let all = NSMutableOrderedSet()\n        let allObjects = extraction(self)\n\n        /// The order of importance for properties is:\n        /// Base class\n        /// Inheritance\n        /// Protocol conformance\n        /// Extension\n\n        var extensions = [T]()\n        var baseObjects = [T]()\n\n        allObjects.forEach {\n            if isExtension($0) {\n                extensions.append($0)\n            } else {\n                baseObjects.append($0)\n            }\n        }\n\n        all.addObjects(from: baseObjects)\n\n        func filteredExtraction(_ target: Type) -> [T] {\n            // swiftlint:disable:next force_cast\n            let all = all.array as! [T]\n            let extracted = extraction(target).filter({ filter(all, $0) })\n            return extracted\n        }\n\n        inherits.values.sorted(by: { $0.name < $1.name }).forEach { all.addObjects(from: filteredExtraction($0)) }\n        implements.values.sorted(by: { $0.name < $1.name }).forEach { all.addObjects(from: filteredExtraction($0)) }\n\n        // swiftlint:disable:next force_cast\n        let array = all.array as! [T]\n        all.addObjects(from: extensions.filter({ filter(array, $0) }))\n\n        return all.array.compactMap { $0 as? T }\n    }\n\n    private func unique<T>(_ extraction: @escaping (Type) -> [T], filter: (T, T) -> Bool) -> [T] {\n        let all = NSMutableOrderedSet()\n        for nextItem in extraction(self) {\n            // swiftlint:disable:next force_cast\n            if !all.contains(where: { filter($0 as! T, nextItem) }) {\n                all.add(nextItem)\n            }\n        }\n\n        return all.array.compactMap { $0 as? T }\n    }\n\n    /// All initializers defined in this type\n    public var initializers: [Method] {\n        return methods.filter { $0.isInitializer }\n    }\n\n    /// All annotations for this type\n    public var annotations: Annotations = [:]\n\n    public var documentation: Documentation = []\n\n    /// Static variables defined in this type\n    public var staticVariables: [Variable] {\n        return variables.filter { $0.isStatic }\n    }\n\n    /// Static methods defined in this type\n    public var staticMethods: [Method] {\n        return methods.filter { $0.isStatic }\n    }\n\n    /// Class methods defined in this type\n    public var classMethods: [Method] {\n        return methods.filter { $0.isClass }\n    }\n\n    /// Instance variables defined in this type\n    public var instanceVariables: [Variable] {\n        return variables.filter { !$0.isStatic }\n    }\n\n    /// Instance methods defined in this type\n    public var instanceMethods: [Method] {\n        return methods.filter { !$0.isStatic && !$0.isClass }\n    }\n\n    /// Computed instance variables defined in this type\n    public var computedVariables: [Variable] {\n        return variables.filter { $0.isComputed && !$0.isStatic }\n    }\n\n    /// Stored instance variables defined in this type\n    public var storedVariables: [Variable] {\n        return variables.filter { !$0.isComputed && !$0.isStatic }\n    }\n\n    /// Names of types this type inherits from (for classes only) and protocols it implements, in order of definition\n    public var inheritedTypes: [String] {\n        didSet {\n            based.removeAll()\n            inheritedTypes.forEach { name in\n                self.based[name] = name\n            }\n        }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Names of types or protocols this type inherits from, including unknown (not scanned) types\n    public var based = [String: String]()\n\n    // sourcery: skipEquality, skipDescription\n    /// Types this type inherits from or implements, including unknown (not scanned) types with extensions defined\n    public var basedTypes = [String: Type]()\n\n    /// Types this type inherits from\n    public var inherits = [String: Type]()\n\n    // sourcery: skipEquality, skipDescription\n    /// Protocols this type implements. Does not contain classes in case where composition (`&`) is used in the declaration\n    public var implements: [String: Type] = [:]\n\n    /// Contained types\n    public var containedTypes: [Type] {\n        didSet {\n            containedTypes.forEach {\n                containedType[$0.localName] = $0\n                $0.parent = self\n            }\n        }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Contained types groupd by their names\n    public private(set) var containedType: [String: Type] = [:]\n\n    /// Name of parent type (for contained types only)\n    public private(set) var parentName: String?\n\n    // sourcery: skipEquality, skipDescription\n    /// Parent type, if known (for contained types only)\n    public var parent: Type? {\n        didSet {\n            parentName = parent?.name\n        }\n    }\n\n    // sourcery: skipJSExport\n    /// :nodoc:\n    public var parentTypes: AnyIterator<Type> {\n        var next: Type? = self\n        return AnyIterator {\n            next = next?.parent\n            return next\n        }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Superclass type, if known (only for classes)\n    public var supertype: Type?\n\n    /// Type attributes, i.e. `@objc`\n    public var attributes: AttributeList\n\n    /// Type modifiers, i.e. `private`, `final`\n    public var modifiers: [SourceryModifier]\n\n    /// Path to file where the type is defined\n    // sourcery: skipDescription, skipEquality, skipJSExport\n    public var path: String? {\n        didSet {\n            if let path = path {\n                fileName = (path as NSString).lastPathComponent\n            }\n        }\n    }\n\n    /// Directory to file where the type is defined\n    // sourcery: skipDescription, skipEquality, skipJSExport\n    public var directory: String? {\n        get {\n            return (path as? NSString)?.deletingLastPathComponent\n        }\n    }\n\n    /// list of generic requirements\n    public var genericRequirements: [GenericRequirement] {\n        didSet {\n            isGeneric = isGeneric || !genericRequirements.isEmpty\n        }\n    }\n\n    /// File name where the type was defined\n    public var fileName: String?\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                parent: Type? = nil,\n                accessLevel: AccessLevel = .internal,\n                isExtension: Bool = false,\n                variables: [Variable] = [],\n                methods: [Method] = [],\n                subscripts: [Subscript] = [],\n                inheritedTypes: [String] = [],\n                containedTypes: [Type] = [],\n                typealiases: [Typealias] = [],\n                genericRequirements: [GenericRequirement] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                isGeneric: Bool = false,\n                implements: [String: Type] = [:],\n                kind: String = \"unknown\") {\n        self.localName = name\n        self.accessLevel = accessLevel.rawValue\n        self.isExtension = isExtension\n        self.rawVariables = variables\n        self.rawMethods = methods\n        self.rawSubscripts = subscripts\n        self.inheritedTypes = inheritedTypes\n        self.containedTypes = containedTypes\n        self.typealiases = [:]\n        self.parent = parent\n        self.parentName = parent?.name\n        self.attributes = attributes\n        self.modifiers = modifiers\n        self.annotations = annotations\n        self.documentation = documentation\n        self.isGeneric = isGeneric\n        self.genericRequirements = genericRequirements\n        self.implements = implements\n        self._kind = kind\n        super.init()\n        containedTypes.forEach {\n            containedType[$0.localName] = $0\n            $0.parent = self\n        }\n        inheritedTypes.forEach { name in\n            self.based[name] = name\n        }\n        typealiases.forEach({\n            $0.parent = self\n            self.typealiases[$0.aliasName] = $0\n        })\n    }\n\n    /// :nodoc:\n    public func extend(_ type: Type) {\n        type.annotations.forEach { self.annotations[$0.key] = $0.value }\n        type.inherits.forEach { self.inherits[$0.key] = $0.value }\n        type.implements.forEach { self.implements[$0.key] = $0.value }\n        self.inheritedTypes += type.inheritedTypes\n        self.containedTypes += type.containedTypes\n\n        self.rawVariables += type.rawVariables\n        self.rawMethods += type.rawMethods\n        self.rawSubscripts += type.rawSubscripts\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        let type: Type.Type = Swift.type(of: self)\n        var string = \"\\(type): \"\n        string.append(\"module = \\(String(describing: self.module)), \")\n        string.append(\"imports = \\(String(describing: self.imports)), \")\n        string.append(\"allImports = \\(String(describing: self.allImports)), \")\n        string.append(\"typealiases = \\(String(describing: self.typealiases)), \")\n        string.append(\"isExtension = \\(String(describing: self.isExtension)), \")\n        string.append(\"kind = \\(String(describing: self.kind)), \")\n        string.append(\"_kind = \\(String(describing: self._kind)), \")\n        string.append(\"accessLevel = \\(String(describing: self.accessLevel)), \")\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"isUnknownExtension = \\(String(describing: self.isUnknownExtension)), \")\n        string.append(\"isGeneric = \\(String(describing: self.isGeneric)), \")\n        string.append(\"localName = \\(String(describing: self.localName)), \")\n        string.append(\"rawVariables = \\(String(describing: self.rawVariables)), \")\n        string.append(\"rawMethods = \\(String(describing: self.rawMethods)), \")\n        string.append(\"rawSubscripts = \\(String(describing: self.rawSubscripts)), \")\n        string.append(\"initializers = \\(String(describing: self.initializers)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\(String(describing: self.documentation)), \")\n        string.append(\"staticVariables = \\(String(describing: self.staticVariables)), \")\n        string.append(\"staticMethods = \\(String(describing: self.staticMethods)), \")\n        string.append(\"classMethods = \\(String(describing: self.classMethods)), \")\n        string.append(\"instanceVariables = \\(String(describing: self.instanceVariables)), \")\n        string.append(\"instanceMethods = \\(String(describing: self.instanceMethods)), \")\n        string.append(\"computedVariables = \\(String(describing: self.computedVariables)), \")\n        string.append(\"storedVariables = \\(String(describing: self.storedVariables)), \")\n        string.append(\"inheritedTypes = \\(String(describing: self.inheritedTypes)), \")\n        string.append(\"inherits = \\(String(describing: self.inherits)), \")\n        string.append(\"containedTypes = \\(String(describing: self.containedTypes)), \")\n        string.append(\"parentName = \\(String(describing: self.parentName)), \")\n        string.append(\"parentTypes = \\(String(describing: self.parentTypes)), \")\n        string.append(\"attributes = \\(String(describing: self.attributes)), \")\n        string.append(\"modifiers = \\(String(describing: self.modifiers)), \")\n        string.append(\"fileName = \\(String(describing: self.fileName)), \")\n        string.append(\"genericRequirements = \\(String(describing: self.genericRequirements))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Type else {\n            results.append(\"Incorrect type <expected: Type, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"module\").trackDifference(actual: self.module, expected: castObject.module))\n        results.append(contentsOf: DiffableResult(identifier: \"imports\").trackDifference(actual: self.imports, expected: castObject.imports))\n        results.append(contentsOf: DiffableResult(identifier: \"typealiases\").trackDifference(actual: self.typealiases, expected: castObject.typealiases))\n        results.append(contentsOf: DiffableResult(identifier: \"isExtension\").trackDifference(actual: self.isExtension, expected: castObject.isExtension))\n        results.append(contentsOf: DiffableResult(identifier: \"accessLevel\").trackDifference(actual: self.accessLevel, expected: castObject.accessLevel))\n        results.append(contentsOf: DiffableResult(identifier: \"isUnknownExtension\").trackDifference(actual: self.isUnknownExtension, expected: castObject.isUnknownExtension))\n        results.append(contentsOf: DiffableResult(identifier: \"isGeneric\").trackDifference(actual: self.isGeneric, expected: castObject.isGeneric))\n        results.append(contentsOf: DiffableResult(identifier: \"localName\").trackDifference(actual: self.localName, expected: castObject.localName))\n        results.append(contentsOf: DiffableResult(identifier: \"rawVariables\").trackDifference(actual: self.rawVariables, expected: castObject.rawVariables))\n        results.append(contentsOf: DiffableResult(identifier: \"rawMethods\").trackDifference(actual: self.rawMethods, expected: castObject.rawMethods))\n        results.append(contentsOf: DiffableResult(identifier: \"rawSubscripts\").trackDifference(actual: self.rawSubscripts, expected: castObject.rawSubscripts))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"inheritedTypes\").trackDifference(actual: self.inheritedTypes, expected: castObject.inheritedTypes))\n        results.append(contentsOf: DiffableResult(identifier: \"inherits\").trackDifference(actual: self.inherits, expected: castObject.inherits))\n        results.append(contentsOf: DiffableResult(identifier: \"containedTypes\").trackDifference(actual: self.containedTypes, expected: castObject.containedTypes))\n        results.append(contentsOf: DiffableResult(identifier: \"parentName\").trackDifference(actual: self.parentName, expected: castObject.parentName))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        results.append(contentsOf: DiffableResult(identifier: \"fileName\").trackDifference(actual: self.fileName, expected: castObject.fileName))\n        results.append(contentsOf: DiffableResult(identifier: \"genericRequirements\").trackDifference(actual: self.genericRequirements, expected: castObject.genericRequirements))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.module)\n        hasher.combine(self.imports)\n        hasher.combine(self.typealiases)\n        hasher.combine(self.isExtension)\n        hasher.combine(self.accessLevel)\n        hasher.combine(self.isUnknownExtension)\n        hasher.combine(self.isGeneric)\n        hasher.combine(self.localName)\n        hasher.combine(self.rawVariables)\n        hasher.combine(self.rawMethods)\n        hasher.combine(self.rawSubscripts)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.inheritedTypes)\n        hasher.combine(self.inherits)\n        hasher.combine(self.containedTypes)\n        hasher.combine(self.parentName)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        hasher.combine(self.fileName)\n        hasher.combine(self.genericRequirements)\n        hasher.combine(kind)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Type else { return false }\n        if self.module != rhs.module { return false }\n        if self.imports != rhs.imports { return false }\n        if self.typealiases != rhs.typealiases { return false }\n        if self.isExtension != rhs.isExtension { return false }\n        if self.accessLevel != rhs.accessLevel { return false }\n        if self.isUnknownExtension != rhs.isUnknownExtension { return false }\n        if self.isGeneric != rhs.isGeneric { return false }\n        if self.localName != rhs.localName { return false }\n        if self.rawVariables != rhs.rawVariables { return false }\n        if self.rawMethods != rhs.rawMethods { return false }\n        if self.rawSubscripts != rhs.rawSubscripts { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.inheritedTypes != rhs.inheritedTypes { return false }\n        if self.inherits != rhs.inherits { return false }\n        if self.containedTypes != rhs.containedTypes { return false }\n        if self.parentName != rhs.parentName { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        if self.fileName != rhs.fileName { return false }\n        if self.kind != rhs.kind { return false }\n        if self.genericRequirements != rhs.genericRequirements { return false }\n        return true\n    }\n\n// sourcery:inline:Type.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.module = aDecoder.decode(forKey: \"module\")\n            guard let imports: [Import] = aDecoder.decode(forKey: \"imports\") else { \n                withVaList([\"imports\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.imports = imports\n            guard let typealiases: [String: Typealias] = aDecoder.decode(forKey: \"typealiases\") else { \n                withVaList([\"typealiases\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typealiases = typealiases\n            self.isExtension = aDecoder.decode(forKey: \"isExtension\")\n            guard let _kind: String = aDecoder.decode(forKey: \"_kind\") else { \n                withVaList([\"_kind\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self._kind = _kind\n            guard let accessLevel: String = aDecoder.decode(forKey: \"accessLevel\") else { \n                withVaList([\"accessLevel\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.accessLevel = accessLevel\n            self.isGeneric = aDecoder.decode(forKey: \"isGeneric\")\n            guard let localName: String = aDecoder.decode(forKey: \"localName\") else { \n                withVaList([\"localName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.localName = localName\n            guard let rawVariables: [Variable] = aDecoder.decode(forKey: \"rawVariables\") else { \n                withVaList([\"rawVariables\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.rawVariables = rawVariables\n            guard let rawMethods: [Method] = aDecoder.decode(forKey: \"rawMethods\") else { \n                withVaList([\"rawMethods\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.rawMethods = rawMethods\n            guard let rawSubscripts: [Subscript] = aDecoder.decode(forKey: \"rawSubscripts\") else { \n                withVaList([\"rawSubscripts\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.rawSubscripts = rawSubscripts\n            self.bodyBytesRange = aDecoder.decode(forKey: \"bodyBytesRange\")\n            self.completeDeclarationRange = aDecoder.decode(forKey: \"completeDeclarationRange\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            guard let inheritedTypes: [String] = aDecoder.decode(forKey: \"inheritedTypes\") else { \n                withVaList([\"inheritedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.inheritedTypes = inheritedTypes\n            guard let based: [String: String] = aDecoder.decode(forKey: \"based\") else { \n                withVaList([\"based\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.based = based\n            guard let basedTypes: [String: Type] = aDecoder.decode(forKey: \"basedTypes\") else { \n                withVaList([\"basedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.basedTypes = basedTypes\n            guard let inherits: [String: Type] = aDecoder.decode(forKey: \"inherits\") else { \n                withVaList([\"inherits\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.inherits = inherits\n            guard let implements: [String: Type] = aDecoder.decode(forKey: \"implements\") else { \n                withVaList([\"implements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.implements = implements\n            guard let containedTypes: [Type] = aDecoder.decode(forKey: \"containedTypes\") else { \n                withVaList([\"containedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.containedTypes = containedTypes\n            guard let containedType: [String: Type] = aDecoder.decode(forKey: \"containedType\") else { \n                withVaList([\"containedType\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.containedType = containedType\n            self.parentName = aDecoder.decode(forKey: \"parentName\")\n            self.parent = aDecoder.decode(forKey: \"parent\")\n            self.supertype = aDecoder.decode(forKey: \"supertype\")\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            self.path = aDecoder.decode(forKey: \"path\")\n            guard let genericRequirements: [GenericRequirement] = aDecoder.decode(forKey: \"genericRequirements\") else { \n                withVaList([\"genericRequirements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericRequirements = genericRequirements\n            self.fileName = aDecoder.decode(forKey: \"fileName\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.module, forKey: \"module\")\n            aCoder.encode(self.imports, forKey: \"imports\")\n            aCoder.encode(self.typealiases, forKey: \"typealiases\")\n            aCoder.encode(self.isExtension, forKey: \"isExtension\")\n            aCoder.encode(self._kind, forKey: \"_kind\")\n            aCoder.encode(self.accessLevel, forKey: \"accessLevel\")\n            aCoder.encode(self.isGeneric, forKey: \"isGeneric\")\n            aCoder.encode(self.localName, forKey: \"localName\")\n            aCoder.encode(self.rawVariables, forKey: \"rawVariables\")\n            aCoder.encode(self.rawMethods, forKey: \"rawMethods\")\n            aCoder.encode(self.rawSubscripts, forKey: \"rawSubscripts\")\n            aCoder.encode(self.bodyBytesRange, forKey: \"bodyBytesRange\")\n            aCoder.encode(self.completeDeclarationRange, forKey: \"completeDeclarationRange\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.inheritedTypes, forKey: \"inheritedTypes\")\n            aCoder.encode(self.based, forKey: \"based\")\n            aCoder.encode(self.basedTypes, forKey: \"basedTypes\")\n            aCoder.encode(self.inherits, forKey: \"inherits\")\n            aCoder.encode(self.implements, forKey: \"implements\")\n            aCoder.encode(self.containedTypes, forKey: \"containedTypes\")\n            aCoder.encode(self.containedType, forKey: \"containedType\")\n            aCoder.encode(self.parentName, forKey: \"parentName\")\n            aCoder.encode(self.parent, forKey: \"parent\")\n            aCoder.encode(self.supertype, forKey: \"supertype\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.path, forKey: \"path\")\n            aCoder.encode(self.genericRequirements, forKey: \"genericRequirements\")\n            aCoder.encode(self.fileName, forKey: \"fileName\")\n        }\n// sourcery:end\n\n}\n\nextension Type {\n\n    // sourcery: skipDescription, skipJSExport\n    /// :nodoc:\n    var isClass: Bool {\n        let isNotClass = self is Struct || self is Enum || self is Protocol\n        return !isNotClass && !isExtension\n    }\n}\n\n/// Extends type so that inner types can be accessed via KVC e.g. Parent.Inner.Children\nextension Type {\n    /// :nodoc:\n    override public func value(forUndefinedKey key: String) -> Any? {\n        if let innerType = containedTypes.lazy.filter({ $0.localName == key }).first {\n            return innerType\n        }\n\n        return super.value(forUndefinedKey: key)\n    }\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/AST/TypeName/Closure.swift",
    "content": "#if canImport(ObjectiveC)\nimport Foundation\n\n/// Describes closure type\n@objcMembers\npublic final class ClosureType: NSObject, SourceryModel, Diffable {\n\n    /// Type name used in declaration with stripped whitespaces and new lines\n    public let name: String\n\n    /// List of closure parameters\n    public let parameters: [ClosureParameter]\n\n    /// Return value type name\n    public let returnTypeName: TypeName\n\n    /// Actual return value type name if declaration uses typealias, otherwise just a `returnTypeName`\n    public var actualReturnTypeName: TypeName {\n        return returnTypeName.actualTypeName ?? returnTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Actual return value type, if known\n    public var returnType: Type?\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is optional\n    public var isOptionalReturnType: Bool {\n        return returnTypeName.isOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is implicitly unwrapped optional\n    public var isImplicitlyUnwrappedOptionalReturnType: Bool {\n        return returnTypeName.isImplicitlyUnwrappedOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Return value type name without attributes and optional type information\n    public var unwrappedReturnTypeName: String {\n        return returnTypeName.unwrappedTypeName\n    }\n    \n    /// Whether method is async method\n    public let isAsync: Bool\n\n    /// async keyword\n    public let asyncKeyword: String?\n\n    /// Whether closure throws\n    public let `throws`: Bool\n\n    /// throws or rethrows keyword\n    public let throwsOrRethrowsKeyword: String?\n\n    /// Type of thrown error if specified\n    public let throwsTypeName: TypeName?\n\n    /// :nodoc:\n    public init(name: String, parameters: [ClosureParameter], returnTypeName: TypeName, returnType: Type? = nil, asyncKeyword: String? = nil, throwsOrRethrowsKeyword: String? = nil, throwsTypeName: TypeName? = nil) {\n        self.name = name\n        self.parameters = parameters\n        self.returnTypeName = returnTypeName\n        self.returnType = returnType\n        self.asyncKeyword = asyncKeyword\n        self.isAsync = asyncKeyword != nil\n        self.throwsOrRethrowsKeyword = throwsOrRethrowsKeyword\n        self.`throws` = throwsOrRethrowsKeyword != nil && !(throwsTypeName?.isNever ?? false)\n        self.throwsTypeName = throwsTypeName\n    }\n\n    public var asSource: String {\n        \"\\(parameters.asSource)\\(asyncKeyword != nil ? \" \\(asyncKeyword!)\" : \"\")\\(throwsOrRethrowsKeyword != nil ? \" \\(throwsOrRethrowsKeyword!)\" : \"\") -> \\(returnTypeName.asSource)\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"parameters = \\(String(describing: self.parameters)), \")\n        string.append(\"returnTypeName = \\(String(describing: self.returnTypeName)), \")\n        string.append(\"actualReturnTypeName = \\(String(describing: self.actualReturnTypeName)), \")\n        string.append(\"isAsync = \\(String(describing: self.isAsync)), \")\n        string.append(\"asyncKeyword = \\(String(describing: self.asyncKeyword)), \")\n        string.append(\"`throws` = \\(String(describing: self.`throws`)), \")\n        string.append(\"throwsOrRethrowsKeyword = \\(String(describing: self.throwsOrRethrowsKeyword)), \")\n        string.append(\"throwsTypeName = \\(String(describing: self.throwsTypeName)), \")\n        string.append(\"asSource = \\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? ClosureType else {\n            results.append(\"Incorrect type <expected: ClosureType, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"parameters\").trackDifference(actual: self.parameters, expected: castObject.parameters))\n        results.append(contentsOf: DiffableResult(identifier: \"returnTypeName\").trackDifference(actual: self.returnTypeName, expected: castObject.returnTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"isAsync\").trackDifference(actual: self.isAsync, expected: castObject.isAsync))\n        results.append(contentsOf: DiffableResult(identifier: \"asyncKeyword\").trackDifference(actual: self.asyncKeyword, expected: castObject.asyncKeyword))\n        results.append(contentsOf: DiffableResult(identifier: \"`throws`\").trackDifference(actual: self.`throws`, expected: castObject.`throws`))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsOrRethrowsKeyword\").trackDifference(actual: self.throwsOrRethrowsKeyword, expected: castObject.throwsOrRethrowsKeyword))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsTypeName\").trackDifference(actual: self.throwsTypeName, expected: castObject.throwsTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.parameters)\n        hasher.combine(self.returnTypeName)\n        hasher.combine(self.isAsync)\n        hasher.combine(self.asyncKeyword)\n        hasher.combine(self.`throws`)\n        hasher.combine(self.throwsOrRethrowsKeyword)\n        hasher.combine(self.throwsTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? ClosureType else { return false }\n        if self.name != rhs.name { return false }\n        if self.parameters != rhs.parameters { return false }\n        if self.returnTypeName != rhs.returnTypeName { return false }\n        if self.isAsync != rhs.isAsync { return false }\n        if self.asyncKeyword != rhs.asyncKeyword { return false }\n        if self.`throws` != rhs.`throws` { return false }\n        if self.throwsOrRethrowsKeyword != rhs.throwsOrRethrowsKeyword { return false }\n        if self.throwsTypeName != rhs.throwsTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:ClosureType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let parameters: [ClosureParameter] = aDecoder.decode(forKey: \"parameters\") else { \n                withVaList([\"parameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.parameters = parameters\n            guard let returnTypeName: TypeName = aDecoder.decode(forKey: \"returnTypeName\") else { \n                withVaList([\"returnTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.returnTypeName = returnTypeName\n            self.returnType = aDecoder.decode(forKey: \"returnType\")\n            self.isAsync = aDecoder.decode(forKey: \"isAsync\")\n            self.asyncKeyword = aDecoder.decode(forKey: \"asyncKeyword\")\n            self.`throws` = aDecoder.decode(forKey: \"`throws`\")\n            self.throwsOrRethrowsKeyword = aDecoder.decode(forKey: \"throwsOrRethrowsKeyword\")\n            self.throwsTypeName = aDecoder.decode(forKey: \"throwsTypeName\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.parameters, forKey: \"parameters\")\n            aCoder.encode(self.returnTypeName, forKey: \"returnTypeName\")\n            aCoder.encode(self.returnType, forKey: \"returnType\")\n            aCoder.encode(self.isAsync, forKey: \"isAsync\")\n            aCoder.encode(self.asyncKeyword, forKey: \"asyncKeyword\")\n            aCoder.encode(self.`throws`, forKey: \"`throws`\")\n            aCoder.encode(self.throwsOrRethrowsKeyword, forKey: \"throwsOrRethrowsKeyword\")\n            aCoder.encode(self.throwsTypeName, forKey: \"throwsTypeName\")\n        }\n// sourcery:end\n\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/AST/TypeName/GenericTypeParameter.swift",
    "content": "#if canImport(ObjectiveC)\nimport Foundation\n\n/// Descibes Swift generic type parameter\n@objcMembers\npublic final class GenericTypeParameter: NSObject, SourceryModel, Diffable {\n\n    /// Generic parameter type name\n    public var typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Generic parameter type, if known\n    public var type: Type?\n\n    /// :nodoc:\n    public init(typeName: TypeName, type: Type? = nil) {\n        self.typeName = typeName\n        self.type = type\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"typeName = \\(String(describing: self.typeName))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? GenericTypeParameter else {\n            results.append(\"Incorrect type <expected: GenericTypeParameter, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.typeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? GenericTypeParameter else { return false }\n        if self.typeName != rhs.typeName { return false }\n        return true\n    }\n\n// sourcery:inline:GenericTypeParameter.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n        }\n\n// sourcery:end\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/AST/TypeName/Tuple.swift",
    "content": "#if canImport(ObjectiveC)\nimport Foundation\n\n/// Describes tuple type\n@objcMembers\npublic final class TupleType: NSObject, SourceryModel, Diffable {\n\n    /// Type name used in declaration\n    public var name: String\n\n    /// Tuple elements\n    public var elements: [TupleElement]\n\n    /// :nodoc:\n    public init(name: String, elements: [TupleElement]) {\n        self.name = name\n        self.elements = elements\n    }\n\n    /// :nodoc:\n    public init(elements: [TupleElement]) {\n        self.name = elements.asSource\n        self.elements = elements\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"elements = \\(String(describing: self.elements))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? TupleType else {\n            results.append(\"Incorrect type <expected: TupleType, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"elements\").trackDifference(actual: self.elements, expected: castObject.elements))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.elements)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? TupleType else { return false }\n        if self.name != rhs.name { return false }\n        if self.elements != rhs.elements { return false }\n        return true\n    }\n\n// sourcery:inline:TupleType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let elements: [TupleElement] = aDecoder.decode(forKey: \"elements\") else { \n                withVaList([\"elements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.elements = elements\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.elements, forKey: \"elements\")\n        }\n// sourcery:end\n}\n\n/// Describes tuple type element\n@objcMembers\npublic final class TupleElement: NSObject, SourceryModel, Typed, Diffable {\n\n    /// Tuple element name\n    public let name: String?\n\n    /// Tuple element type name\n    public var typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Tuple element type, if known\n    public var type: Type?\n\n    /// :nodoc:\n    public init(name: String? = nil, typeName: TypeName, type: Type? = nil) {\n        self.name = name\n        self.typeName = typeName\n        self.type = type\n    }\n\n    public var asSource: String {\n        // swiftlint:disable:next force_unwrapping\n        \"\\(name != nil ? \"\\(name!): \" : \"\")\\(typeName.asSource)\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"typeName = \\(String(describing: self.typeName)), \")\n        string.append(\"asSource = \\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? TupleElement else {\n            results.append(\"Incorrect type <expected: TupleElement, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? TupleElement else { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        return true\n    }\n\n// sourcery:inline:TupleElement.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.name = aDecoder.decode(forKey: \"name\")\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n        }\n// sourcery:end\n}\n\nextension Array where Element == TupleElement {\n    public var asSource: String {\n        \"(\\(map { $0.asSource }.joined(separator: \", \")))\"\n    }\n\n    public var asTypeName: String {\n        \"(\\(map { $0.typeName.asSource }.joined(separator: \", \")))\"\n    }\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/AST/TypeName/TypeName.swift",
    "content": "//\n// Created by Krzysztof Zabłocki on 25/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// Describes name of the type used in typed declaration (variable, method parameter or return value etc.)\n@objcMembers\npublic final class TypeName: NSObject, SourceryModelWithoutDescription, LosslessStringConvertible, Diffable {\n    /// :nodoc:\n    public init(name: String,\n                actualTypeName: TypeName? = nil,\n                unwrappedTypeName: String? = nil,\n                attributes: AttributeList = [:],\n                isOptional: Bool = false,\n                isImplicitlyUnwrappedOptional: Bool = false,\n                tuple: TupleType? = nil,\n                array: ArrayType? = nil,\n                dictionary: DictionaryType? = nil,\n                closure: ClosureType? = nil,\n                set: SetType? = nil,\n                generic: GenericType? = nil,\n                isProtocolComposition: Bool = false) {\n\n        let optionalSuffix: String\n        // TODO: TBR\n        let hasPrefix: Bool = name.hasPrefix(\"Optional<\") as Bool\n        let containsName: Bool = name.contains(\" where \") as Bool\n        if !hasPrefix && !containsName {\n            if isOptional {\n                optionalSuffix = \"?\"\n            } else if isImplicitlyUnwrappedOptional {\n                optionalSuffix = \"!\"\n            } else {\n                optionalSuffix = \"\"\n            }\n        } else {\n            optionalSuffix = \"\"\n        }\n\n        self.name = name + optionalSuffix\n        self.actualTypeName = actualTypeName\n        self.unwrappedTypeName = unwrappedTypeName ?? name\n        self.tuple = tuple\n        self.array = array\n        self.dictionary = dictionary\n        self.closure = closure\n        self.generic = generic\n        self.isOptional = isOptional || isImplicitlyUnwrappedOptional\n        self.isImplicitlyUnwrappedOptional = isImplicitlyUnwrappedOptional\n        self.isProtocolComposition = isProtocolComposition\n        self.set = set\n        self.attributes = attributes\n        self.modifiers = []\n        super.init()\n    }\n\n    /// Type name used in declaration\n    public var name: String\n\n    /// The generics of this TypeName\n    public var generic: GenericType?\n\n    /// Whether this TypeName is generic\n    public var isGeneric: Bool {\n        actualTypeName?.generic != nil || generic != nil\n    }\n\n    /// Whether this TypeName is protocol composition\n    public var isProtocolComposition: Bool\n\n    // sourcery: skipEquality\n    /// Actual type name if given type name is a typealias\n    public var actualTypeName: TypeName?\n\n    /// Type name attributes, i.e. `@escaping`\n    public var attributes: AttributeList\n\n    /// Modifiers, i.e. `escaping`\n    public var modifiers: [SourceryModifier]\n\n    // sourcery: skipEquality\n    /// Whether type is optional\n    public let isOptional: Bool\n\n    // sourcery: skipEquality\n    /// Whether type is implicitly unwrapped optional\n    public let isImplicitlyUnwrappedOptional: Bool\n\n    // sourcery: skipEquality\n    /// Type name without attributes and optional type information\n    public var unwrappedTypeName: String\n\n    // sourcery: skipEquality\n    /// Whether type is void (`Void` or `()`)\n    public var isVoid: Bool {\n        return name == \"Void\" || name == \"()\" || unwrappedTypeName == \"Void\"\n    }\n\n    /// Whether type is a tuple\n    public var isTuple: Bool {\n        actualTypeName?.tuple != nil || tuple != nil\n    }\n\n    /// Tuple type data\n    public var tuple: TupleType?\n\n    /// Whether type is an array\n    public var isArray: Bool {\n        actualTypeName?.array != nil || array != nil\n    }\n\n    /// Array type data\n    public var array: ArrayType?\n\n    /// Whether type is a dictionary\n    public var isDictionary: Bool {\n        actualTypeName?.dictionary != nil || dictionary != nil\n    }\n\n    /// Dictionary type data\n    public var dictionary: DictionaryType?\n\n    /// Whether type is a closure\n    public var isClosure: Bool {\n        actualTypeName?.closure != nil || closure != nil\n    }\n\n    /// Closure type data\n    public var closure: ClosureType?\n\n    /// Whether type is a Set\n    public var isSet: Bool {\n        actualTypeName?.set != nil || set != nil\n    }\n\n    /// Set type data\n    public var set: SetType?\n\n    /// Whether type is `Never`\n    public var isNever: Bool {\n        return name == \"Never\"\n    }\n\n    /// Prints typename as it would appear on definition\n    public var asSource: String {\n        // TODO: TBR special treatment\n        let specialTreatment: Bool = isOptional && name.hasPrefix(\"Optional<\")\n\n        let attributeValues: [Attribute] = attributes.flatMap { $0.value }\n        let attributeValuesUnsorted: [String] = attributeValues.map { $0.asSource }\n        var attributes: [String] = attributeValuesUnsorted.sorted()\n        attributes.append(contentsOf: modifiers.map({ $0.asSource }))\n        attributes.append(contentsOf: [specialTreatment ? name : unwrappedTypeName])\n        var description = attributes.joined(separator: \" \")\n\n//        if let _ = self.dictionary { // array and dictionary cases are covered by the unwrapped type name\n//            description.append(dictionary.asSource)\n//        } else if let _ = self.array {\n//            description.append(array.asSource)\n//        } else if let _ = self.generic {\n//            let arguments = generic.typeParameters\n//              .map({ $0.typeName.asSource })\n//              .joined(separator: \", \")\n//            description.append(\"<\\(arguments)>\")\n//        }\n        if !specialTreatment {\n            if isImplicitlyUnwrappedOptional {\n                description.append(\"!\")\n            } else if isOptional {\n                description.append(\"?\")\n            }\n        }\n\n        return description\n    }\n\n    public override var description: String {\n        var description: [String] = attributes.flatMap({ $0.value }).map({ $0.asSource }).sorted()\n        description.append(contentsOf: modifiers.map({ $0.asSource }))\n        description.append(contentsOf: [name])\n        return description.joined(separator: \" \")\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? TypeName else {\n            results.append(\"Incorrect type <expected: TypeName, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"generic\").trackDifference(actual: self.generic, expected: castObject.generic))\n        results.append(contentsOf: DiffableResult(identifier: \"isProtocolComposition\").trackDifference(actual: self.isProtocolComposition, expected: castObject.isProtocolComposition))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        results.append(contentsOf: DiffableResult(identifier: \"tuple\").trackDifference(actual: self.tuple, expected: castObject.tuple))\n        results.append(contentsOf: DiffableResult(identifier: \"array\").trackDifference(actual: self.array, expected: castObject.array))\n        results.append(contentsOf: DiffableResult(identifier: \"dictionary\").trackDifference(actual: self.dictionary, expected: castObject.dictionary))\n        results.append(contentsOf: DiffableResult(identifier: \"closure\").trackDifference(actual: self.closure, expected: castObject.closure))\n        results.append(contentsOf: DiffableResult(identifier: \"set\").trackDifference(actual: self.set, expected: castObject.set))\n        return results\n    }\n\n    \n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.generic)\n        hasher.combine(self.isProtocolComposition)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        hasher.combine(self.tuple)\n        hasher.combine(self.array)\n        hasher.combine(self.dictionary)\n        hasher.combine(self.closure)\n        hasher.combine(self.set)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? TypeName else { return false }\n        if self.name != rhs.name { return false }\n        if self.generic != rhs.generic { return false }\n        if self.isProtocolComposition != rhs.isProtocolComposition { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        if self.tuple != rhs.tuple { return false }\n        if self.array != rhs.array { return false }\n        if self.dictionary != rhs.dictionary { return false }\n        if self.closure != rhs.closure { return false }\n        if self.set != rhs.set { return false }\n        return true\n    }\n\n// sourcery:inline:TypeName.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            self.generic = aDecoder.decode(forKey: \"generic\")\n            self.isProtocolComposition = aDecoder.decode(forKey: \"isProtocolComposition\")\n            self.actualTypeName = aDecoder.decode(forKey: \"actualTypeName\")\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            self.isOptional = aDecoder.decode(forKey: \"isOptional\")\n            self.isImplicitlyUnwrappedOptional = aDecoder.decode(forKey: \"isImplicitlyUnwrappedOptional\")\n            guard let unwrappedTypeName: String = aDecoder.decode(forKey: \"unwrappedTypeName\") else { \n                withVaList([\"unwrappedTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.unwrappedTypeName = unwrappedTypeName\n            self.tuple = aDecoder.decode(forKey: \"tuple\")\n            self.array = aDecoder.decode(forKey: \"array\")\n            self.dictionary = aDecoder.decode(forKey: \"dictionary\")\n            self.closure = aDecoder.decode(forKey: \"closure\")\n            self.set = aDecoder.decode(forKey: \"set\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.generic, forKey: \"generic\")\n            aCoder.encode(self.isProtocolComposition, forKey: \"isProtocolComposition\")\n            aCoder.encode(self.actualTypeName, forKey: \"actualTypeName\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.isOptional, forKey: \"isOptional\")\n            aCoder.encode(self.isImplicitlyUnwrappedOptional, forKey: \"isImplicitlyUnwrappedOptional\")\n            aCoder.encode(self.unwrappedTypeName, forKey: \"unwrappedTypeName\")\n            aCoder.encode(self.tuple, forKey: \"tuple\")\n            aCoder.encode(self.array, forKey: \"array\")\n            aCoder.encode(self.dictionary, forKey: \"dictionary\")\n            aCoder.encode(self.closure, forKey: \"closure\")\n            aCoder.encode(self.set, forKey: \"set\")\n        }\n// sourcery:end\n\n    // sourcery: skipEquality, skipDescription\n    /// :nodoc:\n    public override var debugDescription: String {\n        return name\n    }\n\n    public convenience init(_ description: String) {\n        self.init(name: description, actualTypeName: nil)\n    }\n}\n\nextension TypeName {\n    public static func unknown(description: String?, attributes: AttributeList = [:]) -> TypeName {\n        if let description = description {\n            Log.astWarning(\"Unknown type, please add type attribution to \\(description)\")\n        } else {\n            Log.astWarning(\"Unknown type, please add type attribution\")\n        }\n        return TypeName(name: \"UnknownTypeSoAddTypeAttributionToVariable\", attributes: attributes)\n    }\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/AST/Variable.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// :nodoc:\npublic typealias SourceryVariable = Variable\n\n/// Defines variable\n@objcMembers\npublic final class Variable: NSObject, SourceryModel, Typed, Annotated, Documented, Definition, Diffable {\n\n    /// Variable name\n    public let name: String\n\n    /// Variable type name\n    public let typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Variable type, if known, i.e. if the type is declared in the scanned sources.\n    /// For explanation, see <https://cdn.rawgit.com/krzysztofzablocki/Sourcery/master/docs/writing-templates.html#what-are-em-known-em-and-em-unknown-em-types>\n    public var type: Type?\n\n    /// Whether variable is computed and not stored\n    public let isComputed: Bool\n    \n    /// Whether variable is async\n    public let isAsync: Bool\n    \n    /// Whether variable throws\n    public let `throws`: Bool\n\n    /// Type of thrown error if specified\n    public let throwsTypeName: TypeName?\n\n    /// Whether variable is static\n    public let isStatic: Bool\n\n    /// Variable read access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let readAccess: String\n\n    /// Variable write access, i.e. `internal`, `private`, `fileprivate`, `public`, `open`.\n    /// For immutable variables this value is empty string\n    public let writeAccess: String\n\n    /// composed access level\n    /// sourcery: skipJSExport\n    public var accessLevel: (read: AccessLevel, write: AccessLevel) {\n        (read: AccessLevel(rawValue: readAccess) ?? .none, AccessLevel(rawValue: writeAccess) ?? .none)\n    }\n\n    /// Whether variable is mutable or not\n    public var isMutable: Bool {\n        return writeAccess != AccessLevel.none.rawValue\n    }\n\n    /// Variable default value expression\n    public var defaultValue: String?\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public var annotations: Annotations = [:]\n\n    public var documentation: Documentation = []\n\n    /// Variable attributes, i.e. `@IBOutlet`, `@IBInspectable`\n    public var attributes: AttributeList\n\n    /// Modifiers, i.e. `private`\n    public var modifiers: [SourceryModifier]\n\n    /// Whether variable is final or not\n    public var isFinal: Bool {\n        return modifiers.contains { $0.name == Attribute.Identifier.final.rawValue }\n    }\n\n    /// Whether variable is lazy or not\n    public var isLazy: Bool {\n        return modifiers.contains { $0.name == Attribute.Identifier.lazy.rawValue }\n    }\n\n    /// Whether variable is dynamic or not\n    public var isDynamic: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.dynamic.rawValue }\n    }\n\n    /// Reference to type name where the variable is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc\n    public internal(set) var definedInTypeName: TypeName?\n\n    /// Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a `definedInTypeName`\n    public var actualDefinedInTypeName: TypeName? {\n        return definedInTypeName?.actualTypeName ?? definedInTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Reference to actual type where the object is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc or type is unknown\n    public var definedInType: Type?\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                typeName: TypeName,\n                type: Type? = nil,\n                accessLevel: (read: AccessLevel, write: AccessLevel) = (.internal, .internal),\n                isComputed: Bool = false,\n                isAsync: Bool = false,\n                `throws`: Bool = false,\n                throwsTypeName: TypeName? = nil,\n                isStatic: Bool = false,\n                defaultValue: String? = nil,\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                definedInTypeName: TypeName? = nil) {\n\n        self.name = name\n        self.typeName = typeName\n        self.type = type\n        self.isComputed = isComputed\n        self.isAsync = isAsync\n        self.`throws` = `throws`\n        self.throwsTypeName = throwsTypeName\n        self.isStatic = isStatic\n        self.defaultValue = defaultValue\n        self.readAccess = accessLevel.read.rawValue\n        self.writeAccess = accessLevel.write.rawValue\n        self.attributes = attributes\n        self.modifiers = modifiers\n        self.annotations = annotations\n        self.documentation = documentation\n        self.definedInTypeName = definedInTypeName\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"name = \\(String(describing: self.name)), \")\n        string.append(\"typeName = \\(String(describing: self.typeName)), \")\n        string.append(\"isComputed = \\(String(describing: self.isComputed)), \")\n        string.append(\"isAsync = \\(String(describing: self.isAsync)), \")\n        string.append(\"`throws` = \\(String(describing: self.`throws`)), \")\n        string.append(\"throwsTypeName = \\(String(describing: self.throwsTypeName)), \")\n        string.append(\"isStatic = \\(String(describing: self.isStatic)), \")\n        string.append(\"readAccess = \\(String(describing: self.readAccess)), \")\n        string.append(\"writeAccess = \\(String(describing: self.writeAccess)), \")\n        string.append(\"accessLevel = \\(String(describing: self.accessLevel)), \")\n        string.append(\"isMutable = \\(String(describing: self.isMutable)), \")\n        string.append(\"defaultValue = \\(String(describing: self.defaultValue)), \")\n        string.append(\"annotations = \\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\(String(describing: self.documentation)), \")\n        string.append(\"attributes = \\(String(describing: self.attributes)), \")\n        string.append(\"modifiers = \\(String(describing: self.modifiers)), \")\n        string.append(\"isFinal = \\(String(describing: self.isFinal)), \")\n        string.append(\"isLazy = \\(String(describing: self.isLazy)), \")\n        string.append(\"isDynamic = \\(String(describing: self.isDynamic)), \")\n        string.append(\"definedInTypeName = \\(String(describing: self.definedInTypeName)), \")\n        string.append(\"actualDefinedInTypeName = \\(String(describing: self.actualDefinedInTypeName))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Variable else {\n            results.append(\"Incorrect type <expected: Variable, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        results.append(contentsOf: DiffableResult(identifier: \"type\").trackDifference(actual: self.type, expected: castObject.type))\n        results.append(contentsOf: DiffableResult(identifier: \"isComputed\").trackDifference(actual: self.isComputed, expected: castObject.isComputed))\n        results.append(contentsOf: DiffableResult(identifier: \"isAsync\").trackDifference(actual: self.isAsync, expected: castObject.isAsync))\n        results.append(contentsOf: DiffableResult(identifier: \"`throws`\").trackDifference(actual: self.`throws`, expected: castObject.`throws`))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsTypeName\").trackDifference(actual: self.throwsTypeName, expected: castObject.throwsTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"isStatic\").trackDifference(actual: self.isStatic, expected: castObject.isStatic))\n        results.append(contentsOf: DiffableResult(identifier: \"readAccess\").trackDifference(actual: self.readAccess, expected: castObject.readAccess))\n        results.append(contentsOf: DiffableResult(identifier: \"writeAccess\").trackDifference(actual: self.writeAccess, expected: castObject.writeAccess))\n        results.append(contentsOf: DiffableResult(identifier: \"defaultValue\").trackDifference(actual: self.defaultValue, expected: castObject.defaultValue))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        results.append(contentsOf: DiffableResult(identifier: \"definedInTypeName\").trackDifference(actual: self.definedInTypeName, expected: castObject.definedInTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        hasher.combine(self.isComputed)\n        hasher.combine(self.isAsync)\n        hasher.combine(self.`throws`)\n        hasher.combine(self.throwsTypeName)\n        hasher.combine(self.isStatic)\n        hasher.combine(self.readAccess)\n        hasher.combine(self.writeAccess)\n        hasher.combine(self.defaultValue)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        hasher.combine(self.definedInTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Variable else { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.isComputed != rhs.isComputed { return false }\n        if self.isAsync != rhs.isAsync { return false }\n        if self.`throws` != rhs.`throws` { return false }\n        if self.throwsTypeName != rhs.throwsTypeName { return false }\n        if self.isStatic != rhs.isStatic { return false }\n        if self.readAccess != rhs.readAccess { return false }\n        if self.writeAccess != rhs.writeAccess { return false }\n        if self.defaultValue != rhs.defaultValue { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        if self.definedInTypeName != rhs.definedInTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:Variable.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n            self.isComputed = aDecoder.decode(forKey: \"isComputed\")\n            self.isAsync = aDecoder.decode(forKey: \"isAsync\")\n            self.`throws` = aDecoder.decode(forKey: \"`throws`\")\n            self.throwsTypeName = aDecoder.decode(forKey: \"throwsTypeName\")\n            self.isStatic = aDecoder.decode(forKey: \"isStatic\")\n            guard let readAccess: String = aDecoder.decode(forKey: \"readAccess\") else { \n                withVaList([\"readAccess\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.readAccess = readAccess\n            guard let writeAccess: String = aDecoder.decode(forKey: \"writeAccess\") else { \n                withVaList([\"writeAccess\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.writeAccess = writeAccess\n            self.defaultValue = aDecoder.decode(forKey: \"defaultValue\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            self.definedInTypeName = aDecoder.decode(forKey: \"definedInTypeName\")\n            self.definedInType = aDecoder.decode(forKey: \"definedInType\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n            aCoder.encode(self.isComputed, forKey: \"isComputed\")\n            aCoder.encode(self.isAsync, forKey: \"isAsync\")\n            aCoder.encode(self.`throws`, forKey: \"`throws`\")\n            aCoder.encode(self.throwsTypeName, forKey: \"throwsTypeName\")\n            aCoder.encode(self.isStatic, forKey: \"isStatic\")\n            aCoder.encode(self.readAccess, forKey: \"readAccess\")\n            aCoder.encode(self.writeAccess, forKey: \"writeAccess\")\n            aCoder.encode(self.defaultValue, forKey: \"defaultValue\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.definedInTypeName, forKey: \"definedInTypeName\")\n            aCoder.encode(self.definedInType, forKey: \"definedInType\")\n        }\n// sourcery:end\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/Types.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\n#if canImport(ObjectiveC)\nimport Foundation\n\n// sourcery: skipJSExport\n/// Collection of scanned types for accessing in templates\n@objcMembers\npublic final class Types: NSObject, SourceryModel, Diffable {\n\n    /// :nodoc:\n    public let types: [Type]\n\n    /// All known typealiases\n    public let typealiases: [Typealias]\n\n    /// :nodoc:\n    public init(types: [Type], typealiases: [Typealias] = []) {\n        self.types = types\n        self.typealiases = typealiases\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\(Swift.type(of: self)): \"\n        string.append(\"types = \\(String(describing: self.types)), \")\n        string.append(\"typealiases = \\(String(describing: self.typealiases))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Types else {\n            results.append(\"Incorrect type <expected: Types, received: \\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"types\").trackDifference(actual: self.types, expected: castObject.types))\n        results.append(contentsOf: DiffableResult(identifier: \"typealiases\").trackDifference(actual: self.typealiases, expected: castObject.typealiases))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.types)\n        hasher.combine(self.typealiases)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Types else { return false }\n        if self.types != rhs.types { return false }\n        if self.typealiases != rhs.typealiases { return false }\n        return true\n    }\n\n// sourcery:inline:Types.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let types: [Type] = aDecoder.decode(forKey: \"types\") else { \n                withVaList([\"types\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.types = types\n            guard let typealiases: [Typealias] = aDecoder.decode(forKey: \"typealiases\") else { \n                withVaList([\"typealiases\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typealiases = typealiases\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.types, forKey: \"types\")\n            aCoder.encode(self.typealiases, forKey: \"typealiases\")\n        }\n// sourcery:end\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// :nodoc:\n    public lazy internal(set) var typesByName: [String: Type] = {\n        var typesByName = [String: Type]()\n        self.types.forEach { typesByName[$0.globalName] = $0 }\n        return typesByName\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// :nodoc:\n    public lazy internal(set) var typesaliasesByName: [String: Typealias] = {\n        var typesaliasesByName = [String: Typealias]()\n        self.typealiases.forEach { typesaliasesByName[$0.name] = $0 }\n        return typesaliasesByName\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known types, excluding protocols or protocol compositions.\n    public lazy internal(set) var all: [Type] = {\n        return self.types.filter { !($0 is Protocol || $0 is ProtocolComposition) }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known protocols\n    public lazy internal(set) var protocols: [Protocol] = {\n        return self.types.compactMap { $0 as? Protocol }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known protocol compositions\n    public lazy internal(set) var protocolCompositions: [ProtocolComposition] = {\n        return self.types.compactMap { $0 as? ProtocolComposition }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known classes\n    public lazy internal(set) var classes: [Class] = {\n        return self.all.compactMap { $0 as? Class }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known structs\n    public lazy internal(set) var structs: [Struct] = {\n        return self.all.compactMap { $0 as? Struct }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known enums\n    public lazy internal(set) var enums: [Enum] = {\n        return self.all.compactMap { $0 as? Enum }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known extensions\n    public lazy internal(set) var extensions: [Type] = {\n        return self.all.compactMap { $0.isExtension ? $0 : nil }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// Types based on any other type, grouped by its name, even if they are not known.\n    /// `types.based.MyType` returns list of types based on `MyType`\n    public lazy internal(set) var based: TypesCollection = {\n        TypesCollection(\n            types: self.types,\n            collection: { Array($0.based.keys) }\n        )\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// Classes inheriting from any known class, grouped by its name.\n    /// `types.inheriting.MyClass` returns list of types inheriting from `MyClass`\n    public lazy internal(set) var inheriting: TypesCollection = {\n        TypesCollection(\n            types: self.types,\n            collection: { Array($0.inherits.keys) },\n            validate: { type in\n                guard type is Class else {\n                    throw \"\\(type.name) is not a class and should be used with `implementing` or `based`\"\n                }\n            })\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// Types implementing known protocol, grouped by its name.\n    /// `types.implementing.MyProtocol` returns list of types implementing `MyProtocol`\n    public lazy internal(set) var implementing: TypesCollection = {\n        TypesCollection(\n            types: self.types,\n            collection: { Array($0.implements.keys) },\n            validate: { type in\n                guard type is Protocol else {\n                    throw \"\\(type.name) is a class and should be used with `inheriting` or `based`\"\n                }\n        })\n    }()\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Sources/macOS/TypesCollection.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// :nodoc:\n@objcMembers\npublic class TypesCollection: NSObject, AutoJSExport {\n    // sourcery:begin: skipJSExport\n    let all: [Type]\n    let types: [String: [Type]]\n    let validate: ((Type) throws -> Void)?\n    // sourcery:end\n\n    init(types: [Type], collection: (Type) -> [String], validate: ((Type) throws -> Void)? = nil) {\n        self.all = types\n        var content = [String: [Type]]()\n        self.all.forEach { type in\n            collection(type).forEach { name in\n                var list = content[name] ?? [Type]()\n                list.append(type)\n                content[name] = list\n            }\n        }\n        self.types = content\n        self.validate = validate\n    }\n\n    public func types(forKey key: String) throws -> [Type] {\n        // In some configurations, the types are keyed by \"ModuleName.TypeName\"\n        var longKey: String?\n\n        if let validate = validate {\n            guard let type = all.first(where: { $0.name == key }) else {\n                throw \"Unknown type \\(key), should be used with `based`\"\n            }\n\n            try validate(type)\n\n            if let module = type.module {\n                longKey = [module, type.name].joined(separator: \".\")\n            }\n        }\n\n        // If we find the types directly, return them\n        if let types = types[key] {\n            return types\n        }\n\n        // if we find a types for the longKey, return them\n        if let longKey = longKey, let types = types[longKey] {\n            return types\n        }\n\n        return []\n    }\n\n    /// :nodoc:\n    override public func value(forKey key: String) -> Any? {\n        do {\n            return try types(forKey: key)\n        } catch {\n            Log.error(error)\n            return nil\n        }\n    }\n\n    /// :nodoc:\n    public subscript(_ key: String) -> [Type] {\n        do {\n            return try types(forKey: key)\n        } catch {\n            Log.error(error)\n            return []\n        }\n    }\n\n    override public func responds(to aSelector: Selector!) -> Bool {\n        return true\n    }\n}\n#endif\n"
  },
  {
    "path": "SourceryRuntime/Supporting Files/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2017 Pixle. All rights reserved.</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "SourceryRuntime/Supporting Files/SourceryRuntime.h",
    "content": "#import <Cocoa/Cocoa.h>\n\n//! Project version number for SourceryRuntime.\nFOUNDATION_EXPORT double SourceryRuntimeVersionNumber;\n\n//! Project version string for SourceryRuntime.\nFOUNDATION_EXPORT const unsigned char SourceryRuntimeVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <SourceryRuntime/PublicHeader.h>\n\n\n"
  },
  {
    "path": "SourceryRuntime.podspec",
    "content": "Pod::Spec.new do |s|\n\n  s.name         = \"SourceryRuntime\"\n  s.version      = \"2.3.0\"\n  s.summary      = \"A tool that brings meta-programming to Swift, allowing you to code generate Swift code.\"\n  s.platform     = :osx, '10.15'\n\n  s.description  = <<-DESC\n                 A tool that brings meta-programming to Swift, allowing you to code generate Swift code.\n                   * Featuring daemon mode that allows you to write templates side-by-side with generated code.\n                   * Using SourceKit so you can scan your regular code.\n                   DESC\n\n  s.homepage     = \"https://github.com/krzysztofzablocki/Sourcery\"\n  s.license      = 'MIT'\n  s.author       = { \"Krzysztof Zabłocki\" => \"krzysztof.zablocki@pixle.pl\" }\n  s.social_media_url = \"https://twitter.com/merowing_\"\n  s.source       = { :http => \"https://github.com/krzysztofzablocki/Sourcery/releases/download/#{s.version}/sourcery-#{s.version}.zip\" }\n\n  s.source_files = \"SourceryRuntime/Sources/**/*.swift\"\n  \n  s.osx.deployment_target  = '10.15'\n  \n  s.dependency 'SourceryUtils'\nend\n"
  },
  {
    "path": "SourceryStencil/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2021 Pixle. All rights reserved.</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "SourceryStencil/SourceryStencil.h",
    "content": "//\n//  SourceryStencil.h\n//  SourceryStencil\n//\n//  Created by merowing on 3/19/21.\n//  Copyright © 2021 Pixle. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n//! Project version number for SourceryStencil.\nFOUNDATION_EXPORT double SourceryStencilVersionNumber;\n\n//! Project version string for SourceryStencil.\nFOUNDATION_EXPORT const unsigned char SourceryStencilVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <SourceryStencil/PublicHeader.h>\n\n\n"
  },
  {
    "path": "SourceryStencil/Sources/NewLineNode.swift",
    "content": "import Stencil\n\nclass NewLineNode: NodeType {\n    static let marker = \"__sourcery__newline__\"\n    enum Content {\n        case nodes([NodeType])\n        case reference(resolvable: Resolvable)\n    }\n\n    let token: Token?\n\n    class func parse(_ parser: TokenParser, token: Token) throws -> NodeType {\n        let components = token.components\n        guard components.count == 1 else {\n            throw TemplateSyntaxError(\n                \"\"\"\n                'newline' tag takes no arguments\n                \"\"\"\n            )\n        }\n\n        return NewLineNode()\n    }\n\n    init(token: Token? = nil) {\n        self.token = token\n    }\n\n    func render(_ context: Context) throws -> String {\n        return Self.marker\n    }\n}\n"
  },
  {
    "path": "SourceryStencil/Sources/StencilTemplate.swift",
    "content": "import Foundation\nimport Stencil\nimport PathKit\nimport StencilSwiftKit\nimport SourceryRuntime\n\npublic final class StencilTemplate: StencilSwiftKit.StencilSwiftTemplate {\n    private(set) public var sourcePath: Path = \"\"\n    \n    /// Trim leading / trailing whitespaces until content or newline tag appears\n    public var trimEnabled: Bool = false\n\n    public convenience init(path: Path) throws {\n        try self.init(path: path, templateString: try path.read())\n    }\n    \n    public convenience init(path: Path, templateString: String) throws {\n        self.init(templateString: templateString, environment: StencilTemplate.sourceryEnvironment(templatePath: path))\n        sourcePath = path\n    }\n\n    public convenience init(templateString: String) {\n        self.init(templateString: templateString, environment: StencilTemplate.sourceryEnvironment())\n    }\n    \n    // swiftlint:disable:next discouraged_optional_collection\n    override public func render(_ dictionary: [String: Any]? = nil) throws -> String {\n        var result = try super.render(dictionary)\n        if trimEnabled {\n            result = result.trimmed\n        }\n        \n        return result.replacingOccurrences(of: NewLineNode.marker, with: \"\\n\")\n    }\n\n    public static func sourceryEnvironment(templatePath: Path? = nil) -> Stencil.Environment {\n        let ext = Stencil.Extension()\n\n        ext.registerFilter(\"json\") { (value, arguments) -> Any? in\n            guard let value = value else { return nil }\n            guard arguments.isEmpty || arguments.count == 1 && arguments.first is Bool else {\n                throw TemplateSyntaxError(\"'json' filter takes a single boolean argument\")\n            }\n            var options: JSONSerialization.WritingOptions = []\n            let prettyPrinted = arguments.first as? Bool ?? false\n            if prettyPrinted {\n                options = [.prettyPrinted]\n            }\n            let data = try JSONSerialization.data(withJSONObject: value, options: options)\n            return String(data: data, encoding: .utf8)\n        }\n\n        ext.registerStringFilters()\n        ext.registerBoolFilter(\"definedInExtension\", filter: { (t: Definition) in t.definedInType?.isExtension ?? false })\n\n        ext.registerBoolFilter(\"computed\", filter: { (v: SourceryVariable) in v.isComputed && !v.isStatic })\n        ext.registerBoolFilter(\"stored\", filter: { (v: SourceryVariable) in !v.isComputed && !v.isStatic })\n        ext.registerBoolFilter(\"tuple\", filter: { (v: SourceryVariable) in v.isTuple })\n        ext.registerBoolFilter(\"optional\", filter: { (m: SourceryVariable) in m.isOptional })\n\n        ext.registerAccessLevelFilters(.open)\n        ext.registerAccessLevelFilters(.public)\n        ext.registerAccessLevelFilters(.private)\n        ext.registerAccessLevelFilters(.fileprivate)\n        ext.registerAccessLevelFilters(.internal)\n        ext.registerAccessLevelFilters(.package)\n\n        ext.registerBoolFilterOrWithArguments(\"based\",\n                                              filter: { (t: Type, name: String) in t.based[name] != nil },\n                                              other: { (t: Typed, name: String) in t.type?.based[name] != nil })\n        ext.registerBoolFilterOrWithArguments(\"implements\",\n                                              filter: { (t: Type, name: String) in t.implements[name] != nil },\n                                              other: { (t: Typed, name: String) in t.type?.implements[name] != nil })\n        ext.registerBoolFilterOrWithArguments(\"inherits\",\n                                              filter: { (t: Type, name: String) in t.inherits[name] != nil },\n                                              other: { (t: Typed, name: String) in t.type?.inherits[name] != nil })\n        ext.registerBoolFilterOrWithArguments(\"extends\",\n                                              filter: { (t: Type, name: String) in t.isExtension && t.name == name },\n                                              other: { (t: Typed, name: String) in guard let type = t.type else { return false }; return type.isExtension && type.name == name })\n\n        ext.registerBoolFilter(\"extension\", filter: { (t: Type) in t.isExtension })\n        ext.registerBoolFilter(\"enum\", filter: { (t: Type) in t is Enum })\n        ext.registerBoolFilter(\"struct\", filter: { (t: Type) in t is Struct })\n        ext.registerBoolFilter(\"protocol\", filter: { (t: Type) in t is SourceryProtocol })\n\n        ext.registerFilter(\"count\", filter: count)\n        ext.registerFilter(\"isEmpty\", filter: isEmpty)\n        ext.registerFilter(\"reversed\", filter: reversed)\n        ext.registerFilter(\"toArray\", filter: toArray)\n        ext.registerFilter(\"sortedValuesByKeys\", filter: sortedValuesByKeys)\n        ext.registerFilter(\"last\", filter: last)\n\n        ext.registerFilterWithArguments(\"push\") { arg1, arg2 in\n            var array = arg1 as? [Any] ?? []\n            array.append(arg2)\n            return array\n        }\n\n        #if canImport(ObjectiveC)\n        ext.registerFilterWithArguments(\"sorted\") { (array, propertyName: String) -> Any? in\n            switch array {\n            case let array as NSArray:\n                let sortDescriptor = NSSortDescriptor(key: propertyName, ascending: true, comparator: {\n                    guard let arg1 = $0 as? String, let arg2 = $1 as? String else {\n                        return .orderedAscending\n                    }\n                    return arg1.caseInsensitiveCompare(arg2)\n                })\n                return array.sortedArray(using: [sortDescriptor])\n            default:\n                return nil\n            }\n        }\n\n        ext.registerFilterWithArguments(\"sortedDescending\") { (array, propertyName: String) -> Any? in\n            switch array {\n            case let array as NSArray:\n                let sortDescriptor = NSSortDescriptor(key: propertyName, ascending: false, comparator: {\n                    guard let arg1 = $0 as? String, let arg2 = $1 as? String else {\n                        return .orderedDescending\n                    }\n                    return arg1.caseInsensitiveCompare(arg2)\n                })\n                return array.sortedArray(using: [sortDescriptor])\n            default:\n                return nil\n            }\n        }\n        #else\n        ext.registerFilterWithArguments(\"sorted\") { (array, propertyName: String) -> Any? in\n            switch array {\n            case let array as NSArray:\n                return array.sortedArray {\n                    guard let arg1 = $0 as? String, let arg2 = $1 as? String else {\n                        return .orderedAscending\n                    }\n                    return arg1.caseInsensitiveCompare(arg2)\n                }\n            default:\n                return nil\n            }\n        }\n\n        ext.registerFilterWithArguments(\"sortedDescending\") { (array, propertyName: String) -> Any? in\n            switch array {\n            case let array as NSArray:\n                return array.sortedArray {\n                    guard let arg1 = $0 as? String, let arg2 = $1 as? String else {\n                        return .orderedDescending\n                    }\n                    return arg2.caseInsensitiveCompare(arg1)\n                }\n            default:\n                return nil\n            }\n        }\n        #endif\n\n        ext.registerBoolFilter(\"initializer\", filter: { (m: SourceryMethod) in m.isInitializer })\n        ext.registerBoolFilterOr(\"class\",\n                                 filter: { (t: Type) in t is Class },\n                                 other: { (m: SourceryMethod) in m.isClass })\n        ext.registerBoolFilterOr(\"static\",\n                                 filter: { (v: SourceryVariable) in v.isStatic },\n                                 other: { (m: SourceryMethod) in m.isStatic })\n        ext.registerBoolFilterOr(\"instance\",\n                                 filter: { (v: SourceryVariable) in !v.isStatic },\n                                 other: { (m: SourceryMethod) in !(m.isStatic || m.isClass) })\n\n        ext.registerBoolFilterWithArguments(\"annotated\", filter: { (a: Annotated, annotation) in a.isAnnotated(with: annotation) })\n        ext.registerTag(\"newline\", parser: NewLineNode.parse)\n        ext.registerTag(\"typed\", parser: TypedNode.parse)\n\n        var extensions = stencilSwiftEnvironment().extensions\n        extensions.append(ext)\n        let loader = templatePath.map({ FileSystemLoader(paths: [$0.parent()]) })\n        return Environment(loader: loader, extensions: extensions, templateClass: StencilTemplate.self)\n    }\n}\n\npublic extension Annotated {\n\n    func isAnnotated(with annotation: String) -> Bool {\n        if annotation.contains(\"=\") {\n            let components = annotation.components(separatedBy: \"=\").map({ $0.trimmingCharacters(in: .whitespaces) })\n            var keyPath = components[0].components(separatedBy: \".\")\n            var annotationValue: Annotations? = annotations\n            while !keyPath.isEmpty && annotationValue != nil {\n                let key = keyPath.removeFirst()\n                let value = annotationValue?[key]\n                if keyPath.isEmpty {\n                    return value?.description == components[1]\n                } else {\n                    annotationValue = value as? Annotations\n                }\n            }\n            return false\n        } else {\n            return annotations[annotation] != nil\n        }\n    }\n\n}\n\npublic extension Stencil.Extension {\n\n    func registerStringFilters() {\n        let lowercase = FilterOr<String, TypeName>.make({ $0.lowercased() }, other: { $0.name.lowercased() })\n        registerFilter(\"lowercase\", filter: lowercase)\n\n        let uppercase = FilterOr<String, TypeName>.make({ $0.uppercased() }, other: { $0.name.uppercased() })\n        registerFilter(\"uppercase\", filter: uppercase)\n\n        let capitalise = FilterOr<String, TypeName>.make({ $0.capitalized }, other: { $0.name.capitalized })\n        registerFilter(\"capitalise\", filter: capitalise)\n\n        let titleCase = FilterOr<String, TypeName>.make({ $0.titleCase }, other: { $0.name.titleCase })\n        registerFilter(\"titleCase\", filter: titleCase)\n\n        let deletingLastComponent = Filter<String>.make({ ($0 as NSString).deletingLastPathComponent })\n        registerFilter(\"deletingLastComponent\", filter: deletingLastComponent)\n    }\n\n    func registerFilterWithTwoArguments<T, A, B>(_ name: String, filter: @escaping (T, A, B) throws -> Any?) {\n        registerFilter(name) { (any, args) throws -> Any? in\n            guard let type = any as? T else { return any }\n            guard args.count == 2, let argA = args[0] as? A, let argB = args[1] as? B else {\n                throw TemplateSyntaxError(\"'\\(name)' filter takes two arguments: \\(A.self) and \\(B.self)\")\n            }\n            return try filter(type, argA, argB)\n        }\n    }\n\n    func registerFilterOrWithTwoArguments<T, Y, A, B>(_ name: String, filter: @escaping (T, A, B) throws -> Any?, other: @escaping (Y, A, B) throws -> Any?) {\n        registerFilter(name) { (any, args) throws -> Any? in\n            guard args.count == 2, let argA = args[0] as? A, let argB = args[1] as? B else {\n                throw TemplateSyntaxError(\"'\\(name)' filter takes two arguments: \\(A.self) and \\(B.self)\")\n            }\n            if let type = any as? T {\n                return try filter(type, argA, argB)\n            } else if let type = any as? Y {\n                return try other(type, argA, argB)\n            } else {\n                return any\n            }\n        }\n    }\n\n    func registerFilterWithArguments<A>(_ name: String, filter: @escaping (Any?, A) throws -> Any?) {\n        registerFilter(name) { (any: Any?, args: [Any?]) throws -> Any? in\n            guard args.count == 1, let arg = args.first as? A else {\n                throw TemplateSyntaxError(\"'\\(name)' filter takes a single \\(A.self) argument\")\n            }\n            return try filter(any, arg)\n        }\n    }\n\n    func registerBoolFilterWithArguments<U, A>(_ name: String, filter: @escaping (U, A) -> Bool) {\n        registerFilterWithArguments(name, filter: Filter.make(filter))\n        registerFilterWithArguments(\"!\\(name)\", filter: Filter.make({ !filter($0, $1) }))\n    }\n\n    func registerBoolFilter<U>(_ name: String, filter: @escaping (U) -> Bool) {\n        registerFilter(name, filter: Filter.make(filter))\n        registerFilter(\"!\\(name)\", filter: Filter.make({ !filter($0) }))\n    }\n\n    func registerBoolFilterOrWithArguments<U, V, A>(_ name: String, filter: @escaping (U, A) -> Bool, other: @escaping (V, A) -> Bool) {\n        registerFilterWithArguments(name, filter: FilterOr.make(filter, other: other))\n        registerFilterWithArguments(\"!\\(name)\", filter: FilterOr.make({ !filter($0, $1) }, other: { !other($0, $1) }))\n    }\n\n    func registerBoolFilterOr<U, V>(_ name: String, filter: @escaping (U) -> Bool, other: @escaping (V) -> Bool) {\n        registerFilter(name, filter: FilterOr.make(filter, other: other))\n        registerFilter(\"!\\(name)\", filter: FilterOr.make({ !filter($0) }, other: { !other($0) }))\n    }\n\n    func registerAccessLevelFilters(_ accessLevel: AccessLevel) {\n        registerBoolFilterOr(accessLevel.rawValue,\n                             filter: { (t: Type) in t.accessLevel == accessLevel.rawValue && t.accessLevel != AccessLevel.none.rawValue },\n                             other: { (m: SourceryMethod) in m.accessLevel == accessLevel.rawValue && m.accessLevel != AccessLevel.none.rawValue }\n        )\n        registerBoolFilterOr(\"!\\(accessLevel.rawValue)\",\n                             filter: { (t: Type) in t.accessLevel != accessLevel.rawValue && t.accessLevel != AccessLevel.none.rawValue },\n                             other: { (m: SourceryMethod) in m.accessLevel != accessLevel.rawValue && m.accessLevel != AccessLevel.none.rawValue }\n        )\n        registerBoolFilter(\"\\(accessLevel.rawValue)Get\", filter: { (v: SourceryVariable) in v.readAccess == accessLevel.rawValue && v.readAccess != AccessLevel.none.rawValue })\n        registerBoolFilter(\"!\\(accessLevel.rawValue)Get\", filter: { (v: SourceryVariable) in v.readAccess != accessLevel.rawValue && v.readAccess != AccessLevel.none.rawValue })\n        registerBoolFilter(\"\\(accessLevel.rawValue)Set\", filter: { (v: SourceryVariable) in v.writeAccess == accessLevel.rawValue && v.writeAccess != AccessLevel.none.rawValue })\n        registerBoolFilter(\"!\\(accessLevel.rawValue)Set\", filter: { (v: SourceryVariable) in v.writeAccess != accessLevel.rawValue && v.writeAccess != AccessLevel.none.rawValue })\n    }\n\n}\n\nprivate func last(_ value: Any?) -> Any? {\n    switch value {\n    case let arr as NSArray:\n        return arr.lastObject\n    default:\n        return nil\n    }\n}\n\nprivate func sortedValuesByKeys(_ value: Any?) -> Any? {\n    switch value {\n    case let dict as NSDictionary:\n        let keys = dict.allKeys.sorted { (($0 as? String) ?? \"\" < ($1 as? String) ?? \"\") }\n        var retVal: [Any?] = []\n        for key in keys {\n            retVal.append(dict[key])\n        }\n        return retVal\n    default:\n        return nil\n    }\n}\n\nprivate func toArray(_ value: Any?) -> Any? {\n    switch value {\n    case let array as NSArray:\n        return array\n    case .some(let something):\n        return [something]\n    default:\n        return nil\n    }\n}\n\nprivate func reversed(_ value: Any?) -> Any? {\n    guard let array = value as? NSArray else {\n        return value\n    }\n    return array.reversed()\n}\n\nprivate func count(_ value: Any?) -> Any? {\n    guard let array = value as? NSArray else {\n        return value\n    }\n    return array.count\n}\n\nprivate func isEmpty(_ value: Any?) -> Any? {\n    switch value {\n    case let array as NSArray:\n        // swiftlint:disable:next empty_count\n        array.count == 0\n    case let string as NSString:\n        string.length == 0\n    default:\n        false\n    }\n}\n\nprivate struct Filter<T> {\n    static func make(_ filter: @escaping (T) -> Bool) -> (Any?) throws -> Any? {\n        return { (any) throws -> Any? in\n            switch any {\n            case let type as T:\n                return filter(type)\n\n            case let array as NSArray:\n                return array.compactMap { $0 as? T }.filter(filter)\n\n            default:\n                return any\n            }\n        }\n    }\n\n    static func make<U>(_ filter: @escaping (T) -> U?) -> (Any?) throws -> Any? {\n        return { (any) throws -> Any? in\n            switch any {\n            case let type as T:\n                return filter(type)\n\n            case let array as NSArray:\n                return array.compactMap { $0 as? T }.compactMap(filter)\n\n            default:\n                return any\n            }\n        }\n    }\n\n    static func make<A>(_ filter: @escaping (T, A) -> Bool) -> (Any?, A) throws -> Any? {\n        return { (any, arg) throws -> Any? in\n            switch any {\n            case let type as T:\n                return filter(type, arg)\n\n            case let array as NSArray:\n                return array.compactMap { $0 as? T }.filter { filter($0, arg) }\n\n            default:\n                return any\n            }\n        }\n    }\n}\n\nprivate struct FilterOr<T, Y> {\n    static func make(_ filter: @escaping (T) -> Bool, other: @escaping (Y) -> Bool) -> (Any?) throws -> Any? {\n        return { (any) throws -> Any? in\n            switch any {\n            case let type as T:\n                return filter(type)\n\n            case let type as Y:\n                return other(type)\n\n            case let array as NSArray:\n                if array.firstObject is T {\n                    return array.compactMap { $0 as? T }.filter(filter)\n                } else {\n                    return array.compactMap { $0 as? Y }.filter(other)\n                }\n\n            default:\n                return any\n            }\n        }\n    }\n\n    static func make<U>(_ filter: @escaping (T) -> U?, other: @escaping (Y) -> U?) -> (Any?) throws -> Any? {\n        return { (any) throws -> Any? in\n            switch any {\n            case let type as T:\n                return filter(type)\n\n            case let type as Y:\n                return other(type)\n\n            case let array as NSArray:\n                if array.firstObject is T {\n                    return array.compactMap { $0 as? T }.compactMap(filter)\n                } else {\n                    return array.compactMap { $0 as? Y }.compactMap(other)\n                }\n\n            default:\n                return any\n            }\n        }\n    }\n\n    static func make<A>(_ filter: @escaping (T, A) -> Bool, other: @escaping (Y, A) -> Bool) -> (Any?, A) throws -> Any? {\n        return { (any, arg) throws -> Any? in\n            switch any {\n            case let type as T:\n                return filter(type, arg)\n\n            case let type as Y:\n                return other(type, arg)\n\n            case let array as NSArray:\n                if array.firstObject is T {\n                    return array.compactMap { $0 as? T }.filter({ filter($0, arg) })\n                } else {\n                    return array.compactMap { $0 as? Y }.filter({ other($0, arg) })\n                }\n\n            default:\n                return any\n            }\n        }\n    }\n}\n\nfileprivate extension String {\n    /// Returns string with uppercased first character\n    var uppercasedFirst: String {\n        return first\n            .map { String($0).uppercased() + dropFirst() }\n            ?? \"\"\n    }\n\n    /// Changes `somethingNamedLikeThis` into `Something Named Like This`\n    var titleCase: String {\n        replacingOccurrences(of: \"([a-z])([A-Z](?=[A-Z])[a-z]*)\", with: \"$1 $2\", options: .regularExpression)\n            .replacingOccurrences(of: \"([A-Z])([A-Z][a-z])\", with: \"$1 $2\", options: .regularExpression)\n            .replacingOccurrences(of: \"([a-z]vis)([A-Z][a-z])\", with: \"$1 $2\", options: .regularExpression)\n            .replacingOccurrences(of: \"([a-z])([A-Z][a-z])\", with: \"$1 $2\", options: .regularExpression)\n            .uppercasedFirst\n    }\n}\n"
  },
  {
    "path": "SourceryStencil/Sources/TypedNode.swift",
    "content": "import Stencil\n\nextension Array {\n    func chunked(into size: Int) -> [[Element]] {\n        return stride(from: 0, to: count, by: size).map {\n            Array(self[$0 ..< Swift.min($0 + size, count)])\n        }\n    }\n}\n\nclass TypedNode: NodeType {\n    enum Content {\n        case nodes([NodeType])\n        case reference(resolvable: Resolvable)\n    }\n    \n    typealias Binding = (name: String, type: String)\n\n    let token: Token?\n    let bindings: [Binding]\n\n    class func parse(_ parser: TokenParser, token: Token) throws -> NodeType {\n        let components = token.components\n        guard components.count > 1, (components.count - 1) % 3 == 0 else {\n            throw TemplateSyntaxError(\n                \"\"\"\n                'typed' tag takes only triple of arguments e.g. name as Type\n                \"\"\"\n            )\n        }\n\n        let chunks = Array(components.dropFirst()).chunked(into: 3)\n        let bindings: [Binding] = chunks.compactMap { binding in\n            return (name: binding[0], type: binding[2])\n        }\n        return TypedNode(bindings: bindings)\n    }\n\n    init(token: Token? = nil, bindings: [Binding]) {\n        self.token = token\n        self.bindings = bindings\n    }\n\n    func render(_ context: Context) throws -> String {\n        return \"\"\n    }\n}\n"
  },
  {
    "path": "SourcerySwift/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2018 Pixle. All rights reserved.</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "SourcerySwift/SourcerySwift.h",
    "content": "//\n//  SourcerySwift.h\n//  SourcerySwift\n//\n//  Created by Ilya Puchka on 29/01/2018.\n//  Copyright © 2018 Pixle. All rights reserved.\n//\n\n#import <Cocoa/Cocoa.h>\n\n//! Project version number for SourcerySwift.\nFOUNDATION_EXPORT double SourcerySwiftVersionNumber;\n\n//! Project version string for SourcerySwift.\nFOUNDATION_EXPORT const unsigned char SourcerySwiftVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <SourcerySwift/PublicHeader.h>\n\n\n"
  },
  {
    "path": "SourcerySwift/Sources/SourceryRuntime.content.generated.swift",
    "content": "#if canImport(ObjectiveC)\nlet sourceryRuntimeFiles: [FolderSynchronizer.File] = [\n    .init(name: \"AccessLevel.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n/// :nodoc:\npublic enum AccessLevel: String {\n    case `package` = \"package\"\n    case `internal` = \"internal\"\n    case `private` = \"private\"\n    case `fileprivate` = \"fileprivate\"\n    case `public` = \"public\"\n    case `open` = \"open\"\n    case none = \"\"\n}\n\n\"\"\"),\n    .init(name: \"Actor.swift\", content:\n\"\"\"\nimport Foundation\n\n// sourcery: skipDescription\n/// Descibes Swift actor\n#if canImport(ObjectiveC)\n@objc(SwiftActor) @objcMembers\n#endif\npublic final class Actor: Type {\n    \n    // sourcery: skipJSExport\n    public class var kind: String { return \"actor\" }\n\n    /// Returns \"actor\"\n    public override var kind: String { Self.kind }\n\n    /// Whether type is final\n    public var isFinal: Bool {\n        modifiers.contains { $0.name == \"final\" }\n    }\n\n    /// Whether method is distributed method\n    public var isDistributed: Bool {\n        modifiers.contains(where: { $0.name == \"distributed\" })\n    }\n\n    /// :nodoc:\n    public override init(name: String = \"\",\n                         parent: Type? = nil,\n                         accessLevel: AccessLevel = .internal,\n                         isExtension: Bool = false,\n                         variables: [Variable] = [],\n                         methods: [Method] = [],\n                         subscripts: [Subscript] = [],\n                         inheritedTypes: [String] = [],\n                         containedTypes: [Type] = [],\n                         typealiases: [Typealias] = [],\n                         genericRequirements: [GenericRequirement] = [],\n                         attributes: AttributeList = [:],\n                         modifiers: [SourceryModifier] = [],\n                         annotations: [String: NSObject] = [:],\n                         documentation: [String] = [],\n                         isGeneric: Bool = false,\n                         implements: [String: Type] = [:],\n                         kind: String = Actor.kind) {\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            genericRequirements: genericRequirements,\n            attributes: attributes,\n            modifiers: modifiers,\n            annotations: annotations,\n            documentation: documentation,\n            isGeneric: isGeneric,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string.append(\", \")\n        string.append(\"kind = \\\\(String(describing: self.kind)), \")\n        string.append(\"isFinal = \\\\(String(describing: self.isFinal)), \")\n        string.append(\"isDistributed = \\\\(String(describing: self.isDistributed))\")\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Actor else {\n            results.append(\"Incorrect type <expected: Actor, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Actor else { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Actor.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n        }\n// sourcery:end\n    \n}\n\n\"\"\"),\n    .init(name: \"Annotations.swift\", content:\n\"\"\"\nimport Foundation\n\npublic typealias Annotations = [String: NSObject]\n\n/// Describes annotated declaration, i.e. type, method, variable, enum case\npublic protocol Annotated {\n    /**\n     All annotations of declaration stored by their name. Value can be `bool`, `String`, float `NSNumber`\n     or array of those types if you use several annotations with the same name.\n    \n     **Example:**\n     \n     ```\n     //sourcery: booleanAnnotation\n     //sourcery: stringAnnotation = \"value\"\n     //sourcery: numericAnnotation = 0.5\n     \n     [\n      \"booleanAnnotation\": true,\n      \"stringAnnotation\": \"value\",\n      \"numericAnnotation\": 0.5\n     ]\n     ```\n    */\n    var annotations: Annotations { get }\n}\n\n\"\"\"),\n    .init(name: \"Array+Parallel.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 06/01/2017.\n// Copyright (c) 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\npublic extension Array {\n    func parallelFlatMap<T>(transform: (Element) -> [T]) -> [T] {\n        return parallelMap(transform: transform).flatMap { $0 }\n    }\n\n    func parallelCompactMap<T>(transform: (Element) -> T?) -> [T] {\n        return parallelMap(transform: transform).compactMap { $0 }\n    }\n\n    func parallelMap<T>(transform: (Element) -> T) -> [T] {\n        var result = ContiguousArray<T?>(repeating: nil, count: count)\n        return result.withUnsafeMutableBufferPointer { buffer in\n            nonisolated(unsafe) let buffer = buffer\n            DispatchQueue.concurrentPerform(iterations: buffer.count) { idx in\n                buffer[idx] = transform(self[idx])\n            }\n            return buffer.map { $0! }\n        }\n    }\n\n    func parallelPerform(_ work: (Element) -> Void) {\n        DispatchQueue.concurrentPerform(iterations: count) { idx in\n            work(self[idx])\n        }\n    }\n}\n\n\"\"\"),\n    .init(name: \"Array.swift\", content:\n\"\"\"\nimport Foundation\n\n/// Describes array type\n#if canImport(ObjectiveC)\n@objcMembers \n#endif\npublic final class ArrayType: NSObject, SourceryModel, Diffable {\n    /// Type name used in declaration\n    public var name: String\n\n    /// Array element type name\n    public var elementTypeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Array element type, if known\n    public var elementType: Type?\n\n    /// :nodoc:\n    public init(name: String, elementTypeName: TypeName, elementType: Type? = nil) {\n        self.name = name\n        self.elementTypeName = elementTypeName\n        self.elementType = elementType\n    }\n\n    /// Returns array as generic type\n    public var asGeneric: GenericType {\n        GenericType(name: \"Array\", typeParameters: [\n            .init(typeName: elementTypeName, type: elementType)\n        ])\n    }\n\n    public var asSource: String {\n        \"[\\\\(elementTypeName.asSource)]\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"elementTypeName = \\\\(String(describing: self.elementTypeName)), \")\n        string.append(\"asGeneric = \\\\(String(describing: self.asGeneric)), \")\n        string.append(\"asSource = \\\\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? ArrayType else {\n            results.append(\"Incorrect type <expected: ArrayType, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"elementTypeName\").trackDifference(actual: self.elementTypeName, expected: castObject.elementTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.elementTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? ArrayType else { return false }\n        if self.name != rhs.name { return false }\n        if self.elementTypeName != rhs.elementTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:ArrayType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let elementTypeName: TypeName = aDecoder.decode(forKey: \"elementTypeName\") else { \n                withVaList([\"elementTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.elementTypeName = elementTypeName\n            self.elementType = aDecoder.decode(forKey: \"elementType\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.elementTypeName, forKey: \"elementTypeName\")\n            aCoder.encode(self.elementType, forKey: \"elementType\")\n        }\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"Attribute.swift\", content:\n\"\"\"\nimport Foundation\n\n/// Describes Swift attribute\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic class Attribute: NSObject, AutoCoding, AutoEquatable, AutoDiffable, AutoJSExport, Diffable {\n\n    /// Attribute name\n    public let name: String\n\n    /// Attribute arguments\n    public let arguments: [String: NSObject]\n\n    // sourcery: skipJSExport\n    let _description: String\n\n    // sourcery: skipEquality, skipDescription, skipCoding, skipJSExport\n    /// :nodoc:\n    public var __parserData: Any?\n\n    /// :nodoc:\n    public init(name: String, arguments: [String: NSObject] = [:], description: String? = nil) {\n        self.name = name\n        self.arguments = arguments\n        let argumentDescription = arguments.map { \"\\\\($0.key): \\\\($0.value is String ? \"\\\\\"\" : \"\")\\\\($0.value)\\\\($0.value is String ? \"\\\\\"\" : \"\")\" }.joined(separator: \", \")\n        self._description = description ?? \"@\\\\(name)\\\\(!argumentDescription.isEmpty ? \"(\" : \"\")\\\\(argumentDescription)\\\\(!argumentDescription.isEmpty ? \")\" : \"\")\"\n    }\n\n    /// TODO: unify `asSource` / `description`?\n    public var asSource: String {\n        description\n    }\n\n    /// Attribute description that can be used in a template.\n    public override var description: String {\n        _description\n    }\n\n    /// :nodoc:\n    public enum Identifier: String {\n        case convenience\n        case required\n        case available\n        case discardableResult\n        case GKInspectable = \"gkinspectable\"\n        case objc\n        case objcMembers\n        case nonobjc\n        case NSApplicationMain\n        case NSCopying\n        case NSManaged\n        case UIApplicationMain\n        case IBOutlet = \"iboutlet\"\n        case IBInspectable = \"ibinspectable\"\n        case IBDesignable = \"ibdesignable\"\n        case autoclosure\n        case convention\n        case mutating\n        case nonisolated\n        case isolated\n        case escaping\n        case final\n        case open\n        case lazy\n        case `package` = \"package\"\n        case `public` = \"public\"\n        case `internal` = \"internal\"\n        case `private` = \"private\"\n        case `fileprivate` = \"fileprivate\"\n        case publicSetter = \"setter_access.public\"\n        case internalSetter = \"setter_access.internal\"\n        case privateSetter = \"setter_access.private\"\n        case fileprivateSetter = \"setter_access.fileprivate\"\n        case optional\n        case dynamic\n\n        public init?(identifier: String) {\n            let identifier = identifier.trimmingPrefix(\"source.decl.attribute.\")\n            if identifier == \"objc.name\" {\n                self.init(rawValue: \"objc\")\n            } else {\n                self.init(rawValue: identifier)\n            }\n        }\n\n        public static func from(string: String) -> Identifier? {\n            switch string {\n            case \"GKInspectable\":\n                return Identifier.GKInspectable\n            case \"objc\":\n                return .objc\n            case \"IBOutlet\":\n                return .IBOutlet\n            case \"IBInspectable\":\n                return .IBInspectable\n            case \"IBDesignable\":\n                return .IBDesignable\n            default:\n                return Identifier(rawValue: string)\n            }\n        }\n\n        public var name: String {\n            switch self {\n            case .GKInspectable:\n                return \"GKInspectable\"\n            case .objc:\n                return \"objc\"\n            case .IBOutlet:\n                return \"IBOutlet\"\n            case .IBInspectable:\n                return \"IBInspectable\"\n            case .IBDesignable:\n                return \"IBDesignable\"\n            case .fileprivateSetter:\n                return \"fileprivate\"\n            case .privateSetter:\n                return \"private\"\n            case .internalSetter:\n                return \"internal\"\n            case .publicSetter:\n                return \"public\"\n            default:\n                return rawValue\n            }\n        }\n\n        public var description: String {\n            return hasAtPrefix ? \"@\\\\(name)\" : name\n        }\n\n        public var hasAtPrefix: Bool {\n            switch self {\n            case .available,\n                 .discardableResult,\n                 .GKInspectable,\n                 .objc,\n                 .objcMembers,\n                 .nonobjc,\n                 .NSApplicationMain,\n                 .NSCopying,\n                 .NSManaged,\n                 .UIApplicationMain,\n                 .IBOutlet,\n                 .IBInspectable,\n                 .IBDesignable,\n                 .autoclosure,\n                 .convention,\n                 .escaping:\n                return true\n            default:\n                return false\n            }\n        }\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Attribute else {\n            results.append(\"Incorrect type <expected: Attribute, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"arguments\").trackDifference(actual: self.arguments, expected: castObject.arguments))\n        results.append(contentsOf: DiffableResult(identifier: \"_description\").trackDifference(actual: self._description, expected: castObject._description))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.arguments)\n        hasher.combine(self._description)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Attribute else { return false }\n        if self.name != rhs.name { return false }\n        if self.arguments != rhs.arguments { return false }\n        if self._description != rhs._description { return false }\n        return true\n    }\n\n// sourcery:inline:Attribute.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let arguments: [String: NSObject] = aDecoder.decode(forKey: \"arguments\") else { \n                withVaList([\"arguments\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.arguments = arguments\n            guard let _description: String = aDecoder.decode(forKey: \"_description\") else { \n                withVaList([\"_description\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self._description = _description\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.arguments, forKey: \"arguments\")\n            aCoder.encode(self._description, forKey: \"_description\")\n        }\n// sourcery:end\n\n}\n\n\"\"\"),\n    .init(name: \"BytesRange.swift\", content:\n\"\"\"\n//\n//  Created by Sébastien Duperron on 03/01/2018.\n//  Copyright © 2018 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n/// :nodoc:\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class BytesRange: NSObject, SourceryModel, Diffable {\n\n    public let offset: Int64\n    public let length: Int64\n\n    public init(offset: Int64, length: Int64) {\n        self.offset = offset\n        self.length = length\n    }\n\n    public convenience init(range: (offset: Int64, length: Int64)) {\n        self.init(offset: range.offset, length: range.length)\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string += \"offset = \\\\(String(describing: self.offset)), \"\n        string += \"length = \\\\(String(describing: self.length))\"\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? BytesRange else {\n            results.append(\"Incorrect type <expected: BytesRange, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"offset\").trackDifference(actual: self.offset, expected: castObject.offset))\n        results.append(contentsOf: DiffableResult(identifier: \"length\").trackDifference(actual: self.length, expected: castObject.length))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.offset)\n        hasher.combine(self.length)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? BytesRange else { return false }\n        if self.offset != rhs.offset { return false }\n        if self.length != rhs.length { return false }\n        return true\n    }\n\n// sourcery:inline:BytesRange.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.offset = aDecoder.decodeInt64(forKey: \"offset\")\n            self.length = aDecoder.decodeInt64(forKey: \"length\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.offset, forKey: \"offset\")\n            aCoder.encode(self.length, forKey: \"length\")\n        }\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"Class.swift\", content:\n\"\"\"\nimport Foundation\n// sourcery: skipDescription\n/// Descibes Swift class\n#if canImport(ObjectiveC)\n@objc(SwiftClass) @objcMembers\n#endif\npublic final class Class: Type {\n    // sourcery: skipJSExport\n    public class var kind: String { return \"class\" }\n\n    /// Returns \"class\"\n    public override var kind: String { Self.kind }\n\n    /// Whether type is final \n    public var isFinal: Bool {\n        modifiers.contains { $0.name == \"final\" }\n    }\n\n    /// :nodoc:\n    public override init(name: String = \"\",\n                         parent: Type? = nil,\n                         accessLevel: AccessLevel = .internal,\n                         isExtension: Bool = false,\n                         variables: [Variable] = [],\n                         methods: [Method] = [],\n                         subscripts: [Subscript] = [],\n                         inheritedTypes: [String] = [],\n                         containedTypes: [Type] = [],\n                         typealiases: [Typealias] = [],\n                         genericRequirements: [GenericRequirement] = [],\n                         attributes: AttributeList = [:],\n                         modifiers: [SourceryModifier] = [],\n                         annotations: [String: NSObject] = [:],\n                         documentation: [String] = [],\n                         isGeneric: Bool = false,\n                         implements: [String: Type] = [:],\n                         kind: String = Class.kind) {\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            genericRequirements: genericRequirements,\n            attributes: attributes,\n            modifiers: modifiers,\n            annotations: annotations,\n            documentation: documentation,\n            isGeneric: isGeneric,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string.append(\", \")\n        string.append(\"kind = \\\\(String(describing: self.kind)), \")\n        string.append(\"isFinal = \\\\(String(describing: self.isFinal))\")\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Class else {\n            results.append(\"Incorrect type <expected: Class, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Class else { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Class.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n        }\n// sourcery:end\n\n}\n\n\"\"\"),\n    .init(name: \"Composer.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\nprivate func currentTimestamp() -> TimeInterval {\n    return Date().timeIntervalSince1970\n}\n\n/// Responsible for composing results of `FileParser`.\npublic enum Composer {\n\n    /// Performs final processing of discovered types:\n    /// - extends types with their corresponding extensions;\n    /// - replaces typealiases with actual types\n    /// - finds actual types for variables and enums raw values\n    /// - filters out any private types and extensions\n    ///\n    /// - Parameter parserResult: Result of parsing source code.\n    /// - Parameter serial: Whether to process results serially instead of concurrently\n    /// - Returns: Final types and extensions of unknown types.\n    public static func uniqueTypesAndFunctions(_ parserResult: FileParserResult, serial: Bool = false) -> (types: [Type], functions: [SourceryMethod], typealiases: [Typealias]) {\n        let composed = ParserResultsComposed(parserResult: parserResult)\n\n        let resolveType = { (typeName: TypeName, containingType: Type?) -> Type? in\n            composed.resolveType(typeName: typeName, containingType: containingType)\n        }\n\n        let methodResolveType = { (typeName: TypeName, containingType: Type?, method: Method) -> Type? in\n            composed.resolveType(typeName: typeName, containingType: containingType, method: method)\n        }\n\n        let processType = { (type: Type) in\n            type.variables.forEach {\n                resolveVariableTypes($0, of: type, resolve: resolveType)\n            }\n            type.methods.forEach {\n                resolveMethodTypes($0, of: type, resolve: methodResolveType)\n            }\n            type.subscripts.forEach {\n                resolveSubscriptTypes($0, of: type, resolve: resolveType)\n            }\n\n            if let enumeration = type as? Enum {\n                resolveEnumTypes(enumeration, types: composed.typeMap, resolve: resolveType)\n            }\n\n            if let composition = type as? ProtocolComposition {\n                resolveProtocolCompositionTypes(composition, resolve: resolveType)\n            }\n\n            if let sourceryProtocol = type as? SourceryProtocol {\n                resolveAssociatedTypes(sourceryProtocol, resolve: resolveType)\n            }\n        }\n\n        let processFunction = { (function: SourceryMethod) in\n            resolveMethodTypes(function, of: nil, resolve: methodResolveType)\n        }\n\n        if serial {\n            composed.types.forEach(processType)\n            composed.functions.forEach(processFunction)\n        } else {\n            composed.types.parallelPerform(processType)\n            composed.functions.parallelPerform(processFunction)\n        }\n\n        updateTypeRelationships(types: composed.types)\n\n        return (\n            types: composed.types.sorted { $0.globalName < $1.globalName },\n            functions: composed.functions.sorted { $0.name < $1.name },\n            typealiases: composed.unresolvedTypealiases.values.sorted(by: { $0.name < $1.name })\n        )\n    }\n\n    typealias TypeResolver = (TypeName, Type?) -> Type?\n    typealias MethodArgumentTypeResolver = (TypeName, Type?, Method) -> Type?\n\n    private static func resolveVariableTypes(_ variable: Variable, of type: Type, resolve: TypeResolver) {\n        variable.type = resolve(variable.typeName, type)\n\n        /// The actual `definedInType` is assigned in `uniqueTypes` but we still\n        /// need to resolve the type to correctly parse typealiases\n        /// @see https://github.com/krzysztofzablocki/Sourcery/pull/374\n        if let definedInTypeName = variable.definedInTypeName {\n            _ = resolve(definedInTypeName, type)\n        }\n    }\n\n    private static func resolveSubscriptTypes(_ subscript: Subscript, of type: Type, resolve: TypeResolver) {\n        `subscript`.parameters.forEach { (parameter) in\n            parameter.type = resolve(parameter.typeName, type)\n        }\n\n        `subscript`.returnType = resolve(`subscript`.returnTypeName, type)\n        if let definedInTypeName = `subscript`.definedInTypeName {\n            _ = resolve(definedInTypeName, type)\n        }\n    }\n\n    private static func resolveMethodTypes(_ method: SourceryMethod, of type: Type?, resolve: MethodArgumentTypeResolver) {\n        method.parameters.forEach { parameter in\n            parameter.type = resolve(parameter.typeName, type, method)\n        }\n\n        /// The actual `definedInType` is assigned in `uniqueTypes` but we still\n        /// need to resolve the type to correctly parse typealiases\n        /// @see https://github.com/krzysztofzablocki/Sourcery/pull/374\n        var definedInType: Type?\n        if let definedInTypeName = method.definedInTypeName {\n            definedInType = resolve(definedInTypeName, type, method)\n        }\n\n        guard !method.returnTypeName.isVoid else { return }\n\n        if method.isInitializer || method.isFailableInitializer {\n            method.returnType = definedInType\n            if let type = method.actualDefinedInTypeName {\n                if method.isFailableInitializer {\n                    method.returnTypeName = TypeName(\n                        name: type.name,\n                        isOptional: true,\n                        isImplicitlyUnwrappedOptional: false,\n                        tuple: type.tuple,\n                        array: type.array,\n                        dictionary: type.dictionary,\n                        closure: type.closure,\n                        set: type.set,\n                        generic: type.generic,\n                        isProtocolComposition: type.isProtocolComposition\n                    )\n                } else if method.isInitializer {\n                    method.returnTypeName = type\n                }\n            }\n        } else {\n            method.returnType = resolve(method.returnTypeName, type, method)\n        }\n    }\n\n    private static func resolveEnumTypes(_ enumeration: Enum, types: [String: Type], resolve: TypeResolver) {\n        enumeration.cases.forEach { enumCase in\n            enumCase.associatedValues.forEach { associatedValue in\n                associatedValue.type = resolve(associatedValue.typeName, enumeration)\n            }\n        }\n\n        guard enumeration.hasRawType else { return }\n\n        if let rawValueVariable = enumeration.variables.first(where: { $0.name == \"rawValue\" && !$0.isStatic }) {\n            enumeration.rawTypeName = rawValueVariable.actualTypeName\n            enumeration.rawType = rawValueVariable.type\n        } else if let rawTypeName = enumeration.inheritedTypes.first {\n            // enums with no cases or enums with cases that contain associated values can't have raw type\n            guard !enumeration.cases.isEmpty,\n                  !enumeration.hasAssociatedValues else {\n                return enumeration.rawTypeName = nil\n            }\n\n            if let rawTypeCandidate = types[rawTypeName] {\n                if !((rawTypeCandidate is SourceryProtocol) || (rawTypeCandidate is ProtocolComposition)) {\n                    enumeration.rawTypeName = TypeName(rawTypeName)\n                    enumeration.rawType = rawTypeCandidate\n                }\n            } else {\n                enumeration.rawTypeName = TypeName(rawTypeName)\n            }\n        }\n    }\n\n    private static func resolveProtocolCompositionTypes(_ protocolComposition: ProtocolComposition, resolve: TypeResolver) {\n        let composedTypes = protocolComposition.composedTypeNames.compactMap { typeName in\n            resolve(typeName, protocolComposition)\n        }\n\n        protocolComposition.composedTypes = composedTypes\n    }\n\n    private static func resolveAssociatedTypes(_ sourceryProtocol: SourceryProtocol, resolve: TypeResolver) {\n        sourceryProtocol.associatedTypes.forEach { (_, value) in\n            guard let typeName = value.typeName,\n                  let type = resolve(typeName, sourceryProtocol)\n            else {\n                return\n            }\n            value.type = type\n        }\n\n        sourceryProtocol.genericRequirements.forEach { requirment in\n            if let knownAssociatedType = sourceryProtocol.associatedTypes[requirment.leftType.name] {\n                requirment.leftType = knownAssociatedType\n            }\n            requirment.rightType.type = resolve(requirment.rightType.typeName, sourceryProtocol)\n        }\n    }\n\n    private static func updateTypeRelationships(types: [Type]) {\n        var typesByName = [String: Type]()\n        types.forEach { typesByName[$0.globalName] = $0 }\n\n        var processed = [String: Bool]()\n        types.forEach { type in\n            if let type = type as? Class, let supertype = type.inheritedTypes.first.flatMap({ typesByName[$0] }) as? Class {\n                type.supertype = supertype\n            }\n            processed[type.globalName] = true\n            updateTypeRelationship(for: type, typesByName: typesByName, processed: &processed)\n        }\n    }\n\n    internal static func findBaseType(for type: Type, name: String, typesByName: [String: Type]) -> Type? {\n        // special case to check if the type is based on one of the recognized types\n        // and the superclass has a generic constraint in `name` part of the `TypeName`\n        var name = name\n        if name.contains(\"<\") && name.contains(\">\") {\n            let parts = name.split(separator: \"<\")\n            name = String(parts.first!)\n        }\n        if let baseType = typesByName[name] {\n            return baseType\n        }\n        if let module = type.module, let baseType = typesByName[\"\\\\(module).\\\\(name)\"] {\n            return baseType\n        }\n        for importModule in type.imports {\n            if let baseType = typesByName[\"\\\\(importModule).\\\\(name)\"] {\n                return baseType\n            }\n        }\n        guard name.contains(\"&\") else { return nil }\n        // this can happen for a type which consists of mutliple types composed together (i.e. (A & B))\n        let nameComponents = name.components(separatedBy: \"&\").map { $0.trimmingCharacters(in: .whitespaces) }\n        let types: [Type] = nameComponents.compactMap {\n            typesByName[$0]\n        }\n        let typeNames = types.map {\n            TypeName(name: $0.name)\n        }\n        return ProtocolComposition(name: name, inheritedTypes: types.map { $0.globalName }, composedTypeNames: typeNames, composedTypes: types)\n    }\n\n    private static func updateTypeRelationship(for type: Type, typesByName: [String: Type], processed: inout [String: Bool]) {\n        type.based.keys.forEach { name in\n            guard let baseType = findBaseType(for: type, name: name, typesByName: typesByName) else { return }\n            let globalName = baseType.globalName\n            if processed[globalName] != true {\n                processed[globalName] = true\n                updateTypeRelationship(for: baseType, typesByName: typesByName, processed: &processed)\n            }\n            copyTypeRelationships(from: baseType, to: type)\n            if let composedType = baseType as? ProtocolComposition {\n                let implements = composedType.composedTypes?.filter({ $0 is SourceryProtocol })\n                implements?.forEach { updateInheritsAndImplements(from: $0, to: type) }\n                if implements?.count == composedType.composedTypes?.count\n                    || composedType.composedTypes == nil\n                    || composedType.composedTypes?.isEmpty == true\n                {\n                    type.implements[globalName] = baseType\n                }\n            } else {\n                updateInheritsAndImplements(from: baseType, to: type)\n            }\n            type.basedTypes[globalName] = baseType\n        }\n    }\n\n    private static func updateInheritsAndImplements(from baseType: Type, to type: Type) {\n        if baseType is Class {\n            type.inherits[baseType.name] = baseType\n        } else if let `protocol` = baseType as? SourceryProtocol {\n            type.implements[baseType.globalName] = baseType\n            if let extendingProtocol = type as? SourceryProtocol {\n                `protocol`.associatedTypes.forEach {\n                    if extendingProtocol.associatedTypes[$0.key] == nil {\n                        extendingProtocol.associatedTypes[$0.key] = $0.value\n                    }\n                }\n            }\n        }\n    }\n\n    private static func copyTypeRelationships(from baseType: Type, to type: Type) {\n        baseType.based.keys.forEach { type.based[$0] = $0 }\n        baseType.basedTypes.forEach { type.basedTypes[$0.key] = $0.value }\n        baseType.inherits.forEach { type.inherits[$0.key] = $0.value }\n        baseType.implements.forEach { type.implements[$0.key] = $0.value }\n    }\n}\n\n\"\"\"),\n    .init(name: \"Definition.swift\", content:\n\"\"\"\nimport Foundation\n\n/// Describes that the object is defined in a context of some `Type`\npublic protocol Definition: AnyObject {\n    /// Reference to type name where the object is defined, \n    /// nil if defined outside of any `enum`, `struct`, `class` etc\n    var definedInTypeName: TypeName? { get }\n\n    /// Reference to actual type where the object is defined, \n    /// nil if defined outside of any `enum`, `struct`, `class` etc or type is unknown\n    var definedInType: Type? { get }\n\n    // sourcery: skipJSExport\n    /// Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a `definedInTypeName`\n    var actualDefinedInTypeName: TypeName? { get }\n}\n\n\"\"\"),\n    .init(name: \"Dictionary.swift\", content:\n\"\"\"\nimport Foundation\n\n/// Describes dictionary type\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class DictionaryType: NSObject, SourceryModel, Diffable {\n    /// Type name used in declaration\n    public var name: String\n\n    /// Dictionary value type name\n    public var valueTypeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Dictionary value type, if known\n    public var valueType: Type?\n\n    /// Dictionary key type name\n    public var keyTypeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Dictionary key type, if known\n    public var keyType: Type?\n\n    /// :nodoc:\n    public init(name: String, valueTypeName: TypeName, valueType: Type? = nil, keyTypeName: TypeName, keyType: Type? = nil) {\n        self.name = name\n        self.valueTypeName = valueTypeName\n        self.valueType = valueType\n        self.keyTypeName = keyTypeName\n        self.keyType = keyType\n    }\n\n    /// Returns dictionary as generic type\n    public var asGeneric: GenericType {\n        GenericType(name: \"Dictionary\", typeParameters: [\n            .init(typeName: keyTypeName),\n            .init(typeName: valueTypeName)\n        ])\n    }\n\n    public var asSource: String {\n        \"[\\\\(keyTypeName.asSource): \\\\(valueTypeName.asSource)]\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"valueTypeName = \\\\(String(describing: self.valueTypeName)), \")\n        string.append(\"keyTypeName = \\\\(String(describing: self.keyTypeName)), \")\n        string.append(\"asGeneric = \\\\(String(describing: self.asGeneric)), \")\n        string.append(\"asSource = \\\\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? DictionaryType else {\n            results.append(\"Incorrect type <expected: DictionaryType, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"valueTypeName\").trackDifference(actual: self.valueTypeName, expected: castObject.valueTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"keyTypeName\").trackDifference(actual: self.keyTypeName, expected: castObject.keyTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.valueTypeName)\n        hasher.combine(self.keyTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? DictionaryType else { return false }\n        if self.name != rhs.name { return false }\n        if self.valueTypeName != rhs.valueTypeName { return false }\n        if self.keyTypeName != rhs.keyTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:DictionaryType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let valueTypeName: TypeName = aDecoder.decode(forKey: \"valueTypeName\") else { \n                withVaList([\"valueTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.valueTypeName = valueTypeName\n            self.valueType = aDecoder.decode(forKey: \"valueType\")\n            guard let keyTypeName: TypeName = aDecoder.decode(forKey: \"keyTypeName\") else { \n                withVaList([\"keyTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.keyTypeName = keyTypeName\n            self.keyType = aDecoder.decode(forKey: \"keyType\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.valueTypeName, forKey: \"valueTypeName\")\n            aCoder.encode(self.valueType, forKey: \"valueType\")\n            aCoder.encode(self.keyTypeName, forKey: \"keyTypeName\")\n            aCoder.encode(self.keyType, forKey: \"keyType\")\n        }\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"Diffable.swift\", content:\n\"\"\"\n//\n//  Diffable.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zabłocki on 22/12/2016.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\npublic protocol Diffable {\n\n    /// Returns `DiffableResult` for the given objects.\n    ///\n    /// - Parameter object: Object to diff against.\n    /// - Returns: Diffable results.\n    func diffAgainst(_ object: Any?) -> DiffableResult\n}\n\n/// :nodoc:\nextension NSRange: Diffable {\n    /// :nodoc:\n    public static func == (lhs: NSRange, rhs: NSRange) -> Bool {\n        return NSEqualRanges(lhs, rhs)\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let rhs = object as? NSRange else {\n            results.append(\"Incorrect type <expected: FileParserResult, received: \\\\(type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"location\").trackDifference(actual: self.location, expected: rhs.location))\n        results.append(contentsOf: DiffableResult(identifier: \"length\").trackDifference(actual: self.length, expected: rhs.length))\n        return results\n    }\n}\n\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic class DiffableResult: NSObject, AutoEquatable {\n    // sourcery: skipEquality\n    private var results: [String]\n    internal var identifier: String?\n\n    init(results: [String] = [], identifier: String? = nil) {\n        self.results = results\n        self.identifier = identifier\n    }\n\n    func append(_ element: String) {\n        results.append(element)\n    }\n\n    func append(contentsOf contents: DiffableResult) {\n        if !contents.isEmpty {\n            results.append(contents.description)\n        }\n    }\n\n    var isEmpty: Bool { return results.isEmpty }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.identifier)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? DiffableResult else { return false }\n        if self.identifier != rhs.identifier { return false }\n        return true\n    }\n\n    public override var description: String {\n        guard !results.isEmpty else { return \"\" }\n        var description = \"\\\\(identifier.flatMap { \"\\\\($0) \" } ?? \"\")\"\n        description.append(results.joined(separator: \"\\\\n\"))\n        return description\n    }\n}\n\npublic extension DiffableResult {\n\n#if swift(>=4.1)\n#else\n    /// :nodoc:\n    @discardableResult func trackDifference<T: Equatable>(actual: T, expected: T) -> DiffableResult {\n        if actual != expected {\n            let result = DiffableResult(results: [\"<expected: \\\\(expected), received: \\\\(actual)>\"])\n            append(contentsOf: result)\n        }\n        return self\n    }\n#endif\n\n    /// :nodoc:\n    @discardableResult func trackDifference<T: Equatable>(actual: T?, expected: T?) -> DiffableResult {\n        if actual != expected {\n            let expected = expected.map({ \"\\\\($0)\" }) ?? \"nil\"\n            let actual = actual.map({ \"\\\\($0)\" }) ?? \"nil\"\n            let result = DiffableResult(results: [\"<expected: \\\\(expected), received: \\\\(actual)>\"])\n            append(contentsOf: result)\n        }\n        return self\n    }\n\n    /// :nodoc:\n    @discardableResult func trackDifference<T: Equatable>(actual: T, expected: T) -> DiffableResult where T: Diffable {\n        let diffResult = actual.diffAgainst(expected)\n        append(contentsOf: diffResult)\n        return self\n    }\n\n    /// :nodoc:\n    @discardableResult func trackDifference<T: Equatable>(actual: [T], expected: [T]) -> DiffableResult where T: Diffable {\n        let diffResult = DiffableResult()\n        defer { append(contentsOf: diffResult) }\n\n        guard actual.count == expected.count else {\n            diffResult.append(\"Different count, expected: \\\\(expected.count), received: \\\\(actual.count)\")\n            return self\n        }\n\n        for (idx, item) in actual.enumerated() {\n            let diff = DiffableResult()\n            diff.trackDifference(actual: item, expected: expected[idx])\n            if !diff.isEmpty {\n                let string = \"idx \\\\(idx): \\\\(diff)\"\n                diffResult.append(string)\n            }\n        }\n\n        return self\n    }\n\n    /// :nodoc:\n    @discardableResult func trackDifference<T: Equatable>(actual: [T], expected: [T]) -> DiffableResult {\n        let diffResult = DiffableResult()\n        defer { append(contentsOf: diffResult) }\n\n        guard actual.count == expected.count else {\n            diffResult.append(\"Different count, expected: \\\\(expected.count), received: \\\\(actual.count)\")\n            return self\n        }\n\n        for (idx, item) in actual.enumerated() where item != expected[idx] {\n            let string = \"idx \\\\(idx): <expected: \\\\(expected), received: \\\\(actual)>\"\n            diffResult.append(string)\n        }\n\n        return self\n    }\n\n    /// :nodoc:\n    @discardableResult func trackDifference<K, T: Equatable>(actual: [K: T], expected: [K: T]) -> DiffableResult where T: Diffable {\n        let diffResult = DiffableResult()\n        defer { append(contentsOf: diffResult) }\n\n        guard actual.count == expected.count else {\n            append(\"Different count, expected: \\\\(expected.count), received: \\\\(actual.count)\")\n\n            if expected.count > actual.count {\n                let missingKeys = Array(expected.keys.filter {\n                    actual[$0] == nil\n                }.map {\n                    String(describing: $0)\n                })\n                diffResult.append(\"Missing keys: \\\\(missingKeys.joined(separator: \", \"))\")\n            }\n            return self\n        }\n\n        for (key, actualElement) in actual {\n            guard let expectedElement = expected[key] else {\n                diffResult.append(\"Missing key \\\\\"\\\\(key)\\\\\"\")\n                continue\n            }\n\n            let diff = DiffableResult()\n            diff.trackDifference(actual: actualElement, expected: expectedElement)\n            if !diff.isEmpty {\n                let string = \"key \\\\\"\\\\(key)\\\\\": \\\\(diff)\"\n                diffResult.append(string)\n            }\n        }\n\n        return self\n    }\n\n// MARK: - NSObject diffing\n\n    /// :nodoc:\n    @discardableResult func trackDifference<K, T: NSObjectProtocol>(actual: [K: T], expected: [K: T]) -> DiffableResult {\n        let diffResult = DiffableResult()\n        defer { append(contentsOf: diffResult) }\n\n        guard actual.count == expected.count else {\n            append(\"Different count, expected: \\\\(expected.count), received: \\\\(actual.count)\")\n\n            if expected.count > actual.count {\n                let missingKeys = Array(expected.keys.filter {\n                    actual[$0] == nil\n                    }.map {\n                        String(describing: $0)\n                })\n                diffResult.append(\"Missing keys: \\\\(missingKeys.joined(separator: \", \"))\")\n            }\n            return self\n        }\n\n        for (key, actualElement) in actual {\n            guard let expectedElement = expected[key] else {\n                diffResult.append(\"Missing key \\\\\"\\\\(key)\\\\\"\")\n                continue\n            }\n\n            if !actualElement.isEqual(expectedElement) {\n                diffResult.append(\"key \\\\\"\\\\(key)\\\\\": <expected: \\\\(expected), received: \\\\(actual)>\")\n            }\n        }\n\n        return self\n    }\n}\n\n\"\"\"),\n    .init(name: \"Documentation.swift\", content:\n\"\"\"\nimport Foundation\n\npublic typealias Documentation = [String]\n\n/// Describes a declaration with documentation, i.e. type, method, variable, enum case\npublic protocol Documented {\n    var documentation: Documentation { get }\n}\n\n\"\"\"),\n    .init(name: \"Extensions.swift\", content:\n\"\"\"\nimport Foundation\n\npublic extension StringProtocol {\n    /// Trimms leading and trailing whitespaces and newlines\n    var trimmed: String {\n        self.trimmingCharacters(in: .whitespacesAndNewlines)\n    }\n}\n\npublic extension String {\n\n    /// Returns nil if string is empty\n    var nilIfEmpty: String? {\n        if isEmpty {\n            return nil\n        }\n\n        return self\n    }\n\n    /// Returns nil if string is empty or contains `_` character\n    var nilIfNotValidParameterName: String? {\n        if isEmpty {\n            return nil\n        }\n\n        if self == \"_\" {\n            return nil\n        }\n\n        return self\n    }\n\n    /// :nodoc:\n    /// - Parameter substring: Instance of a substring\n    /// - Returns: Returns number of times a substring appears in self\n    func countInstances(of substring: String) -> Int {\n        guard !substring.isEmpty else { return 0 }\n        var count = 0\n        var searchRange: Range<String.Index>?\n        while let foundRange = range(of: substring, options: [], range: searchRange) {\n            count += 1\n            searchRange = Range(uncheckedBounds: (lower: foundRange.upperBound, upper: endIndex))\n        }\n        return count\n    }\n\n    /// :nodoc:\n    /// Removes leading and trailing whitespace from str. Returns false if str was not altered.\n    @discardableResult\n    mutating func strip() -> Bool {\n        let strippedString = stripped()\n        guard strippedString != self else { return false }\n        self = strippedString\n        return true\n    }\n\n    /// :nodoc:\n    /// Returns a copy of str with leading and trailing whitespace removed.\n    func stripped() -> String {\n        return String(self.trimmingCharacters(in: .whitespaces))\n    }\n\n    /// :nodoc:\n    @discardableResult\n    mutating func trimPrefix(_ prefix: String) -> Bool {\n        guard hasPrefix(prefix) else { return false }\n        self = String(self.suffix(self.count - prefix.count))\n        return true\n    }\n\n    /// :nodoc:\n    func trimmingPrefix(_ prefix: String) -> String {\n        guard hasPrefix(prefix) else { return self }\n        return String(self.suffix(self.count - prefix.count))\n    }\n\n    /// :nodoc:\n    @discardableResult\n    mutating func trimSuffix(_ suffix: String) -> Bool {\n        guard hasSuffix(suffix) else { return false }\n        self = String(self.prefix(self.count - suffix.count))\n        return true\n    }\n\n    /// :nodoc:\n    func trimmingSuffix(_ suffix: String) -> String {\n        guard hasSuffix(suffix) else { return self }\n        return String(self.prefix(self.count - suffix.count))\n    }\n\n    /// :nodoc:\n    func dropFirstAndLast(_ n: Int = 1) -> String {\n        return drop(first: n, last: n)\n    }\n\n    /// :nodoc:\n    func drop(first: Int, last: Int) -> String {\n        return String(self.dropFirst(first).dropLast(last))\n    }\n\n    /// :nodoc:\n    /// Wraps brackets if needed to make a valid type name\n    func bracketsBalancing() -> String {\n        if hasPrefix(\"(\") && hasSuffix(\")\") {\n            let unwrapped = dropFirstAndLast()\n            return unwrapped.commaSeparated().count == 1 ? unwrapped.bracketsBalancing() : self\n        } else {\n            let wrapped = \"(\\\\(self))\"\n            return wrapped.isValidTupleName() || !isBracketsBalanced() ? wrapped : self\n        }\n    }\n\n    /// :nodoc:\n    /// Returns true if given string can represent a valid tuple type name\n    func isValidTupleName() -> Bool {\n        guard hasPrefix(\"(\") && hasSuffix(\")\") else { return false }\n        let trimmedBracketsName = dropFirstAndLast()\n        return trimmedBracketsName.isBracketsBalanced() && trimmedBracketsName.commaSeparated().count > 1\n    }\n\n    /// :nodoc:\n    func isValidArrayName() -> Bool {\n        if hasPrefix(\"Array<\") { return true }\n        if hasPrefix(\"[\") && hasSuffix(\"]\") {\n            return dropFirstAndLast().colonSeparated().count == 1\n        }\n        return false\n    }\n\n    /// :nodoc:\n    func isValidDictionaryName() -> Bool {\n        if hasPrefix(\"Dictionary<\") { return true }\n        if hasPrefix(\"[\") && contains(\":\") && hasSuffix(\"]\") {\n            return dropFirstAndLast().colonSeparated().count == 2\n        }\n        return false\n    }\n\n    /// :nodoc:\n    func isValidClosureName() -> Bool {\n        return components(separatedBy: \"->\", excludingDelimiterBetween: ([\"(\", \"<\"], [\")\", \">\"])).count > 1\n    }\n\n    /// :nodoc:\n    /// Returns true if all opening brackets are balanced with closed brackets.\n    func isBracketsBalanced() -> Bool {\n        var bracketsCount: Int = 0\n        for char in self {\n            if char == \"(\" { bracketsCount += 1 } else if char == \")\" { bracketsCount -= 1 }\n            if bracketsCount < 0 { return false }\n        }\n        return bracketsCount == 0\n    }\n\n    /// :nodoc:\n    /// Returns components separated with a comma respecting nested types\n    func commaSeparated() -> [String] {\n        return components(separatedBy: \",\", excludingDelimiterBetween: (\"<[({\", \"})]>\"))\n    }\n\n    /// :nodoc:\n    /// Returns components separated with colon respecting nested types\n    func colonSeparated() -> [String] {\n        return components(separatedBy: \":\", excludingDelimiterBetween: (\"<[({\", \"})]>\"))\n    }\n\n    /// :nodoc:\n    /// Returns components separated with semicolon respecting nested contexts\n    func semicolonSeparated() -> [String] {\n        return components(separatedBy: \";\", excludingDelimiterBetween: (\"{\", \"}\"))\n    }\n\n    /// :nodoc:\n    func components(separatedBy delimiter: String, excludingDelimiterBetween between: (open: String, close: String)) -> [String] {\n        return self.components(separatedBy: delimiter, excludingDelimiterBetween: (between.open.map { String($0) }, between.close.map { String($0) }))\n    }\n\n    /// :nodoc:\n    func components(separatedBy delimiter: String, excludingDelimiterBetween between: (open: [String], close: [String])) -> [String] {\n        var boundingCharactersCount: Int = 0\n        var quotesCount: Int = 0\n        var item = \"\"\n        var items = [String]()\n\n        var i = self.startIndex\n        while i < self.endIndex {\n            var offset = 1\n            defer {\n                i = self.index(i, offsetBy: offset)\n            }\n            var currentlyScannedEnd: Index = self.endIndex\n            if let endIndex = self.index(i, offsetBy: delimiter.count, limitedBy: self.endIndex) {\n                currentlyScannedEnd = endIndex\n            }\n            let currentlyScanned: String = String(self[i..<currentlyScannedEnd])\n            if let openString = between.open.first(where: { self[i...].starts(with: $0) }) {\n                if !((boundingCharactersCount == 0) as Bool && (String(self[i]) == delimiter) as Bool) {\n                    boundingCharactersCount += 1\n                }\n                offset = openString.count\n            } else if let closeString = between.close.first(where: { self[i...].starts(with: $0) }) {\n                // do not count `->`\n                if !((self[i] == \">\") as Bool && (item.last == \"-\") as Bool) {\n                    boundingCharactersCount = max(0, boundingCharactersCount - 1)\n                }\n                offset = closeString.count\n            }\n            if (self[i] == \"\\\\\"\") as Bool {\n                quotesCount += 1\n            }\n\n            let currentIsDelimiter = (currentlyScanned == delimiter) as Bool\n            let boundingCountIsZero = (boundingCharactersCount == 0) as Bool\n            let hasEvenQuotes = (quotesCount % 2 == 0) as Bool\n            if currentIsDelimiter && boundingCountIsZero && hasEvenQuotes {\n                items.append(item)\n                item = \"\"\n                i = self.index(i, offsetBy: delimiter.count - 1)\n            } else {\n                let endIndex: Index = self.index(i, offsetBy: offset)\n                item += self[i..<endIndex]\n            }\n        }\n        items.append(item)\n        return items\n    }\n}\n\npublic extension NSString {\n    /// :nodoc:\n    var entireRange: NSRange {\n        return NSRange(location: 0, length: self.length)\n    }\n}\n\n\"\"\"),\n    .init(name: \"FileParserResult.swift\", content:\n\"\"\"\n//\n//  FileParserResult.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zablocki on 11/01/2017.\n//  Copyright © 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n// sourcery: skipJSExport\n/// :nodoc:\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class FileParserResult: NSObject, SourceryModel, Diffable {\n    public let path: String?\n    public let module: String?\n    public var types = [Type]() {\n        didSet {\n            types.forEach { type in\n                guard type.module == nil, type.kind != \"extensions\" else { return }\n                type.module = module\n            }\n        }\n    }\n    public var functions = [SourceryMethod]()\n    public var typealiases = [Typealias]()\n    public var inlineRanges = [String: NSRange]()\n    public var inlineIndentations = [String: String]()\n\n    public var modifiedDate: Date\n    public var sourceryVersion: String\n\n    var isEmpty: Bool {\n        types.isEmpty && functions.isEmpty && typealiases.isEmpty && inlineRanges.isEmpty && inlineIndentations.isEmpty\n    }\n\n    public init(path: String?, module: String?, types: [Type], functions: [SourceryMethod], typealiases: [Typealias] = [], inlineRanges: [String: NSRange] = [:], inlineIndentations: [String: String] = [:], modifiedDate: Date = Date(), sourceryVersion: String = \"\") {\n        self.path = path\n        self.module = module\n        self.types = types\n        self.functions = functions\n        self.typealiases = typealiases\n        self.inlineRanges = inlineRanges\n        self.inlineIndentations = inlineIndentations\n        self.modifiedDate = modifiedDate\n        self.sourceryVersion = sourceryVersion\n\n        super.init()\n\n        defer {\n            self.types = types\n        }\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"path = \\\\(String(describing: self.path)), \")\n        string.append(\"module = \\\\(String(describing: self.module)), \")\n        string.append(\"types = \\\\(String(describing: self.types)), \")\n        string.append(\"functions = \\\\(String(describing: self.functions)), \")\n        string.append(\"typealiases = \\\\(String(describing: self.typealiases)), \")\n        string.append(\"inlineRanges = \\\\(String(describing: self.inlineRanges)), \")\n        string.append(\"inlineIndentations = \\\\(String(describing: self.inlineIndentations)), \")\n        string.append(\"modifiedDate = \\\\(String(describing: self.modifiedDate)), \")\n        string.append(\"sourceryVersion = \\\\(String(describing: self.sourceryVersion)), \")\n        string.append(\"isEmpty = \\\\(String(describing: self.isEmpty))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? FileParserResult else {\n            results.append(\"Incorrect type <expected: FileParserResult, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"path\").trackDifference(actual: self.path, expected: castObject.path))\n        results.append(contentsOf: DiffableResult(identifier: \"module\").trackDifference(actual: self.module, expected: castObject.module))\n        results.append(contentsOf: DiffableResult(identifier: \"types\").trackDifference(actual: self.types, expected: castObject.types))\n        results.append(contentsOf: DiffableResult(identifier: \"functions\").trackDifference(actual: self.functions, expected: castObject.functions))\n        results.append(contentsOf: DiffableResult(identifier: \"typealiases\").trackDifference(actual: self.typealiases, expected: castObject.typealiases))\n        results.append(contentsOf: DiffableResult(identifier: \"inlineRanges\").trackDifference(actual: self.inlineRanges, expected: castObject.inlineRanges))\n        results.append(contentsOf: DiffableResult(identifier: \"inlineIndentations\").trackDifference(actual: self.inlineIndentations, expected: castObject.inlineIndentations))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiedDate\").trackDifference(actual: self.modifiedDate, expected: castObject.modifiedDate))\n        results.append(contentsOf: DiffableResult(identifier: \"sourceryVersion\").trackDifference(actual: self.sourceryVersion, expected: castObject.sourceryVersion))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.path)\n        hasher.combine(self.module)\n        hasher.combine(self.types)\n        hasher.combine(self.functions)\n        hasher.combine(self.typealiases)\n        hasher.combine(self.inlineRanges)\n        hasher.combine(self.inlineIndentations)\n        hasher.combine(self.modifiedDate)\n        hasher.combine(self.sourceryVersion)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? FileParserResult else { return false }\n        if self.path != rhs.path { return false }\n        if self.module != rhs.module { return false }\n        if self.types != rhs.types { return false }\n        if self.functions != rhs.functions { return false }\n        if self.typealiases != rhs.typealiases { return false }\n        if self.inlineRanges != rhs.inlineRanges { return false }\n        if self.inlineIndentations != rhs.inlineIndentations { return false }\n        if self.modifiedDate != rhs.modifiedDate { return false }\n        if self.sourceryVersion != rhs.sourceryVersion { return false }\n        return true\n    }\n\n// sourcery:inline:FileParserResult.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.path = aDecoder.decode(forKey: \"path\")\n            self.module = aDecoder.decode(forKey: \"module\")\n            guard let types: [Type] = aDecoder.decode(forKey: \"types\") else { \n                withVaList([\"types\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.types = types\n            guard let functions: [SourceryMethod] = aDecoder.decode(forKey: \"functions\") else { \n                withVaList([\"functions\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.functions = functions\n            guard let typealiases: [Typealias] = aDecoder.decode(forKey: \"typealiases\") else { \n                withVaList([\"typealiases\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typealiases = typealiases\n            guard let inlineRanges: [String: NSRange] = aDecoder.decode(forKey: \"inlineRanges\") else { \n                withVaList([\"inlineRanges\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.inlineRanges = inlineRanges\n            guard let inlineIndentations: [String: String] = aDecoder.decode(forKey: \"inlineIndentations\") else { \n                withVaList([\"inlineIndentations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.inlineIndentations = inlineIndentations\n            guard let modifiedDate: Date = aDecoder.decode(forKey: \"modifiedDate\") else { \n                withVaList([\"modifiedDate\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiedDate = modifiedDate\n            guard let sourceryVersion: String = aDecoder.decode(forKey: \"sourceryVersion\") else { \n                withVaList([\"sourceryVersion\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.sourceryVersion = sourceryVersion\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.path, forKey: \"path\")\n            aCoder.encode(self.module, forKey: \"module\")\n            aCoder.encode(self.types, forKey: \"types\")\n            aCoder.encode(self.functions, forKey: \"functions\")\n            aCoder.encode(self.typealiases, forKey: \"typealiases\")\n            aCoder.encode(self.inlineRanges, forKey: \"inlineRanges\")\n            aCoder.encode(self.inlineIndentations, forKey: \"inlineIndentations\")\n            aCoder.encode(self.modifiedDate, forKey: \"modifiedDate\")\n            aCoder.encode(self.sourceryVersion, forKey: \"sourceryVersion\")\n        }\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"Generic.swift\", content:\n\"\"\"\nimport Foundation\n\n/// Descibes Swift generic type\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class GenericType: NSObject, SourceryModelWithoutDescription, Diffable {\n    /// The name of the base type, i.e. `Array` for `Array<Int>`\n    public var name: String\n\n    /// This generic type parameters\n    public let typeParameters: [GenericTypeParameter]\n\n    /// :nodoc:\n    public init(name: String, typeParameters: [GenericTypeParameter] = []) {\n        self.name = name\n        self.typeParameters = typeParameters\n    }\n\n    public var asSource: String {\n        let arguments = typeParameters\n          .map({ $0.typeName.asSource })\n          .joined(separator: \", \")\n        return \"\\\\(name)<\\\\(arguments)>\"\n    }\n\n    public override var description: String {\n        asSource\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? GenericType else {\n            results.append(\"Incorrect type <expected: GenericType, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeParameters\").trackDifference(actual: self.typeParameters, expected: castObject.typeParameters))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.typeParameters)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? GenericType else { return false }\n        if self.name != rhs.name { return false }\n        if self.typeParameters != rhs.typeParameters { return false }\n        return true\n    }   \n\n// sourcery:inline:GenericType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let typeParameters: [GenericTypeParameter] = aDecoder.decode(forKey: \"typeParameters\") else { \n                withVaList([\"typeParameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeParameters = typeParameters\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeParameters, forKey: \"typeParameters\")\n        }\n\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"Import.swift\", content:\n\"\"\"\nimport Foundation\n\n/// Defines import type\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic class Import: NSObject, SourceryModelWithoutDescription, Diffable {\n    /// Import kind, e.g. class, struct in `import class Module.ClassName`\n    public var kind: String?\n\n    /// Import path\n    public var path: String\n\n    /// :nodoc:\n    public init(path: String, kind: String? = nil) {\n        self.path = path\n        self.kind = kind\n    }\n\n    /// Full import value e.g. `import struct Module.StructName`\n    public override var description: String {\n        if let kind = kind {\n            return \"\\\\(kind) \\\\(path)\"\n        }\n\n        return path\n    }\n\n    /// Returns module name from a import, e.g. if you had `import struct Module.Submodule.Struct` it will return `Module.Submodule`\n    public var moduleName: String {\n        if kind != nil {\n            if let idx = path.lastIndex(of: \".\") {\n                return String(path[..<idx])\n            } else {\n                return path\n            }\n        } else {\n            return path\n        }\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Import else {\n            results.append(\"Incorrect type <expected: Import, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"kind\").trackDifference(actual: self.kind, expected: castObject.kind))\n        results.append(contentsOf: DiffableResult(identifier: \"path\").trackDifference(actual: self.path, expected: castObject.path))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.kind)\n        hasher.combine(self.path)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Import else { return false }\n        if self.kind != rhs.kind { return false }\n        if self.path != rhs.path { return false }\n        return true\n    }\n\n// sourcery:inline:Import.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.kind = aDecoder.decode(forKey: \"kind\")\n            guard let path: String = aDecoder.decode(forKey: \"path\") else { \n                withVaList([\"path\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.path = path\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.kind, forKey: \"kind\")\n            aCoder.encode(self.path, forKey: \"path\")\n        }\n\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"Log.swift\", content:\n\"\"\"\n//import Darwin\nimport Foundation\n\n/// :nodoc:\npublic enum Log {\n    public struct Configuration {\n        let isDryRun: Bool\n        let isQuiet: Bool\n        let isVerboseLoggingEnabled: Bool\n        let isLogBenchmarkEnabled: Bool\n        let shouldLogAST: Bool\n\n        public init(isDryRun: Bool, isQuiet: Bool, isVerboseLoggingEnabled: Bool, isLogBenchmarkEnabled: Bool, shouldLogAST: Bool) {\n            self.isDryRun = isDryRun\n            self.isQuiet = isQuiet\n            self.isVerboseLoggingEnabled = isVerboseLoggingEnabled\n            self.isLogBenchmarkEnabled = isLogBenchmarkEnabled\n            self.shouldLogAST = shouldLogAST\n        }\n    }\n\n    public static func setup(using configuration: Configuration) {\n        Log.stackMessages = configuration.isDryRun\n        switch (configuration.isQuiet, configuration.isVerboseLoggingEnabled) {\n        case (true, _):\n            Log.level = .errors\n        case (false, let isVerbose):\n            Log.level = isVerbose ? .verbose : .info\n        }\n        Log.logBenchmarks = (configuration.isVerboseLoggingEnabled || configuration.isLogBenchmarkEnabled) && !configuration.isQuiet\n        Log.logAST = (configuration.shouldLogAST) && !configuration.isQuiet\n    }\n\n    public enum Level: Int {\n        case errors\n        case warnings\n        case info\n        case verbose\n    }\n\n    public static var level: Level = .warnings\n    public static var logBenchmarks: Bool = false\n    public static var logAST: Bool = false\n\n    public static var stackMessages: Bool = false\n    public private(set) static var messagesStack = [String]()\n\n    public static func error(_ message: Any) {\n        log(level: .errors, \"error: \\\\(message)\")\n        // to return error when running swift templates which is done in a different process\n        if ProcessInfo.processInfo.processName != \"Sourcery\" {\n            fputs(\"\\\\(message)\", stderr)\n        }\n    }\n\n    public static func warning(_ message: Any) {\n        log(level: .warnings, \"warning: \\\\(message)\")\n    }\n\n    public static func astWarning(_ message: Any) {\n        guard logAST else { return }\n        log(level: .warnings, \"ast warning: \\\\(message)\")\n    }\n\n    public static func astError(_ message: Any) {\n        guard logAST else { return }\n        log(level: .errors, \"ast error: \\\\(message)\")\n    }\n\n    public static func verbose(_ message: Any) {\n        log(level: .verbose, message)\n    }\n\n    public static func info(_ message: Any) {\n        log(level: .info, message)\n    }\n\n    public static func benchmark(_ message: Any) {\n        guard logBenchmarks else { return }\n        if stackMessages {\n            messagesStack.append(\"\\\\(message)\")\n        } else {\n            print(message)\n        }\n    }\n\n    private static func log(level logLevel: Level, _ message: Any) {\n        guard logLevel.rawValue <= Log.level.rawValue else { return }\n        if stackMessages {\n            messagesStack.append(\"\\\\(message)\")\n        } else {\n            print(message)\n        }\n    }\n\n    public static func output(_ message: String) {\n        print(message)\n    }\n}\n\nextension String: Error {}\n\n\"\"\"),\n    .init(name: \"Modifier.swift\", content:\n\"\"\"\nimport Foundation\n\npublic typealias SourceryModifier = Modifier\n/// modifier can be thing like `private`, `class`, `nonmutating`\n/// if a declaration has modifier like `private(set)` it's name will be `private` and detail will be `set`\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic class Modifier: NSObject, AutoCoding, AutoEquatable, AutoDiffable, AutoJSExport, Diffable {\n\n    /// The declaration modifier name.\n    public let name: String\n\n    /// The modifier detail, if any.\n    public let detail: String?\n\n    public init(name: String, detail: String? = nil) {\n        self.name = name\n        self.detail = detail\n    }\n\n    public var asSource: String {\n        if let detail = detail {\n            return \"\\\\(name)(\\\\(detail))\"\n        } else {\n            return name\n        }\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Modifier else {\n            results.append(\"Incorrect type <expected: Modifier, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"detail\").trackDifference(actual: self.detail, expected: castObject.detail))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.detail)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Modifier else { return false }\n        if self.name != rhs.name { return false }\n        if self.detail != rhs.detail { return false }\n        return true\n    }\n\n    // sourcery:inline:Modifier.AutoCoding\n\n            /// :nodoc:\n            required public init?(coder aDecoder: NSCoder) {\n                guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                    withVaList([\"name\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.name = name\n                self.detail = aDecoder.decode(forKey: \"detail\")\n            }\n\n            /// :nodoc:\n            public func encode(with aCoder: NSCoder) {\n                aCoder.encode(self.name, forKey: \"name\")\n                aCoder.encode(self.detail, forKey: \"detail\")\n            }\n    // sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"ParserResultsComposed.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\ninternal struct ParserResultsComposed {\n    private(set) var typeMap = [String: Type]()\n    private(set) var modules = [String: [String: Type]]()\n    private(set) var types = [Type]()\n\n    let parsedTypes: [Type]\n    let functions: [SourceryMethod]\n    let resolvedTypealiases: [String: Typealias]\n    let associatedTypes: [String: AssociatedType]\n    let unresolvedTypealiases: [String: Typealias]\n\n    init(parserResult: FileParserResult) {\n        // TODO: This logic should really be more complicated\n        // For any resolution we need to be looking at accessLevel and module boundaries\n        // e.g. there might be a typealias `private typealias Something = MyType` in one module and same name in another with public modifier, one could be accessed and the other could not\n        self.functions = parserResult.functions\n        let aliases = Self.typealiases(parserResult)\n        resolvedTypealiases = aliases.resolved\n        unresolvedTypealiases = aliases.unresolved\n        associatedTypes = Self.extractAssociatedTypes(parserResult)\n        parsedTypes = parserResult.types\n\n        var moduleAndTypeNameCollisions: Set<String> = []\n\n        for type in parsedTypes where !type.isExtension && type.parent == nil {\n            if let module = type.module, type.localName == module {\n                moduleAndTypeNameCollisions.insert(module)\n            }\n        }\n\n        // set definedInType for all methods and variables\n        parsedTypes\n            .forEach { type in\n                type.variables.forEach { $0.definedInType = type }\n                type.methods.forEach { $0.definedInType = type }\n                type.subscripts.forEach { $0.definedInType = type }\n            }\n\n        // map all known types to their names\n\n        for type in parsedTypes where !type.isExtension && type.parent == nil {\n            let name = type.name\n            // If a type name has the `<module>.` prefix, and the type `<module>.<module>` is undefined, we can safely remove the `<module>.` prefix\n            if let module = type.module, name.hasPrefix(module), name.dropFirst(module.count).hasPrefix(\".\"), !moduleAndTypeNameCollisions.contains(module) {\n                type.localName.removeFirst(module.count + 1)\n            }\n        }\n\n        for type in parsedTypes where !type.isExtension {\n            typeMap[type.globalName] = type\n            if let module = type.module {\n                var typesByModules = modules[module, default: [:]]\n                typesByModules[type.name] = type\n                modules[module] = typesByModules\n            }\n        }\n\n        /// Resolve typealiases\n        let typealiases = Array(unresolvedTypealiases.values)\n        typealiases.forEach { alias in\n            alias.type = resolveType(typeName: alias.typeName, containingType: alias.parent)\n        }\n\n        /// Map associated types\n        associatedTypes.forEach {\n            if let globalName = $0.value.type?.globalName,\n               let type = typeMap[globalName] {\n                typeMap[$0.key] = type\n            } else {\n                typeMap[$0.key] = $0.value.type\n            }\n        }\n\n        types = unifyTypes()\n    }\n\n    mutating private func resolveExtensionOfNestedType(_ type: Type) {\n        var components = type.localName.components(separatedBy: \".\")\n        let rootName: String\n        if type.parent != nil, let module = type.module {\n            rootName = module\n        } else {\n            rootName = components.removeFirst()\n        }\n        if let moduleTypes = modules[rootName], let baseType = moduleTypes[components.joined(separator: \".\")] ?? moduleTypes[type.localName] {\n            type.localName = baseType.localName\n            type.module = baseType.module\n            type.parent = baseType.parent\n        } else {\n            for _import in type.imports {\n                let parentKey = \"\\\\(rootName).\\\\(components.joined(separator: \".\"))\"\n                let parentKeyFull = \"\\\\(_import.moduleName).\\\\(parentKey)\"\n                if let moduleTypes = modules[_import.moduleName], let baseType = moduleTypes[parentKey] ?? moduleTypes[parentKeyFull] {\n                    type.localName = baseType.localName\n                    type.module = baseType.module\n                    type.parent = baseType.parent\n                    return\n                }\n            }\n        }\n        // Parent extensions should always be processed before `type`, as this affects the globalName of `type`.\n        for parent in type.parentTypes where parent.isExtension && parent.localName.contains(\".\") {\n            let oldName = parent.globalName\n            resolveExtensionOfNestedType(parent)\n            if oldName != parent.globalName {\n                rewriteChildren(of: parent)\n            }\n        }\n    }\n\n    // if it had contained types, they might have been fully defined and so their name has to be noted in uniques\n    private mutating func rewriteChildren(of type: Type) {\n        // child is never an extension so no need to check\n        for child in type.containedTypes {\n            typeMap[child.globalName] = child\n            rewriteChildren(of: child)\n        }\n    }\n\n    private mutating func unifyTypes() -> [Type] {\n        /// Resolve actual names of extensions, as they could have been done on typealias and note updated child names in uniques if needed\n        parsedTypes\n            .filter { $0.isExtension }\n            .forEach { (type: Type) in\n                let oldName = type.globalName\n\n                if type.localName.contains(\".\") {\n                    resolveExtensionOfNestedType(type)\n                } else if let resolved = resolveGlobalName(for: oldName, containingType: type.parent, unique: typeMap, modules: modules, typealiases: resolvedTypealiases, associatedTypes: associatedTypes)?.name {\n                    var moduleName: String = \"\"\n                    if let module = type.module {\n                        moduleName = \"\\\\(module).\"\n                    }\n                    type.localName = resolved.replacingOccurrences(of: moduleName, with: \"\")\n                }\n\n                // nothing left to do\n                guard oldName != type.globalName else {\n                    return\n                }\n                rewriteChildren(of: type)\n            }\n\n        // extend all types with their extensions\n        parsedTypes.forEach { type in\n            let inheritedTypes: [[String]] = type.inheritedTypes.compactMap { inheritedName in\n                if let resolvedGlobalName = resolveGlobalName(for: inheritedName, containingType: type.parent, unique: typeMap, modules: modules, typealiases: resolvedTypealiases, associatedTypes: associatedTypes)?.name {\n                    return [resolvedGlobalName]\n                }\n                if let baseType = Composer.findBaseType(for: type, name: inheritedName, typesByName: typeMap) {\n                    if let composed = baseType as? ProtocolComposition, let composedTypes = composed.composedTypes {\n                        // ignore inheritedTypes when it is a `ProtocolComposition` and composedType is a protocol\n                        var combinedTypes = composedTypes.map { $0.globalName }\n                        combinedTypes.append(baseType.globalName)\n                        return combinedTypes\n                    }\n                }\n                return [inheritedName]\n            }\n            type.inheritedTypes = inheritedTypes.flatMap { $0 }\n            let uniqueType: Type?\n            if let mappedType = typeMap[type.globalName] {\n                // this check will only fail on an extension?\n                uniqueType = mappedType\n            } else if let composedNameType = typeFromComposedName(type.name, modules: modules) {\n                // this can happen for an extension on unknown type, this case should probably be handled by the inferTypeNameFromModules\n                uniqueType = composedNameType\n            } else {\n                uniqueType = inferTypeNameFromModules(from: type.localName, containedInType: type.parent, uniqueTypes: typeMap, modules: modules).flatMap { typeMap[$0] }\n            }\n            guard let current = uniqueType else {\n                assert(type.isExtension, \"Type \\\\(type.globalName) should be extension\")\n\n                // for unknown types we still store their extensions but mark them as unknown\n                type.isUnknownExtension = true\n                if let existingType = typeMap[type.globalName] {\n                    existingType.extend(type)\n                    typeMap[type.globalName] = existingType\n                } else {\n                    typeMap[type.globalName] = type\n                }\n\n                let inheritanceClause = type.inheritedTypes.isEmpty ? \"\" :\n                    \": \\\\(type.inheritedTypes.joined(separator: \", \"))\"\n\n                Log.astWarning(\"Found \\\\\"extension \\\\(type.name)\\\\(inheritanceClause)\\\\\" of type for which there is no original type declaration information.\")\n                return\n            }\n\n            if current == type { return }\n\n            current.extend(type)\n            typeMap[current.globalName] = current\n        }\n\n        let values = typeMap.values\n        var processed = Set<String>(minimumCapacity: values.count)\n        return typeMap.values.filter({\n            let name = $0.globalName\n            let wasProcessed = processed.contains(name)\n            processed.insert(name)\n            return !wasProcessed\n        })\n    }\n\n    // extract associated types from all types and add them to types\n    private static func extractAssociatedTypes(_ parserResult: FileParserResult) -> [String: AssociatedType] {\n        parserResult.types\n            .compactMap { $0 as? SourceryProtocol }\n            .map { $0.associatedTypes }\n            .flatMap { $0 }.reduce(into: [:]) { $0[$1.key] = $1.value }\n    }\n\n    /// returns typealiases map to their full names, with `resolved` removing intermediate\n    /// typealises and `unresolved` including typealiases that reference other typealiases.\n    private static func typealiases(_ parserResult: FileParserResult) -> (resolved: [String: Typealias], unresolved: [String: Typealias]) {\n        var typealiasesByNames = [String: Typealias]()\n        parserResult.typealiases.forEach { typealiasesByNames[$0.name] = $0 }\n        parserResult.types.forEach { type in\n            type.typealiases.forEach({ (_, alias) in\n                // TODO: should I deal with the fact that alias.name depends on type name but typenames might be updated later on\n                // maybe just handle non extension case here and extension aliases after resolving them?\n                typealiasesByNames[alias.name] = alias\n            })\n        }\n\n        let unresolved = typealiasesByNames\n\n        // ! if a typealias leads to another typealias, follow through and replace with final type\n        typealiasesByNames.forEach { _, alias in\n            var aliasNamesToReplace = [alias.name]\n            var finalAlias = alias\n            while let targetAlias = typealiasesByNames[finalAlias.typeName.name] {\n                aliasNamesToReplace.append(targetAlias.name)\n                finalAlias = targetAlias\n            }\n\n            // ! replace all keys\n            aliasNamesToReplace.forEach { typealiasesByNames[$0] = finalAlias }\n        }\n\n        return (resolved: typealiasesByNames, unresolved: unresolved)\n    }\n\n    /// Resolves type identifier for name\n    func resolveGlobalName(\n        for type: String,\n        containingType: Type? = nil,\n        unique: [String: Type]? = nil,\n        modules: [String: [String: Type]],\n        typealiases: [String: Typealias],\n        associatedTypes: [String: AssociatedType]\n    ) -> (name: String, typealias: Typealias?)? {\n        // if the type exists for this name and isn't an extension just return it's name\n        // if it's extension we need to check if there aren't other options TODO: verify\n        if let realType = unique?[type], realType.isExtension == false {\n            return (name: realType.globalName, typealias: nil)\n        }\n\n        if let alias = typealiases[type] {\n            return (name: alias.type?.globalName ?? alias.typeName.name, typealias: alias)\n        }\n\n        if let associatedType = associatedTypes[type],\n            let actualType = associatedType.type\n        {\n            let typeName = associatedType.typeName ?? TypeName(name: actualType.name)\n            return (name: actualType.globalName, typealias: Typealias(aliasName: type, typeName: typeName))\n        }\n\n        if let containingType = containingType {\n            if type == \"Self\" {\n                return (name: containingType.globalName, typealias: nil)\n            }\n\n            var currentContainer: Type? = containingType\n            while currentContainer != nil, let parentName = currentContainer?.globalName {\n                /// TODO: no parent for sure?\n                /// manually walk the containment tree\n                if let name = resolveGlobalName(for: \"\\\\(parentName).\\\\(type)\", containingType: nil, unique: unique, modules: modules, typealiases: typealiases, associatedTypes: associatedTypes) {\n                    return name\n                }\n\n                currentContainer = currentContainer?.parent\n            }\n\n//            if let name = resolveGlobalName(for: \"\\\\(containingType.globalName).\\\\(type)\", containingType: containingType.parent, unique: unique, modules: modules, typealiases: typealiases) {\n//                return name\n//            }\n\n//             last check it's via module\n//            if let module = containingType.module, let name = resolveGlobalName(for: \"\\\\(module).\\\\(type)\", containingType: nil, unique: unique, modules: modules, typealiases: typealiases) {\n//                return name\n//            }\n        }\n\n        // TODO: is this needed?\n        if let inferred = inferTypeNameFromModules(from: type, containedInType: containingType, uniqueTypes: unique ?? [:], modules: modules) {\n            return (name: inferred, typealias: nil)\n        }\n\n        return typeFromComposedName(type, modules: modules).map { (name: $0.globalName, typealias: nil) }\n    }\n\n    private func inferTypeNameFromModules(from typeIdentifier: String, containedInType: Type?, uniqueTypes: [String: Type], modules: [String: [String: Type]]) -> String? {\n        func fullName(for module: String) -> String {\n            \"\\\\(module).\\\\(typeIdentifier)\"\n        }\n\n        func type(for module: String) -> Type? {\n            return modules[module]?[typeIdentifier]\n        }\n\n        func ambiguousErrorMessage(from types: [Type]) -> String? {\n            Log.astWarning(\"Ambiguous type \\\\(typeIdentifier), found \\\\(types.map { $0.globalName }.joined(separator: \", \")). Specify module name at declaration site to disambiguate.\")\n            return nil\n        }\n\n        let explicitModulesAtDeclarationSite: [String] = [\n            containedInType?.module.map { [$0] } ?? [],    // main module for this typename\n            containedInType?.imports.map { $0.moduleName } ?? []    // imported modules\n        ]\n            .flatMap { $0 }\n\n        let remainingModules = Set(modules.keys).subtracting(explicitModulesAtDeclarationSite)\n\n        /// We need to check whether we can find type in one of the modules but we need to be careful to avoid amibiguity\n        /// First checking explicit modules available at declaration site (so source module + all imported ones)\n        /// If there is no ambigiuity there we can assume that module will be resolved by the compiler\n        /// If that's not the case we look after remaining modules in the application and if the typename has no ambigiuity we use that\n        /// But if there is more than 1 typename duplication across modules we have no way to resolve what is the compiler going to use so we fail\n        let moduleSetsToCheck: [[String]] = [\n            explicitModulesAtDeclarationSite,\n            Array(remainingModules)\n        ]\n\n        for modules in moduleSetsToCheck {\n            let possibleTypes = modules\n                .compactMap { type(for: $0) }\n\n            if possibleTypes.count > 1 {\n                return ambiguousErrorMessage(from: possibleTypes)\n            }\n\n            if let type = possibleTypes.first {\n                return type.globalName\n            }\n        }\n\n        // as last result for unknown types / extensions\n        // try extracting type from unique array\n        if let module = containedInType?.module {\n            return uniqueTypes[fullName(for: module)]?.globalName\n        }\n        return nil\n    }\n\n    func typeFromComposedName(_ name: String, modules: [String: [String: Type]]) -> Type? {\n        guard name.contains(\".\") else { return nil }\n        let nameComponents = name.components(separatedBy: \".\")\n        let moduleName = nameComponents[0]\n        let typeName = nameComponents.suffix(from: 1).joined(separator: \".\")\n        return modules[moduleName]?[typeName]\n    }\n\n    func resolveType(typeName: TypeName, containingType: Type?, method: Method? = nil) -> Type? {\n        let resolveTypeWithName = { (typeName: TypeName) -> Type? in\n            return self.resolveType(typeName: typeName, containingType: containingType)\n        }\n\n        let unique = typeMap\n\n        if let name = typeName.actualTypeName {\n            let resolvedIdentifier = name.generic?.name ?? name.unwrappedTypeName\n            return unique[resolvedIdentifier]\n        }\n\n        let retrievedName = actualTypeName(for: typeName, containingType: containingType)\n        let lookupName = retrievedName ?? typeName\n\n        if let tuple = lookupName.tuple {\n            var needsUpdate = false\n\n            tuple.elements.forEach { tupleElement in\n                tupleElement.type = resolveTypeWithName(tupleElement.typeName)\n                if tupleElement.typeName.actualTypeName != nil {\n                    needsUpdate = true\n                }\n            }\n\n            if needsUpdate || retrievedName != nil {\n                let tupleCopy = TupleType(name: tuple.name, elements: tuple.elements)\n                tupleCopy.elements.forEach {\n                    $0.typeName = $0.actualTypeName ?? $0.typeName\n                    $0.typeName.actualTypeName = nil\n                }\n                tupleCopy.name = tupleCopy.elements.asTypeName\n\n                typeName.tuple = tupleCopy // TODO: really don't like this old behaviour\n                typeName.actualTypeName = TypeName(name: tupleCopy.name,\n                                                   isOptional: typeName.isOptional,\n                                                   isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                                                   tuple: tupleCopy,\n                                                   array: lookupName.array,\n                                                   dictionary: lookupName.dictionary,\n                                                   closure: lookupName.closure,\n                                                   set: lookupName.set,\n                                                   generic: lookupName.generic\n                )\n            }\n            return nil\n        } else\n        if let array = lookupName.array {\n            array.elementType = resolveTypeWithName(array.elementTypeName)\n\n            if array.elementTypeName.actualTypeName != nil || retrievedName != nil || array.elementType != nil {\n                let array = ArrayType(name: array.name, elementTypeName: array.elementTypeName, elementType: array.elementType)\n                array.elementTypeName = array.elementTypeName.actualTypeName ?? array.elementTypeName\n                array.elementTypeName.actualTypeName = nil\n                array.name = array.asSource\n                typeName.array = array // TODO: really don't like this old behaviour\n                typeName.generic = array.asGeneric // TODO: really don't like this old behaviour\n\n                typeName.actualTypeName = TypeName(name: array.name,\n                                                   isOptional: typeName.isOptional,\n                                                   isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                                                   tuple: lookupName.tuple,\n                                                   array: array,\n                                                   dictionary: lookupName.dictionary,\n                                                   closure: lookupName.closure,\n                                                   set: lookupName.set,\n                                                   generic: typeName.generic\n                )\n            }\n        } else\n        if let dictionary = lookupName.dictionary {\n            dictionary.keyType = resolveTypeWithName(dictionary.keyTypeName)\n            dictionary.valueType = resolveTypeWithName(dictionary.valueTypeName)\n\n            if dictionary.keyTypeName.actualTypeName != nil || dictionary.valueTypeName.actualTypeName != nil || retrievedName != nil {\n                let dictionary = DictionaryType(name: dictionary.name, valueTypeName: dictionary.valueTypeName, valueType: dictionary.valueType, keyTypeName: dictionary.keyTypeName, keyType: dictionary.keyType)\n                dictionary.keyTypeName = dictionary.keyTypeName.actualTypeName ?? dictionary.keyTypeName\n                dictionary.keyTypeName.actualTypeName = nil // TODO: really don't like this old behaviour\n                dictionary.valueTypeName = dictionary.valueTypeName.actualTypeName ?? dictionary.valueTypeName\n                dictionary.valueTypeName.actualTypeName = nil // TODO: really don't like this old behaviour\n\n                dictionary.name = dictionary.asSource\n\n                typeName.dictionary = dictionary // TODO: really don't like this old behaviour\n                typeName.generic = dictionary.asGeneric // TODO: really don't like this old behaviour\n\n                typeName.actualTypeName = TypeName(name: dictionary.asSource,\n                                                   isOptional: typeName.isOptional,\n                                                   isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                                                   tuple: lookupName.tuple,\n                                                   array: lookupName.array,\n                                                   dictionary: dictionary,\n                                                   closure: lookupName.closure,\n                                                   set: lookupName.set,\n                                                   generic: dictionary.asGeneric\n                )\n            }\n        } else\n        if let closure = lookupName.closure {\n            var needsUpdate = false\n\n            closure.returnType = resolveTypeWithName(closure.returnTypeName)\n            closure.parameters.forEach { parameter in\n                parameter.type = resolveTypeWithName(parameter.typeName)\n                if parameter.typeName.actualTypeName != nil {\n                    needsUpdate = true\n                }\n            }\n\n            if closure.returnTypeName.actualTypeName != nil || needsUpdate || retrievedName != nil {\n                typeName.closure = closure // TODO: really don't like this old behaviour\n\n                typeName.actualTypeName = TypeName(name: closure.asSource,\n                                                   isOptional: typeName.isOptional,\n                                                   isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                                                   tuple: lookupName.tuple,\n                                                   array: lookupName.array,\n                                                   dictionary: lookupName.dictionary,\n                                                   closure: closure,\n                                                   set: lookupName.set,\n                                                   generic: lookupName.generic\n                )\n            }\n\n            return nil\n        } else\n        if let generic = lookupName.generic {\n            var needsUpdate = false\n            generic.typeParameters.forEach { parameter in\n                // Detect if the generic type is local to the method\n                if let method {\n                    for genericParameter in method.genericParameters where parameter.typeName.name == genericParameter.name {\n                        return\n                    }\n                }\n\n                parameter.type = resolveTypeWithName(parameter.typeName)\n                if parameter.typeName.actualTypeName != nil {\n                    needsUpdate = true\n                }\n            }\n\n            if needsUpdate || retrievedName != nil {\n                let generic = GenericType(name: generic.name, typeParameters: generic.typeParameters)\n                generic.typeParameters.forEach {\n                    $0.typeName = $0.typeName.actualTypeName ?? $0.typeName\n                    $0.typeName.actualTypeName = nil // TODO: really don't like this old behaviour\n                }\n                typeName.generic = generic // TODO: really don't like this old behaviour\n                typeName.array = lookupName.array // TODO: really don't like this old behaviour\n                typeName.dictionary = lookupName.dictionary // TODO: really don't like this old behaviour\n\n                let params = generic.typeParameters.map { $0.typeName.asSource }.joined(separator: \", \")\n\n                typeName.actualTypeName = TypeName(name: \"\\\\(generic.name)<\\\\(params)>\",\n                                                   isOptional: typeName.isOptional,\n                                                   isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                                                   tuple: lookupName.tuple,\n                                                   array: lookupName.array, // TODO: asArray\n                                                   dictionary: lookupName.dictionary, // TODO: asDictionary\n                                                   closure: lookupName.closure,\n                                                   set: lookupName.set,\n                                                   generic: generic\n                )\n            }\n        }\n\n        if let aliasedName = (typeName.actualTypeName ?? retrievedName), aliasedName.unwrappedTypeName != typeName.unwrappedTypeName {\n            typeName.actualTypeName = aliasedName\n        }\n\n        let hasGenericRequirements = containingType?.genericRequirements.isEmpty == false\n        || (method != nil && method?.genericRequirements.isEmpty == false)\n\n        if hasGenericRequirements {\n            // we should consider if we are looking up return type of a method with generic constraints\n            // where `typeName` passed would include `... where ...` suffix\n            let typeNameForLookup = typeName.name.split(separator: \" \").first!\n            let genericRequirements: [GenericRequirement]\n            if let requirements = containingType?.genericRequirements, !requirements.isEmpty {\n                genericRequirements = requirements\n            } else {\n                genericRequirements = method?.genericRequirements ?? []\n            }\n            let relevantRequirements = genericRequirements.filter {\n                // matched type against a generic requirement name\n                // thus type should be replaced with a protocol composition\n                $0.leftType.name == typeNameForLookup\n            }\n            if relevantRequirements.count > 1 {\n                // compose protocols into `ProtocolComposition` and generate TypeName\n                var implements: [String: Type] = [:]\n                relevantRequirements.forEach {\n                    implements[$0.rightType.typeName.name] = $0.rightType.type\n                }\n                let composedProtocols = ProtocolComposition(\n                    inheritedTypes: relevantRequirements.map { $0.rightType.typeName.unwrappedTypeName },\n                    isGeneric: true,\n                    composedTypes: relevantRequirements.compactMap { $0.rightType.type },\n                    implements: implements\n                )\n                typeName.actualTypeName = TypeName(name: \"(\\\\(relevantRequirements.map { $0.rightType.typeName.unwrappedTypeName }.joined(separator: \" & \")))\", isProtocolComposition: true)\n                return composedProtocols\n            } else if let protocolRequirement = relevantRequirements.first {\n                // create TypeName off a single generic's protocol requirement\n                typeName.actualTypeName = TypeName(name: \"(\\\\(protocolRequirement.rightType.typeName))\")\n                return protocolRequirement.rightType.type\n            }\n        }\n\n        // try to peek into typealias, maybe part of the typeName is a composed identifier from a type and typealias\n        // i.e.\n        // enum Module {\n        //   typealias ID = MyView\n        // }\n        // class MyView {\n        //   class ID: String {}\n        // }\n        //\n        // let variable: Module.ID.ID // should be resolved as MyView.ID type\n        let finalLookup = typeName.actualTypeName ?? typeName\n        var resolvedIdentifier = finalLookup.generic?.name ?? finalLookup.unwrappedTypeName\n        if let type = unique[resolvedIdentifier] {\n            return type\n        }\n        \n        for alias in resolvedTypealiases {\n            /// iteratively replace all typealiases from the resolvedIdentifier to get to the actual type name requested\n            if resolvedIdentifier.contains(alias.value.name), let range = resolvedIdentifier.range(of: alias.value.name) {\n                resolvedIdentifier = resolvedIdentifier.replacingCharacters(in: range, with: alias.value.typeName.name)\n            }\n        }\n        // should we cache resolved typenames?\n        if unique[resolvedIdentifier] == nil {\n            // peek into typealiases, if any of them contain the same typeName\n            // this is done after the initial attempt in order to prioritise local (recognized) types first\n            // before even trying to substitute the requested type with any typealias\n            for alias in resolvedTypealiases {\n                /// iteratively replace all typealiases from the resolvedIdentifier to get to the actual type name requested,\n                /// ignoring namespacing\n                if resolvedIdentifier == alias.value.aliasName {\n                    resolvedIdentifier = alias.value.typeName.name\n                    typeName.actualTypeName = alias.value.typeName\n                    break\n                }\n            }\n        }\n\n        if let associatedType = associatedTypes[resolvedIdentifier] {\n            return associatedType.type\n        }\n\n        return unique[resolvedIdentifier] ?? unique[typeName.name]\n    }\n\n    private func actualTypeName(for typeName: TypeName,\n                                containingType: Type? = nil) -> TypeName? {\n        let unique = typeMap\n        let typealiases = resolvedTypealiases\n        let associatedTypes = associatedTypes\n\n        var unwrapped = typeName.unwrappedTypeName\n        if let generic = typeName.generic {\n            unwrapped = generic.name\n        } else if let type = associatedTypes[unwrapped] {\n            unwrapped = type.name\n        }\n\n        guard let aliased = resolveGlobalName(for: unwrapped, containingType: containingType, unique: unique, modules: modules, typealiases: typealiases, associatedTypes: associatedTypes) else {\n            return nil\n        }\n\n        /// TODO: verify\n        let generic = typeName.generic.map { GenericType(name: $0.name, typeParameters: $0.typeParameters) }\n        generic?.name = aliased.name\n        let dictionary = typeName.dictionary.map { DictionaryType(name: $0.name, valueTypeName: $0.valueTypeName, valueType: $0.valueType, keyTypeName: $0.keyTypeName, keyType: $0.keyType) }\n        dictionary?.name = aliased.name\n        let array = typeName.array.map { ArrayType(name: $0.name, elementTypeName: $0.elementTypeName, elementType: $0.elementType) }\n        array?.name = aliased.name\n        let set = typeName.set.map { SetType(name: $0.name, elementTypeName: $0.elementTypeName, elementType: $0.elementType) }\n        set?.name = aliased.name\n\n        return TypeName(name: aliased.name,\n                        isOptional: typeName.isOptional,\n                        isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                        tuple: aliased.typealias?.typeName.tuple ?? typeName.tuple, // TODO: verify\n                        array: aliased.typealias?.typeName.array ?? array,\n                        dictionary: aliased.typealias?.typeName.dictionary ?? dictionary,\n                        closure: aliased.typealias?.typeName.closure ?? typeName.closure,\n                        set: aliased.typealias?.typeName.set ?? set,\n                        generic: aliased.typealias?.typeName.generic ?? generic\n        )\n    }\n\n}\n\n\"\"\"),\n    .init(name: \"PhantomProtocols.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 23/01/2017.\n// Copyright (c) 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n/// Phantom protocol for diffing\nprotocol AutoDiffable {}\n\n/// Phantom protocol for equality\nprotocol AutoEquatable {}\n\n/// Phantom protocol for equality\nprotocol AutoDescription {}\n\n/// Phantom protocol for NSCoding\nprotocol AutoCoding {}\n\nprotocol AutoJSExport {}\n\n/// Phantom protocol for NSCoding, Equatable and Diffable\nprotocol SourceryModelWithoutDescription: AutoDiffable, AutoEquatable, AutoCoding, AutoJSExport {}\n\nprotocol SourceryModel: SourceryModelWithoutDescription, AutoDescription {}\n\n\"\"\"),\n    .init(name: \"Protocol.swift\", content:\n\"\"\"\n//\n//  Protocol.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zablocki on 09/12/2016.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n#if canImport(ObjectiveC)\n\n/// :nodoc:\npublic typealias SourceryProtocol = Protocol\n\n/// Describes Swift protocol\n@objcMembers\npublic final class Protocol: Type {\n\n    // sourcery: skipJSExport\n    public class var kind: String { return \"protocol\" }\n\n    /// Returns \"protocol\"\n    public override var kind: String { Self.kind }\n\n    /// list of all declared associated types with their names as keys\n    public var associatedTypes: [String: AssociatedType] {\n        didSet {\n            isGeneric = !associatedTypes.isEmpty || !genericRequirements.isEmpty\n        }\n    }\n\n    // sourcery: skipCoding\n    /// list of generic requirements\n    public override var genericRequirements: [GenericRequirement] {\n        didSet {\n            isGeneric = !associatedTypes.isEmpty || !genericRequirements.isEmpty\n        }\n    }\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                parent: Type? = nil,\n                accessLevel: AccessLevel = .internal,\n                isExtension: Bool = false,\n                variables: [Variable] = [],\n                methods: [Method] = [],\n                subscripts: [Subscript] = [],\n                inheritedTypes: [String] = [],\n                containedTypes: [Type] = [],\n                typealiases: [Typealias] = [],\n                associatedTypes: [String: AssociatedType] = [:],\n                genericRequirements: [GenericRequirement] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                implements: [String: Type] = [:],\n                kind: String = Protocol.kind) {\n        self.associatedTypes = associatedTypes\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            genericRequirements: genericRequirements,\n            attributes: attributes,\n            modifiers: modifiers,\n            annotations: annotations,\n            documentation: documentation,\n            isGeneric: !associatedTypes.isEmpty || !genericRequirements.isEmpty,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string.append(\", \")\n        string.append(\"kind = \\\\(String(describing: self.kind)), \")\n        string.append(\"associatedTypes = \\\\(String(describing: self.associatedTypes)), \")\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Protocol else {\n            results.append(\"Incorrect type <expected: Protocol, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"associatedTypes\").trackDifference(actual: self.associatedTypes, expected: castObject.associatedTypes))\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.associatedTypes)\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Protocol else { return false }\n        if self.associatedTypes != rhs.associatedTypes { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Protocol.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let associatedTypes: [String: AssociatedType] = aDecoder.decode(forKey: \"associatedTypes\") else { \n                withVaList([\"associatedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.associatedTypes = associatedTypes\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n            aCoder.encode(self.associatedTypes, forKey: \"associatedTypes\")\n        }\n// sourcery:end\n}\n#endif\n\"\"\"),\n    .init(name: \"ProtocolComposition.swift\", content:\n\"\"\"\n// Created by eric_horacek on 2/12/20.\n// Copyright © 2020 Airbnb Inc. All rights reserved.\n\nimport Foundation\n\n/// Describes a Swift [protocol composition](https://docs.swift.org/swift-book/ReferenceManual/Types.html#ID454).\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class ProtocolComposition: Type {\n\n    // sourcery: skipJSExport\n    public class var kind: String { return \"protocolComposition\" }\n\n    /// Returns \"protocolComposition\"\n    public override var kind: String { Self.kind }\n\n    /// The names of the types composed to form this composition\n    public let composedTypeNames: [TypeName]\n\n    // sourcery: skipEquality, skipDescription\n    /// The types composed to form this composition, if known\n    public var composedTypes: [Type]?\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                parent: Type? = nil,\n                accessLevel: AccessLevel = .internal,\n                isExtension: Bool = false,\n                variables: [Variable] = [],\n                methods: [Method] = [],\n                subscripts: [Subscript] = [],\n                inheritedTypes: [String] = [],\n                containedTypes: [Type] = [],\n                typealiases: [Typealias] = [],\n                attributes: AttributeList = [:],\n                annotations: [String: NSObject] = [:],\n                isGeneric: Bool = false,\n                composedTypeNames: [TypeName] = [],\n                composedTypes: [Type]? = nil,\n                implements: [String: Type] = [:],\n                kind: String = ProtocolComposition.kind) {\n        self.composedTypeNames = composedTypeNames\n        self.composedTypes = composedTypes\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            annotations: annotations,\n            isGeneric: isGeneric,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string += \", \"\n        string += \"kind = \\\\(String(describing: self.kind)), \"\n        string += \"composedTypeNames = \\\\(String(describing: self.composedTypeNames))\"\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? ProtocolComposition else {\n            results.append(\"Incorrect type <expected: ProtocolComposition, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"composedTypeNames\").trackDifference(actual: self.composedTypeNames, expected: castObject.composedTypeNames))\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.composedTypeNames)\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? ProtocolComposition else { return false }\n        if self.composedTypeNames != rhs.composedTypeNames { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:ProtocolComposition.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let composedTypeNames: [TypeName] = aDecoder.decode(forKey: \"composedTypeNames\") else { \n                withVaList([\"composedTypeNames\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.composedTypeNames = composedTypeNames\n            self.composedTypes = aDecoder.decode(forKey: \"composedTypes\")\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n            aCoder.encode(self.composedTypeNames, forKey: \"composedTypeNames\")\n            aCoder.encode(self.composedTypes, forKey: \"composedTypes\")\n        }\n// sourcery:end\n\n}\n\n\"\"\"),\n    .init(name: \"Set.swift\", content:\n\"\"\"\nimport Foundation\n\n/// Describes set type\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class SetType: NSObject, SourceryModel, Diffable {\n    /// Type name used in declaration\n    public var name: String\n\n    /// Array element type name\n    public var elementTypeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Array element type, if known\n    public var elementType: Type?\n\n    /// :nodoc:\n    public init(name: String, elementTypeName: TypeName, elementType: Type? = nil) {\n        self.name = name\n        self.elementTypeName = elementTypeName\n        self.elementType = elementType\n    }\n\n    /// Returns array as generic type\n    public var asGeneric: GenericType {\n        GenericType(name: \"Set\", typeParameters: [\n            .init(typeName: elementTypeName)\n        ])\n    }\n\n    public var asSource: String {\n        \"[\\\\(elementTypeName.asSource)]\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"elementTypeName = \\\\(String(describing: self.elementTypeName)), \")\n        string.append(\"asGeneric = \\\\(String(describing: self.asGeneric)), \")\n        string.append(\"asSource = \\\\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? SetType else {\n            results.append(\"Incorrect type <expected: SetType, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"elementTypeName\").trackDifference(actual: self.elementTypeName, expected: castObject.elementTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.elementTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? SetType else { return false }\n        if self.name != rhs.name { return false }\n        if self.elementTypeName != rhs.elementTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:SetType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let elementTypeName: TypeName = aDecoder.decode(forKey: \"elementTypeName\") else { \n                withVaList([\"elementTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.elementTypeName = elementTypeName\n            self.elementType = aDecoder.decode(forKey: \"elementType\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.elementTypeName, forKey: \"elementTypeName\")\n            aCoder.encode(self.elementType, forKey: \"elementType\")\n        }\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"Struct.swift\", content:\n\"\"\"\n//\n//  Struct.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zablocki on 13/09/2016.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n// sourcery: skipDescription\n/// Describes Swift struct\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class Struct: Type {\n\n    // sourcery: skipJSExport\n    public class var kind: String { return \"struct\" }\n\n    /// Returns \"struct\"\n    public override var kind: String { Self.kind }\n\n    /// :nodoc:\n    public override init(name: String = \"\",\n                         parent: Type? = nil,\n                         accessLevel: AccessLevel = .internal,\n                         isExtension: Bool = false,\n                         variables: [Variable] = [],\n                         methods: [Method] = [],\n                         subscripts: [Subscript] = [],\n                         inheritedTypes: [String] = [],\n                         containedTypes: [Type] = [],\n                         typealiases: [Typealias] = [],\n                         genericRequirements: [GenericRequirement] = [],\n                         attributes: AttributeList = [:],\n                         modifiers: [SourceryModifier] = [],\n                         annotations: [String: NSObject] = [:],\n                         documentation: [String] = [],\n                         isGeneric: Bool = false,\n                         implements: [String: Type] = [:],\n                         kind: String = Struct.kind) {\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            genericRequirements: genericRequirements,\n            attributes: attributes,\n            modifiers: modifiers,\n            annotations: annotations,\n            documentation: documentation,\n            isGeneric: isGeneric,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string += \", \"\n        string += \"kind = \\\\(String(describing: self.kind))\"\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Struct else {\n            results.append(\"Incorrect type <expected: Struct, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Struct else { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Struct.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n        }\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"TemplateContext.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n/// :nodoc:\n// sourcery: skipCoding\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class TemplateContext: NSObject, SourceryModel, NSCoding, Diffable {\n    // sourcery: skipJSExport\n    public let parserResult: FileParserResult?\n    public let functions: [SourceryMethod]\n    public let types: Types\n    public let argument: [String: NSObject]\n\n    // sourcery: skipDescription\n    public var type: [String: Type] {\n        return types.typesByName\n    }\n\n    public init(parserResult: FileParserResult?, types: Types, functions: [SourceryMethod], arguments: [String: NSObject]) {\n        self.parserResult = parserResult\n        self.types = types\n        self.functions = functions\n        self.argument = arguments\n    }\n\n    /// :nodoc:\n    required public init?(coder aDecoder: NSCoder) {\n        guard let parserResult: FileParserResult = aDecoder.decode(forKey: \"parserResult\") else { \n                withVaList([\"parserResult\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found. FileParserResults are required for template context that needs persisting.\", arguments: arguments)\n                }\n                fatalError()\n             }\n        guard let argument: [String: NSObject] = aDecoder.decode(forKey: \"argument\") else { \n                withVaList([\"argument\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }\n\n        // if we want to support multiple cycles of encode / decode we need deep copy because composer changes reference types\n        let fileParserResultCopy: FileParserResult? = nil\n//      fileParserResultCopy = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(NSKeyedArchiver.archivedData(withRootObject: parserResult)) as? FileParserResult\n\n        let composed = Composer.uniqueTypesAndFunctions(parserResult, serial: false)\n        self.types = .init(types: composed.types, typealiases: composed.typealiases)\n        self.functions = composed.functions\n\n        self.parserResult = fileParserResultCopy\n        self.argument = argument\n    }\n\n    /// :nodoc:\n    public func encode(with aCoder: NSCoder) {\n        aCoder.encode(self.parserResult, forKey: \"parserResult\")\n        aCoder.encode(self.argument, forKey: \"argument\")\n    }\n\n    public var stencilContext: [String: Any] {\n        return [\n            \"types\": types,\n            \"functions\": functions,\n            \"type\": types.typesByName,\n            \"argument\": argument\n        ]\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"parserResult = \\\\(String(describing: self.parserResult)), \")\n        string.append(\"functions = \\\\(String(describing: self.functions)), \")\n        string.append(\"types = \\\\(String(describing: self.types)), \")\n        string.append(\"argument = \\\\(String(describing: self.argument)), \")\n        string.append(\"stencilContext = \\\\(String(describing: self.stencilContext))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? TemplateContext else {\n            results.append(\"Incorrect type <expected: TemplateContext, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"parserResult\").trackDifference(actual: self.parserResult, expected: castObject.parserResult))\n        results.append(contentsOf: DiffableResult(identifier: \"functions\").trackDifference(actual: self.functions, expected: castObject.functions))\n        results.append(contentsOf: DiffableResult(identifier: \"types\").trackDifference(actual: self.types, expected: castObject.types))\n        results.append(contentsOf: DiffableResult(identifier: \"argument\").trackDifference(actual: self.argument, expected: castObject.argument))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.parserResult)\n        hasher.combine(self.functions)\n        hasher.combine(self.types)\n        hasher.combine(self.argument)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? TemplateContext else { return false }\n        if self.parserResult != rhs.parserResult { return false }\n        if self.functions != rhs.functions { return false }\n        if self.types != rhs.types { return false }\n        if self.argument != rhs.argument { return false }\n        return true\n    }\n\n    // sourcery: skipDescription, skipEquality\n    public var jsContext: [String: Any] {\n        return [\n            \"types\": [\n                \"all\": types.all,\n                \"protocols\": types.protocols,\n                \"classes\": types.classes,\n                \"structs\": types.structs,\n                \"enums\": types.enums,\n                \"extensions\": types.extensions,\n                \"based\": types.based,\n                \"inheriting\": types.inheriting,\n                \"implementing\": types.implementing,\n                \"protocolCompositions\": types.protocolCompositions,\n                \"typealiases\": types.typealiases\n            ] as [String : Any],\n            \"functions\": functions,\n            \"type\": types.typesByName,\n            \"argument\": argument\n        ]\n    }\n\n}\n\nextension ProcessInfo {\n    /// :nodoc:\n    public var context: TemplateContext! {\n        return NSKeyedUnarchiver.unarchiveObject(withFile: arguments[1]) as? TemplateContext\n    }\n}\n\n\"\"\"),\n    .init(name: \"Typealias.swift\", content:\n\"\"\"\nimport Foundation\n\n/// :nodoc:\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class Typealias: NSObject, Typed, SourceryModel, Diffable {\n    // New typealias name\n    public let aliasName: String\n\n    // Target name\n    public let typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    public var type: Type?\n\n    /// module in which this typealias was declared\n    public var module: String?\n    \n    /// Imports that existed in the file that contained this typealias declaration\n    public var imports: [Import] = []\n\n    /// typealias annotations\n    public var annotations: Annotations = [:]\n\n    /// typealias documentation\n    public var documentation: Documentation = []\n\n    // sourcery: skipEquality, skipDescription\n    public var parent: Type? {\n        didSet {\n            parentName = parent?.name\n        }\n    }\n\n    /// Type access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let accessLevel: String\n\n    var parentName: String?\n\n    public var name: String {\n        if let parentName = parent?.name {\n            return \"\\\\(module != nil ? \"\\\\(module!).\" : \"\")\\\\(parentName).\\\\(aliasName)\"\n        } else {\n            return \"\\\\(module != nil ? \"\\\\(module!).\" : \"\")\\\\(aliasName)\"\n        }\n    }\n\n    public init(aliasName: String = \"\", typeName: TypeName, accessLevel: AccessLevel = .internal, parent: Type? = nil, module: String? = nil, annotations: [String: NSObject] = [:], documentation: [String] = []) {\n        self.aliasName = aliasName\n        self.typeName = typeName\n        self.accessLevel = accessLevel.rawValue\n        self.parent = parent\n        self.parentName = parent?.name\n        self.module = module\n        self.annotations = annotations\n        self.documentation = documentation\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"aliasName = \\\\(String(describing: self.aliasName)), \")\n        string.append(\"typeName = \\\\(String(describing: self.typeName)), \")\n        string.append(\"module = \\\\(String(describing: self.module)), \")\n        string.append(\"accessLevel = \\\\(String(describing: self.accessLevel)), \")\n        string.append(\"parentName = \\\\(String(describing: self.parentName)), \")\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\\\(String(describing: self.documentation)), \")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Typealias else {\n            results.append(\"Incorrect type <expected: Typealias, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"aliasName\").trackDifference(actual: self.aliasName, expected: castObject.aliasName))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        results.append(contentsOf: DiffableResult(identifier: \"module\").trackDifference(actual: self.module, expected: castObject.module))\n        results.append(contentsOf: DiffableResult(identifier: \"accessLevel\").trackDifference(actual: self.accessLevel, expected: castObject.accessLevel))\n        results.append(contentsOf: DiffableResult(identifier: \"parentName\").trackDifference(actual: self.parentName, expected: castObject.parentName))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.aliasName)\n        hasher.combine(self.typeName)\n        hasher.combine(self.module)\n        hasher.combine(self.accessLevel)\n        hasher.combine(self.parentName)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Typealias else { return false }\n        if self.aliasName != rhs.aliasName { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.module != rhs.module { return false }\n        if self.accessLevel != rhs.accessLevel { return false }\n        if self.parentName != rhs.parentName { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.annotations != rhs.annotations { return false }\n        return true\n    }\n    \n// sourcery:inline:Typealias.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let aliasName: String = aDecoder.decode(forKey: \"aliasName\") else { \n                withVaList([\"aliasName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.aliasName = aliasName\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n            self.module = aDecoder.decode(forKey: \"module\")\n            guard let imports: [Import] = aDecoder.decode(forKey: \"imports\") else { \n                withVaList([\"imports\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.imports = imports\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            self.parent = aDecoder.decode(forKey: \"parent\")\n            guard let accessLevel: String = aDecoder.decode(forKey: \"accessLevel\") else { \n                withVaList([\"accessLevel\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.accessLevel = accessLevel\n            self.parentName = aDecoder.decode(forKey: \"parentName\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.aliasName, forKey: \"aliasName\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n            aCoder.encode(self.module, forKey: \"module\")\n            aCoder.encode(self.imports, forKey: \"imports\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.parent, forKey: \"parent\")\n            aCoder.encode(self.accessLevel, forKey: \"accessLevel\")\n            aCoder.encode(self.parentName, forKey: \"parentName\")\n        }\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"Typed.swift\", content:\n\"\"\"\nimport Foundation\n\n/// Descibes typed declaration, i.e. variable, method parameter, tuple element, enum case associated value\npublic protocol Typed {\n\n    // sourcery: skipEquality, skipDescription\n    /// Type, if known\n    var type: Type? { get }\n\n    // sourcery: skipEquality, skipDescription\n    /// Type name\n    var typeName: TypeName { get }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether type is optional\n    var isOptional: Bool { get }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether type is implicitly unwrapped optional\n    var isImplicitlyUnwrappedOptional: Bool { get }\n\n    // sourcery: skipEquality, skipDescription\n    /// Type name without attributes and optional type information\n    var unwrappedTypeName: String { get }\n}\n\n\"\"\"),\n    .init(name: \"AssociatedType.swift\", content:\n\"\"\"\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// Describes Swift AssociatedType\n@objcMembers\npublic final class AssociatedType: NSObject, SourceryModel {\n    /// Associated type name\n    public let name: String\n\n    /// Associated type type constraint name, if specified\n    public let typeName: TypeName?\n\n    // sourcery: skipEquality, skipDescription\n    /// Associated type constrained type, if known, i.e. if the type is declared in the scanned sources.\n    public var type: Type?\n\n    /// :nodoc:\n    public init(name: String, typeName: TypeName? = nil, type: Type? = nil) {\n        self.name = name\n        self.typeName = typeName\n        self.type = type\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"typeName = \\\\(String(describing: self.typeName))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? AssociatedType else {\n            results.append(\"Incorrect type <expected: AssociatedType, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? AssociatedType else { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        return true\n    }\n\n// sourcery:inline:AssociatedType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            self.typeName = aDecoder.decode(forKey: \"typeName\")\n            self.type = aDecoder.decode(forKey: \"type\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n        }\n// sourcery:end\n}\n#endif\n\n\"\"\"),\n    .init(name: \"AssociatedValue.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// Defines enum case associated value\n@objcMembers\npublic final class AssociatedValue: NSObject, SourceryModel, AutoDescription, Typed, Annotated, Diffable {\n\n    /// Associated value local name.\n    /// This is a name to be used to construct enum case value\n    public let localName: String?\n\n    /// Associated value external name.\n    /// This is a name to be used to access value in value-bindig\n    public let externalName: String?\n\n    /// Associated value type name\n    public let typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Associated value type, if known\n    public var type: Type?\n\n    /// Associated value default value\n    public let defaultValue: String?\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public var annotations: Annotations = [:]\n\n    /// :nodoc:\n    public init(localName: String?, externalName: String?, typeName: TypeName, type: Type? = nil, defaultValue: String? = nil, annotations: [String: NSObject] = [:]) {\n        self.localName = localName\n        self.externalName = externalName\n        self.typeName = typeName\n        self.type = type\n        self.defaultValue = defaultValue\n        self.annotations = annotations\n    }\n\n    convenience init(name: String? = nil, typeName: TypeName, type: Type? = nil, defaultValue: String? = nil, annotations: [String: NSObject] = [:]) {\n        self.init(localName: name, externalName: name, typeName: typeName, type: type, defaultValue: defaultValue, annotations: annotations)\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"localName = \\\\(String(describing: self.localName)), \")\n        string.append(\"externalName = \\\\(String(describing: self.externalName)), \")\n        string.append(\"typeName = \\\\(String(describing: self.typeName)), \")\n        string.append(\"defaultValue = \\\\(String(describing: self.defaultValue)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? AssociatedValue else {\n            results.append(\"Incorrect type <expected: AssociatedValue, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"localName\").trackDifference(actual: self.localName, expected: castObject.localName))\n        results.append(contentsOf: DiffableResult(identifier: \"externalName\").trackDifference(actual: self.externalName, expected: castObject.externalName))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        results.append(contentsOf: DiffableResult(identifier: \"defaultValue\").trackDifference(actual: self.defaultValue, expected: castObject.defaultValue))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.localName)\n        hasher.combine(self.externalName)\n        hasher.combine(self.typeName)\n        hasher.combine(self.defaultValue)\n        hasher.combine(self.annotations)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? AssociatedValue else { return false }\n        if self.localName != rhs.localName { return false }\n        if self.externalName != rhs.externalName { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.defaultValue != rhs.defaultValue { return false }\n        if self.annotations != rhs.annotations { return false }\n        return true\n    }\n\n// sourcery:inline:AssociatedValue.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.localName = aDecoder.decode(forKey: \"localName\")\n            self.externalName = aDecoder.decode(forKey: \"externalName\")\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n            self.defaultValue = aDecoder.decode(forKey: \"defaultValue\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.localName, forKey: \"localName\")\n            aCoder.encode(self.externalName, forKey: \"externalName\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n            aCoder.encode(self.defaultValue, forKey: \"defaultValue\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n        }\n// sourcery:end\n\n}\n#endif\n\n\"\"\"),\n    .init(name: \"Closure.swift\", content:\n\"\"\"\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// Describes closure type\n@objcMembers\npublic final class ClosureType: NSObject, SourceryModel, Diffable {\n\n    /// Type name used in declaration with stripped whitespaces and new lines\n    public let name: String\n\n    /// List of closure parameters\n    public let parameters: [ClosureParameter]\n\n    /// Return value type name\n    public let returnTypeName: TypeName\n\n    /// Actual return value type name if declaration uses typealias, otherwise just a `returnTypeName`\n    public var actualReturnTypeName: TypeName {\n        return returnTypeName.actualTypeName ?? returnTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Actual return value type, if known\n    public var returnType: Type?\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is optional\n    public var isOptionalReturnType: Bool {\n        return returnTypeName.isOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is implicitly unwrapped optional\n    public var isImplicitlyUnwrappedOptionalReturnType: Bool {\n        return returnTypeName.isImplicitlyUnwrappedOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Return value type name without attributes and optional type information\n    public var unwrappedReturnTypeName: String {\n        return returnTypeName.unwrappedTypeName\n    }\n    \n    /// Whether method is async method\n    public let isAsync: Bool\n\n    /// async keyword\n    public let asyncKeyword: String?\n\n    /// Whether closure throws\n    public let `throws`: Bool\n\n    /// throws or rethrows keyword\n    public let throwsOrRethrowsKeyword: String?\n\n    /// Type of thrown error if specified\n    public let throwsTypeName: TypeName?\n\n    /// :nodoc:\n    public init(name: String, parameters: [ClosureParameter], returnTypeName: TypeName, returnType: Type? = nil, asyncKeyword: String? = nil, throwsOrRethrowsKeyword: String? = nil, throwsTypeName: TypeName? = nil) {\n        self.name = name\n        self.parameters = parameters\n        self.returnTypeName = returnTypeName\n        self.returnType = returnType\n        self.asyncKeyword = asyncKeyword\n        self.isAsync = asyncKeyword != nil\n        self.throwsOrRethrowsKeyword = throwsOrRethrowsKeyword\n        self.`throws` = throwsOrRethrowsKeyword != nil && !(throwsTypeName?.isNever ?? false)\n        self.throwsTypeName = throwsTypeName\n    }\n\n    public var asSource: String {\n        \"\\\\(parameters.asSource)\\\\(asyncKeyword != nil ? \" \\\\(asyncKeyword!)\" : \"\")\\\\(throwsOrRethrowsKeyword != nil ? \" \\\\(throwsOrRethrowsKeyword!)\" : \"\") -> \\\\(returnTypeName.asSource)\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"parameters = \\\\(String(describing: self.parameters)), \")\n        string.append(\"returnTypeName = \\\\(String(describing: self.returnTypeName)), \")\n        string.append(\"actualReturnTypeName = \\\\(String(describing: self.actualReturnTypeName)), \")\n        string.append(\"isAsync = \\\\(String(describing: self.isAsync)), \")\n        string.append(\"asyncKeyword = \\\\(String(describing: self.asyncKeyword)), \")\n        string.append(\"`throws` = \\\\(String(describing: self.`throws`)), \")\n        string.append(\"throwsOrRethrowsKeyword = \\\\(String(describing: self.throwsOrRethrowsKeyword)), \")\n        string.append(\"throwsTypeName = \\\\(String(describing: self.throwsTypeName)), \")\n        string.append(\"asSource = \\\\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? ClosureType else {\n            results.append(\"Incorrect type <expected: ClosureType, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"parameters\").trackDifference(actual: self.parameters, expected: castObject.parameters))\n        results.append(contentsOf: DiffableResult(identifier: \"returnTypeName\").trackDifference(actual: self.returnTypeName, expected: castObject.returnTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"isAsync\").trackDifference(actual: self.isAsync, expected: castObject.isAsync))\n        results.append(contentsOf: DiffableResult(identifier: \"asyncKeyword\").trackDifference(actual: self.asyncKeyword, expected: castObject.asyncKeyword))\n        results.append(contentsOf: DiffableResult(identifier: \"`throws`\").trackDifference(actual: self.`throws`, expected: castObject.`throws`))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsOrRethrowsKeyword\").trackDifference(actual: self.throwsOrRethrowsKeyword, expected: castObject.throwsOrRethrowsKeyword))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsTypeName\").trackDifference(actual: self.throwsTypeName, expected: castObject.throwsTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.parameters)\n        hasher.combine(self.returnTypeName)\n        hasher.combine(self.isAsync)\n        hasher.combine(self.asyncKeyword)\n        hasher.combine(self.`throws`)\n        hasher.combine(self.throwsOrRethrowsKeyword)\n        hasher.combine(self.throwsTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? ClosureType else { return false }\n        if self.name != rhs.name { return false }\n        if self.parameters != rhs.parameters { return false }\n        if self.returnTypeName != rhs.returnTypeName { return false }\n        if self.isAsync != rhs.isAsync { return false }\n        if self.asyncKeyword != rhs.asyncKeyword { return false }\n        if self.`throws` != rhs.`throws` { return false }\n        if self.throwsOrRethrowsKeyword != rhs.throwsOrRethrowsKeyword { return false }\n        if self.throwsTypeName != rhs.throwsTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:ClosureType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let parameters: [ClosureParameter] = aDecoder.decode(forKey: \"parameters\") else { \n                withVaList([\"parameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.parameters = parameters\n            guard let returnTypeName: TypeName = aDecoder.decode(forKey: \"returnTypeName\") else { \n                withVaList([\"returnTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.returnTypeName = returnTypeName\n            self.returnType = aDecoder.decode(forKey: \"returnType\")\n            self.isAsync = aDecoder.decode(forKey: \"isAsync\")\n            self.asyncKeyword = aDecoder.decode(forKey: \"asyncKeyword\")\n            self.`throws` = aDecoder.decode(forKey: \"`throws`\")\n            self.throwsOrRethrowsKeyword = aDecoder.decode(forKey: \"throwsOrRethrowsKeyword\")\n            self.throwsTypeName = aDecoder.decode(forKey: \"throwsTypeName\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.parameters, forKey: \"parameters\")\n            aCoder.encode(self.returnTypeName, forKey: \"returnTypeName\")\n            aCoder.encode(self.returnType, forKey: \"returnType\")\n            aCoder.encode(self.isAsync, forKey: \"isAsync\")\n            aCoder.encode(self.asyncKeyword, forKey: \"asyncKeyword\")\n            aCoder.encode(self.`throws`, forKey: \"`throws`\")\n            aCoder.encode(self.throwsOrRethrowsKeyword, forKey: \"throwsOrRethrowsKeyword\")\n            aCoder.encode(self.throwsTypeName, forKey: \"throwsTypeName\")\n        }\n// sourcery:end\n\n}\n#endif\n\n\"\"\"),\n    .init(name: \"ClosureParameter.swift\", content:\n\"\"\"\n#if canImport(ObjectiveC)\nimport Foundation\n\n// sourcery: skipDiffing\n@objcMembers\npublic final class ClosureParameter: NSObject, SourceryModel, Typed, Annotated {\n    /// Parameter external name\n    public var argumentLabel: String?\n\n    /// Parameter internal name\n    public let name: String?\n\n    /// Parameter type name\n    public let typeName: TypeName\n\n    /// Parameter flag whether it's inout or not\n    public let `inout`: Bool\n\n    // sourcery: skipEquality, skipDescription\n    /// Parameter type, if known\n    public var type: Type?\n\n    /// Parameter if the argument has a variadic type or not\n    public let isVariadic: Bool\n\n    /// Parameter type attributes, i.e. `@escaping`\n    public var typeAttributes: AttributeList {\n        return typeName.attributes\n    }\n\n    /// Method parameter default value expression\n    public var defaultValue: String?\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public var annotations: Annotations = [:]\n\n    /// :nodoc:\n    public init(argumentLabel: String? = nil, name: String? = nil, typeName: TypeName, type: Type? = nil,\n                defaultValue: String? = nil, annotations: [String: NSObject] = [:], isInout: Bool = false, \n                isVariadic: Bool = false) {\n        self.typeName = typeName\n        self.argumentLabel = argumentLabel\n        self.name = name\n        self.type = type\n        self.defaultValue = defaultValue\n        self.annotations = annotations\n        self.`inout` = isInout\n        self.isVariadic = isVariadic\n    }\n\n    public var asSource: String {\n        let typeInfo = \"\\\\(`inout` ? \"inout \" : \"\")\\\\(typeName.asSource)\\\\(isVariadic ? \"...\" : \"\")\"\n        if argumentLabel?.nilIfNotValidParameterName == nil, name?.nilIfNotValidParameterName == nil {\n            return typeInfo\n        }\n\n        let typeSuffix = \": \\\\(typeInfo)\"\n        guard argumentLabel != name else {\n            return name ?? \"\" + typeSuffix\n        }\n\n        let labels = [argumentLabel ?? \"_\", name?.nilIfEmpty]\n          .compactMap { $0 }\n          .joined(separator: \" \")\n\n        return (labels.nilIfEmpty ?? \"_\") + typeSuffix\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.argumentLabel)\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        hasher.combine(self.`inout`)\n        hasher.combine(self.isVariadic)\n        hasher.combine(self.defaultValue)\n        hasher.combine(self.annotations)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"argumentLabel = \\\\(String(describing: self.argumentLabel)), \")\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"typeName = \\\\(String(describing: self.typeName)), \")\n        string.append(\"`inout` = \\\\(String(describing: self.`inout`)), \")\n        string.append(\"typeAttributes = \\\\(String(describing: self.typeAttributes)), \")\n        string.append(\"defaultValue = \\\\(String(describing: self.defaultValue)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations)), \")\n        string.append(\"asSource = \\\\(String(describing: self.asSource))\")\n        return string\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? ClosureParameter else { return false }\n        if self.argumentLabel != rhs.argumentLabel { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.`inout` != rhs.`inout` { return false }\n        if self.isVariadic != rhs.isVariadic { return false }\n        if self.defaultValue != rhs.defaultValue { return false }\n        if self.annotations != rhs.annotations { return false }\n        return true\n    }\n\n    // sourcery:inline:ClosureParameter.AutoCoding\n\n            /// :nodoc:\n            required public init?(coder aDecoder: NSCoder) {\n                self.argumentLabel = aDecoder.decode(forKey: \"argumentLabel\")\n                self.name = aDecoder.decode(forKey: \"name\")\n                guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                    withVaList([\"typeName\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.typeName = typeName\n                self.`inout` = aDecoder.decode(forKey: \"`inout`\")\n                self.type = aDecoder.decode(forKey: \"type\")\n                self.isVariadic = aDecoder.decode(forKey: \"isVariadic\")\n                self.defaultValue = aDecoder.decode(forKey: \"defaultValue\")\n                guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                    withVaList([\"annotations\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.annotations = annotations\n            }\n\n            /// :nodoc:\n            public func encode(with aCoder: NSCoder) {\n                aCoder.encode(self.argumentLabel, forKey: \"argumentLabel\")\n                aCoder.encode(self.name, forKey: \"name\")\n                aCoder.encode(self.typeName, forKey: \"typeName\")\n                aCoder.encode(self.`inout`, forKey: \"`inout`\")\n                aCoder.encode(self.type, forKey: \"type\")\n                aCoder.encode(self.isVariadic, forKey: \"isVariadic\")\n                aCoder.encode(self.defaultValue, forKey: \"defaultValue\")\n                aCoder.encode(self.annotations, forKey: \"annotations\")\n            }\n\n    // sourcery:end\n}\n\nextension Array where Element == ClosureParameter {\n    public var asSource: String {\n        \"(\\\\(map { $0.asSource }.joined(separator: \", \")))\"\n    }\n}\n#endif\n\n\"\"\"),\n    .init(name: \"Enum.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// Defines Swift enum\n@objcMembers\npublic final class Enum: Type {\n\n    // sourcery: skipJSExport\n    public class var kind: String { return \"enum\" }\n\n    // sourcery: skipDescription\n    /// Returns \"enum\"\n    public override var kind: String { Self.kind }\n\n    /// Enum cases\n    public var cases: [EnumCase]\n\n    /**\n     Enum raw value type name, if any. This type is removed from enum's `based` and `inherited` types collections.\n\n        - important: Unless raw type is specified explicitly via type alias RawValue it will be set to the first type in the inheritance chain.\n     So if your enum does not have raw value but implements protocols you'll have to specify conformance to these protocols via extension to get enum with nil raw value type and all based and inherited types.\n     */\n    public var rawTypeName: TypeName? {\n        didSet {\n            if let rawTypeName = rawTypeName {\n                hasRawType = true\n                if let index = inheritedTypes.firstIndex(of: rawTypeName.name) {\n                    inheritedTypes.remove(at: index)\n                }\n                if based[rawTypeName.name] != nil {\n                    based[rawTypeName.name] = nil\n                }\n            } else {\n                hasRawType = false\n            }\n        }\n    }\n\n    // sourcery: skipDescription, skipEquality\n    /// :nodoc:\n    public private(set) var hasRawType: Bool\n\n    // sourcery: skipDescription, skipEquality\n    /// Enum raw value type, if known\n    public var rawType: Type?\n\n    // sourcery: skipEquality, skipDescription, skipCoding\n    /// Names of types or protocols this type inherits from, including unknown (not scanned) types\n    public override var based: [String: String] {\n        didSet {\n            if let rawTypeName = rawTypeName, based[rawTypeName.name] != nil {\n                based[rawTypeName.name] = nil\n            }\n        }\n    }\n\n    /// Whether enum contains any associated values\n    public var hasAssociatedValues: Bool {\n        return cases.contains(where: { $0.hasAssociatedValue })\n    }\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                parent: Type? = nil,\n                accessLevel: AccessLevel = .internal,\n                isExtension: Bool = false,\n                inheritedTypes: [String] = [],\n                rawTypeName: TypeName? = nil,\n                cases: [EnumCase] = [],\n                variables: [Variable] = [],\n                methods: [Method] = [],\n                containedTypes: [Type] = [],\n                typealiases: [Typealias] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                isGeneric: Bool = false) {\n\n        self.cases = cases\n        self.rawTypeName = rawTypeName\n        self.hasRawType = rawTypeName != nil || !inheritedTypes.isEmpty\n\n        super.init(name: name, parent: parent, accessLevel: accessLevel, isExtension: isExtension, variables: variables, methods: methods, inheritedTypes: inheritedTypes, containedTypes: containedTypes, typealiases: typealiases, attributes: attributes, modifiers: modifiers, annotations: annotations, documentation: documentation, isGeneric: isGeneric, kind: Self.kind)\n\n        if let rawTypeName = rawTypeName?.name, let index = self.inheritedTypes.firstIndex(of: rawTypeName) {\n            self.inheritedTypes.remove(at: index)\n        }\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string.append(\", \")\n        string.append(\"cases = \\\\(String(describing: self.cases)), \")\n        string.append(\"rawTypeName = \\\\(String(describing: self.rawTypeName)), \")\n        string.append(\"hasAssociatedValues = \\\\(String(describing: self.hasAssociatedValues))\")\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Enum else {\n            results.append(\"Incorrect type <expected: Enum, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"cases\").trackDifference(actual: self.cases, expected: castObject.cases))\n        results.append(contentsOf: DiffableResult(identifier: \"rawTypeName\").trackDifference(actual: self.rawTypeName, expected: castObject.rawTypeName))\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.cases)\n        hasher.combine(self.rawTypeName)\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Enum else { return false }\n        if self.cases != rhs.cases { return false }\n        if self.rawTypeName != rhs.rawTypeName { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Enum.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let cases: [EnumCase] = aDecoder.decode(forKey: \"cases\") else { \n                withVaList([\"cases\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.cases = cases\n            self.rawTypeName = aDecoder.decode(forKey: \"rawTypeName\")\n            self.hasRawType = aDecoder.decode(forKey: \"hasRawType\")\n            self.rawType = aDecoder.decode(forKey: \"rawType\")\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n            aCoder.encode(self.cases, forKey: \"cases\")\n            aCoder.encode(self.rawTypeName, forKey: \"rawTypeName\")\n            aCoder.encode(self.hasRawType, forKey: \"hasRawType\")\n            aCoder.encode(self.rawType, forKey: \"rawType\")\n        }\n// sourcery:end\n}\n#endif\n\n\"\"\"),\n    .init(name: \"EnumCase.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// Defines enum case\n@objcMembers\npublic final class EnumCase: NSObject, SourceryModel, AutoDescription, Annotated, Documented, Diffable {\n\n    /// Enum case name\n    public let name: String\n\n    /// Enum case raw value, if any\n    public let rawValue: String?\n\n    /// Enum case associated values\n    public let associatedValues: [AssociatedValue]\n\n    /// Enum case annotations\n    public var annotations: Annotations = [:]\n\n    public var documentation: Documentation = []\n\n    /// Whether enum case is indirect\n    public let indirect: Bool\n\n    /// Whether enum case has associated value\n    public var hasAssociatedValue: Bool {\n        return !associatedValues.isEmpty\n    }\n\n    // Underlying parser data, never to be used by anything else\n    // sourcery: skipEquality, skipDescription, skipCoding, skipJSExport\n    /// :nodoc:\n    public var __parserData: Any?\n\n    /// :nodoc:\n    public init(name: String, rawValue: String? = nil, associatedValues: [AssociatedValue] = [], annotations: [String: NSObject] = [:], documentation: [String] = [], indirect: Bool = false) {\n        self.name = name\n        self.rawValue = rawValue\n        self.associatedValues = associatedValues\n        self.annotations = annotations\n        self.documentation = documentation\n        self.indirect = indirect\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"rawValue = \\\\(String(describing: self.rawValue)), \")\n        string.append(\"associatedValues = \\\\(String(describing: self.associatedValues)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\\\(String(describing: self.documentation)), \")\n        string.append(\"indirect = \\\\(String(describing: self.indirect)), \")\n        string.append(\"hasAssociatedValue = \\\\(String(describing: self.hasAssociatedValue))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? EnumCase else {\n            results.append(\"Incorrect type <expected: EnumCase, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"rawValue\").trackDifference(actual: self.rawValue, expected: castObject.rawValue))\n        results.append(contentsOf: DiffableResult(identifier: \"associatedValues\").trackDifference(actual: self.associatedValues, expected: castObject.associatedValues))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"indirect\").trackDifference(actual: self.indirect, expected: castObject.indirect))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.rawValue)\n        hasher.combine(self.associatedValues)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.indirect)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? EnumCase else { return false }\n        if self.name != rhs.name { return false }\n        if self.rawValue != rhs.rawValue { return false }\n        if self.associatedValues != rhs.associatedValues { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.indirect != rhs.indirect { return false }\n        return true\n    }\n\n// sourcery:inline:EnumCase.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            self.rawValue = aDecoder.decode(forKey: \"rawValue\")\n            guard let associatedValues: [AssociatedValue] = aDecoder.decode(forKey: \"associatedValues\") else { \n                withVaList([\"associatedValues\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.associatedValues = associatedValues\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            self.indirect = aDecoder.decode(forKey: \"indirect\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.rawValue, forKey: \"rawValue\")\n            aCoder.encode(self.associatedValues, forKey: \"associatedValues\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.indirect, forKey: \"indirect\")\n        }\n// sourcery:end\n}\n#endif\n\n\"\"\"),\n    .init(name: \"GenericParameter.swift\", content:\n\"\"\"\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// Descibes Swift generic parameter\n@objcMembers\npublic final class GenericParameter: NSObject, SourceryModel, Diffable {\n\n    /// Generic parameter name\n    public var name: String\n\n    /// Generic parameter inherited type\n    public var inheritedTypeName: TypeName?\n\n    /// :nodoc:\n    public init(name: String, inheritedTypeName: TypeName? = nil) {\n        self.name = name\n        self.inheritedTypeName = inheritedTypeName\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"inheritedTypeName = \\\\(String(describing: self.inheritedTypeName))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? GenericParameter else {\n            results.append(\"Incorrect type <expected: GenericParameter, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"inheritedTypeName\").trackDifference(actual: self.inheritedTypeName, expected: castObject.inheritedTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.inheritedTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? GenericParameter else { return false }\n        if self.name != rhs.name { return false }\n        if self.inheritedTypeName != rhs.inheritedTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:GenericParameter.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            self.inheritedTypeName = aDecoder.decode(forKey: \"inheritedTypeName\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.inheritedTypeName, forKey: \"inheritedTypeName\")\n        }\n\n// sourcery:end\n}\n#endif\n\n\"\"\"),\n    .init(name: \"GenericRequirement.swift\", content:\n\"\"\"\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// Descibes Swift generic requirement\n@objcMembers\npublic class GenericRequirement: NSObject, SourceryModel, Diffable {\n\n    public enum Relationship: String {\n        case equals\n        case conformsTo\n\n        var syntax: String {\n            switch self {\n            case .equals:\n                return \"==\"\n            case .conformsTo:\n                return \":\"\n            }\n        }\n    }\n\n    public var leftType: AssociatedType\n    public let rightType: GenericTypeParameter\n\n    /// relationship name\n    public let relationship: String\n\n    /// Syntax e.g. `==` or `:`\n    public let relationshipSyntax: String\n\n    public init(leftType: AssociatedType, rightType: GenericTypeParameter, relationship: Relationship) {\n        self.leftType = leftType\n        self.rightType = rightType\n        self.relationship = relationship.rawValue\n        self.relationshipSyntax = relationship.syntax\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"leftType = \\\\(String(describing: self.leftType)), \")\n        string.append(\"rightType = \\\\(String(describing: self.rightType)), \")\n        string.append(\"relationship = \\\\(String(describing: self.relationship)), \")\n        string.append(\"relationshipSyntax = \\\\(String(describing: self.relationshipSyntax))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? GenericRequirement else {\n            results.append(\"Incorrect type <expected: GenericRequirement, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"leftType\").trackDifference(actual: self.leftType, expected: castObject.leftType))\n        results.append(contentsOf: DiffableResult(identifier: \"rightType\").trackDifference(actual: self.rightType, expected: castObject.rightType))\n        results.append(contentsOf: DiffableResult(identifier: \"relationship\").trackDifference(actual: self.relationship, expected: castObject.relationship))\n        results.append(contentsOf: DiffableResult(identifier: \"relationshipSyntax\").trackDifference(actual: self.relationshipSyntax, expected: castObject.relationshipSyntax))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.leftType)\n        hasher.combine(self.rightType)\n        hasher.combine(self.relationship)\n        hasher.combine(self.relationshipSyntax)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? GenericRequirement else { return false }\n        if self.leftType != rhs.leftType { return false }\n        if self.rightType != rhs.rightType { return false }\n        if self.relationship != rhs.relationship { return false }\n        if self.relationshipSyntax != rhs.relationshipSyntax { return false }\n        return true\n    }\n\n    // sourcery:inline:GenericRequirement.AutoCoding\n\n            /// :nodoc:\n            required public init?(coder aDecoder: NSCoder) {\n                guard let leftType: AssociatedType = aDecoder.decode(forKey: \"leftType\") else { \n                    withVaList([\"leftType\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.leftType = leftType\n                guard let rightType: GenericTypeParameter = aDecoder.decode(forKey: \"rightType\") else { \n                    withVaList([\"rightType\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.rightType = rightType\n                guard let relationship: String = aDecoder.decode(forKey: \"relationship\") else { \n                    withVaList([\"relationship\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.relationship = relationship\n                guard let relationshipSyntax: String = aDecoder.decode(forKey: \"relationshipSyntax\") else { \n                    withVaList([\"relationshipSyntax\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.relationshipSyntax = relationshipSyntax\n            }\n\n            /// :nodoc:\n            public func encode(with aCoder: NSCoder) {\n                aCoder.encode(self.leftType, forKey: \"leftType\")\n                aCoder.encode(self.rightType, forKey: \"rightType\")\n                aCoder.encode(self.relationship, forKey: \"relationship\")\n                aCoder.encode(self.relationshipSyntax, forKey: \"relationshipSyntax\")\n            }\n    // sourcery:end\n}\n#endif\n\n\"\"\"),\n    .init(name: \"GenericTypeParameter.swift\", content:\n\"\"\"\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// Descibes Swift generic type parameter\n@objcMembers\npublic final class GenericTypeParameter: NSObject, SourceryModel, Diffable {\n\n    /// Generic parameter type name\n    public var typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Generic parameter type, if known\n    public var type: Type?\n\n    /// :nodoc:\n    public init(typeName: TypeName, type: Type? = nil) {\n        self.typeName = typeName\n        self.type = type\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"typeName = \\\\(String(describing: self.typeName))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? GenericTypeParameter else {\n            results.append(\"Incorrect type <expected: GenericTypeParameter, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.typeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? GenericTypeParameter else { return false }\n        if self.typeName != rhs.typeName { return false }\n        return true\n    }\n\n// sourcery:inline:GenericTypeParameter.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n        }\n\n// sourcery:end\n}\n#endif\n\n\"\"\"),\n    .init(name: \"Method.swift\", content:\n\"\"\"\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// :nodoc:\npublic typealias SourceryMethod = Method\n\n/// Describes method\n@objc(SwiftMethod) @objcMembers\npublic final class Method: NSObject, SourceryModel, Annotated, Documented, Definition, Diffable {\n\n    /// Full method name, including generic constraints, i.e. `foo<T>(bar: T)`\n    public let name: String\n\n    /// Method name including arguments names, i.e. `foo(bar:)`\n    public var selectorName: String\n\n    // sourcery: skipEquality, skipDescription\n    /// Method name without arguments names and parentheses, i.e. `foo<T>`\n    public var shortName: String {\n        return name.range(of: \"(\").map({ String(name[..<$0.lowerBound]) }) ?? name\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Method name without arguments names, parentheses and generic types, i.e. `foo` (can be used to generate code for method call)\n    public var callName: String {\n        return shortName.range(of: \"<\").map({ String(shortName[..<$0.lowerBound]) }) ?? shortName\n    }\n\n    /// Method parameters\n    public var parameters: [MethodParameter]\n\n    /// Return value type name used in declaration, including generic constraints, i.e. `where T: Equatable`\n    public var returnTypeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Actual return value type name if declaration uses typealias, otherwise just a `returnTypeName`\n    public var actualReturnTypeName: TypeName {\n        return returnTypeName.actualTypeName ?? returnTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Actual return value type, if known\n    public var returnType: Type?\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is optional\n    public var isOptionalReturnType: Bool {\n        return returnTypeName.isOptional || isFailableInitializer\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is implicitly unwrapped optional\n    public var isImplicitlyUnwrappedOptionalReturnType: Bool {\n        return returnTypeName.isImplicitlyUnwrappedOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Return value type name without attributes and optional type information\n    public var unwrappedReturnTypeName: String {\n        return returnTypeName.unwrappedTypeName\n    }\n\n    /// Whether method is async method\n    public let isAsync: Bool\n\n    /// Whether method is distributed\n    public var isDistributed: Bool {\n        modifiers.contains(where: { $0.name == \"distributed\" })\n    }\n\n    /// Whether method throws\n    public let `throws`: Bool\n\n    /// Type of thrown error if specified\n    public let throwsTypeName: TypeName?\n\n    // sourcery: skipEquality, skipDescription\n    /// Return if the throwsType is generic\n    public var isThrowsTypeGeneric: Bool {\n        return genericParameters.contains { $0.name == throwsTypeName?.name }\n    }\n\n    /// Whether method rethrows\n    public let `rethrows`: Bool\n\n    /// Method access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let accessLevel: String\n\n    /// Whether method is a static method\n    public let isStatic: Bool\n\n    /// Whether method is a class method\n    public let isClass: Bool\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is an initializer\n    public var isInitializer: Bool {\n        return selectorName.hasPrefix(\"init(\") || selectorName == \"init\"\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is an deinitializer\n    public var isDeinitializer: Bool {\n        return selectorName == \"deinit\"\n    }\n\n    /// Whether method is a failable initializer\n    public let isFailableInitializer: Bool\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is a convenience initializer\n    public var isConvenienceInitializer: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.convenience.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is required\n    public var isRequired: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.required.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is final\n    public var isFinal: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.final.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is mutating\n    public var isMutating: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.mutating.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is generic\n    public var isGeneric: Bool {\n        shortName.hasSuffix(\">\")\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is optional (in an Objective-C protocol)\n    public var isOptional: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.optional.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is nonisolated (this modifier only applies to actor methods)\n    public var isNonisolated: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.nonisolated.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is dynamic\n    public var isDynamic: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.dynamic.rawValue }\n    }\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public let annotations: Annotations\n\n    public let documentation: Documentation\n\n    /// Reference to type name where the method is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc\n    public let definedInTypeName: TypeName?\n\n    // sourcery: skipEquality, skipDescription\n    /// Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a `definedInTypeName`\n    public var actualDefinedInTypeName: TypeName? {\n        return definedInTypeName?.actualTypeName ?? definedInTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Reference to actual type where the object is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc or type is unknown\n    public var definedInType: Type?\n\n    /// Method attributes, i.e. `@discardableResult`\n    public let attributes: AttributeList\n\n    /// Method modifiers, i.e. `private`\n    public let modifiers: [SourceryModifier]\n\n    // Underlying parser data, never to be used by anything else\n    // sourcery: skipEquality, skipDescription, skipCoding, skipJSExport\n    /// :nodoc:\n    public var __parserData: Any?\n\n    /// list of generic requirements\n    public var genericRequirements: [GenericRequirement]\n\n    /// List of generic parameters\n    ///\n    /// - Example:\n    ///\n    ///   ```swift\n    ///   func method<GenericParameter>(foo: GenericParameter)\n    ///                    ^ ~ a generic parameter\n    ///   ```\n    public var genericParameters: [GenericParameter]\n\n    /// :nodoc:\n    public init(name: String,\n                selectorName: String? = nil,\n                parameters: [MethodParameter] = [],\n                returnTypeName: TypeName = TypeName(name: \"Void\"),\n                isAsync: Bool = false,\n                throws: Bool = false,\n                throwsTypeName: TypeName? = nil,\n                rethrows: Bool = false,\n                accessLevel: AccessLevel = .internal,\n                isStatic: Bool = false,\n                isClass: Bool = false,\n                isFailableInitializer: Bool = false,\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                definedInTypeName: TypeName? = nil,\n                genericRequirements: [GenericRequirement] = [],\n                genericParameters: [GenericParameter] = []) {\n        self.name = name\n        self.selectorName = selectorName ?? name\n        self.parameters = parameters\n        self.returnTypeName = returnTypeName\n        self.isAsync = isAsync\n        self.throws = `throws`\n        self.throwsTypeName = throwsTypeName\n        self.rethrows = `rethrows`\n        self.accessLevel = accessLevel.rawValue\n        self.isStatic = isStatic\n        self.isClass = isClass\n        self.isFailableInitializer = isFailableInitializer\n        self.attributes = attributes\n        self.modifiers = modifiers\n        self.annotations = annotations\n        self.documentation = documentation\n        self.definedInTypeName = definedInTypeName\n        self.genericRequirements = genericRequirements\n        self.genericParameters = genericParameters\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"selectorName = \\\\(String(describing: self.selectorName)), \")\n        string.append(\"parameters = \\\\(String(describing: self.parameters)), \")\n        string.append(\"returnTypeName = \\\\(String(describing: self.returnTypeName)), \")\n        string.append(\"isAsync = \\\\(String(describing: self.isAsync)), \")\n        string.append(\"`throws` = \\\\(String(describing: self.`throws`)), \")\n        string.append(\"throwsTypeName = \\\\(String(describing: self.throwsTypeName)), \")\n        string.append(\"`rethrows` = \\\\(String(describing: self.`rethrows`)), \")\n        string.append(\"accessLevel = \\\\(String(describing: self.accessLevel)), \")\n        string.append(\"isStatic = \\\\(String(describing: self.isStatic)), \")\n        string.append(\"isClass = \\\\(String(describing: self.isClass)), \")\n        string.append(\"isFailableInitializer = \\\\(String(describing: self.isFailableInitializer)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\\\(String(describing: self.documentation)), \")\n        string.append(\"definedInTypeName = \\\\(String(describing: self.definedInTypeName)), \")\n        string.append(\"attributes = \\\\(String(describing: self.attributes)), \")\n        string.append(\"modifiers = \\\\(String(describing: self.modifiers)), \")\n        string.append(\"genericRequirements = \\\\(String(describing: self.genericRequirements)), \")\n        string.append(\"genericParameters = \\\\(String(describing: self.genericParameters))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Method else {\n            results.append(\"Incorrect type <expected: Method, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"selectorName\").trackDifference(actual: self.selectorName, expected: castObject.selectorName))\n        results.append(contentsOf: DiffableResult(identifier: \"parameters\").trackDifference(actual: self.parameters, expected: castObject.parameters))\n        results.append(contentsOf: DiffableResult(identifier: \"returnTypeName\").trackDifference(actual: self.returnTypeName, expected: castObject.returnTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"isAsync\").trackDifference(actual: self.isAsync, expected: castObject.isAsync))\n        results.append(contentsOf: DiffableResult(identifier: \"`throws`\").trackDifference(actual: self.`throws`, expected: castObject.`throws`))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsTypeName\").trackDifference(actual: self.throwsTypeName, expected: castObject.throwsTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"`rethrows`\").trackDifference(actual: self.`rethrows`, expected: castObject.`rethrows`))\n        results.append(contentsOf: DiffableResult(identifier: \"accessLevel\").trackDifference(actual: self.accessLevel, expected: castObject.accessLevel))\n        results.append(contentsOf: DiffableResult(identifier: \"isStatic\").trackDifference(actual: self.isStatic, expected: castObject.isStatic))\n        results.append(contentsOf: DiffableResult(identifier: \"isClass\").trackDifference(actual: self.isClass, expected: castObject.isClass))\n        results.append(contentsOf: DiffableResult(identifier: \"isFailableInitializer\").trackDifference(actual: self.isFailableInitializer, expected: castObject.isFailableInitializer))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"definedInTypeName\").trackDifference(actual: self.definedInTypeName, expected: castObject.definedInTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        results.append(contentsOf: DiffableResult(identifier: \"genericRequirements\").trackDifference(actual: self.genericRequirements, expected: castObject.genericRequirements))\n        results.append(contentsOf: DiffableResult(identifier: \"genericParameters\").trackDifference(actual: self.genericParameters, expected: castObject.genericParameters))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.selectorName)\n        hasher.combine(self.parameters)\n        hasher.combine(self.returnTypeName)\n        hasher.combine(self.isAsync)\n        hasher.combine(self.`throws`)\n        hasher.combine(self.throwsTypeName)\n        hasher.combine(self.`rethrows`)\n        hasher.combine(self.accessLevel)\n        hasher.combine(self.isStatic)\n        hasher.combine(self.isClass)\n        hasher.combine(self.isFailableInitializer)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.definedInTypeName)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        hasher.combine(self.genericRequirements)\n        hasher.combine(self.genericParameters)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Method else { return false }\n        if self.name != rhs.name { return false }\n        if self.selectorName != rhs.selectorName { return false }\n        if self.parameters != rhs.parameters { return false }\n        if self.returnTypeName != rhs.returnTypeName { return false }\n        if self.isAsync != rhs.isAsync { return false }\n        if self.isDistributed != rhs.isDistributed { return false }\n        if self.`throws` != rhs.`throws` { return false }\n        if self.throwsTypeName != rhs.throwsTypeName { return false }\n        if self.`rethrows` != rhs.`rethrows` { return false }\n        if self.accessLevel != rhs.accessLevel { return false }\n        if self.isStatic != rhs.isStatic { return false }\n        if self.isClass != rhs.isClass { return false }\n        if self.isFailableInitializer != rhs.isFailableInitializer { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.definedInTypeName != rhs.definedInTypeName { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        if self.genericRequirements != rhs.genericRequirements { return false }\n        if self.genericParameters != rhs.genericParameters { return false }\n        return true\n    }\n\n// sourcery:inline:Method.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let selectorName: String = aDecoder.decode(forKey: \"selectorName\") else { \n                withVaList([\"selectorName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.selectorName = selectorName\n            guard let parameters: [MethodParameter] = aDecoder.decode(forKey: \"parameters\") else { \n                withVaList([\"parameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.parameters = parameters\n            guard let returnTypeName: TypeName = aDecoder.decode(forKey: \"returnTypeName\") else { \n                withVaList([\"returnTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.returnTypeName = returnTypeName\n            self.returnType = aDecoder.decode(forKey: \"returnType\")\n            self.isAsync = aDecoder.decode(forKey: \"isAsync\")\n            self.`throws` = aDecoder.decode(forKey: \"`throws`\")\n            self.throwsTypeName = aDecoder.decode(forKey: \"throwsTypeName\")\n            self.`rethrows` = aDecoder.decode(forKey: \"`rethrows`\")\n            guard let accessLevel: String = aDecoder.decode(forKey: \"accessLevel\") else { \n                withVaList([\"accessLevel\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.accessLevel = accessLevel\n            self.isStatic = aDecoder.decode(forKey: \"isStatic\")\n            self.isClass = aDecoder.decode(forKey: \"isClass\")\n            self.isFailableInitializer = aDecoder.decode(forKey: \"isFailableInitializer\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            self.definedInTypeName = aDecoder.decode(forKey: \"definedInTypeName\")\n            self.definedInType = aDecoder.decode(forKey: \"definedInType\")\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            guard let genericRequirements: [GenericRequirement] = aDecoder.decode(forKey: \"genericRequirements\") else { \n                withVaList([\"genericRequirements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericRequirements = genericRequirements\n            guard let genericParameters: [GenericParameter] = aDecoder.decode(forKey: \"genericParameters\") else { \n                withVaList([\"genericParameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericParameters = genericParameters\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.selectorName, forKey: \"selectorName\")\n            aCoder.encode(self.parameters, forKey: \"parameters\")\n            aCoder.encode(self.returnTypeName, forKey: \"returnTypeName\")\n            aCoder.encode(self.returnType, forKey: \"returnType\")\n            aCoder.encode(self.isAsync, forKey: \"isAsync\")\n            aCoder.encode(self.`throws`, forKey: \"`throws`\")\n            aCoder.encode(self.throwsTypeName, forKey: \"throwsTypeName\")\n            aCoder.encode(self.`rethrows`, forKey: \"`rethrows`\")\n            aCoder.encode(self.accessLevel, forKey: \"accessLevel\")\n            aCoder.encode(self.isStatic, forKey: \"isStatic\")\n            aCoder.encode(self.isClass, forKey: \"isClass\")\n            aCoder.encode(self.isFailableInitializer, forKey: \"isFailableInitializer\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.definedInTypeName, forKey: \"definedInTypeName\")\n            aCoder.encode(self.definedInType, forKey: \"definedInType\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.genericRequirements, forKey: \"genericRequirements\")\n            aCoder.encode(self.genericParameters, forKey: \"genericParameters\")\n        }\n// sourcery:end\n}\n#endif\n\n\"\"\"),\n    .init(name: \"MethodParameter.swift\", content:\n\"\"\"\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// Describes method parameter\n@objcMembers\npublic class MethodParameter: NSObject, SourceryModel, Typed, Annotated, Diffable {\n    /// Parameter external name\n    public var argumentLabel: String?\n\n    // Note: although method parameter can have no name, this property is not optional,\n    // this is so to maintain compatibility with existing templates.\n    /// Parameter internal name\n    public let name: String\n\n    /// Parameter type name\n    public let typeName: TypeName\n\n    /// Parameter flag whether it's inout or not\n    public let `inout`: Bool\n    \n    /// Is this variadic parameter?\n    public let isVariadic: Bool\n\n    // sourcery: skipEquality, skipDescription\n    /// Parameter type, if known\n    public var type: Type?\n\n    /// Parameter type attributes, i.e. `@escaping`\n    public var typeAttributes: AttributeList {\n        return typeName.attributes\n    }\n\n    /// Method parameter default value expression\n    public var defaultValue: String?\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public var annotations: Annotations = [:]\n\n    /// Method parameter index in the argument list\n    public var index: Int\n\n    /// :nodoc:\n    public init(argumentLabel: String?, name: String = \"\", index: Int, typeName: TypeName, type: Type? = nil, defaultValue: String? = nil, annotations: [String: NSObject] = [:], isInout: Bool = false, isVariadic: Bool = false) {\n        self.typeName = typeName\n        self.argumentLabel = argumentLabel\n        self.name = name\n        self.index = index\n        self.type = type\n        self.defaultValue = defaultValue\n        self.annotations = annotations\n        self.`inout` = isInout\n        self.isVariadic = isVariadic\n    }\n\n    /// :nodoc:\n    public init(name: String = \"\", index: Int, typeName: TypeName, type: Type? = nil, defaultValue: String? = nil, annotations: [String: NSObject] = [:], isInout: Bool = false, isVariadic: Bool = false) {\n        self.typeName = typeName\n        self.argumentLabel = name\n        self.name = name\n        self.index = index\n        self.type = type\n        self.defaultValue = defaultValue\n        self.annotations = annotations\n        self.`inout` = isInout\n        self.isVariadic = isVariadic\n    }\n\n    public var asSource: String {\n        let values: String = defaultValue.map { \" = \\\\($0)\" } ?? \"\"\n        let variadicity: String = isVariadic ? \"...\" : \"\"\n        let inoutness: String = `inout` ? \"inout \" : \"\"\n        let typeSuffix = \": \\\\(inoutness)\\\\(typeName.asSource)\\\\(values)\\\\(variadicity)\"\n        guard argumentLabel != name else {\n            return name + typeSuffix\n        }\n\n        let labels = [argumentLabel ?? \"_\", name.nilIfEmpty]\n          .compactMap { $0 }\n          .joined(separator: \" \")\n\n        return (labels.nilIfEmpty ?? \"_\") + typeSuffix\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"argumentLabel = \\\\(String(describing: self.argumentLabel)), \")\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"typeName = \\\\(String(describing: self.typeName)), \")\n        string.append(\"`inout` = \\\\(String(describing: self.`inout`)), \")\n        string.append(\"isVariadic = \\\\(String(describing: self.isVariadic)), \")\n        string.append(\"typeAttributes = \\\\(String(describing: self.typeAttributes)), \")\n        string.append(\"defaultValue = \\\\(String(describing: self.defaultValue)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations)), \")\n        string.append(\"asSource = \\\\(String(describing: self.asSource)), \")\n        string.append(\"index = \\\\(String(describing: self.index))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? MethodParameter else {\n            results.append(\"Incorrect type <expected: MethodParameter, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"argumentLabel\").trackDifference(actual: self.argumentLabel, expected: castObject.argumentLabel))\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        results.append(contentsOf: DiffableResult(identifier: \"`inout`\").trackDifference(actual: self.`inout`, expected: castObject.`inout`))\n        results.append(contentsOf: DiffableResult(identifier: \"isVariadic\").trackDifference(actual: self.isVariadic, expected: castObject.isVariadic))\n        results.append(contentsOf: DiffableResult(identifier: \"defaultValue\").trackDifference(actual: self.defaultValue, expected: castObject.defaultValue))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"index\").trackDifference(actual: self.index, expected: castObject.index))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.argumentLabel)\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        hasher.combine(self.`inout`)\n        hasher.combine(self.isVariadic)\n        hasher.combine(self.defaultValue)\n        hasher.combine(self.annotations)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? MethodParameter else { return false }\n        if self.argumentLabel != rhs.argumentLabel { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.`inout` != rhs.`inout` { return false }\n        if self.isVariadic != rhs.isVariadic { return false }\n        if self.defaultValue != rhs.defaultValue { return false }\n        if self.annotations != rhs.annotations { return false }\n        return true\n    }\n\n// sourcery:inline:MethodParameter.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.argumentLabel = aDecoder.decode(forKey: \"argumentLabel\")\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.`inout` = aDecoder.decode(forKey: \"`inout`\")\n            self.isVariadic = aDecoder.decode(forKey: \"isVariadic\")\n            self.type = aDecoder.decode(forKey: \"type\")\n            self.defaultValue = aDecoder.decode(forKey: \"defaultValue\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            self.index = aDecoder.decode(forKey: \"index\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.argumentLabel, forKey: \"argumentLabel\")\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.`inout`, forKey: \"`inout`\")\n            aCoder.encode(self.isVariadic, forKey: \"isVariadic\")\n            aCoder.encode(self.type, forKey: \"type\")\n            aCoder.encode(self.defaultValue, forKey: \"defaultValue\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.index, forKey: \"index\")\n        }\n// sourcery:end\n}\n\nextension Array where Element == MethodParameter {\n    public var asSource: String {\n        \"(\\\\(map { $0.asSource }.joined(separator: \", \")))\"\n    }\n}\n#endif\n\n\"\"\"),\n    .init(name: \"Subscript.swift\", content:\n\"\"\"\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// Describes subscript\n@objcMembers\npublic final class Subscript: NSObject, SourceryModel, Annotated, Documented, Definition, Diffable {\n    \n    /// Method parameters\n    public var parameters: [MethodParameter]\n\n    /// Return value type name used in declaration, including generic constraints, i.e. `where T: Equatable`\n    public var returnTypeName: TypeName\n\n    /// Actual return value type name if declaration uses typealias, otherwise just a `returnTypeName`\n    public var actualReturnTypeName: TypeName {\n        return returnTypeName.actualTypeName ?? returnTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Actual return value type, if known\n    public var returnType: Type?\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is optional\n    public var isOptionalReturnType: Bool {\n        return returnTypeName.isOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is implicitly unwrapped optional\n    public var isImplicitlyUnwrappedOptionalReturnType: Bool {\n        return returnTypeName.isImplicitlyUnwrappedOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Return value type name without attributes and optional type information\n    public var unwrappedReturnTypeName: String {\n        return returnTypeName.unwrappedTypeName\n    }\n\n    /// Whether method is final\n    public var isFinal: Bool {\n        modifiers.contains { $0.name == \"final\" }\n    }\n\n    /// Variable read access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let readAccess: String\n\n    /// Variable write access, i.e. `internal`, `private`, `fileprivate`, `public`, `open`.\n    /// For immutable variables this value is empty string\n    public var writeAccess: String\n\n    /// Whether subscript is async\n    public let isAsync: Bool\n\n    /// Whether subscript throws\n    public let `throws`: Bool\n\n    /// Type of thrown error if specified\n    public let throwsTypeName: TypeName?\n\n    /// Whether variable is mutable or not\n    public var isMutable: Bool {\n        return writeAccess != AccessLevel.none.rawValue\n    }\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public let annotations: Annotations\n\n    public let documentation: Documentation\n\n    /// Reference to type name where the method is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc\n    public let definedInTypeName: TypeName?\n\n    /// Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a `definedInTypeName`\n    public var actualDefinedInTypeName: TypeName? {\n        return definedInTypeName?.actualTypeName ?? definedInTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Reference to actual type where the object is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc or type is unknown\n    public var definedInType: Type?\n\n    /// Method attributes, i.e. `@discardableResult`\n    public let attributes: AttributeList\n\n    /// Method modifiers, i.e. `private`\n    public let modifiers: [SourceryModifier]\n\n    /// list of generic parameters\n    public let genericParameters: [GenericParameter]\n\n    /// list of generic requirements\n    public let genericRequirements: [GenericRequirement]\n\n    /// Whether subscript is generic or not\n    public var isGeneric: Bool {\n        return genericParameters.isEmpty == false\n    }\n\n    // Underlying parser data, never to be used by anything else\n    // sourcery: skipEquality, skipDescription, skipCoding, skipJSExport\n    /// :nodoc:\n    public var __parserData: Any?\n\n    public init(parameters: [MethodParameter] = [],\n                returnTypeName: TypeName,\n                accessLevel: (read: AccessLevel, write: AccessLevel) = (.internal, .internal),\n                isAsync: Bool = false,\n                `throws`: Bool = false,\n                throwsTypeName: TypeName? = nil,\n                genericParameters: [GenericParameter] = [],\n                genericRequirements: [GenericRequirement] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                definedInTypeName: TypeName? = nil) {\n\n        self.parameters = parameters\n        self.returnTypeName = returnTypeName\n        self.readAccess = accessLevel.read.rawValue\n        self.writeAccess = accessLevel.write.rawValue\n        self.isAsync = isAsync\n        self.throws = `throws`\n        self.throwsTypeName = throwsTypeName\n        self.genericParameters = genericParameters\n        self.genericRequirements = genericRequirements\n        self.attributes = attributes\n        self.modifiers = modifiers\n        self.annotations = annotations\n        self.documentation = documentation\n        self.definedInTypeName = definedInTypeName\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"parameters = \\\\(String(describing: self.parameters)), \")\n        string.append(\"returnTypeName = \\\\(String(describing: self.returnTypeName)), \")\n        string.append(\"actualReturnTypeName = \\\\(String(describing: self.actualReturnTypeName)), \")\n        string.append(\"isFinal = \\\\(String(describing: self.isFinal)), \")\n        string.append(\"readAccess = \\\\(String(describing: self.readAccess)), \")\n        string.append(\"writeAccess = \\\\(String(describing: self.writeAccess)), \")\n        string.append(\"isAsync = \\\\(String(describing: self.isAsync)), \")\n        string.append(\"`throws` = \\\\(String(describing: self.throws)), \")\n        string.append(\"throwsTypeName = \\\\(String(describing: self.throwsTypeName)), \")\n        string.append(\"isMutable = \\\\(String(describing: self.isMutable)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\\\(String(describing: self.documentation)), \")\n        string.append(\"definedInTypeName = \\\\(String(describing: self.definedInTypeName)), \")\n        string.append(\"actualDefinedInTypeName = \\\\(String(describing: self.actualDefinedInTypeName)), \")\n        string.append(\"genericParameters = \\\\(String(describing: self.genericParameters)), \")\n        string.append(\"genericRequirements = \\\\(String(describing: self.genericRequirements)), \")\n        string.append(\"isGeneric = \\\\(String(describing: self.isGeneric)), \")\n        string.append(\"attributes = \\\\(String(describing: self.attributes)), \")\n        string.append(\"modifiers = \\\\(String(describing: self.modifiers))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Subscript else {\n            results.append(\"Incorrect type <expected: Subscript, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"parameters\").trackDifference(actual: self.parameters, expected: castObject.parameters))\n        results.append(contentsOf: DiffableResult(identifier: \"returnTypeName\").trackDifference(actual: self.returnTypeName, expected: castObject.returnTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"readAccess\").trackDifference(actual: self.readAccess, expected: castObject.readAccess))\n        results.append(contentsOf: DiffableResult(identifier: \"writeAccess\").trackDifference(actual: self.writeAccess, expected: castObject.writeAccess))\n        results.append(contentsOf: DiffableResult(identifier: \"isAsync\").trackDifference(actual: self.isAsync, expected: castObject.isAsync))\n        results.append(contentsOf: DiffableResult(identifier: \"`throws`\").trackDifference(actual: self.throws, expected: castObject.throws))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsTypeName\").trackDifference(actual: self.throwsTypeName, expected: castObject.throwsTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"definedInTypeName\").trackDifference(actual: self.definedInTypeName, expected: castObject.definedInTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"genericParameters\").trackDifference(actual: self.genericParameters, expected: castObject.genericParameters))\n        results.append(contentsOf: DiffableResult(identifier: \"genericRequirements\").trackDifference(actual: self.genericRequirements, expected: castObject.genericRequirements))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.parameters)\n        hasher.combine(self.returnTypeName)\n        hasher.combine(self.readAccess)\n        hasher.combine(self.writeAccess)\n        hasher.combine(self.isAsync)\n        hasher.combine(self.throws)\n        hasher.combine(self.throwsTypeName)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.definedInTypeName)\n        hasher.combine(self.genericParameters)\n        hasher.combine(self.genericRequirements)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Subscript else { return false }\n        if self.parameters != rhs.parameters { return false }\n        if self.returnTypeName != rhs.returnTypeName { return false }\n        if self.readAccess != rhs.readAccess { return false }\n        if self.writeAccess != rhs.writeAccess { return false }\n        if self.isAsync != rhs.isAsync { return false }\n        if self.throws != rhs.throws { return false }\n        if self.throwsTypeName != rhs.throwsTypeName { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.definedInTypeName != rhs.definedInTypeName { return false }\n        if self.genericParameters != rhs.genericParameters { return false }\n        if self.genericRequirements != rhs.genericRequirements { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        return true\n    }\n\n// sourcery:inline:Subscript.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let parameters: [MethodParameter] = aDecoder.decode(forKey: \"parameters\") else { \n                withVaList([\"parameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.parameters = parameters\n            guard let returnTypeName: TypeName = aDecoder.decode(forKey: \"returnTypeName\") else { \n                withVaList([\"returnTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.returnTypeName = returnTypeName\n            self.returnType = aDecoder.decode(forKey: \"returnType\")\n            guard let readAccess: String = aDecoder.decode(forKey: \"readAccess\") else { \n                withVaList([\"readAccess\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.readAccess = readAccess\n            guard let writeAccess: String = aDecoder.decode(forKey: \"writeAccess\") else { \n                withVaList([\"writeAccess\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.writeAccess = writeAccess\n            self.isAsync = aDecoder.decode(forKey: \"isAsync\")\n            self.`throws` = aDecoder.decode(forKey: \"`throws`\")\n            self.throwsTypeName = aDecoder.decode(forKey: \"throwsTypeName\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            self.definedInTypeName = aDecoder.decode(forKey: \"definedInTypeName\")\n            self.definedInType = aDecoder.decode(forKey: \"definedInType\")\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            guard let genericParameters: [GenericParameter] = aDecoder.decode(forKey: \"genericParameters\") else { \n                withVaList([\"genericParameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericParameters = genericParameters\n            guard let genericRequirements: [GenericRequirement] = aDecoder.decode(forKey: \"genericRequirements\") else { \n                withVaList([\"genericRequirements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericRequirements = genericRequirements\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.parameters, forKey: \"parameters\")\n            aCoder.encode(self.returnTypeName, forKey: \"returnTypeName\")\n            aCoder.encode(self.returnType, forKey: \"returnType\")\n            aCoder.encode(self.readAccess, forKey: \"readAccess\")\n            aCoder.encode(self.writeAccess, forKey: \"writeAccess\")\n            aCoder.encode(self.isAsync, forKey: \"isAsync\")\n            aCoder.encode(self.`throws`, forKey: \"`throws`\")\n            aCoder.encode(self.throwsTypeName, forKey: \"throwsTypeName\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.definedInTypeName, forKey: \"definedInTypeName\")\n            aCoder.encode(self.definedInType, forKey: \"definedInType\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.genericParameters, forKey: \"genericParameters\")\n            aCoder.encode(self.genericRequirements, forKey: \"genericRequirements\")\n        }\n// sourcery:end\n\n}\n#endif\n\n\"\"\"),\n    .init(name: \"Tuple.swift\", content:\n\"\"\"\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// Describes tuple type\n@objcMembers\npublic final class TupleType: NSObject, SourceryModel, Diffable {\n\n    /// Type name used in declaration\n    public var name: String\n\n    /// Tuple elements\n    public var elements: [TupleElement]\n\n    /// :nodoc:\n    public init(name: String, elements: [TupleElement]) {\n        self.name = name\n        self.elements = elements\n    }\n\n    /// :nodoc:\n    public init(elements: [TupleElement]) {\n        self.name = elements.asSource\n        self.elements = elements\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"elements = \\\\(String(describing: self.elements))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? TupleType else {\n            results.append(\"Incorrect type <expected: TupleType, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"elements\").trackDifference(actual: self.elements, expected: castObject.elements))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.elements)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? TupleType else { return false }\n        if self.name != rhs.name { return false }\n        if self.elements != rhs.elements { return false }\n        return true\n    }\n\n// sourcery:inline:TupleType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let elements: [TupleElement] = aDecoder.decode(forKey: \"elements\") else { \n                withVaList([\"elements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.elements = elements\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.elements, forKey: \"elements\")\n        }\n// sourcery:end\n}\n\n/// Describes tuple type element\n@objcMembers\npublic final class TupleElement: NSObject, SourceryModel, Typed, Diffable {\n\n    /// Tuple element name\n    public let name: String?\n\n    /// Tuple element type name\n    public var typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Tuple element type, if known\n    public var type: Type?\n\n    /// :nodoc:\n    public init(name: String? = nil, typeName: TypeName, type: Type? = nil) {\n        self.name = name\n        self.typeName = typeName\n        self.type = type\n    }\n\n    public var asSource: String {\n        // swiftlint:disable:next force_unwrapping\n        \"\\\\(name != nil ? \"\\\\(name!): \" : \"\")\\\\(typeName.asSource)\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"typeName = \\\\(String(describing: self.typeName)), \")\n        string.append(\"asSource = \\\\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? TupleElement else {\n            results.append(\"Incorrect type <expected: TupleElement, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? TupleElement else { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        return true\n    }\n\n// sourcery:inline:TupleElement.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.name = aDecoder.decode(forKey: \"name\")\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n        }\n// sourcery:end\n}\n\nextension Array where Element == TupleElement {\n    public var asSource: String {\n        \"(\\\\(map { $0.asSource }.joined(separator: \", \")))\"\n    }\n\n    public var asTypeName: String {\n        \"(\\\\(map { $0.typeName.asSource }.joined(separator: \", \")))\"\n    }\n}\n#endif\n\n\"\"\"),\n    .init(name: \"Type.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 11/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// :nodoc:\npublic typealias AttributeList = [String: [Attribute]]\n\n/// Defines Swift type\n\n@objcMembers\npublic class Type: NSObject, SourceryModel, Annotated, Documented, Diffable {\n\n    /// :nodoc:\n    public var module: String?\n\n    /// Imports that existed in the file that contained this type declaration\n    public var imports: [Import] = []\n\n    // sourcery: skipEquality\n    /// Imports existed in all files containing this type and all its super classes/protocols\n    public var allImports: [Import] {\n        return self.unique({ $0.gatherAllImports() }, filter: { $0 == $1 })\n    }\n\n    private func gatherAllImports() -> [Import] {\n        var allImports: [Import] = Array(self.imports)\n\n        self.basedTypes.values.forEach { (basedType) in\n            allImports.append(contentsOf: basedType.imports)\n        }\n        return allImports\n    }\n\n    // All local typealiases\n    /// :nodoc:\n    public var typealiases: [String: Typealias] {\n        didSet {\n            typealiases.values.forEach { $0.parent = self }\n        }\n    }\n\n    // sourcery: skipJSExport\n    /// Whether declaration is an extension of some type\n    public var isExtension: Bool\n\n    // sourcery: forceEquality\n    /// Kind of type declaration, i.e. `enum`, `struct`, `class`, `protocol` or `extension`\n    public var kind: String { isExtension ? \"extension\" : _kind }\n\n    // sourcery: skipJSExport\n    /// Kind of a backing store for `self.kind`\n    private var _kind: String\n\n    /// Type access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let accessLevel: String\n\n    /// Type name in global scope. For inner types includes the name of its containing type, i.e. `Type.Inner`\n    public var name: String {\n        guard let parentName = parent?.name else { return localName }\n        return \"\\\\(parentName).\\\\(localName)\"\n    }\n\n    // sourcery: skipCoding\n    /// Whether the type has been resolved as unknown extension\n    public var isUnknownExtension: Bool = false\n\n    // sourcery: skipDescription\n    /// Global type name including module name, unless it's an extension of unknown type\n    public var globalName: String {\n        guard let module = module, !isUnknownExtension else { return name }\n        return \"\\\\(module).\\\\(name)\"\n    }\n\n    /// Whether type is generic\n    public var isGeneric: Bool\n\n    /// Type name in its own scope.\n    public var localName: String\n\n    // sourcery: skipEquality, skipDescription\n    /// Variables defined in this type only, inluding variables defined in its extensions,\n    /// but not including variables inherited from superclasses (for classes only) and protocols\n    public var variables: [Variable] {\n        unique({ $0.rawVariables }, filter: Self.uniqueVariableFilter)\n    }\n\n    /// Unfiltered (can contain duplications from extensions) variables defined in this type only, inluding variables defined in its extensions,\n    /// but not including variables inherited from superclasses (for classes only) and protocols\n    public var rawVariables: [Variable]\n\n    // sourcery: skipEquality, skipDescription\n    /// All variables defined for this type, including variables defined in extensions,\n    /// in superclasses (for classes only) and protocols\n    public var allVariables: [Variable] {\n        return flattenAll({\n            return $0.variables\n        },\n        isExtension: { $0.definedInType?.isExtension == true },\n        filter: { all, extracted in\n            !all.contains(where: { Self.uniqueVariableFilter($0, rhs: extracted) })\n        })\n    }\n\n    private static func uniqueVariableFilter(_ lhs: Variable, rhs: Variable) -> Bool {\n        return lhs.name == rhs.name && lhs.isStatic == rhs.isStatic && lhs.typeName == rhs.typeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Methods defined in this type only, inluding methods defined in its extensions,\n    /// but not including methods inherited from superclasses (for classes only) and protocols\n    public var methods: [Method] {\n        unique({ $0.rawMethods }, filter: Self.uniqueMethodFilter)\n    }\n\n    /// Unfiltered (can contain duplications from extensions) methods defined in this type only, inluding methods defined in its extensions,\n    /// but not including methods inherited from superclasses (for classes only) and protocols\n    public var rawMethods: [Method]\n\n    // sourcery: skipEquality, skipDescription\n    /// All methods defined for this type, including methods defined in extensions,\n    /// in superclasses (for classes only) and protocols\n    public var allMethods: [Method] {\n        return flattenAll({\n            $0.methods\n        },\n        isExtension: { $0.definedInType?.isExtension == true },\n        filter: { all, extracted in\n            !all.contains(where: { Self.uniqueMethodFilter($0, rhs: extracted) })\n        })\n    }\n\n    private static func uniqueMethodFilter(_ lhs: Method, rhs: Method) -> Bool {\n        return lhs.name == rhs.name && lhs.isStatic == rhs.isStatic && lhs.isClass == rhs.isClass && lhs.actualReturnTypeName == rhs.actualReturnTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Subscripts defined in this type only, inluding subscripts defined in its extensions,\n    /// but not including subscripts inherited from superclasses (for classes only) and protocols\n    public var subscripts: [Subscript] {\n        unique({ $0.rawSubscripts }, filter: Self.uniqueSubscriptFilter)\n    }\n\n    /// Unfiltered (can contain duplications from extensions) Subscripts defined in this type only, inluding subscripts defined in its extensions,\n    /// but not including subscripts inherited from superclasses (for classes only) and protocols\n    public var rawSubscripts: [Subscript]\n\n    // sourcery: skipEquality, skipDescription\n    /// All subscripts defined for this type, including subscripts defined in extensions,\n    /// in superclasses (for classes only) and protocols\n    public var allSubscripts: [Subscript] {\n        return flattenAll({ $0.subscripts },\n            isExtension: { $0.definedInType?.isExtension == true },\n            filter: { all, extracted in\n                !all.contains(where: { Self.uniqueSubscriptFilter($0, rhs: extracted) })\n            })\n    }\n\n    private static func uniqueSubscriptFilter(_ lhs: Subscript, rhs: Subscript) -> Bool {\n        return lhs.parameters == rhs.parameters && lhs.returnTypeName == rhs.returnTypeName && lhs.readAccess == rhs.readAccess && lhs.writeAccess == rhs.writeAccess\n    }\n\n    // sourcery: skipEquality, skipDescription, skipJSExport\n    /// Bytes position of the body of this type in its declaration file if available.\n    public var bodyBytesRange: BytesRange?\n\n    // sourcery: skipEquality, skipDescription, skipJSExport\n    /// Bytes position of the whole declaration of this type in its declaration file if available.\n    public var completeDeclarationRange: BytesRange?\n\n    private func flattenAll<T>(_ extraction: @escaping (Type) -> [T], isExtension: (T) -> Bool, filter: ([T], T) -> Bool) -> [T] {\n        let all = NSMutableOrderedSet()\n        let allObjects = extraction(self)\n\n        /// The order of importance for properties is:\n        /// Base class\n        /// Inheritance\n        /// Protocol conformance\n        /// Extension\n\n        var extensions = [T]()\n        var baseObjects = [T]()\n\n        allObjects.forEach {\n            if isExtension($0) {\n                extensions.append($0)\n            } else {\n                baseObjects.append($0)\n            }\n        }\n\n        all.addObjects(from: baseObjects)\n\n        func filteredExtraction(_ target: Type) -> [T] {\n            // swiftlint:disable:next force_cast\n            let all = all.array as! [T]\n            let extracted = extraction(target).filter({ filter(all, $0) })\n            return extracted\n        }\n\n        inherits.values.sorted(by: { $0.name < $1.name }).forEach { all.addObjects(from: filteredExtraction($0)) }\n        implements.values.sorted(by: { $0.name < $1.name }).forEach { all.addObjects(from: filteredExtraction($0)) }\n\n        // swiftlint:disable:next force_cast\n        let array = all.array as! [T]\n        all.addObjects(from: extensions.filter({ filter(array, $0) }))\n\n        return all.array.compactMap { $0 as? T }\n    }\n\n    private func unique<T>(_ extraction: @escaping (Type) -> [T], filter: (T, T) -> Bool) -> [T] {\n        let all = NSMutableOrderedSet()\n        for nextItem in extraction(self) {\n            // swiftlint:disable:next force_cast\n            if !all.contains(where: { filter($0 as! T, nextItem) }) {\n                all.add(nextItem)\n            }\n        }\n\n        return all.array.compactMap { $0 as? T }\n    }\n\n    /// All initializers defined in this type\n    public var initializers: [Method] {\n        return methods.filter { $0.isInitializer }\n    }\n\n    /// All annotations for this type\n    public var annotations: Annotations = [:]\n\n    public var documentation: Documentation = []\n\n    /// Static variables defined in this type\n    public var staticVariables: [Variable] {\n        return variables.filter { $0.isStatic }\n    }\n\n    /// Static methods defined in this type\n    public var staticMethods: [Method] {\n        return methods.filter { $0.isStatic }\n    }\n\n    /// Class methods defined in this type\n    public var classMethods: [Method] {\n        return methods.filter { $0.isClass }\n    }\n\n    /// Instance variables defined in this type\n    public var instanceVariables: [Variable] {\n        return variables.filter { !$0.isStatic }\n    }\n\n    /// Instance methods defined in this type\n    public var instanceMethods: [Method] {\n        return methods.filter { !$0.isStatic && !$0.isClass }\n    }\n\n    /// Computed instance variables defined in this type\n    public var computedVariables: [Variable] {\n        return variables.filter { $0.isComputed && !$0.isStatic }\n    }\n\n    /// Stored instance variables defined in this type\n    public var storedVariables: [Variable] {\n        return variables.filter { !$0.isComputed && !$0.isStatic }\n    }\n\n    /// Names of types this type inherits from (for classes only) and protocols it implements, in order of definition\n    public var inheritedTypes: [String] {\n        didSet {\n            based.removeAll()\n            inheritedTypes.forEach { name in\n                self.based[name] = name\n            }\n        }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Names of types or protocols this type inherits from, including unknown (not scanned) types\n    public var based = [String: String]()\n\n    // sourcery: skipEquality, skipDescription\n    /// Types this type inherits from or implements, including unknown (not scanned) types with extensions defined\n    public var basedTypes = [String: Type]()\n\n    /// Types this type inherits from\n    public var inherits = [String: Type]()\n\n    // sourcery: skipEquality, skipDescription\n    /// Protocols this type implements. Does not contain classes in case where composition (`&`) is used in the declaration\n    public var implements: [String: Type] = [:]\n\n    /// Contained types\n    public var containedTypes: [Type] {\n        didSet {\n            containedTypes.forEach {\n                containedType[$0.localName] = $0\n                $0.parent = self\n            }\n        }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Contained types groupd by their names\n    public private(set) var containedType: [String: Type] = [:]\n\n    /// Name of parent type (for contained types only)\n    public private(set) var parentName: String?\n\n    // sourcery: skipEquality, skipDescription\n    /// Parent type, if known (for contained types only)\n    public var parent: Type? {\n        didSet {\n            parentName = parent?.name\n        }\n    }\n\n    // sourcery: skipJSExport\n    /// :nodoc:\n    public var parentTypes: AnyIterator<Type> {\n        var next: Type? = self\n        return AnyIterator {\n            next = next?.parent\n            return next\n        }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Superclass type, if known (only for classes)\n    public var supertype: Type?\n\n    /// Type attributes, i.e. `@objc`\n    public var attributes: AttributeList\n\n    /// Type modifiers, i.e. `private`, `final`\n    public var modifiers: [SourceryModifier]\n\n    /// Path to file where the type is defined\n    // sourcery: skipDescription, skipEquality, skipJSExport\n    public var path: String? {\n        didSet {\n            if let path = path {\n                fileName = (path as NSString).lastPathComponent\n            }\n        }\n    }\n\n    /// Directory to file where the type is defined\n    // sourcery: skipDescription, skipEquality, skipJSExport\n    public var directory: String? {\n        get {\n            return (path as? NSString)?.deletingLastPathComponent\n        }\n    }\n\n    /// list of generic requirements\n    public var genericRequirements: [GenericRequirement] {\n        didSet {\n            isGeneric = isGeneric || !genericRequirements.isEmpty\n        }\n    }\n\n    /// File name where the type was defined\n    public var fileName: String?\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                parent: Type? = nil,\n                accessLevel: AccessLevel = .internal,\n                isExtension: Bool = false,\n                variables: [Variable] = [],\n                methods: [Method] = [],\n                subscripts: [Subscript] = [],\n                inheritedTypes: [String] = [],\n                containedTypes: [Type] = [],\n                typealiases: [Typealias] = [],\n                genericRequirements: [GenericRequirement] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                isGeneric: Bool = false,\n                implements: [String: Type] = [:],\n                kind: String = \"unknown\") {\n        self.localName = name\n        self.accessLevel = accessLevel.rawValue\n        self.isExtension = isExtension\n        self.rawVariables = variables\n        self.rawMethods = methods\n        self.rawSubscripts = subscripts\n        self.inheritedTypes = inheritedTypes\n        self.containedTypes = containedTypes\n        self.typealiases = [:]\n        self.parent = parent\n        self.parentName = parent?.name\n        self.attributes = attributes\n        self.modifiers = modifiers\n        self.annotations = annotations\n        self.documentation = documentation\n        self.isGeneric = isGeneric\n        self.genericRequirements = genericRequirements\n        self.implements = implements\n        self._kind = kind\n        super.init()\n        containedTypes.forEach {\n            containedType[$0.localName] = $0\n            $0.parent = self\n        }\n        inheritedTypes.forEach { name in\n            self.based[name] = name\n        }\n        typealiases.forEach({\n            $0.parent = self\n            self.typealiases[$0.aliasName] = $0\n        })\n    }\n\n    /// :nodoc:\n    public func extend(_ type: Type) {\n        type.annotations.forEach { self.annotations[$0.key] = $0.value }\n        type.inherits.forEach { self.inherits[$0.key] = $0.value }\n        type.implements.forEach { self.implements[$0.key] = $0.value }\n        self.inheritedTypes += type.inheritedTypes\n        self.containedTypes += type.containedTypes\n\n        self.rawVariables += type.rawVariables\n        self.rawMethods += type.rawMethods\n        self.rawSubscripts += type.rawSubscripts\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        let type: Type.Type = Swift.type(of: self)\n        var string = \"\\\\(type): \"\n        string.append(\"module = \\\\(String(describing: self.module)), \")\n        string.append(\"imports = \\\\(String(describing: self.imports)), \")\n        string.append(\"allImports = \\\\(String(describing: self.allImports)), \")\n        string.append(\"typealiases = \\\\(String(describing: self.typealiases)), \")\n        string.append(\"isExtension = \\\\(String(describing: self.isExtension)), \")\n        string.append(\"kind = \\\\(String(describing: self.kind)), \")\n        string.append(\"_kind = \\\\(String(describing: self._kind)), \")\n        string.append(\"accessLevel = \\\\(String(describing: self.accessLevel)), \")\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"isUnknownExtension = \\\\(String(describing: self.isUnknownExtension)), \")\n        string.append(\"isGeneric = \\\\(String(describing: self.isGeneric)), \")\n        string.append(\"localName = \\\\(String(describing: self.localName)), \")\n        string.append(\"rawVariables = \\\\(String(describing: self.rawVariables)), \")\n        string.append(\"rawMethods = \\\\(String(describing: self.rawMethods)), \")\n        string.append(\"rawSubscripts = \\\\(String(describing: self.rawSubscripts)), \")\n        string.append(\"initializers = \\\\(String(describing: self.initializers)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\\\(String(describing: self.documentation)), \")\n        string.append(\"staticVariables = \\\\(String(describing: self.staticVariables)), \")\n        string.append(\"staticMethods = \\\\(String(describing: self.staticMethods)), \")\n        string.append(\"classMethods = \\\\(String(describing: self.classMethods)), \")\n        string.append(\"instanceVariables = \\\\(String(describing: self.instanceVariables)), \")\n        string.append(\"instanceMethods = \\\\(String(describing: self.instanceMethods)), \")\n        string.append(\"computedVariables = \\\\(String(describing: self.computedVariables)), \")\n        string.append(\"storedVariables = \\\\(String(describing: self.storedVariables)), \")\n        string.append(\"inheritedTypes = \\\\(String(describing: self.inheritedTypes)), \")\n        string.append(\"inherits = \\\\(String(describing: self.inherits)), \")\n        string.append(\"containedTypes = \\\\(String(describing: self.containedTypes)), \")\n        string.append(\"parentName = \\\\(String(describing: self.parentName)), \")\n        string.append(\"parentTypes = \\\\(String(describing: self.parentTypes)), \")\n        string.append(\"attributes = \\\\(String(describing: self.attributes)), \")\n        string.append(\"modifiers = \\\\(String(describing: self.modifiers)), \")\n        string.append(\"fileName = \\\\(String(describing: self.fileName)), \")\n        string.append(\"genericRequirements = \\\\(String(describing: self.genericRequirements))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Type else {\n            results.append(\"Incorrect type <expected: Type, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"module\").trackDifference(actual: self.module, expected: castObject.module))\n        results.append(contentsOf: DiffableResult(identifier: \"imports\").trackDifference(actual: self.imports, expected: castObject.imports))\n        results.append(contentsOf: DiffableResult(identifier: \"typealiases\").trackDifference(actual: self.typealiases, expected: castObject.typealiases))\n        results.append(contentsOf: DiffableResult(identifier: \"isExtension\").trackDifference(actual: self.isExtension, expected: castObject.isExtension))\n        results.append(contentsOf: DiffableResult(identifier: \"accessLevel\").trackDifference(actual: self.accessLevel, expected: castObject.accessLevel))\n        results.append(contentsOf: DiffableResult(identifier: \"isUnknownExtension\").trackDifference(actual: self.isUnknownExtension, expected: castObject.isUnknownExtension))\n        results.append(contentsOf: DiffableResult(identifier: \"isGeneric\").trackDifference(actual: self.isGeneric, expected: castObject.isGeneric))\n        results.append(contentsOf: DiffableResult(identifier: \"localName\").trackDifference(actual: self.localName, expected: castObject.localName))\n        results.append(contentsOf: DiffableResult(identifier: \"rawVariables\").trackDifference(actual: self.rawVariables, expected: castObject.rawVariables))\n        results.append(contentsOf: DiffableResult(identifier: \"rawMethods\").trackDifference(actual: self.rawMethods, expected: castObject.rawMethods))\n        results.append(contentsOf: DiffableResult(identifier: \"rawSubscripts\").trackDifference(actual: self.rawSubscripts, expected: castObject.rawSubscripts))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"inheritedTypes\").trackDifference(actual: self.inheritedTypes, expected: castObject.inheritedTypes))\n        results.append(contentsOf: DiffableResult(identifier: \"inherits\").trackDifference(actual: self.inherits, expected: castObject.inherits))\n        results.append(contentsOf: DiffableResult(identifier: \"containedTypes\").trackDifference(actual: self.containedTypes, expected: castObject.containedTypes))\n        results.append(contentsOf: DiffableResult(identifier: \"parentName\").trackDifference(actual: self.parentName, expected: castObject.parentName))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        results.append(contentsOf: DiffableResult(identifier: \"fileName\").trackDifference(actual: self.fileName, expected: castObject.fileName))\n        results.append(contentsOf: DiffableResult(identifier: \"genericRequirements\").trackDifference(actual: self.genericRequirements, expected: castObject.genericRequirements))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.module)\n        hasher.combine(self.imports)\n        hasher.combine(self.typealiases)\n        hasher.combine(self.isExtension)\n        hasher.combine(self.accessLevel)\n        hasher.combine(self.isUnknownExtension)\n        hasher.combine(self.isGeneric)\n        hasher.combine(self.localName)\n        hasher.combine(self.rawVariables)\n        hasher.combine(self.rawMethods)\n        hasher.combine(self.rawSubscripts)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.inheritedTypes)\n        hasher.combine(self.inherits)\n        hasher.combine(self.containedTypes)\n        hasher.combine(self.parentName)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        hasher.combine(self.fileName)\n        hasher.combine(self.genericRequirements)\n        hasher.combine(kind)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Type else { return false }\n        if self.module != rhs.module { return false }\n        if self.imports != rhs.imports { return false }\n        if self.typealiases != rhs.typealiases { return false }\n        if self.isExtension != rhs.isExtension { return false }\n        if self.accessLevel != rhs.accessLevel { return false }\n        if self.isUnknownExtension != rhs.isUnknownExtension { return false }\n        if self.isGeneric != rhs.isGeneric { return false }\n        if self.localName != rhs.localName { return false }\n        if self.rawVariables != rhs.rawVariables { return false }\n        if self.rawMethods != rhs.rawMethods { return false }\n        if self.rawSubscripts != rhs.rawSubscripts { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.inheritedTypes != rhs.inheritedTypes { return false }\n        if self.inherits != rhs.inherits { return false }\n        if self.containedTypes != rhs.containedTypes { return false }\n        if self.parentName != rhs.parentName { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        if self.fileName != rhs.fileName { return false }\n        if self.kind != rhs.kind { return false }\n        if self.genericRequirements != rhs.genericRequirements { return false }\n        return true\n    }\n\n// sourcery:inline:Type.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.module = aDecoder.decode(forKey: \"module\")\n            guard let imports: [Import] = aDecoder.decode(forKey: \"imports\") else { \n                withVaList([\"imports\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.imports = imports\n            guard let typealiases: [String: Typealias] = aDecoder.decode(forKey: \"typealiases\") else { \n                withVaList([\"typealiases\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typealiases = typealiases\n            self.isExtension = aDecoder.decode(forKey: \"isExtension\")\n            guard let _kind: String = aDecoder.decode(forKey: \"_kind\") else { \n                withVaList([\"_kind\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self._kind = _kind\n            guard let accessLevel: String = aDecoder.decode(forKey: \"accessLevel\") else { \n                withVaList([\"accessLevel\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.accessLevel = accessLevel\n            self.isGeneric = aDecoder.decode(forKey: \"isGeneric\")\n            guard let localName: String = aDecoder.decode(forKey: \"localName\") else { \n                withVaList([\"localName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.localName = localName\n            guard let rawVariables: [Variable] = aDecoder.decode(forKey: \"rawVariables\") else { \n                withVaList([\"rawVariables\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.rawVariables = rawVariables\n            guard let rawMethods: [Method] = aDecoder.decode(forKey: \"rawMethods\") else { \n                withVaList([\"rawMethods\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.rawMethods = rawMethods\n            guard let rawSubscripts: [Subscript] = aDecoder.decode(forKey: \"rawSubscripts\") else { \n                withVaList([\"rawSubscripts\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.rawSubscripts = rawSubscripts\n            self.bodyBytesRange = aDecoder.decode(forKey: \"bodyBytesRange\")\n            self.completeDeclarationRange = aDecoder.decode(forKey: \"completeDeclarationRange\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            guard let inheritedTypes: [String] = aDecoder.decode(forKey: \"inheritedTypes\") else { \n                withVaList([\"inheritedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.inheritedTypes = inheritedTypes\n            guard let based: [String: String] = aDecoder.decode(forKey: \"based\") else { \n                withVaList([\"based\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.based = based\n            guard let basedTypes: [String: Type] = aDecoder.decode(forKey: \"basedTypes\") else { \n                withVaList([\"basedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.basedTypes = basedTypes\n            guard let inherits: [String: Type] = aDecoder.decode(forKey: \"inherits\") else { \n                withVaList([\"inherits\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.inherits = inherits\n            guard let implements: [String: Type] = aDecoder.decode(forKey: \"implements\") else { \n                withVaList([\"implements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.implements = implements\n            guard let containedTypes: [Type] = aDecoder.decode(forKey: \"containedTypes\") else { \n                withVaList([\"containedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.containedTypes = containedTypes\n            guard let containedType: [String: Type] = aDecoder.decode(forKey: \"containedType\") else { \n                withVaList([\"containedType\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.containedType = containedType\n            self.parentName = aDecoder.decode(forKey: \"parentName\")\n            self.parent = aDecoder.decode(forKey: \"parent\")\n            self.supertype = aDecoder.decode(forKey: \"supertype\")\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            self.path = aDecoder.decode(forKey: \"path\")\n            guard let genericRequirements: [GenericRequirement] = aDecoder.decode(forKey: \"genericRequirements\") else { \n                withVaList([\"genericRequirements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericRequirements = genericRequirements\n            self.fileName = aDecoder.decode(forKey: \"fileName\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.module, forKey: \"module\")\n            aCoder.encode(self.imports, forKey: \"imports\")\n            aCoder.encode(self.typealiases, forKey: \"typealiases\")\n            aCoder.encode(self.isExtension, forKey: \"isExtension\")\n            aCoder.encode(self._kind, forKey: \"_kind\")\n            aCoder.encode(self.accessLevel, forKey: \"accessLevel\")\n            aCoder.encode(self.isGeneric, forKey: \"isGeneric\")\n            aCoder.encode(self.localName, forKey: \"localName\")\n            aCoder.encode(self.rawVariables, forKey: \"rawVariables\")\n            aCoder.encode(self.rawMethods, forKey: \"rawMethods\")\n            aCoder.encode(self.rawSubscripts, forKey: \"rawSubscripts\")\n            aCoder.encode(self.bodyBytesRange, forKey: \"bodyBytesRange\")\n            aCoder.encode(self.completeDeclarationRange, forKey: \"completeDeclarationRange\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.inheritedTypes, forKey: \"inheritedTypes\")\n            aCoder.encode(self.based, forKey: \"based\")\n            aCoder.encode(self.basedTypes, forKey: \"basedTypes\")\n            aCoder.encode(self.inherits, forKey: \"inherits\")\n            aCoder.encode(self.implements, forKey: \"implements\")\n            aCoder.encode(self.containedTypes, forKey: \"containedTypes\")\n            aCoder.encode(self.containedType, forKey: \"containedType\")\n            aCoder.encode(self.parentName, forKey: \"parentName\")\n            aCoder.encode(self.parent, forKey: \"parent\")\n            aCoder.encode(self.supertype, forKey: \"supertype\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.path, forKey: \"path\")\n            aCoder.encode(self.genericRequirements, forKey: \"genericRequirements\")\n            aCoder.encode(self.fileName, forKey: \"fileName\")\n        }\n// sourcery:end\n\n}\n\nextension Type {\n\n    // sourcery: skipDescription, skipJSExport\n    /// :nodoc:\n    var isClass: Bool {\n        let isNotClass = self is Struct || self is Enum || self is Protocol\n        return !isNotClass && !isExtension\n    }\n}\n\n/// Extends type so that inner types can be accessed via KVC e.g. Parent.Inner.Children\nextension Type {\n    /// :nodoc:\n    override public func value(forUndefinedKey key: String) -> Any? {\n        if let innerType = containedTypes.lazy.filter({ $0.localName == key }).first {\n            return innerType\n        }\n\n        return super.value(forUndefinedKey: key)\n    }\n}\n#endif\n\n\"\"\"),\n    .init(name: \"TypeName.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zabłocki on 25/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// Describes name of the type used in typed declaration (variable, method parameter or return value etc.)\n@objcMembers\npublic final class TypeName: NSObject, SourceryModelWithoutDescription, LosslessStringConvertible, Diffable {\n    /// :nodoc:\n    public init(name: String,\n                actualTypeName: TypeName? = nil,\n                unwrappedTypeName: String? = nil,\n                attributes: AttributeList = [:],\n                isOptional: Bool = false,\n                isImplicitlyUnwrappedOptional: Bool = false,\n                tuple: TupleType? = nil,\n                array: ArrayType? = nil,\n                dictionary: DictionaryType? = nil,\n                closure: ClosureType? = nil,\n                set: SetType? = nil,\n                generic: GenericType? = nil,\n                isProtocolComposition: Bool = false) {\n\n        let optionalSuffix: String\n        // TODO: TBR\n        let hasPrefix: Bool = name.hasPrefix(\"Optional<\") as Bool\n        let containsName: Bool = name.contains(\" where \") as Bool\n        if !hasPrefix && !containsName {\n            if isOptional {\n                optionalSuffix = \"?\"\n            } else if isImplicitlyUnwrappedOptional {\n                optionalSuffix = \"!\"\n            } else {\n                optionalSuffix = \"\"\n            }\n        } else {\n            optionalSuffix = \"\"\n        }\n\n        self.name = name + optionalSuffix\n        self.actualTypeName = actualTypeName\n        self.unwrappedTypeName = unwrappedTypeName ?? name\n        self.tuple = tuple\n        self.array = array\n        self.dictionary = dictionary\n        self.closure = closure\n        self.generic = generic\n        self.isOptional = isOptional || isImplicitlyUnwrappedOptional\n        self.isImplicitlyUnwrappedOptional = isImplicitlyUnwrappedOptional\n        self.isProtocolComposition = isProtocolComposition\n        self.set = set\n        self.attributes = attributes\n        self.modifiers = []\n        super.init()\n    }\n\n    /// Type name used in declaration\n    public var name: String\n\n    /// The generics of this TypeName\n    public var generic: GenericType?\n\n    /// Whether this TypeName is generic\n    public var isGeneric: Bool {\n        actualTypeName?.generic != nil || generic != nil\n    }\n\n    /// Whether this TypeName is protocol composition\n    public var isProtocolComposition: Bool\n\n    // sourcery: skipEquality\n    /// Actual type name if given type name is a typealias\n    public var actualTypeName: TypeName?\n\n    /// Type name attributes, i.e. `@escaping`\n    public var attributes: AttributeList\n\n    /// Modifiers, i.e. `escaping`\n    public var modifiers: [SourceryModifier]\n\n    // sourcery: skipEquality\n    /// Whether type is optional\n    public let isOptional: Bool\n\n    // sourcery: skipEquality\n    /// Whether type is implicitly unwrapped optional\n    public let isImplicitlyUnwrappedOptional: Bool\n\n    // sourcery: skipEquality\n    /// Type name without attributes and optional type information\n    public var unwrappedTypeName: String\n\n    // sourcery: skipEquality\n    /// Whether type is void (`Void` or `()`)\n    public var isVoid: Bool {\n        return name == \"Void\" || name == \"()\" || unwrappedTypeName == \"Void\"\n    }\n\n    /// Whether type is a tuple\n    public var isTuple: Bool {\n        actualTypeName?.tuple != nil || tuple != nil\n    }\n\n    /// Tuple type data\n    public var tuple: TupleType?\n\n    /// Whether type is an array\n    public var isArray: Bool {\n        actualTypeName?.array != nil || array != nil\n    }\n\n    /// Array type data\n    public var array: ArrayType?\n\n    /// Whether type is a dictionary\n    public var isDictionary: Bool {\n        actualTypeName?.dictionary != nil || dictionary != nil\n    }\n\n    /// Dictionary type data\n    public var dictionary: DictionaryType?\n\n    /// Whether type is a closure\n    public var isClosure: Bool {\n        actualTypeName?.closure != nil || closure != nil\n    }\n\n    /// Closure type data\n    public var closure: ClosureType?\n\n    /// Whether type is a Set\n    public var isSet: Bool {\n        actualTypeName?.set != nil || set != nil\n    }\n\n    /// Set type data\n    public var set: SetType?\n\n    /// Whether type is `Never`\n    public var isNever: Bool {\n        return name == \"Never\"\n    }\n\n    /// Prints typename as it would appear on definition\n    public var asSource: String {\n        // TODO: TBR special treatment\n        let specialTreatment: Bool = isOptional && name.hasPrefix(\"Optional<\")\n\n        let attributeValues: [Attribute] = attributes.flatMap { $0.value }\n        let attributeValuesUnsorted: [String] = attributeValues.map { $0.asSource }\n        var attributes: [String] = attributeValuesUnsorted.sorted()\n        attributes.append(contentsOf: modifiers.map({ $0.asSource }))\n        attributes.append(contentsOf: [specialTreatment ? name : unwrappedTypeName])\n        var description = attributes.joined(separator: \" \")\n\n//        if let _ = self.dictionary { // array and dictionary cases are covered by the unwrapped type name\n//            description.append(dictionary.asSource)\n//        } else if let _ = self.array {\n//            description.append(array.asSource)\n//        } else if let _ = self.generic {\n//            let arguments = generic.typeParameters\n//              .map({ $0.typeName.asSource })\n//              .joined(separator: \", \")\n//            description.append(\"<\\\\(arguments)>\")\n//        }\n        if !specialTreatment {\n            if isImplicitlyUnwrappedOptional {\n                description.append(\"!\")\n            } else if isOptional {\n                description.append(\"?\")\n            }\n        }\n\n        return description\n    }\n\n    public override var description: String {\n        var description: [String] = attributes.flatMap({ $0.value }).map({ $0.asSource }).sorted()\n        description.append(contentsOf: modifiers.map({ $0.asSource }))\n        description.append(contentsOf: [name])\n        return description.joined(separator: \" \")\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? TypeName else {\n            results.append(\"Incorrect type <expected: TypeName, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"generic\").trackDifference(actual: self.generic, expected: castObject.generic))\n        results.append(contentsOf: DiffableResult(identifier: \"isProtocolComposition\").trackDifference(actual: self.isProtocolComposition, expected: castObject.isProtocolComposition))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        results.append(contentsOf: DiffableResult(identifier: \"tuple\").trackDifference(actual: self.tuple, expected: castObject.tuple))\n        results.append(contentsOf: DiffableResult(identifier: \"array\").trackDifference(actual: self.array, expected: castObject.array))\n        results.append(contentsOf: DiffableResult(identifier: \"dictionary\").trackDifference(actual: self.dictionary, expected: castObject.dictionary))\n        results.append(contentsOf: DiffableResult(identifier: \"closure\").trackDifference(actual: self.closure, expected: castObject.closure))\n        results.append(contentsOf: DiffableResult(identifier: \"set\").trackDifference(actual: self.set, expected: castObject.set))\n        return results\n    }\n\n    \n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.generic)\n        hasher.combine(self.isProtocolComposition)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        hasher.combine(self.tuple)\n        hasher.combine(self.array)\n        hasher.combine(self.dictionary)\n        hasher.combine(self.closure)\n        hasher.combine(self.set)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? TypeName else { return false }\n        if self.name != rhs.name { return false }\n        if self.generic != rhs.generic { return false }\n        if self.isProtocolComposition != rhs.isProtocolComposition { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        if self.tuple != rhs.tuple { return false }\n        if self.array != rhs.array { return false }\n        if self.dictionary != rhs.dictionary { return false }\n        if self.closure != rhs.closure { return false }\n        if self.set != rhs.set { return false }\n        return true\n    }\n\n// sourcery:inline:TypeName.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            self.generic = aDecoder.decode(forKey: \"generic\")\n            self.isProtocolComposition = aDecoder.decode(forKey: \"isProtocolComposition\")\n            self.actualTypeName = aDecoder.decode(forKey: \"actualTypeName\")\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            self.isOptional = aDecoder.decode(forKey: \"isOptional\")\n            self.isImplicitlyUnwrappedOptional = aDecoder.decode(forKey: \"isImplicitlyUnwrappedOptional\")\n            guard let unwrappedTypeName: String = aDecoder.decode(forKey: \"unwrappedTypeName\") else { \n                withVaList([\"unwrappedTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.unwrappedTypeName = unwrappedTypeName\n            self.tuple = aDecoder.decode(forKey: \"tuple\")\n            self.array = aDecoder.decode(forKey: \"array\")\n            self.dictionary = aDecoder.decode(forKey: \"dictionary\")\n            self.closure = aDecoder.decode(forKey: \"closure\")\n            self.set = aDecoder.decode(forKey: \"set\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.generic, forKey: \"generic\")\n            aCoder.encode(self.isProtocolComposition, forKey: \"isProtocolComposition\")\n            aCoder.encode(self.actualTypeName, forKey: \"actualTypeName\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.isOptional, forKey: \"isOptional\")\n            aCoder.encode(self.isImplicitlyUnwrappedOptional, forKey: \"isImplicitlyUnwrappedOptional\")\n            aCoder.encode(self.unwrappedTypeName, forKey: \"unwrappedTypeName\")\n            aCoder.encode(self.tuple, forKey: \"tuple\")\n            aCoder.encode(self.array, forKey: \"array\")\n            aCoder.encode(self.dictionary, forKey: \"dictionary\")\n            aCoder.encode(self.closure, forKey: \"closure\")\n            aCoder.encode(self.set, forKey: \"set\")\n        }\n// sourcery:end\n\n    // sourcery: skipEquality, skipDescription\n    /// :nodoc:\n    public override var debugDescription: String {\n        return name\n    }\n\n    public convenience init(_ description: String) {\n        self.init(name: description, actualTypeName: nil)\n    }\n}\n\nextension TypeName {\n    public static func unknown(description: String?, attributes: AttributeList = [:]) -> TypeName {\n        if let description = description {\n            Log.astWarning(\"Unknown type, please add type attribution to \\\\(description)\")\n        } else {\n            Log.astWarning(\"Unknown type, please add type attribution\")\n        }\n        return TypeName(name: \"UnknownTypeSoAddTypeAttributionToVariable\", attributes: attributes)\n    }\n}\n#endif\n\n\"\"\"),\n    .init(name: \"Types.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\n#if canImport(ObjectiveC)\nimport Foundation\n\n// sourcery: skipJSExport\n/// Collection of scanned types for accessing in templates\n@objcMembers\npublic final class Types: NSObject, SourceryModel, Diffable {\n\n    /// :nodoc:\n    public let types: [Type]\n\n    /// All known typealiases\n    public let typealiases: [Typealias]\n\n    /// :nodoc:\n    public init(types: [Type], typealiases: [Typealias] = []) {\n        self.types = types\n        self.typealiases = typealiases\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"types = \\\\(String(describing: self.types)), \")\n        string.append(\"typealiases = \\\\(String(describing: self.typealiases))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Types else {\n            results.append(\"Incorrect type <expected: Types, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"types\").trackDifference(actual: self.types, expected: castObject.types))\n        results.append(contentsOf: DiffableResult(identifier: \"typealiases\").trackDifference(actual: self.typealiases, expected: castObject.typealiases))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.types)\n        hasher.combine(self.typealiases)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Types else { return false }\n        if self.types != rhs.types { return false }\n        if self.typealiases != rhs.typealiases { return false }\n        return true\n    }\n\n// sourcery:inline:Types.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let types: [Type] = aDecoder.decode(forKey: \"types\") else { \n                withVaList([\"types\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.types = types\n            guard let typealiases: [Typealias] = aDecoder.decode(forKey: \"typealiases\") else { \n                withVaList([\"typealiases\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typealiases = typealiases\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.types, forKey: \"types\")\n            aCoder.encode(self.typealiases, forKey: \"typealiases\")\n        }\n// sourcery:end\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// :nodoc:\n    public lazy internal(set) var typesByName: [String: Type] = {\n        var typesByName = [String: Type]()\n        self.types.forEach { typesByName[$0.globalName] = $0 }\n        return typesByName\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// :nodoc:\n    public lazy internal(set) var typesaliasesByName: [String: Typealias] = {\n        var typesaliasesByName = [String: Typealias]()\n        self.typealiases.forEach { typesaliasesByName[$0.name] = $0 }\n        return typesaliasesByName\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known types, excluding protocols or protocol compositions.\n    public lazy internal(set) var all: [Type] = {\n        return self.types.filter { !($0 is Protocol || $0 is ProtocolComposition) }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known protocols\n    public lazy internal(set) var protocols: [Protocol] = {\n        return self.types.compactMap { $0 as? Protocol }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known protocol compositions\n    public lazy internal(set) var protocolCompositions: [ProtocolComposition] = {\n        return self.types.compactMap { $0 as? ProtocolComposition }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known classes\n    public lazy internal(set) var classes: [Class] = {\n        return self.all.compactMap { $0 as? Class }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known structs\n    public lazy internal(set) var structs: [Struct] = {\n        return self.all.compactMap { $0 as? Struct }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known enums\n    public lazy internal(set) var enums: [Enum] = {\n        return self.all.compactMap { $0 as? Enum }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known extensions\n    public lazy internal(set) var extensions: [Type] = {\n        return self.all.compactMap { $0.isExtension ? $0 : nil }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// Types based on any other type, grouped by its name, even if they are not known.\n    /// `types.based.MyType` returns list of types based on `MyType`\n    public lazy internal(set) var based: TypesCollection = {\n        TypesCollection(\n            types: self.types,\n            collection: { Array($0.based.keys) }\n        )\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// Classes inheriting from any known class, grouped by its name.\n    /// `types.inheriting.MyClass` returns list of types inheriting from `MyClass`\n    public lazy internal(set) var inheriting: TypesCollection = {\n        TypesCollection(\n            types: self.types,\n            collection: { Array($0.inherits.keys) },\n            validate: { type in\n                guard type is Class else {\n                    throw \"\\\\(type.name) is not a class and should be used with `implementing` or `based`\"\n                }\n            })\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// Types implementing known protocol, grouped by its name.\n    /// `types.implementing.MyProtocol` returns list of types implementing `MyProtocol`\n    public lazy internal(set) var implementing: TypesCollection = {\n        TypesCollection(\n            types: self.types,\n            collection: { Array($0.implements.keys) },\n            validate: { type in\n                guard type is Protocol else {\n                    throw \"\\\\(type.name) is a class and should be used with `inheriting` or `based`\"\n                }\n        })\n    }()\n}\n#endif\n\n\"\"\"),\n    .init(name: \"TypesCollection.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// :nodoc:\n@objcMembers\npublic class TypesCollection: NSObject, AutoJSExport {\n    // sourcery:begin: skipJSExport\n    let all: [Type]\n    let types: [String: [Type]]\n    let validate: ((Type) throws -> Void)?\n    // sourcery:end\n\n    init(types: [Type], collection: (Type) -> [String], validate: ((Type) throws -> Void)? = nil) {\n        self.all = types\n        var content = [String: [Type]]()\n        self.all.forEach { type in\n            collection(type).forEach { name in\n                var list = content[name] ?? [Type]()\n                list.append(type)\n                content[name] = list\n            }\n        }\n        self.types = content\n        self.validate = validate\n    }\n\n    public func types(forKey key: String) throws -> [Type] {\n        // In some configurations, the types are keyed by \"ModuleName.TypeName\"\n        var longKey: String?\n\n        if let validate = validate {\n            guard let type = all.first(where: { $0.name == key }) else {\n                throw \"Unknown type \\\\(key), should be used with `based`\"\n            }\n\n            try validate(type)\n\n            if let module = type.module {\n                longKey = [module, type.name].joined(separator: \".\")\n            }\n        }\n\n        // If we find the types directly, return them\n        if let types = types[key] {\n            return types\n        }\n\n        // if we find a types for the longKey, return them\n        if let longKey = longKey, let types = types[longKey] {\n            return types\n        }\n\n        return []\n    }\n\n    /// :nodoc:\n    override public func value(forKey key: String) -> Any? {\n        do {\n            return try types(forKey: key)\n        } catch {\n            Log.error(error)\n            return nil\n        }\n    }\n\n    /// :nodoc:\n    public subscript(_ key: String) -> [Type] {\n        do {\n            return try types(forKey: key)\n        } catch {\n            Log.error(error)\n            return []\n        }\n    }\n\n    override public func responds(to aSelector: Selector!) -> Bool {\n        return true\n    }\n}\n#endif\n\n\"\"\"),\n    .init(name: \"Variable.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if canImport(ObjectiveC)\nimport Foundation\n\n/// :nodoc:\npublic typealias SourceryVariable = Variable\n\n/// Defines variable\n@objcMembers\npublic final class Variable: NSObject, SourceryModel, Typed, Annotated, Documented, Definition, Diffable {\n\n    /// Variable name\n    public let name: String\n\n    /// Variable type name\n    public let typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Variable type, if known, i.e. if the type is declared in the scanned sources.\n    /// For explanation, see <https://cdn.rawgit.com/krzysztofzablocki/Sourcery/master/docs/writing-templates.html#what-are-em-known-em-and-em-unknown-em-types>\n    public var type: Type?\n\n    /// Whether variable is computed and not stored\n    public let isComputed: Bool\n    \n    /// Whether variable is async\n    public let isAsync: Bool\n    \n    /// Whether variable throws\n    public let `throws`: Bool\n\n    /// Type of thrown error if specified\n    public let throwsTypeName: TypeName?\n\n    /// Whether variable is static\n    public let isStatic: Bool\n\n    /// Variable read access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let readAccess: String\n\n    /// Variable write access, i.e. `internal`, `private`, `fileprivate`, `public`, `open`.\n    /// For immutable variables this value is empty string\n    public let writeAccess: String\n\n    /// composed access level\n    /// sourcery: skipJSExport\n    public var accessLevel: (read: AccessLevel, write: AccessLevel) {\n        (read: AccessLevel(rawValue: readAccess) ?? .none, AccessLevel(rawValue: writeAccess) ?? .none)\n    }\n\n    /// Whether variable is mutable or not\n    public var isMutable: Bool {\n        return writeAccess != AccessLevel.none.rawValue\n    }\n\n    /// Variable default value expression\n    public var defaultValue: String?\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public var annotations: Annotations = [:]\n\n    public var documentation: Documentation = []\n\n    /// Variable attributes, i.e. `@IBOutlet`, `@IBInspectable`\n    public var attributes: AttributeList\n\n    /// Modifiers, i.e. `private`\n    public var modifiers: [SourceryModifier]\n\n    /// Whether variable is final or not\n    public var isFinal: Bool {\n        return modifiers.contains { $0.name == Attribute.Identifier.final.rawValue }\n    }\n\n    /// Whether variable is lazy or not\n    public var isLazy: Bool {\n        return modifiers.contains { $0.name == Attribute.Identifier.lazy.rawValue }\n    }\n\n    /// Whether variable is dynamic or not\n    public var isDynamic: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.dynamic.rawValue }\n    }\n\n    /// Reference to type name where the variable is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc\n    public internal(set) var definedInTypeName: TypeName?\n\n    /// Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a `definedInTypeName`\n    public var actualDefinedInTypeName: TypeName? {\n        return definedInTypeName?.actualTypeName ?? definedInTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Reference to actual type where the object is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc or type is unknown\n    public var definedInType: Type?\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                typeName: TypeName,\n                type: Type? = nil,\n                accessLevel: (read: AccessLevel, write: AccessLevel) = (.internal, .internal),\n                isComputed: Bool = false,\n                isAsync: Bool = false,\n                `throws`: Bool = false,\n                throwsTypeName: TypeName? = nil,\n                isStatic: Bool = false,\n                defaultValue: String? = nil,\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                definedInTypeName: TypeName? = nil) {\n\n        self.name = name\n        self.typeName = typeName\n        self.type = type\n        self.isComputed = isComputed\n        self.isAsync = isAsync\n        self.`throws` = `throws`\n        self.throwsTypeName = throwsTypeName\n        self.isStatic = isStatic\n        self.defaultValue = defaultValue\n        self.readAccess = accessLevel.read.rawValue\n        self.writeAccess = accessLevel.write.rawValue\n        self.attributes = attributes\n        self.modifiers = modifiers\n        self.annotations = annotations\n        self.documentation = documentation\n        self.definedInTypeName = definedInTypeName\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"typeName = \\\\(String(describing: self.typeName)), \")\n        string.append(\"isComputed = \\\\(String(describing: self.isComputed)), \")\n        string.append(\"isAsync = \\\\(String(describing: self.isAsync)), \")\n        string.append(\"`throws` = \\\\(String(describing: self.`throws`)), \")\n        string.append(\"throwsTypeName = \\\\(String(describing: self.throwsTypeName)), \")\n        string.append(\"isStatic = \\\\(String(describing: self.isStatic)), \")\n        string.append(\"readAccess = \\\\(String(describing: self.readAccess)), \")\n        string.append(\"writeAccess = \\\\(String(describing: self.writeAccess)), \")\n        string.append(\"accessLevel = \\\\(String(describing: self.accessLevel)), \")\n        string.append(\"isMutable = \\\\(String(describing: self.isMutable)), \")\n        string.append(\"defaultValue = \\\\(String(describing: self.defaultValue)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\\\(String(describing: self.documentation)), \")\n        string.append(\"attributes = \\\\(String(describing: self.attributes)), \")\n        string.append(\"modifiers = \\\\(String(describing: self.modifiers)), \")\n        string.append(\"isFinal = \\\\(String(describing: self.isFinal)), \")\n        string.append(\"isLazy = \\\\(String(describing: self.isLazy)), \")\n        string.append(\"isDynamic = \\\\(String(describing: self.isDynamic)), \")\n        string.append(\"definedInTypeName = \\\\(String(describing: self.definedInTypeName)), \")\n        string.append(\"actualDefinedInTypeName = \\\\(String(describing: self.actualDefinedInTypeName))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Variable else {\n            results.append(\"Incorrect type <expected: Variable, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        results.append(contentsOf: DiffableResult(identifier: \"type\").trackDifference(actual: self.type, expected: castObject.type))\n        results.append(contentsOf: DiffableResult(identifier: \"isComputed\").trackDifference(actual: self.isComputed, expected: castObject.isComputed))\n        results.append(contentsOf: DiffableResult(identifier: \"isAsync\").trackDifference(actual: self.isAsync, expected: castObject.isAsync))\n        results.append(contentsOf: DiffableResult(identifier: \"`throws`\").trackDifference(actual: self.`throws`, expected: castObject.`throws`))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsTypeName\").trackDifference(actual: self.throwsTypeName, expected: castObject.throwsTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"isStatic\").trackDifference(actual: self.isStatic, expected: castObject.isStatic))\n        results.append(contentsOf: DiffableResult(identifier: \"readAccess\").trackDifference(actual: self.readAccess, expected: castObject.readAccess))\n        results.append(contentsOf: DiffableResult(identifier: \"writeAccess\").trackDifference(actual: self.writeAccess, expected: castObject.writeAccess))\n        results.append(contentsOf: DiffableResult(identifier: \"defaultValue\").trackDifference(actual: self.defaultValue, expected: castObject.defaultValue))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        results.append(contentsOf: DiffableResult(identifier: \"definedInTypeName\").trackDifference(actual: self.definedInTypeName, expected: castObject.definedInTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        hasher.combine(self.isComputed)\n        hasher.combine(self.isAsync)\n        hasher.combine(self.`throws`)\n        hasher.combine(self.throwsTypeName)\n        hasher.combine(self.isStatic)\n        hasher.combine(self.readAccess)\n        hasher.combine(self.writeAccess)\n        hasher.combine(self.defaultValue)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        hasher.combine(self.definedInTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Variable else { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.isComputed != rhs.isComputed { return false }\n        if self.isAsync != rhs.isAsync { return false }\n        if self.`throws` != rhs.`throws` { return false }\n        if self.throwsTypeName != rhs.throwsTypeName { return false }\n        if self.isStatic != rhs.isStatic { return false }\n        if self.readAccess != rhs.readAccess { return false }\n        if self.writeAccess != rhs.writeAccess { return false }\n        if self.defaultValue != rhs.defaultValue { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        if self.definedInTypeName != rhs.definedInTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:Variable.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n            self.isComputed = aDecoder.decode(forKey: \"isComputed\")\n            self.isAsync = aDecoder.decode(forKey: \"isAsync\")\n            self.`throws` = aDecoder.decode(forKey: \"`throws`\")\n            self.throwsTypeName = aDecoder.decode(forKey: \"throwsTypeName\")\n            self.isStatic = aDecoder.decode(forKey: \"isStatic\")\n            guard let readAccess: String = aDecoder.decode(forKey: \"readAccess\") else { \n                withVaList([\"readAccess\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.readAccess = readAccess\n            guard let writeAccess: String = aDecoder.decode(forKey: \"writeAccess\") else { \n                withVaList([\"writeAccess\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.writeAccess = writeAccess\n            self.defaultValue = aDecoder.decode(forKey: \"defaultValue\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            self.definedInTypeName = aDecoder.decode(forKey: \"definedInTypeName\")\n            self.definedInType = aDecoder.decode(forKey: \"definedInType\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n            aCoder.encode(self.isComputed, forKey: \"isComputed\")\n            aCoder.encode(self.isAsync, forKey: \"isAsync\")\n            aCoder.encode(self.`throws`, forKey: \"`throws`\")\n            aCoder.encode(self.throwsTypeName, forKey: \"throwsTypeName\")\n            aCoder.encode(self.isStatic, forKey: \"isStatic\")\n            aCoder.encode(self.readAccess, forKey: \"readAccess\")\n            aCoder.encode(self.writeAccess, forKey: \"writeAccess\")\n            aCoder.encode(self.defaultValue, forKey: \"defaultValue\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.definedInTypeName, forKey: \"definedInTypeName\")\n            aCoder.encode(self.definedInType, forKey: \"definedInType\")\n        }\n// sourcery:end\n}\n#endif\n\n\"\"\"),\n    .init(name: \"AutoHashable.generated.swift\", content:\n\"\"\"\n// Generated using Sourcery 1.3.1 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable all\n\n\n// MARK: - AutoHashable for classes, protocols, structs\n\n// MARK: - AutoHashable for Enums\n\n\"\"\"),\n    .init(name: \"Coding.generated.swift\", content:\n\"\"\"\n// Generated using Sourcery 2.2.6 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable vertical_whitespace trailing_newline\n\nimport Foundation\n\n\nextension NSCoder {\n\n    @nonobjc func decode(forKey: String) -> String? {\n        return self.maybeDecode(forKey: forKey) as String?\n    }\n\n    @nonobjc func decode(forKey: String) -> TypeName? {\n        return self.maybeDecode(forKey: forKey) as TypeName?\n    }\n\n    @nonobjc func decode(forKey: String) -> AccessLevel? {\n        return self.maybeDecode(forKey: forKey) as AccessLevel?\n    }\n\n    @nonobjc func decode(forKey: String) -> Bool {\n        return self.decodeBool(forKey: forKey)\n    }\n\n    @nonobjc func decode(forKey: String) -> Int {\n        return self.decodeInteger(forKey: forKey)\n    }\n\n    func decode<E>(forKey: String) -> E? {\n        return maybeDecode(forKey: forKey) as E?\n    }\n\n    fileprivate func maybeDecode<E>(forKey: String) -> E? {\n        guard let object = self.decodeObject(forKey: forKey) else {\n            return nil\n        }\n\n        return object as? E\n    }\n\n}\n\nextension ArrayType: NSCoding {}\n\nextension AssociatedType: NSCoding {}\n\nextension AssociatedValue: NSCoding {}\n\nextension Attribute: NSCoding {}\n\nextension BytesRange: NSCoding {}\n\n\nextension ClosureParameter: NSCoding {}\n\nextension ClosureType: NSCoding {}\n\nextension DictionaryType: NSCoding {}\n\n\nextension EnumCase: NSCoding {}\n\nextension FileParserResult: NSCoding {}\n\nextension GenericParameter: NSCoding {}\n\nextension GenericRequirement: NSCoding {}\n\nextension GenericType: NSCoding {}\n\nextension GenericTypeParameter: NSCoding {}\n\nextension Import: NSCoding {}\n\nextension Method: NSCoding {}\n\nextension MethodParameter: NSCoding {}\n\nextension Modifier: NSCoding {}\n\n\n\nextension SetType: NSCoding {}\n\n\nextension Subscript: NSCoding {}\n\nextension TupleElement: NSCoding {}\n\nextension TupleType: NSCoding {}\n\nextension Type: NSCoding {}\n\nextension TypeName: NSCoding {}\n\nextension Typealias: NSCoding {}\n\nextension Types: NSCoding {}\n\nextension Variable: NSCoding {}\n\n\n\"\"\"),\n    .init(name: \"JSExport.generated.swift\", content:\n\"\"\"\n// Generated using Sourcery 2.2.6 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable vertical_whitespace trailing_newline\n\n#if canImport(JavaScriptCore)\nimport JavaScriptCore\n\n@objc protocol ActorAutoJSExport: JSExport {\n    var kind: String { get }\n    var isFinal: Bool { get }\n    var isDistributed: Bool { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension Actor: ActorAutoJSExport {}\n\n@objc protocol ArrayTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var elementTypeName: TypeName { get }\n    var elementType: Type? { get }\n    var asGeneric: GenericType { get }\n    var asSource: String { get }\n}\n\nextension ArrayType: ArrayTypeAutoJSExport {}\n\n@objc protocol AssociatedTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var typeName: TypeName? { get }\n    var type: Type? { get }\n}\n\nextension AssociatedType: AssociatedTypeAutoJSExport {}\n\n@objc protocol AssociatedValueAutoJSExport: JSExport {\n    var localName: String? { get }\n    var externalName: String? { get }\n    var typeName: TypeName { get }\n    var type: Type? { get }\n    var defaultValue: String? { get }\n    var annotations: Annotations { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension AssociatedValue: AssociatedValueAutoJSExport {}\n\n@objc protocol AttributeAutoJSExport: JSExport {\n    var name: String { get }\n    var arguments: [String: NSObject] { get }\n    var asSource: String { get }\n    var description: String { get }\n}\n\nextension Attribute: AttributeAutoJSExport {}\n\n@objc protocol BytesRangeAutoJSExport: JSExport {\n    var offset: Int64 { get }\n    var length: Int64 { get }\n}\n\nextension BytesRange: BytesRangeAutoJSExport {}\n\n@objc protocol ClassAutoJSExport: JSExport {\n    var kind: String { get }\n    var isFinal: Bool { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension Class: ClassAutoJSExport {}\n\n@objc protocol ClosureParameterAutoJSExport: JSExport {\n    var argumentLabel: String? { get }\n    var name: String? { get }\n    var typeName: TypeName { get }\n    var `inout`: Bool { get }\n    var type: Type? { get }\n    var isVariadic: Bool { get }\n    var typeAttributes: AttributeList { get }\n    var defaultValue: String? { get }\n    var annotations: Annotations { get }\n    var asSource: String { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension ClosureParameter: ClosureParameterAutoJSExport {}\n\n@objc protocol ClosureTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var parameters: [ClosureParameter] { get }\n    var returnTypeName: TypeName { get }\n    var actualReturnTypeName: TypeName { get }\n    var returnType: Type? { get }\n    var isOptionalReturnType: Bool { get }\n    var isImplicitlyUnwrappedOptionalReturnType: Bool { get }\n    var unwrappedReturnTypeName: String { get }\n    var isAsync: Bool { get }\n    var asyncKeyword: String? { get }\n    var `throws`: Bool { get }\n    var throwsOrRethrowsKeyword: String? { get }\n    var throwsTypeName: TypeName? { get }\n    var asSource: String { get }\n}\n\nextension ClosureType: ClosureTypeAutoJSExport {}\n\n@objc protocol DictionaryTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var valueTypeName: TypeName { get }\n    var valueType: Type? { get }\n    var keyTypeName: TypeName { get }\n    var keyType: Type? { get }\n    var asGeneric: GenericType { get }\n    var asSource: String { get }\n}\n\nextension DictionaryType: DictionaryTypeAutoJSExport {}\n\n@objc protocol EnumAutoJSExport: JSExport {\n    var kind: String { get }\n    var cases: [EnumCase] { get }\n    var rawTypeName: TypeName? { get }\n    var hasRawType: Bool { get }\n    var rawType: Type? { get }\n    var based: [String: String] { get }\n    var hasAssociatedValues: Bool { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension Enum: EnumAutoJSExport {}\n\n@objc protocol EnumCaseAutoJSExport: JSExport {\n    var name: String { get }\n    var rawValue: String? { get }\n    var associatedValues: [AssociatedValue] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var indirect: Bool { get }\n    var hasAssociatedValue: Bool { get }\n}\n\nextension EnumCase: EnumCaseAutoJSExport {}\n\n\n@objc protocol GenericParameterAutoJSExport: JSExport {\n    var name: String { get }\n    var inheritedTypeName: TypeName? { get }\n}\n\nextension GenericParameter: GenericParameterAutoJSExport {}\n\n@objc protocol GenericRequirementAutoJSExport: JSExport {\n    var leftType: AssociatedType { get }\n    var rightType: GenericTypeParameter { get }\n    var relationship: String { get }\n    var relationshipSyntax: String { get }\n}\n\nextension GenericRequirement: GenericRequirementAutoJSExport {}\n\n@objc protocol GenericTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var typeParameters: [GenericTypeParameter] { get }\n    var asSource: String { get }\n    var description: String { get }\n}\n\nextension GenericType: GenericTypeAutoJSExport {}\n\n@objc protocol GenericTypeParameterAutoJSExport: JSExport {\n    var typeName: TypeName { get }\n    var type: Type? { get }\n}\n\nextension GenericTypeParameter: GenericTypeParameterAutoJSExport {}\n\n@objc protocol ImportAutoJSExport: JSExport {\n    var kind: String? { get }\n    var path: String { get }\n    var description: String { get }\n    var moduleName: String { get }\n}\n\nextension Import: ImportAutoJSExport {}\n\n@objc protocol MethodAutoJSExport: JSExport {\n    var name: String { get }\n    var selectorName: String { get }\n    var shortName: String { get }\n    var callName: String { get }\n    var parameters: [MethodParameter] { get }\n    var returnTypeName: TypeName { get }\n    var actualReturnTypeName: TypeName { get }\n    var isThrowsTypeGeneric: Bool { get }\n    var returnType: Type? { get }\n    var isOptionalReturnType: Bool { get }\n    var isImplicitlyUnwrappedOptionalReturnType: Bool { get }\n    var unwrappedReturnTypeName: String { get }\n    var isAsync: Bool { get }\n    var isDistributed: Bool { get }\n    var `throws`: Bool { get }\n    var throwsTypeName: TypeName? { get }\n    var `rethrows`: Bool { get }\n    var accessLevel: String { get }\n    var isStatic: Bool { get }\n    var isClass: Bool { get }\n    var isInitializer: Bool { get }\n    var isDeinitializer: Bool { get }\n    var isFailableInitializer: Bool { get }\n    var isConvenienceInitializer: Bool { get }\n    var isRequired: Bool { get }\n    var isFinal: Bool { get }\n    var isMutating: Bool { get }\n    var isGeneric: Bool { get }\n    var isOptional: Bool { get }\n    var isNonisolated: Bool { get }\n    var isDynamic: Bool { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var definedInTypeName: TypeName? { get }\n    var actualDefinedInTypeName: TypeName? { get }\n    var definedInType: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var genericParameters: [GenericParameter] { get }\n}\n\nextension Method: MethodAutoJSExport {}\n\n@objc protocol MethodParameterAutoJSExport: JSExport {\n    var argumentLabel: String? { get }\n    var name: String { get }\n    var typeName: TypeName { get }\n    var `inout`: Bool { get }\n    var isVariadic: Bool { get }\n    var type: Type? { get }\n    var typeAttributes: AttributeList { get }\n    var defaultValue: String? { get }\n    var annotations: Annotations { get }\n    var index: Int { get }\n    var asSource: String { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension MethodParameter: MethodParameterAutoJSExport {}\n\n@objc protocol ModifierAutoJSExport: JSExport {\n    var name: String { get }\n    var detail: String? { get }\n    var asSource: String { get }\n}\n\nextension Modifier: ModifierAutoJSExport {}\n\n@objc protocol ProtocolAutoJSExport: JSExport {\n    var kind: String { get }\n    var associatedTypes: [String: AssociatedType] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var fileName: String? { get }\n}\n\nextension Protocol: ProtocolAutoJSExport {}\n\n@objc protocol ProtocolCompositionAutoJSExport: JSExport {\n    var kind: String { get }\n    var composedTypeNames: [TypeName] { get }\n    var composedTypes: [Type]? { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension ProtocolComposition: ProtocolCompositionAutoJSExport {}\n\n@objc protocol SetTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var elementTypeName: TypeName { get }\n    var elementType: Type? { get }\n    var asGeneric: GenericType { get }\n    var asSource: String { get }\n}\n\nextension SetType: SetTypeAutoJSExport {}\n\n\n\n@objc protocol StructAutoJSExport: JSExport {\n    var kind: String { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension Struct: StructAutoJSExport {}\n\n@objc protocol SubscriptAutoJSExport: JSExport {\n    var parameters: [MethodParameter] { get }\n    var returnTypeName: TypeName { get }\n    var actualReturnTypeName: TypeName { get }\n    var returnType: Type? { get }\n    var isOptionalReturnType: Bool { get }\n    var isImplicitlyUnwrappedOptionalReturnType: Bool { get }\n    var unwrappedReturnTypeName: String { get }\n    var isFinal: Bool { get }\n    var readAccess: String { get }\n    var writeAccess: String { get }\n    var isAsync: Bool { get }\n    var `throws`: Bool { get }\n    var throwsTypeName: TypeName? { get }\n    var isMutable: Bool { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var definedInTypeName: TypeName? { get }\n    var actualDefinedInTypeName: TypeName? { get }\n    var definedInType: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericParameters: [GenericParameter] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var isGeneric: Bool { get }\n}\n\nextension Subscript: SubscriptAutoJSExport {}\n\n@objc protocol TemplateContextAutoJSExport: JSExport {\n    var functions: [SourceryMethod] { get }\n    var types: Types { get }\n    var argument: [String: NSObject] { get }\n    var type: [String: Type] { get }\n    var stencilContext: [String: Any] { get }\n    var jsContext: [String: Any] { get }\n}\n\nextension TemplateContext: TemplateContextAutoJSExport {}\n\n@objc protocol TupleElementAutoJSExport: JSExport {\n    var name: String? { get }\n    var typeName: TypeName { get }\n    var type: Type? { get }\n    var asSource: String { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension TupleElement: TupleElementAutoJSExport {}\n\n@objc protocol TupleTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var elements: [TupleElement] { get }\n}\n\nextension TupleType: TupleTypeAutoJSExport {}\n\n@objc protocol TypeAutoJSExport: JSExport {\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var kind: String { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension Type: TypeAutoJSExport {}\n\n@objc protocol TypeNameAutoJSExport: JSExport {\n    var name: String { get }\n    var generic: GenericType? { get }\n    var isGeneric: Bool { get }\n    var isProtocolComposition: Bool { get }\n    var actualTypeName: TypeName? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n    var isVoid: Bool { get }\n    var isTuple: Bool { get }\n    var tuple: TupleType? { get }\n    var isArray: Bool { get }\n    var array: ArrayType? { get }\n    var isDictionary: Bool { get }\n    var dictionary: DictionaryType? { get }\n    var isClosure: Bool { get }\n    var closure: ClosureType? { get }\n    var isSet: Bool { get }\n    var set: SetType? { get }\n    var isNever: Bool { get }\n    var asSource: String { get }\n    var description: String { get }\n    var debugDescription: String { get }\n}\n\nextension TypeName: TypeNameAutoJSExport {}\n\n@objc protocol TypealiasAutoJSExport: JSExport {\n    var aliasName: String { get }\n    var typeName: TypeName { get }\n    var type: Type? { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var parent: Type? { get }\n    var accessLevel: String { get }\n    var parentName: String? { get }\n    var name: String { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension Typealias: TypealiasAutoJSExport {}\n\n\n@objc protocol TypesCollectionAutoJSExport: JSExport {\n}\n\nextension TypesCollection: TypesCollectionAutoJSExport {}\n\n@objc protocol VariableAutoJSExport: JSExport {\n    var name: String { get }\n    var typeName: TypeName { get }\n    var type: Type? { get }\n    var isComputed: Bool { get }\n    var isAsync: Bool { get }\n    var `throws`: Bool { get }\n    var throwsTypeName: TypeName? { get }\n    var isStatic: Bool { get }\n    var readAccess: String { get }\n    var writeAccess: String { get }\n    var isMutable: Bool { get }\n    var defaultValue: String? { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var isFinal: Bool { get }\n    var isLazy: Bool { get }\n    var isDynamic: Bool { get }\n    var definedInTypeName: TypeName? { get }\n    var actualDefinedInTypeName: TypeName? { get }\n    var definedInType: Type? { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension Variable: VariableAutoJSExport {}\n\n\n#endif\n\"\"\"),\n    .init(name: \"Typed.generated.swift\", content:\n\"\"\"\n// Generated using Sourcery 2.2.6 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable vertical_whitespace\n\n\nextension AssociatedValue {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\nextension ClosureParameter {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\nextension MethodParameter {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\nextension TupleElement {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\nextension Typealias {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\nextension Variable {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\n\n\"\"\"),\n]\n#endif\n"
  },
  {
    "path": "SourcerySwift/Sources/SourceryRuntime_Linux.content.generated.swift",
    "content": "#if !canImport(ObjectiveC)\nlet sourceryRuntimeFiles: [FolderSynchronizer.File] = [\n    .init(name: \"AccessLevel.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n/// :nodoc:\npublic enum AccessLevel: String {\n    case `package` = \"package\"\n    case `internal` = \"internal\"\n    case `private` = \"private\"\n    case `fileprivate` = \"fileprivate\"\n    case `public` = \"public\"\n    case `open` = \"open\"\n    case none = \"\"\n}\n\n\"\"\"),\n    .init(name: \"Actor.swift\", content:\n\"\"\"\nimport Foundation\n\n// sourcery: skipDescription\n/// Descibes Swift actor\n#if canImport(ObjectiveC)\n@objc(SwiftActor) @objcMembers\n#endif\npublic final class Actor: Type {\n    \n    // sourcery: skipJSExport\n    public class var kind: String { return \"actor\" }\n\n    /// Returns \"actor\"\n    public override var kind: String { Self.kind }\n\n    /// Whether type is final\n    public var isFinal: Bool {\n        modifiers.contains { $0.name == \"final\" }\n    }\n\n    /// Whether method is distributed method\n    public var isDistributed: Bool {\n        modifiers.contains(where: { $0.name == \"distributed\" })\n    }\n\n    /// :nodoc:\n    public override init(name: String = \"\",\n                         parent: Type? = nil,\n                         accessLevel: AccessLevel = .internal,\n                         isExtension: Bool = false,\n                         variables: [Variable] = [],\n                         methods: [Method] = [],\n                         subscripts: [Subscript] = [],\n                         inheritedTypes: [String] = [],\n                         containedTypes: [Type] = [],\n                         typealiases: [Typealias] = [],\n                         genericRequirements: [GenericRequirement] = [],\n                         attributes: AttributeList = [:],\n                         modifiers: [SourceryModifier] = [],\n                         annotations: [String: NSObject] = [:],\n                         documentation: [String] = [],\n                         isGeneric: Bool = false,\n                         implements: [String: Type] = [:],\n                         kind: String = Actor.kind) {\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            genericRequirements: genericRequirements,\n            attributes: attributes,\n            modifiers: modifiers,\n            annotations: annotations,\n            documentation: documentation,\n            isGeneric: isGeneric,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string.append(\", \")\n        string.append(\"kind = \\\\(String(describing: self.kind)), \")\n        string.append(\"isFinal = \\\\(String(describing: self.isFinal)), \")\n        string.append(\"isDistributed = \\\\(String(describing: self.isDistributed))\")\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Actor else {\n            results.append(\"Incorrect type <expected: Actor, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Actor else { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Actor.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n        }\n// sourcery:end\n    \n}\n\n\"\"\"),\n    .init(name: \"Annotations.swift\", content:\n\"\"\"\nimport Foundation\n\npublic typealias Annotations = [String: NSObject]\n\n/// Describes annotated declaration, i.e. type, method, variable, enum case\npublic protocol Annotated {\n    /**\n     All annotations of declaration stored by their name. Value can be `bool`, `String`, float `NSNumber`\n     or array of those types if you use several annotations with the same name.\n    \n     **Example:**\n     \n     ```\n     //sourcery: booleanAnnotation\n     //sourcery: stringAnnotation = \"value\"\n     //sourcery: numericAnnotation = 0.5\n     \n     [\n      \"booleanAnnotation\": true,\n      \"stringAnnotation\": \"value\",\n      \"numericAnnotation\": 0.5\n     ]\n     ```\n    */\n    var annotations: Annotations { get }\n}\n\n\"\"\"),\n    .init(name: \"Array+Parallel.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 06/01/2017.\n// Copyright (c) 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\npublic extension Array {\n    func parallelFlatMap<T>(transform: (Element) -> [T]) -> [T] {\n        return parallelMap(transform: transform).flatMap { $0 }\n    }\n\n    func parallelCompactMap<T>(transform: (Element) -> T?) -> [T] {\n        return parallelMap(transform: transform).compactMap { $0 }\n    }\n\n    func parallelMap<T>(transform: (Element) -> T) -> [T] {\n        var result = ContiguousArray<T?>(repeating: nil, count: count)\n        return result.withUnsafeMutableBufferPointer { buffer in\n            nonisolated(unsafe) let buffer = buffer\n            DispatchQueue.concurrentPerform(iterations: buffer.count) { idx in\n                buffer[idx] = transform(self[idx])\n            }\n            return buffer.map { $0! }\n        }\n    }\n\n    func parallelPerform(_ work: (Element) -> Void) {\n        DispatchQueue.concurrentPerform(iterations: count) { idx in\n            work(self[idx])\n        }\n    }\n}\n\n\"\"\"),\n    .init(name: \"Array.swift\", content:\n\"\"\"\nimport Foundation\n\n/// Describes array type\n#if canImport(ObjectiveC)\n@objcMembers \n#endif\npublic final class ArrayType: NSObject, SourceryModel, Diffable {\n    /// Type name used in declaration\n    public var name: String\n\n    /// Array element type name\n    public var elementTypeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Array element type, if known\n    public var elementType: Type?\n\n    /// :nodoc:\n    public init(name: String, elementTypeName: TypeName, elementType: Type? = nil) {\n        self.name = name\n        self.elementTypeName = elementTypeName\n        self.elementType = elementType\n    }\n\n    /// Returns array as generic type\n    public var asGeneric: GenericType {\n        GenericType(name: \"Array\", typeParameters: [\n            .init(typeName: elementTypeName, type: elementType)\n        ])\n    }\n\n    public var asSource: String {\n        \"[\\\\(elementTypeName.asSource)]\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"elementTypeName = \\\\(String(describing: self.elementTypeName)), \")\n        string.append(\"asGeneric = \\\\(String(describing: self.asGeneric)), \")\n        string.append(\"asSource = \\\\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? ArrayType else {\n            results.append(\"Incorrect type <expected: ArrayType, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"elementTypeName\").trackDifference(actual: self.elementTypeName, expected: castObject.elementTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.elementTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? ArrayType else { return false }\n        if self.name != rhs.name { return false }\n        if self.elementTypeName != rhs.elementTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:ArrayType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let elementTypeName: TypeName = aDecoder.decode(forKey: \"elementTypeName\") else { \n                withVaList([\"elementTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.elementTypeName = elementTypeName\n            self.elementType = aDecoder.decode(forKey: \"elementType\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.elementTypeName, forKey: \"elementTypeName\")\n            aCoder.encode(self.elementType, forKey: \"elementType\")\n        }\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"Attribute.swift\", content:\n\"\"\"\nimport Foundation\n\n/// Describes Swift attribute\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic class Attribute: NSObject, AutoCoding, AutoEquatable, AutoDiffable, AutoJSExport, Diffable {\n\n    /// Attribute name\n    public let name: String\n\n    /// Attribute arguments\n    public let arguments: [String: NSObject]\n\n    // sourcery: skipJSExport\n    let _description: String\n\n    // sourcery: skipEquality, skipDescription, skipCoding, skipJSExport\n    /// :nodoc:\n    public var __parserData: Any?\n\n    /// :nodoc:\n    public init(name: String, arguments: [String: NSObject] = [:], description: String? = nil) {\n        self.name = name\n        self.arguments = arguments\n        let argumentDescription = arguments.map { \"\\\\($0.key): \\\\($0.value is String ? \"\\\\\"\" : \"\")\\\\($0.value)\\\\($0.value is String ? \"\\\\\"\" : \"\")\" }.joined(separator: \", \")\n        self._description = description ?? \"@\\\\(name)\\\\(!argumentDescription.isEmpty ? \"(\" : \"\")\\\\(argumentDescription)\\\\(!argumentDescription.isEmpty ? \")\" : \"\")\"\n    }\n\n    /// TODO: unify `asSource` / `description`?\n    public var asSource: String {\n        description\n    }\n\n    /// Attribute description that can be used in a template.\n    public override var description: String {\n        _description\n    }\n\n    /// :nodoc:\n    public enum Identifier: String {\n        case convenience\n        case required\n        case available\n        case discardableResult\n        case GKInspectable = \"gkinspectable\"\n        case objc\n        case objcMembers\n        case nonobjc\n        case NSApplicationMain\n        case NSCopying\n        case NSManaged\n        case UIApplicationMain\n        case IBOutlet = \"iboutlet\"\n        case IBInspectable = \"ibinspectable\"\n        case IBDesignable = \"ibdesignable\"\n        case autoclosure\n        case convention\n        case mutating\n        case nonisolated\n        case isolated\n        case escaping\n        case final\n        case open\n        case lazy\n        case `package` = \"package\"\n        case `public` = \"public\"\n        case `internal` = \"internal\"\n        case `private` = \"private\"\n        case `fileprivate` = \"fileprivate\"\n        case publicSetter = \"setter_access.public\"\n        case internalSetter = \"setter_access.internal\"\n        case privateSetter = \"setter_access.private\"\n        case fileprivateSetter = \"setter_access.fileprivate\"\n        case optional\n        case dynamic\n\n        public init?(identifier: String) {\n            let identifier = identifier.trimmingPrefix(\"source.decl.attribute.\")\n            if identifier == \"objc.name\" {\n                self.init(rawValue: \"objc\")\n            } else {\n                self.init(rawValue: identifier)\n            }\n        }\n\n        public static func from(string: String) -> Identifier? {\n            switch string {\n            case \"GKInspectable\":\n                return Identifier.GKInspectable\n            case \"objc\":\n                return .objc\n            case \"IBOutlet\":\n                return .IBOutlet\n            case \"IBInspectable\":\n                return .IBInspectable\n            case \"IBDesignable\":\n                return .IBDesignable\n            default:\n                return Identifier(rawValue: string)\n            }\n        }\n\n        public var name: String {\n            switch self {\n            case .GKInspectable:\n                return \"GKInspectable\"\n            case .objc:\n                return \"objc\"\n            case .IBOutlet:\n                return \"IBOutlet\"\n            case .IBInspectable:\n                return \"IBInspectable\"\n            case .IBDesignable:\n                return \"IBDesignable\"\n            case .fileprivateSetter:\n                return \"fileprivate\"\n            case .privateSetter:\n                return \"private\"\n            case .internalSetter:\n                return \"internal\"\n            case .publicSetter:\n                return \"public\"\n            default:\n                return rawValue\n            }\n        }\n\n        public var description: String {\n            return hasAtPrefix ? \"@\\\\(name)\" : name\n        }\n\n        public var hasAtPrefix: Bool {\n            switch self {\n            case .available,\n                 .discardableResult,\n                 .GKInspectable,\n                 .objc,\n                 .objcMembers,\n                 .nonobjc,\n                 .NSApplicationMain,\n                 .NSCopying,\n                 .NSManaged,\n                 .UIApplicationMain,\n                 .IBOutlet,\n                 .IBInspectable,\n                 .IBDesignable,\n                 .autoclosure,\n                 .convention,\n                 .escaping:\n                return true\n            default:\n                return false\n            }\n        }\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Attribute else {\n            results.append(\"Incorrect type <expected: Attribute, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"arguments\").trackDifference(actual: self.arguments, expected: castObject.arguments))\n        results.append(contentsOf: DiffableResult(identifier: \"_description\").trackDifference(actual: self._description, expected: castObject._description))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.arguments)\n        hasher.combine(self._description)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Attribute else { return false }\n        if self.name != rhs.name { return false }\n        if self.arguments != rhs.arguments { return false }\n        if self._description != rhs._description { return false }\n        return true\n    }\n\n// sourcery:inline:Attribute.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let arguments: [String: NSObject] = aDecoder.decode(forKey: \"arguments\") else { \n                withVaList([\"arguments\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.arguments = arguments\n            guard let _description: String = aDecoder.decode(forKey: \"_description\") else { \n                withVaList([\"_description\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self._description = _description\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.arguments, forKey: \"arguments\")\n            aCoder.encode(self._description, forKey: \"_description\")\n        }\n// sourcery:end\n\n}\n\n\"\"\"),\n    .init(name: \"BytesRange.swift\", content:\n\"\"\"\n//\n//  Created by Sébastien Duperron on 03/01/2018.\n//  Copyright © 2018 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n/// :nodoc:\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class BytesRange: NSObject, SourceryModel, Diffable {\n\n    public let offset: Int64\n    public let length: Int64\n\n    public init(offset: Int64, length: Int64) {\n        self.offset = offset\n        self.length = length\n    }\n\n    public convenience init(range: (offset: Int64, length: Int64)) {\n        self.init(offset: range.offset, length: range.length)\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string += \"offset = \\\\(String(describing: self.offset)), \"\n        string += \"length = \\\\(String(describing: self.length))\"\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? BytesRange else {\n            results.append(\"Incorrect type <expected: BytesRange, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"offset\").trackDifference(actual: self.offset, expected: castObject.offset))\n        results.append(contentsOf: DiffableResult(identifier: \"length\").trackDifference(actual: self.length, expected: castObject.length))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.offset)\n        hasher.combine(self.length)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? BytesRange else { return false }\n        if self.offset != rhs.offset { return false }\n        if self.length != rhs.length { return false }\n        return true\n    }\n\n// sourcery:inline:BytesRange.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.offset = aDecoder.decodeInt64(forKey: \"offset\")\n            self.length = aDecoder.decodeInt64(forKey: \"length\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.offset, forKey: \"offset\")\n            aCoder.encode(self.length, forKey: \"length\")\n        }\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"Class.swift\", content:\n\"\"\"\nimport Foundation\n// sourcery: skipDescription\n/// Descibes Swift class\n#if canImport(ObjectiveC)\n@objc(SwiftClass) @objcMembers\n#endif\npublic final class Class: Type {\n    // sourcery: skipJSExport\n    public class var kind: String { return \"class\" }\n\n    /// Returns \"class\"\n    public override var kind: String { Self.kind }\n\n    /// Whether type is final \n    public var isFinal: Bool {\n        modifiers.contains { $0.name == \"final\" }\n    }\n\n    /// :nodoc:\n    public override init(name: String = \"\",\n                         parent: Type? = nil,\n                         accessLevel: AccessLevel = .internal,\n                         isExtension: Bool = false,\n                         variables: [Variable] = [],\n                         methods: [Method] = [],\n                         subscripts: [Subscript] = [],\n                         inheritedTypes: [String] = [],\n                         containedTypes: [Type] = [],\n                         typealiases: [Typealias] = [],\n                         genericRequirements: [GenericRequirement] = [],\n                         attributes: AttributeList = [:],\n                         modifiers: [SourceryModifier] = [],\n                         annotations: [String: NSObject] = [:],\n                         documentation: [String] = [],\n                         isGeneric: Bool = false,\n                         implements: [String: Type] = [:],\n                         kind: String = Class.kind) {\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            genericRequirements: genericRequirements,\n            attributes: attributes,\n            modifiers: modifiers,\n            annotations: annotations,\n            documentation: documentation,\n            isGeneric: isGeneric,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string.append(\", \")\n        string.append(\"kind = \\\\(String(describing: self.kind)), \")\n        string.append(\"isFinal = \\\\(String(describing: self.isFinal))\")\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Class else {\n            results.append(\"Incorrect type <expected: Class, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Class else { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Class.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n        }\n// sourcery:end\n\n}\n\n\"\"\"),\n    .init(name: \"Composer.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\nprivate func currentTimestamp() -> TimeInterval {\n    return Date().timeIntervalSince1970\n}\n\n/// Responsible for composing results of `FileParser`.\npublic enum Composer {\n\n    /// Performs final processing of discovered types:\n    /// - extends types with their corresponding extensions;\n    /// - replaces typealiases with actual types\n    /// - finds actual types for variables and enums raw values\n    /// - filters out any private types and extensions\n    ///\n    /// - Parameter parserResult: Result of parsing source code.\n    /// - Parameter serial: Whether to process results serially instead of concurrently\n    /// - Returns: Final types and extensions of unknown types.\n    public static func uniqueTypesAndFunctions(_ parserResult: FileParserResult, serial: Bool = false) -> (types: [Type], functions: [SourceryMethod], typealiases: [Typealias]) {\n        let composed = ParserResultsComposed(parserResult: parserResult)\n\n        let resolveType = { (typeName: TypeName, containingType: Type?) -> Type? in\n            composed.resolveType(typeName: typeName, containingType: containingType)\n        }\n\n        let methodResolveType = { (typeName: TypeName, containingType: Type?, method: Method) -> Type? in\n            composed.resolveType(typeName: typeName, containingType: containingType, method: method)\n        }\n\n        let processType = { (type: Type) in\n            type.variables.forEach {\n                resolveVariableTypes($0, of: type, resolve: resolveType)\n            }\n            type.methods.forEach {\n                resolveMethodTypes($0, of: type, resolve: methodResolveType)\n            }\n            type.subscripts.forEach {\n                resolveSubscriptTypes($0, of: type, resolve: resolveType)\n            }\n\n            if let enumeration = type as? Enum {\n                resolveEnumTypes(enumeration, types: composed.typeMap, resolve: resolveType)\n            }\n\n            if let composition = type as? ProtocolComposition {\n                resolveProtocolCompositionTypes(composition, resolve: resolveType)\n            }\n\n            if let sourceryProtocol = type as? SourceryProtocol {\n                resolveAssociatedTypes(sourceryProtocol, resolve: resolveType)\n            }\n        }\n\n        let processFunction = { (function: SourceryMethod) in\n            resolveMethodTypes(function, of: nil, resolve: methodResolveType)\n        }\n\n        if serial {\n            composed.types.forEach(processType)\n            composed.functions.forEach(processFunction)\n        } else {\n            composed.types.parallelPerform(processType)\n            composed.functions.parallelPerform(processFunction)\n        }\n\n        updateTypeRelationships(types: composed.types)\n\n        return (\n            types: composed.types.sorted { $0.globalName < $1.globalName },\n            functions: composed.functions.sorted { $0.name < $1.name },\n            typealiases: composed.unresolvedTypealiases.values.sorted(by: { $0.name < $1.name })\n        )\n    }\n\n    typealias TypeResolver = (TypeName, Type?) -> Type?\n    typealias MethodArgumentTypeResolver = (TypeName, Type?, Method) -> Type?\n\n    private static func resolveVariableTypes(_ variable: Variable, of type: Type, resolve: TypeResolver) {\n        variable.type = resolve(variable.typeName, type)\n\n        /// The actual `definedInType` is assigned in `uniqueTypes` but we still\n        /// need to resolve the type to correctly parse typealiases\n        /// @see https://github.com/krzysztofzablocki/Sourcery/pull/374\n        if let definedInTypeName = variable.definedInTypeName {\n            _ = resolve(definedInTypeName, type)\n        }\n    }\n\n    private static func resolveSubscriptTypes(_ subscript: Subscript, of type: Type, resolve: TypeResolver) {\n        `subscript`.parameters.forEach { (parameter) in\n            parameter.type = resolve(parameter.typeName, type)\n        }\n\n        `subscript`.returnType = resolve(`subscript`.returnTypeName, type)\n        if let definedInTypeName = `subscript`.definedInTypeName {\n            _ = resolve(definedInTypeName, type)\n        }\n    }\n\n    private static func resolveMethodTypes(_ method: SourceryMethod, of type: Type?, resolve: MethodArgumentTypeResolver) {\n        method.parameters.forEach { parameter in\n            parameter.type = resolve(parameter.typeName, type, method)\n        }\n\n        /// The actual `definedInType` is assigned in `uniqueTypes` but we still\n        /// need to resolve the type to correctly parse typealiases\n        /// @see https://github.com/krzysztofzablocki/Sourcery/pull/374\n        var definedInType: Type?\n        if let definedInTypeName = method.definedInTypeName {\n            definedInType = resolve(definedInTypeName, type, method)\n        }\n\n        guard !method.returnTypeName.isVoid else { return }\n\n        if method.isInitializer || method.isFailableInitializer {\n            method.returnType = definedInType\n            if let type = method.actualDefinedInTypeName {\n                if method.isFailableInitializer {\n                    method.returnTypeName = TypeName(\n                        name: type.name,\n                        isOptional: true,\n                        isImplicitlyUnwrappedOptional: false,\n                        tuple: type.tuple,\n                        array: type.array,\n                        dictionary: type.dictionary,\n                        closure: type.closure,\n                        set: type.set,\n                        generic: type.generic,\n                        isProtocolComposition: type.isProtocolComposition\n                    )\n                } else if method.isInitializer {\n                    method.returnTypeName = type\n                }\n            }\n        } else {\n            method.returnType = resolve(method.returnTypeName, type, method)\n        }\n    }\n\n    private static func resolveEnumTypes(_ enumeration: Enum, types: [String: Type], resolve: TypeResolver) {\n        enumeration.cases.forEach { enumCase in\n            enumCase.associatedValues.forEach { associatedValue in\n                associatedValue.type = resolve(associatedValue.typeName, enumeration)\n            }\n        }\n\n        guard enumeration.hasRawType else { return }\n\n        if let rawValueVariable = enumeration.variables.first(where: { $0.name == \"rawValue\" && !$0.isStatic }) {\n            enumeration.rawTypeName = rawValueVariable.actualTypeName\n            enumeration.rawType = rawValueVariable.type\n        } else if let rawTypeName = enumeration.inheritedTypes.first {\n            // enums with no cases or enums with cases that contain associated values can't have raw type\n            guard !enumeration.cases.isEmpty,\n                  !enumeration.hasAssociatedValues else {\n                return enumeration.rawTypeName = nil\n            }\n\n            if let rawTypeCandidate = types[rawTypeName] {\n                if !((rawTypeCandidate is SourceryProtocol) || (rawTypeCandidate is ProtocolComposition)) {\n                    enumeration.rawTypeName = TypeName(rawTypeName)\n                    enumeration.rawType = rawTypeCandidate\n                }\n            } else {\n                enumeration.rawTypeName = TypeName(rawTypeName)\n            }\n        }\n    }\n\n    private static func resolveProtocolCompositionTypes(_ protocolComposition: ProtocolComposition, resolve: TypeResolver) {\n        let composedTypes = protocolComposition.composedTypeNames.compactMap { typeName in\n            resolve(typeName, protocolComposition)\n        }\n\n        protocolComposition.composedTypes = composedTypes\n    }\n\n    private static func resolveAssociatedTypes(_ sourceryProtocol: SourceryProtocol, resolve: TypeResolver) {\n        sourceryProtocol.associatedTypes.forEach { (_, value) in\n            guard let typeName = value.typeName,\n                  let type = resolve(typeName, sourceryProtocol)\n            else {\n                return\n            }\n            value.type = type\n        }\n\n        sourceryProtocol.genericRequirements.forEach { requirment in\n            if let knownAssociatedType = sourceryProtocol.associatedTypes[requirment.leftType.name] {\n                requirment.leftType = knownAssociatedType\n            }\n            requirment.rightType.type = resolve(requirment.rightType.typeName, sourceryProtocol)\n        }\n    }\n\n    private static func updateTypeRelationships(types: [Type]) {\n        var typesByName = [String: Type]()\n        types.forEach { typesByName[$0.globalName] = $0 }\n\n        var processed = [String: Bool]()\n        types.forEach { type in\n            if let type = type as? Class, let supertype = type.inheritedTypes.first.flatMap({ typesByName[$0] }) as? Class {\n                type.supertype = supertype\n            }\n            processed[type.globalName] = true\n            updateTypeRelationship(for: type, typesByName: typesByName, processed: &processed)\n        }\n    }\n\n    internal static func findBaseType(for type: Type, name: String, typesByName: [String: Type]) -> Type? {\n        // special case to check if the type is based on one of the recognized types\n        // and the superclass has a generic constraint in `name` part of the `TypeName`\n        var name = name\n        if name.contains(\"<\") && name.contains(\">\") {\n            let parts = name.split(separator: \"<\")\n            name = String(parts.first!)\n        }\n        if let baseType = typesByName[name] {\n            return baseType\n        }\n        if let module = type.module, let baseType = typesByName[\"\\\\(module).\\\\(name)\"] {\n            return baseType\n        }\n        for importModule in type.imports {\n            if let baseType = typesByName[\"\\\\(importModule).\\\\(name)\"] {\n                return baseType\n            }\n        }\n        guard name.contains(\"&\") else { return nil }\n        // this can happen for a type which consists of mutliple types composed together (i.e. (A & B))\n        let nameComponents = name.components(separatedBy: \"&\").map { $0.trimmingCharacters(in: .whitespaces) }\n        let types: [Type] = nameComponents.compactMap {\n            typesByName[$0]\n        }\n        let typeNames = types.map {\n            TypeName(name: $0.name)\n        }\n        return ProtocolComposition(name: name, inheritedTypes: types.map { $0.globalName }, composedTypeNames: typeNames, composedTypes: types)\n    }\n\n    private static func updateTypeRelationship(for type: Type, typesByName: [String: Type], processed: inout [String: Bool]) {\n        type.based.keys.forEach { name in\n            guard let baseType = findBaseType(for: type, name: name, typesByName: typesByName) else { return }\n            let globalName = baseType.globalName\n            if processed[globalName] != true {\n                processed[globalName] = true\n                updateTypeRelationship(for: baseType, typesByName: typesByName, processed: &processed)\n            }\n            copyTypeRelationships(from: baseType, to: type)\n            if let composedType = baseType as? ProtocolComposition {\n                let implements = composedType.composedTypes?.filter({ $0 is SourceryProtocol })\n                implements?.forEach { updateInheritsAndImplements(from: $0, to: type) }\n                if implements?.count == composedType.composedTypes?.count\n                    || composedType.composedTypes == nil\n                    || composedType.composedTypes?.isEmpty == true\n                {\n                    type.implements[globalName] = baseType\n                }\n            } else {\n                updateInheritsAndImplements(from: baseType, to: type)\n            }\n            type.basedTypes[globalName] = baseType\n        }\n    }\n\n    private static func updateInheritsAndImplements(from baseType: Type, to type: Type) {\n        if baseType is Class {\n            type.inherits[baseType.name] = baseType\n        } else if let `protocol` = baseType as? SourceryProtocol {\n            type.implements[baseType.globalName] = baseType\n            if let extendingProtocol = type as? SourceryProtocol {\n                `protocol`.associatedTypes.forEach {\n                    if extendingProtocol.associatedTypes[$0.key] == nil {\n                        extendingProtocol.associatedTypes[$0.key] = $0.value\n                    }\n                }\n            }\n        }\n    }\n\n    private static func copyTypeRelationships(from baseType: Type, to type: Type) {\n        baseType.based.keys.forEach { type.based[$0] = $0 }\n        baseType.basedTypes.forEach { type.basedTypes[$0.key] = $0.value }\n        baseType.inherits.forEach { type.inherits[$0.key] = $0.value }\n        baseType.implements.forEach { type.implements[$0.key] = $0.value }\n    }\n}\n\n\"\"\"),\n    .init(name: \"Definition.swift\", content:\n\"\"\"\nimport Foundation\n\n/// Describes that the object is defined in a context of some `Type`\npublic protocol Definition: AnyObject {\n    /// Reference to type name where the object is defined, \n    /// nil if defined outside of any `enum`, `struct`, `class` etc\n    var definedInTypeName: TypeName? { get }\n\n    /// Reference to actual type where the object is defined, \n    /// nil if defined outside of any `enum`, `struct`, `class` etc or type is unknown\n    var definedInType: Type? { get }\n\n    // sourcery: skipJSExport\n    /// Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a `definedInTypeName`\n    var actualDefinedInTypeName: TypeName? { get }\n}\n\n\"\"\"),\n    .init(name: \"Dictionary.swift\", content:\n\"\"\"\nimport Foundation\n\n/// Describes dictionary type\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class DictionaryType: NSObject, SourceryModel, Diffable {\n    /// Type name used in declaration\n    public var name: String\n\n    /// Dictionary value type name\n    public var valueTypeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Dictionary value type, if known\n    public var valueType: Type?\n\n    /// Dictionary key type name\n    public var keyTypeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Dictionary key type, if known\n    public var keyType: Type?\n\n    /// :nodoc:\n    public init(name: String, valueTypeName: TypeName, valueType: Type? = nil, keyTypeName: TypeName, keyType: Type? = nil) {\n        self.name = name\n        self.valueTypeName = valueTypeName\n        self.valueType = valueType\n        self.keyTypeName = keyTypeName\n        self.keyType = keyType\n    }\n\n    /// Returns dictionary as generic type\n    public var asGeneric: GenericType {\n        GenericType(name: \"Dictionary\", typeParameters: [\n            .init(typeName: keyTypeName),\n            .init(typeName: valueTypeName)\n        ])\n    }\n\n    public var asSource: String {\n        \"[\\\\(keyTypeName.asSource): \\\\(valueTypeName.asSource)]\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"valueTypeName = \\\\(String(describing: self.valueTypeName)), \")\n        string.append(\"keyTypeName = \\\\(String(describing: self.keyTypeName)), \")\n        string.append(\"asGeneric = \\\\(String(describing: self.asGeneric)), \")\n        string.append(\"asSource = \\\\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? DictionaryType else {\n            results.append(\"Incorrect type <expected: DictionaryType, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"valueTypeName\").trackDifference(actual: self.valueTypeName, expected: castObject.valueTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"keyTypeName\").trackDifference(actual: self.keyTypeName, expected: castObject.keyTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.valueTypeName)\n        hasher.combine(self.keyTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? DictionaryType else { return false }\n        if self.name != rhs.name { return false }\n        if self.valueTypeName != rhs.valueTypeName { return false }\n        if self.keyTypeName != rhs.keyTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:DictionaryType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let valueTypeName: TypeName = aDecoder.decode(forKey: \"valueTypeName\") else { \n                withVaList([\"valueTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.valueTypeName = valueTypeName\n            self.valueType = aDecoder.decode(forKey: \"valueType\")\n            guard let keyTypeName: TypeName = aDecoder.decode(forKey: \"keyTypeName\") else { \n                withVaList([\"keyTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.keyTypeName = keyTypeName\n            self.keyType = aDecoder.decode(forKey: \"keyType\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.valueTypeName, forKey: \"valueTypeName\")\n            aCoder.encode(self.valueType, forKey: \"valueType\")\n            aCoder.encode(self.keyTypeName, forKey: \"keyTypeName\")\n            aCoder.encode(self.keyType, forKey: \"keyType\")\n        }\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"Diffable.swift\", content:\n\"\"\"\n//\n//  Diffable.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zabłocki on 22/12/2016.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\npublic protocol Diffable {\n\n    /// Returns `DiffableResult` for the given objects.\n    ///\n    /// - Parameter object: Object to diff against.\n    /// - Returns: Diffable results.\n    func diffAgainst(_ object: Any?) -> DiffableResult\n}\n\n/// :nodoc:\nextension NSRange: Diffable {\n    /// :nodoc:\n    public static func == (lhs: NSRange, rhs: NSRange) -> Bool {\n        return NSEqualRanges(lhs, rhs)\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let rhs = object as? NSRange else {\n            results.append(\"Incorrect type <expected: FileParserResult, received: \\\\(type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"location\").trackDifference(actual: self.location, expected: rhs.location))\n        results.append(contentsOf: DiffableResult(identifier: \"length\").trackDifference(actual: self.length, expected: rhs.length))\n        return results\n    }\n}\n\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic class DiffableResult: NSObject, AutoEquatable {\n    // sourcery: skipEquality\n    private var results: [String]\n    internal var identifier: String?\n\n    init(results: [String] = [], identifier: String? = nil) {\n        self.results = results\n        self.identifier = identifier\n    }\n\n    func append(_ element: String) {\n        results.append(element)\n    }\n\n    func append(contentsOf contents: DiffableResult) {\n        if !contents.isEmpty {\n            results.append(contents.description)\n        }\n    }\n\n    var isEmpty: Bool { return results.isEmpty }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.identifier)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? DiffableResult else { return false }\n        if self.identifier != rhs.identifier { return false }\n        return true\n    }\n\n    public override var description: String {\n        guard !results.isEmpty else { return \"\" }\n        var description = \"\\\\(identifier.flatMap { \"\\\\($0) \" } ?? \"\")\"\n        description.append(results.joined(separator: \"\\\\n\"))\n        return description\n    }\n}\n\npublic extension DiffableResult {\n\n#if swift(>=4.1)\n#else\n    /// :nodoc:\n    @discardableResult func trackDifference<T: Equatable>(actual: T, expected: T) -> DiffableResult {\n        if actual != expected {\n            let result = DiffableResult(results: [\"<expected: \\\\(expected), received: \\\\(actual)>\"])\n            append(contentsOf: result)\n        }\n        return self\n    }\n#endif\n\n    /// :nodoc:\n    @discardableResult func trackDifference<T: Equatable>(actual: T?, expected: T?) -> DiffableResult {\n        if actual != expected {\n            let expected = expected.map({ \"\\\\($0)\" }) ?? \"nil\"\n            let actual = actual.map({ \"\\\\($0)\" }) ?? \"nil\"\n            let result = DiffableResult(results: [\"<expected: \\\\(expected), received: \\\\(actual)>\"])\n            append(contentsOf: result)\n        }\n        return self\n    }\n\n    /// :nodoc:\n    @discardableResult func trackDifference<T: Equatable>(actual: T, expected: T) -> DiffableResult where T: Diffable {\n        let diffResult = actual.diffAgainst(expected)\n        append(contentsOf: diffResult)\n        return self\n    }\n\n    /// :nodoc:\n    @discardableResult func trackDifference<T: Equatable>(actual: [T], expected: [T]) -> DiffableResult where T: Diffable {\n        let diffResult = DiffableResult()\n        defer { append(contentsOf: diffResult) }\n\n        guard actual.count == expected.count else {\n            diffResult.append(\"Different count, expected: \\\\(expected.count), received: \\\\(actual.count)\")\n            return self\n        }\n\n        for (idx, item) in actual.enumerated() {\n            let diff = DiffableResult()\n            diff.trackDifference(actual: item, expected: expected[idx])\n            if !diff.isEmpty {\n                let string = \"idx \\\\(idx): \\\\(diff)\"\n                diffResult.append(string)\n            }\n        }\n\n        return self\n    }\n\n    /// :nodoc:\n    @discardableResult func trackDifference<T: Equatable>(actual: [T], expected: [T]) -> DiffableResult {\n        let diffResult = DiffableResult()\n        defer { append(contentsOf: diffResult) }\n\n        guard actual.count == expected.count else {\n            diffResult.append(\"Different count, expected: \\\\(expected.count), received: \\\\(actual.count)\")\n            return self\n        }\n\n        for (idx, item) in actual.enumerated() where item != expected[idx] {\n            let string = \"idx \\\\(idx): <expected: \\\\(expected), received: \\\\(actual)>\"\n            diffResult.append(string)\n        }\n\n        return self\n    }\n\n    /// :nodoc:\n    @discardableResult func trackDifference<K, T: Equatable>(actual: [K: T], expected: [K: T]) -> DiffableResult where T: Diffable {\n        let diffResult = DiffableResult()\n        defer { append(contentsOf: diffResult) }\n\n        guard actual.count == expected.count else {\n            append(\"Different count, expected: \\\\(expected.count), received: \\\\(actual.count)\")\n\n            if expected.count > actual.count {\n                let missingKeys = Array(expected.keys.filter {\n                    actual[$0] == nil\n                }.map {\n                    String(describing: $0)\n                })\n                diffResult.append(\"Missing keys: \\\\(missingKeys.joined(separator: \", \"))\")\n            }\n            return self\n        }\n\n        for (key, actualElement) in actual {\n            guard let expectedElement = expected[key] else {\n                diffResult.append(\"Missing key \\\\\"\\\\(key)\\\\\"\")\n                continue\n            }\n\n            let diff = DiffableResult()\n            diff.trackDifference(actual: actualElement, expected: expectedElement)\n            if !diff.isEmpty {\n                let string = \"key \\\\\"\\\\(key)\\\\\": \\\\(diff)\"\n                diffResult.append(string)\n            }\n        }\n\n        return self\n    }\n\n// MARK: - NSObject diffing\n\n    /// :nodoc:\n    @discardableResult func trackDifference<K, T: NSObjectProtocol>(actual: [K: T], expected: [K: T]) -> DiffableResult {\n        let diffResult = DiffableResult()\n        defer { append(contentsOf: diffResult) }\n\n        guard actual.count == expected.count else {\n            append(\"Different count, expected: \\\\(expected.count), received: \\\\(actual.count)\")\n\n            if expected.count > actual.count {\n                let missingKeys = Array(expected.keys.filter {\n                    actual[$0] == nil\n                    }.map {\n                        String(describing: $0)\n                })\n                diffResult.append(\"Missing keys: \\\\(missingKeys.joined(separator: \", \"))\")\n            }\n            return self\n        }\n\n        for (key, actualElement) in actual {\n            guard let expectedElement = expected[key] else {\n                diffResult.append(\"Missing key \\\\\"\\\\(key)\\\\\"\")\n                continue\n            }\n\n            if !actualElement.isEqual(expectedElement) {\n                diffResult.append(\"key \\\\\"\\\\(key)\\\\\": <expected: \\\\(expected), received: \\\\(actual)>\")\n            }\n        }\n\n        return self\n    }\n}\n\n\"\"\"),\n    .init(name: \"Documentation.swift\", content:\n\"\"\"\nimport Foundation\n\npublic typealias Documentation = [String]\n\n/// Describes a declaration with documentation, i.e. type, method, variable, enum case\npublic protocol Documented {\n    var documentation: Documentation { get }\n}\n\n\"\"\"),\n    .init(name: \"Extensions.swift\", content:\n\"\"\"\nimport Foundation\n\npublic extension StringProtocol {\n    /// Trimms leading and trailing whitespaces and newlines\n    var trimmed: String {\n        self.trimmingCharacters(in: .whitespacesAndNewlines)\n    }\n}\n\npublic extension String {\n\n    /// Returns nil if string is empty\n    var nilIfEmpty: String? {\n        if isEmpty {\n            return nil\n        }\n\n        return self\n    }\n\n    /// Returns nil if string is empty or contains `_` character\n    var nilIfNotValidParameterName: String? {\n        if isEmpty {\n            return nil\n        }\n\n        if self == \"_\" {\n            return nil\n        }\n\n        return self\n    }\n\n    /// :nodoc:\n    /// - Parameter substring: Instance of a substring\n    /// - Returns: Returns number of times a substring appears in self\n    func countInstances(of substring: String) -> Int {\n        guard !substring.isEmpty else { return 0 }\n        var count = 0\n        var searchRange: Range<String.Index>?\n        while let foundRange = range(of: substring, options: [], range: searchRange) {\n            count += 1\n            searchRange = Range(uncheckedBounds: (lower: foundRange.upperBound, upper: endIndex))\n        }\n        return count\n    }\n\n    /// :nodoc:\n    /// Removes leading and trailing whitespace from str. Returns false if str was not altered.\n    @discardableResult\n    mutating func strip() -> Bool {\n        let strippedString = stripped()\n        guard strippedString != self else { return false }\n        self = strippedString\n        return true\n    }\n\n    /// :nodoc:\n    /// Returns a copy of str with leading and trailing whitespace removed.\n    func stripped() -> String {\n        return String(self.trimmingCharacters(in: .whitespaces))\n    }\n\n    /// :nodoc:\n    @discardableResult\n    mutating func trimPrefix(_ prefix: String) -> Bool {\n        guard hasPrefix(prefix) else { return false }\n        self = String(self.suffix(self.count - prefix.count))\n        return true\n    }\n\n    /// :nodoc:\n    func trimmingPrefix(_ prefix: String) -> String {\n        guard hasPrefix(prefix) else { return self }\n        return String(self.suffix(self.count - prefix.count))\n    }\n\n    /// :nodoc:\n    @discardableResult\n    mutating func trimSuffix(_ suffix: String) -> Bool {\n        guard hasSuffix(suffix) else { return false }\n        self = String(self.prefix(self.count - suffix.count))\n        return true\n    }\n\n    /// :nodoc:\n    func trimmingSuffix(_ suffix: String) -> String {\n        guard hasSuffix(suffix) else { return self }\n        return String(self.prefix(self.count - suffix.count))\n    }\n\n    /// :nodoc:\n    func dropFirstAndLast(_ n: Int = 1) -> String {\n        return drop(first: n, last: n)\n    }\n\n    /// :nodoc:\n    func drop(first: Int, last: Int) -> String {\n        return String(self.dropFirst(first).dropLast(last))\n    }\n\n    /// :nodoc:\n    /// Wraps brackets if needed to make a valid type name\n    func bracketsBalancing() -> String {\n        if hasPrefix(\"(\") && hasSuffix(\")\") {\n            let unwrapped = dropFirstAndLast()\n            return unwrapped.commaSeparated().count == 1 ? unwrapped.bracketsBalancing() : self\n        } else {\n            let wrapped = \"(\\\\(self))\"\n            return wrapped.isValidTupleName() || !isBracketsBalanced() ? wrapped : self\n        }\n    }\n\n    /// :nodoc:\n    /// Returns true if given string can represent a valid tuple type name\n    func isValidTupleName() -> Bool {\n        guard hasPrefix(\"(\") && hasSuffix(\")\") else { return false }\n        let trimmedBracketsName = dropFirstAndLast()\n        return trimmedBracketsName.isBracketsBalanced() && trimmedBracketsName.commaSeparated().count > 1\n    }\n\n    /// :nodoc:\n    func isValidArrayName() -> Bool {\n        if hasPrefix(\"Array<\") { return true }\n        if hasPrefix(\"[\") && hasSuffix(\"]\") {\n            return dropFirstAndLast().colonSeparated().count == 1\n        }\n        return false\n    }\n\n    /// :nodoc:\n    func isValidDictionaryName() -> Bool {\n        if hasPrefix(\"Dictionary<\") { return true }\n        if hasPrefix(\"[\") && contains(\":\") && hasSuffix(\"]\") {\n            return dropFirstAndLast().colonSeparated().count == 2\n        }\n        return false\n    }\n\n    /// :nodoc:\n    func isValidClosureName() -> Bool {\n        return components(separatedBy: \"->\", excludingDelimiterBetween: ([\"(\", \"<\"], [\")\", \">\"])).count > 1\n    }\n\n    /// :nodoc:\n    /// Returns true if all opening brackets are balanced with closed brackets.\n    func isBracketsBalanced() -> Bool {\n        var bracketsCount: Int = 0\n        for char in self {\n            if char == \"(\" { bracketsCount += 1 } else if char == \")\" { bracketsCount -= 1 }\n            if bracketsCount < 0 { return false }\n        }\n        return bracketsCount == 0\n    }\n\n    /// :nodoc:\n    /// Returns components separated with a comma respecting nested types\n    func commaSeparated() -> [String] {\n        return components(separatedBy: \",\", excludingDelimiterBetween: (\"<[({\", \"})]>\"))\n    }\n\n    /// :nodoc:\n    /// Returns components separated with colon respecting nested types\n    func colonSeparated() -> [String] {\n        return components(separatedBy: \":\", excludingDelimiterBetween: (\"<[({\", \"})]>\"))\n    }\n\n    /// :nodoc:\n    /// Returns components separated with semicolon respecting nested contexts\n    func semicolonSeparated() -> [String] {\n        return components(separatedBy: \";\", excludingDelimiterBetween: (\"{\", \"}\"))\n    }\n\n    /// :nodoc:\n    func components(separatedBy delimiter: String, excludingDelimiterBetween between: (open: String, close: String)) -> [String] {\n        return self.components(separatedBy: delimiter, excludingDelimiterBetween: (between.open.map { String($0) }, between.close.map { String($0) }))\n    }\n\n    /// :nodoc:\n    func components(separatedBy delimiter: String, excludingDelimiterBetween between: (open: [String], close: [String])) -> [String] {\n        var boundingCharactersCount: Int = 0\n        var quotesCount: Int = 0\n        var item = \"\"\n        var items = [String]()\n\n        var i = self.startIndex\n        while i < self.endIndex {\n            var offset = 1\n            defer {\n                i = self.index(i, offsetBy: offset)\n            }\n            var currentlyScannedEnd: Index = self.endIndex\n            if let endIndex = self.index(i, offsetBy: delimiter.count, limitedBy: self.endIndex) {\n                currentlyScannedEnd = endIndex\n            }\n            let currentlyScanned: String = String(self[i..<currentlyScannedEnd])\n            if let openString = between.open.first(where: { self[i...].starts(with: $0) }) {\n                if !((boundingCharactersCount == 0) as Bool && (String(self[i]) == delimiter) as Bool) {\n                    boundingCharactersCount += 1\n                }\n                offset = openString.count\n            } else if let closeString = between.close.first(where: { self[i...].starts(with: $0) }) {\n                // do not count `->`\n                if !((self[i] == \">\") as Bool && (item.last == \"-\") as Bool) {\n                    boundingCharactersCount = max(0, boundingCharactersCount - 1)\n                }\n                offset = closeString.count\n            }\n            if (self[i] == \"\\\\\"\") as Bool {\n                quotesCount += 1\n            }\n\n            let currentIsDelimiter = (currentlyScanned == delimiter) as Bool\n            let boundingCountIsZero = (boundingCharactersCount == 0) as Bool\n            let hasEvenQuotes = (quotesCount % 2 == 0) as Bool\n            if currentIsDelimiter && boundingCountIsZero && hasEvenQuotes {\n                items.append(item)\n                item = \"\"\n                i = self.index(i, offsetBy: delimiter.count - 1)\n            } else {\n                let endIndex: Index = self.index(i, offsetBy: offset)\n                item += self[i..<endIndex]\n            }\n        }\n        items.append(item)\n        return items\n    }\n}\n\npublic extension NSString {\n    /// :nodoc:\n    var entireRange: NSRange {\n        return NSRange(location: 0, length: self.length)\n    }\n}\n\n\"\"\"),\n    .init(name: \"FileParserResult.swift\", content:\n\"\"\"\n//\n//  FileParserResult.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zablocki on 11/01/2017.\n//  Copyright © 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n// sourcery: skipJSExport\n/// :nodoc:\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class FileParserResult: NSObject, SourceryModel, Diffable {\n    public let path: String?\n    public let module: String?\n    public var types = [Type]() {\n        didSet {\n            types.forEach { type in\n                guard type.module == nil, type.kind != \"extensions\" else { return }\n                type.module = module\n            }\n        }\n    }\n    public var functions = [SourceryMethod]()\n    public var typealiases = [Typealias]()\n    public var inlineRanges = [String: NSRange]()\n    public var inlineIndentations = [String: String]()\n\n    public var modifiedDate: Date\n    public var sourceryVersion: String\n\n    var isEmpty: Bool {\n        types.isEmpty && functions.isEmpty && typealiases.isEmpty && inlineRanges.isEmpty && inlineIndentations.isEmpty\n    }\n\n    public init(path: String?, module: String?, types: [Type], functions: [SourceryMethod], typealiases: [Typealias] = [], inlineRanges: [String: NSRange] = [:], inlineIndentations: [String: String] = [:], modifiedDate: Date = Date(), sourceryVersion: String = \"\") {\n        self.path = path\n        self.module = module\n        self.types = types\n        self.functions = functions\n        self.typealiases = typealiases\n        self.inlineRanges = inlineRanges\n        self.inlineIndentations = inlineIndentations\n        self.modifiedDate = modifiedDate\n        self.sourceryVersion = sourceryVersion\n\n        super.init()\n\n        defer {\n            self.types = types\n        }\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"path = \\\\(String(describing: self.path)), \")\n        string.append(\"module = \\\\(String(describing: self.module)), \")\n        string.append(\"types = \\\\(String(describing: self.types)), \")\n        string.append(\"functions = \\\\(String(describing: self.functions)), \")\n        string.append(\"typealiases = \\\\(String(describing: self.typealiases)), \")\n        string.append(\"inlineRanges = \\\\(String(describing: self.inlineRanges)), \")\n        string.append(\"inlineIndentations = \\\\(String(describing: self.inlineIndentations)), \")\n        string.append(\"modifiedDate = \\\\(String(describing: self.modifiedDate)), \")\n        string.append(\"sourceryVersion = \\\\(String(describing: self.sourceryVersion)), \")\n        string.append(\"isEmpty = \\\\(String(describing: self.isEmpty))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? FileParserResult else {\n            results.append(\"Incorrect type <expected: FileParserResult, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"path\").trackDifference(actual: self.path, expected: castObject.path))\n        results.append(contentsOf: DiffableResult(identifier: \"module\").trackDifference(actual: self.module, expected: castObject.module))\n        results.append(contentsOf: DiffableResult(identifier: \"types\").trackDifference(actual: self.types, expected: castObject.types))\n        results.append(contentsOf: DiffableResult(identifier: \"functions\").trackDifference(actual: self.functions, expected: castObject.functions))\n        results.append(contentsOf: DiffableResult(identifier: \"typealiases\").trackDifference(actual: self.typealiases, expected: castObject.typealiases))\n        results.append(contentsOf: DiffableResult(identifier: \"inlineRanges\").trackDifference(actual: self.inlineRanges, expected: castObject.inlineRanges))\n        results.append(contentsOf: DiffableResult(identifier: \"inlineIndentations\").trackDifference(actual: self.inlineIndentations, expected: castObject.inlineIndentations))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiedDate\").trackDifference(actual: self.modifiedDate, expected: castObject.modifiedDate))\n        results.append(contentsOf: DiffableResult(identifier: \"sourceryVersion\").trackDifference(actual: self.sourceryVersion, expected: castObject.sourceryVersion))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.path)\n        hasher.combine(self.module)\n        hasher.combine(self.types)\n        hasher.combine(self.functions)\n        hasher.combine(self.typealiases)\n        hasher.combine(self.inlineRanges)\n        hasher.combine(self.inlineIndentations)\n        hasher.combine(self.modifiedDate)\n        hasher.combine(self.sourceryVersion)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? FileParserResult else { return false }\n        if self.path != rhs.path { return false }\n        if self.module != rhs.module { return false }\n        if self.types != rhs.types { return false }\n        if self.functions != rhs.functions { return false }\n        if self.typealiases != rhs.typealiases { return false }\n        if self.inlineRanges != rhs.inlineRanges { return false }\n        if self.inlineIndentations != rhs.inlineIndentations { return false }\n        if self.modifiedDate != rhs.modifiedDate { return false }\n        if self.sourceryVersion != rhs.sourceryVersion { return false }\n        return true\n    }\n\n// sourcery:inline:FileParserResult.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.path = aDecoder.decode(forKey: \"path\")\n            self.module = aDecoder.decode(forKey: \"module\")\n            guard let types: [Type] = aDecoder.decode(forKey: \"types\") else { \n                withVaList([\"types\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.types = types\n            guard let functions: [SourceryMethod] = aDecoder.decode(forKey: \"functions\") else { \n                withVaList([\"functions\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.functions = functions\n            guard let typealiases: [Typealias] = aDecoder.decode(forKey: \"typealiases\") else { \n                withVaList([\"typealiases\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typealiases = typealiases\n            guard let inlineRanges: [String: NSRange] = aDecoder.decode(forKey: \"inlineRanges\") else { \n                withVaList([\"inlineRanges\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.inlineRanges = inlineRanges\n            guard let inlineIndentations: [String: String] = aDecoder.decode(forKey: \"inlineIndentations\") else { \n                withVaList([\"inlineIndentations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.inlineIndentations = inlineIndentations\n            guard let modifiedDate: Date = aDecoder.decode(forKey: \"modifiedDate\") else { \n                withVaList([\"modifiedDate\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiedDate = modifiedDate\n            guard let sourceryVersion: String = aDecoder.decode(forKey: \"sourceryVersion\") else { \n                withVaList([\"sourceryVersion\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.sourceryVersion = sourceryVersion\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.path, forKey: \"path\")\n            aCoder.encode(self.module, forKey: \"module\")\n            aCoder.encode(self.types, forKey: \"types\")\n            aCoder.encode(self.functions, forKey: \"functions\")\n            aCoder.encode(self.typealiases, forKey: \"typealiases\")\n            aCoder.encode(self.inlineRanges, forKey: \"inlineRanges\")\n            aCoder.encode(self.inlineIndentations, forKey: \"inlineIndentations\")\n            aCoder.encode(self.modifiedDate, forKey: \"modifiedDate\")\n            aCoder.encode(self.sourceryVersion, forKey: \"sourceryVersion\")\n        }\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"Generic.swift\", content:\n\"\"\"\nimport Foundation\n\n/// Descibes Swift generic type\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class GenericType: NSObject, SourceryModelWithoutDescription, Diffable {\n    /// The name of the base type, i.e. `Array` for `Array<Int>`\n    public var name: String\n\n    /// This generic type parameters\n    public let typeParameters: [GenericTypeParameter]\n\n    /// :nodoc:\n    public init(name: String, typeParameters: [GenericTypeParameter] = []) {\n        self.name = name\n        self.typeParameters = typeParameters\n    }\n\n    public var asSource: String {\n        let arguments = typeParameters\n          .map({ $0.typeName.asSource })\n          .joined(separator: \", \")\n        return \"\\\\(name)<\\\\(arguments)>\"\n    }\n\n    public override var description: String {\n        asSource\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? GenericType else {\n            results.append(\"Incorrect type <expected: GenericType, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeParameters\").trackDifference(actual: self.typeParameters, expected: castObject.typeParameters))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.typeParameters)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? GenericType else { return false }\n        if self.name != rhs.name { return false }\n        if self.typeParameters != rhs.typeParameters { return false }\n        return true\n    }   \n\n// sourcery:inline:GenericType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let typeParameters: [GenericTypeParameter] = aDecoder.decode(forKey: \"typeParameters\") else { \n                withVaList([\"typeParameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeParameters = typeParameters\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeParameters, forKey: \"typeParameters\")\n        }\n\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"Import.swift\", content:\n\"\"\"\nimport Foundation\n\n/// Defines import type\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic class Import: NSObject, SourceryModelWithoutDescription, Diffable {\n    /// Import kind, e.g. class, struct in `import class Module.ClassName`\n    public var kind: String?\n\n    /// Import path\n    public var path: String\n\n    /// :nodoc:\n    public init(path: String, kind: String? = nil) {\n        self.path = path\n        self.kind = kind\n    }\n\n    /// Full import value e.g. `import struct Module.StructName`\n    public override var description: String {\n        if let kind = kind {\n            return \"\\\\(kind) \\\\(path)\"\n        }\n\n        return path\n    }\n\n    /// Returns module name from a import, e.g. if you had `import struct Module.Submodule.Struct` it will return `Module.Submodule`\n    public var moduleName: String {\n        if kind != nil {\n            if let idx = path.lastIndex(of: \".\") {\n                return String(path[..<idx])\n            } else {\n                return path\n            }\n        } else {\n            return path\n        }\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Import else {\n            results.append(\"Incorrect type <expected: Import, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"kind\").trackDifference(actual: self.kind, expected: castObject.kind))\n        results.append(contentsOf: DiffableResult(identifier: \"path\").trackDifference(actual: self.path, expected: castObject.path))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.kind)\n        hasher.combine(self.path)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Import else { return false }\n        if self.kind != rhs.kind { return false }\n        if self.path != rhs.path { return false }\n        return true\n    }\n\n// sourcery:inline:Import.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.kind = aDecoder.decode(forKey: \"kind\")\n            guard let path: String = aDecoder.decode(forKey: \"path\") else { \n                withVaList([\"path\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.path = path\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.kind, forKey: \"kind\")\n            aCoder.encode(self.path, forKey: \"path\")\n        }\n\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"Log.swift\", content:\n\"\"\"\n//import Darwin\nimport Foundation\n\n/// :nodoc:\npublic enum Log {\n    public struct Configuration {\n        let isDryRun: Bool\n        let isQuiet: Bool\n        let isVerboseLoggingEnabled: Bool\n        let isLogBenchmarkEnabled: Bool\n        let shouldLogAST: Bool\n\n        public init(isDryRun: Bool, isQuiet: Bool, isVerboseLoggingEnabled: Bool, isLogBenchmarkEnabled: Bool, shouldLogAST: Bool) {\n            self.isDryRun = isDryRun\n            self.isQuiet = isQuiet\n            self.isVerboseLoggingEnabled = isVerboseLoggingEnabled\n            self.isLogBenchmarkEnabled = isLogBenchmarkEnabled\n            self.shouldLogAST = shouldLogAST\n        }\n    }\n\n    public static func setup(using configuration: Configuration) {\n        Log.stackMessages = configuration.isDryRun\n        switch (configuration.isQuiet, configuration.isVerboseLoggingEnabled) {\n        case (true, _):\n            Log.level = .errors\n        case (false, let isVerbose):\n            Log.level = isVerbose ? .verbose : .info\n        }\n        Log.logBenchmarks = (configuration.isVerboseLoggingEnabled || configuration.isLogBenchmarkEnabled) && !configuration.isQuiet\n        Log.logAST = (configuration.shouldLogAST) && !configuration.isQuiet\n    }\n\n    public enum Level: Int {\n        case errors\n        case warnings\n        case info\n        case verbose\n    }\n\n    public static var level: Level = .warnings\n    public static var logBenchmarks: Bool = false\n    public static var logAST: Bool = false\n\n    public static var stackMessages: Bool = false\n    public private(set) static var messagesStack = [String]()\n\n    public static func error(_ message: Any) {\n        log(level: .errors, \"error: \\\\(message)\")\n        // to return error when running swift templates which is done in a different process\n        if ProcessInfo.processInfo.processName != \"Sourcery\" {\n            fputs(\"\\\\(message)\", stderr)\n        }\n    }\n\n    public static func warning(_ message: Any) {\n        log(level: .warnings, \"warning: \\\\(message)\")\n    }\n\n    public static func astWarning(_ message: Any) {\n        guard logAST else { return }\n        log(level: .warnings, \"ast warning: \\\\(message)\")\n    }\n\n    public static func astError(_ message: Any) {\n        guard logAST else { return }\n        log(level: .errors, \"ast error: \\\\(message)\")\n    }\n\n    public static func verbose(_ message: Any) {\n        log(level: .verbose, message)\n    }\n\n    public static func info(_ message: Any) {\n        log(level: .info, message)\n    }\n\n    public static func benchmark(_ message: Any) {\n        guard logBenchmarks else { return }\n        if stackMessages {\n            messagesStack.append(\"\\\\(message)\")\n        } else {\n            print(message)\n        }\n    }\n\n    private static func log(level logLevel: Level, _ message: Any) {\n        guard logLevel.rawValue <= Log.level.rawValue else { return }\n        if stackMessages {\n            messagesStack.append(\"\\\\(message)\")\n        } else {\n            print(message)\n        }\n    }\n\n    public static func output(_ message: String) {\n        print(message)\n    }\n}\n\nextension String: Error {}\n\n\"\"\"),\n    .init(name: \"Modifier.swift\", content:\n\"\"\"\nimport Foundation\n\npublic typealias SourceryModifier = Modifier\n/// modifier can be thing like `private`, `class`, `nonmutating`\n/// if a declaration has modifier like `private(set)` it's name will be `private` and detail will be `set`\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic class Modifier: NSObject, AutoCoding, AutoEquatable, AutoDiffable, AutoJSExport, Diffable {\n\n    /// The declaration modifier name.\n    public let name: String\n\n    /// The modifier detail, if any.\n    public let detail: String?\n\n    public init(name: String, detail: String? = nil) {\n        self.name = name\n        self.detail = detail\n    }\n\n    public var asSource: String {\n        if let detail = detail {\n            return \"\\\\(name)(\\\\(detail))\"\n        } else {\n            return name\n        }\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Modifier else {\n            results.append(\"Incorrect type <expected: Modifier, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"detail\").trackDifference(actual: self.detail, expected: castObject.detail))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.detail)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Modifier else { return false }\n        if self.name != rhs.name { return false }\n        if self.detail != rhs.detail { return false }\n        return true\n    }\n\n    // sourcery:inline:Modifier.AutoCoding\n\n            /// :nodoc:\n            required public init?(coder aDecoder: NSCoder) {\n                guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                    withVaList([\"name\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.name = name\n                self.detail = aDecoder.decode(forKey: \"detail\")\n            }\n\n            /// :nodoc:\n            public func encode(with aCoder: NSCoder) {\n                aCoder.encode(self.name, forKey: \"name\")\n                aCoder.encode(self.detail, forKey: \"detail\")\n            }\n    // sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"ParserResultsComposed.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\ninternal struct ParserResultsComposed {\n    private(set) var typeMap = [String: Type]()\n    private(set) var modules = [String: [String: Type]]()\n    private(set) var types = [Type]()\n\n    let parsedTypes: [Type]\n    let functions: [SourceryMethod]\n    let resolvedTypealiases: [String: Typealias]\n    let associatedTypes: [String: AssociatedType]\n    let unresolvedTypealiases: [String: Typealias]\n\n    init(parserResult: FileParserResult) {\n        // TODO: This logic should really be more complicated\n        // For any resolution we need to be looking at accessLevel and module boundaries\n        // e.g. there might be a typealias `private typealias Something = MyType` in one module and same name in another with public modifier, one could be accessed and the other could not\n        self.functions = parserResult.functions\n        let aliases = Self.typealiases(parserResult)\n        resolvedTypealiases = aliases.resolved\n        unresolvedTypealiases = aliases.unresolved\n        associatedTypes = Self.extractAssociatedTypes(parserResult)\n        parsedTypes = parserResult.types\n\n        var moduleAndTypeNameCollisions: Set<String> = []\n\n        for type in parsedTypes where !type.isExtension && type.parent == nil {\n            if let module = type.module, type.localName == module {\n                moduleAndTypeNameCollisions.insert(module)\n            }\n        }\n\n        // set definedInType for all methods and variables\n        parsedTypes\n            .forEach { type in\n                type.variables.forEach { $0.definedInType = type }\n                type.methods.forEach { $0.definedInType = type }\n                type.subscripts.forEach { $0.definedInType = type }\n            }\n\n        // map all known types to their names\n\n        for type in parsedTypes where !type.isExtension && type.parent == nil {\n            let name = type.name\n            // If a type name has the `<module>.` prefix, and the type `<module>.<module>` is undefined, we can safely remove the `<module>.` prefix\n            if let module = type.module, name.hasPrefix(module), name.dropFirst(module.count).hasPrefix(\".\"), !moduleAndTypeNameCollisions.contains(module) {\n                type.localName.removeFirst(module.count + 1)\n            }\n        }\n\n        for type in parsedTypes where !type.isExtension {\n            typeMap[type.globalName] = type\n            if let module = type.module {\n                var typesByModules = modules[module, default: [:]]\n                typesByModules[type.name] = type\n                modules[module] = typesByModules\n            }\n        }\n\n        /// Resolve typealiases\n        let typealiases = Array(unresolvedTypealiases.values)\n        typealiases.forEach { alias in\n            alias.type = resolveType(typeName: alias.typeName, containingType: alias.parent)\n        }\n\n        /// Map associated types\n        associatedTypes.forEach {\n            if let globalName = $0.value.type?.globalName,\n               let type = typeMap[globalName] {\n                typeMap[$0.key] = type\n            } else {\n                typeMap[$0.key] = $0.value.type\n            }\n        }\n\n        types = unifyTypes()\n    }\n\n    mutating private func resolveExtensionOfNestedType(_ type: Type) {\n        var components = type.localName.components(separatedBy: \".\")\n        let rootName: String\n        if type.parent != nil, let module = type.module {\n            rootName = module\n        } else {\n            rootName = components.removeFirst()\n        }\n        if let moduleTypes = modules[rootName], let baseType = moduleTypes[components.joined(separator: \".\")] ?? moduleTypes[type.localName] {\n            type.localName = baseType.localName\n            type.module = baseType.module\n            type.parent = baseType.parent\n        } else {\n            for _import in type.imports {\n                let parentKey = \"\\\\(rootName).\\\\(components.joined(separator: \".\"))\"\n                let parentKeyFull = \"\\\\(_import.moduleName).\\\\(parentKey)\"\n                if let moduleTypes = modules[_import.moduleName], let baseType = moduleTypes[parentKey] ?? moduleTypes[parentKeyFull] {\n                    type.localName = baseType.localName\n                    type.module = baseType.module\n                    type.parent = baseType.parent\n                    return\n                }\n            }\n        }\n        // Parent extensions should always be processed before `type`, as this affects the globalName of `type`.\n        for parent in type.parentTypes where parent.isExtension && parent.localName.contains(\".\") {\n            let oldName = parent.globalName\n            resolveExtensionOfNestedType(parent)\n            if oldName != parent.globalName {\n                rewriteChildren(of: parent)\n            }\n        }\n    }\n\n    // if it had contained types, they might have been fully defined and so their name has to be noted in uniques\n    private mutating func rewriteChildren(of type: Type) {\n        // child is never an extension so no need to check\n        for child in type.containedTypes {\n            typeMap[child.globalName] = child\n            rewriteChildren(of: child)\n        }\n    }\n\n    private mutating func unifyTypes() -> [Type] {\n        /// Resolve actual names of extensions, as they could have been done on typealias and note updated child names in uniques if needed\n        parsedTypes\n            .filter { $0.isExtension }\n            .forEach { (type: Type) in\n                let oldName = type.globalName\n\n                if type.localName.contains(\".\") {\n                    resolveExtensionOfNestedType(type)\n                } else if let resolved = resolveGlobalName(for: oldName, containingType: type.parent, unique: typeMap, modules: modules, typealiases: resolvedTypealiases, associatedTypes: associatedTypes)?.name {\n                    var moduleName: String = \"\"\n                    if let module = type.module {\n                        moduleName = \"\\\\(module).\"\n                    }\n                    type.localName = resolved.replacingOccurrences(of: moduleName, with: \"\")\n                }\n\n                // nothing left to do\n                guard oldName != type.globalName else {\n                    return\n                }\n                rewriteChildren(of: type)\n            }\n\n        // extend all types with their extensions\n        parsedTypes.forEach { type in\n            let inheritedTypes: [[String]] = type.inheritedTypes.compactMap { inheritedName in\n                if let resolvedGlobalName = resolveGlobalName(for: inheritedName, containingType: type.parent, unique: typeMap, modules: modules, typealiases: resolvedTypealiases, associatedTypes: associatedTypes)?.name {\n                    return [resolvedGlobalName]\n                }\n                if let baseType = Composer.findBaseType(for: type, name: inheritedName, typesByName: typeMap) {\n                    if let composed = baseType as? ProtocolComposition, let composedTypes = composed.composedTypes {\n                        // ignore inheritedTypes when it is a `ProtocolComposition` and composedType is a protocol\n                        var combinedTypes = composedTypes.map { $0.globalName }\n                        combinedTypes.append(baseType.globalName)\n                        return combinedTypes\n                    }\n                }\n                return [inheritedName]\n            }\n            type.inheritedTypes = inheritedTypes.flatMap { $0 }\n            let uniqueType: Type?\n            if let mappedType = typeMap[type.globalName] {\n                // this check will only fail on an extension?\n                uniqueType = mappedType\n            } else if let composedNameType = typeFromComposedName(type.name, modules: modules) {\n                // this can happen for an extension on unknown type, this case should probably be handled by the inferTypeNameFromModules\n                uniqueType = composedNameType\n            } else {\n                uniqueType = inferTypeNameFromModules(from: type.localName, containedInType: type.parent, uniqueTypes: typeMap, modules: modules).flatMap { typeMap[$0] }\n            }\n            guard let current = uniqueType else {\n                assert(type.isExtension, \"Type \\\\(type.globalName) should be extension\")\n\n                // for unknown types we still store their extensions but mark them as unknown\n                type.isUnknownExtension = true\n                if let existingType = typeMap[type.globalName] {\n                    existingType.extend(type)\n                    typeMap[type.globalName] = existingType\n                } else {\n                    typeMap[type.globalName] = type\n                }\n\n                let inheritanceClause = type.inheritedTypes.isEmpty ? \"\" :\n                    \": \\\\(type.inheritedTypes.joined(separator: \", \"))\"\n\n                Log.astWarning(\"Found \\\\\"extension \\\\(type.name)\\\\(inheritanceClause)\\\\\" of type for which there is no original type declaration information.\")\n                return\n            }\n\n            if current == type { return }\n\n            current.extend(type)\n            typeMap[current.globalName] = current\n        }\n\n        let values = typeMap.values\n        var processed = Set<String>(minimumCapacity: values.count)\n        return typeMap.values.filter({\n            let name = $0.globalName\n            let wasProcessed = processed.contains(name)\n            processed.insert(name)\n            return !wasProcessed\n        })\n    }\n\n    // extract associated types from all types and add them to types\n    private static func extractAssociatedTypes(_ parserResult: FileParserResult) -> [String: AssociatedType] {\n        parserResult.types\n            .compactMap { $0 as? SourceryProtocol }\n            .map { $0.associatedTypes }\n            .flatMap { $0 }.reduce(into: [:]) { $0[$1.key] = $1.value }\n    }\n\n    /// returns typealiases map to their full names, with `resolved` removing intermediate\n    /// typealises and `unresolved` including typealiases that reference other typealiases.\n    private static func typealiases(_ parserResult: FileParserResult) -> (resolved: [String: Typealias], unresolved: [String: Typealias]) {\n        var typealiasesByNames = [String: Typealias]()\n        parserResult.typealiases.forEach { typealiasesByNames[$0.name] = $0 }\n        parserResult.types.forEach { type in\n            type.typealiases.forEach({ (_, alias) in\n                // TODO: should I deal with the fact that alias.name depends on type name but typenames might be updated later on\n                // maybe just handle non extension case here and extension aliases after resolving them?\n                typealiasesByNames[alias.name] = alias\n            })\n        }\n\n        let unresolved = typealiasesByNames\n\n        // ! if a typealias leads to another typealias, follow through and replace with final type\n        typealiasesByNames.forEach { _, alias in\n            var aliasNamesToReplace = [alias.name]\n            var finalAlias = alias\n            while let targetAlias = typealiasesByNames[finalAlias.typeName.name] {\n                aliasNamesToReplace.append(targetAlias.name)\n                finalAlias = targetAlias\n            }\n\n            // ! replace all keys\n            aliasNamesToReplace.forEach { typealiasesByNames[$0] = finalAlias }\n        }\n\n        return (resolved: typealiasesByNames, unresolved: unresolved)\n    }\n\n    /// Resolves type identifier for name\n    func resolveGlobalName(\n        for type: String,\n        containingType: Type? = nil,\n        unique: [String: Type]? = nil,\n        modules: [String: [String: Type]],\n        typealiases: [String: Typealias],\n        associatedTypes: [String: AssociatedType]\n    ) -> (name: String, typealias: Typealias?)? {\n        // if the type exists for this name and isn't an extension just return it's name\n        // if it's extension we need to check if there aren't other options TODO: verify\n        if let realType = unique?[type], realType.isExtension == false {\n            return (name: realType.globalName, typealias: nil)\n        }\n\n        if let alias = typealiases[type] {\n            return (name: alias.type?.globalName ?? alias.typeName.name, typealias: alias)\n        }\n\n        if let associatedType = associatedTypes[type],\n            let actualType = associatedType.type\n        {\n            let typeName = associatedType.typeName ?? TypeName(name: actualType.name)\n            return (name: actualType.globalName, typealias: Typealias(aliasName: type, typeName: typeName))\n        }\n\n        if let containingType = containingType {\n            if type == \"Self\" {\n                return (name: containingType.globalName, typealias: nil)\n            }\n\n            var currentContainer: Type? = containingType\n            while currentContainer != nil, let parentName = currentContainer?.globalName {\n                /// TODO: no parent for sure?\n                /// manually walk the containment tree\n                if let name = resolveGlobalName(for: \"\\\\(parentName).\\\\(type)\", containingType: nil, unique: unique, modules: modules, typealiases: typealiases, associatedTypes: associatedTypes) {\n                    return name\n                }\n\n                currentContainer = currentContainer?.parent\n            }\n\n//            if let name = resolveGlobalName(for: \"\\\\(containingType.globalName).\\\\(type)\", containingType: containingType.parent, unique: unique, modules: modules, typealiases: typealiases) {\n//                return name\n//            }\n\n//             last check it's via module\n//            if let module = containingType.module, let name = resolveGlobalName(for: \"\\\\(module).\\\\(type)\", containingType: nil, unique: unique, modules: modules, typealiases: typealiases) {\n//                return name\n//            }\n        }\n\n        // TODO: is this needed?\n        if let inferred = inferTypeNameFromModules(from: type, containedInType: containingType, uniqueTypes: unique ?? [:], modules: modules) {\n            return (name: inferred, typealias: nil)\n        }\n\n        return typeFromComposedName(type, modules: modules).map { (name: $0.globalName, typealias: nil) }\n    }\n\n    private func inferTypeNameFromModules(from typeIdentifier: String, containedInType: Type?, uniqueTypes: [String: Type], modules: [String: [String: Type]]) -> String? {\n        func fullName(for module: String) -> String {\n            \"\\\\(module).\\\\(typeIdentifier)\"\n        }\n\n        func type(for module: String) -> Type? {\n            return modules[module]?[typeIdentifier]\n        }\n\n        func ambiguousErrorMessage(from types: [Type]) -> String? {\n            Log.astWarning(\"Ambiguous type \\\\(typeIdentifier), found \\\\(types.map { $0.globalName }.joined(separator: \", \")). Specify module name at declaration site to disambiguate.\")\n            return nil\n        }\n\n        let explicitModulesAtDeclarationSite: [String] = [\n            containedInType?.module.map { [$0] } ?? [],    // main module for this typename\n            containedInType?.imports.map { $0.moduleName } ?? []    // imported modules\n        ]\n            .flatMap { $0 }\n\n        let remainingModules = Set(modules.keys).subtracting(explicitModulesAtDeclarationSite)\n\n        /// We need to check whether we can find type in one of the modules but we need to be careful to avoid amibiguity\n        /// First checking explicit modules available at declaration site (so source module + all imported ones)\n        /// If there is no ambigiuity there we can assume that module will be resolved by the compiler\n        /// If that's not the case we look after remaining modules in the application and if the typename has no ambigiuity we use that\n        /// But if there is more than 1 typename duplication across modules we have no way to resolve what is the compiler going to use so we fail\n        let moduleSetsToCheck: [[String]] = [\n            explicitModulesAtDeclarationSite,\n            Array(remainingModules)\n        ]\n\n        for modules in moduleSetsToCheck {\n            let possibleTypes = modules\n                .compactMap { type(for: $0) }\n\n            if possibleTypes.count > 1 {\n                return ambiguousErrorMessage(from: possibleTypes)\n            }\n\n            if let type = possibleTypes.first {\n                return type.globalName\n            }\n        }\n\n        // as last result for unknown types / extensions\n        // try extracting type from unique array\n        if let module = containedInType?.module {\n            return uniqueTypes[fullName(for: module)]?.globalName\n        }\n        return nil\n    }\n\n    func typeFromComposedName(_ name: String, modules: [String: [String: Type]]) -> Type? {\n        guard name.contains(\".\") else { return nil }\n        let nameComponents = name.components(separatedBy: \".\")\n        let moduleName = nameComponents[0]\n        let typeName = nameComponents.suffix(from: 1).joined(separator: \".\")\n        return modules[moduleName]?[typeName]\n    }\n\n    func resolveType(typeName: TypeName, containingType: Type?, method: Method? = nil) -> Type? {\n        let resolveTypeWithName = { (typeName: TypeName) -> Type? in\n            return self.resolveType(typeName: typeName, containingType: containingType)\n        }\n\n        let unique = typeMap\n\n        if let name = typeName.actualTypeName {\n            let resolvedIdentifier = name.generic?.name ?? name.unwrappedTypeName\n            return unique[resolvedIdentifier]\n        }\n\n        let retrievedName = actualTypeName(for: typeName, containingType: containingType)\n        let lookupName = retrievedName ?? typeName\n\n        if let tuple = lookupName.tuple {\n            var needsUpdate = false\n\n            tuple.elements.forEach { tupleElement in\n                tupleElement.type = resolveTypeWithName(tupleElement.typeName)\n                if tupleElement.typeName.actualTypeName != nil {\n                    needsUpdate = true\n                }\n            }\n\n            if needsUpdate || retrievedName != nil {\n                let tupleCopy = TupleType(name: tuple.name, elements: tuple.elements)\n                tupleCopy.elements.forEach {\n                    $0.typeName = $0.actualTypeName ?? $0.typeName\n                    $0.typeName.actualTypeName = nil\n                }\n                tupleCopy.name = tupleCopy.elements.asTypeName\n\n                typeName.tuple = tupleCopy // TODO: really don't like this old behaviour\n                typeName.actualTypeName = TypeName(name: tupleCopy.name,\n                                                   isOptional: typeName.isOptional,\n                                                   isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                                                   tuple: tupleCopy,\n                                                   array: lookupName.array,\n                                                   dictionary: lookupName.dictionary,\n                                                   closure: lookupName.closure,\n                                                   set: lookupName.set,\n                                                   generic: lookupName.generic\n                )\n            }\n            return nil\n        } else\n        if let array = lookupName.array {\n            array.elementType = resolveTypeWithName(array.elementTypeName)\n\n            if array.elementTypeName.actualTypeName != nil || retrievedName != nil || array.elementType != nil {\n                let array = ArrayType(name: array.name, elementTypeName: array.elementTypeName, elementType: array.elementType)\n                array.elementTypeName = array.elementTypeName.actualTypeName ?? array.elementTypeName\n                array.elementTypeName.actualTypeName = nil\n                array.name = array.asSource\n                typeName.array = array // TODO: really don't like this old behaviour\n                typeName.generic = array.asGeneric // TODO: really don't like this old behaviour\n\n                typeName.actualTypeName = TypeName(name: array.name,\n                                                   isOptional: typeName.isOptional,\n                                                   isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                                                   tuple: lookupName.tuple,\n                                                   array: array,\n                                                   dictionary: lookupName.dictionary,\n                                                   closure: lookupName.closure,\n                                                   set: lookupName.set,\n                                                   generic: typeName.generic\n                )\n            }\n        } else\n        if let dictionary = lookupName.dictionary {\n            dictionary.keyType = resolveTypeWithName(dictionary.keyTypeName)\n            dictionary.valueType = resolveTypeWithName(dictionary.valueTypeName)\n\n            if dictionary.keyTypeName.actualTypeName != nil || dictionary.valueTypeName.actualTypeName != nil || retrievedName != nil {\n                let dictionary = DictionaryType(name: dictionary.name, valueTypeName: dictionary.valueTypeName, valueType: dictionary.valueType, keyTypeName: dictionary.keyTypeName, keyType: dictionary.keyType)\n                dictionary.keyTypeName = dictionary.keyTypeName.actualTypeName ?? dictionary.keyTypeName\n                dictionary.keyTypeName.actualTypeName = nil // TODO: really don't like this old behaviour\n                dictionary.valueTypeName = dictionary.valueTypeName.actualTypeName ?? dictionary.valueTypeName\n                dictionary.valueTypeName.actualTypeName = nil // TODO: really don't like this old behaviour\n\n                dictionary.name = dictionary.asSource\n\n                typeName.dictionary = dictionary // TODO: really don't like this old behaviour\n                typeName.generic = dictionary.asGeneric // TODO: really don't like this old behaviour\n\n                typeName.actualTypeName = TypeName(name: dictionary.asSource,\n                                                   isOptional: typeName.isOptional,\n                                                   isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                                                   tuple: lookupName.tuple,\n                                                   array: lookupName.array,\n                                                   dictionary: dictionary,\n                                                   closure: lookupName.closure,\n                                                   set: lookupName.set,\n                                                   generic: dictionary.asGeneric\n                )\n            }\n        } else\n        if let closure = lookupName.closure {\n            var needsUpdate = false\n\n            closure.returnType = resolveTypeWithName(closure.returnTypeName)\n            closure.parameters.forEach { parameter in\n                parameter.type = resolveTypeWithName(parameter.typeName)\n                if parameter.typeName.actualTypeName != nil {\n                    needsUpdate = true\n                }\n            }\n\n            if closure.returnTypeName.actualTypeName != nil || needsUpdate || retrievedName != nil {\n                typeName.closure = closure // TODO: really don't like this old behaviour\n\n                typeName.actualTypeName = TypeName(name: closure.asSource,\n                                                   isOptional: typeName.isOptional,\n                                                   isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                                                   tuple: lookupName.tuple,\n                                                   array: lookupName.array,\n                                                   dictionary: lookupName.dictionary,\n                                                   closure: closure,\n                                                   set: lookupName.set,\n                                                   generic: lookupName.generic\n                )\n            }\n\n            return nil\n        } else\n        if let generic = lookupName.generic {\n            var needsUpdate = false\n            generic.typeParameters.forEach { parameter in\n                // Detect if the generic type is local to the method\n                if let method {\n                    for genericParameter in method.genericParameters where parameter.typeName.name == genericParameter.name {\n                        return\n                    }\n                }\n\n                parameter.type = resolveTypeWithName(parameter.typeName)\n                if parameter.typeName.actualTypeName != nil {\n                    needsUpdate = true\n                }\n            }\n\n            if needsUpdate || retrievedName != nil {\n                let generic = GenericType(name: generic.name, typeParameters: generic.typeParameters)\n                generic.typeParameters.forEach {\n                    $0.typeName = $0.typeName.actualTypeName ?? $0.typeName\n                    $0.typeName.actualTypeName = nil // TODO: really don't like this old behaviour\n                }\n                typeName.generic = generic // TODO: really don't like this old behaviour\n                typeName.array = lookupName.array // TODO: really don't like this old behaviour\n                typeName.dictionary = lookupName.dictionary // TODO: really don't like this old behaviour\n\n                let params = generic.typeParameters.map { $0.typeName.asSource }.joined(separator: \", \")\n\n                typeName.actualTypeName = TypeName(name: \"\\\\(generic.name)<\\\\(params)>\",\n                                                   isOptional: typeName.isOptional,\n                                                   isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                                                   tuple: lookupName.tuple,\n                                                   array: lookupName.array, // TODO: asArray\n                                                   dictionary: lookupName.dictionary, // TODO: asDictionary\n                                                   closure: lookupName.closure,\n                                                   set: lookupName.set,\n                                                   generic: generic\n                )\n            }\n        }\n\n        if let aliasedName = (typeName.actualTypeName ?? retrievedName), aliasedName.unwrappedTypeName != typeName.unwrappedTypeName {\n            typeName.actualTypeName = aliasedName\n        }\n\n        let hasGenericRequirements = containingType?.genericRequirements.isEmpty == false\n        || (method != nil && method?.genericRequirements.isEmpty == false)\n\n        if hasGenericRequirements {\n            // we should consider if we are looking up return type of a method with generic constraints\n            // where `typeName` passed would include `... where ...` suffix\n            let typeNameForLookup = typeName.name.split(separator: \" \").first!\n            let genericRequirements: [GenericRequirement]\n            if let requirements = containingType?.genericRequirements, !requirements.isEmpty {\n                genericRequirements = requirements\n            } else {\n                genericRequirements = method?.genericRequirements ?? []\n            }\n            let relevantRequirements = genericRequirements.filter {\n                // matched type against a generic requirement name\n                // thus type should be replaced with a protocol composition\n                $0.leftType.name == typeNameForLookup\n            }\n            if relevantRequirements.count > 1 {\n                // compose protocols into `ProtocolComposition` and generate TypeName\n                var implements: [String: Type] = [:]\n                relevantRequirements.forEach {\n                    implements[$0.rightType.typeName.name] = $0.rightType.type\n                }\n                let composedProtocols = ProtocolComposition(\n                    inheritedTypes: relevantRequirements.map { $0.rightType.typeName.unwrappedTypeName },\n                    isGeneric: true,\n                    composedTypes: relevantRequirements.compactMap { $0.rightType.type },\n                    implements: implements\n                )\n                typeName.actualTypeName = TypeName(name: \"(\\\\(relevantRequirements.map { $0.rightType.typeName.unwrappedTypeName }.joined(separator: \" & \")))\", isProtocolComposition: true)\n                return composedProtocols\n            } else if let protocolRequirement = relevantRequirements.first {\n                // create TypeName off a single generic's protocol requirement\n                typeName.actualTypeName = TypeName(name: \"(\\\\(protocolRequirement.rightType.typeName))\")\n                return protocolRequirement.rightType.type\n            }\n        }\n\n        // try to peek into typealias, maybe part of the typeName is a composed identifier from a type and typealias\n        // i.e.\n        // enum Module {\n        //   typealias ID = MyView\n        // }\n        // class MyView {\n        //   class ID: String {}\n        // }\n        //\n        // let variable: Module.ID.ID // should be resolved as MyView.ID type\n        let finalLookup = typeName.actualTypeName ?? typeName\n        var resolvedIdentifier = finalLookup.generic?.name ?? finalLookup.unwrappedTypeName\n        if let type = unique[resolvedIdentifier] {\n            return type\n        }\n        \n        for alias in resolvedTypealiases {\n            /// iteratively replace all typealiases from the resolvedIdentifier to get to the actual type name requested\n            if resolvedIdentifier.contains(alias.value.name), let range = resolvedIdentifier.range(of: alias.value.name) {\n                resolvedIdentifier = resolvedIdentifier.replacingCharacters(in: range, with: alias.value.typeName.name)\n            }\n        }\n        // should we cache resolved typenames?\n        if unique[resolvedIdentifier] == nil {\n            // peek into typealiases, if any of them contain the same typeName\n            // this is done after the initial attempt in order to prioritise local (recognized) types first\n            // before even trying to substitute the requested type with any typealias\n            for alias in resolvedTypealiases {\n                /// iteratively replace all typealiases from the resolvedIdentifier to get to the actual type name requested,\n                /// ignoring namespacing\n                if resolvedIdentifier == alias.value.aliasName {\n                    resolvedIdentifier = alias.value.typeName.name\n                    typeName.actualTypeName = alias.value.typeName\n                    break\n                }\n            }\n        }\n\n        if let associatedType = associatedTypes[resolvedIdentifier] {\n            return associatedType.type\n        }\n\n        return unique[resolvedIdentifier] ?? unique[typeName.name]\n    }\n\n    private func actualTypeName(for typeName: TypeName,\n                                containingType: Type? = nil) -> TypeName? {\n        let unique = typeMap\n        let typealiases = resolvedTypealiases\n        let associatedTypes = associatedTypes\n\n        var unwrapped = typeName.unwrappedTypeName\n        if let generic = typeName.generic {\n            unwrapped = generic.name\n        } else if let type = associatedTypes[unwrapped] {\n            unwrapped = type.name\n        }\n\n        guard let aliased = resolveGlobalName(for: unwrapped, containingType: containingType, unique: unique, modules: modules, typealiases: typealiases, associatedTypes: associatedTypes) else {\n            return nil\n        }\n\n        /// TODO: verify\n        let generic = typeName.generic.map { GenericType(name: $0.name, typeParameters: $0.typeParameters) }\n        generic?.name = aliased.name\n        let dictionary = typeName.dictionary.map { DictionaryType(name: $0.name, valueTypeName: $0.valueTypeName, valueType: $0.valueType, keyTypeName: $0.keyTypeName, keyType: $0.keyType) }\n        dictionary?.name = aliased.name\n        let array = typeName.array.map { ArrayType(name: $0.name, elementTypeName: $0.elementTypeName, elementType: $0.elementType) }\n        array?.name = aliased.name\n        let set = typeName.set.map { SetType(name: $0.name, elementTypeName: $0.elementTypeName, elementType: $0.elementType) }\n        set?.name = aliased.name\n\n        return TypeName(name: aliased.name,\n                        isOptional: typeName.isOptional,\n                        isImplicitlyUnwrappedOptional: typeName.isImplicitlyUnwrappedOptional,\n                        tuple: aliased.typealias?.typeName.tuple ?? typeName.tuple, // TODO: verify\n                        array: aliased.typealias?.typeName.array ?? array,\n                        dictionary: aliased.typealias?.typeName.dictionary ?? dictionary,\n                        closure: aliased.typealias?.typeName.closure ?? typeName.closure,\n                        set: aliased.typealias?.typeName.set ?? set,\n                        generic: aliased.typealias?.typeName.generic ?? generic\n        )\n    }\n\n}\n\n\"\"\"),\n    .init(name: \"PhantomProtocols.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 23/01/2017.\n// Copyright (c) 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n/// Phantom protocol for diffing\nprotocol AutoDiffable {}\n\n/// Phantom protocol for equality\nprotocol AutoEquatable {}\n\n/// Phantom protocol for equality\nprotocol AutoDescription {}\n\n/// Phantom protocol for NSCoding\nprotocol AutoCoding {}\n\nprotocol AutoJSExport {}\n\n/// Phantom protocol for NSCoding, Equatable and Diffable\nprotocol SourceryModelWithoutDescription: AutoDiffable, AutoEquatable, AutoCoding, AutoJSExport {}\n\nprotocol SourceryModel: SourceryModelWithoutDescription, AutoDescription {}\n\n\"\"\"),\n    .init(name: \"Protocol.swift\", content:\n\"\"\"\n//\n//  Protocol.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zablocki on 09/12/2016.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n#if canImport(ObjectiveC)\n\n/// :nodoc:\npublic typealias SourceryProtocol = Protocol\n\n/// Describes Swift protocol\n@objcMembers\npublic final class Protocol: Type {\n\n    // sourcery: skipJSExport\n    public class var kind: String { return \"protocol\" }\n\n    /// Returns \"protocol\"\n    public override var kind: String { Self.kind }\n\n    /// list of all declared associated types with their names as keys\n    public var associatedTypes: [String: AssociatedType] {\n        didSet {\n            isGeneric = !associatedTypes.isEmpty || !genericRequirements.isEmpty\n        }\n    }\n\n    // sourcery: skipCoding\n    /// list of generic requirements\n    public override var genericRequirements: [GenericRequirement] {\n        didSet {\n            isGeneric = !associatedTypes.isEmpty || !genericRequirements.isEmpty\n        }\n    }\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                parent: Type? = nil,\n                accessLevel: AccessLevel = .internal,\n                isExtension: Bool = false,\n                variables: [Variable] = [],\n                methods: [Method] = [],\n                subscripts: [Subscript] = [],\n                inheritedTypes: [String] = [],\n                containedTypes: [Type] = [],\n                typealiases: [Typealias] = [],\n                associatedTypes: [String: AssociatedType] = [:],\n                genericRequirements: [GenericRequirement] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                implements: [String: Type] = [:],\n                kind: String = Protocol.kind) {\n        self.associatedTypes = associatedTypes\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            genericRequirements: genericRequirements,\n            attributes: attributes,\n            modifiers: modifiers,\n            annotations: annotations,\n            documentation: documentation,\n            isGeneric: !associatedTypes.isEmpty || !genericRequirements.isEmpty,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string.append(\", \")\n        string.append(\"kind = \\\\(String(describing: self.kind)), \")\n        string.append(\"associatedTypes = \\\\(String(describing: self.associatedTypes)), \")\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Protocol else {\n            results.append(\"Incorrect type <expected: Protocol, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"associatedTypes\").trackDifference(actual: self.associatedTypes, expected: castObject.associatedTypes))\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.associatedTypes)\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Protocol else { return false }\n        if self.associatedTypes != rhs.associatedTypes { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Protocol.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let associatedTypes: [String: AssociatedType] = aDecoder.decode(forKey: \"associatedTypes\") else { \n                withVaList([\"associatedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.associatedTypes = associatedTypes\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n            aCoder.encode(self.associatedTypes, forKey: \"associatedTypes\")\n        }\n// sourcery:end\n}\n#endif\n\"\"\"),\n    .init(name: \"ProtocolComposition.swift\", content:\n\"\"\"\n// Created by eric_horacek on 2/12/20.\n// Copyright © 2020 Airbnb Inc. All rights reserved.\n\nimport Foundation\n\n/// Describes a Swift [protocol composition](https://docs.swift.org/swift-book/ReferenceManual/Types.html#ID454).\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class ProtocolComposition: Type {\n\n    // sourcery: skipJSExport\n    public class var kind: String { return \"protocolComposition\" }\n\n    /// Returns \"protocolComposition\"\n    public override var kind: String { Self.kind }\n\n    /// The names of the types composed to form this composition\n    public let composedTypeNames: [TypeName]\n\n    // sourcery: skipEquality, skipDescription\n    /// The types composed to form this composition, if known\n    public var composedTypes: [Type]?\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                parent: Type? = nil,\n                accessLevel: AccessLevel = .internal,\n                isExtension: Bool = false,\n                variables: [Variable] = [],\n                methods: [Method] = [],\n                subscripts: [Subscript] = [],\n                inheritedTypes: [String] = [],\n                containedTypes: [Type] = [],\n                typealiases: [Typealias] = [],\n                attributes: AttributeList = [:],\n                annotations: [String: NSObject] = [:],\n                isGeneric: Bool = false,\n                composedTypeNames: [TypeName] = [],\n                composedTypes: [Type]? = nil,\n                implements: [String: Type] = [:],\n                kind: String = ProtocolComposition.kind) {\n        self.composedTypeNames = composedTypeNames\n        self.composedTypes = composedTypes\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            annotations: annotations,\n            isGeneric: isGeneric,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string += \", \"\n        string += \"kind = \\\\(String(describing: self.kind)), \"\n        string += \"composedTypeNames = \\\\(String(describing: self.composedTypeNames))\"\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? ProtocolComposition else {\n            results.append(\"Incorrect type <expected: ProtocolComposition, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"composedTypeNames\").trackDifference(actual: self.composedTypeNames, expected: castObject.composedTypeNames))\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.composedTypeNames)\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? ProtocolComposition else { return false }\n        if self.composedTypeNames != rhs.composedTypeNames { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:ProtocolComposition.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let composedTypeNames: [TypeName] = aDecoder.decode(forKey: \"composedTypeNames\") else { \n                withVaList([\"composedTypeNames\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.composedTypeNames = composedTypeNames\n            self.composedTypes = aDecoder.decode(forKey: \"composedTypes\")\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n            aCoder.encode(self.composedTypeNames, forKey: \"composedTypeNames\")\n            aCoder.encode(self.composedTypes, forKey: \"composedTypes\")\n        }\n// sourcery:end\n\n}\n\n\"\"\"),\n    .init(name: \"Set.swift\", content:\n\"\"\"\nimport Foundation\n\n/// Describes set type\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class SetType: NSObject, SourceryModel, Diffable {\n    /// Type name used in declaration\n    public var name: String\n\n    /// Array element type name\n    public var elementTypeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Array element type, if known\n    public var elementType: Type?\n\n    /// :nodoc:\n    public init(name: String, elementTypeName: TypeName, elementType: Type? = nil) {\n        self.name = name\n        self.elementTypeName = elementTypeName\n        self.elementType = elementType\n    }\n\n    /// Returns array as generic type\n    public var asGeneric: GenericType {\n        GenericType(name: \"Set\", typeParameters: [\n            .init(typeName: elementTypeName)\n        ])\n    }\n\n    public var asSource: String {\n        \"[\\\\(elementTypeName.asSource)]\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"elementTypeName = \\\\(String(describing: self.elementTypeName)), \")\n        string.append(\"asGeneric = \\\\(String(describing: self.asGeneric)), \")\n        string.append(\"asSource = \\\\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? SetType else {\n            results.append(\"Incorrect type <expected: SetType, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"elementTypeName\").trackDifference(actual: self.elementTypeName, expected: castObject.elementTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.elementTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? SetType else { return false }\n        if self.name != rhs.name { return false }\n        if self.elementTypeName != rhs.elementTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:SetType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let elementTypeName: TypeName = aDecoder.decode(forKey: \"elementTypeName\") else { \n                withVaList([\"elementTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.elementTypeName = elementTypeName\n            self.elementType = aDecoder.decode(forKey: \"elementType\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.elementTypeName, forKey: \"elementTypeName\")\n            aCoder.encode(self.elementType, forKey: \"elementType\")\n        }\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"Struct.swift\", content:\n\"\"\"\n//\n//  Struct.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zablocki on 13/09/2016.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n// sourcery: skipDescription\n/// Describes Swift struct\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class Struct: Type {\n\n    // sourcery: skipJSExport\n    public class var kind: String { return \"struct\" }\n\n    /// Returns \"struct\"\n    public override var kind: String { Self.kind }\n\n    /// :nodoc:\n    public override init(name: String = \"\",\n                         parent: Type? = nil,\n                         accessLevel: AccessLevel = .internal,\n                         isExtension: Bool = false,\n                         variables: [Variable] = [],\n                         methods: [Method] = [],\n                         subscripts: [Subscript] = [],\n                         inheritedTypes: [String] = [],\n                         containedTypes: [Type] = [],\n                         typealiases: [Typealias] = [],\n                         genericRequirements: [GenericRequirement] = [],\n                         attributes: AttributeList = [:],\n                         modifiers: [SourceryModifier] = [],\n                         annotations: [String: NSObject] = [:],\n                         documentation: [String] = [],\n                         isGeneric: Bool = false,\n                         implements: [String: Type] = [:],\n                         kind: String = Struct.kind) {\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            genericRequirements: genericRequirements,\n            attributes: attributes,\n            modifiers: modifiers,\n            annotations: annotations,\n            documentation: documentation,\n            isGeneric: isGeneric,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string += \", \"\n        string += \"kind = \\\\(String(describing: self.kind))\"\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Struct else {\n            results.append(\"Incorrect type <expected: Struct, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Struct else { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Struct.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n        }\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"TemplateContext.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n/// :nodoc:\n// sourcery: skipCoding\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class TemplateContext: NSObject, SourceryModel, NSCoding, Diffable {\n    // sourcery: skipJSExport\n    public let parserResult: FileParserResult?\n    public let functions: [SourceryMethod]\n    public let types: Types\n    public let argument: [String: NSObject]\n\n    // sourcery: skipDescription\n    public var type: [String: Type] {\n        return types.typesByName\n    }\n\n    public init(parserResult: FileParserResult?, types: Types, functions: [SourceryMethod], arguments: [String: NSObject]) {\n        self.parserResult = parserResult\n        self.types = types\n        self.functions = functions\n        self.argument = arguments\n    }\n\n    /// :nodoc:\n    required public init?(coder aDecoder: NSCoder) {\n        guard let parserResult: FileParserResult = aDecoder.decode(forKey: \"parserResult\") else { \n                withVaList([\"parserResult\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found. FileParserResults are required for template context that needs persisting.\", arguments: arguments)\n                }\n                fatalError()\n             }\n        guard let argument: [String: NSObject] = aDecoder.decode(forKey: \"argument\") else { \n                withVaList([\"argument\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }\n\n        // if we want to support multiple cycles of encode / decode we need deep copy because composer changes reference types\n        let fileParserResultCopy: FileParserResult? = nil\n//      fileParserResultCopy = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(NSKeyedArchiver.archivedData(withRootObject: parserResult)) as? FileParserResult\n\n        let composed = Composer.uniqueTypesAndFunctions(parserResult, serial: false)\n        self.types = .init(types: composed.types, typealiases: composed.typealiases)\n        self.functions = composed.functions\n\n        self.parserResult = fileParserResultCopy\n        self.argument = argument\n    }\n\n    /// :nodoc:\n    public func encode(with aCoder: NSCoder) {\n        aCoder.encode(self.parserResult, forKey: \"parserResult\")\n        aCoder.encode(self.argument, forKey: \"argument\")\n    }\n\n    public var stencilContext: [String: Any] {\n        return [\n            \"types\": types,\n            \"functions\": functions,\n            \"type\": types.typesByName,\n            \"argument\": argument\n        ]\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"parserResult = \\\\(String(describing: self.parserResult)), \")\n        string.append(\"functions = \\\\(String(describing: self.functions)), \")\n        string.append(\"types = \\\\(String(describing: self.types)), \")\n        string.append(\"argument = \\\\(String(describing: self.argument)), \")\n        string.append(\"stencilContext = \\\\(String(describing: self.stencilContext))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? TemplateContext else {\n            results.append(\"Incorrect type <expected: TemplateContext, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"parserResult\").trackDifference(actual: self.parserResult, expected: castObject.parserResult))\n        results.append(contentsOf: DiffableResult(identifier: \"functions\").trackDifference(actual: self.functions, expected: castObject.functions))\n        results.append(contentsOf: DiffableResult(identifier: \"types\").trackDifference(actual: self.types, expected: castObject.types))\n        results.append(contentsOf: DiffableResult(identifier: \"argument\").trackDifference(actual: self.argument, expected: castObject.argument))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.parserResult)\n        hasher.combine(self.functions)\n        hasher.combine(self.types)\n        hasher.combine(self.argument)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? TemplateContext else { return false }\n        if self.parserResult != rhs.parserResult { return false }\n        if self.functions != rhs.functions { return false }\n        if self.types != rhs.types { return false }\n        if self.argument != rhs.argument { return false }\n        return true\n    }\n\n    // sourcery: skipDescription, skipEquality\n    public var jsContext: [String: Any] {\n        return [\n            \"types\": [\n                \"all\": types.all,\n                \"protocols\": types.protocols,\n                \"classes\": types.classes,\n                \"structs\": types.structs,\n                \"enums\": types.enums,\n                \"extensions\": types.extensions,\n                \"based\": types.based,\n                \"inheriting\": types.inheriting,\n                \"implementing\": types.implementing,\n                \"protocolCompositions\": types.protocolCompositions,\n                \"typealiases\": types.typealiases\n            ] as [String : Any],\n            \"functions\": functions,\n            \"type\": types.typesByName,\n            \"argument\": argument\n        ]\n    }\n\n}\n\nextension ProcessInfo {\n    /// :nodoc:\n    public var context: TemplateContext! {\n        return NSKeyedUnarchiver.unarchiveObject(withFile: arguments[1]) as? TemplateContext\n    }\n}\n\n\"\"\"),\n    .init(name: \"Typealias.swift\", content:\n\"\"\"\nimport Foundation\n\n/// :nodoc:\n#if canImport(ObjectiveC)\n@objcMembers\n#endif\npublic final class Typealias: NSObject, Typed, SourceryModel, Diffable {\n    // New typealias name\n    public let aliasName: String\n\n    // Target name\n    public let typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    public var type: Type?\n\n    /// module in which this typealias was declared\n    public var module: String?\n    \n    /// Imports that existed in the file that contained this typealias declaration\n    public var imports: [Import] = []\n\n    /// typealias annotations\n    public var annotations: Annotations = [:]\n\n    /// typealias documentation\n    public var documentation: Documentation = []\n\n    // sourcery: skipEquality, skipDescription\n    public var parent: Type? {\n        didSet {\n            parentName = parent?.name\n        }\n    }\n\n    /// Type access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let accessLevel: String\n\n    var parentName: String?\n\n    public var name: String {\n        if let parentName = parent?.name {\n            return \"\\\\(module != nil ? \"\\\\(module!).\" : \"\")\\\\(parentName).\\\\(aliasName)\"\n        } else {\n            return \"\\\\(module != nil ? \"\\\\(module!).\" : \"\")\\\\(aliasName)\"\n        }\n    }\n\n    public init(aliasName: String = \"\", typeName: TypeName, accessLevel: AccessLevel = .internal, parent: Type? = nil, module: String? = nil, annotations: [String: NSObject] = [:], documentation: [String] = []) {\n        self.aliasName = aliasName\n        self.typeName = typeName\n        self.accessLevel = accessLevel.rawValue\n        self.parent = parent\n        self.parentName = parent?.name\n        self.module = module\n        self.annotations = annotations\n        self.documentation = documentation\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"aliasName = \\\\(String(describing: self.aliasName)), \")\n        string.append(\"typeName = \\\\(String(describing: self.typeName)), \")\n        string.append(\"module = \\\\(String(describing: self.module)), \")\n        string.append(\"accessLevel = \\\\(String(describing: self.accessLevel)), \")\n        string.append(\"parentName = \\\\(String(describing: self.parentName)), \")\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\\\(String(describing: self.documentation)), \")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Typealias else {\n            results.append(\"Incorrect type <expected: Typealias, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"aliasName\").trackDifference(actual: self.aliasName, expected: castObject.aliasName))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        results.append(contentsOf: DiffableResult(identifier: \"module\").trackDifference(actual: self.module, expected: castObject.module))\n        results.append(contentsOf: DiffableResult(identifier: \"accessLevel\").trackDifference(actual: self.accessLevel, expected: castObject.accessLevel))\n        results.append(contentsOf: DiffableResult(identifier: \"parentName\").trackDifference(actual: self.parentName, expected: castObject.parentName))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.aliasName)\n        hasher.combine(self.typeName)\n        hasher.combine(self.module)\n        hasher.combine(self.accessLevel)\n        hasher.combine(self.parentName)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Typealias else { return false }\n        if self.aliasName != rhs.aliasName { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.module != rhs.module { return false }\n        if self.accessLevel != rhs.accessLevel { return false }\n        if self.parentName != rhs.parentName { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.annotations != rhs.annotations { return false }\n        return true\n    }\n    \n// sourcery:inline:Typealias.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let aliasName: String = aDecoder.decode(forKey: \"aliasName\") else { \n                withVaList([\"aliasName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.aliasName = aliasName\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n            self.module = aDecoder.decode(forKey: \"module\")\n            guard let imports: [Import] = aDecoder.decode(forKey: \"imports\") else { \n                withVaList([\"imports\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.imports = imports\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            self.parent = aDecoder.decode(forKey: \"parent\")\n            guard let accessLevel: String = aDecoder.decode(forKey: \"accessLevel\") else { \n                withVaList([\"accessLevel\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.accessLevel = accessLevel\n            self.parentName = aDecoder.decode(forKey: \"parentName\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.aliasName, forKey: \"aliasName\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n            aCoder.encode(self.module, forKey: \"module\")\n            aCoder.encode(self.imports, forKey: \"imports\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.parent, forKey: \"parent\")\n            aCoder.encode(self.accessLevel, forKey: \"accessLevel\")\n            aCoder.encode(self.parentName, forKey: \"parentName\")\n        }\n// sourcery:end\n}\n\n\"\"\"),\n    .init(name: \"Typed.swift\", content:\n\"\"\"\nimport Foundation\n\n/// Descibes typed declaration, i.e. variable, method parameter, tuple element, enum case associated value\npublic protocol Typed {\n\n    // sourcery: skipEquality, skipDescription\n    /// Type, if known\n    var type: Type? { get }\n\n    // sourcery: skipEquality, skipDescription\n    /// Type name\n    var typeName: TypeName { get }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether type is optional\n    var isOptional: Bool { get }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether type is implicitly unwrapped optional\n    var isImplicitlyUnwrappedOptional: Bool { get }\n\n    // sourcery: skipEquality, skipDescription\n    /// Type name without attributes and optional type information\n    var unwrappedTypeName: String { get }\n}\n\n\"\"\"),\n    .init(name: \"AssociatedType_Linux.swift\", content:\n\"\"\"\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Describes Swift AssociatedType\npublic final class AssociatedType: NSObject, SourceryModel, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"name\":\n                return name\n            case \"typeName\":\n                return typeName\n            case \"type\":\n                return type\n            default:\n                fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }\n    }\n\n    /// Associated type name\n    public let name: String\n\n    /// Associated type type constraint name, if specified\n    public let typeName: TypeName?\n\n    // sourcery: skipEquality, skipDescription\n    /// Associated type constrained type, if known, i.e. if the type is declared in the scanned sources.\n    public var type: Type?\n\n    /// :nodoc:\n    public init(name: String, typeName: TypeName? = nil, type: Type? = nil) {\n        self.name = name\n        self.typeName = typeName\n        self.type = type\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"typeName = \\\\(String(describing: self.typeName))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? AssociatedType else {\n            results.append(\"Incorrect type <expected: AssociatedType, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? AssociatedType else { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        return true\n    }\n\n// sourcery:inline:AssociatedType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            self.typeName = aDecoder.decode(forKey: \"typeName\")\n            self.type = aDecoder.decode(forKey: \"type\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n        }\n// sourcery:end\n}\n#endif\n\n\"\"\"),\n    .init(name: \"AssociatedValue_Linux.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Defines enum case associated value\npublic final class AssociatedValue: NSObject, SourceryModel, AutoDescription, Typed, Annotated, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"externalName\":\n                return externalName\n            case \"localName\":\n                return localName\n            case \"typeName\":\n                return typeName\n            case \"type\":\n                return type\n            case \"defaultValue\":\n                return defaultValue\n            case \"annotations\":\n                return annotations\n            case \"isArray\":\n                return isArray\n            case \"isClosure\":\n                return isClosure\n            case \"isDictionary\":\n                return isDictionary\n            case \"isTuple\":\n                return isTuple\n            case \"isOptional\":\n                return isOptional\n            case \"isImplicitlyUnwrappedOptional\":\n                return isImplicitlyUnwrappedOptional\n            case \"isGeneric\":\n                return typeName.isGeneric\n            default:\n                fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }\n    }\n\n    /// Associated value local name.\n    /// This is a name to be used to construct enum case value\n    public let localName: String?\n\n    /// Associated value external name.\n    /// This is a name to be used to access value in value-bindig\n    public let externalName: String?\n\n    /// Associated value type name\n    public let typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Associated value type, if known\n    public var type: Type?\n\n    /// Associated value default value\n    public let defaultValue: String?\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public var annotations: Annotations = [:]\n\n    /// :nodoc:\n    public init(localName: String?, externalName: String?, typeName: TypeName, type: Type? = nil, defaultValue: String? = nil, annotations: [String: NSObject] = [:]) {\n        self.localName = localName\n        self.externalName = externalName\n        self.typeName = typeName\n        self.type = type\n        self.defaultValue = defaultValue\n        self.annotations = annotations\n    }\n\n    convenience init(name: String? = nil, typeName: TypeName, type: Type? = nil, defaultValue: String? = nil, annotations: [String: NSObject] = [:]) {\n        self.init(localName: name, externalName: name, typeName: typeName, type: type, defaultValue: defaultValue, annotations: annotations)\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"localName = \\\\(String(describing: self.localName)), \")\n        string.append(\"externalName = \\\\(String(describing: self.externalName)), \")\n        string.append(\"typeName = \\\\(String(describing: self.typeName)), \")\n        string.append(\"defaultValue = \\\\(String(describing: self.defaultValue)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? AssociatedValue else {\n            results.append(\"Incorrect type <expected: AssociatedValue, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"localName\").trackDifference(actual: self.localName, expected: castObject.localName))\n        results.append(contentsOf: DiffableResult(identifier: \"externalName\").trackDifference(actual: self.externalName, expected: castObject.externalName))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        results.append(contentsOf: DiffableResult(identifier: \"defaultValue\").trackDifference(actual: self.defaultValue, expected: castObject.defaultValue))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.localName)\n        hasher.combine(self.externalName)\n        hasher.combine(self.typeName)\n        hasher.combine(self.defaultValue)\n        hasher.combine(self.annotations)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? AssociatedValue else { return false }\n        if self.localName != rhs.localName { return false }\n        if self.externalName != rhs.externalName { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.defaultValue != rhs.defaultValue { return false }\n        if self.annotations != rhs.annotations { return false }\n        return true\n    }\n\n// sourcery:inline:AssociatedValue.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.localName = aDecoder.decode(forKey: \"localName\")\n            self.externalName = aDecoder.decode(forKey: \"externalName\")\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n            self.defaultValue = aDecoder.decode(forKey: \"defaultValue\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.localName, forKey: \"localName\")\n            aCoder.encode(self.externalName, forKey: \"externalName\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n            aCoder.encode(self.defaultValue, forKey: \"defaultValue\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n        }\n// sourcery:end\n\n}\n#endif\n\n\"\"\"),\n    .init(name: \"ClosureParameter_Linux.swift\", content:\n\"\"\"\n#if !canImport(ObjectiveC)\nimport Foundation\n\n// sourcery: skipDiffing\npublic final class ClosureParameter: NSObject, SourceryModel, Typed, Annotated, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n        case \"argumentLabel\":\n            return argumentLabel\n        case \"name\":\n            return name\n        case \"typeName\":\n            return typeName\n        case \"inout\":\n            return `inout`\n        case \"type\":\n            return type\n        case \"isVariadic\":\n            return isVariadic\n        case \"defaultValue\":\n            return defaultValue\n        default:\n            fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }\n    }\n    /// Parameter external name\n    public var argumentLabel: String?\n\n    /// Parameter internal name\n    public let name: String?\n\n    /// Parameter type name\n    public let typeName: TypeName\n\n    /// Parameter flag whether it's inout or not\n    public let `inout`: Bool\n\n    // sourcery: skipEquality, skipDescription\n    /// Parameter type, if known\n    public var type: Type?\n\n    /// Parameter if the argument has a variadic type or not\n    public let isVariadic: Bool\n\n    /// Parameter type attributes, i.e. `@escaping`\n    public var typeAttributes: AttributeList {\n        return typeName.attributes\n    }\n\n    /// Method parameter default value expression\n    public var defaultValue: String?\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public var annotations: Annotations = [:]\n\n    /// :nodoc:\n    public init(argumentLabel: String? = nil, name: String? = nil, typeName: TypeName, type: Type? = nil,\n                defaultValue: String? = nil, annotations: [String: NSObject] = [:], isInout: Bool = false, \n                isVariadic: Bool = false) {\n        self.typeName = typeName\n        self.argumentLabel = argumentLabel\n        self.name = name\n        self.type = type\n        self.defaultValue = defaultValue\n        self.annotations = annotations\n        self.`inout` = isInout\n        self.isVariadic = isVariadic\n    }\n\n    public var asSource: String {\n        let typeInfo = \"\\\\(`inout` ? \"inout \" : \"\")\\\\(typeName.asSource)\\\\(isVariadic ? \"...\" : \"\")\"\n        if argumentLabel?.nilIfNotValidParameterName == nil, name?.nilIfNotValidParameterName == nil {\n            return typeInfo\n        }\n\n        let typeSuffix = \": \\\\(typeInfo)\"\n        guard argumentLabel != name else {\n            return name ?? \"\" + typeSuffix\n        }\n\n        let labels = [argumentLabel ?? \"_\", name?.nilIfEmpty]\n          .compactMap { $0 }\n          .joined(separator: \" \")\n\n        return (labels.nilIfEmpty ?? \"_\") + typeSuffix\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.argumentLabel)\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        hasher.combine(self.`inout`)\n        hasher.combine(self.isVariadic)\n        hasher.combine(self.defaultValue)\n        hasher.combine(self.annotations)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"argumentLabel = \\\\(String(describing: self.argumentLabel)), \")\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"typeName = \\\\(String(describing: self.typeName)), \")\n        string.append(\"`inout` = \\\\(String(describing: self.`inout`)), \")\n        string.append(\"typeAttributes = \\\\(String(describing: self.typeAttributes)), \")\n        string.append(\"defaultValue = \\\\(String(describing: self.defaultValue)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations)), \")\n        string.append(\"asSource = \\\\(String(describing: self.asSource))\")\n        return string\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? ClosureParameter else { return false }\n        if self.argumentLabel != rhs.argumentLabel { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.`inout` != rhs.`inout` { return false }\n        if self.isVariadic != rhs.isVariadic { return false }\n        if self.defaultValue != rhs.defaultValue { return false }\n        if self.annotations != rhs.annotations { return false }\n        return true\n    }\n\n    // sourcery:inline:ClosureParameter.AutoCoding\n\n            /// :nodoc:\n            required public init?(coder aDecoder: NSCoder) {\n                self.argumentLabel = aDecoder.decode(forKey: \"argumentLabel\")\n                self.name = aDecoder.decode(forKey: \"name\")\n                guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                    withVaList([\"typeName\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.typeName = typeName\n                self.`inout` = aDecoder.decode(forKey: \"`inout`\")\n                self.type = aDecoder.decode(forKey: \"type\")\n                self.isVariadic = aDecoder.decode(forKey: \"isVariadic\")\n                self.defaultValue = aDecoder.decode(forKey: \"defaultValue\")\n                guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                    withVaList([\"annotations\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.annotations = annotations\n            }\n\n            /// :nodoc:\n            public func encode(with aCoder: NSCoder) {\n                aCoder.encode(self.argumentLabel, forKey: \"argumentLabel\")\n                aCoder.encode(self.name, forKey: \"name\")\n                aCoder.encode(self.typeName, forKey: \"typeName\")\n                aCoder.encode(self.`inout`, forKey: \"`inout`\")\n                aCoder.encode(self.type, forKey: \"type\")\n                aCoder.encode(self.isVariadic, forKey: \"isVariadic\")\n                aCoder.encode(self.defaultValue, forKey: \"defaultValue\")\n                aCoder.encode(self.annotations, forKey: \"annotations\")\n            }\n\n    // sourcery:end\n}\n\nextension Array where Element == ClosureParameter {\n    public var asSource: String {\n        \"(\\\\(map { $0.asSource }.joined(separator: \", \")))\"\n    }\n}\n#endif\n\n\"\"\"),\n    .init(name: \"Closure_Linux.swift\", content:\n\"\"\"\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Describes closure type\npublic final class ClosureType: NSObject, SourceryModel, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"name\":\n                return name\n            case \"parameters\":\n                return parameters\n            case \"returnTypeName\":\n                return returnTypeName\n            case \"actualReturnTypeName\":\n                return actualReturnTypeName\n            case \"returnType\":\n                return returnType\n            case \"isOptionalReturnType\":\n                return isOptionalReturnType\n            case \"isImplicitlyUnwrappedOptionalReturnType\":\n                return isImplicitlyUnwrappedOptionalReturnType\n            case \"unwrappedReturnTypeName\":\n                return unwrappedReturnTypeName\n            case \"isAsync\":\n                return isAsync\n            case \"asyncKeyword\":\n                return asyncKeyword\n            case \"throws\":\n                return `throws`\n            case \"throwsOrRethrowsKeyword\":\n                return throwsOrRethrowsKeyword\n            case \"throwsTypeName\":\n                return throwsTypeName\n            default:\n                fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }\n    }\n    /// Type name used in declaration with stripped whitespaces and new lines\n    public let name: String\n\n    /// List of closure parameters\n    public let parameters: [ClosureParameter]\n\n    /// Return value type name\n    public let returnTypeName: TypeName\n\n    /// Actual return value type name if declaration uses typealias, otherwise just a `returnTypeName`\n    public var actualReturnTypeName: TypeName {\n        return returnTypeName.actualTypeName ?? returnTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Actual return value type, if known\n    public var returnType: Type?\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is optional\n    public var isOptionalReturnType: Bool {\n        return returnTypeName.isOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is implicitly unwrapped optional\n    public var isImplicitlyUnwrappedOptionalReturnType: Bool {\n        return returnTypeName.isImplicitlyUnwrappedOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Return value type name without attributes and optional type information\n    public var unwrappedReturnTypeName: String {\n        return returnTypeName.unwrappedTypeName\n    }\n    \n    /// Whether method is async method\n    public let isAsync: Bool\n\n    /// async keyword\n    public let asyncKeyword: String?\n\n    /// Whether closure throws\n    public let `throws`: Bool\n\n    /// throws or rethrows keyword\n    public let throwsOrRethrowsKeyword: String?\n\n    /// Type of thrown error if specified\n    public let throwsTypeName: TypeName?\n\n    /// :nodoc:\n    public init(name: String, parameters: [ClosureParameter], returnTypeName: TypeName, returnType: Type? = nil, asyncKeyword: String? = nil, throwsOrRethrowsKeyword: String? = nil, throwsTypeName: TypeName? = nil) {\n        self.name = name\n        self.parameters = parameters\n        self.returnTypeName = returnTypeName\n        self.returnType = returnType\n        self.asyncKeyword = asyncKeyword\n        self.isAsync = asyncKeyword != nil\n        self.throwsOrRethrowsKeyword = throwsOrRethrowsKeyword\n        self.`throws` = throwsOrRethrowsKeyword != nil && !(throwsTypeName?.isNever ?? false)\n        self.throwsTypeName = throwsTypeName\n    }\n\n    public var asSource: String {\n        \"\\\\(parameters.asSource)\\\\(asyncKeyword != nil ? \" \\\\(asyncKeyword!)\" : \"\")\\\\(throwsOrRethrowsKeyword != nil ? \" \\\\(throwsOrRethrowsKeyword!)\\\\(throwsTypeName != nil ? \"(\\\\(throwsTypeName!.asSource))\" : \"\")\" : \"\") -> \\\\(returnTypeName.asSource)\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"parameters = \\\\(String(describing: self.parameters)), \")\n        string.append(\"returnTypeName = \\\\(String(describing: self.returnTypeName)), \")\n        string.append(\"actualReturnTypeName = \\\\(String(describing: self.actualReturnTypeName)), \")\n        string.append(\"isAsync = \\\\(String(describing: self.isAsync)), \")\n        string.append(\"asyncKeyword = \\\\(String(describing: self.asyncKeyword)), \")\n        string.append(\"`throws` = \\\\(String(describing: self.`throws`)), \")\n        string.append(\"throwsOrRethrowsKeyword = \\\\(String(describing: self.throwsOrRethrowsKeyword)), \")\n        string.append(\"throwsTypeName = \\\\(String(describing: self.throwsTypeName)), \")\n        string.append(\"asSource = \\\\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? ClosureType else {\n            results.append(\"Incorrect type <expected: ClosureType, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"parameters\").trackDifference(actual: self.parameters, expected: castObject.parameters))\n        results.append(contentsOf: DiffableResult(identifier: \"returnTypeName\").trackDifference(actual: self.returnTypeName, expected: castObject.returnTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"isAsync\").trackDifference(actual: self.isAsync, expected: castObject.isAsync))\n        results.append(contentsOf: DiffableResult(identifier: \"asyncKeyword\").trackDifference(actual: self.asyncKeyword, expected: castObject.asyncKeyword))\n        results.append(contentsOf: DiffableResult(identifier: \"`throws`\").trackDifference(actual: self.`throws`, expected: castObject.`throws`))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsOrRethrowsKeyword\").trackDifference(actual: self.throwsOrRethrowsKeyword, expected: castObject.throwsOrRethrowsKeyword))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsTypeName\").trackDifference(actual: self.throwsTypeName, expected: castObject.throwsTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.parameters)\n        hasher.combine(self.returnTypeName)\n        hasher.combine(self.isAsync)\n        hasher.combine(self.asyncKeyword)\n        hasher.combine(self.`throws`)\n        hasher.combine(self.throwsOrRethrowsKeyword)\n        hasher.combine(self.throwsTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? ClosureType else { return false }\n        if self.name != rhs.name { return false }\n        if self.parameters != rhs.parameters { return false }\n        if self.returnTypeName != rhs.returnTypeName { return false }\n        if self.isAsync != rhs.isAsync { return false }\n        if self.asyncKeyword != rhs.asyncKeyword { return false }\n        if self.`throws` != rhs.`throws` { return false }\n        if self.throwsOrRethrowsKeyword != rhs.throwsOrRethrowsKeyword { return false }\n        if self.throwsTypeName != rhs.throwsTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:ClosureType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let parameters: [ClosureParameter] = aDecoder.decode(forKey: \"parameters\") else { \n                withVaList([\"parameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.parameters = parameters\n            guard let returnTypeName: TypeName = aDecoder.decode(forKey: \"returnTypeName\") else { \n                withVaList([\"returnTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.returnTypeName = returnTypeName\n            self.returnType = aDecoder.decode(forKey: \"returnType\")\n            self.isAsync = aDecoder.decode(forKey: \"isAsync\")\n            self.asyncKeyword = aDecoder.decode(forKey: \"asyncKeyword\")\n            self.`throws` = aDecoder.decode(forKey: \"`throws`\")\n            self.throwsOrRethrowsKeyword = aDecoder.decode(forKey: \"throwsOrRethrowsKeyword\")\n            self.throwsTypeName = aDecoder.decode(forKey: \"throwsTypeName\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.parameters, forKey: \"parameters\")\n            aCoder.encode(self.returnTypeName, forKey: \"returnTypeName\")\n            aCoder.encode(self.returnType, forKey: \"returnType\")\n            aCoder.encode(self.isAsync, forKey: \"isAsync\")\n            aCoder.encode(self.asyncKeyword, forKey: \"asyncKeyword\")\n            aCoder.encode(self.`throws`, forKey: \"`throws`\")\n            aCoder.encode(self.throwsOrRethrowsKeyword, forKey: \"throwsOrRethrowsKeyword\")\n            aCoder.encode(self.throwsTypeName, forKey: \"throwsTypeName\")\n        }\n// sourcery:end\n\n}\n#endif\n\n\"\"\"),\n    .init(name: \"DynamicMemberLookup_Linux.swift\", content:\n\"\"\"\n//\n// Stencil\n// Copyright © 2022 Stencil\n// MIT Licence\n//\n\n#if !canImport(ObjectiveC)\n#if canImport(Stencil)\nimport Stencil\n#else\n// This is not supposed to work at all, since in Stencil there is a protocol conformance check against `DynamicMemberLookup`,\n// and, of course, a substitute with the \"same name\" but in `Sourcery` will never satisfy that check.\n// Here, we are just mimicking `Stencil.DynamicMemberLookup` to showcase what is happening within the `Sourcery` during runtime.\n\n/// Marker protocol so we can know which types support `@dynamicMemberLookup`. Add this to your own types that support\n/// lookup by String.\npublic protocol DynamicMemberLookup {\n    /// Get a value for a given `String` key\n    subscript(dynamicMember member: String) -> Any? { get }\n}\n\npublic extension DynamicMemberLookup where Self: RawRepresentable {\n  /// Get a value for a given `String` key\n  subscript(dynamicMember member: String) -> Any? {\n    switch member {\n    case \"rawValue\":\n      return rawValue\n    default:\n      return nil\n    }\n  }\n}\n#endif\n\npublic protocol SourceryDynamicMemberLookup: DynamicMemberLookup {}\n\n#endif\n\n\"\"\"),\n    .init(name: \"EnumCase_Linux.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Defines enum case\npublic final class EnumCase: NSObject, SourceryModel, AutoDescription, Annotated, Documented, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"name\":\n                return name\n            case \"hasAssociatedValue\":\n                return hasAssociatedValue\n            case \"associatedValues\":\n                return associatedValues\n            case \"indirect\":\n                return indirect\n            case \"annotations\":\n                return annotations\n            case \"rawValue\":\n                return rawValue\n            default:\n                fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }\n    }\n    /// Enum case name\n    public let name: String\n\n    /// Enum case raw value, if any\n    public let rawValue: String?\n\n    /// Enum case associated values\n    public let associatedValues: [AssociatedValue]\n\n    /// Enum case annotations\n    public var annotations: Annotations = [:]\n\n    public var documentation: Documentation = []\n\n    /// Whether enum case is indirect\n    public let indirect: Bool\n\n    /// Whether enum case has associated value\n    public var hasAssociatedValue: Bool {\n        return !associatedValues.isEmpty\n    }\n\n    // Underlying parser data, never to be used by anything else\n    // sourcery: skipEquality, skipDescription, skipCoding, skipJSExport\n    /// :nodoc:\n    public var __parserData: Any?\n\n    /// :nodoc:\n    public init(name: String, rawValue: String? = nil, associatedValues: [AssociatedValue] = [], annotations: [String: NSObject] = [:], documentation: [String] = [], indirect: Bool = false) {\n        self.name = name\n        self.rawValue = rawValue\n        self.associatedValues = associatedValues\n        self.annotations = annotations\n        self.documentation = documentation\n        self.indirect = indirect\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"rawValue = \\\\(String(describing: self.rawValue)), \")\n        string.append(\"associatedValues = \\\\(String(describing: self.associatedValues)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\\\(String(describing: self.documentation)), \")\n        string.append(\"indirect = \\\\(String(describing: self.indirect)), \")\n        string.append(\"hasAssociatedValue = \\\\(String(describing: self.hasAssociatedValue))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? EnumCase else {\n            results.append(\"Incorrect type <expected: EnumCase, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"rawValue\").trackDifference(actual: self.rawValue, expected: castObject.rawValue))\n        results.append(contentsOf: DiffableResult(identifier: \"associatedValues\").trackDifference(actual: self.associatedValues, expected: castObject.associatedValues))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"indirect\").trackDifference(actual: self.indirect, expected: castObject.indirect))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.rawValue)\n        hasher.combine(self.associatedValues)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.indirect)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? EnumCase else { return false }\n        if self.name != rhs.name { return false }\n        if self.rawValue != rhs.rawValue { return false }\n        if self.associatedValues != rhs.associatedValues { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.indirect != rhs.indirect { return false }\n        return true\n    }\n\n// sourcery:inline:EnumCase.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            self.rawValue = aDecoder.decode(forKey: \"rawValue\")\n            guard let associatedValues: [AssociatedValue] = aDecoder.decode(forKey: \"associatedValues\") else { \n                withVaList([\"associatedValues\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.associatedValues = associatedValues\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            self.indirect = aDecoder.decode(forKey: \"indirect\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.rawValue, forKey: \"rawValue\")\n            aCoder.encode(self.associatedValues, forKey: \"associatedValues\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.indirect, forKey: \"indirect\")\n        }\n// sourcery:end\n}\n#endif\n\n\"\"\"),\n    .init(name: \"Enum_Linux.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Defines Swift enum\npublic final class Enum: Type {\n    public override subscript(dynamicMember member: String) -> Any? {\n        switch member {\n        case \"cases\":\n            return cases\n        case \"hasAssociatedValues\":\n            return hasAssociatedValues\n        default:\n            return super[dynamicMember: member]\n        }\n    }\n\n    // sourcery: skipJSExport\n    public class var kind: String { return \"enum\" }\n\n    // sourcery: skipDescription\n    /// Returns \"enum\"\n    public override var kind: String { Self.kind }\n\n    /// Enum cases\n    public var cases: [EnumCase]\n\n    /**\n     Enum raw value type name, if any. This type is removed from enum's `based` and `inherited` types collections.\n\n        - important: Unless raw type is specified explicitly via type alias RawValue it will be set to the first type in the inheritance chain.\n     So if your enum does not have raw value but implements protocols you'll have to specify conformance to these protocols via extension to get enum with nil raw value type and all based and inherited types.\n     */\n    public var rawTypeName: TypeName? {\n        didSet {\n            if let rawTypeName = rawTypeName {\n                hasRawType = true\n                if let index = inheritedTypes.firstIndex(of: rawTypeName.name) {\n                    inheritedTypes.remove(at: index)\n                }\n                if based[rawTypeName.name] != nil {\n                    based[rawTypeName.name] = nil\n                }\n            } else {\n                hasRawType = false\n            }\n        }\n    }\n\n    // sourcery: skipDescription, skipEquality\n    /// :nodoc:\n    public private(set) var hasRawType: Bool\n\n    // sourcery: skipDescription, skipEquality\n    /// Enum raw value type, if known\n    public var rawType: Type?\n\n    // sourcery: skipEquality, skipDescription, skipCoding\n    /// Names of types or protocols this type inherits from, including unknown (not scanned) types\n    public override var based: [String: String] {\n        didSet {\n            if let rawTypeName = rawTypeName, based[rawTypeName.name] != nil {\n                based[rawTypeName.name] = nil\n            }\n        }\n    }\n\n    /// Whether enum contains any associated values\n    public var hasAssociatedValues: Bool {\n        return cases.contains(where: { $0.hasAssociatedValue })\n    }\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                parent: Type? = nil,\n                accessLevel: AccessLevel = .internal,\n                isExtension: Bool = false,\n                inheritedTypes: [String] = [],\n                rawTypeName: TypeName? = nil,\n                cases: [EnumCase] = [],\n                variables: [Variable] = [],\n                methods: [Method] = [],\n                containedTypes: [Type] = [],\n                typealiases: [Typealias] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                isGeneric: Bool = false) {\n\n        self.cases = cases\n        self.rawTypeName = rawTypeName\n        self.hasRawType = rawTypeName != nil || !inheritedTypes.isEmpty\n\n        super.init(name: name, parent: parent, accessLevel: accessLevel, isExtension: isExtension, variables: variables, methods: methods, inheritedTypes: inheritedTypes, containedTypes: containedTypes, typealiases: typealiases, attributes: attributes, modifiers: modifiers, annotations: annotations, documentation: documentation, isGeneric: isGeneric, kind: Self.kind)\n\n        if let rawTypeName = rawTypeName?.name, let index = self.inheritedTypes.firstIndex(of: rawTypeName) {\n            self.inheritedTypes.remove(at: index)\n        }\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string.append(\", \")\n        string.append(\"cases = \\\\(String(describing: self.cases)), \")\n        string.append(\"rawTypeName = \\\\(String(describing: self.rawTypeName)), \")\n        string.append(\"hasAssociatedValues = \\\\(String(describing: self.hasAssociatedValues))\")\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Enum else {\n            results.append(\"Incorrect type <expected: Enum, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"cases\").trackDifference(actual: self.cases, expected: castObject.cases))\n        results.append(contentsOf: DiffableResult(identifier: \"rawTypeName\").trackDifference(actual: self.rawTypeName, expected: castObject.rawTypeName))\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.cases)\n        hasher.combine(self.rawTypeName)\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Enum else { return false }\n        if self.cases != rhs.cases { return false }\n        if self.rawTypeName != rhs.rawTypeName { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Enum.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let cases: [EnumCase] = aDecoder.decode(forKey: \"cases\") else { \n                withVaList([\"cases\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.cases = cases\n            self.rawTypeName = aDecoder.decode(forKey: \"rawTypeName\")\n            self.hasRawType = aDecoder.decode(forKey: \"hasRawType\")\n            self.rawType = aDecoder.decode(forKey: \"rawType\")\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n            aCoder.encode(self.cases, forKey: \"cases\")\n            aCoder.encode(self.rawTypeName, forKey: \"rawTypeName\")\n            aCoder.encode(self.hasRawType, forKey: \"hasRawType\")\n            aCoder.encode(self.rawType, forKey: \"rawType\")\n        }\n// sourcery:end\n}\n#endif\n\n\"\"\"),\n    .init(name: \"GenericParameter_Linux.swift\", content:\n\"\"\"\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Descibes Swift generic parameter\npublic final class GenericParameter: NSObject, SourceryModel, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"name\":\n                return name\n            case \"inheritedTypeName\":\n                return inheritedTypeName\n            default:\n                fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }\n    }\n\n    /// Generic parameter name\n    public var name: String\n\n    /// Generic parameter inherited type\n    public var inheritedTypeName: TypeName?\n\n    /// :nodoc:\n    public init(name: String, inheritedTypeName: TypeName? = nil) {\n        self.name = name\n        self.inheritedTypeName = inheritedTypeName\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"inheritedTypeName = \\\\(String(describing: self.inheritedTypeName))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? GenericParameter else {\n            results.append(\"Incorrect type <expected: GenericParameter, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"inheritedTypeName\").trackDifference(actual: self.inheritedTypeName, expected: castObject.inheritedTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.inheritedTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? GenericParameter else { return false }\n        if self.name != rhs.name { return false }\n        if self.inheritedTypeName != rhs.inheritedTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:GenericParameter.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            self.inheritedTypeName = aDecoder.decode(forKey: \"inheritedTypeName\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.inheritedTypeName, forKey: \"inheritedTypeName\")\n        }\n\n// sourcery:end\n}\n#endif\n\n\"\"\"),\n    .init(name: \"GenericRequirement_Linux.swift\", content:\n\"\"\"\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Descibes Swift generic requirement\npublic class GenericRequirement: NSObject, SourceryModel, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"leftType\":\n                return leftType\n            case \"rightType\":\n                return rightType\n            case \"relationship\":\n                return relationship\n            case \"relationshipSyntax\":\n                return relationshipSyntax\n            default:\n                fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }\n    }\n\n    public enum Relationship: String {\n        case equals\n        case conformsTo\n\n        var syntax: String {\n            switch self {\n            case .equals:\n                return \"==\"\n            case .conformsTo:\n                return \":\"\n            }\n        }\n    }\n\n    public var leftType: AssociatedType\n    public let rightType: GenericTypeParameter\n\n    /// relationship name\n    public let relationship: String\n\n    /// Syntax e.g. `==` or `:`\n    public let relationshipSyntax: String\n\n    public init(leftType: AssociatedType, rightType: GenericTypeParameter, relationship: Relationship) {\n        self.leftType = leftType\n        self.rightType = rightType\n        self.relationship = relationship.rawValue\n        self.relationshipSyntax = relationship.syntax\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"leftType = \\\\(String(describing: self.leftType)), \")\n        string.append(\"rightType = \\\\(String(describing: self.rightType)), \")\n        string.append(\"relationship = \\\\(String(describing: self.relationship)), \")\n        string.append(\"relationshipSyntax = \\\\(String(describing: self.relationshipSyntax))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? GenericRequirement else {\n            results.append(\"Incorrect type <expected: GenericRequirement, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"leftType\").trackDifference(actual: self.leftType, expected: castObject.leftType))\n        results.append(contentsOf: DiffableResult(identifier: \"rightType\").trackDifference(actual: self.rightType, expected: castObject.rightType))\n        results.append(contentsOf: DiffableResult(identifier: \"relationship\").trackDifference(actual: self.relationship, expected: castObject.relationship))\n        results.append(contentsOf: DiffableResult(identifier: \"relationshipSyntax\").trackDifference(actual: self.relationshipSyntax, expected: castObject.relationshipSyntax))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.leftType)\n        hasher.combine(self.rightType)\n        hasher.combine(self.relationship)\n        hasher.combine(self.relationshipSyntax)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? GenericRequirement else { return false }\n        if self.leftType != rhs.leftType { return false }\n        if self.rightType != rhs.rightType { return false }\n        if self.relationship != rhs.relationship { return false }\n        if self.relationshipSyntax != rhs.relationshipSyntax { return false }\n        return true\n    }\n\n    // sourcery:inline:GenericRequirement.AutoCoding\n\n            /// :nodoc:\n            required public init?(coder aDecoder: NSCoder) {\n                guard let leftType: AssociatedType = aDecoder.decode(forKey: \"leftType\") else { \n                    withVaList([\"leftType\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.leftType = leftType\n                guard let rightType: GenericTypeParameter = aDecoder.decode(forKey: \"rightType\") else { \n                    withVaList([\"rightType\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.rightType = rightType\n                guard let relationship: String = aDecoder.decode(forKey: \"relationship\") else { \n                    withVaList([\"relationship\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.relationship = relationship\n                guard let relationshipSyntax: String = aDecoder.decode(forKey: \"relationshipSyntax\") else { \n                    withVaList([\"relationshipSyntax\"]) { arguments in\n                        NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                    }\n                    fatalError()\n                 }; self.relationshipSyntax = relationshipSyntax\n            }\n\n            /// :nodoc:\n            public func encode(with aCoder: NSCoder) {\n                aCoder.encode(self.leftType, forKey: \"leftType\")\n                aCoder.encode(self.rightType, forKey: \"rightType\")\n                aCoder.encode(self.relationship, forKey: \"relationship\")\n                aCoder.encode(self.relationshipSyntax, forKey: \"relationshipSyntax\")\n            }\n    // sourcery:end\n}\n#endif\n\n\"\"\"),\n    .init(name: \"GenericTypeParameter_Linux.swift\", content:\n\"\"\"\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Descibes Swift generic type parameter\npublic final class GenericTypeParameter: NSObject, SourceryModel, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"typeName\":\n                return typeName\n            case \"type\":\n                return type\n            default:\n                fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }\n    }\n\n    /// Generic parameter type name\n    public var typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Generic parameter type, if known\n    public var type: Type?\n\n    /// :nodoc:\n    public init(typeName: TypeName, type: Type? = nil) {\n        self.typeName = typeName\n        self.type = type\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"typeName = \\\\(String(describing: self.typeName))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? GenericTypeParameter else {\n            results.append(\"Incorrect type <expected: GenericTypeParameter, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.typeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? GenericTypeParameter else { return false }\n        if self.typeName != rhs.typeName { return false }\n        return true\n    }\n\n// sourcery:inline:GenericTypeParameter.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n        }\n\n// sourcery:end\n}\n#endif\n\n\"\"\"),\n    .init(name: \"MethodParameter_Linux.swift\", content:\n\"\"\"\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Describes method parameter\npublic class MethodParameter: NSObject, SourceryModel, Typed, Annotated, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"argumentLabel\":\n                return argumentLabel\n            case \"name\":\n                return name\n            case \"typeName\":\n                return typeName\n            case \"isClosure\":\n                return isClosure\n            case \"typeAttributes\":\n                return typeAttributes\n            case \"isVariadic\":\n                return isVariadic\n            case \"asSource\":\n                return asSource\n            case \"index\":\n                return index\n            case \"isOptional\":\n                return isOptional\n            default:\n                fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }\n    }\n    /// Parameter external name\n    public var argumentLabel: String?\n\n    // Note: although method parameter can have no name, this property is not optional,\n    // this is so to maintain compatibility with existing templates.\n    /// Parameter internal name\n    public let name: String\n\n    /// Parameter type name\n    public let typeName: TypeName\n\n    /// Parameter flag whether it's inout or not\n    public let `inout`: Bool\n\n    /// Is this variadic parameter?\n    public let isVariadic: Bool\n\n    // sourcery: skipEquality, skipDescription\n    /// Parameter type, if known\n    public var type: Type?\n\n    /// Parameter type attributes, i.e. `@escaping`\n    public var typeAttributes: AttributeList {\n        return typeName.attributes\n    }\n\n    /// Method parameter default value expression\n    public var defaultValue: String?\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public var annotations: Annotations = [:]\n\n    /// Method parameter index in the argument list\n    public var index: Int\n\n    /// :nodoc:\n    public init(argumentLabel: String?, name: String = \"\", index: Int, typeName: TypeName, type: Type? = nil, defaultValue: String? = nil, annotations: [String: NSObject] = [:], isInout: Bool = false, isVariadic: Bool = false) {\n        self.typeName = typeName\n        self.argumentLabel = argumentLabel\n        self.name = name\n        self.index = index\n        self.type = type\n        self.defaultValue = defaultValue\n        self.annotations = annotations\n        self.`inout` = isInout\n        self.isVariadic = isVariadic\n    }\n\n    /// :nodoc:\n    public init(name: String = \"\", index: Int, typeName: TypeName, type: Type? = nil, defaultValue: String? = nil, annotations: [String: NSObject] = [:], isInout: Bool = false, isVariadic: Bool = false) {\n        self.typeName = typeName\n        self.argumentLabel = name\n        self.name = name\n        self.index = index\n        self.type = type\n        self.defaultValue = defaultValue\n        self.annotations = annotations\n        self.`inout` = isInout\n        self.isVariadic = isVariadic\n    }\n\n    public var asSource: String {\n        let values: String = defaultValue.map { \" = \\\\($0)\" } ?? \"\"\n        let variadicity: String = isVariadic ? \"...\" : \"\"\n        let inoutness: String = `inout` ? \"inout \" : \"\"\n        let typeSuffix = \": \\\\(inoutness)\\\\(typeName.asSource)\\\\(values)\\\\(variadicity)\"\n        guard argumentLabel != name else {\n            return name + typeSuffix\n        }\n\n        let labels = [argumentLabel ?? \"_\", name.nilIfEmpty]\n          .compactMap { $0 }\n          .joined(separator: \" \")\n\n        return (labels.nilIfEmpty ?? \"_\") + typeSuffix\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"argumentLabel = \\\\(String(describing: self.argumentLabel)), \")\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"typeName = \\\\(String(describing: self.typeName)), \")\n        string.append(\"`inout` = \\\\(String(describing: self.`inout`)), \")\n        string.append(\"isVariadic = \\\\(String(describing: self.isVariadic)), \")\n        string.append(\"typeAttributes = \\\\(String(describing: self.typeAttributes)), \")\n        string.append(\"defaultValue = \\\\(String(describing: self.defaultValue)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations)), \")\n        string.append(\"asSource = \\\\(String(describing: self.asSource)), \")\n        string.append(\"index = \\\\(String(describing: self.index))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? MethodParameter else {\n            results.append(\"Incorrect type <expected: MethodParameter, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"argumentLabel\").trackDifference(actual: self.argumentLabel, expected: castObject.argumentLabel))\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        results.append(contentsOf: DiffableResult(identifier: \"`inout`\").trackDifference(actual: self.`inout`, expected: castObject.`inout`))\n        results.append(contentsOf: DiffableResult(identifier: \"isVariadic\").trackDifference(actual: self.isVariadic, expected: castObject.isVariadic))\n        results.append(contentsOf: DiffableResult(identifier: \"defaultValue\").trackDifference(actual: self.defaultValue, expected: castObject.defaultValue))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"index\").trackDifference(actual: self.index, expected: castObject.index))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.argumentLabel)\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        hasher.combine(self.`inout`)\n        hasher.combine(self.isVariadic)\n        hasher.combine(self.defaultValue)\n        hasher.combine(self.annotations)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? MethodParameter else { return false }\n        if self.argumentLabel != rhs.argumentLabel { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.`inout` != rhs.`inout` { return false }\n        if self.isVariadic != rhs.isVariadic { return false }\n        if self.defaultValue != rhs.defaultValue { return false }\n        if self.annotations != rhs.annotations { return false }\n        return true\n    }\n\n// sourcery:inline:MethodParameter.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.argumentLabel = aDecoder.decode(forKey: \"argumentLabel\")\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.`inout` = aDecoder.decode(forKey: \"`inout`\")\n            self.isVariadic = aDecoder.decode(forKey: \"isVariadic\")\n            self.type = aDecoder.decode(forKey: \"type\")\n            self.defaultValue = aDecoder.decode(forKey: \"defaultValue\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            self.index = aDecoder.decode(forKey: \"index\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.argumentLabel, forKey: \"argumentLabel\")\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.`inout`, forKey: \"`inout`\")\n            aCoder.encode(self.isVariadic, forKey: \"isVariadic\")\n            aCoder.encode(self.type, forKey: \"type\")\n            aCoder.encode(self.defaultValue, forKey: \"defaultValue\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.index, forKey: \"index\")\n        }\n// sourcery:end\n}\n\nextension Array where Element == MethodParameter {\n    public var asSource: String {\n        \"(\\\\(map { $0.asSource }.joined(separator: \", \")))\"\n    }\n}\n#endif\n\n\"\"\"),\n    .init(name: \"Method_Linux.swift\", content:\n\"\"\"\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// :nodoc:\npublic typealias SourceryMethod = Method\n\n/// Describes method\npublic final class Method: NSObject, SourceryModel, Annotated, Documented, Definition, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"definedInType\":\n                return definedInType\n            case \"shortName\":\n                return shortName\n            case \"name\":\n                return name\n            case \"selectorName\":\n                return selectorName\n            case \"callName\":\n                return callName\n            case \"parameters\":\n                return parameters\n            case \"throws\":\n                return `throws`\n            case \"throwsTypeName\":\n                return throwsTypeName\n            case \"isInitializer\":\n                return isInitializer\n            case \"accessLevel\":\n                return accessLevel\n            case \"isStatic\":\n                return isStatic\n            case \"returnTypeName\":\n                return returnTypeName\n            case \"isAsync\":\n                return isAsync\n            case \"attributes\":\n                return attributes\n            case \"isOptionalReturnType\":\n                return isOptionalReturnType\n            case \"actualReturnTypeName\":\n                return actualReturnTypeName\n            case \"isThrowsTypeGeneric\":\n                return isThrowsTypeGeneric\n            case \"isDynamic\":\n                return isDynamic\n            case \"genericRequirements\":\n                return genericRequirements\n            default:\n                fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }\n    }\n\n    /// Full method name, including generic constraints, i.e. `foo<T>(bar: T)`\n    public let name: String\n\n    /// Method name including arguments names, i.e. `foo(bar:)`\n    public var selectorName: String\n\n    // sourcery: skipEquality, skipDescription\n    /// Method name without arguments names and parentheses, i.e. `foo<T>`\n    public var shortName: String {\n        return name.range(of: \"(\").map({ String(name[..<$0.lowerBound]) }) ?? name\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Method name without arguments names, parentheses and generic types, i.e. `foo` (can be used to generate code for method call)\n    public var callName: String {\n        return shortName.range(of: \"<\").map({ String(shortName[..<$0.lowerBound]) }) ?? shortName\n    }\n\n    /// Method parameters\n    public var parameters: [MethodParameter]\n\n    /// Return value type name used in declaration, including generic constraints, i.e. `where T: Equatable`\n    public var returnTypeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Actual return value type name if declaration uses typealias, otherwise just a `returnTypeName`\n    public var actualReturnTypeName: TypeName {\n        return returnTypeName.actualTypeName ?? returnTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Return if the throwsType is generic\n    public var isThrowsTypeGeneric: Bool {\n        return genericParameters.contains { $0.name == throwsTypeName?.name }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Actual return value type, if known\n    public var returnType: Type?\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is optional\n    public var isOptionalReturnType: Bool {\n        return returnTypeName.isOptional || isFailableInitializer\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is implicitly unwrapped optional\n    public var isImplicitlyUnwrappedOptionalReturnType: Bool {\n        return returnTypeName.isImplicitlyUnwrappedOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Return value type name without attributes and optional type information\n    public var unwrappedReturnTypeName: String {\n        return returnTypeName.unwrappedTypeName\n    }\n\n    /// Whether method is async method\n    public let isAsync: Bool\n\n    /// Whether method is distributed\n    public var isDistributed: Bool {\n        modifiers.contains(where: { $0.name == \"distributed\" })\n    }\n\n    /// Whether method throws\n    public let `throws`: Bool\n\n    /// Type of thrown error if specified\n    public let throwsTypeName: TypeName?\n\n    /// Whether method rethrows\n    public let `rethrows`: Bool\n\n    /// Method access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let accessLevel: String\n\n    /// Whether method is a static method\n    public let isStatic: Bool\n\n    /// Whether method is a class method\n    public let isClass: Bool\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is an initializer\n    public var isInitializer: Bool {\n        return selectorName.hasPrefix(\"init(\") || selectorName == \"init\"\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is an deinitializer\n    public var isDeinitializer: Bool {\n        return selectorName == \"deinit\"\n    }\n\n    /// Whether method is a failable initializer\n    public let isFailableInitializer: Bool\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is a convenience initializer\n    public var isConvenienceInitializer: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.convenience.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is required\n    public var isRequired: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.required.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is final\n    public var isFinal: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.final.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is mutating\n    public var isMutating: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.mutating.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is generic\n    public var isGeneric: Bool {\n        shortName.hasSuffix(\">\")\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is optional (in an Objective-C protocol)\n    public var isOptional: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.optional.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is nonisolated (this modifier only applies to actor methods)\n    public var isNonisolated: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.nonisolated.rawValue }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether method is dynamic\n    public var isDynamic: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.dynamic.rawValue }\n    }\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public let annotations: Annotations\n\n    public let documentation: Documentation\n\n    /// Reference to type name where the method is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc\n    public let definedInTypeName: TypeName?\n\n    // sourcery: skipEquality, skipDescription\n    /// Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a `definedInTypeName`\n    public var actualDefinedInTypeName: TypeName? {\n        return definedInTypeName?.actualTypeName ?? definedInTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Reference to actual type where the object is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc or type is unknown\n    public var definedInType: Type?\n\n    /// Method attributes, i.e. `@discardableResult`\n    public let attributes: AttributeList\n\n    /// Method modifiers, i.e. `private`\n    public let modifiers: [SourceryModifier]\n\n    // Underlying parser data, never to be used by anything else\n    // sourcery: skipEquality, skipDescription, skipCoding, skipJSExport\n    /// :nodoc:\n    public var __parserData: Any?\n\n    /// list of generic requirements\n    public var genericRequirements: [GenericRequirement]\n\n    /// List of generic parameters\n    ///\n    /// - Example:\n    ///\n    ///   ```swift\n    ///   func method<GenericParameter>(foo: GenericParameter)\n    ///                    ^ ~ a generic parameter\n    ///   ```\n    public var genericParameters: [GenericParameter]\n\n    /// :nodoc:\n    public init(name: String,\n                selectorName: String? = nil,\n                parameters: [MethodParameter] = [],\n                returnTypeName: TypeName = TypeName(name: \"Void\"),\n                isAsync: Bool = false,\n                throws: Bool = false,\n                throwsTypeName: TypeName? = nil,\n                rethrows: Bool = false,\n                accessLevel: AccessLevel = .internal,\n                isStatic: Bool = false,\n                isClass: Bool = false,\n                isFailableInitializer: Bool = false,\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                definedInTypeName: TypeName? = nil,\n                genericRequirements: [GenericRequirement] = [],\n                genericParameters: [GenericParameter] = []) {\n        self.name = name\n        self.selectorName = selectorName ?? name\n        self.parameters = parameters\n        self.returnTypeName = returnTypeName\n        self.isAsync = isAsync\n        self.throws = `throws`\n        self.throwsTypeName = throwsTypeName\n        self.rethrows = `rethrows`\n        self.accessLevel = accessLevel.rawValue\n        self.isStatic = isStatic\n        self.isClass = isClass\n        self.isFailableInitializer = isFailableInitializer\n        self.attributes = attributes\n        self.modifiers = modifiers\n        self.annotations = annotations\n        self.documentation = documentation\n        self.definedInTypeName = definedInTypeName\n        self.genericRequirements = genericRequirements\n        self.genericParameters = genericParameters\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"selectorName = \\\\(String(describing: self.selectorName)), \")\n        string.append(\"parameters = \\\\(String(describing: self.parameters)), \")\n        string.append(\"returnTypeName = \\\\(String(describing: self.returnTypeName)), \")\n        string.append(\"isAsync = \\\\(String(describing: self.isAsync)), \")\n        string.append(\"`throws` = \\\\(String(describing: self.`throws`)), \")\n        string.append(\"throwsTypeName = \\\\(String(describing: self.throwsTypeName)), \")\n        string.append(\"`rethrows` = \\\\(String(describing: self.`rethrows`)), \")\n        string.append(\"accessLevel = \\\\(String(describing: self.accessLevel)), \")\n        string.append(\"isStatic = \\\\(String(describing: self.isStatic)), \")\n        string.append(\"isClass = \\\\(String(describing: self.isClass)), \")\n        string.append(\"isFailableInitializer = \\\\(String(describing: self.isFailableInitializer)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\\\(String(describing: self.documentation)), \")\n        string.append(\"definedInTypeName = \\\\(String(describing: self.definedInTypeName)), \")\n        string.append(\"attributes = \\\\(String(describing: self.attributes)), \")\n        string.append(\"modifiers = \\\\(String(describing: self.modifiers)), \")\n        string.append(\"genericRequirements = \\\\(String(describing: self.genericRequirements)), \")\n        string.append(\"genericParameters = \\\\(String(describing: self.genericParameters))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Method else {\n            results.append(\"Incorrect type <expected: Method, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"selectorName\").trackDifference(actual: self.selectorName, expected: castObject.selectorName))\n        results.append(contentsOf: DiffableResult(identifier: \"parameters\").trackDifference(actual: self.parameters, expected: castObject.parameters))\n        results.append(contentsOf: DiffableResult(identifier: \"returnTypeName\").trackDifference(actual: self.returnTypeName, expected: castObject.returnTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"isAsync\").trackDifference(actual: self.isAsync, expected: castObject.isAsync))\n        results.append(contentsOf: DiffableResult(identifier: \"`throws`\").trackDifference(actual: self.`throws`, expected: castObject.`throws`))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsTypeName\").trackDifference(actual: self.throwsTypeName, expected: castObject.throwsTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"`rethrows`\").trackDifference(actual: self.`rethrows`, expected: castObject.`rethrows`))\n        results.append(contentsOf: DiffableResult(identifier: \"accessLevel\").trackDifference(actual: self.accessLevel, expected: castObject.accessLevel))\n        results.append(contentsOf: DiffableResult(identifier: \"isStatic\").trackDifference(actual: self.isStatic, expected: castObject.isStatic))\n        results.append(contentsOf: DiffableResult(identifier: \"isClass\").trackDifference(actual: self.isClass, expected: castObject.isClass))\n        results.append(contentsOf: DiffableResult(identifier: \"isFailableInitializer\").trackDifference(actual: self.isFailableInitializer, expected: castObject.isFailableInitializer))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"definedInTypeName\").trackDifference(actual: self.definedInTypeName, expected: castObject.definedInTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        results.append(contentsOf: DiffableResult(identifier: \"genericRequirements\").trackDifference(actual: self.genericRequirements, expected: castObject.genericRequirements))\n        results.append(contentsOf: DiffableResult(identifier: \"genericParameters\").trackDifference(actual: self.genericParameters, expected: castObject.genericParameters))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.selectorName)\n        hasher.combine(self.parameters)\n        hasher.combine(self.returnTypeName)\n        hasher.combine(self.isAsync)\n        hasher.combine(self.`throws`)\n        hasher.combine(self.throwsTypeName)\n        hasher.combine(self.`rethrows`)\n        hasher.combine(self.accessLevel)\n        hasher.combine(self.isStatic)\n        hasher.combine(self.isClass)\n        hasher.combine(self.isFailableInitializer)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.definedInTypeName)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        hasher.combine(self.genericRequirements)\n        hasher.combine(self.genericParameters)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Method else { return false }\n        if self.name != rhs.name { return false }\n        if self.selectorName != rhs.selectorName { return false }\n        if self.parameters != rhs.parameters { return false }\n        if self.returnTypeName != rhs.returnTypeName { return false }\n        if self.isAsync != rhs.isAsync { return false }\n        if self.isDistributed != rhs.isDistributed { return false }\n        if self.`throws` != rhs.`throws` { return false }\n        if self.throwsTypeName != rhs.throwsTypeName { return false }\n        if self.`rethrows` != rhs.`rethrows` { return false }\n        if self.accessLevel != rhs.accessLevel { return false }\n        if self.isStatic != rhs.isStatic { return false }\n        if self.isClass != rhs.isClass { return false }\n        if self.isFailableInitializer != rhs.isFailableInitializer { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.definedInTypeName != rhs.definedInTypeName { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        if self.genericRequirements != rhs.genericRequirements { return false }\n        if self.genericParameters != rhs.genericParameters { return false }\n        return true\n    }\n\n// sourcery:inline:Method.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let selectorName: String = aDecoder.decode(forKey: \"selectorName\") else { \n                withVaList([\"selectorName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.selectorName = selectorName\n            guard let parameters: [MethodParameter] = aDecoder.decode(forKey: \"parameters\") else { \n                withVaList([\"parameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.parameters = parameters\n            guard let returnTypeName: TypeName = aDecoder.decode(forKey: \"returnTypeName\") else { \n                withVaList([\"returnTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.returnTypeName = returnTypeName\n            self.returnType = aDecoder.decode(forKey: \"returnType\")\n            self.isAsync = aDecoder.decode(forKey: \"isAsync\")\n            self.`throws` = aDecoder.decode(forKey: \"`throws`\")\n            self.throwsTypeName = aDecoder.decode(forKey: \"throwsTypeName\")\n            self.`rethrows` = aDecoder.decode(forKey: \"`rethrows`\")\n            guard let accessLevel: String = aDecoder.decode(forKey: \"accessLevel\") else { \n                withVaList([\"accessLevel\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.accessLevel = accessLevel\n            self.isStatic = aDecoder.decode(forKey: \"isStatic\")\n            self.isClass = aDecoder.decode(forKey: \"isClass\")\n            self.isFailableInitializer = aDecoder.decode(forKey: \"isFailableInitializer\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            self.definedInTypeName = aDecoder.decode(forKey: \"definedInTypeName\")\n            self.definedInType = aDecoder.decode(forKey: \"definedInType\")\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            guard let genericRequirements: [GenericRequirement] = aDecoder.decode(forKey: \"genericRequirements\") else { \n                withVaList([\"genericRequirements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericRequirements = genericRequirements\n            guard let genericParameters: [GenericParameter] = aDecoder.decode(forKey: \"genericParameters\") else { \n                withVaList([\"genericParameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericParameters = genericParameters\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.selectorName, forKey: \"selectorName\")\n            aCoder.encode(self.parameters, forKey: \"parameters\")\n            aCoder.encode(self.returnTypeName, forKey: \"returnTypeName\")\n            aCoder.encode(self.returnType, forKey: \"returnType\")\n            aCoder.encode(self.isAsync, forKey: \"isAsync\")\n            aCoder.encode(self.`throws`, forKey: \"`throws`\")\n            aCoder.encode(self.throwsTypeName, forKey: \"throwsTypeName\")\n            aCoder.encode(self.`rethrows`, forKey: \"`rethrows`\")\n            aCoder.encode(self.accessLevel, forKey: \"accessLevel\")\n            aCoder.encode(self.isStatic, forKey: \"isStatic\")\n            aCoder.encode(self.isClass, forKey: \"isClass\")\n            aCoder.encode(self.isFailableInitializer, forKey: \"isFailableInitializer\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.definedInTypeName, forKey: \"definedInTypeName\")\n            aCoder.encode(self.definedInType, forKey: \"definedInType\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.genericRequirements, forKey: \"genericRequirements\")\n            aCoder.encode(self.genericParameters, forKey: \"genericParameters\")\n        }\n// sourcery:end\n}\n#endif\n\n\"\"\"),\n    .init(name: \"NSException_Linux.swift\", content:\n\"\"\"\n#if !canImport(ObjectiveC)\nimport Foundation\n\npublic class NSException {\n    static func raise(_ name: String, format: String, arguments: CVaListPointer) {\n        fatalError (\"\\\\(name) exception: \\\\(NSString(format: format, arguments: arguments))\")\n    }\n\n    static func raise(_ name: String) {\n        fatalError(\"\\\\(name) exception\")\n    }\n}\n\npublic extension NSExceptionName {\n    static var parseErrorException = \"parseErrorException\"\n}\n#endif\n\n\"\"\"),\n    .init(name: \"Protocol_Linux.swift\", content:\n\"\"\"\n//\n//  Protocol.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zablocki on 09/12/2016.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n\n#if !canImport(ObjectiveC)\n\n/// :nodoc:\npublic typealias SourceryProtocol = Protocol\n\n/// Describes Swift protocol\npublic final class Protocol: Type {\n    public override subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"associatedTypes\":\n                return associatedTypes\n            default:\n                return super[dynamicMember: member]\n        }\n    }\n\n    // sourcery: skipJSExport\n    public class var kind: String { return \"protocol\" }\n\n    /// Returns \"protocol\"\n    public override var kind: String { Self.kind }\n\n    /// list of all declared associated types with their names as keys\n    public var associatedTypes: [String: AssociatedType] {\n        didSet {\n            isGeneric = !associatedTypes.isEmpty || !genericRequirements.isEmpty\n        }\n    }\n\n    // sourcery: skipCoding\n    /// list of generic requirements\n    public override var genericRequirements: [GenericRequirement] {\n        didSet {\n            isGeneric = !associatedTypes.isEmpty || !genericRequirements.isEmpty\n        }\n    }\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                parent: Type? = nil,\n                accessLevel: AccessLevel = .internal,\n                isExtension: Bool = false,\n                variables: [Variable] = [],\n                methods: [Method] = [],\n                subscripts: [Subscript] = [],\n                inheritedTypes: [String] = [],\n                containedTypes: [Type] = [],\n                typealiases: [Typealias] = [],\n                associatedTypes: [String: AssociatedType] = [:],\n                genericRequirements: [GenericRequirement] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                implements: [String: Type] = [:],\n                kind: String = Protocol.kind) {\n        self.associatedTypes = associatedTypes\n        super.init(\n            name: name,\n            parent: parent,\n            accessLevel: accessLevel,\n            isExtension: isExtension,\n            variables: variables,\n            methods: methods,\n            subscripts: subscripts,\n            inheritedTypes: inheritedTypes,\n            containedTypes: containedTypes,\n            typealiases: typealiases,\n            genericRequirements: genericRequirements,\n            attributes: attributes,\n            modifiers: modifiers,\n            annotations: annotations,\n            documentation: documentation,\n            isGeneric: !associatedTypes.isEmpty || !genericRequirements.isEmpty,\n            implements: implements,\n            kind: kind\n        )\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = super.description\n        string.append(\", \")\n        string.append(\"kind = \\\\(String(describing: self.kind)), \")\n        string.append(\"associatedTypes = \\\\(String(describing: self.associatedTypes)), \")\n        return string\n    }\n\n    override public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Protocol else {\n            results.append(\"Incorrect type <expected: Protocol, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"associatedTypes\").trackDifference(actual: self.associatedTypes, expected: castObject.associatedTypes))\n        results.append(contentsOf: super.diffAgainst(castObject))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.associatedTypes)\n        hasher.combine(super.hash)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Protocol else { return false }\n        if self.associatedTypes != rhs.associatedTypes { return false }\n        return super.isEqual(rhs)\n    }\n\n// sourcery:inline:Protocol.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let associatedTypes: [String: AssociatedType] = aDecoder.decode(forKey: \"associatedTypes\") else { \n                withVaList([\"associatedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.associatedTypes = associatedTypes\n            super.init(coder: aDecoder)\n        }\n\n        /// :nodoc:\n        override public func encode(with aCoder: NSCoder) {\n            super.encode(with: aCoder)\n            aCoder.encode(self.associatedTypes, forKey: \"associatedTypes\")\n        }\n// sourcery:end\n}\n#endif\n\"\"\"),\n    .init(name: \"Subscript_Linux.swift\", content:\n\"\"\"\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Describes subscript\npublic final class Subscript: NSObject, SourceryModel, Annotated, Documented, Definition, Diffable, SourceryDynamicMemberLookup {\n\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"parameters\":\n                return parameters\n            case \"returnTypeName\":\n                return returnTypeName\n            case \"actualReturnTypeName\":\n                return actualReturnTypeName\n            case \"returnType\":\n                return returnType\n            case \"isOptionalReturnType\":\n                return isOptionalReturnType\n            case \"isImplicitlyUnwrappedOptionalReturnType\":\n                return isImplicitlyUnwrappedOptionalReturnType\n            case \"unwrappedReturnTypeName\":\n                return unwrappedReturnTypeName\n            case \"isFinal\":\n                return isFinal\n            case \"readAccess\":\n                return readAccess\n            case \"writeAccess\":\n                return writeAccess\n            case \"isAsync\":\n                return isAsync\n            case \"throws\":\n                return `throws`\n            case \"throwsTypeName\":\n                return throwsTypeName\n            case \"isMutable\":\n                return isMutable\n            case \"annotations\":\n                return annotations\n            case \"documentation\":\n                return documentation\n            case \"definedInTypeName\":\n                return definedInTypeName\n            case \"actualDefinedInTypeName\":\n                return actualDefinedInTypeName\n            case \"attributes\":\n                return attributes\n            case \"modifiers\":\n                return modifiers\n            case \"genericParameters\":\n                return genericParameters\n            case \"genericRequirements\":\n                return genericRequirements\n            case \"isGeneric\":\n                return isGeneric\n            default:\n                fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }\n    }\n\n    /// Method parameters\n    public var parameters: [MethodParameter]\n\n    /// Return value type name used in declaration, including generic constraints, i.e. `where T: Equatable`\n    public var returnTypeName: TypeName\n\n    /// Actual return value type name if declaration uses typealias, otherwise just a `returnTypeName`\n    public var actualReturnTypeName: TypeName {\n        return returnTypeName.actualTypeName ?? returnTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Actual return value type, if known\n    public var returnType: Type?\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is optional\n    public var isOptionalReturnType: Bool {\n        return returnTypeName.isOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Whether return value type is implicitly unwrapped optional\n    public var isImplicitlyUnwrappedOptionalReturnType: Bool {\n        return returnTypeName.isImplicitlyUnwrappedOptional\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Return value type name without attributes and optional type information\n    public var unwrappedReturnTypeName: String {\n        return returnTypeName.unwrappedTypeName\n    }\n\n    /// Whether method is final\n    public var isFinal: Bool {\n        modifiers.contains { $0.name == \"final\" }\n    }\n\n    /// Variable read access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let readAccess: String\n\n    /// Variable write access, i.e. `internal`, `private`, `fileprivate`, `public`, `open`.\n    /// For immutable variables this value is empty string\n    public var writeAccess: String\n\n    /// Whether subscript is async\n    public let isAsync: Bool\n\n    /// Whether subscript throws\n    public let `throws`: Bool\n\n    /// Type of thrown error if specified\n    public let throwsTypeName: TypeName?\n\n    /// Whether variable is mutable or not\n    public var isMutable: Bool {\n        return writeAccess != AccessLevel.none.rawValue\n    }\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public let annotations: Annotations\n\n    public let documentation: Documentation\n\n    /// Reference to type name where the method is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc\n    public let definedInTypeName: TypeName?\n\n    /// Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a `definedInTypeName`\n    public var actualDefinedInTypeName: TypeName? {\n        return definedInTypeName?.actualTypeName ?? definedInTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Reference to actual type where the object is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc or type is unknown\n    public var definedInType: Type?\n\n    /// Method attributes, i.e. `@discardableResult`\n    public let attributes: AttributeList\n\n    /// Method modifiers, i.e. `private`\n    public let modifiers: [SourceryModifier]\n\n    /// list of generic parameters\n    public let genericParameters: [GenericParameter]\n\n    /// list of generic requirements\n    public let genericRequirements: [GenericRequirement]\n\n    /// Whether subscript is generic or not\n    public var isGeneric: Bool {\n        return genericParameters.isEmpty == false\n    }\n\n    // Underlying parser data, never to be used by anything else\n    // sourcery: skipEquality, skipDescription, skipCoding, skipJSExport\n    /// :nodoc:\n    public var __parserData: Any?\n\n    /// :nodoc:\n    public init(parameters: [MethodParameter] = [],\n                returnTypeName: TypeName,\n                accessLevel: (read: AccessLevel, write: AccessLevel) = (.internal, .internal),\n                isAsync: Bool = false,\n                `throws`: Bool = false,\n                throwsTypeName: TypeName? = nil,\n                genericParameters: [GenericParameter] = [],\n                genericRequirements: [GenericRequirement] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                definedInTypeName: TypeName? = nil) {\n\n        self.parameters = parameters\n        self.returnTypeName = returnTypeName\n        self.readAccess = accessLevel.read.rawValue\n        self.writeAccess = accessLevel.write.rawValue\n        self.isAsync = isAsync\n        self.throws = `throws`\n        self.throwsTypeName = throwsTypeName\n        self.genericParameters = genericParameters\n        self.genericRequirements = genericRequirements\n        self.attributes = attributes\n        self.modifiers = modifiers\n        self.annotations = annotations\n        self.documentation = documentation\n        self.definedInTypeName = definedInTypeName\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"parameters = \\\\(String(describing: self.parameters)), \")\n        string.append(\"returnTypeName = \\\\(String(describing: self.returnTypeName)), \")\n        string.append(\"actualReturnTypeName = \\\\(String(describing: self.actualReturnTypeName)), \")\n        string.append(\"isFinal = \\\\(String(describing: self.isFinal)), \")\n        string.append(\"readAccess = \\\\(String(describing: self.readAccess)), \")\n        string.append(\"writeAccess = \\\\(String(describing: self.writeAccess)), \")\n        string.append(\"isAsync = \\\\(String(describing: self.isAsync)), \")\n        string.append(\"`throws` = \\\\(String(describing: self.throws)), \")\n        string.append(\"throwsTypeName = \\\\(String(describing: self.throwsTypeName)), \")\n        string.append(\"isMutable = \\\\(String(describing: self.isMutable)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\\\(String(describing: self.documentation)), \")\n        string.append(\"definedInTypeName = \\\\(String(describing: self.definedInTypeName)), \")\n        string.append(\"actualDefinedInTypeName = \\\\(String(describing: self.actualDefinedInTypeName)), \")\n        string.append(\"genericParameters = \\\\(String(describing: self.genericParameters)), \")\n        string.append(\"genericRequirements = \\\\(String(describing: self.genericRequirements)), \")\n        string.append(\"isGeneric = \\\\(String(describing: self.isGeneric)), \")\n        string.append(\"attributes = \\\\(String(describing: self.attributes)), \")\n        string.append(\"modifiers = \\\\(String(describing: self.modifiers))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Subscript else {\n            results.append(\"Incorrect type <expected: Subscript, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"parameters\").trackDifference(actual: self.parameters, expected: castObject.parameters))\n        results.append(contentsOf: DiffableResult(identifier: \"returnTypeName\").trackDifference(actual: self.returnTypeName, expected: castObject.returnTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"readAccess\").trackDifference(actual: self.readAccess, expected: castObject.readAccess))\n        results.append(contentsOf: DiffableResult(identifier: \"writeAccess\").trackDifference(actual: self.writeAccess, expected: castObject.writeAccess))\n        results.append(contentsOf: DiffableResult(identifier: \"isAsync\").trackDifference(actual: self.isAsync, expected: castObject.isAsync))\n        results.append(contentsOf: DiffableResult(identifier: \"`throws`\").trackDifference(actual: self.throws, expected: castObject.throws))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsTypeName\").trackDifference(actual: self.throwsTypeName, expected: castObject.throwsTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"definedInTypeName\").trackDifference(actual: self.definedInTypeName, expected: castObject.definedInTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"genericParameters\").trackDifference(actual: self.genericParameters, expected: castObject.genericParameters))\n        results.append(contentsOf: DiffableResult(identifier: \"genericRequirements\").trackDifference(actual: self.genericRequirements, expected: castObject.genericRequirements))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.parameters)\n        hasher.combine(self.returnTypeName)\n        hasher.combine(self.readAccess)\n        hasher.combine(self.writeAccess)\n        hasher.combine(self.isAsync)\n        hasher.combine(self.throws)\n        hasher.combine(self.throwsTypeName)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.definedInTypeName)\n        hasher.combine(self.genericParameters)\n        hasher.combine(self.genericRequirements)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Subscript else { return false }\n        if self.parameters != rhs.parameters { return false }\n        if self.returnTypeName != rhs.returnTypeName { return false }\n        if self.readAccess != rhs.readAccess { return false }\n        if self.writeAccess != rhs.writeAccess { return false }\n        if self.isAsync != rhs.isAsync { return false }\n        if self.throws != rhs.throws { return false }\n        if self.throwsTypeName != rhs.throwsTypeName { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.definedInTypeName != rhs.definedInTypeName { return false }\n        if self.genericParameters != rhs.genericParameters { return false }\n        if self.genericRequirements != rhs.genericRequirements { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        return true\n    }\n\n// sourcery:inline:Subscript.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let parameters: [MethodParameter] = aDecoder.decode(forKey: \"parameters\") else { \n                withVaList([\"parameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.parameters = parameters\n            guard let returnTypeName: TypeName = aDecoder.decode(forKey: \"returnTypeName\") else { \n                withVaList([\"returnTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.returnTypeName = returnTypeName\n            self.returnType = aDecoder.decode(forKey: \"returnType\")\n            guard let readAccess: String = aDecoder.decode(forKey: \"readAccess\") else { \n                withVaList([\"readAccess\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.readAccess = readAccess\n            guard let writeAccess: String = aDecoder.decode(forKey: \"writeAccess\") else { \n                withVaList([\"writeAccess\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.writeAccess = writeAccess\n            self.isAsync = aDecoder.decode(forKey: \"isAsync\")\n            self.`throws` = aDecoder.decode(forKey: \"`throws`\")\n            self.throwsTypeName = aDecoder.decode(forKey: \"throwsTypeName\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            self.definedInTypeName = aDecoder.decode(forKey: \"definedInTypeName\")\n            self.definedInType = aDecoder.decode(forKey: \"definedInType\")\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            guard let genericParameters: [GenericParameter] = aDecoder.decode(forKey: \"genericParameters\") else { \n                withVaList([\"genericParameters\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericParameters = genericParameters\n            guard let genericRequirements: [GenericRequirement] = aDecoder.decode(forKey: \"genericRequirements\") else { \n                withVaList([\"genericRequirements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericRequirements = genericRequirements\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.parameters, forKey: \"parameters\")\n            aCoder.encode(self.returnTypeName, forKey: \"returnTypeName\")\n            aCoder.encode(self.returnType, forKey: \"returnType\")\n            aCoder.encode(self.readAccess, forKey: \"readAccess\")\n            aCoder.encode(self.writeAccess, forKey: \"writeAccess\")\n            aCoder.encode(self.isAsync, forKey: \"isAsync\")\n            aCoder.encode(self.`throws`, forKey: \"`throws`\")\n            aCoder.encode(self.throwsTypeName, forKey: \"throwsTypeName\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.definedInTypeName, forKey: \"definedInTypeName\")\n            aCoder.encode(self.definedInType, forKey: \"definedInType\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.genericParameters, forKey: \"genericParameters\")\n            aCoder.encode(self.genericRequirements, forKey: \"genericRequirements\")\n        }\n// sourcery:end\n\n}\n#endif\n\n\"\"\"),\n    .init(name: \"Tuple_Linux.swift\", content:\n\"\"\"\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Describes tuple type\npublic final class TupleType: NSObject, SourceryModel, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"elements\":\n                return elements\n            default:\n                fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }\n    }\n\n    /// Type name used in declaration\n    public var name: String\n\n    /// Tuple elements\n    public var elements: [TupleElement]\n\n    /// :nodoc:\n    public init(name: String, elements: [TupleElement]) {\n        self.name = name\n        self.elements = elements\n    }\n\n    /// :nodoc:\n    public init(elements: [TupleElement]) {\n        self.name = elements.asSource\n        self.elements = elements\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"elements = \\\\(String(describing: self.elements))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? TupleType else {\n            results.append(\"Incorrect type <expected: TupleType, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"elements\").trackDifference(actual: self.elements, expected: castObject.elements))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.elements)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? TupleType else { return false }\n        if self.name != rhs.name { return false }\n        if self.elements != rhs.elements { return false }\n        return true\n    }\n\n// sourcery:inline:TupleType.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let elements: [TupleElement] = aDecoder.decode(forKey: \"elements\") else { \n                withVaList([\"elements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.elements = elements\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.elements, forKey: \"elements\")\n        }\n// sourcery:end\n}\n\n/// Describes tuple type element\npublic final class TupleElement: NSObject, SourceryModel, Typed, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"name\":\n                return name\n            case \"typeName\":\n                return typeName\n            case \"type\":\n                return type\n            default:\n                fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }\n    }\n\n    /// Tuple element name\n    public let name: String?\n\n    /// Tuple element type name\n    public var typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Tuple element type, if known\n    public var type: Type?\n\n    /// :nodoc:\n    public init(name: String? = nil, typeName: TypeName, type: Type? = nil) {\n        self.name = name\n        self.typeName = typeName\n        self.type = type\n    }\n\n    public var asSource: String {\n        // swiftlint:disable:next force_unwrapping\n        \"\\\\(name != nil ? \"\\\\(name!): \" : \"\")\\\\(typeName.asSource)\"\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"typeName = \\\\(String(describing: self.typeName)), \")\n        string.append(\"asSource = \\\\(String(describing: self.asSource))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? TupleElement else {\n            results.append(\"Incorrect type <expected: TupleElement, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? TupleElement else { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        return true\n    }\n\n// sourcery:inline:TupleElement.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.name = aDecoder.decode(forKey: \"name\")\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n        }\n// sourcery:end\n}\n\nextension Array where Element == TupleElement {\n    public var asSource: String {\n        \"(\\\\(map { $0.asSource }.joined(separator: \", \")))\"\n    }\n\n    public var asTypeName: String {\n        \"(\\\\(map { $0.typeName.asSource }.joined(separator: \", \")))\"\n    }\n}\n#endif\n\n\"\"\"),\n    .init(name: \"TypeName_Linux.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zabłocki on 25/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// Describes name of the type used in typed declaration (variable, method parameter or return value etc.)\npublic final class TypeName: NSObject, SourceryModelWithoutDescription, LosslessStringConvertible, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"array\":\n                return array\n            case \"closure\":\n                return closure\n            case \"dictionary\":\n                return dictionary\n            case \"generic\":\n                return generic\n            case \"set\":\n                return set\n            case \"tuple\":\n                return tuple\n            case \"name\":\n                return name\n            case \"actualTypeName\":\n                return actualTypeName\n            case \"isOptional\":\n                return isOptional\n            case \"unwrappedTypeName\":\n                return unwrappedTypeName\n            case \"isProtocolComposition\":\n                return isProtocolComposition\n            case \"isVoid\":\n                return isVoid\n            case \"isArray\":\n                return isArray\n            case \"isClosure\":\n                return isClosure\n            case \"isDictionary\":\n                return isDictionary\n            case \"isGeneric\":\n                return isGeneric\n            case \"isSet\":\n                return isSet\n            default:\n                fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }\n    }\n\n    /// :nodoc:\n    public init(name: String,\n                actualTypeName: TypeName? = nil,\n                unwrappedTypeName: String? = nil,\n                attributes: AttributeList = [:],\n                isOptional: Bool = false,\n                isImplicitlyUnwrappedOptional: Bool = false,\n                tuple: TupleType? = nil,\n                array: ArrayType? = nil,\n                dictionary: DictionaryType? = nil,\n                closure: ClosureType? = nil,\n                set: SetType? = nil,\n                generic: GenericType? = nil,\n                isProtocolComposition: Bool = false) {\n\n        let optionalSuffix: String\n        // TODO: TBR\n        if !name.hasPrefix(\"Optional<\") && !name.contains(\" where \") {\n            if isOptional {\n                optionalSuffix = \"?\"\n            } else if isImplicitlyUnwrappedOptional {\n                optionalSuffix = \"!\"\n            } else {\n                optionalSuffix = \"\"\n            }\n        } else {\n            optionalSuffix = \"\"\n        }\n\n        self.name = name + optionalSuffix\n        self.actualTypeName = actualTypeName\n        self.unwrappedTypeName = unwrappedTypeName ?? name\n        self.tuple = tuple\n        self.array = array\n        self.dictionary = dictionary\n        self.closure = closure\n        self.generic = generic\n        self.isOptional = isOptional || isImplicitlyUnwrappedOptional\n        self.isImplicitlyUnwrappedOptional = isImplicitlyUnwrappedOptional\n        self.isProtocolComposition = isProtocolComposition\n        self.set = set\n        self.attributes = attributes\n        self.modifiers = []\n        super.init()\n    }\n\n    /// Type name used in declaration\n    public var name: String\n\n    /// The generics of this TypeName\n    public var generic: GenericType?\n\n    /// Whether this TypeName is generic\n    public var isGeneric: Bool {\n        actualTypeName?.generic != nil || generic != nil\n    }\n\n    /// Whether this TypeName is protocol composition\n    public var isProtocolComposition: Bool\n\n    // sourcery: skipEquality\n    /// Actual type name if given type name is a typealias\n    public var actualTypeName: TypeName?\n\n    /// Type name attributes, i.e. `@escaping`\n    public var attributes: AttributeList\n\n    /// Modifiers, i.e. `escaping`\n    public var modifiers: [SourceryModifier]\n\n    // sourcery: skipEquality\n    /// Whether type is optional\n    public let isOptional: Bool\n\n    // sourcery: skipEquality\n    /// Whether type is implicitly unwrapped optional\n    public let isImplicitlyUnwrappedOptional: Bool\n\n    // sourcery: skipEquality\n    /// Type name without attributes and optional type information\n    public var unwrappedTypeName: String\n\n    // sourcery: skipEquality\n    /// Whether type is void (`Void` or `()`)\n    public var isVoid: Bool {\n        return name == \"Void\" || name == \"()\" || unwrappedTypeName == \"Void\"\n    }\n\n    /// Whether type is a tuple\n    public var isTuple: Bool {\n        actualTypeName?.tuple != nil || tuple != nil\n    }\n\n    /// Tuple type data\n    public var tuple: TupleType?\n\n    /// Whether type is an array\n    public var isArray: Bool {\n        actualTypeName?.array != nil || array != nil\n    }\n\n    /// Array type data\n    public var array: ArrayType?\n\n    /// Whether type is a dictionary\n    public var isDictionary: Bool {\n        actualTypeName?.dictionary != nil || dictionary != nil\n    }\n\n    /// Dictionary type data\n    public var dictionary: DictionaryType?\n\n    /// Whether type is a closure\n    public var isClosure: Bool {\n        actualTypeName?.closure != nil || closure != nil\n    }\n\n    /// Closure type data\n    public var closure: ClosureType?\n\n    /// Whether type is a Set\n    public var isSet: Bool {\n        actualTypeName?.set != nil || set != nil\n    }\n\n    /// Set type data\n    public var set: SetType?\n\n    /// Whether type is `Never`\n    public var isNever: Bool {\n        return name == \"Never\"\n    }\n\n    /// Prints typename as it would appear on definition\n    public var asSource: String {\n        // TODO: TBR special treatment\n        let specialTreatment = isOptional && name.hasPrefix(\"Optional<\")\n\n        var description = (\n          attributes.flatMap({ $0.value }).map({ $0.asSource }).sorted() +\n          modifiers.map({ $0.asSource }) +\n          [specialTreatment ? name : unwrappedTypeName]\n        ).joined(separator: \" \")\n\n        if let _ = self.dictionary { // array and dictionary cases are covered by the unwrapped type name\n//            description.append(dictionary.asSource)\n        } else if let _ = self.array {\n//            description.append(array.asSource)\n        } else if let _ = self.generic {\n//            let arguments = generic.typeParameters\n//              .map({ $0.typeName.asSource })\n//              .joined(separator: \", \")\n//            description.append(\"<\\\\(arguments)>\")\n        }\n        if !specialTreatment {\n            if isImplicitlyUnwrappedOptional {\n                description.append(\"!\")\n            } else if isOptional {\n                description.append(\"?\")\n            }\n        }\n\n        return description\n    }\n\n    public override var description: String {\n       (\n          attributes.flatMap({ $0.value }).map({ $0.asSource }).sorted() +\n          modifiers.map({ $0.asSource }) +\n          [name]\n        ).joined(separator: \" \")\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? TypeName else {\n            results.append(\"Incorrect type <expected: TypeName, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"generic\").trackDifference(actual: self.generic, expected: castObject.generic))\n        results.append(contentsOf: DiffableResult(identifier: \"isProtocolComposition\").trackDifference(actual: self.isProtocolComposition, expected: castObject.isProtocolComposition))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        results.append(contentsOf: DiffableResult(identifier: \"tuple\").trackDifference(actual: self.tuple, expected: castObject.tuple))\n        results.append(contentsOf: DiffableResult(identifier: \"array\").trackDifference(actual: self.array, expected: castObject.array))\n        results.append(contentsOf: DiffableResult(identifier: \"dictionary\").trackDifference(actual: self.dictionary, expected: castObject.dictionary))\n        results.append(contentsOf: DiffableResult(identifier: \"closure\").trackDifference(actual: self.closure, expected: castObject.closure))\n        results.append(contentsOf: DiffableResult(identifier: \"set\").trackDifference(actual: self.set, expected: castObject.set))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.generic)\n        hasher.combine(self.isProtocolComposition)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        hasher.combine(self.tuple)\n        hasher.combine(self.array)\n        hasher.combine(self.dictionary)\n        hasher.combine(self.closure)\n        hasher.combine(self.set)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? TypeName else { return false }\n        if self.name != rhs.name { return false }\n        if self.generic != rhs.generic { return false }\n        if self.isProtocolComposition != rhs.isProtocolComposition { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        if self.tuple != rhs.tuple { return false }\n        if self.array != rhs.array { return false }\n        if self.dictionary != rhs.dictionary { return false }\n        if self.closure != rhs.closure { return false }\n        if self.set != rhs.set { return false }\n        return true\n    }\n\n// sourcery:inline:TypeName.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            self.generic = aDecoder.decode(forKey: \"generic\")\n            self.isProtocolComposition = aDecoder.decode(forKey: \"isProtocolComposition\")\n            self.actualTypeName = aDecoder.decode(forKey: \"actualTypeName\")\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            self.isOptional = aDecoder.decode(forKey: \"isOptional\")\n            self.isImplicitlyUnwrappedOptional = aDecoder.decode(forKey: \"isImplicitlyUnwrappedOptional\")\n            guard let unwrappedTypeName: String = aDecoder.decode(forKey: \"unwrappedTypeName\") else { \n                withVaList([\"unwrappedTypeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.unwrappedTypeName = unwrappedTypeName\n            self.tuple = aDecoder.decode(forKey: \"tuple\")\n            self.array = aDecoder.decode(forKey: \"array\")\n            self.dictionary = aDecoder.decode(forKey: \"dictionary\")\n            self.closure = aDecoder.decode(forKey: \"closure\")\n            self.set = aDecoder.decode(forKey: \"set\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.generic, forKey: \"generic\")\n            aCoder.encode(self.isProtocolComposition, forKey: \"isProtocolComposition\")\n            aCoder.encode(self.actualTypeName, forKey: \"actualTypeName\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.isOptional, forKey: \"isOptional\")\n            aCoder.encode(self.isImplicitlyUnwrappedOptional, forKey: \"isImplicitlyUnwrappedOptional\")\n            aCoder.encode(self.unwrappedTypeName, forKey: \"unwrappedTypeName\")\n            aCoder.encode(self.tuple, forKey: \"tuple\")\n            aCoder.encode(self.array, forKey: \"array\")\n            aCoder.encode(self.dictionary, forKey: \"dictionary\")\n            aCoder.encode(self.closure, forKey: \"closure\")\n            aCoder.encode(self.set, forKey: \"set\")\n        }\n// sourcery:end\n\n    // sourcery: skipEquality, skipDescription\n    /// :nodoc:\n    public override var debugDescription: String {\n        return name\n    }\n\n    public convenience init(_ description: String) {\n        self.init(name: description, actualTypeName: nil)\n    }\n}\n\nextension TypeName {\n    public static func unknown(description: String?, attributes: AttributeList = [:]) -> TypeName {\n        if let description = description {\n            Log.astWarning(\"Unknown type, please add type attribution to \\\\(description)\")\n        } else {\n            Log.astWarning(\"Unknown type, please add type attribution\")\n        }\n        return TypeName(name: \"UnknownTypeSoAddTypeAttributionToVariable\", attributes: attributes)\n    }\n}\n#endif\n\n\"\"\"),\n    .init(name: \"Type_Linux.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 11/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// :nodoc:\npublic typealias AttributeList = [String: [Attribute]]\n\n/// Defines Swift type\npublic class Type: NSObject, SourceryModel, Annotated, Documented, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"implements\":\n                return implements\n            case \"name\":\n                return name\n            case \"kind\":\n                return kind\n            case \"based\":\n                return based\n            case \"supertype\":\n                return supertype\n            case \"accessLevel\":\n                return accessLevel\n            case \"storedVariables\":\n                return storedVariables\n            case \"variables\":\n                return variables\n            case \"allVariables\":\n                return allVariables\n            case \"allMethods\":\n                return allMethods\n            case \"annotations\":\n                return annotations\n            case \"methods\":\n                return methods\n            case \"containedType\":\n                return containedType\n            case \"computedVariables\":\n                return computedVariables\n            case \"inherits\":\n                return inherits\n            case \"inheritedTypes\":\n                return inheritedTypes\n            case \"subscripts\":\n                return subscripts\n            case \"rawSubscripts\":\n                return rawSubscripts\n            case \"allSubscripts\":\n                return allSubscripts\n            case \"genericRequirements\":\n                return genericRequirements\n            default:\n                fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }   \n    }\n\n    /// :nodoc:\n    public var module: String?\n\n    /// Imports that existed in the file that contained this type declaration\n    public var imports: [Import] = []\n\n    // sourcery: skipEquality\n    /// Imports existed in all files containing this type and all its super classes/protocols\n    public var allImports: [Import] {\n        return self.unique({ $0.gatherAllImports() }, filter: { $0 == $1 })\n    }\n\n    private func gatherAllImports() -> [Import] {\n        var allImports: [Import] = Array(self.imports)\n\n        self.basedTypes.values.forEach { (basedType) in\n            allImports.append(contentsOf: basedType.imports)\n        }\n        return allImports\n    }\n\n    // All local typealiases\n    /// :nodoc:\n    public var typealiases: [String: Typealias] {\n        didSet {\n            typealiases.values.forEach { $0.parent = self }\n        }\n    }\n\n    // sourcery: skipJSExport\n    /// Whether declaration is an extension of some type\n    public var isExtension: Bool\n\n    // sourcery: forceEquality\n    /// Kind of type declaration, i.e. `enum`, `struct`, `class`, `protocol` or `extension`\n    public var kind: String { isExtension ? \"extension\" : _kind }\n\n    // sourcery: skipJSExport\n    /// Kind of a backing store for `self.kind`\n    private var _kind: String\n\n    /// Type access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let accessLevel: String\n\n    /// Type name in global scope. For inner types includes the name of its containing type, i.e. `Type.Inner`\n    public var name: String {\n        guard let parentName = parent?.name else { return localName }\n        return \"\\\\(parentName).\\\\(localName)\"\n    }\n\n    // sourcery: skipCoding\n    /// Whether the type has been resolved as unknown extension\n    public var isUnknownExtension: Bool = false\n\n    // sourcery: skipDescription\n    /// Global type name including module name, unless it's an extension of unknown type\n    public var globalName: String {\n        guard let module = module, !isUnknownExtension else { return name }\n        return \"\\\\(module).\\\\(name)\"\n    }\n\n    /// Whether type is generic\n    public var isGeneric: Bool\n\n    /// Type name in its own scope.\n    public var localName: String\n\n    // sourcery: skipEquality, skipDescription\n    /// Variables defined in this type only, inluding variables defined in its extensions,\n    /// but not including variables inherited from superclasses (for classes only) and protocols\n    public var variables: [Variable] {\n        unique({ $0.rawVariables }, filter: Self.uniqueVariableFilter)\n    }\n\n    /// Unfiltered (can contain duplications from extensions) variables defined in this type only, inluding variables defined in its extensions,\n    /// but not including variables inherited from superclasses (for classes only) and protocols\n    public var rawVariables: [Variable]\n\n    // sourcery: skipEquality, skipDescription\n    /// All variables defined for this type, including variables defined in extensions,\n    /// in superclasses (for classes only) and protocols\n    public var allVariables: [Variable] {\n        return flattenAll({\n            return $0.variables\n        },\n        isExtension: { $0.definedInType?.isExtension == true },\n        filter: { all, extracted in\n            !all.contains(where: { Self.uniqueVariableFilter($0, rhs: extracted) })\n        })\n    }\n\n    private static func uniqueVariableFilter(_ lhs: Variable, rhs: Variable) -> Bool {\n        return lhs.name == rhs.name && lhs.isStatic == rhs.isStatic && lhs.typeName == rhs.typeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Methods defined in this type only, inluding methods defined in its extensions,\n    /// but not including methods inherited from superclasses (for classes only) and protocols\n    public var methods: [Method] {\n        unique({ $0.rawMethods }, filter: Self.uniqueMethodFilter)\n    }\n\n    /// Unfiltered (can contain duplications from extensions) methods defined in this type only, inluding methods defined in its extensions,\n    /// but not including methods inherited from superclasses (for classes only) and protocols\n    public var rawMethods: [Method]\n\n    // sourcery: skipEquality, skipDescription\n    /// All methods defined for this type, including methods defined in extensions,\n    /// in superclasses (for classes only) and protocols\n    public var allMethods: [Method] {\n        return flattenAll({\n            $0.methods\n        },\n        isExtension: { $0.definedInType?.isExtension == true },\n        filter: { all, extracted in\n            !all.contains(where: { Self.uniqueMethodFilter($0, rhs: extracted) })\n        })\n    }\n\n    private static func uniqueMethodFilter(_ lhs: Method, rhs: Method) -> Bool {\n        return lhs.name == rhs.name && lhs.isStatic == rhs.isStatic && lhs.isClass == rhs.isClass && lhs.actualReturnTypeName == rhs.actualReturnTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Subscripts defined in this type only, inluding subscripts defined in its extensions,\n    /// but not including subscripts inherited from superclasses (for classes only) and protocols\n    public var subscripts: [Subscript] {\n        unique({ $0.rawSubscripts }, filter: Self.uniqueSubscriptFilter)\n    }\n\n    /// Unfiltered (can contain duplications from extensions) Subscripts defined in this type only, inluding subscripts defined in its extensions,\n    /// but not including subscripts inherited from superclasses (for classes only) and protocols\n    public var rawSubscripts: [Subscript]\n\n    // sourcery: skipEquality, skipDescription\n    /// All subscripts defined for this type, including subscripts defined in extensions,\n    /// in superclasses (for classes only) and protocols\n    public var allSubscripts: [Subscript] {\n        return flattenAll({ $0.subscripts },\n            isExtension: { $0.definedInType?.isExtension == true },\n            filter: { all, extracted in\n                !all.contains(where: { Self.uniqueSubscriptFilter($0, rhs: extracted) })\n            })\n    }\n\n    private static func uniqueSubscriptFilter(_ lhs: Subscript, rhs: Subscript) -> Bool {\n        return lhs.parameters == rhs.parameters && lhs.returnTypeName == rhs.returnTypeName && lhs.readAccess == rhs.readAccess && lhs.writeAccess == rhs.writeAccess\n    }\n\n    // sourcery: skipEquality, skipDescription, skipJSExport\n    /// Bytes position of the body of this type in its declaration file if available.\n    public var bodyBytesRange: BytesRange?\n\n    // sourcery: skipEquality, skipDescription, skipJSExport\n    /// Bytes position of the whole declaration of this type in its declaration file if available.\n    public var completeDeclarationRange: BytesRange?\n\n    private func flattenAll<T>(_ extraction: @escaping (Type) -> [T], isExtension: (T) -> Bool, filter: ([T], T) -> Bool) -> [T] {\n        let all = NSMutableOrderedSet()\n        let allObjects = extraction(self)\n\n        /// The order of importance for properties is:\n        /// Base class\n        /// Inheritance\n        /// Protocol conformance\n        /// Extension\n\n        var extensions = [T]()\n        var baseObjects = [T]()\n\n        allObjects.forEach {\n            if isExtension($0) {\n                extensions.append($0)\n            } else {\n                baseObjects.append($0)\n            }\n        }\n\n        all.addObjects(from: baseObjects)\n\n        func filteredExtraction(_ target: Type) -> [T] {\n            // swiftlint:disable:next force_cast\n            let all = all.array as! [T]\n            let extracted = extraction(target).filter({ filter(all, $0) })\n            return extracted\n        }\n\n        inherits.values.sorted(by: { $0.name < $1.name }).forEach { all.addObjects(from: filteredExtraction($0)) }\n        implements.values.sorted(by: { $0.name < $1.name }).forEach { all.addObjects(from: filteredExtraction($0)) }\n\n        // swiftlint:disable:next force_cast\n        let array = all.array as! [T]\n        all.addObjects(from: extensions.filter({ filter(array, $0) }))\n\n        return all.array.compactMap { $0 as? T }\n    }\n\n    private func unique<T>(_ extraction: @escaping (Type) -> [T], filter: (T, T) -> Bool) -> [T] {\n        let all = NSMutableOrderedSet()\n        for nextItem in extraction(self) {\n            // swiftlint:disable:next force_cast\n            if !all.contains(where: { filter($0 as! T, nextItem) }) {\n                all.add(nextItem)\n            }\n        }\n\n        return all.array.compactMap { $0 as? T }\n    }\n\n    /// All initializers defined in this type\n    public var initializers: [Method] {\n        return methods.filter { $0.isInitializer }\n    }\n\n    /// All annotations for this type\n    public var annotations: Annotations = [:]\n\n    public var documentation: Documentation = []\n\n    /// Static variables defined in this type\n    public var staticVariables: [Variable] {\n        return variables.filter { $0.isStatic }\n    }\n\n    /// Static methods defined in this type\n    public var staticMethods: [Method] {\n        return methods.filter { $0.isStatic }\n    }\n\n    /// Class methods defined in this type\n    public var classMethods: [Method] {\n        return methods.filter { $0.isClass }\n    }\n\n    /// Instance variables defined in this type\n    public var instanceVariables: [Variable] {\n        return variables.filter { !$0.isStatic }\n    }\n\n    /// Instance methods defined in this type\n    public var instanceMethods: [Method] {\n        return methods.filter { !$0.isStatic && !$0.isClass }\n    }\n\n    /// Computed instance variables defined in this type\n    public var computedVariables: [Variable] {\n        return variables.filter { $0.isComputed && !$0.isStatic }\n    }\n\n    /// Stored instance variables defined in this type\n    public var storedVariables: [Variable] {\n        return variables.filter { !$0.isComputed && !$0.isStatic }\n    }\n\n    /// Names of types this type inherits from (for classes only) and protocols it implements, in order of definition\n    public var inheritedTypes: [String] {\n        didSet {\n            based.removeAll()\n            inheritedTypes.forEach { name in\n                self.based[name] = name\n            }\n        }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Names of types or protocols this type inherits from, including unknown (not scanned) types\n    public var based = [String: String]()\n\n    // sourcery: skipEquality, skipDescription\n    /// Types this type inherits from or implements, including unknown (not scanned) types with extensions defined\n    public var basedTypes = [String: Type]()\n\n    /// Types this type inherits from\n    public var inherits = [String: Type]()\n\n    // sourcery: skipEquality, skipDescription\n    /// Protocols this type implements. Does not contain classes in case where composition (`&`) is used in the declaration\n    public var implements = [String: Type]()\n\n    /// Contained types\n    public var containedTypes: [Type] {\n        didSet {\n            containedTypes.forEach {\n                containedType[$0.localName] = $0\n                $0.parent = self\n            }\n        }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Contained types groupd by their names\n    public private(set) var containedType: [String: Type] = [:]\n\n    /// Name of parent type (for contained types only)\n    public private(set) var parentName: String?\n\n    // sourcery: skipEquality, skipDescription\n    /// Parent type, if known (for contained types only)\n    public var parent: Type? {\n        didSet {\n            parentName = parent?.name\n        }\n    }\n\n    // sourcery: skipJSExport\n    /// :nodoc:\n    public var parentTypes: AnyIterator<Type> {\n        var next: Type? = self\n        return AnyIterator {\n            next = next?.parent\n            return next\n        }\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Superclass type, if known (only for classes)\n    public var supertype: Type?\n\n    /// Type attributes, i.e. `@objc`\n    public var attributes: AttributeList\n\n    /// Type modifiers, i.e. `private`, `final`\n    public var modifiers: [SourceryModifier]\n\n    /// Path to file where the type is defined\n    // sourcery: skipDescription, skipEquality, skipJSExport\n    public var path: String? {\n        didSet {\n            if let path = path {\n                fileName = (path as NSString).lastPathComponent\n            }\n        }\n    }\n\n    /// Directory to file where the type is defined\n    // sourcery: skipDescription, skipEquality, skipJSExport\n    public var directory: String? {\n        get {\n            return (path as? NSString)?.deletingLastPathComponent\n        }\n    }\n\n    /// list of generic requirements\n    public var genericRequirements: [GenericRequirement] {\n        didSet {\n            isGeneric = isGeneric || !genericRequirements.isEmpty\n        }\n    }\n\n    /// File name where the type was defined\n    public var fileName: String?\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                parent: Type? = nil,\n                accessLevel: AccessLevel = .internal,\n                isExtension: Bool = false,\n                variables: [Variable] = [],\n                methods: [Method] = [],\n                subscripts: [Subscript] = [],\n                inheritedTypes: [String] = [],\n                containedTypes: [Type] = [],\n                typealiases: [Typealias] = [],\n                genericRequirements: [GenericRequirement] = [],\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                isGeneric: Bool = false,\n                implements: [String: Type] = [:],\n                kind: String = \"unknown\") {\n        self.localName = name\n        self.accessLevel = accessLevel.rawValue\n        self.isExtension = isExtension\n        self.rawVariables = variables\n        self.rawMethods = methods\n        self.rawSubscripts = subscripts\n        self.inheritedTypes = inheritedTypes\n        self.containedTypes = containedTypes\n        self.typealiases = [:]\n        self.parent = parent\n        self.parentName = parent?.name\n        self.attributes = attributes\n        self.modifiers = modifiers\n        self.annotations = annotations\n        self.documentation = documentation\n        self.isGeneric = isGeneric\n        self.genericRequirements = genericRequirements\n        self.implements = implements\n        self._kind = kind\n        super.init()\n        containedTypes.forEach {\n            containedType[$0.localName] = $0\n            $0.parent = self\n        }\n        inheritedTypes.forEach { name in\n            self.based[name] = name\n        }\n        typealiases.forEach({\n            $0.parent = self\n            self.typealiases[$0.aliasName] = $0\n        })\n    }\n\n    /// :nodoc:\n    public func extend(_ type: Type) {\n        type.annotations.forEach { self.annotations[$0.key] = $0.value }\n        type.inherits.forEach { self.inherits[$0.key] = $0.value }\n        type.implements.forEach { self.implements[$0.key] = $0.value }\n        self.inheritedTypes += type.inheritedTypes\n        self.containedTypes += type.containedTypes\n\n        self.rawVariables += type.rawVariables\n        self.rawMethods += type.rawMethods\n        self.rawSubscripts += type.rawSubscripts\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        let type: Type.Type = Swift.type(of: self)\n        var string = \"\\\\(type): \"\n        string.append(\"module = \\\\(String(describing: self.module)), \")\n        string.append(\"imports = \\\\(String(describing: self.imports)), \")\n        string.append(\"allImports = \\\\(String(describing: self.allImports)), \")\n        string.append(\"typealiases = \\\\(String(describing: self.typealiases)), \")\n        string.append(\"isExtension = \\\\(String(describing: self.isExtension)), \")\n        string.append(\"kind = \\\\(String(describing: self.kind)), \")\n        string.append(\"_kind = \\\\(String(describing: self._kind)), \")\n        string.append(\"accessLevel = \\\\(String(describing: self.accessLevel)), \")\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"isUnknownExtension = \\\\(String(describing: self.isUnknownExtension)), \")\n        string.append(\"isGeneric = \\\\(String(describing: self.isGeneric)), \")\n        string.append(\"localName = \\\\(String(describing: self.localName)), \")\n        string.append(\"rawVariables = \\\\(String(describing: self.rawVariables)), \")\n        string.append(\"rawMethods = \\\\(String(describing: self.rawMethods)), \")\n        string.append(\"rawSubscripts = \\\\(String(describing: self.rawSubscripts)), \")\n        string.append(\"initializers = \\\\(String(describing: self.initializers)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\\\(String(describing: self.documentation)), \")\n        string.append(\"staticVariables = \\\\(String(describing: self.staticVariables)), \")\n        string.append(\"staticMethods = \\\\(String(describing: self.staticMethods)), \")\n        string.append(\"classMethods = \\\\(String(describing: self.classMethods)), \")\n        string.append(\"instanceVariables = \\\\(String(describing: self.instanceVariables)), \")\n        string.append(\"instanceMethods = \\\\(String(describing: self.instanceMethods)), \")\n        string.append(\"computedVariables = \\\\(String(describing: self.computedVariables)), \")\n        string.append(\"storedVariables = \\\\(String(describing: self.storedVariables)), \")\n        string.append(\"inheritedTypes = \\\\(String(describing: self.inheritedTypes)), \")\n        string.append(\"inherits = \\\\(String(describing: self.inherits)), \")\n        string.append(\"containedTypes = \\\\(String(describing: self.containedTypes)), \")\n        string.append(\"parentName = \\\\(String(describing: self.parentName)), \")\n        string.append(\"parentTypes = \\\\(String(describing: self.parentTypes)), \")\n        string.append(\"attributes = \\\\(String(describing: self.attributes)), \")\n        string.append(\"modifiers = \\\\(String(describing: self.modifiers)), \")\n        string.append(\"fileName = \\\\(String(describing: self.fileName)), \")\n        string.append(\"genericRequirements = \\\\(String(describing: self.genericRequirements))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Type else {\n            results.append(\"Incorrect type <expected: Type, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"module\").trackDifference(actual: self.module, expected: castObject.module))\n        results.append(contentsOf: DiffableResult(identifier: \"imports\").trackDifference(actual: self.imports, expected: castObject.imports))\n        results.append(contentsOf: DiffableResult(identifier: \"typealiases\").trackDifference(actual: self.typealiases, expected: castObject.typealiases))\n        results.append(contentsOf: DiffableResult(identifier: \"isExtension\").trackDifference(actual: self.isExtension, expected: castObject.isExtension))\n        results.append(contentsOf: DiffableResult(identifier: \"accessLevel\").trackDifference(actual: self.accessLevel, expected: castObject.accessLevel))\n        results.append(contentsOf: DiffableResult(identifier: \"isUnknownExtension\").trackDifference(actual: self.isUnknownExtension, expected: castObject.isUnknownExtension))\n        results.append(contentsOf: DiffableResult(identifier: \"isGeneric\").trackDifference(actual: self.isGeneric, expected: castObject.isGeneric))\n        results.append(contentsOf: DiffableResult(identifier: \"localName\").trackDifference(actual: self.localName, expected: castObject.localName))\n        results.append(contentsOf: DiffableResult(identifier: \"rawVariables\").trackDifference(actual: self.rawVariables, expected: castObject.rawVariables))\n        results.append(contentsOf: DiffableResult(identifier: \"rawMethods\").trackDifference(actual: self.rawMethods, expected: castObject.rawMethods))\n        results.append(contentsOf: DiffableResult(identifier: \"rawSubscripts\").trackDifference(actual: self.rawSubscripts, expected: castObject.rawSubscripts))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"inheritedTypes\").trackDifference(actual: self.inheritedTypes, expected: castObject.inheritedTypes))\n        results.append(contentsOf: DiffableResult(identifier: \"inherits\").trackDifference(actual: self.inherits, expected: castObject.inherits))\n        results.append(contentsOf: DiffableResult(identifier: \"containedTypes\").trackDifference(actual: self.containedTypes, expected: castObject.containedTypes))\n        results.append(contentsOf: DiffableResult(identifier: \"parentName\").trackDifference(actual: self.parentName, expected: castObject.parentName))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        results.append(contentsOf: DiffableResult(identifier: \"fileName\").trackDifference(actual: self.fileName, expected: castObject.fileName))\n        results.append(contentsOf: DiffableResult(identifier: \"genericRequirements\").trackDifference(actual: self.genericRequirements, expected: castObject.genericRequirements))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.module)\n        hasher.combine(self.imports)\n        hasher.combine(self.typealiases)\n        hasher.combine(self.isExtension)\n        hasher.combine(self.accessLevel)\n        hasher.combine(self.isUnknownExtension)\n        hasher.combine(self.isGeneric)\n        hasher.combine(self.localName)\n        hasher.combine(self.rawVariables)\n        hasher.combine(self.rawMethods)\n        hasher.combine(self.rawSubscripts)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.inheritedTypes)\n        hasher.combine(self.inherits)\n        hasher.combine(self.containedTypes)\n        hasher.combine(self.parentName)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        hasher.combine(self.fileName)\n        hasher.combine(self.genericRequirements)\n        hasher.combine(kind)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Type else { return false }\n        if self.module != rhs.module { return false }\n        if self.imports != rhs.imports { return false }\n        if self.typealiases != rhs.typealiases { return false }\n        if self.isExtension != rhs.isExtension { return false }\n        if self.accessLevel != rhs.accessLevel { return false }\n        if self.isUnknownExtension != rhs.isUnknownExtension { return false }\n        if self.isGeneric != rhs.isGeneric { return false }\n        if self.localName != rhs.localName { return false }\n        if self.rawVariables != rhs.rawVariables { return false }\n        if self.rawMethods != rhs.rawMethods { return false }\n        if self.rawSubscripts != rhs.rawSubscripts { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.inheritedTypes != rhs.inheritedTypes { return false }\n        if self.inherits != rhs.inherits { return false }\n        if self.containedTypes != rhs.containedTypes { return false }\n        if self.parentName != rhs.parentName { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        if self.fileName != rhs.fileName { return false }\n        if self.kind != rhs.kind { return false }\n        if self.genericRequirements != rhs.genericRequirements { return false }\n        return true\n    }\n\n// sourcery:inline:Type.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            self.module = aDecoder.decode(forKey: \"module\")\n            guard let imports: [Import] = aDecoder.decode(forKey: \"imports\") else { \n                withVaList([\"imports\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.imports = imports\n            guard let typealiases: [String: Typealias] = aDecoder.decode(forKey: \"typealiases\") else { \n                withVaList([\"typealiases\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typealiases = typealiases\n            self.isExtension = aDecoder.decode(forKey: \"isExtension\")\n            guard let _kind: String = aDecoder.decode(forKey: \"_kind\") else { \n                withVaList([\"_kind\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self._kind = _kind\n            guard let accessLevel: String = aDecoder.decode(forKey: \"accessLevel\") else { \n                withVaList([\"accessLevel\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.accessLevel = accessLevel\n            self.isGeneric = aDecoder.decode(forKey: \"isGeneric\")\n            guard let localName: String = aDecoder.decode(forKey: \"localName\") else { \n                withVaList([\"localName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.localName = localName\n            guard let rawVariables: [Variable] = aDecoder.decode(forKey: \"rawVariables\") else { \n                withVaList([\"rawVariables\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.rawVariables = rawVariables\n            guard let rawMethods: [Method] = aDecoder.decode(forKey: \"rawMethods\") else { \n                withVaList([\"rawMethods\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.rawMethods = rawMethods\n            guard let rawSubscripts: [Subscript] = aDecoder.decode(forKey: \"rawSubscripts\") else { \n                withVaList([\"rawSubscripts\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.rawSubscripts = rawSubscripts\n            self.bodyBytesRange = aDecoder.decode(forKey: \"bodyBytesRange\")\n            self.completeDeclarationRange = aDecoder.decode(forKey: \"completeDeclarationRange\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            guard let inheritedTypes: [String] = aDecoder.decode(forKey: \"inheritedTypes\") else { \n                withVaList([\"inheritedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.inheritedTypes = inheritedTypes\n            guard let based: [String: String] = aDecoder.decode(forKey: \"based\") else { \n                withVaList([\"based\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.based = based\n            guard let basedTypes: [String: Type] = aDecoder.decode(forKey: \"basedTypes\") else { \n                withVaList([\"basedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.basedTypes = basedTypes\n            guard let inherits: [String: Type] = aDecoder.decode(forKey: \"inherits\") else { \n                withVaList([\"inherits\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.inherits = inherits\n            guard let implements: [String: Type] = aDecoder.decode(forKey: \"implements\") else { \n                withVaList([\"implements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.implements = implements\n            guard let containedTypes: [Type] = aDecoder.decode(forKey: \"containedTypes\") else { \n                withVaList([\"containedTypes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.containedTypes = containedTypes\n            guard let containedType: [String: Type] = aDecoder.decode(forKey: \"containedType\") else { \n                withVaList([\"containedType\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.containedType = containedType\n            self.parentName = aDecoder.decode(forKey: \"parentName\")\n            self.parent = aDecoder.decode(forKey: \"parent\")\n            self.supertype = aDecoder.decode(forKey: \"supertype\")\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            self.path = aDecoder.decode(forKey: \"path\")\n            guard let genericRequirements: [GenericRequirement] = aDecoder.decode(forKey: \"genericRequirements\") else { \n                withVaList([\"genericRequirements\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.genericRequirements = genericRequirements\n            self.fileName = aDecoder.decode(forKey: \"fileName\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.module, forKey: \"module\")\n            aCoder.encode(self.imports, forKey: \"imports\")\n            aCoder.encode(self.typealiases, forKey: \"typealiases\")\n            aCoder.encode(self.isExtension, forKey: \"isExtension\")\n            aCoder.encode(self._kind, forKey: \"_kind\")\n            aCoder.encode(self.accessLevel, forKey: \"accessLevel\")\n            aCoder.encode(self.isGeneric, forKey: \"isGeneric\")\n            aCoder.encode(self.localName, forKey: \"localName\")\n            aCoder.encode(self.rawVariables, forKey: \"rawVariables\")\n            aCoder.encode(self.rawMethods, forKey: \"rawMethods\")\n            aCoder.encode(self.rawSubscripts, forKey: \"rawSubscripts\")\n            aCoder.encode(self.bodyBytesRange, forKey: \"bodyBytesRange\")\n            aCoder.encode(self.completeDeclarationRange, forKey: \"completeDeclarationRange\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.inheritedTypes, forKey: \"inheritedTypes\")\n            aCoder.encode(self.based, forKey: \"based\")\n            aCoder.encode(self.basedTypes, forKey: \"basedTypes\")\n            aCoder.encode(self.inherits, forKey: \"inherits\")\n            aCoder.encode(self.implements, forKey: \"implements\")\n            aCoder.encode(self.containedTypes, forKey: \"containedTypes\")\n            aCoder.encode(self.containedType, forKey: \"containedType\")\n            aCoder.encode(self.parentName, forKey: \"parentName\")\n            aCoder.encode(self.parent, forKey: \"parent\")\n            aCoder.encode(self.supertype, forKey: \"supertype\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.path, forKey: \"path\")\n            aCoder.encode(self.genericRequirements, forKey: \"genericRequirements\")\n            aCoder.encode(self.fileName, forKey: \"fileName\")\n        }\n// sourcery:end\n\n}\n\nextension Type {\n\n    // sourcery: skipDescription, skipJSExport\n    /// :nodoc:\n    var isClass: Bool {\n        let isNotClass = self is Struct || self is Enum || self is Protocol\n        return !isNotClass && !isExtension\n    }\n}\n#endif\n\n\"\"\"),\n    .init(name: \"TypesCollection_Linux.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// :nodoc:\npublic class TypesCollection: NSObject, AutoJSExport, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        return try? types(forKey: member)\n    }\n\n    // sourcery:begin: skipJSExport\n    let all: [Type]\n    let types: [String: [Type]]\n    let validate: ((Type) throws -> Void)?\n    // sourcery:end\n\n    init(types: [Type], collection: (Type) -> [String], validate: ((Type) throws -> Void)? = nil) {\n        self.all = types\n        var content = [String: [Type]]()\n        self.all.forEach { type in\n            collection(type).forEach { name in\n                var list = content[name] ?? [Type]()\n                list.append(type)\n                content[name] = list\n            }\n        }\n        self.types = content\n        self.validate = validate\n    }\n\n    public func types(forKey key: String) throws -> [Type] {\n        // In some configurations, the types are keyed by \"ModuleName.TypeName\"\n        var longKey: String?\n\n        if let validate = validate {\n            guard let type = all.first(where: { $0.name == key }) else {\n                throw \"Unknown type \\\\(key), should be used with `based`\"\n            }\n\n            try validate(type)\n\n            if let module = type.module {\n                longKey = [module, type.name].joined(separator: \".\")\n            }\n        }\n\n        // If we find the types directly, return them\n        if let types = types[key] {\n            return types\n        }\n\n        // if we find a types for the longKey, return them\n        if let longKey = longKey, let types = types[longKey] {\n            return types\n        }\n\n        return []\n    }\n\n    /// :nodoc:\n    public func value(forKey key: String) -> Any? {\n        do {\n            return try types(forKey: key)\n        } catch {\n            Log.error(error)\n            return nil\n        }\n    }\n\n    /// :nodoc:\n    public subscript(_ key: String) -> [Type] {\n        do {\n            return try types(forKey: key)\n        } catch {\n            Log.error(error)\n            return []\n        }\n    }\n}\n#endif\n\n\"\"\"),\n    .init(name: \"Types_Linux.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if !canImport(ObjectiveC)\nimport Foundation\n\n// sourcery: skipJSExport\n/// Collection of scanned types for accessing in templates\npublic final class Types: NSObject, SourceryModel, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n            case \"types\":\n                return types\n            case \"enums\":\n                return enums\n            case \"all\":\n                return all\n            case \"protocols\":\n                return protocols\n            case \"classes\":\n                return classes\n            case \"structs\":\n                return structs\n            case \"extensions\":\n                return extensions\n            case \"implementing\":\n                return implementing\n            case \"inheriting\":\n                return inheriting\n            case \"based\":\n                return based\n            default:\n                fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }\n    }\n\n    /// :nodoc:\n    public let types: [Type]\n\n    /// All known typealiases\n    public let typealiases: [Typealias]\n\n    /// :nodoc:\n    public init(types: [Type], typealiases: [Typealias] = []) {\n        self.types = types\n        self.typealiases = typealiases\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"types = \\\\(String(describing: self.types)), \")\n        string.append(\"typealiases = \\\\(String(describing: self.typealiases))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Types else {\n            results.append(\"Incorrect type <expected: Types, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"types\").trackDifference(actual: self.types, expected: castObject.types))\n        results.append(contentsOf: DiffableResult(identifier: \"typealiases\").trackDifference(actual: self.typealiases, expected: castObject.typealiases))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.types)\n        hasher.combine(self.typealiases)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Types else { return false }\n        if self.types != rhs.types { return false }\n        if self.typealiases != rhs.typealiases { return false }\n        return true\n    }\n\n// sourcery:inline:Types.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let types: [Type] = aDecoder.decode(forKey: \"types\") else { \n                withVaList([\"types\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.types = types\n            guard let typealiases: [Typealias] = aDecoder.decode(forKey: \"typealiases\") else { \n                withVaList([\"typealiases\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typealiases = typealiases\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.types, forKey: \"types\")\n            aCoder.encode(self.typealiases, forKey: \"typealiases\")\n        }\n// sourcery:end\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// :nodoc:\n    public lazy internal(set) var typesByName: [String: Type] = {\n        var typesByName = [String: Type]()\n        self.types.forEach { typesByName[$0.globalName] = $0 }\n        return typesByName\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// :nodoc:\n    public lazy internal(set) var typesaliasesByName: [String: Typealias] = {\n        var typesaliasesByName = [String: Typealias]()\n        self.typealiases.forEach { typesaliasesByName[$0.name] = $0 }\n        return typesaliasesByName\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known types, excluding protocols or protocol compositions.\n    public lazy internal(set) var all: [Type] = {\n        return self.types.filter { !($0 is Protocol || $0 is ProtocolComposition) }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known protocols\n    public lazy internal(set) var protocols: [Protocol] = {\n        return self.types.compactMap { $0 as? Protocol }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known protocol compositions\n    public lazy internal(set) var protocolCompositions: [ProtocolComposition] = {\n        return self.types.compactMap { $0 as? ProtocolComposition }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known classes\n    public lazy internal(set) var classes: [Class] = {\n        return self.all.compactMap { $0 as? Class }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known structs\n    public lazy internal(set) var structs: [Struct] = {\n        return self.all.compactMap { $0 as? Struct }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known enums\n    public lazy internal(set) var enums: [Enum] = {\n        return self.all.compactMap { $0 as? Enum }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// All known extensions\n    public lazy internal(set) var extensions: [Type] = {\n        return self.all.compactMap { $0.isExtension ? $0 : nil }\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// Types based on any other type, grouped by its name, even if they are not known.\n    /// `types.based.MyType` returns list of types based on `MyType`\n    public lazy internal(set) var based: TypesCollection = {\n        TypesCollection(\n            types: self.types,\n            collection: { Array($0.based.keys) }\n        )\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// Classes inheriting from any known class, grouped by its name.\n    /// `types.inheriting.MyClass` returns list of types inheriting from `MyClass`\n    public lazy internal(set) var inheriting: TypesCollection = {\n        TypesCollection(\n            types: self.types,\n            collection: { Array($0.inherits.keys) },\n            validate: { type in\n                guard type is Class else {\n                    throw \"\\\\(type.name) is not a class and should be used with `implementing` or `based`\"\n                }\n            })\n    }()\n\n    // sourcery: skipDescription, skipEquality, skipCoding\n    /// Types implementing known protocol, grouped by its name.\n    /// `types.implementing.MyProtocol` returns list of types implementing `MyProtocol`\n    public lazy internal(set) var implementing: TypesCollection = {\n        TypesCollection(\n            types: self.types,\n            collection: { Array($0.implements.keys) },\n            validate: { type in\n                guard type is Protocol else {\n                    throw \"\\\\(type.name) is a class and should be used with `inheriting` or `based`\"\n                }\n        })\n    }()\n}\n#endif\n\n\"\"\"),\n    .init(name: \"Variable_Linux.swift\", content:\n\"\"\"\n//\n// Created by Krzysztof Zablocki on 13/09/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n#if !canImport(ObjectiveC)\nimport Foundation\n\n/// :nodoc:\npublic typealias SourceryVariable = Variable\n\n/// Defines variable\npublic final class Variable: NSObject, SourceryModel, Typed, Annotated, Documented, Definition, Diffable, SourceryDynamicMemberLookup {\n    public subscript(dynamicMember member: String) -> Any? {\n        switch member {\n        case \"readAccess\":\n            return readAccess\n        case \"annotations\":\n            return annotations\n        case \"isOptional\":\n            return isOptional\n        case \"name\":\n            return name\n        case \"typeName\":\n            return typeName\n        case \"type\":\n            return type\n        case \"definedInType\":\n            return definedInType\n        case \"isStatic\":\n            return isStatic\n        case \"isAsync\":\n            return isAsync\n        case \"throws\":\n            return `throws`\n        case \"throwsTypeName\":\n            return throwsTypeName\n        case \"isArray\":\n            return isArray\n        case \"isDictionary\":\n            return isDictionary\n        case \"isDynamic\":\n            return isDynamic\n        default:\n            fatalError(\"unable to lookup: \\\\(member) in \\\\(self)\")\n        }\n    }\n\n    /// Variable name\n    public let name: String\n\n    /// Variable type name\n    public let typeName: TypeName\n\n    // sourcery: skipEquality, skipDescription\n    /// Variable type, if known, i.e. if the type is declared in the scanned sources.\n    /// For explanation, see <https://cdn.rawgit.com/krzysztofzablocki/Sourcery/master/docs/writing-templates.html#what-are-em-known-em-and-em-unknown-em-types>\n    public var type: Type?\n\n    /// Whether variable is computed and not stored\n    public let isComputed: Bool\n    \n    /// Whether variable is async\n    public let isAsync: Bool\n    \n    /// Whether variable throws\n    public let `throws`: Bool\n\n    /// Type of thrown error if specified\n    public let throwsTypeName: TypeName?\n\n    /// Whether variable is static\n    public let isStatic: Bool\n\n    /// Variable read access level, i.e. `internal`, `private`, `fileprivate`, `public`, `open`\n    public let readAccess: String\n\n    /// Variable write access, i.e. `internal`, `private`, `fileprivate`, `public`, `open`.\n    /// For immutable variables this value is empty string\n    public let writeAccess: String\n\n    /// composed access level\n    /// sourcery: skipJSExport\n    public var accessLevel: (read: AccessLevel, write: AccessLevel) {\n        (read: AccessLevel(rawValue: readAccess) ?? .none, AccessLevel(rawValue: writeAccess) ?? .none)\n    }\n\n    /// Whether variable is mutable or not\n    public var isMutable: Bool {\n        return writeAccess != AccessLevel.none.rawValue\n    }\n\n    /// Variable default value expression\n    public var defaultValue: String?\n\n    /// Annotations, that were created with // sourcery: annotation1, other = \"annotation value\", alterantive = 2\n    public var annotations: Annotations = [:]\n\n    public var documentation: Documentation = []\n\n    /// Variable attributes, i.e. `@IBOutlet`, `@IBInspectable`\n    public var attributes: AttributeList\n\n    /// Modifiers, i.e. `private`\n    public var modifiers: [SourceryModifier]\n\n    /// Whether variable is final or not\n    public var isFinal: Bool {\n        return modifiers.contains { $0.name == Attribute.Identifier.final.rawValue }\n    }\n\n    /// Whether variable is lazy or not\n    public var isLazy: Bool {\n        return modifiers.contains { $0.name == Attribute.Identifier.lazy.rawValue }\n    }\n\n    /// Whether variable is dynamic or not\n    public var isDynamic: Bool {\n        modifiers.contains { $0.name == Attribute.Identifier.dynamic.rawValue }\n    }\n\n    /// Reference to type name where the variable is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc\n    public internal(set) var definedInTypeName: TypeName?\n\n    /// Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a `definedInTypeName`\n    public var actualDefinedInTypeName: TypeName? {\n        return definedInTypeName?.actualTypeName ?? definedInTypeName\n    }\n\n    // sourcery: skipEquality, skipDescription\n    /// Reference to actual type where the object is defined,\n    /// nil if defined outside of any `enum`, `struct`, `class` etc or type is unknown\n    public var definedInType: Type?\n\n    /// :nodoc:\n    public init(name: String = \"\",\n                typeName: TypeName,\n                type: Type? = nil,\n                accessLevel: (read: AccessLevel, write: AccessLevel) = (.internal, .internal),\n                isComputed: Bool = false,\n                isAsync: Bool = false,\n                `throws`: Bool = false,\n                throwsTypeName: TypeName? = nil,\n                isStatic: Bool = false,\n                defaultValue: String? = nil,\n                attributes: AttributeList = [:],\n                modifiers: [SourceryModifier] = [],\n                annotations: [String: NSObject] = [:],\n                documentation: [String] = [],\n                definedInTypeName: TypeName? = nil) {\n\n        self.name = name\n        self.typeName = typeName\n        self.type = type\n        self.isComputed = isComputed\n        self.isAsync = isAsync\n        self.`throws` = `throws`\n        self.throwsTypeName = throwsTypeName\n        self.isStatic = isStatic\n        self.defaultValue = defaultValue\n        self.readAccess = accessLevel.read.rawValue\n        self.writeAccess = accessLevel.write.rawValue\n        self.attributes = attributes\n        self.modifiers = modifiers\n        self.annotations = annotations\n        self.documentation = documentation\n        self.definedInTypeName = definedInTypeName\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    override public var description: String {\n        var string = \"\\\\(Swift.type(of: self)): \"\n        string.append(\"name = \\\\(String(describing: self.name)), \")\n        string.append(\"typeName = \\\\(String(describing: self.typeName)), \")\n        string.append(\"isComputed = \\\\(String(describing: self.isComputed)), \")\n        string.append(\"isAsync = \\\\(String(describing: self.isAsync)), \")\n        string.append(\"`throws` = \\\\(String(describing: self.`throws`)), \")\n        string.append(\"throwsTypeName = \\\\(String(describing: self.throwsTypeName)), \")\n        string.append(\"isStatic = \\\\(String(describing: self.isStatic)), \")\n        string.append(\"readAccess = \\\\(String(describing: self.readAccess)), \")\n        string.append(\"writeAccess = \\\\(String(describing: self.writeAccess)), \")\n        string.append(\"accessLevel = \\\\(String(describing: self.accessLevel)), \")\n        string.append(\"isMutable = \\\\(String(describing: self.isMutable)), \")\n        string.append(\"defaultValue = \\\\(String(describing: self.defaultValue)), \")\n        string.append(\"annotations = \\\\(String(describing: self.annotations)), \")\n        string.append(\"documentation = \\\\(String(describing: self.documentation)), \")\n        string.append(\"attributes = \\\\(String(describing: self.attributes)), \")\n        string.append(\"modifiers = \\\\(String(describing: self.modifiers)), \")\n        string.append(\"isFinal = \\\\(String(describing: self.isFinal)), \")\n        string.append(\"isLazy = \\\\(String(describing: self.isLazy)), \")\n        string.append(\"isDynamic = \\\\(String(describing: self.isDynamic)), \")\n        string.append(\"definedInTypeName = \\\\(String(describing: self.definedInTypeName)), \")\n        string.append(\"actualDefinedInTypeName = \\\\(String(describing: self.actualDefinedInTypeName))\")\n        return string\n    }\n\n    public func diffAgainst(_ object: Any?) -> DiffableResult {\n        let results = DiffableResult()\n        guard let castObject = object as? Variable else {\n            results.append(\"Incorrect type <expected: Variable, received: \\\\(Swift.type(of: object))>\")\n            return results\n        }\n        results.append(contentsOf: DiffableResult(identifier: \"name\").trackDifference(actual: self.name, expected: castObject.name))\n        results.append(contentsOf: DiffableResult(identifier: \"typeName\").trackDifference(actual: self.typeName, expected: castObject.typeName))\n        results.append(contentsOf: DiffableResult(identifier: \"isComputed\").trackDifference(actual: self.isComputed, expected: castObject.isComputed))\n        results.append(contentsOf: DiffableResult(identifier: \"isAsync\").trackDifference(actual: self.isAsync, expected: castObject.isAsync))\n        results.append(contentsOf: DiffableResult(identifier: \"`throws`\").trackDifference(actual: self.`throws`, expected: castObject.`throws`))\n        results.append(contentsOf: DiffableResult(identifier: \"throwsTypeName\").trackDifference(actual: self.throwsTypeName, expected: castObject.throwsTypeName))\n        results.append(contentsOf: DiffableResult(identifier: \"isStatic\").trackDifference(actual: self.isStatic, expected: castObject.isStatic))\n        results.append(contentsOf: DiffableResult(identifier: \"readAccess\").trackDifference(actual: self.readAccess, expected: castObject.readAccess))\n        results.append(contentsOf: DiffableResult(identifier: \"writeAccess\").trackDifference(actual: self.writeAccess, expected: castObject.writeAccess))\n        results.append(contentsOf: DiffableResult(identifier: \"defaultValue\").trackDifference(actual: self.defaultValue, expected: castObject.defaultValue))\n        results.append(contentsOf: DiffableResult(identifier: \"annotations\").trackDifference(actual: self.annotations, expected: castObject.annotations))\n        results.append(contentsOf: DiffableResult(identifier: \"documentation\").trackDifference(actual: self.documentation, expected: castObject.documentation))\n        results.append(contentsOf: DiffableResult(identifier: \"attributes\").trackDifference(actual: self.attributes, expected: castObject.attributes))\n        results.append(contentsOf: DiffableResult(identifier: \"modifiers\").trackDifference(actual: self.modifiers, expected: castObject.modifiers))\n        results.append(contentsOf: DiffableResult(identifier: \"definedInTypeName\").trackDifference(actual: self.definedInTypeName, expected: castObject.definedInTypeName))\n        return results\n    }\n\n    /// :nodoc:\n    // sourcery: skipJSExport\n    public override var hash: Int {\n        var hasher = Hasher()\n        hasher.combine(self.name)\n        hasher.combine(self.typeName)\n        hasher.combine(self.isComputed)\n        hasher.combine(self.isAsync)\n        hasher.combine(self.`throws`)\n        hasher.combine(self.throwsTypeName)\n        hasher.combine(self.isStatic)\n        hasher.combine(self.readAccess)\n        hasher.combine(self.writeAccess)\n        hasher.combine(self.defaultValue)\n        hasher.combine(self.annotations)\n        hasher.combine(self.documentation)\n        hasher.combine(self.attributes)\n        hasher.combine(self.modifiers)\n        hasher.combine(self.definedInTypeName)\n        return hasher.finalize()\n    }\n\n    /// :nodoc:\n    public override func isEqual(_ object: Any?) -> Bool {\n        guard let rhs = object as? Variable else { return false }\n        if self.name != rhs.name { return false }\n        if self.typeName != rhs.typeName { return false }\n        if self.isComputed != rhs.isComputed { return false }\n        if self.isAsync != rhs.isAsync { return false }\n        if self.`throws` != rhs.`throws` { return false }\n        if self.throwsTypeName != rhs.throwsTypeName { return false }\n        if self.isStatic != rhs.isStatic { return false }\n        if self.readAccess != rhs.readAccess { return false }\n        if self.writeAccess != rhs.writeAccess { return false }\n        if self.defaultValue != rhs.defaultValue { return false }\n        if self.annotations != rhs.annotations { return false }\n        if self.documentation != rhs.documentation { return false }\n        if self.attributes != rhs.attributes { return false }\n        if self.modifiers != rhs.modifiers { return false }\n        if self.definedInTypeName != rhs.definedInTypeName { return false }\n        return true\n    }\n\n// sourcery:inline:Variable.AutoCoding\n\n        /// :nodoc:\n        required public init?(coder aDecoder: NSCoder) {\n            guard let name: String = aDecoder.decode(forKey: \"name\") else { \n                withVaList([\"name\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.name = name\n            guard let typeName: TypeName = aDecoder.decode(forKey: \"typeName\") else { \n                withVaList([\"typeName\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.typeName = typeName\n            self.type = aDecoder.decode(forKey: \"type\")\n            self.isComputed = aDecoder.decode(forKey: \"isComputed\")\n            self.isAsync = aDecoder.decode(forKey: \"isAsync\")\n            self.`throws` = aDecoder.decode(forKey: \"`throws`\")\n            self.throwsTypeName = aDecoder.decode(forKey: \"throwsTypeName\")\n            self.isStatic = aDecoder.decode(forKey: \"isStatic\")\n            guard let readAccess: String = aDecoder.decode(forKey: \"readAccess\") else { \n                withVaList([\"readAccess\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.readAccess = readAccess\n            guard let writeAccess: String = aDecoder.decode(forKey: \"writeAccess\") else { \n                withVaList([\"writeAccess\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.writeAccess = writeAccess\n            self.defaultValue = aDecoder.decode(forKey: \"defaultValue\")\n            guard let annotations: Annotations = aDecoder.decode(forKey: \"annotations\") else { \n                withVaList([\"annotations\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.annotations = annotations\n            guard let documentation: Documentation = aDecoder.decode(forKey: \"documentation\") else { \n                withVaList([\"documentation\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.documentation = documentation\n            guard let attributes: AttributeList = aDecoder.decode(forKey: \"attributes\") else { \n                withVaList([\"attributes\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.attributes = attributes\n            guard let modifiers: [SourceryModifier] = aDecoder.decode(forKey: \"modifiers\") else { \n                withVaList([\"modifiers\"]) { arguments in\n                    NSException.raise(NSExceptionName.parseErrorException, format: \"Key '%@' not found.\", arguments: arguments)\n                }\n                fatalError()\n             }; self.modifiers = modifiers\n            self.definedInTypeName = aDecoder.decode(forKey: \"definedInTypeName\")\n            self.definedInType = aDecoder.decode(forKey: \"definedInType\")\n        }\n\n        /// :nodoc:\n        public func encode(with aCoder: NSCoder) {\n            aCoder.encode(self.name, forKey: \"name\")\n            aCoder.encode(self.typeName, forKey: \"typeName\")\n            aCoder.encode(self.type, forKey: \"type\")\n            aCoder.encode(self.isComputed, forKey: \"isComputed\")\n            aCoder.encode(self.isAsync, forKey: \"isAsync\")\n            aCoder.encode(self.`throws`, forKey: \"`throws`\")\n            aCoder.encode(self.throwsTypeName, forKey: \"throwsTypeName\")\n            aCoder.encode(self.isStatic, forKey: \"isStatic\")\n            aCoder.encode(self.readAccess, forKey: \"readAccess\")\n            aCoder.encode(self.writeAccess, forKey: \"writeAccess\")\n            aCoder.encode(self.defaultValue, forKey: \"defaultValue\")\n            aCoder.encode(self.annotations, forKey: \"annotations\")\n            aCoder.encode(self.documentation, forKey: \"documentation\")\n            aCoder.encode(self.attributes, forKey: \"attributes\")\n            aCoder.encode(self.modifiers, forKey: \"modifiers\")\n            aCoder.encode(self.definedInTypeName, forKey: \"definedInTypeName\")\n            aCoder.encode(self.definedInType, forKey: \"definedInType\")\n        }\n// sourcery:end\n}\n#endif\n\n\"\"\"),\n    .init(name: \"AutoHashable.generated.swift\", content:\n\"\"\"\n// Generated using Sourcery 1.3.1 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable all\n\n\n// MARK: - AutoHashable for classes, protocols, structs\n\n// MARK: - AutoHashable for Enums\n\n\"\"\"),\n    .init(name: \"Coding.generated.swift\", content:\n\"\"\"\n// Generated using Sourcery 2.2.6 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable vertical_whitespace trailing_newline\n\nimport Foundation\n\n\nextension NSCoder {\n\n    @nonobjc func decode(forKey: String) -> String? {\n        return self.maybeDecode(forKey: forKey) as String?\n    }\n\n    @nonobjc func decode(forKey: String) -> TypeName? {\n        return self.maybeDecode(forKey: forKey) as TypeName?\n    }\n\n    @nonobjc func decode(forKey: String) -> AccessLevel? {\n        return self.maybeDecode(forKey: forKey) as AccessLevel?\n    }\n\n    @nonobjc func decode(forKey: String) -> Bool {\n        return self.decodeBool(forKey: forKey)\n    }\n\n    @nonobjc func decode(forKey: String) -> Int {\n        return self.decodeInteger(forKey: forKey)\n    }\n\n    func decode<E>(forKey: String) -> E? {\n        return maybeDecode(forKey: forKey) as E?\n    }\n\n    fileprivate func maybeDecode<E>(forKey: String) -> E? {\n        guard let object = self.decodeObject(forKey: forKey) else {\n            return nil\n        }\n\n        return object as? E\n    }\n\n}\n\nextension ArrayType: NSCoding {}\n\nextension AssociatedType: NSCoding {}\n\nextension AssociatedValue: NSCoding {}\n\nextension Attribute: NSCoding {}\n\nextension BytesRange: NSCoding {}\n\n\nextension ClosureParameter: NSCoding {}\n\nextension ClosureType: NSCoding {}\n\nextension DictionaryType: NSCoding {}\n\n\nextension EnumCase: NSCoding {}\n\nextension FileParserResult: NSCoding {}\n\nextension GenericParameter: NSCoding {}\n\nextension GenericRequirement: NSCoding {}\n\nextension GenericType: NSCoding {}\n\nextension GenericTypeParameter: NSCoding {}\n\nextension Import: NSCoding {}\n\nextension Method: NSCoding {}\n\nextension MethodParameter: NSCoding {}\n\nextension Modifier: NSCoding {}\n\n\n\nextension SetType: NSCoding {}\n\n\nextension Subscript: NSCoding {}\n\nextension TupleElement: NSCoding {}\n\nextension TupleType: NSCoding {}\n\nextension Type: NSCoding {}\n\nextension TypeName: NSCoding {}\n\nextension Typealias: NSCoding {}\n\nextension Types: NSCoding {}\n\nextension Variable: NSCoding {}\n\n\n\"\"\"),\n    .init(name: \"JSExport.generated.swift\", content:\n\"\"\"\n// Generated using Sourcery 2.2.6 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable vertical_whitespace trailing_newline\n\n#if canImport(JavaScriptCore)\nimport JavaScriptCore\n\n@objc protocol ActorAutoJSExport: JSExport {\n    var kind: String { get }\n    var isFinal: Bool { get }\n    var isDistributed: Bool { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension Actor: ActorAutoJSExport {}\n\n@objc protocol ArrayTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var elementTypeName: TypeName { get }\n    var elementType: Type? { get }\n    var asGeneric: GenericType { get }\n    var asSource: String { get }\n}\n\nextension ArrayType: ArrayTypeAutoJSExport {}\n\n@objc protocol AssociatedTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var typeName: TypeName? { get }\n    var type: Type? { get }\n}\n\nextension AssociatedType: AssociatedTypeAutoJSExport {}\n\n@objc protocol AssociatedValueAutoJSExport: JSExport {\n    var localName: String? { get }\n    var externalName: String? { get }\n    var typeName: TypeName { get }\n    var type: Type? { get }\n    var defaultValue: String? { get }\n    var annotations: Annotations { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension AssociatedValue: AssociatedValueAutoJSExport {}\n\n@objc protocol AttributeAutoJSExport: JSExport {\n    var name: String { get }\n    var arguments: [String: NSObject] { get }\n    var asSource: String { get }\n    var description: String { get }\n}\n\nextension Attribute: AttributeAutoJSExport {}\n\n@objc protocol BytesRangeAutoJSExport: JSExport {\n    var offset: Int64 { get }\n    var length: Int64 { get }\n}\n\nextension BytesRange: BytesRangeAutoJSExport {}\n\n@objc protocol ClassAutoJSExport: JSExport {\n    var kind: String { get }\n    var isFinal: Bool { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension Class: ClassAutoJSExport {}\n\n@objc protocol ClosureParameterAutoJSExport: JSExport {\n    var argumentLabel: String? { get }\n    var name: String? { get }\n    var typeName: TypeName { get }\n    var `inout`: Bool { get }\n    var type: Type? { get }\n    var isVariadic: Bool { get }\n    var typeAttributes: AttributeList { get }\n    var defaultValue: String? { get }\n    var annotations: Annotations { get }\n    var asSource: String { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension ClosureParameter: ClosureParameterAutoJSExport {}\n\n@objc protocol ClosureTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var parameters: [ClosureParameter] { get }\n    var returnTypeName: TypeName { get }\n    var actualReturnTypeName: TypeName { get }\n    var returnType: Type? { get }\n    var isOptionalReturnType: Bool { get }\n    var isImplicitlyUnwrappedOptionalReturnType: Bool { get }\n    var unwrappedReturnTypeName: String { get }\n    var isAsync: Bool { get }\n    var asyncKeyword: String? { get }\n    var `throws`: Bool { get }\n    var throwsOrRethrowsKeyword: String? { get }\n    var throwsTypeName: TypeName? { get }\n    var asSource: String { get }\n}\n\nextension ClosureType: ClosureTypeAutoJSExport {}\n\n@objc protocol DictionaryTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var valueTypeName: TypeName { get }\n    var valueType: Type? { get }\n    var keyTypeName: TypeName { get }\n    var keyType: Type? { get }\n    var asGeneric: GenericType { get }\n    var asSource: String { get }\n}\n\nextension DictionaryType: DictionaryTypeAutoJSExport {}\n\n@objc protocol EnumAutoJSExport: JSExport {\n    var kind: String { get }\n    var cases: [EnumCase] { get }\n    var rawTypeName: TypeName? { get }\n    var hasRawType: Bool { get }\n    var rawType: Type? { get }\n    var based: [String: String] { get }\n    var hasAssociatedValues: Bool { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension Enum: EnumAutoJSExport {}\n\n@objc protocol EnumCaseAutoJSExport: JSExport {\n    var name: String { get }\n    var rawValue: String? { get }\n    var associatedValues: [AssociatedValue] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var indirect: Bool { get }\n    var hasAssociatedValue: Bool { get }\n}\n\nextension EnumCase: EnumCaseAutoJSExport {}\n\n\n@objc protocol GenericParameterAutoJSExport: JSExport {\n    var name: String { get }\n    var inheritedTypeName: TypeName? { get }\n}\n\nextension GenericParameter: GenericParameterAutoJSExport {}\n\n@objc protocol GenericRequirementAutoJSExport: JSExport {\n    var leftType: AssociatedType { get }\n    var rightType: GenericTypeParameter { get }\n    var relationship: String { get }\n    var relationshipSyntax: String { get }\n}\n\nextension GenericRequirement: GenericRequirementAutoJSExport {}\n\n@objc protocol GenericTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var typeParameters: [GenericTypeParameter] { get }\n    var asSource: String { get }\n    var description: String { get }\n}\n\nextension GenericType: GenericTypeAutoJSExport {}\n\n@objc protocol GenericTypeParameterAutoJSExport: JSExport {\n    var typeName: TypeName { get }\n    var type: Type? { get }\n}\n\nextension GenericTypeParameter: GenericTypeParameterAutoJSExport {}\n\n@objc protocol ImportAutoJSExport: JSExport {\n    var kind: String? { get }\n    var path: String { get }\n    var description: String { get }\n    var moduleName: String { get }\n}\n\nextension Import: ImportAutoJSExport {}\n\n@objc protocol MethodAutoJSExport: JSExport {\n    var name: String { get }\n    var selectorName: String { get }\n    var shortName: String { get }\n    var callName: String { get }\n    var parameters: [MethodParameter] { get }\n    var returnTypeName: TypeName { get }\n    var actualReturnTypeName: TypeName { get }\n    var isThrowsTypeGeneric: Bool { get }\n    var returnType: Type? { get }\n    var isOptionalReturnType: Bool { get }\n    var isImplicitlyUnwrappedOptionalReturnType: Bool { get }\n    var unwrappedReturnTypeName: String { get }\n    var isAsync: Bool { get }\n    var isDistributed: Bool { get }\n    var `throws`: Bool { get }\n    var throwsTypeName: TypeName? { get }\n    var `rethrows`: Bool { get }\n    var accessLevel: String { get }\n    var isStatic: Bool { get }\n    var isClass: Bool { get }\n    var isInitializer: Bool { get }\n    var isDeinitializer: Bool { get }\n    var isFailableInitializer: Bool { get }\n    var isConvenienceInitializer: Bool { get }\n    var isRequired: Bool { get }\n    var isFinal: Bool { get }\n    var isMutating: Bool { get }\n    var isGeneric: Bool { get }\n    var isOptional: Bool { get }\n    var isNonisolated: Bool { get }\n    var isDynamic: Bool { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var definedInTypeName: TypeName? { get }\n    var actualDefinedInTypeName: TypeName? { get }\n    var definedInType: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var genericParameters: [GenericParameter] { get }\n}\n\nextension Method: MethodAutoJSExport {}\n\n@objc protocol MethodParameterAutoJSExport: JSExport {\n    var argumentLabel: String? { get }\n    var name: String { get }\n    var typeName: TypeName { get }\n    var `inout`: Bool { get }\n    var isVariadic: Bool { get }\n    var type: Type? { get }\n    var typeAttributes: AttributeList { get }\n    var defaultValue: String? { get }\n    var annotations: Annotations { get }\n    var index: Int { get }\n    var asSource: String { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension MethodParameter: MethodParameterAutoJSExport {}\n\n@objc protocol ModifierAutoJSExport: JSExport {\n    var name: String { get }\n    var detail: String? { get }\n    var asSource: String { get }\n}\n\nextension Modifier: ModifierAutoJSExport {}\n\n@objc protocol ProtocolAutoJSExport: JSExport {\n    var kind: String { get }\n    var associatedTypes: [String: AssociatedType] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var fileName: String? { get }\n}\n\nextension Protocol: ProtocolAutoJSExport {}\n\n@objc protocol ProtocolCompositionAutoJSExport: JSExport {\n    var kind: String { get }\n    var composedTypeNames: [TypeName] { get }\n    var composedTypes: [Type]? { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension ProtocolComposition: ProtocolCompositionAutoJSExport {}\n\n@objc protocol SetTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var elementTypeName: TypeName { get }\n    var elementType: Type? { get }\n    var asGeneric: GenericType { get }\n    var asSource: String { get }\n}\n\nextension SetType: SetTypeAutoJSExport {}\n\n\n\n@objc protocol StructAutoJSExport: JSExport {\n    var kind: String { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension Struct: StructAutoJSExport {}\n\n@objc protocol SubscriptAutoJSExport: JSExport {\n    var parameters: [MethodParameter] { get }\n    var returnTypeName: TypeName { get }\n    var actualReturnTypeName: TypeName { get }\n    var returnType: Type? { get }\n    var isOptionalReturnType: Bool { get }\n    var isImplicitlyUnwrappedOptionalReturnType: Bool { get }\n    var unwrappedReturnTypeName: String { get }\n    var isFinal: Bool { get }\n    var readAccess: String { get }\n    var writeAccess: String { get }\n    var isAsync: Bool { get }\n    var `throws`: Bool { get }\n    var throwsTypeName: TypeName? { get }\n    var isMutable: Bool { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var definedInTypeName: TypeName? { get }\n    var actualDefinedInTypeName: TypeName? { get }\n    var definedInType: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericParameters: [GenericParameter] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var isGeneric: Bool { get }\n}\n\nextension Subscript: SubscriptAutoJSExport {}\n\n@objc protocol TemplateContextAutoJSExport: JSExport {\n    var functions: [SourceryMethod] { get }\n    var types: Types { get }\n    var argument: [String: NSObject] { get }\n    var type: [String: Type] { get }\n    var stencilContext: [String: Any] { get }\n    var jsContext: [String: Any] { get }\n}\n\nextension TemplateContext: TemplateContextAutoJSExport {}\n\n@objc protocol TupleElementAutoJSExport: JSExport {\n    var name: String? { get }\n    var typeName: TypeName { get }\n    var type: Type? { get }\n    var asSource: String { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension TupleElement: TupleElementAutoJSExport {}\n\n@objc protocol TupleTypeAutoJSExport: JSExport {\n    var name: String { get }\n    var elements: [TupleElement] { get }\n}\n\nextension TupleType: TupleTypeAutoJSExport {}\n\n@objc protocol TypeAutoJSExport: JSExport {\n    var module: String? { get }\n    var imports: [Import] { get }\n    var allImports: [Import] { get }\n    var typealiases: [String: Typealias] { get }\n    var kind: String { get }\n    var accessLevel: String { get }\n    var name: String { get }\n    var isUnknownExtension: Bool { get }\n    var globalName: String { get }\n    var isGeneric: Bool { get }\n    var localName: String { get }\n    var variables: [Variable] { get }\n    var rawVariables: [Variable] { get }\n    var allVariables: [Variable] { get }\n    var methods: [Method] { get }\n    var rawMethods: [Method] { get }\n    var allMethods: [Method] { get }\n    var subscripts: [Subscript] { get }\n    var rawSubscripts: [Subscript] { get }\n    var allSubscripts: [Subscript] { get }\n    var initializers: [Method] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var staticVariables: [Variable] { get }\n    var staticMethods: [Method] { get }\n    var classMethods: [Method] { get }\n    var instanceVariables: [Variable] { get }\n    var instanceMethods: [Method] { get }\n    var computedVariables: [Variable] { get }\n    var storedVariables: [Variable] { get }\n    var inheritedTypes: [String] { get }\n    var based: [String: String] { get }\n    var basedTypes: [String: Type] { get }\n    var inherits: [String: Type] { get }\n    var implements: [String: Type] { get }\n    var containedTypes: [Type] { get }\n    var containedType: [String: Type] { get }\n    var parentName: String? { get }\n    var parent: Type? { get }\n    var supertype: Type? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var genericRequirements: [GenericRequirement] { get }\n    var fileName: String? { get }\n}\n\nextension Type: TypeAutoJSExport {}\n\n@objc protocol TypeNameAutoJSExport: JSExport {\n    var name: String { get }\n    var generic: GenericType? { get }\n    var isGeneric: Bool { get }\n    var isProtocolComposition: Bool { get }\n    var actualTypeName: TypeName? { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n    var isVoid: Bool { get }\n    var isTuple: Bool { get }\n    var tuple: TupleType? { get }\n    var isArray: Bool { get }\n    var array: ArrayType? { get }\n    var isDictionary: Bool { get }\n    var dictionary: DictionaryType? { get }\n    var isClosure: Bool { get }\n    var closure: ClosureType? { get }\n    var isSet: Bool { get }\n    var set: SetType? { get }\n    var isNever: Bool { get }\n    var asSource: String { get }\n    var description: String { get }\n    var debugDescription: String { get }\n}\n\nextension TypeName: TypeNameAutoJSExport {}\n\n@objc protocol TypealiasAutoJSExport: JSExport {\n    var aliasName: String { get }\n    var typeName: TypeName { get }\n    var type: Type? { get }\n    var module: String? { get }\n    var imports: [Import] { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var parent: Type? { get }\n    var accessLevel: String { get }\n    var parentName: String? { get }\n    var name: String { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension Typealias: TypealiasAutoJSExport {}\n\n\n@objc protocol TypesCollectionAutoJSExport: JSExport {\n}\n\nextension TypesCollection: TypesCollectionAutoJSExport {}\n\n@objc protocol VariableAutoJSExport: JSExport {\n    var name: String { get }\n    var typeName: TypeName { get }\n    var type: Type? { get }\n    var isComputed: Bool { get }\n    var isAsync: Bool { get }\n    var `throws`: Bool { get }\n    var throwsTypeName: TypeName? { get }\n    var isStatic: Bool { get }\n    var readAccess: String { get }\n    var writeAccess: String { get }\n    var isMutable: Bool { get }\n    var defaultValue: String? { get }\n    var annotations: Annotations { get }\n    var documentation: Documentation { get }\n    var attributes: AttributeList { get }\n    var modifiers: [SourceryModifier] { get }\n    var isFinal: Bool { get }\n    var isLazy: Bool { get }\n    var isDynamic: Bool { get }\n    var definedInTypeName: TypeName? { get }\n    var actualDefinedInTypeName: TypeName? { get }\n    var definedInType: Type? { get }\n    var isOptional: Bool { get }\n    var isImplicitlyUnwrappedOptional: Bool { get }\n    var unwrappedTypeName: String { get }\n}\n\nextension Variable: VariableAutoJSExport {}\n\n\n#endif\n\"\"\"),\n    .init(name: \"Typed.generated.swift\", content:\n\"\"\"\n// Generated using Sourcery 2.2.6 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable vertical_whitespace\n\n\nextension AssociatedValue {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\nextension ClosureParameter {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\nextension MethodParameter {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\nextension TupleElement {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\nextension Typealias {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\nextension Variable {\n    /// Whether type is optional. Shorthand for `typeName.isOptional`\n    public var isOptional: Bool { return typeName.isOptional }\n    /// Whether type is implicitly unwrapped optional. Shorthand for `typeName.isImplicitlyUnwrappedOptional`\n    public var isImplicitlyUnwrappedOptional: Bool { return typeName.isImplicitlyUnwrappedOptional }\n    /// Type name without attributes and optional type information. Shorthand for `typeName.unwrappedTypeName`\n    public var unwrappedTypeName: String { return typeName.unwrappedTypeName }\n    /// Actual type name if declaration uses typealias, otherwise just a `typeName`. Shorthand for `typeName.actualTypeName`\n    public var actualTypeName: TypeName? { return typeName.actualTypeName ?? typeName }\n    /// Whether type is a tuple. Shorthand for `typeName.isTuple`\n    public var isTuple: Bool { return typeName.isTuple }\n    /// Whether type is a closure. Shorthand for `typeName.isClosure`\n    public var isClosure: Bool { return typeName.isClosure }\n    /// Whether type is an array. Shorthand for `typeName.isArray`\n    public var isArray: Bool { return typeName.isArray }\n    /// Whether type is a set. Shorthand for `typeName.isSet`\n    public var isSet: Bool { return typeName.isSet }\n    /// Whether type is a dictionary. Shorthand for `typeName.isDictionary`\n    public var isDictionary: Bool { return typeName.isDictionary }\n}\n\n\"\"\"),\n]\n#endif\n"
  },
  {
    "path": "SourcerySwift/Sources/SwiftTemplate.swift",
    "content": "//\n//  SwiftTemplate.swift\n//  Sourcery\n//\n//  Created by Krunoslav Zaher on 12/30/16.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\nimport PathKit\nimport SourceryRuntime\nimport SourceryUtils\n\nprivate enum Delimiters {\n    static let open = \"<%\"\n    static let close = \"%>\"\n}\n\nprivate struct ProcessResult {\n    let output: String\n    let error: String\n    let exitCode: Int32\n}\n\nopen class SwiftTemplate {\n    public let sourcePath: Path\n    let buildPath: Path?\n    let cachePath: Path?\n    let mainFileCodeRaw: String\n    let version: String?\n    let includedFiles: [Path]\n\n    private enum RenderError: Error {\n        case binaryMissing\n    }\n\n    private lazy var buildDir: Path = {\n        var pathComponent = \"SwiftTemplate\"\n        pathComponent.append(\"/\\(UUID().uuidString)\")\n        pathComponent.append((version.map { \"/\\($0)\" } ?? \"\"))\n\n        if let buildPath {\n            return (buildPath + pathComponent).absolute()\n        }\n\n        guard let tempDirURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(pathComponent) else { fatalError(\"Unable to get temporary path\") }\n        return Path(tempDirURL.path)\n    }()\n\n    public init(path: Path, cachePath: Path? = nil, version: String? = nil, buildPath: Path? = nil) throws {\n        self.sourcePath = path\n        self.buildPath = buildPath\n        self.cachePath = cachePath\n        self.version = version\n        (self.mainFileCodeRaw, self.includedFiles) = try SwiftTemplate.parse(sourcePath: path)\n    }\n\n    private enum Command {\n        case includeFile(Path)\n        case output(String)\n        case controlFlow(String)\n        case outputEncoded(String)\n    }\n\n    static func parse(sourcePath: Path) throws -> (String, [Path]) {\n        let commands = try SwiftTemplate.parseCommands(in: sourcePath)\n        let startParsing = currentTimestamp()\n        var includedFiles: [Path] = []\n        var outputFile = [String]()\n        var hasContents = false\n        for command in commands {\n            switch command {\n            case let .includeFile(path):\n                includedFiles.append(path)\n            case let .output(code):\n                outputFile.append(\"sourceryBuffer.append(\\\"\\\\(\" + code + \")\\\");\")\n                hasContents = true\n            case let .controlFlow(code):\n                outputFile.append(\"\\(code)\")\n                hasContents = true\n            case let .outputEncoded(code):\n                if !code.isEmpty {\n                    outputFile.append((\"sourceryBuffer.append(\\\"\") + code.stringEncoded + \"\\\");\")\n                    hasContents = true\n                }\n            }\n        }\n        if hasContents {\n            outputFile.insert(\"var sourceryBuffer = \\\"\\\";\", at: 0)\n        }\n        outputFile.append(\"print(\\\"\\\\(sourceryBuffer)\\\", terminator: \\\"\\\");\")\n\n        let contents = outputFile.joined(separator: \"\\n\")\n        let code = \"\"\"\n        import Foundation\n        import SourceryRuntime\n\n        let context = ProcessInfo.processInfo.context!\n        let types = context.types\n        let functions = context.functions\n        let type = context.types.typesByName\n        let argument = context.argument\n\n        \\(contents)\n        \"\"\"\n        Log.benchmark(\"\\tRaw processing time for \\(sourcePath.lastComponent) took: \\(currentTimestamp() - startParsing)\")\n        return (code, includedFiles)\n    }\n\n    private static func parseCommands(in sourcePath: Path, includeStack: [Path] = []) throws -> [Command] {\n        let startProcessing = currentTimestamp()\n        let templateContent = try \"<%%>\" + sourcePath.read()\n\n        let components = templateContent.components(separatedBy: Delimiters.open)\n\n        var processedComponents = [String]()\n        var commands = [Command]()\n\n        let currentLineNumber = {\n            // the following +1 is to transform a line count (starting from 0) to a line number (starting from 1)\n            return processedComponents.joined(separator: \"\").numberOfLineSeparators + 1\n        }\n\n        for component in components.suffix(from: 1) {\n            guard let endIndex = component.range(of: Delimiters.close) else {\n                throw \"\\(sourcePath):\\(currentLineNumber()) Error while parsing template. Unmatched <%\"\n            }\n\n            var code = String(component[..<endIndex.lowerBound])\n            let shouldTrimTrailingNewLines = code.trimSuffix(\"-\")\n            let shouldTrimLeadingWhitespaces = code.trimPrefix(\"_\")\n            let shouldTrimTrailingWhitespaces = code.trimSuffix(\"_\")\n\n            // string after closing tag\n            var encodedPart = String(component[endIndex.upperBound...])\n            if shouldTrimTrailingNewLines {\n                // we trim only new line caused by script tag, not all of leading new lines in string after tag\n                encodedPart = encodedPart.replacingOccurrences(of: \"^\\\\n{1}\", with: \"\", options: .regularExpression, range: nil)\n            }\n            if shouldTrimTrailingWhitespaces {\n                // trim all leading whitespaces in string after tag\n                encodedPart = encodedPart.replacingOccurrences(of: \"^[\\\\h\\\\t]*\", with: \"\", options: .regularExpression, range: nil)\n            }\n            if shouldTrimLeadingWhitespaces {\n                if case .outputEncoded(let code)? = commands.last {\n                    // trim all trailing white spaces in previously enqued code string\n                    let trimmed = code.replacingOccurrences(of: \"[\\\\h\\\\t]*$\", with: \"\", options: .regularExpression, range: nil)\n                    _ = commands.popLast()\n                    commands.append(.outputEncoded(trimmed))\n                }\n            }\n\n            func parseInclude(command: String, defaultExtension: String) -> Path? {\n                let regex = try? NSRegularExpression(pattern: \"\\(command)\\\\(\\\"([^\\\"]*)\\\"\\\\)\", options: [])\n                let match = regex?.firstMatch(in: code, options: [], range: code.bridge().entireRange)\n                guard let includedFile = match.map({ code.bridge().substring(with: $0.range(at: 1)) }) else {\n                    return nil\n                }\n                let includePath = Path(components: [sourcePath.parent().string, includedFile])\n                // The template extension may be omitted, so try to read again by adding it if a template was not found\n                if !includePath.exists, includePath.extension != \"\\(defaultExtension)\" {\n                    return Path(includePath.string + \".\\(defaultExtension)\")\n                } else {\n                    return includePath\n                }\n            }\n\n            if code.trimPrefix(\"-\") {\n                if let includePath = parseInclude(command: \"includeFile\", defaultExtension: \"swift\") {\n                    commands.append(.includeFile(includePath))\n                } else if let includePath = parseInclude(command: \"include\", defaultExtension: \"swifttemplate\") {\n                    // Check for include cycles to prevent stack overflow and show a more user friendly error\n                    if includeStack.contains(includePath) {\n                        throw \"\\(sourcePath):\\(currentLineNumber()) Error: Include cycle detected for \\(includePath). Check your include statements so that templates do not include each other.\"\n                    }\n                    let includedCommands = try SwiftTemplate.parseCommands(in: includePath, includeStack: includeStack + [includePath])\n                    commands.append(contentsOf: includedCommands)\n                } else {\n                    throw \"\\(sourcePath):\\(currentLineNumber()) Error while parsing template. Invalid include tag format '\\(code)'\"\n                }\n            } else if code.trimPrefix(\"=\") {\n                commands.append(.output(code))\n            } else {\n                if !code.hasPrefix(\"#\") && !code.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {\n                    commands.append(.controlFlow(code))\n                }\n            }\n\n            if !encodedPart.isEmpty {\n                commands.append(.outputEncoded(encodedPart))\n            }\n            processedComponents.append(component)\n        }\n        Log.benchmark(\"\\tRaw command processing for \\(sourcePath.lastComponent) took: \\(currentTimestamp() - startProcessing)\")\n        return commands\n    }\n\n    public func render(_ context: Any) throws -> String {\n        do {\n            return try render(context: context)\n        } catch is RenderError {\n            return try render(context: context)\n        }\n    }\n\n    private func render(context: Any) throws -> String {\n        var destinationBinaryPath: Path\n        var originalBinaryPath = buildDir + Path(\".build/release/SwiftTemplate\")\n        if let cachePath = cachePath,\n           let hash = executableCacheKey,\n           let hashPath = hash.addingPercentEncoding(withAllowedCharacters: CharacterSet.alphanumerics) {\n            destinationBinaryPath = cachePath + hashPath\n            if destinationBinaryPath.exists {\n                Log.benchmark(\"Reusing built SwiftTemplate binary for SwiftTemplate with cache key: \\(hash)...\")\n            } else {\n                Log.benchmark(\"Building new SwiftTemplate binary for SwiftTemplate...\")\n                try build()\n                // attempt to create cache dir\n                try? cachePath.mkdir()\n                // attempt to move to the created `cacheDir`\n                try? originalBinaryPath.copy(destinationBinaryPath)\n            }\n            // create a link to the compiled binary in a unique stable location\n            if !buildDir.exists {\n                try buildDir.mkpath()\n            }\n            originalBinaryPath = buildDir + hashPath\n            destinationBinaryPath = destinationBinaryPath.isRelative ? destinationBinaryPath.absolute() : destinationBinaryPath\n            try FileManager.default.createSymbolicLink(atPath: originalBinaryPath.string, withDestinationPath: destinationBinaryPath.string)\n        } else {\n            try build()\n        }\n\n        let serializedContextPath = buildDir + \"context.bin\"\n        let data = try NSKeyedArchiver.archivedData(withRootObject: context, requiringSecureCoding: false)\n        if !buildDir.exists {\n            try buildDir.mkpath()\n        }\n        try serializedContextPath.write(data)\n\n        Log.benchmark(\"Binary file location: \\(originalBinaryPath.string)\")\n        if FileManager.default.fileExists(atPath: originalBinaryPath.string) {\n            let result = try Process.runCommand(path: originalBinaryPath.string,\n                                                arguments: [serializedContextPath.description])\n            if !result.error.isEmpty {\n                throw \"\\(sourcePath): \\(result.error)\"\n            }\n            return result.output\n        }\n        throw RenderError.binaryMissing\n    }\n\n    private func build() throws {\n        let startCompiling = currentTimestamp()\n        let sourcesDir = buildDir + Path(\"Sources\")\n        let templateFilesDir = sourcesDir + Path(\"SwiftTemplate\")\n        let mainFile = templateFilesDir + Path(\"main.swift\")\n        let manifestFile = buildDir + Path(\"Package.swift\")\n\n        try sourcesDir.mkpath()\n        try? templateFilesDir.delete()\n        try templateFilesDir.mkpath()\n\n        try copyRuntimePackage(to: sourcesDir)\n        if !manifestFile.exists {\n            try manifestFile.write(manifestCode)\n        }\n        try mainFile.write(mainFileCodeRaw)\n\n        try includedFiles.forEach { includedFile in\n            try includedFile.copy(templateFilesDir + Path(includedFile.lastComponent))\n        }\n#if os(macOS)\n        let arguments = [\n            \"xcrun\",\n            \"--sdk\", \"macosx\",\n            \"swift\",\n            \"build\",\n            \"-c\", \"release\",\n            \"-Xswiftc\", \"-Onone\",\n            \"-Xswiftc\", \"-suppress-warnings\",\n            \"--disable-sandbox\"\n        ]\n#else\n        let arguments = [\n            \"swift\",\n            \"build\",\n            \"-c\", \"release\",\n            \"-Xswiftc\", \"-Onone\",\n            \"-Xswiftc\", \"-suppress-warnings\",\n            \"--disable-sandbox\"\n        ]\n#endif\n        let compilationResult = try Process.runCommand(path: \"/usr/bin/env\",\n                                                       arguments: arguments,\n                                                       currentDirectoryPath: buildDir)\n        if compilationResult.exitCode != EXIT_SUCCESS {\n            throw [compilationResult.output, compilationResult.error]\n                .filter { !$0.isEmpty }\n                .joined(separator: \"\\n\")\n        }\n        Log.benchmark(\"\\tRaw compilation of SwiftTemplate took: \\(currentTimestamp() - startCompiling)\")\n    }\n\n#if os(macOS)\n    private var manifestCode: String {\n        return \"\"\"\n        // swift-tools-version:5.7\n        // The swift-tools-version declares the minimum version of Swift required to build this package.\n\n        import PackageDescription\n\n        let package = Package(\n            name: \"SwiftTemplate\",\n            platforms: [\n                .macOS(.v10_15)\n            ],\n            products: [\n                .executable(name: \"SwiftTemplate\", targets: [\"SwiftTemplate\"])\n            ],\n            targets: [\n                .target(name: \"SourceryRuntime\"),\n                .executableTarget(name: \"SwiftTemplate\", dependencies: [\"SourceryRuntime\"])\n            ]\n        )\n        \"\"\"\n    }\n#else\n    private var manifestCode: String {\n        return \"\"\"\n        // swift-tools-version:5.7\n        // The swift-tools-version declares the minimum version of Swift required to build this package.\n\n        import PackageDescription\n\n        let package = Package(\n            name: \"SwiftTemplate\",\n            products: [\n                .executable(name: \"SwiftTemplate\", targets: [\"SwiftTemplate\"])\n            ],\n            targets: [\n                .target(name: \"SourceryRuntime\"),\n                .executableTarget(name: \"SwiftTemplate\", dependencies: [\"SourceryRuntime\"])\n            ]\n        )\n        \"\"\"\n    }\n#endif\n\n    /// Brief:\n    ///   - Executable cache key is calculated solely on the contents of the SwiftTemplate ephemeral package.\n    /// Rationale:\n    ///   1. cache key is used to find SwiftTemplate `executable` file from a previous compilation\n    ///   2. `SwiftTemplate` contains types from `SourceryRuntime` and `main.swift`\n    ///   3. `main.swift` in `SwiftTemplate` contains `only .swifttemplate file processing result`\n    ///   4. Copied `includeFile` directives from the given `.swifttemplate` are also included into `SwiftTemplate` ephemeral package\n    ///\n    /// Due to this reason, the correct logic for calculating `executableCacheKey` is to only consider contents of `SwiftTemplate` ephemeral package,\n    /// because `main.swift` is **the only file** which changes in `SwiftTemplate` ephemeral binary, and `includeFiles` are the only files that may\n    /// be changed between executions of Sourcery.\n    var executableCacheKey: String? {\n        var contents = mainFileCodeRaw\n        let files = includedFiles.map({ $0.absolute() }).sorted(by: { $0.string < $1.string })\n        for file in files {\n            let hash = (try? file.read().sha256().base64EncodedString()) ?? \"\"\n            contents += \"\\n// \\(file.string)-\\(hash)\"\n        }\n\n        return contents.sha256()\n    }\n\n    private func copyRuntimePackage(to path: Path) throws {\n        try FolderSynchronizer().sync(files: sourceryRuntimeFiles, to: path + Path(\"SourceryRuntime\"))\n    }\n\n}\n\nfileprivate extension SwiftTemplate {\n\n    static var frameworksPath: Path {\n        return Path(Bundle(for: SwiftTemplate.self).bundlePath +  \"/Versions/Current/Frameworks\")\n    }\n\n}\n\n// swiftlint:disable:next force_try\nprivate let newlines = try! NSRegularExpression(pattern: \"\\\\n\\\\r|\\\\r\\\\n|\\\\r|\\\\n\", options: [])\n\nprivate extension String {\n    var numberOfLineSeparators: Int {\n        return newlines.matches(in: self, options: [], range: NSRange(location: 0, length: self.count)).count\n    }\n\n    var stringEncoded: String {\n        return self.unicodeScalars.map { x -> String in\n            return x.escaped(asASCII: true)\n        }.joined(separator: \"\")\n    }\n}\n\nprivate extension Process {\n    static func runCommand(path: String, arguments: [String], currentDirectoryPath: Path? = nil) throws -> ProcessResult {\n        let task = Process()\n        var environment = ProcessInfo.processInfo.environment\n\n        // https://stackoverflow.com/questions/67595371/swift-package-calling-usr-bin-swift-errors-with-failed-to-open-macho-file-to\n        if ProcessInfo.processInfo.environment.keys.contains(\"OS_ACTIVITY_DT_MODE\") {\n            environment = ProcessInfo.processInfo.environment\n            environment[\"OS_ACTIVITY_DT_MODE\"] = nil\n        }\n\n        task.launchPath = path\n        task.environment = environment\n        task.arguments = arguments\n        if let currentDirectoryPath = currentDirectoryPath {\n            if #available(OSX 10.13, *) {\n                task.currentDirectoryURL = currentDirectoryPath.url\n            } else {\n                task.currentDirectoryPath = currentDirectoryPath.description\n            }\n        }\n\n        let outputPipe = Pipe()\n        let errorPipe = Pipe()\n        task.standardOutput = outputPipe\n        task.standardError = errorPipe\n        let outHandle = outputPipe.fileHandleForReading\n        let errorHandle = errorPipe.fileHandleForReading\n\n        Log.verbose(path + \" \" + arguments.map { \"\\\"\\($0)\\\"\" }.joined(separator: \" \"))\n        task.launch()\n\n        let outputData = outHandle.readDataToEndOfFile()\n        let errorData = errorHandle.readDataToEndOfFile()\n        outHandle.closeFile()\n        errorHandle.closeFile()\n\n        task.waitUntilExit()\n\n        let output = String(data: outputData, encoding: .utf8) ?? \"\"\n        let error = String(data: errorData, encoding: .utf8) ?? \"\"\n\n        return ProcessResult(output: output, error: error, exitCode: task.terminationStatus)\n    }\n}\n\nextension String {\n    func bridge() -> NSString {\n#if os(Linux)\n        return NSString(string: self)\n#else\n        return self as NSString\n#endif\n    }\n}\n\nstruct FolderSynchronizer {\n    struct File {\n        let name: String\n        let content: String\n\n        init(name: String, content: String) {\n            assert(name.isEmpty == false)\n            self.name = name\n            self.content = content\n        }\n    }\n\n    func sync(files: [File], to dir: Path) throws {\n        if dir.exists {\n            let synchronizedPaths = files.map { dir + Path($0.name) }\n            try dir.children().forEach({ path in\n                if synchronizedPaths.contains(path) {\n                    return\n                }\n                try path.delete()\n            })\n        } else {\n            try dir.mkpath()\n        }\n        try files.forEach { file in\n            let filePath = dir + Path(file.name)\n            try filePath.write(file.content)\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/ConfigurationSpec.swift",
    "content": "import Quick\nimport Nimble\nimport PathKit\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n\nclass ConfigurationSpec: QuickSpec {\n    // swiftlint:disable:next function_body_length\n    override func spec() {\n        let relativePath = Path(\"/some/path\")\n\n        describe(\"Configuration\") {\n            let serverUrlArg = \"serverUrl\"\n            let serverUrl: String = \"www.example.com\"\n            let sourcePath = \"Sources\"\n            let env = [\"SOURCE_PATH\": sourcePath,\n                       serverUrlArg: serverUrl]\n\n            context(\"given valid config file with env placeholders\") {\n\n                it(\"replaces the env placeholder\") {\n                    do {\n                        let config = try Configuration(\n                            path: Stubs.configs + \"valid.yml\",\n                            relativePath: relativePath,\n                            env: env\n                        )\n                        guard case let Source.sources(paths) = config.source,\n                            let path = paths.include.first else {\n                            fail(\"Config has no Source Paths\")\n                            return\n                        }\n\n                        let configServerUrl = config.args[serverUrlArg] as? String\n\n                        expect(configServerUrl).to(equal(serverUrl))\n                        expect(path).to(equal(\"/some/path/Sources\"))\n                    } catch {\n                        expect(\"\\(error)\").to(equal(\"Invalid config file format. Expected dictionary.\"))\n                    }\n                }\n\n                it(\"removes args entries with missing env variables\") {\n                    do {\n                        let config = try Configuration(path: Stubs.configs + \"valid.yml\",\n                                                       relativePath: relativePath,\n                                                       env: env)\n\n                        let serverPort = config.args[\"serverPort\"] as? String\n\n                        expect(serverPort).to(equal(\"\"))\n                    } catch {\n                        expect(\"\\(error)\").to(equal(\"Invalid config file format. Expected dictionary.\"))\n                    }\n                }\n            }\n\n            context(\"given config file with multiple configurations\") {\n                it(\"resolves each configuration\") {\n                    do {\n                        let configs = try Configurations.make(\n                            path: Stubs.configs + \"multi.yml\",\n                            relativePath: relativePath,\n                            env: env\n                        )\n\n                        expect(configs.count).to(equal(2))\n\n                        configs.enumerated().forEach { offset, config in\n                            guard case let Source.sources(paths) = config.source,\n                                  let path = paths.include.first else {\n                                fail(\"Config has no Source Paths\")\n                                return\n                            }\n\n                            let configServerUrl = config.args[serverUrlArg] as? String\n\n                            expect(configServerUrl).to(equal(\"\\(serverUrl)/\\(offset)\"))\n                            expect(path).to(equal(Path(\"/some/path/Sources/\\(offset)\")))\n                        }\n                    } catch {\n                        expect(\"\\(error)\").to(equal(\"Invalid config file format. Expected dictionary.\"))\n                    }\n                }\n            }\n\n            context(\"given config file with child configurations\") {\n                it(\"resolves each child configuration\") {\n                    do {\n                        let configs = try Configurations.make(\n                            path: Stubs.configs + \"parent.yml\",\n                            relativePath: Stubs.configs,\n                            env: env\n                        )\n\n                        expect(configs.count).to(equal(1))\n\n                        guard case let Source.sources(paths) = configs[0].source,\n                              let path = paths.include.first else {\n                            fail(\"Config has no Source Paths\")\n                            return\n                        }\n\n                        let configServerUrl = configs[0].args[serverUrlArg] as? String\n\n                        expect(configServerUrl).to(equal(serverUrl))\n                        expect(path).to(equal(Stubs.configs + sourcePath))\n                    } catch {\n                        expect(\"\\(error)\").to(equal(\"Invalid config file format. Expected dictionary.\"))\n                    }\n                }\n            }\n\n            context(\"given invalid config file\") {\n\n                func configError(_ config: [String: Any]) -> String {\n                    do {\n                        _ = try Configuration(dict: config, relativePath: relativePath)\n                        return \"No error\"\n                    } catch {\n                        return \"\\(error)\"\n                    }\n                }\n\n                it(\"throws error on invalid file format\") {\n                    do {\n                        _ = try Configuration(\n                            path: Stubs.configs + \"invalid.yml\",\n                            relativePath: relativePath,\n                            env: [:]\n                        )\n                        fail(\"expected to throw error\")\n                    } catch {\n                        expect(\"\\(error)\").to(equal(\"Invalid config file format. Expected dictionary.\"))\n                    }\n                }\n\n                it(\"throws error on empty sources\") {\n                    let config: [String: Any] = [\"sources\": [], \"templates\": [\".\"], \"output\": \".\"]\n                    expect(configError(config)).to(equal(\"Invalid sources. No paths provided.\"))\n                }\n\n                it(\"throws error on missing sources\") {\n                    let config: [String: Any] = [\"templates\": [\".\"], \"output\": \".\"]\n                    expect(configError(config)).to(equal(\"Invalid sources. 'sources', 'project' or 'package' key are missing.\"))\n                }\n\n                it(\"throws error on invalid sources format\") {\n                    let config: [String: Any] = [\"sources\": [\"inc\": [\".\"]], \"templates\": [\".\"], \"output\": \".\"]\n                    expect(configError(config)).to(equal(\"Invalid sources. No paths provided. Expected list of strings or object with 'include' and optional 'exclude' keys.\"))\n                }\n\n                it(\"throws error on missing sources include key\") {\n                    let config: [String: Any] = [\"sources\": [\"exclude\": [\".\"]], \"templates\": [\".\"], \"output\": \".\"]\n                    expect(configError(config)).to(equal(\"Invalid sources. No paths provided. Expected list of strings or object with 'include' and optional 'exclude' keys.\"))\n                }\n\n                it(\"throws error on invalid sources include format\") {\n                    let config: [String: Any] = [\"sources\": [\"include\": \".\"], \"templates\": [\".\"], \"output\": \".\"]\n                    expect(configError(config)).to(equal(\"Invalid sources. No paths provided. Expected list of strings or object with 'include' and optional 'exclude' keys.\"))\n                }\n\n                it(\"throws error on missing templates key\") {\n                    let config: [String: Any] = [\"sources\": [\".\"], \"output\": \".\"]\n                    expect(configError(config)).to(equal(\"Invalid templates. 'templates' key is missing.\"))\n                }\n\n                it(\"throws error on empty templates\") {\n                    let config: [String: Any] = [\"sources\": [\".\"], \"templates\": [], \"output\": \".\"]\n                    expect(configError(config)).to(equal(\"Invalid templates. No paths provided.\"))\n                }\n\n                it(\"throws error on missing template include key\") {\n                    let config: [String: Any] = [\"sources\": [\".\"], \"templates\": [\"exclude\": [\".\"]], \"output\": \".\"]\n                    expect(configError(config)).to(equal(\"Invalid templates. No paths provided. Expected list of strings or object with 'include' and optional 'exclude' keys.\"))\n                }\n\n                it(\"throws error on invalid template include format\") {\n                    let config: [String: Any] = [\"sources\": [\".\"], \"templates\": [\"include\": \".\"], \"output\": \".\"]\n                    expect(configError(config)).to(equal(\"Invalid templates. No paths provided. Expected list of strings or object with 'include' and optional 'exclude' keys.\"))\n                }\n\n                it(\"throws error on empty projects\") {\n                    let config: [String: Any] = [\"project\": [], \"templates\": [\".\"], \"output\": \".\"]\n                    expect(configError(config)).to(equal(\"Invalid sources. No projects provided.\"))\n                }\n\n                it(\"throws error on missing project file\") {\n                    let config: [String: Any] = [\"project\": [\"root\": \".\"], \"templates\": [\".\"], \"output\": \".\"]\n                    expect(configError(config)).to(equal(\"Invalid sources. Project file path is not provided. Expected string.\"))\n                }\n\n                it(\"throws error on missing target key\") {\n                    let config: [String: Any] = [\"project\": [\"file\": \".\", \"root\": \".\"], \"templates\": [\".\"], \"output\": \".\"]\n                    expect(configError(config)).to(equal(\"Invalid sources. 'target' key is missing. Expected object or array of objects.\"))\n                }\n\n                it(\"throws error on empty targets\") {\n                    let config: [String: Any] = [\"project\": [\"file\": \".\", \"root\": \".\", \"target\": []], \"templates\": [\".\"], \"output\": \".\"]\n                    expect(configError(config)).to(equal(\"Invalid sources. No targets provided.\"))\n                }\n\n                it(\"throws error on missing target name key\") {\n                    let config: [String: Any] = [\"project\": [\"file\": \".\", \"root\": \".\", \"target\": [\"module\": \"module\"]], \"templates\": [\".\"], \"output\": \".\"]\n                    expect(configError(config)).to(equal(\"Invalid sources. Target name is not provided. Expected string.\"))\n                }\n\n                it(\"throws error on missing output key\") {\n                    let config: [String: Any] = [\"sources\": [\".\"], \"templates\": [\".\"]]\n                    expect(configError(config)).to(equal(\"Invalid output. 'output' key is missing or is not a string or object.\"))\n                }\n\n                it(\"throws error on invalid output format\") {\n                    let config: [String: Any] = [\"sources\": [\".\"], \"templates\": [\".\"], \"output\": [\".\"]]\n                    expect(configError(config)).to(equal(\"Invalid output. 'output' key is missing or is not a string or object.\"))\n                }\n\n                it(\"throws error on invalid cacheBasePath format\") {\n                    let config: [String: Any] = [\"sources\": [\".\"], \"templates\": [\".\"], \"output\": \".\", \"cacheBasePath\": [\".\"]]\n                    expect(configError(config)).to(equal(\"Invalid cacheBasePath. 'cacheBasePath' key is not a string.\"))\n                }\n\n            }\n\n        }\n\n        describe(\"Source\") {\n            context(\"provided with sources paths\") {\n                it(\"include paths provided as an array\") {\n                    let config: [String: Any] = [\"sources\": [\".\"], \"templates\": [\".\"], \"output\": \".\"]\n                    let source = try? Configuration(dict: config, relativePath: relativePath).source\n                    let expected = Source.sources(Paths(include: [relativePath]))\n                    expect(source).to(equal(expected))\n                }\n\n                it(\"include paths provided with `include` key\") {\n                    let config: [String: Any] = [\"sources\": [\"include\": [\".\"]], \"templates\": [\".\"], \"output\": \".\"]\n                    let source = try? Configuration(dict: config, relativePath: relativePath).source\n                    let expected = Source.sources(Paths(include: [relativePath]))\n                    expect(source).to(equal(expected))\n                }\n\n                it(\"exclude paths provided with the `exclude` key\") {\n                    let config: [String: Any] = [\"sources\": [\"include\": [\".\"], \"exclude\": [\"excludedPath\"]], \"templates\": [\".\"], \"output\": \".\"]\n                    let source = try? Configuration(dict: config, relativePath: relativePath).source\n                    let expected = Source.sources(Paths(include: [relativePath], exclude: [relativePath + \"excludedPath\"]))\n                    expect(source).to(equal(expected))\n                }\n            }\n        }\n\n        describe(\"Templates\") {\n            context(\"provided with templates paths\") {\n                it(\"include paths provided as an array\") {\n                    let config: [String: Any] = [\"sources\": [\".\"], \"templates\": [\".\"], \"output\": \".\"]\n                    let templates = try? Configuration(dict: config, relativePath: relativePath).templates\n                    let expected = Paths(include: [relativePath])\n                    expect(templates).to(equal(expected))\n                }\n\n                it(\"include paths provided with `include` key\") {\n                    let config: [String: Any] = [\"sources\": [\".\"], \"templates\": [\"include\": [\".\"]], \"output\": \".\"]\n                    let templates = try? Configuration(dict: config, relativePath: relativePath).templates\n                    let expected = Paths(include: [relativePath])\n                    expect(templates).to(equal(expected))\n                }\n\n                it(\"exclude paths provided with the `exclude` key\") {\n                    let config: [String: Any] = [\"sources\": [\".\"], \"templates\": [\"include\": [\".\"], \"exclude\": [\"excludedPath\"]], \"output\": \".\"]\n                    let templates = try? Configuration(dict: config, relativePath: relativePath).templates\n                    let expected = Paths(include: [relativePath], exclude: [relativePath + \"excludedPath\"])\n                    expect(templates).to(equal(expected))\n                }\n            }\n        }\n\n        describe(\"Cache Base Path\") {\n            context(\"provided with cacheBasePath\") {\n                it(\"has the correct cacheBasePath\") {\n                    let config: [String: Any] = [\"sources\": [\".\"], \"templates\": [\".\"], \"output\": \".\", \"cacheBasePath\": \"test-base-path\"]\n                    let cacheBasePath = try? Configuration(dict: config, relativePath: relativePath).cacheBasePath\n                    let expected = Path(\"test-base-path\", relativeTo: relativePath)\n                    expect(cacheBasePath).to(equal(expected))\n                }\n            }\n        }\n\n        describe(\"Parse Documentation\") {\n            context(\"when parseDocumentation is true\") {\n                it(\"has the correct parseDocumentation\") {\n                    let config: [String: Any] = [\"sources\": [\".\"], \"templates\": [\".\"], \"output\": \".\", \"parseDocumentation\": true]\n                    let parseDocumentation = try? Configuration(dict: config, relativePath: relativePath).parseDocumentation\n                    let expected = true\n                    expect(parseDocumentation).to(equal(expected))\n                }\n            }\n\n            context(\"when parseDocumentation is unset\") {\n                it(\"defaults to false\") {\n                    let config: [String: Any] = [\"sources\": [\".\"], \"templates\": [\".\"], \"output\": \".\"]\n                    let parseDocumentation = try? Configuration(dict: config, relativePath: relativePath).parseDocumentation\n                    let expected = false\n                    expect(parseDocumentation).to(equal(expected))\n                }\n            }\n        }\n    }\n}\n\nextension Source: Equatable {\n    public static func == (lhs: Source, rhs: Source) -> Bool {\n        switch (lhs, rhs) {\n        case let (.projects(lProjects), .projects(rProjects)):\n            return lProjects == rProjects\n        case let (.sources(lPaths), .sources(rPaths)):\n            return lPaths == rPaths\n        default:\n            return false\n        }\n    }\n}\n\nextension Project: Equatable {\n    public static func == (lhs: Project, rhs: Project) -> Bool {\n        return lhs.root == rhs.root\n    }\n}\n\nextension Paths: Equatable {\n    public static func == (lhs: Paths, rhs: Paths) -> Bool {\n        return lhs.include == rhs.include\n            && lhs.exclude == rhs.exclude\n            && lhs.allPaths == rhs.allPaths\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Generating/JavaScriptTemplateSpecs.swift",
    "content": "#if !canImport(ObjectiveC)\n#else\nimport Foundation\nimport Quick\nimport Nimble\nimport PathKit\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\n@testable import SourceryJS\n\nclass JavaScriptTemplateTests: QuickSpec {\n    override func spec() {\n        describe(\"JavaScriptTemplate\") {\n            let outputDir: Path = {\n                return Stubs.cleanTemporarySourceryDir()\n            }()\n            let output = Output(outputDir)\n\n            it(\"generates correct output\") {\n                let templatePath = Stubs.jsTemplates + Path(\"Equality.ejs\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic.swift\")).read(.utf8)\n\n                expect { try Sourcery(cacheDisabled: true).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                expect(result).to(equal(expectedResult))\n            }\n            \n            it(\"provides protocol compositions\") {\n                let templatePath = Stubs.jsTemplates + Path(\"ProtocolCompositions.ejs\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"ProtocolCompositions.swift\")).read(.utf8)\n                \n                expect { try Sourcery(cacheDisabled: true).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                print(\"expected:\\n\\(expectedResult)\\n\\ngot:\\n\\(result)\")\n                expect(result).to(equal(expectedResult))\n            }\n            \n            it(\"provides protocol all typealiases\") {\n                let templatePath = Stubs.jsTemplates + Path(\"AllTypealiases.ejs\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"AllTypealiases.swift\")).read(.utf8)\n                \n                expect { try Sourcery(cacheDisabled: true).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                print(\"expected:\\n\\(expectedResult)\\n\\ngot:\\n\\(result)\")\n                expect(result).to(equal(expectedResult))\n            }\n            \n            it(\"provides typealias information\") {\n                let templatePath = Stubs.jsTemplates + Path(\"Typealiases.ejs\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"Typealiases.swift\")).read(.utf8)\n                \n                expect { try Sourcery(cacheDisabled: true).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                print(\"expected:\\n\\(expectedResult)\\n\\ngot:\\n\\(result)\")\n                expect(result).to(equal(expectedResult))\n            }\n\n            it(\"handles includes\") {\n                let templatePath = Stubs.jsTemplates + Path(\"Includes.ejs\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic+Other.swift\")).read(.utf8)\n\n                expect { try Sourcery(cacheDisabled: true).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                expect(result).to(equal(expectedResult))\n            }\n\n            it(\"handles includes from included files relatively\") {\n                let templatePath = Stubs.jsTemplates + Path(\"SubfolderIncludes.ejs\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic.swift\")).read(.utf8)\n\n                expect { try Sourcery(cacheDisabled: true).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                expect(result).to(equal(expectedResult))\n            }\n\n            it(\"rethrows template parsing errors\") {\n                expect {\n                    expect(EJSTemplate.ejsPath).toNot(beNil())\n                    try Generator.generate(nil, types: Types(types: []), functions: [], template: JavaScriptTemplate(templateString: \"<% invalid %>\", ejsPath: EJSTemplate.ejsPath!))\n                    }\n                    .to(throwError(closure: { (error) in\n                        expect(\"\\(error)\").to(equal(\": ReferenceError: ejs:1\\n >> 1| <% invalid %>\\n\\nCan\\'t find variable: invalid\"))\n                    }))\n            }\n\n            it(\"rethrows template runtime errors\") {\n                expect {\n                    expect(EJSTemplate.ejsPath).toNot(beNil())\n                    try Generator.generate(nil, types: Types(types: []), functions: [], template: JavaScriptTemplate(templateString: \"<%_ for (type of types.implementing.Some) { -%><% } %>\", ejsPath: EJSTemplate.ejsPath!))\n                    }\n                    .to(throwError(closure: { (error) in\n                        expect(\"\\(error)\").to(equal(\": Unknown type Some, should be used with `based`\"))\n                    }))\n            }\n\n            it(\"throws unknown property exception\") {\n                expect {\n                    expect(EJSTemplate.ejsPath).toNot(beNil())\n                    try Generator.generate(nil, types: Types(types: []), functions: [], template: JavaScriptTemplate(templateString: \"<%_ for (type of types.implements.Some) { -%><% } %>\", ejsPath: EJSTemplate.ejsPath!))\n                    }\n                    .to(throwError(closure: { (error) in\n                        expect(\"\\(error)\").to(equal(\": TypeError: ejs:1\\n >> 1| <%_ for (type of types.implements.Some) { -%><% } %>\\n\\nUnknown property `implements`\"))\n                    }))\n            }\n\n            it(\"handles free functions\") {\n                let templatePath = Stubs.jsTemplates + Path(\"Function.ejs\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"Function.swift\")).read(.utf8)\n\n                expect { try Sourcery(cacheDisabled: true).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                expect(result).to(equal(expectedResult))\n            }\n        }\n    }\n}\n#endif\n"
  },
  {
    "path": "SourceryTests/Generating/StencilTemplateSpec.swift",
    "content": "import Quick\nimport Nimble\nimport PathKit\nimport SourceryStencil\n#if SWIFT_PACKAGE\nimport Foundation\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\n\nclass StencilTemplateSpec: QuickSpec {\n    // swiftlint:disable:next function_body_length\n    override func spec() {\n\n        describe(\"StencilTemplate\") {\n\n            func generate(_ template: String) -> String {\n                let arrayAnnotations = Variable(name: \"annotated1\", typeName: TypeName(name: \"MyClass\"))\n                arrayAnnotations.annotations = [\"Foo\": [\"Hello\", \"beautiful\", \"World\"] as NSArray]\n                let singleAnnotation = Variable(name: \"annotated2\", typeName: TypeName(name: \"MyClass\"))\n                singleAnnotation.annotations = [\"Foo\": \"HelloWorld\" as NSString]\n                return (try? Generator.generate(nil, types: Types(types: [\n                    Class(name: \"MyClass\", variables: [\n                        Variable(name: \"lowerFirstLetter\", typeName: TypeName(name: \"myClass\")),\n                        Variable(name: \"upperFirstLetter\", typeName: TypeName(name: \"MyClass\")),\n                        arrayAnnotations,\n                        singleAnnotation\n                        ])\n                ]), functions: [], template: StencilTemplate(templateString: template))) ?? \"\"\n            }\n\n            describe(\"json\") {\n                context(\"given dictionary\") {\n                    let context = TemplateContext(\n                        parserResult: nil,\n                        types: Types(types: []),\n                        functions: [],\n                        arguments: [\"json\": [\"Version\": 1] as NSDictionary]\n                    )\n\n                    it(\"renders unpretty json\") {\n                        let result = try? StencilTemplate(templateString: \"{{ argument.json | json }}\").render(context)\n                        expect(result).to(equal(\"{\\\"Version\\\":1}\"))\n                    }\n                    it(\"renders pretty json\") {\n                        let result = try? StencilTemplate(templateString: \"{{ argument.json | json:true }}\").render(context)\n                        expect(result).to(equal(\"{\\n  \\\"Version\\\" : 1\\n}\"))\n                    }\n                }\n                context(\"given array\") {\n                    let context = TemplateContext(\n                        parserResult: nil,\n                        types: Types(types: []),\n                        functions: [],\n                        arguments: [\"json\": [\"a\", \"b\"] as NSArray]\n                    )\n\n                    it(\"renders unpretty json\") {\n                        let result = try? StencilTemplate(templateString: \"{{ argument.json | json }}\").render(context)\n                        expect(result).to(equal(\"[\\\"a\\\",\\\"b\\\"]\"))\n                    }\n                    it(\"renders pretty json\") {\n                        let result = try? StencilTemplate(templateString: \"{{ argument.json | json:true }}\").render(context)\n                        expect(result).to(equal(\"[\\n  \\\"a\\\",\\n  \\\"b\\\"\\n]\"))\n                    }\n                }\n            }\n\n            describe(\"toArray\") {\n                #if canImport(ObjectiveC)\n                context(\"given array\") {\n                    it(\"doesnt modify the value\") {\n                        let result = generate(\"{% for key,value in type.MyClass.variables.2.annotations %}{{ value | toArray }}{% endfor %}\")\n                        expect(result).to(equal(\"[Hello, beautiful, World]\"))\n                    }\n                }\n                #else\n                context(\"given array\") {\n                    it(\"doesnt modify the value\") {\n                        let result = generate(\"{% for key,value in type.MyClass.variables.2.annotations %}{{ value | toArray }}{% endfor %}\")\n                        expect(result).to(equal(\"[\\\"Hello\\\", \\\"beautiful\\\", \\\"World\\\"]\"))\n                    }\n                }\n                #endif\n\n                context(\"given something\") {\n                    it(\"transforms it into array\") {\n                        let result = generate(\"{% for key,value in type.MyClass.variables.3.annotations %}{{ value | toArray }}{% endfor %}\")\n                        expect(result).to(equal(\"[HelloWorld]\"))\n                    }\n                }\n            }\n\n            describe(\"count\") {\n                context(\"given array\") {\n                    it(\"counts it\") {\n                        let result = generate(\"{{ type.MyClass.allVariables | count }}\")\n                        expect(result).to(equal(\"4\"))\n                    }\n                }\n            }\n\n            describe(\"isEmpty\") {\n                context(\"given empty array\") {\n                    it(\"returns true\") {\n                    let result = generate(\"{{ type.MyClass.allMethods | isEmpty }}\")\n                        expect(result).to(equal(\"true\"))\n                    }\n                }\n\n                context(\"given non-empty array\") {\n                    it(\"returns false\") {\n                    let result = generate(\"{{ type.MyClass.allVariables | isEmpty }}\")\n                        expect(result).to(equal(\"false\"))\n                    }\n                }\n            }\n\n            describe(\"sorted\") {\n              #if canImport(ObjectiveC)\n              context(\"given array\") {\n                it(\"sorts it\") {\n                  let result = generate(\"{% for key,value in type.MyClass.variables.2.annotations %}{{ value | sorted:\\\"description\\\" }}{% endfor %}\")\n                  expect(result).to(equal(\"[beautiful, Hello, World]\"))\n                }\n              }\n              #else\n              context(\"given array\") {\n                it(\"sorts it\") {\n                  let result = generate(\"{% for key,value in type.MyClass.variables.2.annotations %}{{ value | sorted:\\\"description\\\" }}{% endfor %}\")\n                  expect(result).to(equal(\"[\\\"beautiful\\\", \\\"Hello\\\", \\\"World\\\"]\"))\n                }\n              }\n              #endif\n            }\n\n            describe(\"sortedDescending\") {\n                context(\"given array\") {\n                    #if canImport(ObjectiveC)\n                    it(\"sorts it descending\") {\n                        let result = generate(\"{% for key,value in type.MyClass.variables.2.annotations %}{{ value | sortedDescending:\\\"description\\\" }}{% endfor %}\")\n                        expect(result).to(equal(\"[World, Hello, beautiful]\"))\n                    }\n                    #else\n                    it(\"sorts it descending\") {\n                        let result = generate(\"{% for key,value in type.MyClass.variables.2.annotations %}{{ value | sortedDescending:\\\"description\\\" }}{% endfor %}\")\n                        expect(result).to(equal(\"[\\\"World\\\", \\\"Hello\\\", \\\"beautiful\\\"]\"))\n                    }\n                    #endif\n                }\n            }\n\n            describe(\"reversed\") {\n                context(\"given array\") {\n                    #if canImport(ObjectiveC)\n                    it(\"reverses it\") {\n                        let result = generate(\"{% for key,value in type.MyClass.variables.2.annotations %}{{ value | reversed }}{% endfor %}\")\n                        expect(result).to(equal(\"[World, beautiful, Hello]\"))\n                    }\n                    #else\n                    it(\"reverses it\") {\n                        let result = generate(\"{% for key,value in type.MyClass.variables.2.annotations %}{{ value | reversed }}{% endfor %}\")\n                        expect(result).to(equal(\"[\\\"World\\\", \\\"beautiful\\\", \\\"Hello\\\"]\"))\n                    }\n                    #endif\n                }\n            }\n\n            context(\"given string\") {\n                it(\"generates upperFirstLetter\") {\n                    expect( generate(\"{{\\\"helloWorld\\\" | upperFirstLetter }}\")).to(equal(\"HelloWorld\"))\n                }\n\n                it(\"generates lowerFirstLetter\") {\n                    expect(generate(\"{{\\\"HelloWorld\\\" | lowerFirstLetter }}\")).to(equal(\"helloWorld\"))\n                }\n\n                it(\"generates uppercase\") {\n                    expect(generate(\"{{ \\\"HelloWorld\\\" | uppercase }}\")).to(equal(\"HELLOWORLD\"))\n                }\n\n                it(\"generates lowercase\") {\n                    expect(generate(\"{{ \\\"HelloWorld\\\" | lowercase }}\")).to(equal(\"helloworld\"))\n                }\n\n                it(\"generates capitalise\") {\n                    expect(generate(\"{{ \\\"helloWorld\\\" | capitalise }}\")).to(equal(\"Helloworld\"))\n                }\n\n                it(\"generates deletingLastComponent\") {\n                    expect(generate(\"{{ \\\"/Path/Class.swift\\\" | deletingLastComponent }}\")).to(equal(\"/Path\"))\n                }\n\n                it(\"checks for string in name\") {\n                    expect(generate(\"{{ \\\"FooBar\\\" | contains:\\\"oo\\\" }}\")).to(equal(\"true\"))\n                    expect(generate(\"{{ \\\"FooBar\\\" | contains:\\\"xx\\\" }}\")).to(equal(\"false\"))\n                    expect(generate(\"{{ \\\"FooBar\\\" | !contains:\\\"oo\\\" }}\")).to(equal(\"false\"))\n                    expect(generate(\"{{ \\\"FooBar\\\" | !contains:\\\"xx\\\" }}\")).to(equal(\"true\"))\n                }\n\n                it(\"checks for string in prefix\") {\n                    expect(generate(\"{{ \\\"FooBar\\\" | hasPrefix:\\\"Foo\\\" }}\")).to(equal(\"true\"))\n                    expect(generate(\"{{ \\\"FooBar\\\" | hasPrefix:\\\"Bar\\\" }}\")).to(equal(\"false\"))\n                    expect(generate(\"{{ \\\"FooBar\\\" | !hasPrefix:\\\"Foo\\\" }}\")).to(equal(\"false\"))\n                    expect(generate(\"{{ \\\"FooBar\\\" | !hasPrefix:\\\"Bar\\\" }}\")).to(equal(\"true\"))\n                }\n\n                it(\"checks for string in suffix\") {\n                    expect(generate(\"{{ \\\"FooBar\\\" | hasSuffix:\\\"Bar\\\" }}\")).to(equal(\"true\"))\n                    expect(generate(\"{{ \\\"FooBar\\\" | hasSuffix:\\\"Foo\\\" }}\")).to(equal(\"false\"))\n                    expect(generate(\"{{ \\\"FooBar\\\" | !hasSuffix:\\\"Bar\\\" }}\")).to(equal(\"false\"))\n                    expect(generate(\"{{ \\\"FooBar\\\" | !hasSuffix:\\\"Foo\\\" }}\")).to(equal(\"true\"))\n                }\n\n                it(\"removes instances of a substring\") {\n                    expect(generate(\"{{\\\"helloWorld\\\" | replace:\\\"he\\\",\\\"bo\\\" | replace:\\\"llo\\\",\\\"la\\\" }}\")).to(equal(\"bolaWorld\"))\n                    expect(generate(\"{{\\\"helloWorldhelloWorld\\\" | replace:\\\"hello\\\",\\\"hola\\\" }}\")).to(equal(\"holaWorldholaWorld\"))\n                    expect(generate(\"{{\\\"helloWorld\\\" | replace:\\\"hello\\\",\\\"\\\" }}\")).to(equal(\"World\"))\n                    expect(generate(\"{{\\\"helloWorld\\\" | replace:\\\"foo\\\",\\\"bar\\\" }}\")).to(equal(\"helloWorld\"))\n                }\n            }\n\n            context(\"given TypeName\") {\n                it(\"generates upperFirstLetter\") {\n                    expect(generate(\"{{ type.MyClass.variables.0.typeName }}\")).to(equal(\"myClass\"))\n                }\n\n                it(\"generates upperFirstLetter\") {\n                    expect(generate(\"{{ type.MyClass.variables.0.typeName | upperFirstLetter }}\")).to(equal(\"MyClass\"))\n                }\n\n                it(\"generates lowerFirstLetter\") {\n                    expect(generate(\"{{ type.MyClass.variables.1.typeName | lowerFirstLetter }}\")).to(equal(\"myClass\"))\n                }\n\n                it(\"generates uppercase\") {\n                    expect(generate(\"{{ type.MyClass.variables.0.typeName | uppercase }}\")).to(equal(\"MYCLASS\"))\n                }\n\n                it(\"generates lowercase\") {\n                    expect(generate(\"{{ type.MyClass.variables.1.typeName | lowercase }}\")).to(equal(\"myclass\"))\n                }\n\n                it(\"generates capitalise\") {\n                    expect(generate(\"{{ type.MyClass.variables.1.typeName | capitalise }}\")).to(equal(\"Myclass\"))\n                }\n\n                it(\"checks for string in name\") {\n                    expect(generate(\"{{ type.MyClass.variables.0.typeName | contains:\\\"my\\\" }}\")).to(equal(\"true\"))\n                    expect(generate(\"{{ type.MyClass.variables.0.typeName | contains:\\\"xx\\\" }}\")).to(equal(\"false\"))\n                    expect(generate(\"{{ type.MyClass.variables.0.typeName | !contains:\\\"my\\\" }}\")).to(equal(\"false\"))\n                    expect(generate(\"{{ type.MyClass.variables.0.typeName | !contains:\\\"xx\\\" }}\")).to(equal(\"true\"))\n                }\n\n                it(\"checks for string in prefix\") {\n                    expect(generate(\"{{ type.MyClass.variables.0.typeName | hasPrefix:\\\"my\\\" }}\")).to(equal(\"true\"))\n                    expect(generate(\"{{ type.MyClass.variables.0.typeName | hasPrefix:\\\"My\\\" }}\")).to(equal(\"false\"))\n                    expect(generate(\"{{ type.MyClass.variables.0.typeName | !hasPrefix:\\\"my\\\" }}\")).to(equal(\"false\"))\n                    expect(generate(\"{{ type.MyClass.variables.0.typeName | !hasPrefix:\\\"My\\\" }}\")).to(equal(\"true\"))\n                }\n\n                it(\"checks for string in suffix\") {\n                    expect(generate(\"{{ type.MyClass.variables.0.typeName | hasSuffix:\\\"Class\\\" }}\")).to(equal(\"true\"))\n                    expect(generate(\"{{ type.MyClass.variables.0.typeName | hasSuffix:\\\"class\\\" }}\")).to(equal(\"false\"))\n                    expect(generate(\"{{ type.MyClass.variables.0.typeName | !hasSuffix:\\\"Class\\\" }}\")).to(equal(\"false\"))\n                    expect(generate(\"{{ type.MyClass.variables.0.typeName | !hasSuffix:\\\"class\\\" }}\")).to(equal(\"true\"))\n                }\n\n                it(\"removes instances of a substring\") {\n                    expect(generate(\"{{type.MyClass.variables.0.typeName | replace:\\\"my\\\",\\\"My\\\" | replace:\\\"Class\\\",\\\"Struct\\\" }}\")).to(equal(\"MyStruct\"))\n                    expect(generate(\"{{type.MyClass.variables.0.typeName | replace:\\\"s\\\",\\\"z\\\" }}\")).to(equal(\"myClazz\"))\n                    expect(generate(\"{{type.MyClass.variables.0.typeName | replace:\\\"my\\\",\\\"\\\" }}\")).to(equal(\"Class\"))\n                    expect(generate(\"{{type.MyClass.variables.0.typeName | replace:\\\"foo\\\",\\\"bar\\\" }}\")).to(equal(\"myClass\"))\n                }\n\n            }\n\n            it(\"rethrows template parsing errors\") {\n                expect {\n                    try Generator.generate(nil, types: Types(types: []), functions: [], template: StencilTemplate(templateString: \"{% tag %}\"))\n                    }\n                    .to(throwError(closure: { (error) in\n                        expect(\"\\(error)\").to(equal(\": Unknown template tag 'tag'\"))\n                    }))\n            }\n\n            it(\"includes partial templates\") {\n                var outputDir = Path(\"/tmp\")\n                outputDir = Stubs.cleanTemporarySourceryDir()\n\n                let templatePath = Stubs.templateDirectory + Path(\"Include.stencil\")\n                let expectedResult = \"// Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\\n\" +\n                    \"// DO NOT EDIT\\n\" +\n                \"partial template content\\n\"\n\n                expect { try Sourcery(cacheDisabled: true).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: Output(outputDir), baseIndentation: 0) }.toNot(throwError())\n\n                let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                expect(result).to(equal(expectedResult))\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Generating/SwiftTemplateSpecs.swift",
    "content": "//\n//  SwiftTemplateSpecs.swift\n//  Sourcery\n//\n//  Created by Krunoslav Zaher on 12/30/16.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\nimport Quick\nimport Nimble\nimport PathKit\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\nimport SourceryFramework\n@testable import SourceryRuntime\n@testable import SourcerySwift\n\nclass SwiftTemplateTests: QuickSpec {\n    // swiftlint:disable function_body_length\n    override func spec() {\n        describe(\"SwiftTemplate\") {\n            let outputDir: Path = {\n                return Stubs.cleanTemporarySourceryDir()\n            }()\n            let output = Output(outputDir)\n\n            let templatePath = Stubs.swiftTemplates + Path(\"Equality.swifttemplate\")\n            let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic.swift\")).read(.utf8)\n#if canImport(ObjectiveC)\n            it(\"creates persistable data\") {\n                func templateContextData(_ code: String) -> TemplateContext? {\n                    guard let parserResult = try? makeParser(for: code).parse() else { fail(); return nil }\n                    let data = NSKeyedArchiver.archivedData(withRootObject: parserResult)\n\n                    let result = Composer.uniqueTypesAndFunctions(parserResult)\n                    return TemplateContext(parserResult: try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? FileParserResult, types: .init(types: result.types, typealiases: result.typealiases), functions: result.functions, arguments: [:])\n                }\n\n                let maybeContext = templateContextData(\n                  \"\"\"\n                  public struct Periodization {\n                      public typealias Action = Identified<UUID, ActionType>\n                      public struct ActionType {\n                          public static let prototypes: [Action] = []\n                      }\n                  }\n                  \"\"\"\n                )\n\n                guard let context = maybeContext else {\n                    return fail()\n                }\n\n                let data = NSKeyedArchiver.archivedData(withRootObject: context)\n                let unarchived = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? TemplateContext\n\n                expect(context.types).to(equal(unarchived?.types))\n            }\n#endif\n\n            it(\"generates correct output\") {\n                expect { try Sourcery(cacheDisabled: true).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                expect(result).to(equal(expectedResult))\n            }\n\n            it(\"throws an error showing the involved line for unmatched delimiter in the template\") {\n                let templatePath = Stubs.swiftTemplates + Path(\"InvalidTag.swifttemplate\")\n                expect {\n                    try SwiftTemplate(path: templatePath)\n                    }\n                    .to(throwError(closure: { (error) in\n                        expect(\"\\(error)\").to(equal(\"\\(templatePath):2 Error while parsing template. Unmatched <%\"))\n                    }))\n            }\n\n            it(\"handles includes\") {\n                let templatePath = Stubs.swiftTemplates + Path(\"Includes.swifttemplate\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic+Other.swift\")).read(.utf8)\n\n                expect { try Sourcery(cacheDisabled: true).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                expect(result).to(equal(expectedResult))\n            }\n\n            it(\"handles file includes\") {\n                let templatePath = Stubs.swiftTemplates + Path(\"IncludeFile.swifttemplate\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic.swift\")).read(.utf8)\n\n                expect { try Sourcery(cacheDisabled: true)\n                .processFiles(\n                    .sources(Paths(include: [Stubs.sourceDirectory])), \n                    usingTemplates: Paths(include: [templatePath]), \n                    output: output, \n                    baseIndentation: 0) }.toNot(throwError()\n                )\n\n                let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                expect(result).to(equal(expectedResult))\n            }\n\n            it(\"handles includes without swifttemplate extension\") {\n                let templatePath = Stubs.swiftTemplates + Path(\"IncludesNoExtension.swifttemplate\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic+Other.swift\")).read(.utf8)\n\n                expect { try Sourcery(cacheDisabled: true).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                expect(result).to(equal(expectedResult))\n            }\n\n            it(\"handles file includes without swift extension\") {\n                let templatePath = Stubs.swiftTemplates + Path(\"IncludeFileNoExtension.swifttemplate\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic.swift\")).read(.utf8)\n\n                expect { try Sourcery(cacheDisabled: true).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                expect(result).to(equal(expectedResult))\n            }\n\n            it(\"handles includes from included files relatively\") {\n                let templatePath = Stubs.swiftTemplates + Path(\"SubfolderIncludes.swifttemplate\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic.swift\")).read(.utf8)\n\n                expect { try Sourcery(cacheDisabled: true).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                expect(result).to(equal(expectedResult))\n            }\n\n            it(\"handles file includes from included files relatively\") {\n                let templatePath = Stubs.swiftTemplates + Path(\"SubfolderFileIncludes.swifttemplate\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic.swift\")).read(.utf8)\n\n                expect { try Sourcery(cacheDisabled: true).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                expect(result).to(equal(expectedResult))\n            }\n\n            it(\"throws an error when an include cycle is detected\") {\n                let templatePath = Stubs.swiftTemplates + Path(\"IncludeCycle.swifttemplate\")\n                let templateCycleDetectionLocationPath = Stubs.swiftTemplates + Path(\"includeCycle/Two.swifttemplate\")\n                let templateInvolvedInCyclePath = Stubs.swiftTemplates + Path(\"includeCycle/One.swifttemplate\")\n                expect {\n                    try SwiftTemplate(path: templatePath)\n                    }\n                    .to(throwError(closure: { (error) in\n                        expect(\"\\(error)\").to(equal(\"\\(templateCycleDetectionLocationPath):1 Error: Include cycle detected for \\(templateInvolvedInCyclePath). Check your include statements so that templates do not include each other.\"))\n                    }))\n            }\n\n            it(\"throws an error when an include cycle involving the root template is detected\") {\n                let templatePath = Stubs.swiftTemplates + Path(\"SelfIncludeCycle.swifttemplate\")\n                expect {\n                    try SwiftTemplate(path: templatePath)\n                    }\n                    .to(throwError(closure: { (error) in\n                        expect(\"\\(error)\").to(equal(\"\\(templatePath):1 Error: Include cycle detected for \\(templatePath). Check your include statements so that templates do not include each other.\"))\n                    }))\n            }\n\n            it(\"rethrows template parsing errors\") {\n                let templatePath = Stubs.swiftTemplates + Path(\"Invalid.swifttemplate\")\n                expect {\n                    try Generator.generate(.init(path: nil, module: nil, types: [], functions: []), types: Types(types: []), functions: [], template: SwiftTemplate(path: templatePath, version: \"version\"))\n                    }\n                    .to(throwError(closure: { (error) in\n                        let path = Path.cleanTemporaryDir(name: \"build\").parent() + \"/version/Sources/SwiftTemplate/main.swift\"\n                        expect(\"\\(error)\").to(contain(\"\\(path):11:27: error: missing argument for parameter #1 in call\"))\n                        expect(\"\\(error)\").to(contain(\"sourceryBuffer.append(\\\"\\\\( )\\\");\"))\n                    }))\n            }\n\n            it(\"rethrows template runtime errors\") {\n                let templatePath = Stubs.swiftTemplates + Path(\"Runtime.swifttemplate\")\n                expect {\n                    try Generator.generate(.init(path: nil, module: nil, types: [], functions: []), types: Types(types: []), functions: [], template: SwiftTemplate(path: templatePath))\n                    }\n                    .to(throwError(closure: { (error) in\n                        expect(\"\\(error)\").to(equal(\"\\(templatePath): Unknown type Some, should be used with `based`\"))\n                    }))\n            }\n\n            it(\"rethrows errors thrown in template\") {\n                let templatePath = Stubs.swiftTemplates + Path(\"Throws.swifttemplate\")\n                expect {\n                    try Generator.generate(.init(path: nil, module: nil, types: [], functions: []), types: Types(types: []), functions: [], template: SwiftTemplate(path: templatePath))\n                    }\n                    .to(throwError(closure: { (error) in\n                        expect(\"\\(error)\").to(contain(\"\\(templatePath): SwiftTemplate/main.swift:11: Fatal error: Template not implemented\"))\n                    }))\n            }\n\n            context(\"with existing cache\") {\n                context(\"and missing build dir\") {\n                    expect { try Sourcery(cacheDisabled: false).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n                    expect((try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))).to(equal(expectedResult))\n                    guard let buildDir = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(\"SwiftTemplate\").map({ Path($0.path) }) else {\n                        fail(\"Could not create buildDir path\")\n                        return\n                    }\n                    if buildDir.exists {\n                        do {\n                            try buildDir.delete()\n                        } catch {\n                            fail(\"Failed to delete \\(buildDir)\")\n                        }\n                    }\n\n                    it(\"generates the code\") {\n                        expect { try Sourcery(cacheDisabled: false).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n                        expect((try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))).to(equal(expectedResult))\n                        expect { try Sourcery(cacheDisabled: false).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"generates the code asynchronously without throwing error\") {\n                        let iterations = 2\n                        let paths = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true) as [String]\n                        let path = paths[0]\n                        let caches = Path(path) + Path(\"Sourcery\")\n                        try? caches.delete()\n                        @Sendable func generateCode() async throws -> Int {\n                            expect { try Sourcery(cacheDisabled: false).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n                            let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                            expect(result).to(equal(expectedResult))\n                            return 1\n                        }\n                        let semaphore = DispatchSemaphore(value: 0)\n                        Task {\n                            _ = try await withThrowingTaskGroup(of: Int.self) { taskGroup in\n                                for _ in 0 ..< iterations {\n                                    taskGroup.addTask {\n                                        try await generateCode()\n                                    }\n                                }\n                                var counter = 0\n                                for try await _ in taskGroup {\n                                    counter += 1\n                                }\n                                return counter\n                            }\n                            semaphore.signal()\n                        }\n                        semaphore.wait()\n                    }\n                }\n            }\n\n            it(\"handles free functions\") {\n                let templatePath = Stubs.swiftTemplates + Path(\"Function.swifttemplate\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"Function.swift\")).read(.utf8)\n\n                expect { try Sourcery(cacheDisabled: true).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                expect(result).to(equal(expectedResult))\n            }\n\n            it(\"should have different executableCacheKey based on includeFile modifications\") {\n                let templatePath = outputDir + \"Template.swifttemplate\"\n                try templatePath.write(#\"<%- includeFile(\"Utils.swift\") -%>\"#)\n\n                let utilsPath = outputDir + \"Utils.swift\"\n                try utilsPath.write(#\"let foo = \"bar\"\"#)\n\n                let template = try SwiftTemplate(path: templatePath, cachePath: nil, version: \"1.0.0\")\n                let originalKey = template.executableCacheKey\n                let keyBeforeModification = template.executableCacheKey\n\n                try utilsPath.write(#\"let foo = \"baz\"\"#)\n\n                let keyAfterModification = template.executableCacheKey\n                expect(originalKey).to(equal(keyBeforeModification))\n                expect(originalKey).toNot(equal(keyAfterModification))\n            }\n        }\n\n        describe(\"FolderSynchronizer\") {\n            let outputDir: Path = {\n                return Stubs.cleanTemporarySourceryDir()\n            }()\n            let files: [FolderSynchronizer.File] = [.init(name: \"file.swift\", content: \"Swift code\")]\n\n            it(\"adds its files to an empty folder\") {\n                expect { try FolderSynchronizer().sync(files: files, to: outputDir) }\n                    .toNot(throwError())\n\n                let newFile = outputDir + Path(\"file.swift\")\n                expect(newFile.exists).to(equal(true))\n                expect(try? newFile.read()).to(equal(\"Swift code\"))\n            }\n\n            it(\"creates the target folder if it does not exist\") {\n                let synchronizedFolder = outputDir + Path(\"Folder\")\n\n                expect { try FolderSynchronizer().sync(files: files, to: synchronizedFolder) }\n                    .toNot(throwError())\n\n                expect(synchronizedFolder.exists).to(equal(true))\n                expect(synchronizedFolder.isDirectory).to(equal(true))\n            }\n\n            it(\"deletes files not present in the synchronized files\") {\n                let existingFile = outputDir + Path(\"Existing.swift\")\n                expect { try existingFile.write(\"Discarded\") }\n                    .toNot(throwError())\n\n                expect { try FolderSynchronizer().sync(files: files, to: outputDir) }\n                    .toNot(throwError())\n\n                expect(existingFile.exists).to(equal(false))\n                let newFile = outputDir + Path(\"file.swift\")\n                expect(newFile.exists).to(equal(true))\n                expect(try? newFile.read()).to(equal(\"Swift code\"))\n            }\n\n            it(\"replaces the content of a file if a file with the same name already exists\") {\n                let existingFile = outputDir + Path(\"file.swift\")\n                expect { try existingFile.write(\"Discarded\") }\n                    .toNot(throwError())\n\n                expect { try FolderSynchronizer().sync(files: files, to: outputDir) }\n                    .toNot(throwError())\n\n                expect(try? existingFile.read()).to(equal(\"Swift code\"))\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/GeneratorSpec.swift",
    "content": "import Quick\nimport Nimble\nimport SourceryStencil\n#if SWIFT_PACKAGE\nimport Foundation\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\n\nclass GeneratorSpec: QuickSpec {\n    // swiftlint:disable function_body_length\n    override func spec() {\n\n        describe(\"Generator\") {\n            var types: [Type] = []\n            var arguments: [String: NSObject] = [:]\n            let beforeEachGenerate: () -> Void = {\n                let fooType = Class(name: \"Foo\", variables: [Variable(name: \"intValue\", typeName: TypeName(name: \"Int\"))], inheritedTypes: [\"NSObject\", \"Decodable\", \"AlternativeProtocol\"])\n                let fooSubclassType = Class(name: \"FooSubclass\", inheritedTypes: [\"Foo\", \"ProtocolBasedOnKnownProtocol\"], annotations: [\"foo\": NSNumber(value: 2), \"smth\": [\"bar\": NSNumber(value: 2)] as NSObject])\n                let barType = Struct(name: \"Bar\", inheritedTypes: [\"KnownProtocol\", \"Decodable\"], annotations: [\"bar\": NSNumber(value: true)])\n\n                let complexType = Struct(name: \"Complex\", accessLevel: .public, isExtension: false, variables: [])\n                let fooVar = Variable(name: \"foo\", typeName: TypeName(name: \"Foo\"), accessLevel: (read: .public, write: .private), isComputed: false, definedInTypeName: TypeName(name: \"Complex\"))\n                fooVar.type = fooType\n                let barVar = Variable(name: \"bar\", typeName: TypeName(name: \"Bar\"), accessLevel: (read: .public, write: .public), isComputed: false, definedInTypeName: TypeName(name: \"Complex\"))\n                barVar.type = barType\n\n                complexType.rawVariables = [\n                    fooVar,\n                    barVar,\n                    Variable(name: \"fooBar\", typeName: TypeName(name: \"Int\", isOptional: true), isComputed: true, definedInTypeName: TypeName(name: \"Complex\")),\n                    Variable(name: \"tuple\", typeName: .buildTuple(.Int, TypeName(name: \"Bar\")), definedInTypeName: TypeName(name: \"Complex\"))\n                ]\n\n                complexType.rawMethods = [\n                    Method(name: \"foo(some: Int)\", selectorName: \"foo(some:)\", parameters: [MethodParameter(name: \"some\", index: 0, typeName: TypeName(name: \"Int\"))], accessLevel: .public, definedInTypeName: TypeName(name: \"Complex\")),\n                    Method(name: \"foo2(some: Int)\", selectorName: \"foo2(some:)\", parameters: [MethodParameter(name: \"some\", index: 0, typeName: TypeName(name: \"Float\"))], isStatic: true, definedInTypeName: TypeName(name: \"Complex\")),\n                    Method(name: \"foo3(some: Int)\", selectorName: \"foo3(some:)\", parameters: [MethodParameter(name: \"some\", index: 0, typeName: TypeName(name: \"Int\"))], isClass: true, definedInTypeName: TypeName(name: \"Complex\"))\n                ]\n\n                let complexTypeExtension = Type(name: \"Complex\", isExtension: true, variables: [])\n                complexTypeExtension.rawVariables = [\n                    Variable(name: \"fooBarFromExtension\", typeName: TypeName(name: \"Int\"), isComputed: true, definedInTypeName: TypeName(name: \"Complex\")),\n                    Variable(name: \"tupleFromExtension\", typeName: .buildTuple(.Int, TypeName(name: \"Bar\")), isComputed: true, definedInTypeName: TypeName(name: \"Complex\"))\n                ]\n                complexTypeExtension.rawMethods = [\n                    Method(name: \"fooFromExtension(some: Int)\", selectorName: \"fooFromExtension(some:)\", parameters: [MethodParameter(name: \"some\", index: 0, typeName: TypeName(name: \"Int\"))], definedInTypeName: TypeName(name: \"Complex\")),\n                    Method(name: \"foo2FromExtension(some: Int)\", selectorName: \"foo2FromExtension(some:)\", parameters: [MethodParameter(name: \"some\", index: 0, typeName: TypeName(name: \"Float\"))], definedInTypeName: TypeName(name: \"Complex\"))\n                ]\n\n                let knownProtocol = Protocol(name: \"KnownProtocol\", variables: [\n                    Variable(name: \"protocolVariable\", typeName: TypeName(name: \"Int\"), isComputed: true, definedInTypeName: TypeName(name: \"KnownProtocol\"))\n                    ], methods: [\n                        Method(name: \"foo(some: String)\", selectorName: \"foo(some:)\", parameters: [MethodParameter(name: \"some\", index: 0, typeName: TypeName(name: \"String\"))], accessLevel: .public, definedInTypeName: TypeName(name: \"KnownProtocol\"))\n                    ])\n\n                let innerOptionsType = Type(name: \"InnerOptions\", accessLevel: .public, variables: [\n                    Variable(name: \"fooInnerOptions\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .public, write: .public), isComputed: false, definedInTypeName: TypeName(name: \"InnerOptions\"))\n                    ])\n                innerOptionsType.variables.forEach { $0.definedInType = innerOptionsType }\n                let optionsType = Enum(name: \"Options\", accessLevel: .public, inheritedTypes: [\"KnownProtocol\"], cases: [EnumCase(name: \"optionA\"), EnumCase(name: \"optionB\")], variables: [\n                    Variable(name: \"optionVar\", typeName: TypeName(name: \"String\"), accessLevel: (read: .public, write: .public), isComputed: false, definedInTypeName: TypeName(name: \"Options\"))\n                    ], containedTypes: [innerOptionsType])\n\n                types = [\n                    fooType,\n                    fooSubclassType,\n                    complexType,\n                    complexTypeExtension,\n                    barType,\n                    optionsType,\n                    Enum(name: \"FooOptions\", accessLevel: .public, inheritedTypes: [\"Foo\", \"KnownProtocol\"], rawTypeName: TypeName(name: \"Foo\"), cases: [EnumCase(name: \"fooA\"), EnumCase(name: \"fooB\")]),\n                    Type(name: \"NSObject\", accessLevel: .none, isExtension: true, inheritedTypes: [\"KnownProtocol\"]),\n                    Class(name: \"ProjectClass\", accessLevel: .open),\n                    Class(name: \"ProjectFooSubclass\", inheritedTypes: [\"FooSubclass\"]),\n                    knownProtocol,\n                    Protocol(name: \"AlternativeProtocol\"),\n                    Protocol(name: \"ProtocolBasedOnKnownProtocol\", inheritedTypes: [\"KnownProtocol\"])\n                ]\n\n                arguments = [\"some\": \"value\" as NSString, \"number\": NSNumber(value: Float(4))]\n            }\n\n            func generate(_ template: String) -> String {\n                beforeEachGenerate()\n                let (uniqueTypes, _, _) = Composer.uniqueTypesAndFunctions(FileParserResult(path: nil, module: nil, types: types, functions: [], typealiases: []))\n\n                return (try? Generator.generate(nil, types: Types(types: uniqueTypes), functions: [],\n                        template: StencilTemplate(templateString: template),\n                        arguments: arguments)) ?? \"\"\n            }\n\n            it(\"generates types.all by skipping protocols\") {\n                expect(generate(\"Found {{ types.all.count }} types\")).to(equal(\"Found 9 types\"))\n            }\n\n            it(\"generates types.protocols\") {\n                expect(generate(\"Found {{ types.protocols.count }} protocols\")).to(equal(\"Found 3 protocols\"))\n            }\n\n            it(\"generates types.classes\") {\n                expect(generate(\"Found {{ types.classes.count }} classes, first: {{ types.classes.first.name }}, second: {{ types.classes.last.name }}\")).to(equal(\"Found 4 classes, first: Foo, second: ProjectFooSubclass\"))\n            }\n\n            it(\"generates types.structs\") {\n                expect(generate(\"Found {{ types.structs.count }} structs, first: {{ types.structs.first.name }}\")).to(equal(\"Found 2 structs, first: Bar\"))\n            }\n\n            it(\"generates types.enums\") {\n                expect(generate(\"Found {{ types.enums.count }} enums, first: {{ types.enums.first.name }}\")).to(equal(\"Found 2 enums, first: FooOptions\"))\n            }\n\n            it(\"generates types.extensions\") {\n                expect(generate(\"Found {{ types.extensions.count }} extensions, first: {{ types.extensions.first.name }}\")).to(equal(\"Found 1 extensions, first: NSObject\"))\n            }\n\n            it(\"feeds types.implementing specific protocol\") {\n                expect(generate(\"Found {{ types.implementing.KnownProtocol.count }} types\")).to(equal(\"Found 8 types\"))\n                expect(generate(\"Found {{ types.implementing.Decodable.count|default:\\\"0\\\" }} types\")).to(equal(\"Found 0 types\"))\n                expect(generate(\"Found {{ types.implementing.Foo.count|default:\\\"0\\\" }} types\")).to(equal(\"Found 0 types\"))\n                expect(generate(\"Found {{ types.implementing.NSObject.count|default:\\\"0\\\" }} types\")).to(equal(\"Found 0 types\"))\n                expect(generate(\"Found {{ types.implementing.Bar.count|default:\\\"0\\\" }} types\")).to(equal(\"Found 0 types\"))\n\n                expect(generate(\"{{ types.all|implements:\\\"KnownProtocol\\\"|count }}\")).to(equal(\"7\"))\n            }\n\n            it(\"feeds types.inheriting specific class\") {\n                expect(generate(\"Found {{ types.inheriting.KnownProtocol.count|default:\\\"0\\\" }} types\")).to(equal(\"Found 0 types\"))\n                expect(generate(\"Found {{ types.inheriting.Decodable.count|default:\\\"0\\\" }} types\")).to(equal(\"Found 0 types\"))\n                expect(generate(\"Found {{ types.inheriting.Foo.count }} types\")).to(equal(\"Found 2 types\"))\n                expect(generate(\"Found {{ types.inheriting.NSObject.count|default:\\\"0\\\" }} types\")).to(equal(\"Found 0 types\"))\n                expect(generate(\"Found {{ types.inheriting.Bar.count|default:\\\"0\\\" }} types\")).to(equal(\"Found 0 types\"))\n\n                expect(generate(\"{{ types.all|inherits:\\\"Foo\\\"|count }}\")).to(equal(\"2\"))\n            }\n\n            it(\"feeds types.based specific type or protocol\") {\n                expect(generate(\"Found {{ types.based.KnownProtocol.count }} types\")).to(equal(\"Found 8 types\"))\n                expect(generate(\"Found {{ types.based.Decodable.count }} types\")).to(equal(\"Found 4 types\"))\n                expect(generate(\"Found {{ types.based.Foo.count }} types\")).to(equal(\"Found 2 types\"))\n                expect(generate(\"Found {{ types.based.NSObject.count }} types\")).to(equal(\"Found 3 types\"))\n                expect(generate(\"Found {{ types.based.Bar.count|default:\\\"0\\\" }} types\")).to(equal(\"Found 0 types\"))\n\n                expect(generate(\"{{ types.all|based:\\\"Decodable\\\"|count }}\")).to(equal(\"4\"))\n            }\n\n            it(\"feeds types.extends specific type or protocol\") {\n                expect(generate(\"Found {{ types.based.KnownProtocol.count }} types\")).to(equal(\"Found 8 types\"))\n                expect(generate(\"Found {{ types.based.Decodable.count }} types\")).to(equal(\"Found 4 types\"))\n                expect(generate(\"Found {{ types.based.Foo.count }} types\")).to(equal(\"Found 2 types\"))\n                expect(generate(\"Found {{ types.based.NSObject.count }} types\")).to(equal(\"Found 3 types\"))\n                expect(generate(\"Found {{ types.based.Bar.count|default:\\\"0\\\" }} types\")).to(equal(\"Found 0 types\"))\n\n                expect(generate(\"{{ types.all|based:\\\"Decodable\\\"|count }}\")).to(equal(\"4\"))\n            }\n\n            describe(\"accessing specific type via type.Typename\") {\n\n                it(\"can render accessLevel\") {\n                   expect(generate(\"{{ type.Complex.accessLevel }}\")).to(equal(\"public\"))\n                }\n\n                it(\"can access supertype\") {\n                    expect(generate(\"{{ type.FooSubclass.supertype.name }}\")).to(equal(\"Foo\"))\n                }\n\n                it(\"counts all variables including implements, inherits\") {\n                    expect(generate(\"{{ type.ProjectFooSubclass.allVariables.count }}\")).to(equal(\"2\"))\n                }\n\n                it(\"can use annotations filter\") {\n                    expect(generate(\"{% for type in types.all|annotated:\\\"bar\\\" %}{{ type.name }}{% endfor %}\")).to(equal(\"Bar\"))\n                    expect(generate(\"{% for type in types.all|annotated:\\\"foo = 2\\\" %}{{ type.name }}{% endfor %}\")).to(equal(\"FooSubclass\"))\n                    expect(generate(\"{% for type in types.all|annotated:\\\"smth.bar = 2\\\" %}{{ type.name }}{% endfor %}\")).to(equal(\"FooSubclass\"))\n                    expect(generate(\"{% for type in types.all where type.annotations.smth.bar == 2 %}{{ type.name }}{% endfor %}\")).to(equal(\"FooSubclass\"))\n                }\n\n                it(\"can use filter on variables\") {\n                    expect(generate(\"{{ type.Complex.allVariables|computed|count }}\")).to(equal(\"3\"))\n                    expect(generate(\"{{ type.Complex.allVariables|stored|count }}\")).to(equal(\"3\"))\n                    expect(generate(\"{{ type.Complex.allVariables|instance|count }}\")).to(equal(\"6\"))\n                    expect(generate(\"{{ type.Complex.allVariables|static|count }}\")).to(equal(\"0\"))\n                    expect(generate(\"{{ type.Complex.allVariables|tuple|count }}\")).to(equal(\"2\"))\n                    expect(generate(\"{{ type.Complex.allVariables|optional|count }}\")).to(equal(\"1\"))\n\n                    expect(generate(\"{{ type.Complex.allVariables|implements:\\\"KnownProtocol\\\"|count }}\")).to(equal(\"2\"))\n                    expect(generate(\"{{ type.Complex.allVariables|based:\\\"Decodable\\\"|count }}\")).to(equal(\"2\"))\n                    expect(generate(\"{{ type.Complex.allVariables|inherits:\\\"NSObject\\\"|count }}\")).to(equal(\"0\"))\n                }\n\n                it(\"can use filter on methods\") {\n                    expect(generate(\"{{ type.Complex.allMethods|instance|count }}\")).to(equal(\"3\"))\n                    expect(generate(\"{{ type.Complex.allMethods|class|count }}\")).to(equal(\"1\"))\n                    expect(generate(\"{{ type.Complex.allMethods|static|count }}\")).to(equal(\"1\"))\n                    expect(generate(\"{{ type.Complex.allMethods|initializer|count }}\")).to(equal(\"0\"))\n                    expect(generate(\"{{ type.Complex.allMethods|count }}\")).to(equal(\"5\"))\n                }\n\n                it(\"can use access level filter on types\") {\n                    expect(generate(\"{{ types.all|public|count }}\")).to(equal(\"3\"))\n                    expect(generate(\"{{ types.all|open|count }}\")).to(equal(\"1\"))\n                    expect(generate(\"{{ types.all|!private|!fileprivate|!internal|count }}\")).to(equal(\"4\"))\n                }\n\n                it(\"can use access level filter on methods\") {\n                    expect(generate(\"{{ type.Complex.methods|public|count }}\")).to(equal(\"1\"))\n                    expect(generate(\"{{ type.Complex.methods|private|count }}\")).to(equal(\"0\"))\n                    expect(generate(\"{{ type.Complex.methods|internal|count }}\")).to(equal(\"4\"))\n                }\n\n                it(\"can use access level filter on variables\") {\n                    expect(generate(\"{{ type.Complex.variables|publicGet|count }}\")).to(equal(\"2\"))\n                    expect(generate(\"{{ type.Complex.variables|publicSet|count }}\")).to(equal(\"1\"))\n                    expect(generate(\"{{ type.Complex.variables|privateSet|count }}\")).to(equal(\"1\"))\n                }\n\n                it(\"can use definedInExtension filter on variables\") {\n                    expect(generate(\"{{ type.Complex.variables|definedInExtension|count }}\")).to(equal(\"2\"))\n                    expect(generate(\"{{ type.Complex.variables|!definedInExtension|count }}\")).to(equal(\"4\"))\n                }\n\n                it(\"can use definedInExtension filter on methods\") {\n                    expect(generate(\"{{ type.Complex.methods|definedInExtension|count }}\")).to(equal(\"2\"))\n                    expect(generate(\"{{ type.Complex.methods|!definedInExtension|count }}\")).to(equal(\"3\"))\n                }\n\n                context(\"given tuple variable\") {\n                    it(\"can access tuple elements\") {\n                        expect(generate(\"{% for var in type.Complex.allVariables|tuple %}{% for e in var.typeName.tuple.elements %}{{ e.typeName.name }},{% endfor %}{% endfor %}\")).to(equal(\"Int,Bar,Int,Bar,\"))\n                    }\n\n                    it(\"can access tuple element type metadata\") {\n                        expect(generate(\"{% for var in type.Complex.allVariables|tuple %}{% for e in var.typeName.tuple.elements|implements:\\\"KnownProtocol\\\" %}{{ e.type.name }},{% endfor %}{% endfor %}\")).to(equal(\"Bar,Bar,\"))\n                    }\n                }\n\n                it(\"generates type.TypeName\") {\n                    expect(generate(\"{{ type.Foo.name }} has {{ type.Foo.variables.first.name }} variable\")).to(equal(\"Foo has intValue variable\"))\n                }\n\n                it(\"generates contained types properly, type.ParentType.ContainedType properly\") {\n                    expect(generate(\"{{ type.Options.containedType.InnerOptions.variables.count }} variables, first {{ type.Options.containedType.InnerOptions.variables.first.name }}\")).to(equal(\"1 variables, first fooInnerOptions\"))\n                }\n\n                it(\"generates enum properly\") {\n                    expect(generate(\"{% for case in type.Options.cases %} {{ case.name }} {% endfor %}\")).to(equal(\" optionA  optionB \"))\n                }\n\n                it(\"classifies computed properties properly\") {\n                    expect(generate(\"{{ type.Complex.variables.count }}, {{ type.Complex.computedVariables.count }}, {{ type.Complex.storedVariables.count }}\")).to(equal(\"6, 3, 3\"))\n                }\n\n                it(\"can access variable type information\") {\n                    expect(generate(\"{% for variable in type.Complex.variables %}{{ variable.type.name }}{% endfor %}\")).to(equal(\"FooBar\"))\n                }\n                #if canImport(ObjectiveC)\n                it(\"can render variable isOptional\") {\n                    expect(generate(\"{{ type.Complex.variables.first.isOptional }}\")).to(equal(\"0\"))\n                }\n                #else\n                it(\"can render variable isOptional\") {\n                    expect(generate(\"{{ type.Complex.variables.first.isOptional }}\")).to(equal(\"false\"))\n                }\n                #endif\n\n                it(\"can render variable definedInType\") {\n                    expect(generate(\"{% for type in types.all %}{% for variable in type.variables %}{{ variable.definedInType.name }} {% endfor %}{% endfor %}\")).to(equal(\"Complex Complex Complex Complex Complex Complex Foo Options \"))\n                }\n\n                it(\"can render method definedInType\") {\n                    expect(generate(\"{% for type in types.all %}{% for method in type.methods %}{{ method.definedInType.name }} {% endfor %}{% endfor %}\")).to(equal(\"Complex Complex Complex Complex Complex \"))\n                }\n\n                it(\"generates proper response for type.inherits\") {\n                    expect(generate(\"{% if type.Foo.inherits.ProjectClass %} TRUE {% endif %}\")).toNot(equal(\" TRUE \"))\n                    expect(generate(\"{% if type.Foo.inherits.Decodable %} TRUE {% endif %}\")).toNot(equal(\" TRUE \"))\n                    expect(generate(\"{% if type.Foo.inherits.KnownProtocol %} TRUE {% endif %}\")).toNot(equal(\" TRUE \"))\n                    expect(generate(\"{% if type.Foo.inherits.AlternativeProtocol %} TRUE {% endif %}\")).toNot(equal(\" TRUE \"))\n\n                    expect(generate(\"{% if type.ProjectFooSubclass.inherits.Foo %} TRUE {% endif %}\")).to(equal(\" TRUE \"))\n                }\n\n                it(\"generates proper response for type.implements\") {\n                    expect(generate(\"{% if type.Bar.implements.ProjectClass %} TRUE {% endif %}\")).toNot(equal(\" TRUE \"))\n                    expect(generate(\"{% if type.Bar.implements.Decodable %} TRUE {% endif %}\")).toNot(equal(\" TRUE \"))\n                    expect(generate(\"{% if type.Bar.implements.KnownProtocol %} TRUE {% endif %}\")).to(equal(\" TRUE \"))\n\n                    expect(generate(\"{% if type.ProjectFooSubclass.implements.KnownProtocol %} TRUE {% endif %}\")).to(equal(\" TRUE \"))\n                    expect(generate(\"{% if type.ProjectFooSubclass.implements.AlternativeProtocol %} TRUE {% endif %}\")).to(equal(\" TRUE \"))\n                }\n\n                it(\"generates proper response for type.based\") {\n                    expect(generate(\"{% if type.Bar.based.ProjectClass %} TRUE {% endif %}\")).toNot(equal(\" TRUE \"))\n                    expect(generate(\"{% if type.Bar.based.Decodable %} TRUE {% endif %}\")).to(equal(\" TRUE \"))\n                    expect(generate(\"{% if type.Bar.based.KnownProtocol %} TRUE {% endif %}\")).to(equal(\" TRUE \"))\n\n                    expect(generate(\"{% if type.ProjectFooSubclass.based.KnownProtocol %} TRUE {% endif %}\")).to(equal(\" TRUE \"))\n                    expect(generate(\"{% if type.ProjectFooSubclass.based.Foo %} TRUE {% endif %}\")).to(equal(\" TRUE \"))\n                    expect(generate(\"{% if type.ProjectFooSubclass.based.Decodable %} TRUE {% endif %}\")).to(equal(\" TRUE \"))\n                    expect(generate(\"{% if type.ProjectFooSubclass.based.AlternativeProtocol %} TRUE {% endif %}\")).to(equal(\" TRUE \"))\n                }\n            }\n\n            context(\"given additional arguments\") {\n                it(\"can reflect them\") {\n                    expect(generate(\"{{ argument.some }}\")).to(equal(\"value\"))\n                }\n\n                it(\"parses numbers correctly\") {\n                    expect(generate(\"{% if argument.number > 2 %}TRUE{% endif %}\")).to(equal(\"TRUE\"))\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Helpers/Builders.swift",
    "content": "import Foundation\nimport SourceryRuntime\n\nextension TypeName {\n    static func buildArray(of elementType: TypeName, useGenericName: Bool = false) -> TypeName {\n        let name = useGenericName ? \"Array<\\(elementType.asSource)>\": \"[\\(elementType.asSource)]\"\n        let array = ArrayType(name: name, elementTypeName: elementType)\n        return TypeName(name: array.name, array: array, generic: array.asGeneric)\n    }\n\n    static func buildSet(of elementType: TypeName) -> TypeName {\n        let name = \"Set<\\(elementType.asSource)>\"\n        let set = SetType(name: name, elementTypeName: elementType)\n        return TypeName(name: set.name, set: set, generic: set.asGeneric)\n    }\n\n    static func buildDictionary(key keyTypeName: TypeName, value valueTypeName: TypeName, useGenericName: Bool = false) -> TypeName {\n        let name = useGenericName ? \"Dictionary<\\(keyTypeName.asSource), \\(valueTypeName.asSource)>\": \"[\\(keyTypeName.asSource): \\(valueTypeName.asSource)]\"\n        let dictionary = DictionaryType(name: name, valueTypeName: valueTypeName, keyTypeName: keyTypeName)\n        return TypeName(name: dictionary.name, dictionary: dictionary, generic: dictionary.asGeneric)\n    }\n\n    static func buildTuple(_ elements: TupleElement...) -> TypeName {\n        let name = \"(\\(elements.enumerated().map { \"\\($1.name == \"\\($0)\" ? $1.typeName.asSource : $1.asSource)\" }.joined(separator: \", \")))\"\n        let tuple = TupleType(name: name, elements: elements)\n        return TypeName(name: tuple.name, tuple: tuple)\n    }\n\n    static func buildTuple(_ elements: TypeName...) -> TypeName {\n        let name = \"(\\(elements.map { \"\\($0.asSource)\" }.joined(separator: \", \")))\"\n        let tuple = TupleType(name: name, elements: elements.enumerated().map { TupleElement(name: \"\\($0)\", typeName: $1) })\n        return TypeName(name: name, tuple: tuple)\n    }\n\n    static func buildClosure(_ returnTypeName: TypeName, attributes: AttributeList = [:]) -> TypeName {\n        let closure = ClosureType(name: \"() -> \\(returnTypeName)\", parameters: [], returnTypeName: returnTypeName)\n        return TypeName(name: closure.name, attributes: attributes, closure: closure)\n    }\n\n    static func buildClosure(_ parameters: ClosureParameter..., returnTypeName: TypeName) -> TypeName {\n        let closure = ClosureType(name: \"\\(parameters.asSource) -> \\(returnTypeName)\", parameters: parameters, returnTypeName: returnTypeName)\n        return TypeName(name: closure.name, closure: closure)\n    }\n\n    static func buildClosure(_ parameters: TypeName..., returnTypeName: TypeName) -> TypeName {\n        let parameters = parameters.map({ ClosureParameter(typeName: $0) })\n        let closure = ClosureType(name: \"\\(parameters.asSource) -> \\(returnTypeName)\", parameters: parameters, returnTypeName: returnTypeName)\n        return TypeName(name: closure.name, closure: closure)\n    }\n\n    var asOptional: TypeName {\n        let type = self\n        return TypeName(name: type.name,\n                        isOptional: true,\n                        isImplicitlyUnwrappedOptional: type.isImplicitlyUnwrappedOptional,\n                        tuple: type.tuple,\n                        array: type.array,\n                        dictionary: type.dictionary,\n                        closure: type.closure,\n                        set: type.set,\n                        generic: type.generic\n        )\n    }\n\n    static var Void: TypeName {\n        TypeName(name: \"Void\")\n    }\n    \n    static var `Any`: TypeName {\n        TypeName(name: \"Any\")\n    }\n\n    static var Int: TypeName {\n        TypeName(name: \"Int\")\n    }\n\n    static var String: TypeName {\n        TypeName(name: \"String\")\n    }\n\n    static var Float: TypeName {\n        TypeName(name: \"Float\")\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Helpers/CustomMatchers.swift",
    "content": "//\n// Created by Krzysztof Zabłocki on 22/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryRuntime\n\nimport Nimble\nimport Quick\n\n/// A Nimble matcher that succeeds when the actual value is equal to the expected value.\n/// Values can support equal by supporting the Equatable protocol.\n///\n/// @see beCloseTo if you want to match imprecise types (eg - floats, doubles).\npublic func equal<T: Equatable>(_ expectedValue: T?) -> Predicate<T> where T: Diffable {\n    return  Predicate.define(\"equal <\\(stringify(expectedValue))>\") { actualExpression, msg -> PredicateResult in\n        var msg = msg\n\n        let actualValue = try actualExpression.evaluate()\n        let matches = actualValue == expectedValue && expectedValue != nil\n\n        if expectedValue == nil || actualValue == nil {\n            if expectedValue == nil {\n                return  PredicateResult(\n                    status: .fail,\n                    message: msg.appendedBeNilHint()\n                )\n            }\n            return  PredicateResult(\n                status: .fail,\n                message: msg\n            )\n        }\n\n        if !matches, let actual = actualValue, let expected = expectedValue {\n            let results = DiffableResult()\n            results.trackDifference(actual: actual, expected: expected)\n            prepare(&msg, results: results, actual: stringify(actualValue))\n        }\n\n        return PredicateResult(status: PredicateStatus(bool: matches),\n                               message: msg)\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual collection is equal to the expected collection.\n/// Items must implement the Equatable protocol.\npublic func equal<T: Equatable>(_ expectedValue: [T]?) -> Predicate<[T]> where T: Diffable {\n    return  Predicate.define(\"equal <\\(stringify(expectedValue))>\") { actualExpression, msg -> PredicateResult in\n        var msg = msg\n\n        let actualValue = try actualExpression.evaluate()\n        if expectedValue == nil || actualValue == nil {\n            if expectedValue == nil {\n                return  PredicateResult(\n                    status: .fail,\n                    message: msg.appendedBeNilHint()\n                    )\n            }\n            return  PredicateResult(\n                status: .fail,\n                message: msg\n            )\n        }\n\n        // swiftlint:disable:next force_unwrapping\n        let matches = expectedValue! == actualValue!\n\n        if !matches, let actual = actualValue, let expected = expectedValue {\n            let results = DiffableResult()\n            results.trackDifference(actual: actual, expected: expected)\n            prepare(&msg, results: results, actual: stringify(actualValue))\n        }\n\n        return PredicateResult(status: PredicateStatus(bool: matches),\n                               message: msg)\n    }\n}\n\n/// A Nimble matcher that succeeds when the actual value is equal to the expected value.\n/// Values can support equal by supporting the Equatable protocol.\n///\n/// @see beCloseTo if you want to match imprecise types (eg - floats, doubles).\npublic func equal<T, C: Equatable>(_ expectedValue: [T: C]?) -> Predicate<[T: C]> where C: Diffable {\n    return Predicate.define(\"equal <\\(stringify(expectedValue))>\") { actualExpression, msg -> PredicateResult in\n        var msg = msg\n\n        let actualValue = try actualExpression.evaluate()\n        if expectedValue == nil || actualValue == nil {\n            if expectedValue == nil {\n                return  PredicateResult(\n                    status: .fail,\n                    message: msg.appendedBeNilHint()\n                )\n            }\n            return  PredicateResult(\n                status: .fail,\n                message: msg\n            )\n        }\n\n        // swiftlint:disable:next force_unwrapping\n        let matches = expectedValue! == actualValue!\n\n        if !matches, let actual = actualValue, let expected = expectedValue {\n            let results = DiffableResult()\n            results.trackDifference(actual: actual, expected: expected)\n            prepare(&msg, results: results, actual: stringify(actualValue))\n        }\n\n        return PredicateResult(status: PredicateStatus(bool: matches),\n                               message: msg)\n    }\n}\n\nprivate func prepare(_ message: inout ExpectationMessage, results: DiffableResult, actual: String) {\n    if !results.isEmpty {\n        message = .fail(\"\\(results)\")\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Helpers/Extensions.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryRuntime\n\nextension String {\n    var withoutWhitespaces: String {\n        return components(separatedBy: .whitespacesAndNewlines).joined(separator: \"\")\n    }\n}\n\nextension Type {\n    public func asUnknownException() -> Self {\n        isUnknownExtension = true\n        return self\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "SourceryTests/Models/ActorSpec.swift",
    "content": "import Quick\nimport Nimble\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryRuntime\n\nclass ActorSpec: QuickSpec {\n    override func spec() {\n        describe(\"Actor\") {\n            var sut: Type?\n\n            beforeEach {\n                sut = Actor(name: \"Foo\", variables: [], inheritedTypes: [], modifiers: [.init(name: \"distributed\")])\n            }\n\n            afterEach {\n                sut = nil\n            }\n\n            it(\"reports kind as actor\") {\n                expect(sut?.kind).to(equal(\"actor\"))\n            }\n\n            it(\"reports is distributed as true\") {\n                expect((sut as? Actor)?.isDistributed).to(beTrue())\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Models/ArrayTypeSpec.swift",
    "content": "import Quick\nimport Nimble\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryRuntime\n\nclass ArrayTypeSpec: QuickSpec {\n    override func spec() {\n        describe(\"Array\") {\n            var sut: ArrayType?\n\n            beforeEach {\n                sut = ArrayType(name: \"Foo\", elementTypeName: TypeName(name: \"Foo\"), elementType: Type(name: \"Bar\"))\n            }\n\n            afterEach {\n                sut = nil\n            }\n\n            it(\"preserves element type for generic\") {\n                expect(sut?.asGeneric.typeParameters.first?.type).toNot(beNil())\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Models/ClassSpec.swift",
    "content": "import Quick\nimport Nimble\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryRuntime\n\nclass ClassSpec: QuickSpec {\n    override func spec() {\n        describe(\"Class\") {\n            var sut: Type?\n\n            beforeEach {\n                sut = Class(name: \"Foo\", variables: [], inheritedTypes: [])\n            }\n\n            afterEach {\n                sut = nil\n            }\n\n            it(\"reports kind as class\") {\n                expect(sut?.kind).to(equal(\"class\"))\n            }\n\n            it(\"supports package access level\") {\n                expect(Class(name: \"Foo\", accessLevel: .package).accessLevel == AccessLevel.package.rawValue).to(beTrue())\n                expect(Class(name: \"Foo\", accessLevel: .internal).accessLevel == AccessLevel.package.rawValue).to(beFalse())\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Models/DiffableSpec.swift",
    "content": "//\n// Created by Krzysztof Zabłocki on 23/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\nimport Quick\nimport Nimble\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryRuntime\n\nclass DiffableSpec: QuickSpec {\n    override func spec() {\n        describe(\"DiffableResults\") {\n            var sut = DiffableResult()\n\n            beforeEach {\n                sut = DiffableResult()\n            }\n\n            describe(\"isEmpty\") {\n                context(\"given its empty\") {\n                    it(\"returns true\") {\n                        expect(sut.isEmpty).to(beTrue())\n                    }\n                }\n\n                context(\"given its not empty\") {\n                    it(\"returns false\") {\n                        sut.append(\"Something\")\n\n                        expect(sut.isEmpty).to(beFalse())\n                    }\n                }\n            }\n\n            it(\"appends element\") {\n                sut.append(\"Expected value\")\n\n                expect(\"\\(sut)\").to(equal(\"Expected value\"))\n            }\n\n            it(\"ads newline separator between elements\") {\n                sut.append(\"Value 1\")\n                sut.append(\"Value 2\")\n\n                expect(\"\\(sut)\").to(equal(\"Value 1\\nValue 2\"))\n            }\n\n            it(\"processes identifier for all elements\") {\n                sut.identifier = \"Prefixed\"\n                sut.append(\"Value 1\")\n                sut.append(\"Value 2\")\n\n                expect(\"\\(sut)\").to(equal(\"Prefixed Value 1\\nValue 2\"))\n            }\n\n            it(\"joins 2 diffable results\") {\n                sut.append(\"Value 1\")\n                sut.append(contentsOf: DiffableResult(results: [\"Value 2\"]))\n\n                expect(\"\\(sut)\").to(equal(\"Value 1\\nValue 2\"))\n            }\n\n            describe(\"trackDifference\") {\n                context(\"given not diffable elements\") {\n                    it(\"ads them if they aren't equal\") {\n                        sut.trackDifference(actual: 3, expected: 5)\n\n                        expect(\"\\(sut)\").to(equal(\"<expected: 5, received: 3>\"))\n                    }\n\n                    it(\"doesn't add them if they are equal\") {\n                        sut.trackDifference(actual: 3, expected: 3)\n\n                        expect(\"\\(sut)\").to(equal(\"\"))\n                    }\n                }\n\n                context(\"given diffable elements\") {\n                    it(\"ads them if they aren't equal\") {\n                        sut.trackDifference(actual: Type(name: \"Foo\"), expected: Type(name: \"Bar\"))\n\n                        expect(\"\\(sut)\").to(equal(\"localName <expected: Bar, received: Foo>\"))\n                    }\n\n                    it(\"doesn't add them if they are equal\") {\n                        sut.trackDifference(actual: Type(name: \"Foo\"), expected: Type(name: \"Foo\"))\n\n                        expect(\"\\(sut)\").to(equal(\"\"))\n                    }\n\n                    context(\"given arrays\") {\n                        it(\"finds difference in count\") {\n                            sut.trackDifference(\n                                    actual: [Type(name: \"Foo\")],\n                                    expected: [Type(name: \"Foo\"), Type(name: \"Foo2\")])\n\n                            expect(\"\\(sut)\").to(equal(\"Different count, expected: 2, received: 1\"))\n                        }\n\n                        it(\"finds difference at given idx\") {\n                            sut.trackDifference(\n                                    actual: [Type(name: \"Foo\"), Type(name: \"Foo\")],\n                                    expected: [Type(name: \"Foo\"), Type(name: \"Foo2\")])\n\n                            expect(\"\\(sut)\").to(equal(\"idx 1: localName <expected: Foo2, received: Foo>\"))\n                        }\n\n                        it(\"finds difference at multiple idx\") {\n                            sut.trackDifference(\n                                    actual: [Type(name: \"FooBar\"), Type(name: \"Foo\")],\n                                    expected: [Type(name: \"Foo\"), Type(name: \"Foo2\")])\n\n                            expect(\"\\(sut)\").to(equal(\"idx 0: localName <expected: Foo, received: FooBar>\\nidx 1: localName <expected: Foo2, received: Foo>\"))\n                        }\n                    }\n\n                    context(\"given dictionaries\") {\n                        it(\"finds difference in count\") {\n                            sut.trackDifference(\n                                    actual: [\"Key\": Type(name: \"Foo\")],\n                                    expected: [\"Key\": Type(name: \"Foo\"), \"Something\": Type(name: \"Bar\")])\n\n                            expect(\"\\(sut)\").to(equal(\"Different count, expected: 2, received: 1\\nMissing keys: Something\"))\n                        }\n\n                        it(\"finds difference at given key count\") {\n                            sut.trackDifference(\n                                    actual: [\"Key\": Type(name: \"Foo\"), \"Something\": Type(name: \"FooBar\")],\n                                    expected: [\"Key\": Type(name: \"Foo\"), \"Something\": Type(name: \"Bar\")])\n\n                            expect(\"\\(sut)\").to(equal(\"key \\\"Something\\\": localName <expected: Bar, received: FooBar>\"))\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Models/EnumSpec.swift",
    "content": "import Quick\nimport Nimble\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryRuntime\n\nclass EnumSpec: QuickSpec {\n    override func spec() {\n        describe(\"Enum\") {\n            var sut: Enum?\n            let variable = Variable(name: \"variable\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .public, write: .internal), isComputed: false, definedInTypeName: TypeName(name: \"Foo\"))\n\n            beforeEach {\n                sut = Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [\"String\"], cases: [EnumCase(name: \"CaseA\"), EnumCase(name: \"CaseB\")])\n            }\n\n            afterEach {\n                sut = nil\n            }\n\n            it(\"reports kind as enum\") {\n                expect(sut?.kind).to(equal(\"enum\"))\n            }\n\n            it(\"doesn't have associated values\") {\n                expect(sut?.hasAssociatedValues).to(beFalse())\n            }\n\n            context(\"given associated values\") {\n\n                it(\"hasAssociatedValues\") {\n                    let sut = Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [\"String\"], cases: [EnumCase(name: \"CaseA\", associatedValues: [AssociatedValue(name: nil, typeName: TypeName(name: \"Int\"))]), EnumCase(name: \"CaseB\")])\n\n                    expect(sut.hasAssociatedValues).to(beTrue())\n                }\n            }\n\n            describe(\"When testing equality\") {\n\n#if canImport(ObjectiveC) \n                context(\"given same items\") {\n                    it(\"is equal\") {\n                        expect(sut).to(equal(Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [\"String\"], cases: [EnumCase(name: \"CaseA\"), EnumCase(name: \"CaseB\")])))\n                    }\n                }\n#endif\n\n                context(\"given different items\") {\n                    it(\"is not equal\") {\n                        expect(sut).toNot(equal(Enum(name: \"Bar\", accessLevel: .internal, isExtension: false, inheritedTypes: [\"String\"], cases: [EnumCase(name: \"CaseA\"), EnumCase(name: \"CaseB\")])))\n                        expect(sut).toNot(equal(Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [\"String\"], cases: [EnumCase(name: \"CaseA\"), EnumCase(name: \"CaseB\")], variables: [variable])))\n                        expect(sut).toNot(equal(Enum(name: \"Foo\", accessLevel: .public, isExtension: false, inheritedTypes: [\"String\"], cases: [EnumCase(name: \"CaseA\"), EnumCase(name: \"CaseB\")])))\n                        expect(sut).toNot(equal(Enum(name: \"Foo\", accessLevel: .internal, isExtension: true, inheritedTypes: [\"String\"], cases: [EnumCase(name: \"CaseA\"), EnumCase(name: \"CaseB\")])))\n                        expect(sut).toNot(equal(Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [], cases: [EnumCase(name: \"CaseA\"), EnumCase(name: \"CaseB\")])))\n                        expect(sut).toNot(equal(Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [\"String\"], cases: [EnumCase(name: \"CaseB\")])))\n                        expect(sut).toNot(equal(Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [\"String\"], cases: [EnumCase(name: \"CaseB\", associatedValues: [AssociatedValue(name: nil, typeName: TypeName(name: \"Int\"))])])))\n                        expect(sut).toNot(equal(Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [\"String\"], cases: [EnumCase(name: \"CaseB\")])))\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Models/MethodSpec.swift",
    "content": "import Quick\nimport Nimble\n#if SWIFT_PACKAGE\nimport Foundation\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryRuntime\n\nclass MethodSpec: QuickSpec {\n    override func spec() {\n        describe(\"Method\") {\n\n            var sut: SourceryMethod?\n\n            beforeEach {\n                sut = Method(name: \"foo(some: Int)\", selectorName: \"foo(some:)\", parameters: [MethodParameter(name: \"some\", index: 0, typeName: TypeName(name: \"Int\"))], definedInTypeName: TypeName(name: \"Bar\"))\n            }\n\n            afterEach {\n                sut = nil\n            }\n\n            it(\"reports short name properly\") {\n                expect(sut?.shortName).to(equal(\"foo\"))\n            }\n\n            it(\"reports isDynamic properly\") {\n                expect(Method(name: \"foo()\", modifiers: [Modifier(name: \"dynamic\", detail: nil)]).isDynamic).to(beTrue())\n                expect(Method(name: \"foo()\", modifiers: [Modifier(name: \"mutating\", detail: nil)]).isDynamic).to(beFalse())\n            }\n\n            it(\"reports definedInTypeName propertly\") {\n                expect(Method(name: \"foo()\", definedInTypeName: TypeName(name: \"BarAlias\", actualTypeName: TypeName(name: \"Bar\"))).definedInTypeName).to(equal(TypeName(name: \"BarAlias\")))\n                expect(Method(name: \"foo()\", definedInTypeName: TypeName(name: \"Foo\")).definedInTypeName).to(equal(TypeName(name: \"Foo\")))\n            }\n\n            it(\"reports actualDefinedInTypeName propertly\") {\n                expect(Method(name: \"foo()\", definedInTypeName: TypeName(name: \"BarAlias\", actualTypeName: TypeName(name: \"Bar\"))).actualDefinedInTypeName).to(equal(TypeName(name: \"Bar\")))\n            }\n\n            it(\"reports isDeinitializer properly\") {\n                expect(sut?.isDeinitializer).to(beFalse())\n                expect(Method(name: \"deinitObjects() {}\").isDeinitializer).to(beFalse())\n                expect(Method(name: \"deinit\").isDeinitializer).to(beTrue())\n            }\n\n            it(\"reports isInitializer properly\") {\n                expect(sut?.isInitializer).to(beFalse())\n                expect(Method(name: \"init()\").isInitializer).to(beTrue())\n            }\n\n            it(\"reports failable initializer return type as optional\") {\n                expect(Method(name: \"init()\", isFailableInitializer: true).isOptionalReturnType).to(beTrue())\n            }\n\n            it(\"reports generic method\") {\n                expect(Method(name: \"foo<T>()\").isGeneric).to(beTrue())\n                expect(Method(name: \"foo()\").isGeneric).to(beFalse())\n            }\n\n            it(\"reports throws error generic type\") {\n                expect(Method(name: \"foo<E: Error>() throws(E)\", throws: true, throwsTypeName: TypeName(\"E\"), genericRequirements: [], genericParameters: [GenericParameter(name: \"E\", inheritedTypeName: TypeName(\"Error\"))]).isThrowsTypeGeneric).to(beTrue())\n                expect(Method(name: \"foo<E>() throws(E) where E: Error\", throws: true, throwsTypeName: TypeName(\"E\"), genericRequirements: [GenericRequirement(leftType: AssociatedType(name: \"E\", typeName: TypeName(\"E\"), type: nil), rightType: GenericTypeParameter(typeName: TypeName(\"Error\"), type: nil), relationship: .conformsTo)], genericParameters: [GenericParameter(name: \"E\")]).isThrowsTypeGeneric).to(beTrue())\n                expect(Method(name: \"foo()\").isThrowsTypeGeneric).to(beFalse())\n            }\n\n            it(\"reports distributed method\") {\n                expect(Method(name: \"foo()\", modifiers: [.init(name: \"distributed\")]).isDistributed).to(beTrue())\n            }\n\n            it(\"has correct access level\") {\n                expect(Method(name: \"foo<T>()\", accessLevel: .package).accessLevel == AccessLevel.package.rawValue).to(beTrue())\n                expect(Method(name: \"foo<T>()\", accessLevel: .open).accessLevel == AccessLevel.package.rawValue).to(beFalse())\n            }\n\n            describe(\"When testing equality\") {\n\n                context(\"given same items\") {\n                    it(\"is equal\") {\n                        expect(sut).to(equal(Method(name: \"foo(some: Int)\", selectorName: \"foo(some:)\", parameters: [MethodParameter(name: \"some\", index: 0, typeName: TypeName(name: \"Int\"))], definedInTypeName: TypeName(name: \"Bar\"))))\n                    }\n                }\n\n                context(\"given different items\") {\n                    var mockMethodParameters: [MethodParameter]!\n\n                    beforeEach {\n                        mockMethodParameters = [MethodParameter(name: \"some\", index: 0, typeName: TypeName(name: \"Int\"))]\n                    }\n\n                    it(\"is not equal\") {\n                        expect(sut).toNot(equal(Method(name: \"foo(some: Int)\", selectorName: \"foo(some:)\", parameters: [MethodParameter(name: \"some\", index: 0, typeName: TypeName(name: \"Int\"))], definedInTypeName: TypeName(name: \"Baz\"))))\n                        expect(sut).toNot(equal(Method(name: \"bar(some: Int)\", selectorName: \"bar(some:)\", parameters: mockMethodParameters, returnTypeName: TypeName(name: \"Void\"), accessLevel: .internal, isStatic: false, isClass: false, isFailableInitializer: false, annotations: [:])))\n                        expect(sut).toNot(equal(Method(name: \"foo(some: Int)\", selectorName: \"foo(some:)\", parameters: [], returnTypeName: TypeName(name: \"Void\"), accessLevel: .internal, isStatic: false, isClass: false, isFailableInitializer: false, annotations: [:])))\n                        expect(sut).toNot(equal(Method(name: \"foo(some: Int)\", selectorName: \"foo(some:)\", parameters: mockMethodParameters, returnTypeName: TypeName(name: \"String\"), accessLevel: .internal, isStatic: false, isClass: false, isFailableInitializer: false, annotations: [:])))\n                        expect(sut).toNot(equal(Method(name: \"foo(some: Int)\", selectorName: \"foo(some:)\", parameters: mockMethodParameters, returnTypeName: TypeName(name: \"Void\"), throws: true, accessLevel: .internal, isStatic: false, isClass: false, isFailableInitializer: false, annotations: [:])))\n                        expect(sut).toNot(equal(Method(name: \"foo(some: Int)\", selectorName: \"foo(some:)\", parameters: mockMethodParameters, returnTypeName: TypeName(name: \"Void\"), accessLevel: .public, isStatic: false, isClass: false, isFailableInitializer: false, annotations: [:])))\n                        expect(sut).toNot(equal(Method(name: \"foo(some: Int)\", selectorName: \"foo(some:)\", parameters: mockMethodParameters, returnTypeName: TypeName(name: \"Void\"), accessLevel: .internal, isStatic: true, isClass: false, isFailableInitializer: false, annotations: [:])))\n                        expect(sut).toNot(equal(Method(name: \"foo(some: Int)\", selectorName: \"foo(some:)\", parameters: mockMethodParameters, returnTypeName: TypeName(name: \"Void\"), accessLevel: .internal, isStatic: false, isClass: true, isFailableInitializer: false, annotations: [:])))\n                        expect(sut).toNot(equal(Method(name: \"foo(some: Int)\", selectorName: \"foo(some:)\", parameters: mockMethodParameters, returnTypeName: TypeName(name: \"Void\"), accessLevel: .internal, isStatic: false, isClass: false, isFailableInitializer: true, annotations: [:])))\n                        expect(sut).toNot(equal(Method(name: \"foo(some: Int)\", selectorName: \"foo(some:)\", parameters: mockMethodParameters, returnTypeName: TypeName(name: \"Void\"), accessLevel: .internal, isStatic: false, isClass: false, isFailableInitializer: false, annotations: [\"some\": NSNumber(value: true)])))\n                    }\n                }\n\n            }\n        }\n\n        describe(\"MethodParameter\") {\n            var sut: MethodParameter!\n\n            context(\"given default initializer parameters\") {\n                beforeEach {\n                    sut = MethodParameter(index: 0, typeName: TypeName(name: \"Int\"))\n                }\n\n                it(\"has empty name\") {\n                    expect(sut.name).to(equal(\"\"))\n                }\n\n                it(\"has empty argumentLabel\") {\n                    expect(sut.argumentLabel).to(equal(\"\"))\n                }\n\n                it(\"has no type\") {\n                    expect(sut.type).to(beNil())\n                }\n\n                it(\"has not default value\") {\n                    expect(sut.defaultValue).to(beNil())\n                }\n\n                it(\"has no annotations\") {\n                    expect(sut.annotations).to(equal([:]))\n                }\n\n                it(\"is not inout\") {\n                    expect(sut.inout).to(beFalse())\n                }\n            }\n\n            context(\"given method parameter with attributes\") {\n                beforeEach {\n                    sut = MethodParameter(index: 0, typeName: TypeName(name: \"ConversationApiResponse\", attributes: [\"escaping\": [Attribute(name: \"escaping\")]]))\n                }\n\n                it(\"returns unwrapped type name\") {\n\n                    expect(sut.unwrappedTypeName).to(equal(\"ConversationApiResponse\"))\n                }\n            }\n\n            context(\"when inout\") {\n                beforeEach {\n                    sut = MethodParameter(index: 0, typeName: TypeName(name: \"Bar\"), isInout: true)\n                }\n\n                it(\"is inout\") {\n                    expect(sut.inout).to(beTrue())\n                }\n            }\n\n            describe(\"when testing equality\") {\n                beforeEach {\n                    sut = MethodParameter(name: \"foo\", index: 0, typeName: TypeName(name: \"Int\"))\n                }\n\n                context(\"given same items\") {\n                    it(\"is equal\") {\n                        expect(sut).to(equal(MethodParameter(name: \"foo\", index: 0, typeName: TypeName(name: \"Int\"))))\n                    }\n                }\n\n                context(\"given different items\") {\n                    it(\"is not equal\") {\n                        expect(sut).toNot(equal(MethodParameter(name: \"bar\", index: 0, typeName: TypeName(name: \"Int\"))))\n                        expect(sut).toNot(equal(MethodParameter(argumentLabel: \"bar\", name: \"foo\", index: 0, typeName: TypeName(name: \"Int\"))))\n                        expect(sut).toNot(equal(MethodParameter(name: \"foo\", index: 0, typeName: TypeName(name: \"String\"))))\n                        expect(sut).toNot(equal(MethodParameter(name: \"foo\", index: 0, typeName: TypeName(name: \"String\"), isInout: true)))\n                    }\n                }\n\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Models/ProtocolSpec.swift",
    "content": "import Quick\nimport Nimble\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryRuntime\n\nclass ProtocolSpec: QuickSpec {\n    override func spec() {\n        describe(\"Protocol\") {\n            var sut: Type?\n\n            beforeEach {\n                sut = Protocol(name: \"Foo\", variables: [], inheritedTypes: [])\n            }\n\n            afterEach {\n                sut = nil\n            }\n\n            it(\"reports kind as protocol\") {\n                expect(sut?.kind).to(equal(\"protocol\"))\n            }\n\n            it(\"supports package access level\") {\n                expect(Protocol(name: \"Foo\", accessLevel: .package).accessLevel == AccessLevel.package.rawValue).to(beTrue())\n                expect(Protocol(name: \"Foo\", accessLevel: .internal).accessLevel == AccessLevel.package.rawValue).to(beFalse())\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Models/StructSpec.swift",
    "content": "import Quick\nimport Nimble\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryRuntime\n\nclass StructSpec: QuickSpec {\n    override func spec() {\n        describe(\"Struct\") {\n            var sut: Struct?\n\n            beforeEach {\n                sut = Struct(name: \"Foo\", variables: [], inheritedTypes: [])\n            }\n\n            afterEach {\n                sut = nil\n            }\n\n            it(\"reports kind as struct\") {\n                expect(sut?.kind).to(equal(\"struct\"))\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Models/TypeSpec.swift",
    "content": "import Quick\nimport Nimble\n#if SWIFT_PACKAGE\nimport Foundation\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryRuntime\n\nclass TypeSpec: QuickSpec {\n    override func spec() {\n        describe(\"Type\") {\n            var sut: Type?\n            let staticVariable = Variable(name: \"staticVar\", typeName: TypeName(name: \"Int\"), isStatic: true)\n            let computedVariable = Variable(name: \"variable\", typeName: TypeName(name: \"Int\"), isComputed: true)\n            let storedVariable = Variable(name: \"otherVariable\", typeName: TypeName(name: \"Int\"), isComputed: false)\n            let supertypeVariable = Variable(name: \"supertypeVariable\", typeName: TypeName(name: \"Int\"), isComputed: true)\n            let superTypeMethod = Method(name: \"doSomething()\", definedInTypeName: TypeName(name: \"Protocol\"))\n            let secondMethod = Method(name: \"doSomething()\", returnTypeName: TypeName(name: \"Int\"))\n            let overrideMethod = superTypeMethod\n            let overrideVariable = supertypeVariable\n            let initializer = Method(name: \"init()\", definedInTypeName: TypeName(name: \"Foo\"))\n            let parentType = Type(name: \"Parent\")\n            let protocolType = Type(name: \"Protocol\", variables: [Variable(name: \"supertypeVariable\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .none))], methods: [superTypeMethod])\n            let superType = Type(name: \"Supertype\", variables: [supertypeVariable], methods: [superTypeMethod], inheritedTypes: [\"Protocol\"])\n            superType.implements[\"Protocol\"] = protocolType\n\n            beforeEach {\n                sut = Type(name: \"Foo\", parent: parentType, variables: [storedVariable, computedVariable, staticVariable, overrideVariable], methods: [initializer, overrideMethod, secondMethod], inheritedTypes: [\"NSObject\"], annotations: [\"something\": NSNumber(value: 161)])\n                sut?.supertype = superType\n            }\n\n            afterEach {\n                sut = nil\n            }\n\n            it(\"being not an extension reports kind as unknown\") {\n                expect(sut?.kind).to(equal(\"unknown\"))\n            }\n\n            it(\"being an extension reports kind as extension\") {\n                expect((Type(name: \"Foo\", isExtension: true)).kind).to(equal(\"extension\"))\n            }\n\n            it(\"resolves name\") {\n                expect(sut?.name).to(equal(\"Parent.Foo\"))\n            }\n\n            it(\"has local name\") {\n                expect(sut?.localName).to(equal(\"Foo\"))\n            }\n\n            it(\"filters static variables\") {\n                expect(sut?.staticVariables).to(equal([staticVariable]))\n            }\n\n            it(\"filters computed variables\") {\n                expect(sut?.computedVariables).to(equal([computedVariable, overrideVariable]))\n            }\n\n            it(\"filters stored variables\") {\n                expect(sut?.storedVariables).to(equal([storedVariable]))\n            }\n\n            it(\"filters instance variables\") {\n                expect(sut?.instanceVariables).to(equal([storedVariable, computedVariable, overrideVariable]))\n            }\n\n            it(\"filters initializers\") {\n                expect(sut?.initializers).to(equal([initializer]))\n            }\n\n            it(\"flattens methods from supertype\") {\n                expect(sut?.allMethods).to(equal([initializer, overrideMethod, secondMethod]))\n            }\n\n            it(\"flattens variables from supertype\") {\n                expect(sut?.allVariables).to(equal([storedVariable, computedVariable, staticVariable, overrideVariable]))\n                expect(superType.allVariables).to(equal([supertypeVariable]))\n            }\n\n            describe(\"isGeneric\") {\n                context(\"given generic type\") {\n                    it(\"recognizes correctly for simple generic\") {\n                        let sut = Type(name: \"Foo\", isGeneric: true)\n\n                        expect(sut.isGeneric).to(beTrue())\n                    }\n                }\n\n                context(\"given non-generic type\") {\n                    it(\"recognizes correctly for simple type\") {\n                        let sut = Type(name: \"Foo\")\n\n                        expect(sut.isGeneric).to(beFalse())\n                    }\n                }\n            }\n\n            describe(\"when setting containedTypes\") {\n                it(\"sets their parent to self\") {\n                    let type = Type(name: \"Bar\", isExtension: false)\n\n                    sut?.containedTypes = [type]\n\n                    expect(type.parent).to(beIdenticalTo(sut))\n                }\n            }\n\n            describe(\"when extending with Type extension\") {\n                it(\"adds variables if they are unique\") {\n                    let extraVariable = Variable(name: \"variable2\", typeName: TypeName(name: \"Int\"))\n                    let type = Type(name: \"Foo\", isExtension: true, variables: [extraVariable])\n\n                    sut?.extend(type)\n\n                    expect(sut?.variables).to(equal([storedVariable, computedVariable, staticVariable, overrideVariable, extraVariable]))\n                }\n\n                it(\"does not duplicate variables of same configuration\") {\n                    let type = Type(name: \"Foo\", isExtension: true, variables: [storedVariable])\n\n                    sut?.extend(type)\n\n                    expect(sut?.variables).to(equal([storedVariable, computedVariable, staticVariable, overrideVariable]))\n                }\n\n                it(\"does not duplicate variables with protocol extension\") {\n                    let aExtension = Type(name: \"Foo\", isExtension: true, variables: [Variable(name: \"variable\", typeName: TypeName(name: \"Int\"), isComputed: true)])\n                    let aProtocol = Protocol(name: \"Foo\", variables: [Variable(name: \"variable\", typeName: TypeName(name: \"Int\"))])\n\n                    aProtocol.extend(aExtension)\n\n                    expect(aProtocol.variables).to(equal([Variable(name: \"variable\", typeName: TypeName(name: \"Int\"))]))\n                }\n\n                it(\"adds methods\") {\n                    let extraMethod = Method(name: \"foo()\", definedInTypeName: TypeName(name: \"Foo\"))\n                    let type = Type(name: \"Foo\", isExtension: true, methods: [extraMethod])\n\n                    sut?.extend(type)\n\n                    expect(sut?.methods).to(equal([initializer, overrideMethod, secondMethod, extraMethod]))\n                }\n\n                it(\"does not duplicate methods with protocol extension\") {\n                    let aExtension = Type(name: \"Foo\", isExtension: true, methods: [Method(name: \"foo()\", definedInTypeName: TypeName(name: \"Foo\"))])\n                    let aProtocol = Protocol(name: \"Foo\", methods: [Method(name: \"foo()\", definedInTypeName: TypeName(name: \"Foo\"))])\n\n                    aProtocol.extend(aExtension)\n\n                    expect(aProtocol.methods).to(equal([Method(name: \"foo()\", definedInTypeName: TypeName(name: \"Foo\"))]))\n                }\n\n                it(\"adds annotations\") {\n                    let expected: [String: NSObject] = [\"something\": NSNumber(value: 161), \"ExtraAnnotation\": \"ExtraValue\" as NSString]\n                    let type = Type(name: \"Foo\", isExtension: true, annotations: [\"ExtraAnnotation\": \"ExtraValue\" as NSString])\n\n                    sut?.extend(type)\n\n                    guard let annotations = sut?.annotations else { return fail() }\n                    expect(annotations == expected).to(beTrue())\n                }\n\n                it(\"adds inherited types\") {\n                    let type = Type(name: \"Foo\", isExtension: true, inheritedTypes: [\"Something\", \"New\"])\n\n                    sut?.extend(type)\n\n                    expect(sut?.inheritedTypes).to(equal([\"NSObject\", \"Something\", \"New\"]))\n                    expect(sut?.based).to(equal([\"NSObject\": \"NSObject\", \"Something\": \"Something\", \"New\": \"New\"]))\n                }\n\n                it(\"adds implemented types\") {\n                    let type = Type(name: \"Foo\", isExtension: true)\n                    type.implements = [\"New\": Protocol(name: \"New\")]\n\n                    sut?.extend(type)\n\n                    expect(sut?.implements).to(equal([\"New\": Protocol(name: \"New\")]))\n                }\n            }\n\n            describe(\"When accessing allImports property\") {\n                it(\"returns correct imports after removing duplicates for type with a super type\") {\n                    let superType = Type(name: \"Bar\")\n                    let superTypeImports = [Import(path: \"cModule\"), Import(path: \"aModule\")]\n                    superType.imports = superTypeImports\n                    let type = Type(name: \"Foo\", inheritedTypes: [superType.name])\n                    let typeImports = [Import(path: \"aModule\"), Import(path: \"bModule\")]\n                    type.imports = typeImports\n                    type.basedTypes[superType.name] = superType\n                    let expectedImports = [Import(path: \"aModule\"), Import(path: \"bModule\"), Import(path: \"cModule\")]\n\n                    expect(type.allImports.sorted { $0.path < $1.path }).to(equal(expectedImports))\n                }\n            }\n\n            describe(\"When testing equality\") {\n                context(\"given same items\") {\n                    it(\"is equal\") {\n                        expect(sut).to(equal(Type(name: \"Foo\", parent: parentType, accessLevel: .internal, isExtension: false, variables: [storedVariable, computedVariable, staticVariable, overrideVariable], methods: [initializer, overrideMethod, secondMethod], inheritedTypes: [\"NSObject\"], annotations: [\"something\": NSNumber(value: 161)])))\n                    }\n                }\n\n                context(\"given different items\") {\n                    it(\"is not equal\") {\n                        expect(sut).toNot(equal(Type(name: \"Bar\", parent: parentType, accessLevel: .internal, isExtension: false, variables: [storedVariable, computedVariable], methods: [initializer], inheritedTypes: [\"NSObject\"], annotations: [\"something\": NSNumber(value: 161)])))\n                        expect(sut).toNot(equal(Type(name: \"Foo\", parent: parentType, accessLevel: .public, isExtension: false, variables: [storedVariable, computedVariable], methods: [initializer], inheritedTypes: [\"NSObject\"], annotations: [\"something\": NSNumber(value: 161)])))\n                        expect(sut).toNot(equal(Type(name: \"Foo\", parent: parentType, accessLevel: .internal, isExtension: true, variables: [storedVariable, computedVariable], methods: [initializer], inheritedTypes: [\"NSObject\"], annotations: [\"something\": NSNumber(value: 161)])))\n                        expect(sut).toNot(equal(Type(name: \"Foo\", parent: parentType, accessLevel: .internal, isExtension: false, variables: [computedVariable], methods: [initializer], inheritedTypes: [\"NSObject\"], annotations: [\"something\": NSNumber(value: 161)])))\n                        expect(sut).toNot(equal(Type(name: \"Foo\", parent: parentType, accessLevel: .internal, isExtension: false, variables: [storedVariable, computedVariable], methods: [initializer], inheritedTypes: [], annotations: [\"something\": NSNumber(value: 161)])))\n                        expect(sut).toNot(equal(Type(name: \"Foo\", parent: nil, accessLevel: .internal, isExtension: false, variables: [storedVariable, computedVariable], methods: [initializer], inheritedTypes: [\"NSObject\"], annotations: [\"something\": NSNumber(value: 161)])))\n                        expect(sut).toNot(equal(Type(name: \"Foo\", parent: parentType, accessLevel: .internal, isExtension: false, variables: [storedVariable, computedVariable], methods: [initializer], inheritedTypes: [\"NSObject\"], annotations: [:])))\n                        expect(sut).toNot(equal(Type(name: \"Foo\", parent: parentType, accessLevel: .internal, isExtension: false, variables: [storedVariable, computedVariable], methods: [], inheritedTypes: [\"NSObject\"], annotations: [\"something\": NSNumber(value: 161)])))\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Models/TypealiasSpec.swift",
    "content": "import Quick\nimport Nimble\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryRuntime\n\nclass TypealiasSpec: QuickSpec {\n    override func spec() {\n        describe(\"Typealias\") {\n            var sut: Typealias?\n\n            beforeEach {\n                sut = Typealias(aliasName: \"Foo\", typeName: TypeName(name: \"Bar\"))\n            }\n\n            afterEach {\n                sut = nil\n            }\n\n            context(\"give no parent type\") {\n                it(\"reports name correctly\") {\n                    expect(sut?.name).to(equal(\"Foo\"))\n                }\n            }\n\n            context(\"given parent type\") {\n                it(\"reports name correctly\") {\n                    sut?.parent = Type(name: \"FooBar\", parent: Type(name: \"Parent\"))\n\n                    expect(sut?.name).to(equal(\"Parent.FooBar.Foo\"))\n                }\n            }\n\n            describe(\"When testing equality\") {\n\n                context(\"given same items\") {\n                    it(\"is equal\") {\n                        expect(sut).to(equal(Typealias(aliasName: \"Foo\", typeName: TypeName(name: \"Bar\"))))\n                    }\n                }\n\n                context(\"given different items\") {\n                    it(\"is not equal\") {\n                        expect(sut).toNot(equal(Typealias(aliasName: \"Foo\", typeName: TypeName(name: \"Foo\"))))\n                        expect(sut).toNot(equal(Typealias(aliasName: \"Bar\", typeName: TypeName(name: \"Bar\"))))\n                        expect(sut).toNot(equal(Typealias(aliasName: \"Bar\", typeName: TypeName(name: \"Bar\"), parent: Type(name: \"Parent\"))))\n                    }\n                }\n\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Models/TypedSpec.generated.swift",
    "content": "// Generated using Sourcery 2.2.6 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\nimport Quick\nimport Nimble\n#if SWIFT_PACKAGE\nimport SourceryLib\n#else\nimport Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\n\n// swiftlint:disable function_body_length\n\nclass TypedSpec: QuickSpec {\n    override func spec() {\n        describe(\"AssociatedValue\") {\n            func typeName(_ code: String) -> TypeName {\n                let wrappedCode =\n                  \"\"\"\n                  struct Wrapper {\n                      var myFoo: \\(code)\n                  }\n                  \"\"\"\n                guard let parser = try? makeParser(for: wrappedCode) else { fail(); return TypeName(name: \"\") }\n                let result = try? parser.parse()\n                let variable = result?.types.first?.variables.first\n                return variable?.typeName ?? TypeName(name: \"\")\n            }\n\n#if canImport(ObjectiveC)\n            it(\"can report optional via KVC\") {\n                expect(AssociatedValue(typeName: typeName(\"Int?\")).value(forKeyPath: \"isOptional\") as? Bool).to(equal(true))\n                expect(AssociatedValue(typeName: typeName(\"Int!\")).value(forKeyPath: \"isOptional\") as? Bool).to(equal(true))\n                expect(AssociatedValue(typeName: typeName(\"Int?\")).value(forKeyPath: \"isImplicitlyUnwrappedOptional\") as? Bool).to(equal(false))\n                expect(AssociatedValue(typeName: typeName(\"Int!\")).value(forKeyPath: \"isImplicitlyUnwrappedOptional\") as? Bool).to(equal(true))\n                expect(AssociatedValue(typeName: typeName(\"Int?\")).value(forKeyPath: \"unwrappedTypeName\") as? String).to(equal(\"Int\"))\n            }\n\n            it(\"can report tuple type via KVC\") {\n                let sut = AssociatedValue(typeName: typeName(\"(Int, Int)\"))\n                expect(sut.value(forKeyPath: \"isTuple\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report closure type via KVC\") {\n                let sut = AssociatedValue(typeName: typeName(\"(Int) -> (Int)\"))\n                expect(sut.value(forKeyPath: \"isClosure\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report array type via KVC\") {\n                let sut = AssociatedValue(typeName: typeName(\"[Int]\"))\n                expect(sut.value(forKeyPath: \"isArray\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report set type via KVC\") {\n                let sut = AssociatedValue(typeName: typeName(\"Set<Int>\"))\n                expect(sut.value(forKeyPath: \"isSet\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report dictionary type via KVC\") {\n                let sut = AssociatedValue(typeName: typeName(\"[Int: Int]\"))\n                expect(sut.value(forKeyPath: \"isDictionary\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report actual type name via KVC\") {\n                let sut = AssociatedValue(typeName: typeName(\"Alias\"))\n                expect(sut.value(forKeyPath: \"actualTypeName\") as? TypeName).to(equal(typeName(\"Alias\")))\n\n                sut.typeName.actualTypeName = typeName(\"Int\")\n                expect(sut.value(forKeyPath: \"actualTypeName\") as? TypeName).to(equal(typeName(\"Int\")))\n            }\n#endif\n        }\n        describe(\"ClosureParameter\") {\n            func typeName(_ code: String) -> TypeName {\n                let wrappedCode =\n                  \"\"\"\n                  struct Wrapper {\n                      var myFoo: \\(code)\n                  }\n                  \"\"\"\n                guard let parser = try? makeParser(for: wrappedCode) else { fail(); return TypeName(name: \"\") }\n                let result = try? parser.parse()\n                let variable = result?.types.first?.variables.first\n                return variable?.typeName ?? TypeName(name: \"\")\n            }\n\n#if canImport(ObjectiveC)\n            it(\"can report optional via KVC\") {\n                expect(ClosureParameter(typeName: typeName(\"Int?\")).value(forKeyPath: \"isOptional\") as? Bool).to(equal(true))\n                expect(ClosureParameter(typeName: typeName(\"Int!\")).value(forKeyPath: \"isOptional\") as? Bool).to(equal(true))\n                expect(ClosureParameter(typeName: typeName(\"Int?\")).value(forKeyPath: \"isImplicitlyUnwrappedOptional\") as? Bool).to(equal(false))\n                expect(ClosureParameter(typeName: typeName(\"Int!\")).value(forKeyPath: \"isImplicitlyUnwrappedOptional\") as? Bool).to(equal(true))\n                expect(ClosureParameter(typeName: typeName(\"Int?\")).value(forKeyPath: \"unwrappedTypeName\") as? String).to(equal(\"Int\"))\n            }\n\n            it(\"can report tuple type via KVC\") {\n                let sut = ClosureParameter(typeName: typeName(\"(Int, Int)\"))\n                expect(sut.value(forKeyPath: \"isTuple\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report closure type via KVC\") {\n                let sut = ClosureParameter(typeName: typeName(\"(Int) -> (Int)\"))\n                expect(sut.value(forKeyPath: \"isClosure\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report array type via KVC\") {\n                let sut = ClosureParameter(typeName: typeName(\"[Int]\"))\n                expect(sut.value(forKeyPath: \"isArray\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report set type via KVC\") {\n                let sut = ClosureParameter(typeName: typeName(\"Set<Int>\"))\n                expect(sut.value(forKeyPath: \"isSet\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report dictionary type via KVC\") {\n                let sut = ClosureParameter(typeName: typeName(\"[Int: Int]\"))\n                expect(sut.value(forKeyPath: \"isDictionary\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report actual type name via KVC\") {\n                let sut = ClosureParameter(typeName: typeName(\"Alias\"))\n                expect(sut.value(forKeyPath: \"actualTypeName\") as? TypeName).to(equal(typeName(\"Alias\")))\n\n                sut.typeName.actualTypeName = typeName(\"Int\")\n                expect(sut.value(forKeyPath: \"actualTypeName\") as? TypeName).to(equal(typeName(\"Int\")))\n            }\n#endif\n        }\n        describe(\"MethodParameter\") {\n            func typeName(_ code: String) -> TypeName {\n                let wrappedCode =\n                  \"\"\"\n                  struct Wrapper {\n                      var myFoo: \\(code)\n                  }\n                  \"\"\"\n                guard let parser = try? makeParser(for: wrappedCode) else { fail(); return TypeName(name: \"\") }\n                let result = try? parser.parse()\n                let variable = result?.types.first?.variables.first\n                return variable?.typeName ?? TypeName(name: \"\")\n            }\n\n#if canImport(ObjectiveC)\n            it(\"can report optional via KVC\") {\n                expect(MethodParameter(index: 0, typeName: typeName(\"Int?\")).value(forKeyPath: \"isOptional\") as? Bool).to(equal(true))\n                expect(MethodParameter(index: 0, typeName: typeName(\"Int!\")).value(forKeyPath: \"isOptional\") as? Bool).to(equal(true))\n                expect(MethodParameter(index: 0, typeName: typeName(\"Int?\")).value(forKeyPath: \"isImplicitlyUnwrappedOptional\") as? Bool).to(equal(false))\n                expect(MethodParameter(index: 0, typeName: typeName(\"Int!\")).value(forKeyPath: \"isImplicitlyUnwrappedOptional\") as? Bool).to(equal(true))\n                expect(MethodParameter(index: 0, typeName: typeName(\"Int?\")).value(forKeyPath: \"unwrappedTypeName\") as? String).to(equal(\"Int\"))\n            }\n\n            it(\"can report tuple type via KVC\") {\n                let sut = MethodParameter(index: 0, typeName: typeName(\"(Int, Int)\"))\n                expect(sut.value(forKeyPath: \"isTuple\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report closure type via KVC\") {\n                let sut = MethodParameter(index: 0, typeName: typeName(\"(Int) -> (Int)\"))\n                expect(sut.value(forKeyPath: \"isClosure\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report array type via KVC\") {\n                let sut = MethodParameter(index: 0, typeName: typeName(\"[Int]\"))\n                expect(sut.value(forKeyPath: \"isArray\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report set type via KVC\") {\n                let sut = MethodParameter(index: 0, typeName: typeName(\"Set<Int>\"))\n                expect(sut.value(forKeyPath: \"isSet\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report dictionary type via KVC\") {\n                let sut = MethodParameter(index: 0, typeName: typeName(\"[Int: Int]\"))\n                expect(sut.value(forKeyPath: \"isDictionary\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report actual type name via KVC\") {\n                let sut = MethodParameter(index: 0, typeName: typeName(\"Alias\"))\n                expect(sut.value(forKeyPath: \"actualTypeName\") as? TypeName).to(equal(typeName(\"Alias\")))\n\n                sut.typeName.actualTypeName = typeName(\"Int\")\n                expect(sut.value(forKeyPath: \"actualTypeName\") as? TypeName).to(equal(typeName(\"Int\")))\n            }\n#endif\n        }\n        describe(\"TupleElement\") {\n            func typeName(_ code: String) -> TypeName {\n                let wrappedCode =\n                  \"\"\"\n                  struct Wrapper {\n                      var myFoo: \\(code)\n                  }\n                  \"\"\"\n                guard let parser = try? makeParser(for: wrappedCode) else { fail(); return TypeName(name: \"\") }\n                let result = try? parser.parse()\n                let variable = result?.types.first?.variables.first\n                return variable?.typeName ?? TypeName(name: \"\")\n            }\n\n#if canImport(ObjectiveC)\n            it(\"can report optional via KVC\") {\n                expect(TupleElement(typeName: typeName(\"Int?\")).value(forKeyPath: \"isOptional\") as? Bool).to(equal(true))\n                expect(TupleElement(typeName: typeName(\"Int!\")).value(forKeyPath: \"isOptional\") as? Bool).to(equal(true))\n                expect(TupleElement(typeName: typeName(\"Int?\")).value(forKeyPath: \"isImplicitlyUnwrappedOptional\") as? Bool).to(equal(false))\n                expect(TupleElement(typeName: typeName(\"Int!\")).value(forKeyPath: \"isImplicitlyUnwrappedOptional\") as? Bool).to(equal(true))\n                expect(TupleElement(typeName: typeName(\"Int?\")).value(forKeyPath: \"unwrappedTypeName\") as? String).to(equal(\"Int\"))\n            }\n\n            it(\"can report tuple type via KVC\") {\n                let sut = TupleElement(typeName: typeName(\"(Int, Int)\"))\n                expect(sut.value(forKeyPath: \"isTuple\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report closure type via KVC\") {\n                let sut = TupleElement(typeName: typeName(\"(Int) -> (Int)\"))\n                expect(sut.value(forKeyPath: \"isClosure\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report array type via KVC\") {\n                let sut = TupleElement(typeName: typeName(\"[Int]\"))\n                expect(sut.value(forKeyPath: \"isArray\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report set type via KVC\") {\n                let sut = TupleElement(typeName: typeName(\"Set<Int>\"))\n                expect(sut.value(forKeyPath: \"isSet\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report dictionary type via KVC\") {\n                let sut = TupleElement(typeName: typeName(\"[Int: Int]\"))\n                expect(sut.value(forKeyPath: \"isDictionary\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report actual type name via KVC\") {\n                let sut = TupleElement(typeName: typeName(\"Alias\"))\n                expect(sut.value(forKeyPath: \"actualTypeName\") as? TypeName).to(equal(typeName(\"Alias\")))\n\n                sut.typeName.actualTypeName = typeName(\"Int\")\n                expect(sut.value(forKeyPath: \"actualTypeName\") as? TypeName).to(equal(typeName(\"Int\")))\n            }\n#endif\n        }\n        describe(\"Typealias\") {\n            func typeName(_ code: String) -> TypeName {\n                let wrappedCode =\n                  \"\"\"\n                  struct Wrapper {\n                      var myFoo: \\(code)\n                  }\n                  \"\"\"\n                guard let parser = try? makeParser(for: wrappedCode) else { fail(); return TypeName(name: \"\") }\n                let result = try? parser.parse()\n                let variable = result?.types.first?.variables.first\n                return variable?.typeName ?? TypeName(name: \"\")\n            }\n\n#if canImport(ObjectiveC)\n            it(\"can report optional via KVC\") {\n                expect(Typealias(typeName: typeName(\"Int?\")).value(forKeyPath: \"isOptional\") as? Bool).to(equal(true))\n                expect(Typealias(typeName: typeName(\"Int!\")).value(forKeyPath: \"isOptional\") as? Bool).to(equal(true))\n                expect(Typealias(typeName: typeName(\"Int?\")).value(forKeyPath: \"isImplicitlyUnwrappedOptional\") as? Bool).to(equal(false))\n                expect(Typealias(typeName: typeName(\"Int!\")).value(forKeyPath: \"isImplicitlyUnwrappedOptional\") as? Bool).to(equal(true))\n                expect(Typealias(typeName: typeName(\"Int?\")).value(forKeyPath: \"unwrappedTypeName\") as? String).to(equal(\"Int\"))\n            }\n\n            it(\"can report tuple type via KVC\") {\n                let sut = Typealias(typeName: typeName(\"(Int, Int)\"))\n                expect(sut.value(forKeyPath: \"isTuple\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report closure type via KVC\") {\n                let sut = Typealias(typeName: typeName(\"(Int) -> (Int)\"))\n                expect(sut.value(forKeyPath: \"isClosure\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report array type via KVC\") {\n                let sut = Typealias(typeName: typeName(\"[Int]\"))\n                expect(sut.value(forKeyPath: \"isArray\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report set type via KVC\") {\n                let sut = Typealias(typeName: typeName(\"Set<Int>\"))\n                expect(sut.value(forKeyPath: \"isSet\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report dictionary type via KVC\") {\n                let sut = Typealias(typeName: typeName(\"[Int: Int]\"))\n                expect(sut.value(forKeyPath: \"isDictionary\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report actual type name via KVC\") {\n                let sut = Typealias(typeName: typeName(\"Alias\"))\n                expect(sut.value(forKeyPath: \"actualTypeName\") as? TypeName).to(equal(typeName(\"Alias\")))\n\n                sut.typeName.actualTypeName = typeName(\"Int\")\n                expect(sut.value(forKeyPath: \"actualTypeName\") as? TypeName).to(equal(typeName(\"Int\")))\n            }\n#endif\n        }\n        describe(\"Variable\") {\n            func typeName(_ code: String) -> TypeName {\n                let wrappedCode =\n                  \"\"\"\n                  struct Wrapper {\n                      var myFoo: \\(code)\n                  }\n                  \"\"\"\n                guard let parser = try? makeParser(for: wrappedCode) else { fail(); return TypeName(name: \"\") }\n                let result = try? parser.parse()\n                let variable = result?.types.first?.variables.first\n                return variable?.typeName ?? TypeName(name: \"\")\n            }\n\n#if canImport(ObjectiveC)\n            it(\"can report optional via KVC\") {\n                expect(Variable(typeName: typeName(\"Int?\")).value(forKeyPath: \"isOptional\") as? Bool).to(equal(true))\n                expect(Variable(typeName: typeName(\"Int!\")).value(forKeyPath: \"isOptional\") as? Bool).to(equal(true))\n                expect(Variable(typeName: typeName(\"Int?\")).value(forKeyPath: \"isImplicitlyUnwrappedOptional\") as? Bool).to(equal(false))\n                expect(Variable(typeName: typeName(\"Int!\")).value(forKeyPath: \"isImplicitlyUnwrappedOptional\") as? Bool).to(equal(true))\n                expect(Variable(typeName: typeName(\"Int?\")).value(forKeyPath: \"unwrappedTypeName\") as? String).to(equal(\"Int\"))\n            }\n\n            it(\"can report tuple type via KVC\") {\n                let sut = Variable(typeName: typeName(\"(Int, Int)\"))\n                expect(sut.value(forKeyPath: \"isTuple\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report closure type via KVC\") {\n                let sut = Variable(typeName: typeName(\"(Int) -> (Int)\"))\n                expect(sut.value(forKeyPath: \"isClosure\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report array type via KVC\") {\n                let sut = Variable(typeName: typeName(\"[Int]\"))\n                expect(sut.value(forKeyPath: \"isArray\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report set type via KVC\") {\n                let sut = Variable(typeName: typeName(\"Set<Int>\"))\n                expect(sut.value(forKeyPath: \"isSet\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report dictionary type via KVC\") {\n                let sut = Variable(typeName: typeName(\"[Int: Int]\"))\n                expect(sut.value(forKeyPath: \"isDictionary\") as? Bool).to(equal(true))\n            }\n\n            it(\"can report actual type name via KVC\") {\n                let sut = Variable(typeName: typeName(\"Alias\"))\n                expect(sut.value(forKeyPath: \"actualTypeName\") as? TypeName).to(equal(typeName(\"Alias\")))\n\n                sut.typeName.actualTypeName = typeName(\"Int\")\n                expect(sut.value(forKeyPath: \"actualTypeName\") as? TypeName).to(equal(typeName(\"Int\")))\n            }\n#endif\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Models/VariableSpec.swift",
    "content": "import Quick\nimport Nimble\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryRuntime\n\nclass VariableSpec: QuickSpec {\n    override func spec() {\n        describe(\"Variable\") {\n            var sut: Variable?\n\n            beforeEach {\n                sut = Variable(name: \"variable\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .public, write: .internal), isComputed: true, definedInTypeName: TypeName(name: \"Foo\"))\n            }\n\n            afterEach {\n                sut = nil\n            }\n\n            it(\"has proper defined in type name\") {\n                expect(sut?.definedInTypeName).to(equal(TypeName(name: \"Foo\")))\n            }\n\n            it(\"has proper read access\") {\n                expect(sut?.readAccess == AccessLevel.public.rawValue).to(beTrue())\n                expect(Variable(name: \"variable\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .package, write: .public), isComputed: true).readAccess == AccessLevel.package.rawValue).to(beTrue())\n            }\n\n            it(\"has proper dynamic state\") {\n                expect(Variable(name: \"variable\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .public, write: .internal), isComputed: true, modifiers: [Modifier(name: \"dynamic\")]).isDynamic).to(beTrue())\n                expect(Variable(name: \"variable\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .public, write: .internal), isComputed: true, modifiers: [Modifier(name: \"lazy\")]).isDynamic).to(beFalse())\n            }\n\n            it(\"has proper write access\") {\n                expect(sut?.writeAccess == AccessLevel.internal.rawValue).to(beTrue())\n                expect(Variable(name: \"variable\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .public, write: .package), isComputed: true).writeAccess == AccessLevel.package.rawValue).to(beTrue())\n            }\n\n            describe(\"When testing equality\") {\n                context(\"given same items\") {\n                    it(\"is equal\") {\n                        expect(sut).to(equal(Variable(name: \"variable\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .public, write: .internal), isComputed: true, definedInTypeName: TypeName(name: \"Foo\"))))\n                    }\n                }\n\n                context(\"given different items\") {\n                    it(\"is not equal\") {\n                        expect(sut).toNot(equal(Variable(name: \"other\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .public, write: .internal), isComputed: true, definedInTypeName: TypeName(name: \"Foo\"))))\n                        expect(sut).toNot(equal(Variable(name: \"variable\", typeName: TypeName(name: \"Float\"), accessLevel: (read: .public, write: .internal), isComputed: true, definedInTypeName: TypeName(name: \"Foo\"))))\n                        expect(sut).toNot(equal(Variable(name: \"other\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .internal), isComputed: true, definedInTypeName: TypeName(name: \"Foo\"))))\n                        expect(sut).toNot(equal(Variable(name: \"other\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .public, write: .public), isComputed: true, definedInTypeName: TypeName(name: \"Foo\"))))\n                        expect(sut).toNot(equal(Variable(name: \"other\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .public, write: .internal), isComputed: false, definedInTypeName: TypeName(name: \"Foo\"))))\n                        expect(sut).toNot(equal(Variable(name: \"variable\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .public, write: .internal), isComputed: true, definedInTypeName: TypeName(name: \"Bar\"))))\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Output/DryOutputSpec.swift",
    "content": "import Foundation\nimport Quick\nimport Nimble\nimport PathKit\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\n@testable import SourceryJS\n\n\nclass DryOutputSpec: QuickSpec {\n    override func spec() {\n        // MARK: - DryOutput + JavaScriptTemplate\n#if canImport(ObjectiveC)\n        describe(\"DryOutput+JavaScriptTemplate\") {\n            let outputDir: Path = {\n                return Stubs.cleanTemporarySourceryDir()\n            }()\n            let output = Output(outputDir)\n\n            it(\"has no stdout json output if isDryRun equal false (*also default value)\") {\n                let templatePath = Stubs.jsTemplates + Path(\"Equality.ejs\")\n                let sourcery = Sourcery(cacheDisabled: true)\n                let outputInterceptor = OutputInterceptor()\n                sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                expect {\n                    try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                              usingTemplates: Paths(include: [templatePath]),\n                                              output: output,\n                                              isDryRun: false,\n                                              baseIndentation: 0)\n                }.toNot(throwError())\n\n                expect(outputInterceptor.result).to(beNil())\n            }\n\n            it(\"handles includes\") {\n                let templatePath = Stubs.jsTemplates + Path(\"Includes.ejs\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic+Other.swift\")).read(.utf8)\n                let sourcery = Sourcery(cacheDisabled: true)\n                let outputInterceptor = OutputInterceptor()\n                sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                expect {\n                    try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                              usingTemplates: Paths(include: [templatePath]),\n                                              output: output,\n                                              isDryRun: true, baseIndentation: 0)\n                }.toNot(throwError())\n\n                expect(outputInterceptor.result).to(equal(expectedResult))\n            }\n\n            it(\"handles includes from included files relatively\") {\n                let templatePath = Stubs.jsTemplates + Path(\"SubfolderIncludes.ejs\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic.swift\")).read(.utf8)\n                let sourcery = Sourcery(cacheDisabled: true)\n                let outputInterceptor = OutputInterceptor()\n                sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                expect {\n                    try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                              usingTemplates: Paths(include: [templatePath]),\n                                              output: output,\n                                              isDryRun: true, baseIndentation: 0)\n                }.toNot(throwError())\n\n                expect(outputInterceptor.result).to(equal(expectedResult))\n            }\n\n            it(\"handles free functions\") {\n                let templatePath = Stubs.jsTemplates + Path(\"Function.ejs\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"Function.swift\")).read(.utf8)\n                let sourcery = Sourcery(cacheDisabled: true)\n                let outputInterceptor = OutputInterceptor()\n                sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                expect {\n                    try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                              usingTemplates: Paths(include: [templatePath]),\n                                              output: output,\n                                              isDryRun: true, baseIndentation: 0)\n                }.toNot(throwError())\n\n                expect(outputInterceptor.result).to(equal(expectedResult))\n            }\n        }\n#endif\n\n        // MARK: - DryOutput + StencilTemplate\n        describe(\"DryOutput+StencilTemplate\") {\n            it(\"has no stdout json output if isDryRun equal false (*also default value)\") {\n                var outputDir = Path(\"/tmp\")\n                outputDir = Stubs.cleanTemporarySourceryDir()\n\n                let templatePath = Stubs.templateDirectory + Path(\"Include.stencil\")\n                let sourcery = Sourcery(cacheDisabled: true)\n                let outputInterceptor = OutputInterceptor()\n                sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                expect {\n                    try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                              usingTemplates: Paths(include: [templatePath]),\n                                              output: Output(outputDir),\n                                              isDryRun: false,\n                                              baseIndentation: 0)\n                }.toNot(throwError())\n\n                expect(outputInterceptor.result).to(beNil())\n            }\n\n            it(\"includes partial templates\") {\n                var outputDir = Path(\"/tmp\")\n                outputDir = Stubs.cleanTemporarySourceryDir()\n\n                let templatePath = Stubs.templateDirectory + Path(\"Include.stencil\")\n                let expectedResult = \"// Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\\n\" +\n                \"// DO NOT EDIT\\n\" +\n                \"partial template content\\n\"\n\n                let sourcery = Sourcery(cacheDisabled: true)\n                let outputInterceptor = OutputInterceptor()\n                sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                expect {\n                    try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                              usingTemplates: Paths(include: [templatePath]),\n                                              output: Output(outputDir),\n                                              isDryRun: true, baseIndentation: 0)\n                }.toNot(throwError())\n\n                expect(outputInterceptor.result).to(equal(expectedResult))\n            }\n\n            it(\"supports different ways for code generation\") {\n                let templatePath = Stubs.templateDirectory + Path(\"GenerationWays.stencil\")\n                let sourcePath = Stubs.sourceForDryRun + Path(\"Base.swift\")\n                let sourcery = Sourcery(cacheDisabled: true)\n                let outputInterceptor = OutputInterceptor()\n                sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                expect {\n                    try sourcery.processFiles(.sources(Paths(include: [sourcePath])),\n                                              usingTemplates: Paths(include: [templatePath]),\n                                              output: Output(\".\"),\n                                              isDryRun: true, baseIndentation: 0)\n                }.toNot(throwError())\n\n                expect(outputInterceptor.result(byOutputType: .init(id: \"\\(sourcePath):109\",\n                                                                    subType: .range)).value)\n                    .to(equal(\"\"\"\n// MARK: - Eq AutoEquatable\nextension Eq: Equatable {}\ninternal func == (lhs: Eq, rhs: Eq) -> Bool {\nguard lhs.s == rhs.s else { return false }\nguard lhs.o == rhs.o else { return false }\nguard lhs.u == rhs.u else { return false }\nguard lhs.r == rhs.r else { return false }\nguard lhs.c == rhs.c else { return false }\nguard lhs.e == rhs.e else { return false }\n    return true\n}\n\n\"\"\"))\n                expect(outputInterceptor.result(byOutputType: .init(id: \"\\(sourcePath):387\",\n                                                                    subType: .range)).value)\n                    .to(equal(\"\"\"\n// MARK: - Eq2 AutoEquatable\nextension Eq2: Equatable {}\ninternal func == (lhs: Eq2, rhs: Eq2) -> Bool {\nguard lhs.r == rhs.r else { return false }\nguard lhs.y == rhs.y else { return false }\nguard lhs.d == rhs.d else { return false }\nguard lhs.r2 == rhs.r2 else { return false }\nguard lhs.y2 == rhs.y2 else { return false }\nguard lhs.r3 == rhs.r3 else { return false }\nguard lhs.u == rhs.u else { return false }\nguard lhs.n == rhs.n else { return false }\n    return true\n}\n\n\"\"\"))\n\n                let templatePathResult = outputInterceptor\n                    .result(byOutputType: .init(id: \"\\(templatePath)\", subType: .template)).value\n                expect(templatePathResult)\n                    .to(equal(\n\"\"\"\n// Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n\n// swiftlint:disable file_length\nfileprivate func compareOptionals<T>(lhs: T?, rhs: T?, compare: (_ lhs: T, _ rhs: T) -> Bool) -> Bool {\n    switch (lhs, rhs) {\n    case let (lValue?, rValue?):\n        return compare(lValue, rValue)\n    case (nil, nil):\n        return true\n    default:\n        return false\n    }\n}\n\nfileprivate func compareArrays<T>(lhs: [T], rhs: [T], compare: (_ lhs: T, _ rhs: T) -> Bool) -> Bool {\n    guard lhs.count == rhs.count else { return false }\n    for (idx, lhsItem) in lhs.enumerated() {\n        guard compare(lhsItem, rhs[idx]) else { return false }\n    }\n\n    return true\n}\n\n\n// MARK: - AutoEquatable for classes, protocols, structs\n\n\n\n// sourcery:inline:Eq3.AutoEquatable\n// MARK: - Eq3 AutoEquatable\nextension Eq3: Equatable {}\ninternal func == (lhs: Eq3, rhs: Eq3) -> Bool {\nguard lhs.counter == rhs.counter else { return false }\nguard lhs.foo == rhs.foo else { return false }\nguard lhs.bar == rhs.bar else { return false }\n    return true\n}\n\n// sourcery:end\n\n// MARK: - AutoEquatable for Enums\n\n\n\"\"\"\n                    ))\n\n#if canImport(ObjectiveC)\n                expect(outputInterceptor.result(byOutputType: .init(id: \"Generated/EqEnum+TemplateName.generated.swift\", subType: .path)).value)\n                    .to(equal(\"\"\"\n// Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// MARK: - EqEnum AutoEquatable\nextension EqEnum: Equatable {}\ninternal func == (lhs: EqEnum, rhs: EqEnum) -> Bool {\n    switch (lhs, rhs) {\n    case let (.some(lhs), .some(rhs)):\n        return lhs == rhs\n    case let (.other(lhs), .other(rhs)):\n        return lhs == rhs\n        default: return false\n    }\n}\n\n\"\"\"))\n#endif\n            } // supports different ways for code generation: end\n        }\n\n        // MARK: - DryOutput + SwiftTemplate\n        describe(\"SwiftTemplate\") {\n            let outputDir: Path = {\n                return Stubs.cleanTemporarySourceryDir()\n            }()\n            let output = Output(outputDir)\n\n            let templatePath = Stubs.swiftTemplates + Path(\"Equality.swifttemplate\")\n            let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic.swift\")).read(.utf8)\n\n             it(\"has no stdout json output if isDryRun equal false (*also default value)\") {\n                 let sourcery = Sourcery(cacheDisabled: true)\n                 let outputInterceptor = OutputInterceptor()\n                 sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                 expect {\n                     try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                               usingTemplates: Paths(include: [templatePath]),\n                                               output: output,\n                                               isDryRun: false,\n                                               baseIndentation: 0)\n                 }.toNot(throwError())\n\n                 expect(outputInterceptor.result).to(beNil())\n             }\n\n            it(\"given swifttemplate, generates correct output, if isDryRun equal true\") {\n                let sourcery = Sourcery(cacheDisabled: true)\n                let outputInterceptor = OutputInterceptor()\n                sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                expect {\n                    try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                              usingTemplates: Paths(include: [templatePath]),\n                                              output: output,\n                                              isDryRun: true, baseIndentation: 0)\n                }.toNot(throwError())\n\n                expect(outputInterceptor.result).to(equal(expectedResult))\n            }\n\n#if canImport(ObjectiveC)\n             it(\"given ejs template, generates correct output, if isDryRun equal true\") {\n                 let templatePath = Stubs.jsTemplates + Path(\"Equality.ejs\")\n                 let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic.swift\")).read(.utf8)\n                 let sourcery = Sourcery(cacheDisabled: true)\n                 let outputInterceptor = OutputInterceptor()\n                 sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                 expect {\n                     try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                               usingTemplates: Paths(include: [templatePath]),\n                                               output: output,\n                                               isDryRun: true, baseIndentation: 0)\n                 }.toNot(throwError())\n\n                 expect(outputInterceptor.result).to(equal(expectedResult))\n             }\n#endif\n             it(\"handles includes\") {\n                 let templatePath = Stubs.swiftTemplates + Path(\"Includes.swifttemplate\")\n                 let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic+Other.swift\")).read(.utf8)\n                 let sourcery = Sourcery(cacheDisabled: true)\n                 let outputInterceptor = OutputInterceptor()\n                 sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                 expect {\n                     try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                               usingTemplates: Paths(include: [templatePath]),\n                                               output: output,\n                                               isDryRun: true, baseIndentation: 0)\n                 }.toNot(throwError())\n\n                 expect(outputInterceptor.result).to(equal(expectedResult))\n             }\n\n             it(\"handles file includes\") {\n                 let templatePath = Stubs.swiftTemplates + Path(\"IncludeFile.swifttemplate\")\n                 let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic.swift\")).read(.utf8)\n                 let sourcery = Sourcery(cacheDisabled: true)\n                 let outputInterceptor = OutputInterceptor()\n                 sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                 expect {\n                     try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                               usingTemplates: Paths(include: [templatePath]),\n                                               output: output,\n                                               isDryRun: true, baseIndentation: 0)\n                 }.toNot(throwError())\n\n                 expect(outputInterceptor.result).to(equal(expectedResult))\n             }\n\n             it(\"handles includes without swifttemplate extension\") {\n                 let templatePath = Stubs.swiftTemplates + Path(\"IncludesNoExtension.swifttemplate\")\n                 let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic+Other.swift\")).read(.utf8)\n                 let sourcery = Sourcery(cacheDisabled: true)\n                 let outputInterceptor = OutputInterceptor()\n                 sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                 expect {\n                     try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                               usingTemplates: Paths(include: [templatePath]),\n                                               output: output,\n                                               isDryRun: true, baseIndentation: 0)\n                 }.toNot(throwError())\n\n                 expect(outputInterceptor.result).to(equal(expectedResult))\n             }\n\n             it(\"handles file includes without swift extension\") {\n                 let templatePath = Stubs.swiftTemplates + Path(\"IncludeFileNoExtension.swifttemplate\")\n                 let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic.swift\")).read(.utf8)\n                 let sourcery = Sourcery(cacheDisabled: true)\n                 let outputInterceptor = OutputInterceptor()\n                 sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                 expect {\n                     try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                               usingTemplates: Paths(include: [templatePath]),\n                                               output: output,\n                                               isDryRun: true, baseIndentation: 0)\n                 }.toNot(throwError())\n\n                 expect(outputInterceptor.result).to(equal(expectedResult))\n             }\n\n             it(\"handles includes from included files relatively\") {\n                 let templatePath = Stubs.swiftTemplates + Path(\"SubfolderIncludes.swifttemplate\")\n                 let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic.swift\")).read(.utf8)\n                 let sourcery = Sourcery(cacheDisabled: true)\n                 let outputInterceptor = OutputInterceptor()\n                 sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                 expect {\n                     try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                               usingTemplates: Paths(include: [templatePath]),\n                                               output: output,\n                                               isDryRun: true, baseIndentation: 0)\n                 }.toNot(throwError())\n\n                 expect(outputInterceptor.result).to(equal(expectedResult))\n             }\n\n             it(\"handles file includes from included files relatively\") {\n                 let templatePath = Stubs.swiftTemplates + Path(\"SubfolderFileIncludes.swifttemplate\")\n                 let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic.swift\")).read(.utf8)\n                 let sourcery = Sourcery(cacheDisabled: true)\n                 let outputInterceptor = OutputInterceptor()\n                 sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                 expect {\n                     try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                               usingTemplates: Paths(include: [templatePath]),\n                                               output: output,\n                                               isDryRun: true, baseIndentation: 0)\n                 }.toNot(throwError())\n\n                 expect(outputInterceptor.result).to(equal(expectedResult))\n             }\n\n             it(\"handles free functions\") {\n                 let templatePath = Stubs.swiftTemplates + Path(\"Function.swifttemplate\")\n                 let expectedResult = try? (Stubs.resultDirectory + Path(\"Function.swift\")).read(.utf8)\n                 let sourcery = Sourcery(cacheDisabled: true)\n                 let outputInterceptor = OutputInterceptor()\n                 sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                 expect {\n                     try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                               usingTemplates: Paths(include: [templatePath]),\n                                               output: output,\n                                               isDryRun: true, baseIndentation: 0)\n                 }.toNot(throwError())\n\n                 expect(outputInterceptor.result).to(equal(expectedResult))\n             }\n\n            //  MARK: Multiple files check\n             it(\"return all outputs values\") {\n                 let templatePaths = [\"Includes.swifttemplate\",\n                                      \"IncludeFile.swifttemplate\",\n                                      \"IncludesNoExtension.swifttemplate\",\n                                      \"IncludeFileNoExtension.swifttemplate\",\n                                      \"SubfolderIncludes.swifttemplate\",\n                                      \"SubfolderFileIncludes.swifttemplate\",\n                                      \"Function.swifttemplate\"]\n                     .map { Stubs.swiftTemplates + Path($0) }\n                 let sourcery = Sourcery(cacheDisabled: true)\n                 let outputInterceptor = OutputInterceptor()\n                 sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                 let expectedResults = [\"Basic+Other.swift\",\n                                        \"Basic.swift\",\n                                        \"Basic+Other.swift\",\n                                        \"Basic.swift\",\n                                        \"Basic.swift\",\n                                        \"Basic.swift\",\n                                        \"Function.swift\"]\n                     .compactMap { try? (Stubs.resultDirectory + Path($0)).read(.utf8) }\n\n                 expect {\n                     try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                               usingTemplates: Paths(include: templatePaths),\n                                               output: output,\n                                               isDryRun: true, baseIndentation: 0)\n                 }.toNot(throwError())\n\n                 expect(outputInterceptor.outputModel.outputs.count).to(equal(expectedResults.count))\n                 expect(outputInterceptor.outputModel.outputs.map { $0.value }.sorted()).to(equal(expectedResults.sorted()))\n             }\n\n             it(\"has same templates in outputs as in inputs\") {\n                 let templatePaths = [\"Includes.swifttemplate\",\n                                      \"IncludeFile.swifttemplate\",\n                                      \"IncludesNoExtension.swifttemplate\",\n                                      \"IncludeFileNoExtension.swifttemplate\",\n                                      \"SubfolderIncludes.swifttemplate\",\n                                      \"SubfolderFileIncludes.swifttemplate\",\n                                      \"Function.swifttemplate\"]\n                     .map { Stubs.swiftTemplates + Path($0) }\n                 let sourcery = Sourcery(cacheDisabled: true)\n                 let outputInterceptor = OutputInterceptor()\n                 sourcery.dryOutput = outputInterceptor.handleOutput(_:)\n\n                 expect {\n                     try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                               usingTemplates: Paths(include: templatePaths),\n                                               output: output,\n                                               isDryRun: true, baseIndentation: 0)\n                 }.toNot(throwError())\n\n                 expect(\n                     outputInterceptor.outputModel.outputs.compactMap { $0.type.id }.map { Path($0) }.sorted()\n                 ).to(\n                     equal(templatePaths.sorted())\n                 )\n             }\n        }\n    }\n}\n\n// MARK: - Helpers\nprivate class OutputInterceptor {\n    let jsonDecoder = JSONDecoder()\n    var outputModel: DryOutputSuccess!\n    var result: String? { outputModel?.outputs.first?.value }\n\n    func result(byOutputType outputType: DryOutputType) -> DryOutputValue! {\n        outputModel?.outputs\n            .first(where: { $0.type.id == outputType.id && $0.type.subType.rawValue == outputType.subType.rawValue })\n    }\n\n    func handleOutput(_ value: String) {\n        outputModel = value\n            .data(using: .utf8)\n            .flatMap { try? jsonDecoder.decode(DryOutputSuccess.self, from: $0) }\n    }\n}\n\n"
  },
  {
    "path": "SourceryTests/Parsing/ComposerSpec.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\nimport Quick\nimport Nimble\nimport PathKit\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\nimport XCTest\n\n// swiftlint:disable type_body_length file_length\nclass ParserComposerSpec: QuickSpec {\n    // swiftlint:disable function_body_length\n    override func spec() {\n        describe(\"ParserComposer\") {\n            describe(\"uniqueTypesAndFunctions\") {\n                func parse(_ code: String) -> [Type] {\n                    guard let parserResult = try? makeParser(for: code).parse() else { fail(); return [] }\n                    return Composer.uniqueTypesAndFunctions(parserResult).types\n                }\n\n                func parseFunctions(_ code: String) -> [SourceryMethod] {\n                    guard let parserResult = try? makeParser(for: code).parse() else { fail(); return [] }\n                    return Composer.uniqueTypesAndFunctions(parserResult).functions\n                }\n\n                func parseModules(_ modules: (name: String?, contents: String)...) -> (types: [Type], functions: [SourceryMethod], typealiases: [Typealias]) {\n                    let moduleResults = modules.compactMap {\n                        try? makeParser(for: $0.contents, module: $0.name).parse()\n                    }\n\n                    let parserResult = moduleResults.reduce(FileParserResult(path: nil, module: nil, types: [], functions: [], typealiases: [])) { acc, next in\n                        acc.typealiases += next.typealiases\n                        acc.types += next.types\n                        acc.functions += next.functions\n                        return acc\n                    }\n\n                    return Composer.uniqueTypesAndFunctions(parserResult)\n                }\n\n                context(\"given class hierarchy\") {\n                    var fooType: Type!\n                    var barType: Type!\n                    var bazType: Type!\n\n                    beforeEach {\n                        let input =\n                            \"\"\"\n                            class Foo {\n                                var foo: Int;\n                                func fooMethod() {}\n                            }\n                            class Bar: Foo {\n                                var bar: Int\n                            }\n                            class Baz: Bar {\n                                var baz: Int;\n                                func bazMethod() {}\n                            }\n                            \"\"\"\n                        let parsedResult = parse(input)\n                        fooType = parsedResult[2]\n                        barType = parsedResult[0]\n                        bazType = parsedResult[1]\n                    }\n\n                    it(\"resolves methods definedInType\") {\n                        expect(fooType.allMethods.first?.definedInType).to(equal(fooType))\n                        expect(barType.allMethods.first?.definedInType).to(equal(fooType))\n                        expect(bazType.allMethods.first?.definedInType).to(equal(bazType))\n                        expect(bazType.allMethods.last?.definedInType).to(equal(fooType))\n                    }\n\n                    it(\"resolves variables definedInType\") {\n                        expect(fooType.allVariables.first?.definedInType).to(equal(fooType))\n                        expect(barType.allVariables[0].definedInType).to(equal(barType))\n                        expect(barType.allVariables[1].definedInType).to(equal(fooType))\n                        expect(bazType.allVariables[0].definedInType).to(equal(bazType))\n                        expect(bazType.allVariables[1].definedInType).to(equal(barType))\n                        expect(bazType.allVariables[2].definedInType).to(equal(fooType))\n                    }\n\n                    context(\"given method with return type\") {\n                        it(\"finds actual return type\") {\n                            let types = parse(\"class Foo { func foo() -> Bar { } }; class Bar {}\")\n                            let method = types.last?.methods.first\n\n                            expect(method?.returnType)\n                              .to(equal(Class(name: \"Bar\")))\n                        }\n                    }\n\n                    context(\"given generic method\") {\n                        func assertMethods(_ types: [Type]) {\n                            let fooType = types.first(where: { $0.name == \"Foo\" })\n                            let foo = fooType?.methods.first\n                            let fooBar = fooType?.methods.last\n\n                            expect(foo?.name).to(equal(\"foo<T: Equatable>()\"))\n                            expect(foo?.selectorName).to(equal(\"foo\"))\n                            expect(foo?.shortName).to(equal(\"foo<T: Equatable>\"))\n                            expect(foo?.callName).to(equal(\"foo\"))\n                            expect(foo?.returnTypeName).to(equal(TypeName(name: \"Bar? where \\nT: Equatable\")))\n                            expect(foo?.unwrappedReturnTypeName).to(equal(\"Bar\"))\n                            expect(foo?.returnType).to(equal(Class(name: \"Bar\")))\n                            expect(foo?.definedInType).to(equal(types.last))\n                            expect(foo?.definedInTypeName).to(equal(TypeName(name: \"Foo\")))\n\n                            expect(fooBar?.name).to(equal(\"fooBar<T>(bar: T)\"))\n                            expect(fooBar?.selectorName).to(equal(\"fooBar(bar:)\"))\n                            expect(fooBar?.shortName).to(equal(\"fooBar<T>\"))\n                            expect(fooBar?.callName).to(equal(\"fooBar\"))\n                            expect(fooBar?.returnTypeName).to(equal(TypeName(name: \"Void where T: Equatable\")))\n                            expect(fooBar?.unwrappedReturnTypeName).to(equal(\"Void\"))\n                            expect(fooBar?.returnType).to(beNil())\n                            expect(fooBar?.definedInType).to(equal(types.last))\n                            expect(fooBar?.definedInTypeName).to(equal(TypeName(name: \"Foo\")))\n                        }\n\n                        it(\"extracts class method properly\") {\n                            let types = parse(\"\"\"\n                                              class Foo {\n                                                  func foo<T: Equatable>() -> Bar?\\n where \\nT: Equatable {\n                                                  };  /// Asks a Duck to quack\n                                                      ///\n                                                      /// - Parameter times: How many times the Duck will quack\n                                                  func fooBar<T>(bar: T) where T: Equatable { }\n                                              };\n                                              class Bar {}\n                                              \"\"\")\n                            assertMethods(types)\n                        }\n\n                        it(\"extracts protocol method properly\") {\n                            let types = parse(\"\"\"\n                                              protocol Foo {\n                                                  func foo<T: Equatable>() -> Bar?\\n where \\nT: Equatable  /// Asks a Duck to quack\n                                                      ///\n                                                      /// - Parameter times: How many times the Duck will quack\n                                                  func fooBar<T>(bar: T) where T: Equatable\n                                              };\n                                              class Bar {}\n                                              \"\"\")\n                            assertMethods(types)\n                        }\n\n                        it(\"extracts method generic requirements properly\") {\n                            let types = parse(\"\"\"\n                                              class Foo {\n                                                  func fooBar<T>(bar: T) where T: Equatable { }\n                                              };\n                                              \"\"\")\n                            let fooType = types.first(where: { $0.name == \"Foo\" })\n                            let fooBar = fooType?.methods.last\n                            expect(fooBar?.name).to(equal(\"fooBar<T>(bar: T)\"))\n                            expect(fooBar?.parameters.first?.type?.implements[\"Equatable\"]).toNot(beNil())\n                            expect(fooBar?.parameters.first?.type?.implements[\"Codable\"]).to(beNil())\n                            expect(fooBar?.parameters.first?.type?.genericRequirements).toNot(beNil())\n                        }\n\n                        it(\"extracts multiple method generic requirements properly\") {\n                            let types = parse(\"\"\"\n                                              class Foo {\n                                                  func fooBar<T>(bar: T) where T: Equatable, T: Codable { }\n                                              };\n                                              \"\"\")\n                            let fooType = types.first(where: { $0.name == \"Foo\" })\n                            let fooBar = fooType?.methods.last\n                            expect(fooBar?.name).to(equal(\"fooBar<T>(bar: T)\"))\n                            expect(fooBar?.parameters.first?.type?.implements[\"Equatable\"]).toNot(beNil())\n                            expect(fooBar?.parameters.first?.type?.implements[\"Codable\"]).toNot(beNil())\n                            expect(fooBar?.parameters.first?.type?.genericRequirements).toNot(beNil())\n                            expect(fooBar?.parameters.first?.actualTypeName?.name).to(contain(\"Equatable\"))\n                            expect(fooBar?.parameters.first?.actualTypeName?.name).to(contain(\"Codable\"))\n                            expect(fooBar?.parameters.first?.actualTypeName?.name).to(contain(\"&\"))\n                        }\n\n                        it(\"extracts multiple method generic requirements on return type properly\") {\n                            let types = parse(\"\"\"\n                                              class Foo {\n                                                enum TestEnum: String, Codable, Equatable { case abc, def }\n                                                func fooBar<T>(bar: T) -> T where T: Equatable, T: Codable { TestEnum.abc as! T }\n                                              };\n                                              \"\"\")\n                            let fooType = types.first(where: { $0.name == \"Foo\" })\n                            let fooBar = fooType?.methods.last\n                            expect(fooBar?.returnType?.implements[\"Equatable\"]).toNot(beNil())\n                            expect(fooBar?.returnType?.implements[\"Codable\"]).toNot(beNil())\n                            expect(fooBar?.returnType?.genericRequirements).toNot(beNil())\n                            expect(fooBar?.returnType?.isGeneric).to(beTrue())\n                            expect(fooBar?.returnTypeName.actualTypeName?.name).to(contain(\"Equatable\"))\n                            expect(fooBar?.returnTypeName.actualTypeName?.name).to(contain(\"Codable\"))\n                            expect(fooBar?.returnTypeName.actualTypeName?.name).to(contain(\"&\"))\n                        }\n\n                        it(\"extracts method generic requirements without protocol properly\") {\n                            let types = parse(\"\"\"\n                                              class Foo {\n                                                  func fooBar<T>(bar: T) { }\n                                              };\n                                              \"\"\")\n                            let fooType = types.first(where: { $0.name == \"Foo\" })\n                            let fooBar = fooType?.methods.last\n                            expect(fooBar?.name).to(equal(\"fooBar<T>(bar: T)\"))\n                            expect(fooBar?.parameters.first?.type).to(beNil())\n                            expect(fooBar?.parameters.first?.actualTypeName?.name).to(equal(\"T\"))\n                        }\n                    }\n\n                    context(\"given initializer\") {\n                        it(\"extracts initializer properly\") {\n                            let fooType = Class(name: \"Foo\")\n                            let expectedInitializer = Method(name: \"init()\", selectorName: \"init\", returnTypeName: TypeName(name: \"Foo\"), isStatic: true, definedInTypeName: TypeName(name: \"Foo\"))\n                            expectedInitializer.returnType = fooType\n                            fooType.rawMethods = [Method(name: \"foo()\", selectorName: \"foo\", definedInTypeName: TypeName(name: \"Foo\")), expectedInitializer]\n\n                            let type = parse(\"class Foo { func foo() {}; init() {} }\").first\n                            let initializer = type?.initializers.first\n\n                            expect(initializer).to(equal(expectedInitializer))\n                            expect(initializer?.returnType).to(equal(fooType))\n                        }\n\n                        it(\"extracts failable initializer properly\") {\n                            let fooType = Class(name: \"Foo\")\n                            let expectedInitializer = Method(name: \"init?()\", selectorName: \"init\", returnTypeName: TypeName(name: \"Foo?\"), isStatic: true, isFailableInitializer: true, definedInTypeName: TypeName(name: \"Foo\"))\n                            expectedInitializer.returnType = fooType\n                            fooType.rawMethods = [Method(name: \"foo()\", selectorName: \"foo\", definedInTypeName: TypeName(name: \"Foo\")), expectedInitializer]\n\n                            let type = parse(\"class Foo { func foo() {}; init?() {} }\").first\n                            let initializer = type?.initializers.first\n\n                            expect(initializer).to(equal(expectedInitializer))\n                            expect(initializer?.returnType).to(equal(fooType))\n                        }\n                    }\n                }\n\n                context(\"given protocol inheritance\") {\n                    it(\"flattens protocol with default implementation as expected\") {\n                        let parsed = parse(\n                          \"\"\"\n                          protocol UrlOpening {\n                            func open(\n                              _ url: URL,\n                              options: [UIApplication.OpenExternalURLOptionsKey: Any],\n                              completionHandler completion: ((Bool) -> Void)?\n                            )\n                            func open(_ url: URL)\n                          }\n\n                          extension UrlOpening {\n                              func open(_ url: URL) {\n                                  open(url, options: [:], completionHandler: nil)\n                              }\n\n                              func anotherFunction(key: String) {\n                              }\n                          }\n                          \"\"\"\n                        )\n\n                        expect(parsed).to(haveCount(1))\n\n                        let childProtocol = parsed.last\n                        expect(childProtocol?.name).to(equal(\"UrlOpening\"))\n                        expect(childProtocol?.allMethods.map { $0.selectorName }).to(equal([\"open(_:options:completionHandler:)\", \"open(_:)\", \"anotherFunction(key:)\"]))\n                    }\n\n                    it(\"flattens inherited protocols with default implementation as expected\") {\n                        let parsed = parse(\n                          \"\"\"\n                          protocol RemoteUrlOpening {\n                            func open(_ url: URL)\n                          }\n\n                          protocol UrlOpening: RemoteUrlOpening {\n                            func open(\n                              _ url: URL,\n                              options: [UIApplication.OpenExternalURLOptionsKey: Any],\n                              completionHandler completion: ((Bool) -> Void)?\n                            )\n                          }\n\n                          extension UrlOpening {\n                            func open(_ url: URL) {\n                              open(url, options: [:], completionHandler: nil)\n                            }\n                          }\n                          \"\"\"\n                        )\n\n                        expect(parsed).to(haveCount(2))\n\n                        let childProtocol = parsed.last\n                        expect(childProtocol?.name).to(equal(\"UrlOpening\"))\n                        expect(childProtocol?.allMethods.filter({ $0.definedInType?.isExtension == false }).map { $0.selectorName }).to(equal([\"open(_:options:completionHandler:)\", \"open(_:)\"]))\n                    }\n                }\n\n                context(\"given overlapping protocol inheritance\") {\n                    var baseProtocol: Type!\n                    var baseClass: Type!\n                    var extendedProtocol: Type!\n                    var extendedClass: Type!\n\n                    beforeEach {\n                        let input =\n                            \"\"\"\n                            protocol BaseProtocol {\n                                var variable: Int { get }\n                                func baseFunction()\n                            }\n\n                            class BaseClass: BaseProtocol {\n                                var variable: Int = 0\n                                func baseFunction() {}\n                            }\n\n                            protocol ExtendedProtocol: BaseClass {\n                                var extendedVariable: Int { get }\n                                func extendedFunction()\n                            }\n\n                            class ExtendedClass: BaseClass, ExtendedProtocol {\n                                var extendedVariable: Int = 0\n                                func extendedFunction() { }\n                            }\n                            \"\"\"\n                        let parsedResult = parse(input)\n                        baseProtocol = parsedResult[1]\n                        baseClass = parsedResult[0]\n                        extendedProtocol = parsedResult[3]\n                        extendedClass = parsedResult[2]\n                    }\n\n                    it(\"finds right types\") {\n                        expect(baseProtocol.name).to(equal(\"BaseProtocol\"))\n                        expect(baseClass.name).to(equal(\"BaseClass\"))\n                        expect(extendedProtocol.name).to(equal(\"ExtendedProtocol\"))\n                        expect(extendedClass.name).to(equal(\"ExtendedClass\"))\n                    }\n\n                    it(\"has matching number of methods and variables\") {\n                        expect(baseProtocol.allMethods.count).to(equal(baseProtocol.allVariables.count))\n                        expect(baseClass.allMethods.count).to(equal(baseClass.allVariables.count))\n                        expect(extendedProtocol.allMethods.count).to(equal(extendedProtocol.allVariables.count))\n                        expect(extendedClass.allMethods.count).to(equal(extendedClass.allVariables.count))\n                    }\n\n                }\n\n                context(\"given extension of same type\") {\n\n                    it(\"combines nested types correctly\") {\n                        let innerType = Struct(name: \"Bar\", accessLevel: .internal, isExtension: false, variables: [])\n\n                        expect(parse(\"struct Foo {}  extension Foo { struct Bar { } }\"))\n                          .to(equal([\n                                        Struct(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [], containedTypes: [innerType]),\n                                        innerType\n                                    ]))\n                    }\n\n                    it(\"combines methods correctly\") {\n                        expect(parse(\"class Baz {}; extension Baz { func foo() {} }\"))\n                          .to(equal([\n                                        Class(name: \"Baz\", methods: [\n                                            Method(name: \"foo()\", selectorName: \"foo\", accessLevel: .internal, definedInTypeName: TypeName(name: \"Baz\"))\n                                        ])\n                                    ]))\n                    }\n\n                    it(\"combines variables correctly\") {\n                        expect(parse(\"class Baz {}; extension Baz { var foo: Int }\"))\n                          .to(equal([\n                                        Class(name: \"Baz\", variables: [\n                                            .init(name: \"foo\", typeName: .Int, definedInTypeName: TypeName(name: \"Baz\"))\n                                        ])\n                                    ]))\n                    }\n\n                    it(\"combines variables and methods with access information from the extension\") {\n                        let foo = Struct(name: \"Foo\", accessLevel: .public, isExtension: false, variables: [.init(name: \"boo\", typeName: .Int, accessLevel: (.public, .none), isComputed: true, definedInTypeName: TypeName(name: \"Foo\"))], methods: [.init(name: \"foo()\", selectorName: \"foo\", accessLevel: .public, definedInTypeName: TypeName(name: \"Foo\"))], modifiers: [.init(name: \"public\")])\n\n                        expect(parse(\n                          \"\"\"\n                          public struct Foo { }\n                          public extension Foo {\n                              func foo() { }\n                              var boo: Int { 0 }\n                          }\n                          \"\"\"\n                        ).last)\n                          .to(equal(\n                            foo\n                          ))\n                    }\n\n                    it(\"combines inherited types\") {\n                        expect(parse(\"class Foo: TestProtocol { }; extension Foo: AnotherProtocol {}\"))\n                          .to(equal([\n                                        Class(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [], inheritedTypes: [\"TestProtocol\", \"AnotherProtocol\"])\n                                    ]))\n                    }\n\n                    it(\"does not use extension to infer enum rawType\") {\n                        expect(parse(\"enum Foo { case one }; extension Foo: Equatable {}\"))\n                          .to(equal([\n                                        Enum(name: \"Foo\",\n                                             inheritedTypes: [\"Equatable\"],\n                                             cases: [EnumCase(name: \"one\")]\n                                        )\n                                    ]))\n                    }\n\n                    describe(\"remembers original definition type\") {\n                        var input: String!\n                        var method: SourceryRuntime.Method!\n                        var defaultedMethod: SourceryRuntime.Method!\n                        var parsedResult: Type!\n                        var originalType: Type!\n                        var typeExtension: Type!\n\n                        beforeEach {\n                            method = Method(name: \"fooMethod(bar: String)\", selectorName: \"fooMethod(bar:)\",\n                                            parameters: [MethodParameter(name: \"bar\",\n                                                                         index: 0,\n                                                                         typeName: TypeName(name: \"String\"))],\n                                            returnTypeName: TypeName(name: \"Void\"),\n                                            definedInTypeName: TypeName(name: \"Foo\"))\n                            defaultedMethod = Method(name: \"fooMethod(bar: String = \\\"Baz\\\")\", selectorName: \"fooMethod(bar:)\",\n                                                     parameters: [MethodParameter(name: \"bar\",\n                                                                                  index: 0,\n                                                                                  typeName: TypeName(name: \"String\"),\n                                                                                  defaultValue: \"\\\"Baz\\\"\")],\n                                                     returnTypeName: TypeName(name: \"Void\"),\n                                                     accessLevel: .internal,\n                                                     definedInTypeName: TypeName(name: \"Foo\"))\n                        }\n\n                        context(\"for enum\") {\n                            beforeEach {\n                                input = \"enum Foo { case A; func \\(method.name) {} }; extension Foo { func \\(defaultedMethod.name) {} }\"\n                                parsedResult = parse(input).first\n                                originalType = Enum(name: \"Foo\", cases: [EnumCase(name: \"A\")], methods: [method, defaultedMethod])\n                                typeExtension = Type(name: \"Foo\", accessLevel: .internal, isExtension: true, methods: [defaultedMethod])\n                            }\n\n                            it(\"resolves methods definedInType\") {\n                                expect(parsedResult.methods.first?.definedInType).to(equal(originalType))\n                                expect(parsedResult.methods.last?.definedInType).to(equal(typeExtension))\n                            }\n                        }\n\n                        context(\"for protocol\") {\n                            beforeEach {\n                                input = \"protocol Foo { func \\(method.name) }; extension Foo { func \\(defaultedMethod.name) {} }\"\n                                parsedResult = parse(input).first\n                                originalType = Protocol(name: \"Foo\", methods: [method, defaultedMethod])\n                                typeExtension = Type(name: \"Foo\", accessLevel: .internal, isExtension: true, methods: [defaultedMethod])\n                            }\n\n                            it(\"resolves methods definedInType\") {\n                                expect(parsedResult.methods.first?.definedInType).to(equal(originalType))\n                                expect(parsedResult.methods.last?.definedInType).to(equal(typeExtension))\n                            }\n                        }\n\n                        context(\"for class\") {\n                            beforeEach {\n                                input = \"class Foo { func \\(method.name) {} }; extension Foo { func \\(defaultedMethod.name) {} }\"\n                                parsedResult = parse(input).first\n                                originalType = Class(name: \"Foo\", methods: [method, defaultedMethod])\n                                typeExtension = Type(name: \"Foo\", accessLevel: .internal, isExtension: true, methods: [defaultedMethod])\n                            }\n\n                            it(\"resolves methods definedInType\") {\n                                expect(parsedResult.methods.first?.definedInType).to(equal(originalType))\n                                expect(parsedResult.methods.last?.definedInType).to(equal(typeExtension))\n                            }\n                        }\n\n                        context(\"for struct\") {\n                            beforeEach {\n                                input = \"struct Foo { func \\(method.name) {} }; extension Foo { func \\(defaultedMethod.name) {} }\"\n                                parsedResult = parse(input).first\n                                originalType = Struct(name: \"Foo\", methods: [method, defaultedMethod])\n                                typeExtension = Type(name: \"Foo\", accessLevel: .internal, isExtension: true, methods: [defaultedMethod])\n                            }\n\n                            it(\"resolves methods definedInType\") {\n                                expect(parsedResult.methods.first?.definedInType).to(equal(originalType))\n                                expect(parsedResult.methods.last?.definedInType).to(equal(typeExtension))\n                            }\n                        }\n                    }\n                }\n\n                context(\"given enum containing associated values\") {\n                    it(\"trims whitespace from associated value names\") {\n                        expect(parse(\"enum Foo {\\n case bar(\\nvalue: String,\\n other: Int\\n)\\n}\"))\n                                .to(equal([\n                                    Enum(name: \"Foo\",\n                                         accessLevel: .internal,\n                                         isExtension: false,\n                                         inheritedTypes: [],\n                                         rawTypeName: nil,\n                                         cases: [\n                                            EnumCase(\n                                                name: \"bar\",\n                                                rawValue: nil,\n                                                associatedValues: [\n                                                    AssociatedValue(\n                                                        localName: \"value\",\n                                                        externalName: \"value\",\n                                                        typeName: TypeName(name: \"String\")\n                                                    ),\n                                                    AssociatedValue(\n                                                        localName: \"other\",\n                                                        externalName: \"other\",\n                                                        typeName: TypeName(name: \"Int\")\n                                                    )\n                                                ],\n                                                annotations: [:]\n                                            )\n                                        ]\n                                         )\n                                    ]))\n                    }\n                }\n\n                context(\"given enum containing rawType\") {\n\n                    it(\"extracts enums without RawRepresentable\") {\n                        expect(parse(\"enum Foo: String, SomeProtocol { case optionA }; protocol SomeProtocol {}\"))\n                                .to(equal([\n                                                  Enum(name: \"Foo\",\n                                                       accessLevel: .internal,\n                                                       isExtension: false,\n                                                       inheritedTypes: [\"SomeProtocol\"],\n                                                       rawTypeName: TypeName(name: \"String\"),\n                                                       cases: [EnumCase(name: \"optionA\")]),\n                                                  Protocol(name: \"SomeProtocol\")\n                                          ]))\n                    }\n\n                    it(\"extracts enums with RawRepresentable by inferring from variable\") {\n                        expect(parse(\n                                \"enum Foo: RawRepresentable { case optionA; var rawValue: String { return \\\"\\\" }; init?(rawValue: String) { self = .optionA } }\")).to(\n                                        equal([\n                                                      Enum(name: \"Foo\",\n                                                           inheritedTypes: [\"RawRepresentable\"],\n                                                           rawTypeName: TypeName(name: \"String\"),\n                                                           cases: [EnumCase(name: \"optionA\")],\n                                                           variables: [Variable(name: \"rawValue\",\n                                                                                typeName: TypeName(name: \"String\"),\n                                                                                accessLevel: (read: .internal,\n                                                                                              write: .none),\n                                                                                isComputed: true,\n                                                                                isStatic: false,\n                                                                                definedInTypeName: TypeName(name: \"Foo\"))],\n                                                           methods: [Method(name: \"init?(rawValue: String)\", selectorName: \"init(rawValue:)\",\n                                                                            parameters: [MethodParameter(name: \"rawValue\",\n                                                                                                         index: 0,\n                                                                                                         typeName: TypeName(name: \"String\"))],\n                                                                            returnTypeName: TypeName(name: \"Foo?\"),\n                                                                            isStatic: true,\n                                                                            isFailableInitializer: true,\n                                                                            definedInTypeName: TypeName(name: \"Foo\"))]\n                                                      )\n                                              ]))\n                    }\n\n                    it(\"extracts enums with RawRepresentable by inferring from variable with typealias\") {\n                        expect(parse(\n                                \"enum Foo: RawRepresentable { case optionA; typealias RawValue = String; var rawValue: RawValue { return \\\"\\\" }; init?(rawValue: RawValue) { self = .optionA } }\")).to(\n                                        equal([\n                                                      Enum(name: \"Foo\",\n                                                           inheritedTypes: [\"RawRepresentable\"],\n                                                           rawTypeName: TypeName(name: \"String\"),\n                                                           cases: [EnumCase(name: \"optionA\")],\n                                                           variables: [Variable(name: \"rawValue\",\n                                                                                typeName: TypeName(name: \"RawValue\"),\n                                                                                accessLevel: (read: .internal, write: .none),\n                                                                                isComputed: true,\n                                                                                isStatic: false,\n                                                                                definedInTypeName: TypeName(name: \"Foo\"))],\n                                                           methods: [Method(name: \"init?(rawValue: RawValue)\", selectorName: \"init(rawValue:)\",\n                                                                            parameters: [MethodParameter(name: \"rawValue\", index: 0, typeName: TypeName(name: \"RawValue\"))],\n                                                                            returnTypeName: TypeName(name: \"Foo?\"),\n                                                                            isStatic: true,\n                                                                            isFailableInitializer: true,\n                                                                            definedInTypeName: TypeName(name: \"Foo\"))],\n                                                           typealiases: [Typealias(aliasName: \"RawValue\", typeName: TypeName(name: \"String\"))])\n                                              ]))\n                    }\n\n                    it(\"extracts enums with RawRepresentable by inferring from typealias\") {\n                        expect(parse(\n                                \"enum Foo: CustomStringConvertible, RawRepresentable { case optionA; typealias RawValue = String; var rawValue: RawValue { return \\\"\\\" }; init?(rawValue: RawValue) { self = .optionA } }\")).to(\n                                        equal([\n                                                      Enum(name: \"Foo\",\n                                                           inheritedTypes: [\"CustomStringConvertible\", \"RawRepresentable\"],\n                                                           rawTypeName: TypeName(name: \"String\"),\n                                                           cases: [EnumCase(name: \"optionA\")],\n                                                           variables: [Variable(name: \"rawValue\",\n                                                                                typeName: TypeName(name: \"RawValue\"),\n                                                                                accessLevel: (read: .internal, write: .none),\n                                                                                isComputed: true,\n                                                                                isStatic: false,\n                                                                                definedInTypeName: TypeName(name: \"Foo\"))],\n                                                           methods: [Method(name: \"init?(rawValue: RawValue)\", selectorName: \"init(rawValue:)\",\n                                                                            parameters: [MethodParameter(name: \"rawValue\", index: 0, typeName: TypeName(name: \"RawValue\"))],\n                                                                            returnTypeName: TypeName(name: \"Foo?\"),\n                                                                            isStatic: true,\n                                                                            isFailableInitializer: true,\n                                                                            definedInTypeName: TypeName(name: \"Foo\"))],\n                                                           typealiases: [Typealias(aliasName: \"RawValue\", typeName: TypeName(name: \"String\"))])\n                                              ]))\n                    }\n\n                }\n\n                context(\"given enum without raw type with inheriting type\") {\n                    it(\"does not set inherited type to raw value type for enum cases\") {\n                        expect(parse(\"enum Enum: SomeProtocol { case optionA }\").first(where: { $0.name == \"Enum\" }))\n                            .to(equal(\n                                // ATM it is expected that we assume that first inherited type is a raw value type. To avoid that client code should specify inherited type via extension\n                                Enum(name: \"Enum\", inheritedTypes: [\"SomeProtocol\"], rawTypeName: TypeName(name: \"SomeProtocol\"), cases: [EnumCase(name: \"optionA\")])\n                            ))\n                    }\n\n                    it(\"does not set inherited type to raw value type for enum cases with associated values \") {\n                        expect(parse(\"enum Enum: SomeProtocol { case optionA(Int); case optionB;  }\").first(where: { $0.name == \"Enum\" }))\n                            .to(equal(\n                                Enum(name: \"Enum\", inheritedTypes: [\"SomeProtocol\"], cases: [\n                                    EnumCase(name: \"optionA\", associatedValues: [AssociatedValue(typeName: TypeName(name: \"Int\"))]),\n                                    EnumCase(name: \"optionB\")\n                                ])\n                            ))\n                    }\n\n                    it(\"does not set inherited type to raw value type for enum with no cases\") {\n                        expect(parse(\"enum Enum: SomeProtocol { }\").first(where: { $0.name == \"Enum\" }))\n                            .to(equal(\n                                Enum(name: \"Enum\", inheritedTypes: [\"SomeProtocol\"])\n                            ))\n                    }\n                }\n\n                context(\"given enum inheriting protocol composition\") {\n                    it(\"extracts the protocol composition as the inherited type\") {\n                        expect(parse(\"enum Enum: Composition { }; typealias Composition = Foo & Bar; protocol Foo {}; protocol Bar {}\").first(where: { $0.name == \"Enum\" }))\n                            .to(equal(\n                                Enum(name: \"Enum\", inheritedTypes: [\"Composition\"])\n                            ))\n                    }\n                }\n\n                context(\"given generic custom type\") {\n                    it(\"extracts genericTypeName correctly\") {\n                        let types = parse(\n                        \"\"\"\n                        struct GenericArgumentStruct<T> {\n                            let value: T\n                        }\n\n                        struct Foo {\n                            var value: GenericArgumentStruct<Bool>\n                        }\n                        \"\"\")\n\n                        let foo = types.first(where: { $0.name == \"Foo\" })\n                        let generic = types.first(where: { $0.name == \"GenericArgumentStruct\" })\n\n                        expect(foo).toNot(beNil())\n                        expect(generic).toNot(beNil())\n\n                        expect(foo?.instanceVariables.first?.typeName.generic).toNot(beNil())\n                        expect(foo?.instanceVariables.first?.typeName.generic?.typeParameters).to(haveCount(1))\n                        expect(foo?.instanceVariables.first?.typeName.generic?.typeParameters.first?.typeName.name).to(equal(\"Bool\"))\n\n                    }\n                }\n\n                context(\"given generic custom type\") {\n                    context(\"given generic's protocol requirements\") {\n                        context(\"given type's variables' generic type\") {\n                            it(\"extracts generic requirement correctly\") {\n                                let types = parse(\n                                \"\"\"\n                                struct GenericStruct<T>: Equatable where T: Equatable {\n                                    let value: T\n                                }\n                                \"\"\")\n\n                                let generic = types.first(where: { $0.name == \"GenericStruct\" })\n                                expect(generic).toNot(beNil())\n                                expect(generic?.instanceVariables.first?.type?.implements[\"Equatable\"]).toNot(beNil())\n                            }\n\n                            it(\"extracts generic requirement as protocol composition correctly\") {\n                                let types = parse(\n                                \"\"\"\n                                struct GenericStruct<T>: Equatable where T: Equatable, T: Codable {\n                                    let value: T\n                                }\n                                \"\"\")\n\n                                let generic = types.first(where: { $0.name == \"GenericStruct\" })\n                                expect(generic).toNot(beNil())\n                                expect(generic?.instanceVariables.first?.type?.implements[\"Equatable\"]).toNot(beNil())\n                                expect(generic?.instanceVariables.first?.type?.implements[\"Codable\"]).toNot(beNil())\n                            }\n                        }\n                        context(\"given type's methods' generic return type\") {\n                            it(\"extracts generic requirement correctly\") {\n                                let types = parse(\n                                \"\"\"\n                                struct GenericStruct<T>: Equatable where T: Equatable {\n                                    enum MyEnum: Equatable, String { case abc, def }\n                                    func method() -> T { return MyEnum.abc }\n                                }\n                                \"\"\")\n\n                                let generic = types.first(where: { $0.name == \"GenericStruct\" })\n                                expect(generic).toNot(beNil())\n                                expect(generic?.methods.first?.returnType?.implements[\"Equatable\"]).toNot(beNil())\n                            }\n\n                            it(\"extracts generic requirement as protocol composition correctly\") {\n                                let types = parse(\n                                \"\"\"\n                                struct GenericStruct<T>: Equatable where T: Equatable, T: Codable {\n                                    enum MyEnum: Equatable, Codable, String { case abc, def }\n                                    func method() -> T { return MyEnum.abc }\n                                }\n                                \"\"\")\n\n                                let generic = types.first(where: { $0.name == \"GenericStruct\" })\n                                expect(generic).toNot(beNil())\n                                expect(generic?.methods.first?.returnType?.implements[\"Equatable\"]).toNot(beNil())\n                                expect(generic?.methods.first?.returnType?.implements[\"Codable\"]).toNot(beNil())\n                            }\n                        }\n\n                        context(\"given type's methods' generic argument type\") {\n                            it(\"extracts generic requirement correctly\") {\n                                let types = parse(\n                                \"\"\"\n                                struct GenericStruct<T>: Equatable where T: Equatable {\n                                    func method(_ arg: T) {}\n                                }\n                                \"\"\")\n\n                                let generic = types.first(where: { $0.name == \"GenericStruct\" })\n                                expect(generic).toNot(beNil())\n                                expect(generic?.methods.first?.parameters.first?.type?.implements[\"Equatable\"]).toNot(beNil())\n                            }\n\n                            it(\"extracts generic requirement as protocol composition correctly\") {\n                                let types = parse(\n                                \"\"\"\n                                struct GenericStruct<T>: Equatable where T: Equatable, T: Codable {\n                                    func method(_ arg: T) {}\n                                }\n                                \"\"\")\n\n                                let generic = types.first(where: { $0.name == \"GenericStruct\" })\n                                expect(generic).toNot(beNil())\n                                expect(generic?.methods.first?.parameters.first?.type?.implements[\"Equatable\"]).toNot(beNil())\n                                expect(generic?.methods.first?.parameters.first?.type?.implements[\"Codable\"]).toNot(beNil())\n                            }\n                        }\n                    }\n                }\n\n                context(\"given tuple type\") {\n                    it(\"extracts elements properly\") {\n                        let types = parse(\"struct Foo { var tuple: (a: Int, b: Int, String, _: Float, literal: [String: [String: Float]], generic: Dictionary<String, Dictionary<String, Float>>, closure: (Int) -> (Int) -> Int, tuple: (Int, Int))}\")\n                        let variable = types.first?.variables.first\n                        let tuple = variable?.typeName.tuple\n                        let stringToFloatDictGenericLiteral = GenericType(name: \"Dictionary\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"String\")), GenericTypeParameter(typeName: TypeName(name: \"Float\"))])\n                        let stringToFloatDictLiteral = DictionaryType(name: \"[String: Float]\", valueTypeName: TypeName(name: \"Float\"), keyTypeName: TypeName(name: \"String\"))\n\n                        expect(tuple?.elements[0]).to(equal(TupleElement(name: \"a\", typeName: TypeName(name: \"Int\"))))\n                        expect(tuple?.elements[1]).to(equal(TupleElement(name: \"b\", typeName: TypeName(name: \"Int\"))))\n                        expect(tuple?.elements[2]).to(equal(TupleElement(name: \"2\", typeName: TypeName(name: \"String\"))))\n                        expect(tuple?.elements[3]).to(equal(TupleElement(name: \"3\", typeName: TypeName(name: \"Float\"))))\n                        expect(tuple?.elements[4]).to(equal(\n                          TupleElement(name: \"literal\", typeName: TypeName(name: \"[String: [String: Float]]\", dictionary: DictionaryType(name: \"[String: [String: Float]]\", valueTypeName: TypeName(name: \"[String: Float]\", dictionary: stringToFloatDictLiteral, generic: stringToFloatDictGenericLiteral), keyTypeName: TypeName(name: \"String\")), generic: GenericType(name: \"Dictionary\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"String\")), GenericTypeParameter(typeName: TypeName(name: \"[String: Float]\", dictionary: stringToFloatDictLiteral, generic: stringToFloatDictGenericLiteral))])))\n                        ))\n                        expect(tuple?.elements[5]).to(equal(\n                          TupleElement(name: \"generic\", typeName: .buildDictionary(key: .String, value: .buildDictionary(key: .String, value: .Float, useGenericName: true), useGenericName: true))\n                        ))\n                        expect(tuple?.elements[6]).to(equal(\n                          TupleElement(name: \"closure\", typeName: TypeName(name: \"(Int) -> (Int) -> Int\", closure: ClosureType(name: \"(Int) -> (Int) -> Int\", parameters: [\n                              ClosureParameter(typeName: TypeName(name: \"Int\"))\n                              ], returnTypeName: TypeName(name: \"(Int) -> Int\", closure: ClosureType(name: \"(Int) -> Int\", parameters: [\n                              ClosureParameter(typeName: TypeName(name: \"Int\"))\n                                  ], returnTypeName: TypeName(name: \"Int\"))))))\n                        ))\n                        expect(tuple?.elements[7]).to(equal(TupleElement(name: \"tuple\", typeName: TypeName(name: \"(Int, Int)\", tuple:\n                            TupleType(name: \"(Int, Int)\", elements: [\n                                TupleElement(name: \"0\", typeName: TypeName(name: \"Int\")),\n                                TupleElement(name: \"1\", typeName: TypeName(name: \"Int\"))\n                                ])))))\n                    }\n                }\n\n                context(\"given literal array type\") {\n                    it(\"extracts element type properly\") {\n                        let types = parse(\"struct Foo { var array: [Int]; var arrayOfTuples: [(Int, Int)]; var arrayOfArrays: [[Int]], var arrayOfClosures: [() -> ()] }\")\n                        let variables = types.first?.variables\n                        expect(variables?[0].typeName.array).to(equal(\n                            ArrayType(name: \"[Int]\", elementTypeName: TypeName(name: \"Int\"))\n                        ))\n                        expect(variables?[1].typeName.array).to(equal(\n                            ArrayType(name: \"[(Int, Int)]\", elementTypeName: TypeName(name: \"(Int, Int)\", tuple:\n                                TupleType(name: \"(Int, Int)\", elements: [\n                                    TupleElement(name: \"0\", typeName: TypeName(name: \"Int\")),\n                                    TupleElement(name: \"1\", typeName: TypeName(name: \"Int\"))\n                                    ])))\n                        ))\n                        expect(variables?[2].typeName.array).to(equal(\n                            ArrayType(name: \"[[Int]]\", elementTypeName: TypeName(name: \"[Int]\", array: ArrayType(name: \"[Int]\", elementTypeName: TypeName(name: \"Int\")), generic: GenericType(name: \"Array\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"Int\"))])))\n                        ))\n                        expect(variables?[3].typeName).to(equal(\n                          TypeName.buildArray(of: .buildClosure(TypeName(name: \"()\")))\n                        ))\n                    }\n                }\n\n                context(\"given generic array type\") {\n                    it(\"extracts element type properly\") {\n                        let types = parse(\"struct Foo { var array: Array<Int>; var arrayOfTuples: Array<(Int, Int)>; var arrayOfArrays: Array<Array<Int>>, var arrayOfClosures: Array<() -> ()> }\")\n                        let variables = types.first?.variables\n                        expect(variables?[0].typeName.array).to(equal(\n                          TypeName.buildArray(of: .Int, useGenericName: true).array\n                        ))\n                        expect(variables?[1].typeName.array).to(equal(\n                          TypeName.buildArray(of: .buildTuple(.Int, .Int), useGenericName: true).array\n                        ))\n                        expect(variables?[2].typeName.array).to(equal(\n                          TypeName.buildArray(of: .buildArray(of: .Int, useGenericName: true), useGenericName: true).array\n                        ))\n                        expect(variables?[3].typeName.array).to(equal(\n                          TypeName.buildArray(of: .buildClosure(TypeName(name: \"()\")), useGenericName: true).array\n                        ))\n                    }\n                }\n\n                context(\"given generic set type\") {\n                    it(\"extracts element type properly\") {\n                        let types = parse(\"struct Foo { var set: Set<Int>; var setOfTuples: Set<(Int, Int)>; var setOfSets: Set<Set<Int>>, var setOfClosures: Set<() -> ()> }\")\n                        let variables = types.first?.variables\n                        expect(variables?[0].typeName.set).to(equal(\n                          TypeName.buildSet(of: .Int).set\n                        ))\n                        expect(variables?[1].typeName.set).to(equal(\n                          TypeName.buildSet(of: .buildTuple(.Int, .Int)).set\n                        ))\n                        expect(variables?[2].typeName.set).to(equal(\n                          TypeName.buildSet(of: .buildSet(of: .Int)).set\n                        ))\n                        expect(variables?[3].typeName.set).to(equal(\n                          TypeName.buildSet(of: .buildClosure(TypeName(name: \"()\"))).set\n                        ))\n                    }\n                }\n\n                context(\"given generic dictionary type\") {\n                    it(\"extracts key type properly\") {\n                        let types = parse(\"struct Foo { var dictionary: Dictionary<Int, String>; var dictionaryOfArrays: Dictionary<[Int], [String]>; var dictonaryOfDictionaries: Dictionary<Int, [Int: String]>; var dictionaryOfTuples: Dictionary<Int, (String, String)>; var dictionaryOfClosures: Dictionary<Int, () -> ()> }\")\n                        let variables = types.first?.variables\n\n                        expect(variables?[0].typeName.dictionary).to(equal(\n                            DictionaryType(name: \"Dictionary<Int, String>\", valueTypeName: TypeName(name: \"String\"), keyTypeName: TypeName(name: \"Int\"))\n                        ))\n                        expect(variables?[1].typeName.dictionary).to(equal(\n                            DictionaryType(name: \"Dictionary<[Int], [String]>\", valueTypeName: TypeName(name: \"[String]\", array: ArrayType(name: \"[String]\", elementTypeName: TypeName(name: \"String\")), generic: GenericType(name: \"Array\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"String\"))])), keyTypeName: TypeName(name: \"[Int]\", array:\n                                ArrayType(name: \"[Int]\", elementTypeName: TypeName(name: \"Int\")), generic: GenericType(name: \"Array\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"Int\"))])))\n                        ))\n                        expect(variables?[2].typeName.dictionary).to(equal(\n                            DictionaryType(name: \"Dictionary<Int, [Int: String]>\", valueTypeName: TypeName(name: \"[Int: String]\", dictionary: DictionaryType(name: \"[Int: String]\", valueTypeName: TypeName(name: \"String\"), keyTypeName: TypeName(name: \"Int\")), generic: GenericType(name: \"Dictionary\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"Int\")), GenericTypeParameter(typeName: TypeName(name: \"String\"))])), keyTypeName: TypeName(name: \"Int\"))\n                        ))\n                        expect(variables?[3].typeName.dictionary).to(equal(\n                            DictionaryType(name: \"Dictionary<Int, (String, String)>\",\n                                           valueTypeName: TypeName(name: \"(String, String)\", tuple: TupleType(name: \"(String, String)\", elements: [TupleElement(name: \"0\", typeName: TypeName(name: \"String\")), TupleElement(name: \"1\", typeName: TypeName(name: \"String\"))])),\n                                           keyTypeName: TypeName(name: \"Int\"))\n                        ))\n                        expect(variables?[4].typeName.dictionary).to(equal(\n                          TypeName.buildDictionary(key: .Int, value: .buildClosure(TypeName(name: \"()\")), useGenericName: true).dictionary\n                        ))\n                    }\n                }\n\n                context(\"given generic types extensions\") {\n                    it(\"detects protocol conformance in extension of generic types\") {\n                        let types = parse(\"\"\"\n                            protocol Bar {}\n                            extension Array: Bar {}\n                            extension Dictionary: Bar {}\n                            extension Set: Bar {}\n                            struct Foo {\n                                var array: Array<Int>\n                                var arrayLiteral: [Int]\n                                var dictionary: Dictionary<String, Int>\n                                var dictionaryLiteral: [String: Int]\n                                var set: Set<String>\n                            }\n                            \"\"\")\n                        let bar = SourceryProtocol.init(name: \"Bar\")\n                        let variables = types[3].variables\n                        expect(variables[0].type?.implements[\"Bar\"]).to(equal(bar))\n                        expect(variables[1].type?.implements[\"Bar\"]).to(equal(bar))\n                        expect(variables[2].type?.implements[\"Bar\"]).to(equal(bar))\n                        expect(variables[3].type?.implements[\"Bar\"]).to(equal(bar))\n                        expect(variables[4].type?.implements[\"Bar\"]).to(equal(bar))\n                    }\n                }\n\n                context(\"given literal dictionary type\") {\n                    it(\"extracts key type properly\") {\n                        let types = parse(\"struct Foo { var dictionary: [Int: String]; var dictionaryOfArrays: [[Int]: [String]]; var dicitonaryOfDictionaries: [Int: [Int: String]]; var dictionaryOfTuples: [Int: (String, String)]; var dictionaryOfClojures: [Int: () -> ()] }\")\n                        let variables = types.first?.variables\n\n                        expect(variables?[0].typeName.dictionary).to(equal(\n                            DictionaryType(name: \"[Int: String]\", valueTypeName: TypeName(name: \"String\"), keyTypeName: TypeName(name: \"Int\"))\n                        ))\n                        expect(variables?[1].typeName.dictionary).to(equal(\n                            DictionaryType(name: \"[[Int]: [String]]\",\n                                           valueTypeName: TypeName(name: \"[String]\", array: ArrayType(name: \"[String]\", elementTypeName: TypeName(name: \"String\")), generic: GenericType(name: \"Array\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"String\"))])),\n                                           keyTypeName: TypeName(name: \"[Int]\", array: ArrayType(name: \"[Int]\", elementTypeName: TypeName(name: \"Int\")), generic: GenericType(name: \"Array\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"Int\"))]))\n                            )\n                        ))\n                        expect(variables?[2].typeName.dictionary).to(equal(\n                            DictionaryType(name: \"[Int: [Int: String]]\",\n                                           valueTypeName: TypeName(name: \"[Int: String]\", dictionary: DictionaryType(name: \"[Int: String]\", valueTypeName: TypeName(name: \"String\"), keyTypeName: TypeName(name: \"Int\")), generic: GenericType(name: \"Dictionary\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"Int\")), GenericTypeParameter(typeName: TypeName(name: \"String\"))])),\n                                           keyTypeName: TypeName(name: \"Int\")\n                            )\n                        ))\n                        expect(variables?[3].typeName.dictionary).to(equal(\n                            DictionaryType(name: \"[Int: (String, String)]\",\n                                           valueTypeName: TypeName(name: \"(String, String)\", tuple: TupleType(name: \"(String, String)\", elements: [TupleElement(name: \"0\", typeName: TypeName(name: \"String\")), TupleElement(name: \"1\", typeName: TypeName(name: \"String\"))])),\n                                           keyTypeName: TypeName(name: \"Int\"))\n                        ))\n                        expect(variables?[4].typeName.dictionary).to(equal(\n                          TypeName.buildDictionary(key: .Int, value: .buildClosure(TypeName(name: \"()\"))).dictionary\n                        ))\n                    }\n                }\n\n                context(\"given closure type\") {\n                    it(\"extracts closure return type\") {\n                        let types = parse(\"struct Foo { var closure: () -> \\n Int }\")\n                        let variables = types.first?.variables\n\n                        expect(variables?[0].typeName.closure).to(equal(\n                            ClosureType(name: \"() -> Int\", parameters: [], returnTypeName: TypeName(name: \"Int\"))\n                        ))\n                    }\n\n                    it(\"extracts throws return type\") {\n                        let types = parse(\"struct Foo { var closure: () throws -> Int }\")\n                        let variables = types.first?.variables\n\n                        expect(variables?[0].typeName.closure).to(equal(\n                            ClosureType(name: \"() throws -> Int\", parameters: [], returnTypeName: TypeName(name: \"Int\"), throwsOrRethrowsKeyword: \"throws\")\n                        ))\n                    }\n\n                    it(\"extracts typed throws return type\") {\n                        let types = parse(\"struct Foo { var closure: () throws(CustomError) -> Int }\")\n                        let variables = types.first?.variables\n\n                        expect(variables?[0].typeName.closure).to(equal(\n                            ClosureType(name: \"() throws(CustomError) -> Int\", parameters: [], returnTypeName: TypeName(name: \"Int\"), throwsOrRethrowsKeyword: \"throws\", throwsTypeName: TypeName(\"CustomError\"))\n                        ))\n                    }\n\n                    it(\"extracts void return type\") {\n                        let types = parse(\"struct Foo { var closure: () -> Void }\")\n                        let variables = types.first?.variables\n\n                        expect(variables?[0].typeName.closure).to(equal(\n                            ClosureType(name: \"() -> Void\", parameters: [], returnTypeName: TypeName(name: \"Void\"))\n                        ))\n                    }\n\n                    it(\"extracts () return type\") {\n                        let types = parse(\"struct Foo { var closure: () -> () }\")\n                        let variables = types.first?.variables\n\n                        expect(variables?[0].typeName.closure).to(equal(\n                            ClosureType(name: \"() -> ()\", parameters: [], returnTypeName: TypeName(name: \"()\"))\n                        ))\n                    }\n\n                    it(\"extracts complex closure type\") {\n                        let types = parse(\"struct Foo { var closure: () -> (Int) throws(CustomError) -> Int }\")\n                        let variables = types.first?.variables\n\n                        expect(variables?[0].typeName.closure).to(equal(\n                            ClosureType(name: \"() -> (Int) throws(CustomError) -> Int\", parameters: [], returnTypeName: TypeName(name: \"(Int) throws(CustomError) -> Int\", closure: ClosureType(name: \"(Int) throws(CustomError) -> Int\", parameters: [\n                                ClosureParameter(typeName: TypeName(name: \"Int\"))\n                                ], returnTypeName: TypeName(name: \"Int\"), throwsOrRethrowsKeyword: \"throws\", throwsTypeName: TypeName(\"CustomError\")\n                            )))\n                        ))\n                    }\n\n                    it(\"extracts () parameters\") {\n                        let types = parse(\"struct Foo { var closure: () -> Int }\")\n                        let variables = types.first?.variables\n\n                        expect(variables?[0].typeName.closure).to(equal(\n                            ClosureType(name: \"() -> Int\", parameters: [], returnTypeName: TypeName(name: \"Int\"))\n                        ))\n                    }\n\n                    it(\"extracts Void parameters\") {\n                        let types = parse(\"struct Foo { var closure: (Void) -> Int }\")\n                        let variables = types.first?.variables\n\n                        expect(variables?[0].typeName.closure).to(equal(\n                            ClosureType(name: \"(Void) -> Int\", parameters: [.init(typeName: TypeName(name: \"Void\"))], returnTypeName: .Int)\n                        ))\n                    }\n\n                    it(\"extracts parameters\") {\n                        let types = parse(\"struct Foo { var closure: (Int, Int -> Int) -> Int }\")\n                        let variables = types.first?.variables\n\n                        expect(variables?[0].typeName)\n                          .to(equal(\n                            TypeName.buildClosure(\n                              .Int,\n                              .buildClosure(.Int, returnTypeName: .Int),\n                            returnTypeName: .Int\n                          )))\n                    }\n                }\n\n                context(\"given Self instead of type name\") {\n                    it(\"replaces variable types with actual types\") {\n\n                        let expectedVariable = Variable(\n                            name: \"variable\",\n                            typeName: TypeName(name: \"Self\", actualTypeName: TypeName(name: \"Foo\")),\n                            accessLevel: (.internal, .none),\n                            isComputed: true,\n                            definedInTypeName: TypeName(name: \"Foo\")\n                        )\n\n                        let expectedStaticVariable = Variable(\n                            name: \"staticVar\",\n                            typeName: TypeName(name: \"Self\", actualTypeName: TypeName(name: \"Foo.SubType\")),\n                            accessLevel: (.internal, .internal),\n                            isStatic: true,\n                            defaultValue: \".init()\",\n                            modifiers: [Modifier(name: \"static\")],\n                            definedInTypeName: TypeName(name: \"Foo.SubType\")\n                        )\n\n                        let subType = Struct(name: \"SubType\", variables: [expectedStaticVariable])\n                        let fooType = Struct(name: \"Foo\", variables: [expectedVariable], containedTypes: [subType])\n\n                        subType.parent = fooType\n\n                        expectedVariable.type = fooType\n                        expectedStaticVariable.type = subType\n\n                        let types = parse(\n                            \"\"\"\n                            struct Foo {\n                                var variable: Self { .init() }\n\n                                struct SubType {\n                                    static var staticVar: Self = .init()\n                                }\n                            }\n                            \"\"\"\n                        )\n\n                        func verify(_ variable: Variable?, expected: Variable) {\n                            expect(variable).to(equal(expected))\n                            expect(variable?.actualTypeName).to(equal(expected.actualTypeName))\n                            expect(variable?.type).to(equal(expected.type))\n                        }\n\n                        verify(types.first(where: { $0.name == \"Foo\" })?.instanceVariables.first, expected: expectedVariable)\n                        verify(types.first(where: { $0.name == \"Foo.SubType\" })?.staticVariables.first, expected: expectedStaticVariable)\n                    }\n\n                    it(\"replaces method types with actual types\") {\n\n                        let expectedMethod = Method(name: \"myMethod()\", selectorName: \"myMethod\", returnTypeName: TypeName(name: \"Self\", actualTypeName: TypeName(name: \"Foo.SubType\")), definedInTypeName: TypeName(name: \"Foo.SubType\"))\n\n                        let subType = Struct(name: \"SubType\", methods: [expectedMethod])\n                        let fooType = Struct(name: \"Foo\", containedTypes: [subType])\n\n                        subType.parent = fooType\n\n                        let types = parse(\n                            \"\"\"\n                            struct Foo {\n                                struct SubType {\n                                    func myMethod() -> Self {\n                                        return self\n                                    }\n                                }\n                            }\n                            \"\"\"\n                        )\n\n                        let parsedSubType = types.first(where: { $0.name == \"Foo.SubType\" })\n                        expect(parsedSubType?.methods.first).to(equal(expectedMethod))\n                    }\n                }\n\n                context(\"given typealiases\") {\n                    func parseTypealiases(_ code: String) -> [Typealias] {\n                        guard let parserResult = try? makeParser(for: code).parse() else { fail(); return [] }\n                        return Composer.uniqueTypesAndFunctions(parserResult).typealiases\n                    }\n\n                    describe(\"Updated composer\") {\n                        it(\"follows through typealias chain to final type\") {\n                            let code = \"\"\"\n                                       enum Bar {}\n                                       struct Foo {}\n                                       typealias Root = Bar\n                                       typealias Leaf1 = Root\n                                       typealias Leaf2 = Leaf1\n                                       typealias Leaf3 = Leaf1\n                                       \"\"\"\n\n                            parseTypealiases(code)\n                              .forEach {\n                                  expect($0.type?.name)\n                                    .to(equal(\"Bar\"))\n                              }\n                        }\n\n                        it(\"follows through typealias chain contained in types to final type\") {\n                            let code = \"\"\"\n                                       enum Bar {\n                                         typealias Root = Bar\n                                       }\n\n                                       struct Foo {\n                                         typealias Leaf1 = Bar.Root\n                                       }\n                                       typealias Leaf2 = Foo.Leaf1\n                                       typealias Leaf3 = Leaf2\n                                       typealias Leaf4 = Bar.Root\n                                       \"\"\"\n\n                            parseTypealiases(code)\n                              .forEach {\n                                  expect($0.type?.name)\n                                    .to(equal(\"Bar\"))\n                              }\n                        }\n\n                        it(\"does not loop forever when typealiases form a cycle\") {\n                            let code = \"\"\"\n                                       typealias Foo = Bar\n                                       typealias Bar = Foo\n                                       \"\"\"\n\n                            guard let parserResult = try? makeParser(for: code).parse() else {\n                                fail(\"Failed to parse typealias cycle fixture\")\n                                return\n                            }\n\n                            let composed = ParserResultsComposed(parserResult: parserResult)\n                            expect(composed.resolvedTypealiases.keys).to(contain(\"Foo\", \"Bar\"))\n                        }\n\n                        xit(\"follows through typealias contained in other types\") {\n                            let code =\n                            \"\"\"\n                            enum Module {\n                                typealias Model = ModuleModel\n                            }\n\n                            struct ModuleModel {\n                                class ModelID {}\n\n                                struct Element {\n                                    let id: ModuleModel.ModelID\n                                    let idUsingTypealias: Module.Model.ModelID\n                                }\n                            }\n                            \"\"\"\n\n                            let type = parse(code)[2]\n                            expect(type.name).to(equal(\"ModuleModel.Element\"))\n                            type.variables.forEach {\n                                expect($0.type?.name).to(equal(\"ModuleModel.ModelID\"))\n                            }\n                        }\n\n                        it(\"follows through typealias chain contained in different modules to final type\") {\n                            // TODO: add module inference logic to typealias resolution!\n                            let typealiases = parseModules(\n                              (name: \"RootModule\", contents: \"struct Bar {}\"),\n                              (name: \"LeafModule1\", contents: \"typealias Leaf1 = RootModule.Bar\"),\n                              (name: \"LeafModule2\", contents: \"typealias Leaf2 = LeafModule1.Leaf1\")\n                            ).typealiases\n\n                            typealiases\n                              .forEach {\n                                  expect($0.type?.name)\n                                    .to(equal(\"Bar\"))\n                              }\n                        }\n\n                        it(\"gathers full type information if a type is defined on an typealiased unknown parent via extension\") {\n                            let code = \"\"\"\n                                       typealias UnknownTypeAlias = Unknown\n                                       extension UnknownTypeAlias {\n                                         struct KnownStruct {\n                                           var name: Int = 0\n                                           var meh: Float = 0\n                                         }\n                                       }\n                                       \"\"\"\n                            let result = parse(code)\n                            let knownType = result.first(where: { $0.localName == \"KnownStruct\" })\n\n                            expect(knownType?.isExtension).to(beFalse())\n                            expect(knownType?.variables).to(haveCount(2))\n                        }\n\n                        it(\"extends the actual type when using typealias\") {\n                            let code = \"\"\"\n                                       struct Foo {\n                                       }\n                                       typealias FooAlias = Foo\n                                       extension FooAlias {\n                                         var name: Int { 0 }\n                                       }\n                                       \"\"\"\n                            let result = parse(code)\n\n                            expect(result.first?.variables.first?.typeName)\n                              .to(equal(TypeName.Int))\n                        }\n\n                        it(\"resolves inheritance chain via typealias\") {\n                            let code = \"\"\"\n                                       class Foo {\n                                         class Inner {\n                                           var innerBase: Bool\n                                         }\n                                         typealias Hidden = Inner\n                                         class InnerInherited: Hidden {\n                                           var innerInherited: Bool = true\n                                         }\n                                       }\n                                       \"\"\"\n                            let result = parse(code)\n                            let innerInherited = result.first(where: { $0.localName == \"InnerInherited\" })\n\n                            expect(innerInherited?.inheritedTypes).to(equal([\"Foo.Inner\"]))\n                        }\n                    }\n\n                    it(\"resolves definedInType for methods\") {\n                        let input = \"class Foo { func bar() {} }; typealias FooAlias = Foo; extension FooAlias { func baz() {} }\"\n                        let type = parse(input).first\n\n                        expect(type?.methods.first?.actualDefinedInTypeName).to(equal(TypeName(name: \"Foo\")))\n                        expect(type?.methods.first?.definedInTypeName).to(equal(TypeName(name: \"Foo\")))\n                        expect(type?.methods.first?.definedInType?.name).to(equal(\"Foo\"))\n                        expect(type?.methods.first?.definedInType?.isExtension).to(beFalse())\n                        expect(type?.methods.last?.actualDefinedInTypeName).to(equal(TypeName(name: \"Foo\")))\n                        expect(type?.methods.last?.definedInTypeName).to(equal(TypeName(name: \"FooAlias\")))\n                        expect(type?.methods.last?.definedInType?.name).to(equal(\"Foo\"))\n                        expect(type?.methods.last?.definedInType?.isExtension).to(beTrue())\n                    }\n\n                    it(\"resolves definedInType for variables\") {\n                        let input = \"class Foo { var bar: Int { return 1 } }; typealias FooAlias = Foo; extension FooAlias { var baz: Int { return 2 } }\"\n                        let type = parse(input).first\n\n                        expect(type?.variables.first?.actualDefinedInTypeName).to(equal(TypeName(name: \"Foo\")))\n                        expect(type?.variables.first?.definedInTypeName).to(equal(TypeName(name: \"Foo\")))\n                        expect(type?.variables.first?.definedInType?.name).to(equal(\"Foo\"))\n                        expect(type?.variables.first?.definedInType?.isExtension).to(beFalse())\n                        expect(type?.variables.last?.actualDefinedInTypeName).to(equal(TypeName(name: \"Foo\")))\n                        expect(type?.variables.last?.definedInTypeName).to(equal(TypeName(name: \"FooAlias\")))\n                        expect(type?.variables.last?.definedInType?.name).to(equal(\"Foo\"))\n                        expect(type?.variables.last?.definedInType?.isExtension).to(beTrue())\n                    }\n\n                    it(\"sets typealias type\") {\n                        let types = parse(\"class Bar {}; class Foo { typealias BarAlias = Bar }\")\n                        let bar = types.first\n                        let foo = types.last\n\n                        expect(foo?.typealiases[\"BarAlias\"]?.type).to(equal(bar))\n                    }\n\n                    context(\"given variable\") {\n                        it(\"replaces variable alias type with actual type\") {\n                            let expectedVariable = Variable(name: \"foo\", typeName: TypeName(name: \"GlobalAlias\", actualTypeName: TypeName(name: \"Foo\")), definedInTypeName: TypeName(name: \"Bar\"))\n                            expectedVariable.type = Class(name: \"Foo\")\n\n                            let type = parse(\"typealias GlobalAlias = Foo; class Foo {}; class Bar { var foo: GlobalAlias }\").first\n                            let variable = type?.variables.first\n\n                            expect(variable).to(equal(expectedVariable))\n                            expect(variable?.actualTypeName).to(equal(expectedVariable.actualTypeName))\n                            expect(variable?.type).to(equal(expectedVariable.type))\n                        }\n\n                        it(\"replaces tuple elements alias types with actual types\") {\n                            let expectedActualTypeName = TypeName(name: \"(Foo, Int)\")\n                            expectedActualTypeName.tuple = TupleType(name: \"(Foo, Int)\", elements: [\n                                TupleElement(name: \"0\", typeName: TypeName(name: \"Foo\"), type: Type(name: \"Foo\")),\n                                TupleElement(name: \"1\", typeName: TypeName(name: \"Int\"))\n                                ])\n                            let expectedVariable = Variable(name: \"foo\", typeName: TypeName(name: \"(GlobalAlias, Int)\", actualTypeName: expectedActualTypeName, tuple: expectedActualTypeName.tuple), definedInTypeName: TypeName(name: \"Bar\"))\n\n                            let types = parse(\"typealias GlobalAlias = Foo; class Foo {}; class Bar { var foo: (GlobalAlias, Int) }\")\n                            let variable = types.first?.variables.first\n                            let tupleElement = variable?.typeName.tuple?.elements.first\n\n                            expect(variable).to(equal(expectedVariable))\n                            expect(variable?.actualTypeName).to(equal(expectedVariable.actualTypeName))\n                            expect(tupleElement?.type).to(equal(Class(name: \"Foo\")))\n                        }\n\n                        it(\"replaces variable alias type with actual tuple type name\") {\n                            let expectedActualTypeName = TypeName(name: \"(Foo, Int)\")\n                            expectedActualTypeName.tuple = TupleType(name: \"(Foo, Int)\", elements: [\n                                TupleElement(name: \"0\", typeName: TypeName(name: \"Foo\"), type: Class(name: \"Foo\")),\n                                TupleElement(name: \"1\", typeName: TypeName(name: \"Int\"))\n                                ])\n                            let expectedVariable = Variable(name: \"foo\", typeName: TypeName(name: \"GlobalAlias\", actualTypeName: expectedActualTypeName, tuple: expectedActualTypeName.tuple), definedInTypeName: TypeName(name: \"Bar\"))\n\n                            let type = parse(\"typealias GlobalAlias = (Foo, Int); class Foo {}; class Bar { var foo: GlobalAlias }\").first\n                            let variable = type?.variables.first\n\n                            expect(variable).to(equal(expectedVariable))\n                            expect(variable?.actualTypeName).to(equal(expectedVariable.actualTypeName))\n                            expect(variable?.typeName.isTuple).to(beTrue())\n                        }\n                    }\n\n                    context(\"given method return value type\") {\n                        it(\"replaces method return type alias with actual type\") {\n                            let expectedMethod = Method(name: \"some()\", selectorName: \"some\", returnTypeName: TypeName(name: \"FooAlias\", actualTypeName: TypeName(name: \"Foo\")), definedInTypeName: TypeName(name: \"Bar\"))\n\n                            let types = parse(\"typealias FooAlias = Foo; class Foo {}; class Bar { func some() -> FooAlias }\")\n                            let method = types.first?.methods.first\n\n                            expect(method).to(equal(expectedMethod))\n                            expect(method?.actualReturnTypeName).to(equal(expectedMethod.actualReturnTypeName))\n                            expect(method?.returnType).to(equal(Class(name: \"Foo\")))\n                        }\n\n                        it(\"replaces tuple elements alias types with actual types\") {\n                            let expectedActualTypeName = TypeName(name: \"(Foo, Int)\")\n                            expectedActualTypeName.tuple = TupleType(name: \"(Foo, Int)\", elements: [\n                                TupleElement(name: \"0\", typeName: TypeName(name: \"Foo\"), type: Class(name: \"Foo\")),\n                                TupleElement(name: \"1\", typeName: TypeName(name: \"Int\"))\n                                ])\n                            let expectedMethod = Method(name: \"some()\", selectorName: \"some\", returnTypeName: TypeName(name: \"(FooAlias, Int)\", actualTypeName: expectedActualTypeName, tuple: expectedActualTypeName.tuple), definedInTypeName: TypeName(name: \"Bar\"))\n\n                            let types = parse(\"typealias FooAlias = Foo; class Foo {}; class Bar { func some() -> (FooAlias, Int) }\")\n                            let method = types.first?.methods.first\n                            let tupleElement = method?.returnTypeName.tuple?.elements.first\n\n                            expect(method).to(equal(expectedMethod))\n                            expect(method?.actualReturnTypeName).to(equal(expectedMethod.actualReturnTypeName))\n                            expect(tupleElement?.type).to(equal(Class(name: \"Foo\")))\n                        }\n\n                        it(\"replaces method return type alias with actual tuple type name\") {\n                            let expectedActualTypeName = TypeName(name: \"(Foo, Int)\")\n                            expectedActualTypeName.tuple = TupleType(name: \"(Foo, Int)\", elements: [\n                                TupleElement(name: \"0\", typeName: TypeName(name: \"Foo\"), type: Class(name: \"Foo\")),\n                                TupleElement(name: \"1\", typeName: TypeName(name: \"Int\"))\n                                ])\n                            let expectedMethod = Method(name: \"some()\", selectorName: \"some\", returnTypeName: TypeName(name: \"GlobalAlias\", actualTypeName: expectedActualTypeName, tuple: expectedActualTypeName.tuple), definedInTypeName: TypeName(name: \"Bar\"))\n\n                            let types = parse(\"typealias GlobalAlias = (Foo, Int); class Foo {}; class Bar { func some() -> GlobalAlias }\")\n                            let method = types.first?.methods.first\n\n                            expect(method).to(equal(expectedMethod))\n                            expect(method?.actualReturnTypeName).to(equal(expectedMethod.actualReturnTypeName))\n                            expect(method?.returnTypeName.isTuple).to(beTrue())\n                        }\n                    }\n\n                    context(\"given method parameter\") {\n                        it(\"replaces method parameter type alias with actual type\") {\n                            let expectedMethodParameter = MethodParameter(name: \"foo\", index: 0, typeName: TypeName(name: \"FooAlias\", actualTypeName: TypeName(name: \"Foo\")), type: Class(name: \"Foo\"))\n\n                            let types = parse(\"typealias FooAlias = Foo; class Foo {}; class Bar { func some(foo: FooAlias) }\")\n                            let methodParameter = types.first?.methods.first?.parameters.first\n\n                            expect(methodParameter).to(equal(expectedMethodParameter))\n                            expect(methodParameter?.actualTypeName).to(equal(expectedMethodParameter.actualTypeName))\n                            expect(methodParameter?.type).to(equal(Class(name: \"Foo\")))\n                        }\n\n                        it(\"replaces tuple tuple elements alias types with actual types\") {\n                            let expectedActualTypeName = TypeName(name: \"(Foo, Int)\")\n                            expectedActualTypeName.tuple = TupleType(name: \"(Foo, Int)\", elements: [\n                                TupleElement(name: \"0\", typeName: TypeName(name: \"Foo\"), type: Class(name: \"Foo\")),\n                                TupleElement(name: \"1\", typeName: TypeName(name: \"Int\"))\n                                ])\n                            let expectedMethodParameter = MethodParameter(name: \"foo\", index: 0, typeName: TypeName(name: \"(FooAlias, Int)\", actualTypeName: expectedActualTypeName, tuple: expectedActualTypeName.tuple))\n\n                            let types = parse(\"typealias FooAlias = Foo; class Foo {}; class Bar { func some(foo: (FooAlias, Int)) }\")\n                            let methodParameter = types.first?.methods.first?.parameters.first\n                            let tupleElement = methodParameter?.typeName.tuple?.elements.first\n\n                            expect(methodParameter).to(equal(expectedMethodParameter))\n                            expect(methodParameter?.actualTypeName).to(equal(expectedMethodParameter.actualTypeName))\n                            expect(tupleElement?.type).to(equal(Class(name: \"Foo\")))\n                        }\n\n                        it(\"replaces method parameter alias type with actual tuple type name\") {\n                            let expectedActualTypeName = TypeName(name: \"(Foo, Int)\")\n                            expectedActualTypeName.tuple = TupleType(name: \"(Foo, Int)\", elements: [\n                                TupleElement(name: \"0\", typeName: TypeName(name: \"Foo\"), type: Class(name: \"Foo\")),\n                                TupleElement(name: \"1\", typeName: TypeName(name: \"Int\"))\n                                ])\n                            let expectedMethodParameter = MethodParameter(name: \"foo\", index: 0, typeName: TypeName(name: \"GlobalAlias\", actualTypeName: expectedActualTypeName, tuple: expectedActualTypeName.tuple))\n\n                            let types = parse(\"typealias GlobalAlias = (Foo, Int); class Foo {}; class Bar { func some(foo: GlobalAlias) }\")\n                            let methodParameter = types.first?.methods.first?.parameters.first\n\n                            expect(methodParameter).to(equal(expectedMethodParameter))\n                            expect(methodParameter?.actualTypeName).to(equal(expectedMethodParameter.actualTypeName))\n                            expect(methodParameter?.typeName.isTuple).to(beTrue())\n                        }\n                    }\n\n                    context(\"given enum case associated value\") {\n                        it(\"replaces enum case associated value type alias with actual type\") {\n                            let expectedAssociatedValue = AssociatedValue(typeName: TypeName(name: \"FooAlias\", actualTypeName: TypeName(name: \"Foo\")), type: Class(name: \"Foo\"))\n\n                            let types = parse(\"typealias FooAlias = Foo; class Foo {}; enum Some { case optionA(FooAlias) }\")\n                            let associatedValue = (types.last as? Enum)?.cases.first?.associatedValues.first\n\n                            expect(associatedValue).to(equal(expectedAssociatedValue))\n                            expect(associatedValue?.actualTypeName).to(equal(expectedAssociatedValue.actualTypeName))\n                            expect(associatedValue?.type).to(equal(Class(name: \"Foo\")))\n                        }\n\n                        it(\"replaces tuple type elements alias types with actual type\") {\n                            let expectedActualTypeName = TypeName(name: \"(Foo, Int)\")\n                            expectedActualTypeName.tuple = TupleType(name: \"(Foo, Int)\", elements: [\n                                TupleElement(name: \"0\", typeName: TypeName(name: \"Foo\"), type: Class(name: \"Foo\")),\n                                TupleElement(name: \"1\", typeName: TypeName(name: \"Int\"))\n                                ])\n                            let expectedAssociatedValue = AssociatedValue(typeName: TypeName(name: \"(FooAlias, Int)\", actualTypeName: expectedActualTypeName, tuple: expectedActualTypeName.tuple))\n\n                            let types = parse(\"typealias FooAlias = Foo; class Foo {}; enum Some { case optionA((FooAlias, Int)) }\")\n                            let associatedValue = (types.last as? Enum)?.cases.first?.associatedValues.first\n                            let tupleElement = associatedValue?.typeName.tuple?.elements.first\n\n                            expect(associatedValue).to(equal(expectedAssociatedValue))\n                            expect(associatedValue?.actualTypeName).to(equal(expectedAssociatedValue.actualTypeName))\n                            expect(tupleElement?.type).to(equal(Class(name: \"Foo\")))\n                        }\n\n                        it(\"replaces associated value alias type with actual tuple type name\") {\n                            let expectedTypeName = TypeName(name: \"(Foo, Int)\")\n                            expectedTypeName.tuple = TupleType(name: \"(Foo, Int)\", elements: [\n                                TupleElement(name: \"0\", typeName: TypeName(name: \"Foo\"), type: Class(name: \"Foo\")),\n                                TupleElement(name: \"1\", typeName: TypeName(name: \"Int\"))\n                                ])\n                            let expectedAssociatedValue = AssociatedValue(typeName: TypeName(name: \"GlobalAlias\", actualTypeName: expectedTypeName, tuple: expectedTypeName.tuple))\n\n                            let types = parse(\"typealias GlobalAlias = (Foo, Int); class Foo {}; enum Some { case optionA(GlobalAlias) }\")\n                            let associatedValue = (types.last as? Enum)?.cases.first?.associatedValues.first\n\n                            expect(associatedValue).to(equal(expectedAssociatedValue))\n                            expect(associatedValue?.actualTypeName).to(equal(expectedAssociatedValue.actualTypeName))\n                            expect(associatedValue?.typeName.isTuple).to(beTrue())\n                        }\n\n                        it(\"replaces associated value alias type with actual dictionary type name\") {\n                            let expectedTypeName = TypeName(name: \"[String: Any]\")\n                            expectedTypeName.dictionary = DictionaryType(name: \"[String: Any]\", valueTypeName: TypeName(name: \"Any\"), valueType: nil, keyTypeName: TypeName(name: \"String\"), keyType: nil)\n                            expectedTypeName.generic = GenericType(name: \"Dictionary\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"String\"), type: nil), GenericTypeParameter(typeName: TypeName(name: \"Any\"), type: nil)])\n\n                            let expectedAssociatedValue = AssociatedValue(typeName: TypeName(name: \"JSON\", actualTypeName: expectedTypeName, dictionary: expectedTypeName.dictionary, generic: expectedTypeName.generic), type: nil)\n\n                            let types = parse(\"typealias JSON = [String: Any]; enum Some { case optionA(JSON) }\")\n                            let associatedValue = (types.last as? Enum)?.cases.first?.associatedValues.first\n\n                            expect(associatedValue?.typeName).to(equal(expectedAssociatedValue.typeName))\n                            expect(associatedValue?.actualTypeName).to(equal(expectedAssociatedValue.actualTypeName))\n                        }\n\n                        it(\"replaces associated value alias type with actual array type name\") {\n                            let expectedTypeName = TypeName(name: \"[Any]\")\n                            expectedTypeName.array = ArrayType(name: \"[Any]\", elementTypeName: TypeName(name: \"Any\"), elementType: nil)\n                            expectedTypeName.generic = GenericType(name: \"Array\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"Any\"), type: nil)])\n\n                            let expectedAssociatedValue = AssociatedValue(typeName: TypeName(name: \"JSON\", actualTypeName: expectedTypeName, array: expectedTypeName.array, generic: expectedTypeName.generic), type: nil)\n\n                            let types = parse(\"typealias JSON = [Any]; enum Some { case optionA(JSON) }\")\n                            let associatedValue = (types.last as? Enum)?.cases.first?.associatedValues.first\n\n                            expect(associatedValue).to(equal(expectedAssociatedValue))\n                            expect(associatedValue?.actualTypeName).to(equal(expectedAssociatedValue.actualTypeName))\n                        }\n\n                        it(\"replaces associated value alias type with actual closure type name\") {\n                            let expectedTypeName = TypeName(name: \"(String) -> Any\")\n                            expectedTypeName.closure = ClosureType(name: \"(String) -> Any\", parameters: [\n                                ClosureParameter(typeName: TypeName(name: \"String\"))\n                                ], returnTypeName: TypeName(name: \"Any\")\n                            )\n\n                            let expectedAssociatedValue = AssociatedValue(typeName: TypeName(name: \"JSON\", actualTypeName: expectedTypeName, closure: expectedTypeName.closure), type: nil)\n\n                            let types = parse(\"typealias JSON = (String) -> Any; enum Some { case optionA(JSON) }\")\n                            let associatedValue = (types.last as? Enum)?.cases.first?.associatedValues.first\n\n                            expect(associatedValue).to(equal(expectedAssociatedValue))\n                            expect(associatedValue?.actualTypeName).to(equal(expectedAssociatedValue.actualTypeName))\n                        }\n\n                    }\n\n                    it(\"replaces variable alias with actual type via 3 typealiases\") {\n                        let expectedVariable = Variable(name: \"foo\", typeName: TypeName(name: \"FinalAlias\", actualTypeName: TypeName(name: \"Foo\")), type: Class(name: \"Foo\"), definedInTypeName: TypeName(name: \"Bar\"))\n\n                        let type = parse(\n                            \"typealias FooAlias = Foo; typealias BarAlias = FooAlias; typealias FinalAlias = BarAlias; class Foo {}; class Bar { var foo: FinalAlias }\").first\n                        let variable = type?.variables.first\n\n                        expect(variable).to(equal(expectedVariable))\n                        expect(variable?.actualTypeName).to(equal(expectedVariable.actualTypeName))\n                        expect(variable?.type).to(equal(expectedVariable.type))\n                    }\n\n                    it(\"replaces variable optional alias type with actual type\") {\n                        let expectedVariable = Variable(name: \"foo\", typeName: TypeName(name: \"GlobalAlias?\", actualTypeName: TypeName(name: \"Foo?\")), type: Class(name: \"Foo\"), definedInTypeName: TypeName(name: \"Bar\"))\n\n                        let type = parse(\"typealias GlobalAlias = Foo; class Foo {}; class Bar { var foo: GlobalAlias? }\").first\n                        let variable = type?.variables.first\n\n                        expect(variable).to(equal(expectedVariable))\n                        expect(variable?.actualTypeName).to(equal(expectedVariable.actualTypeName))\n                        expect(variable?.type).to(equal(expectedVariable.type))\n                    }\n\n                    it(\"extends actual type with type alias extension\") {\n                        expect(parse(\"typealias GlobalAlias = Foo; class Foo: TestProtocol { }; extension GlobalAlias: AnotherProtocol {}\"))\n                                .to(equal([\n                                                  Class(name: \"Foo\",\n                                                       accessLevel: .internal,\n                                                       isExtension: false,\n                                                       variables: [],\n                                                       inheritedTypes: [\"TestProtocol\", \"AnotherProtocol\"])\n                                          ]))\n                    }\n\n                    it(\"updates inheritedTypes with real type name\") {\n                        let expectedFoo = Class(name: \"Foo\")\n                        let expectedClass = Class(name: \"Bar\", inheritedTypes: [\"Foo\"])\n                        expectedClass.inherits = [\"Foo\": expectedFoo]\n\n                        expect(parse(\"typealias GlobalAliasFoo = Foo; class Foo { }; class Bar: GlobalAliasFoo {}\"))\n                                .to(contain([expectedClass]))\n                    }\n\n                    context(\"given global protocol composition\") {\n                        it(\"replaces variable alias type with protocol composition types\") {\n                            let expectedProtocol1 = Protocol(name: \"Foo\")\n                            let expectedProtocol2 = Protocol(name: \"Bar\")\n                            let expectedProtocolComposition = ProtocolComposition(name: \"GlobalComposition\", inheritedTypes: [\"Foo\", \"Bar\"], composedTypeNames: [TypeName(name: \"Foo\"), TypeName(name: \"Bar\")])\n\n                            let type = parse(\"typealias GlobalComposition = Foo & Bar; protocol Foo {}; protocol Bar {}\").last as? ProtocolComposition\n\n                            expect(type).to(equal(expectedProtocolComposition))\n                            expect(type?.composedTypes?.first).to(equal(expectedProtocol1))\n                            expect(type?.composedTypes?.last).to(equal(expectedProtocol2))\n                        }\n\n                        it(\"should deconstruct compositions of protocols for implements\") {\n                            let expectedProtocol1 = Protocol(name: \"Foo\")\n                            let expectedProtocol2 = Protocol(name: \"Bar\")\n                            let expectedProtocolComposition = ProtocolComposition(name: \"GlobalComposition\", inheritedTypes: [\"Foo\", \"Bar\"], composedTypeNames: [TypeName(name: \"Foo\"), TypeName(name: \"Bar\")])\n\n                            let type = parse(\"typealias GlobalComposition = Foo & Bar; protocol Foo {}; protocol Bar {}; class Implements: GlobalComposition {}\").last as? Class\n\n                            expect(type?.implements).to(equal([\n                                expectedProtocol1.name: expectedProtocol1,\n                                expectedProtocol2.name: expectedProtocol2,\n                                expectedProtocolComposition.name: expectedProtocolComposition\n                            ]))\n                        }\n\n                        it(\"should deconstruct compositions of class and protocol for implements\") {\n                            let expectedProtocol = Protocol(name: \"Foo\")\n                            let type = parse(\"protocol Foo {}; class Bar {}; class Implements: Bar & Foo {}\").last as? Class\n\n                            expect(type?.implements).to(equal([\n                                expectedProtocol.name: expectedProtocol\n                            ]))\n                        }\n\n                        it(\"should deconstruct compositions of class and protocol for based\") {\n                            let expectedProtocol = Protocol(name: \"Foo\")\n                            let expectedClass = Class(name: \"Bar\")\n                            let expectedProtocolComposition = ProtocolComposition(name: \"Bar & Foo\", inheritedTypes: [\"Bar\", \"Foo\"], composedTypeNames: [TypeName(name: \"Bar\"), TypeName(name: \"Foo\")], composedTypes: [expectedClass, expectedProtocol])\n\n                            let type = parse(\"protocol Foo {}; class Bar {}; class Implements: Bar & Foo {}\").last as? Class\n\n                            expect(type?.based).to(equal([\n                                expectedClass.name: expectedClass.name,\n                                expectedProtocol.name: expectedProtocol.name,\n                                expectedProtocolComposition.name: expectedProtocolComposition.name\n                            ]))\n                        }\n\n                        it(\"should deconstruct compositions of class and protocol for inherits\") {\n                            let expectedClass = Class(name: \"Bar\")\n\n                            let type = parse(\"protocol Foo {}; class Bar {}; class Implements: Bar & Foo {}\").last as? Class\n\n                            expect(type?.inherits).to(equal([\n                                expectedClass.name: expectedClass\n                            ]))\n                        }\n\n                        it(\"should deconstruct compositions of protocols and classes for implements and inherits\") {\n                            let expectedProtocol = Protocol(name: \"Foo\")\n                            let expectedClass = Class(name: \"Bar\")\n\n                            let type = parse(\"typealias GlobalComposition = Foo & Bar; protocol Foo {}; class Bar {}; class Implements: GlobalComposition {}\").last as? Class\n\n                            expect(type?.implements).to(equal([\n                                expectedProtocol.name: expectedProtocol\n                            ]))\n\n                            expect(type?.inherits).to(equal([\n                                expectedClass.name: expectedClass\n                            ]))\n                        }\n                    }\n\n                    context(\"given local typealias\") {\n                        it(\"replaces variable alias type with actual type\") {\n                            let expectedVariable = Variable(name: \"foo\", typeName: TypeName(name: \"FooAlias\", actualTypeName: TypeName(name: \"Foo\")), type: Class(name: \"Foo\"), definedInTypeName: TypeName(name: \"Bar\"))\n\n                            let type = parse(\"class Bar { typealias FooAlias = Foo; var foo: FooAlias }; class Foo {}\").first\n                            let variable = type?.variables.first\n\n                            expect(variable).to(equal(expectedVariable))\n                            expect(variable?.actualTypeName).to(equal(expectedVariable.actualTypeName))\n                            expect(variable?.type).to(equal(expectedVariable.type))\n                        }\n\n                        it(\"replaces variable alias type with actual contained type\") {\n                            let expectedVariable = Variable(name: \"foo\", typeName: TypeName(name: \"FooAlias\", actualTypeName: TypeName(name: \"Bar.Foo\")), type: Class(name: \"Foo\", parent: Class(name: \"Bar\")), definedInTypeName: TypeName(name: \"Bar\"))\n\n                            let type = parse(\"class Bar { typealias FooAlias = Foo; var foo: FooAlias; class Foo {} }\").first\n                            let variable = type?.variables.first\n\n                            expect(variable).to(equal(expectedVariable))\n                            expect(variable?.actualTypeName).to(equal(expectedVariable.actualTypeName))\n                            expect(variable?.type).to(equal(expectedVariable.type))\n                        }\n\n                        it(\"replaces variable alias type with actual foreign contained type\") {\n                            let expectedVariable = Variable(name: \"foo\", typeName: TypeName(name: \"FooAlias\", actualTypeName: TypeName(name: \"FooBar.Foo\")), type: Class(name: \"Foo\", parent: Type(name: \"FooBar\")), definedInTypeName: TypeName(name: \"Bar\"))\n\n                            let type = parse(\"class Bar { typealias FooAlias = FooBar.Foo; var foo: FooAlias }; class FooBar { class Foo {} }\").first\n                            let variable = type?.variables.first\n\n                            expect(variable).to(equal(expectedVariable))\n                            expect(variable?.actualTypeName).to(equal(expectedVariable.actualTypeName))\n                            expect(variable?.type).to(equal(expectedVariable.type))\n                        }\n\n                        it(\"populates the local collection of typealiases\") {\n                            let expectedType = Class(name: \"Foo\")\n                            let expectedParent = Class(name: \"Bar\")\n                            let type = parse(\"class Bar { typealias FooAlias = Foo }; class Foo {}\").first\n                            let aliases = type?.typealiases\n\n                            expect(aliases).to(haveCount(1))\n                            expect(aliases?[\"FooAlias\"]).to(equal(Typealias(aliasName: \"FooAlias\", typeName: TypeName(name: \"Foo\"), parent: expectedParent)))\n                            expect(aliases?[\"FooAlias\"]?.type).to(equal(expectedType))\n                        }\n\n                        it(\"populates the global collection of typealiases\") {\n                            let expectedType = Class(name: \"Foo\")\n                            let expectedParent = Class(name: \"Bar\")\n                            let aliases = parseTypealiases(\"class Bar { typealias FooAlias = Foo }; class Foo {}\")\n\n                            expect(aliases).to(haveCount(1))\n                            expect(aliases.first).to(equal(Typealias(aliasName: \"FooAlias\", typeName: TypeName(name: \"Foo\"), parent: expectedParent)))\n                            expect(aliases.first?.type).to(equal(expectedType))\n                        }\n                    }\n\n                    context(\"given global typealias\") {\n                        it(\"extracts typealiases of other typealiases\") {\n                            expect(parseTypealiases(\"typealias Foo = Int; typealias Bar = Foo\"))\n                                .to(contain([\n                                    Typealias(aliasName: \"Foo\", typeName: TypeName(name: \"Int\")),\n                                    Typealias(aliasName: \"Bar\", typeName: TypeName(name: \"Foo\"))\n                                ]))\n                        }\n\n                        it(\"extracts typealiases of other typealiases of a type\") {\n                            expect(parseTypealiases(\"typealias Foo = Baz; typealias Bar = Foo; class Baz {}\"))\n                                .to(contain([\n                                    Typealias(aliasName: \"Foo\", typeName: TypeName(name: \"Baz\")),\n                                    Typealias(aliasName: \"Bar\", typeName: TypeName(name: \"Foo\"))\n                                ]))\n                        }\n\n                        it(\"resolves types transitively\") {\n                            let expectedType = Class(name: \"Baz\")\n\n                            let typealiases = parseTypealiases(\"typealias Foo = Bar; typealias Bar = Baz; class Baz {}\")\n\n                            expect(typealiases).to(haveCount(2))\n                            expect(typealiases.first?.type).to(equal(expectedType))\n                            expect(typealiases.last?.type).to(equal(expectedType))\n                        }\n                    }\n                }\n\n                context(\"given associated type\") {\n                    context(\"given value with its type known\") {\n\n                        it(\"extracts associated value's type\") {\n                            let associatedValue = AssociatedValue(typeName: TypeName(name: \"Bar\"), type: Class(name: \"Bar\", inheritedTypes: [\"Baz\"]))\n                            let item = Enum(name: \"Foo\", cases: [EnumCase(name: \"optionA\", associatedValues: [associatedValue])])\n\n                            let parsed = parse(\"protocol Baz {}; class Bar: Baz {}; enum Foo { case optionA(Bar) }\")\n                            let parsedItem = parsed.compactMap { $0 as? Enum }.first\n\n                            expect(parsedItem).to(equal(item))\n                            expect(associatedValue.type).to(equal(parsedItem?.cases.first?.associatedValues.first?.type))\n                        }\n\n                        it(\"extracts associated value's optional type\") {\n                            let associatedValue = AssociatedValue(typeName: TypeName(name: \"Bar?\"), type: Class(name: \"Bar\", inheritedTypes: [\"Baz\"]))\n                            let item = Enum(name: \"Foo\", cases: [EnumCase(name: \"optionA\", associatedValues: [associatedValue])])\n\n                            let parsed = parse(\"protocol Baz {}; class Bar: Baz {}; enum Foo { case optionA(Bar?) }\")\n                            let parsedItem = parsed.compactMap { $0 as? Enum }.first\n\n                            expect(parsedItem).to(equal(item))\n                            expect(associatedValue.type).to(equal(parsedItem?.cases.first?.associatedValues.first?.type))\n                        }\n\n                        it(\"extracts associated value's typealias\") {\n                            let associatedValue = AssociatedValue(typeName: TypeName(name: \"Bar2\"), type: Class(name: \"Bar\", inheritedTypes: [\"Baz\"]))\n                            let item = Enum(name: \"Foo\", cases: [EnumCase(name: \"optionA\", associatedValues: [associatedValue])])\n\n                            let parsed = parse(\"typealias Bar2 = Bar; protocol Baz {}; class Bar: Baz {}; enum Foo { case optionA(Bar2) }\")\n                            let parsedItem = parsed.compactMap { $0 as? Enum }.first\n\n                            expect(parsedItem).to(equal(item))\n                            expect(associatedValue.type).to(equal(parsedItem?.cases.first?.associatedValues.first?.type))\n                        }\n\n                        it(\"extracts associated value's same (indirect) enum type\") {\n                            let associatedValue = AssociatedValue(typeName: TypeName(name: \"Foo\"))\n                            let item = Enum(name: \"Foo\", inheritedTypes: [\"Baz\"], cases: [EnumCase(name: \"optionA\", associatedValues: [associatedValue])], modifiers: [\n                                Modifier(name: \"indirect\")\n                            ])\n                            associatedValue.type = item\n\n                            let parsed = parse(\"protocol Baz {}; indirect enum Foo: Baz { case optionA(Foo) }\")\n                            let parsedItem = parsed.compactMap { $0 as? Enum }.first\n\n                            expect(parsedItem).to(equal(item))\n                            expect(associatedValue.type).to(equal(parsedItem?.cases.first?.associatedValues.first?.type))\n                        }\n\n                    }\n\n                    it(\"extracts associated type properly when constrained to a typealias\") {\n                        let code = \"\"\"\n                                       protocol Foo {\n                                           typealias AEncodable = Encodable\n                                           associatedtype Bar: AEncodable\n                                       }\n                                   \"\"\"\n                        let givenTypealias = Typealias(aliasName: \"AEncodable\", typeName: TypeName(name: \"Encodable\"))\n                        let expectedProtocol = Protocol(name: \"Foo\", typealiases: [givenTypealias])\n                        givenTypealias.parent = expectedProtocol\n                        expectedProtocol.associatedTypes[\"Bar\"] = AssociatedType(\n                          name: \"Bar\",\n                          typeName: TypeName(\n                            name: givenTypealias.aliasName,\n                            actualTypeName: givenTypealias.typeName\n                          )\n                        )\n                        let actualProtocol = parse(code).last\n                        expect(actualProtocol).to(equal(expectedProtocol))\n                        let actualTypeName = (actualProtocol as? SourceryProtocol)?.associatedTypes.first?.value.typeName?.actualTypeName\n                        expect(actualTypeName).to(equal(givenTypealias.actualTypeName))\n                    }\n                }\n\n                context(\"given nested type\") {\n                    it(\"extracts method's defined in properly\") {\n                        let expectedMethod = Method(name: \"some()\", selectorName: \"some\", definedInTypeName: TypeName(name: \"Foo.Bar\"))\n\n                        let types = parse(\"class Foo { class Bar { func some() } }\")\n                        let method = types.last?.methods.first\n\n                        expect(method).to(equal(expectedMethod))\n                        expect(method?.definedInType).to(equal(types.last))\n                    }\n\n                    it(\"extracts property of nested generic type properly\") {\n                        let expectedActualTypeName = TypeName(name: \"Blah.Foo<Blah.FooBar>?\")\n                        let expectedVariable = Variable(name: \"foo\", typeName: TypeName(name: \"Foo<FooBar>?\", actualTypeName: expectedActualTypeName), accessLevel: (read: .internal, write: .none), definedInTypeName: TypeName(name: \"Blah.Bar\"))\n                        let expectedBlah = Struct(name: \"Blah\", containedTypes: [Struct(name: \"FooBar\"), Struct(name: \"Foo<T>\"), Struct(name: \"Bar\", variables: [expectedVariable])])\n                        expectedActualTypeName.generic = GenericType(name: \"Blah.Foo\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"Blah.FooBar\"), type: expectedBlah.containedType[\"FooBar\"])])\n                        expectedVariable.typeName.generic = expectedActualTypeName.generic\n\n                        let types = parse(\"\"\"\n                                          struct Blah {\n                                              struct FooBar {}\n                                              struct Foo<T> {}\n                                              struct Bar {\n                                                  let foo: Foo<FooBar>?\n                                              }\n                                          }\n                                          \"\"\")\n                        let bar = types.first(where: { $0.name == \"Blah.Bar\" })\n\n                        expect(bar?.variables.first).to(equal(expectedVariable))\n                        expect(bar?.variables.first?.actualTypeName).to(equal(expectedVariable.actualTypeName))\n                    }\n\n                    it(\"extracts property of nested type properly\") {\n                        let expectedVariable = Variable(name: \"foo\", typeName: TypeName(name: \"Foo?\", actualTypeName: TypeName(name: \"Blah.Foo?\")), accessLevel: (read: .internal, write: .none), definedInTypeName: TypeName(name: \"Blah.Bar\"))\n                        let expectedBlah = Struct(name: \"Blah\", containedTypes: [Struct(name: \"Foo\"), Struct(name: \"Bar\", variables: [expectedVariable])])\n\n                        let types = parse(\"struct Blah { struct Foo {}; struct Bar { let foo: Foo? }}\")\n                        let blah = types.first(where: { $0.name == \"Blah\" })\n                        let bar = types.first(where: { $0.name == \"Blah.Bar\" })\n\n                        expect(blah).to(equal(expectedBlah))\n                        expect(bar?.variables.first).to(equal(expectedVariable))\n                        expect(bar?.variables.first?.actualTypeName).to(equal(expectedVariable.actualTypeName))\n                    }\n\n                    it(\"extracts property of nested type array properly\") {\n                        let expectedActualTypeName = TypeName(name: \"[Blah.Foo]?\")\n                        let expectedVariable = Variable(name: \"foo\", typeName: TypeName(name: \"[Foo]?\", actualTypeName: expectedActualTypeName), accessLevel: (read: .internal, write: .none), definedInTypeName: TypeName(name: \"Blah.Bar\"))\n                        let expectedBlah = Struct(name: \"Blah\", containedTypes: [Struct(name: \"Foo\"), Struct(name: \"Bar\", variables: [expectedVariable])])\n                        expectedActualTypeName.array = ArrayType(name: \"[Blah.Foo]\", elementTypeName: TypeName(name: \"Blah.Foo\"), elementType: Struct(name: \"Foo\", parent: expectedBlah))\n                        expectedVariable.typeName.array = expectedActualTypeName.array\n                        expectedActualTypeName.generic = GenericType(name: \"Array\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"Blah.Foo\"), type: Struct(name: \"Foo\", parent: expectedBlah))])\n                        expectedVariable.typeName.generic = expectedActualTypeName.generic\n\n                        let types = parse(\"struct Blah { struct Foo {}; struct Bar { let foo: [Foo]? }}\")\n                        let blah = types.first(where: { $0.name == \"Blah\" })\n                        let bar = types.first(where: { $0.name == \"Blah.Bar\" })\n\n                        expect(blah).to(equal(expectedBlah))\n                        expect(bar?.variables.first).to(equal(expectedVariable))\n                        expect(bar?.variables.first?.actualTypeName).to(equal(expectedVariable.actualTypeName))\n                    }\n\n                    it(\"extracts property of nested type dictionary properly\") {\n                        let expectedActualTypeName = TypeName(name: \"[Blah.Foo: Blah.Foo]?\")\n                        let expectedVariable = Variable(name: \"foo\", typeName: TypeName(name: \"[Foo: Foo]?\", actualTypeName: expectedActualTypeName), accessLevel: (read: .internal, write: .none), definedInTypeName: TypeName(name: \"Blah.Bar\"))\n                        let expectedBlah = Struct(name: \"Blah\", containedTypes: [Struct(name: \"Foo\"), Struct(name: \"Bar\", variables: [expectedVariable])])\n                        expectedActualTypeName.dictionary = DictionaryType(name: \"[Blah.Foo: Blah.Foo]\", valueTypeName: TypeName(name: \"Blah.Foo\"), valueType: Struct(name: \"Foo\", parent: expectedBlah), keyTypeName: TypeName(name: \"Blah.Foo\"), keyType: Struct(name: \"Foo\", parent: expectedBlah))\n                        expectedVariable.typeName.dictionary = expectedActualTypeName.dictionary\n                        expectedActualTypeName.generic = GenericType(name: \"Dictionary\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"Blah.Foo\"), type: Struct(name: \"Foo\", parent: expectedBlah)), GenericTypeParameter(typeName: TypeName(name: \"Blah.Foo\"), type: Struct(name: \"Foo\", parent: expectedBlah))])\n                        expectedVariable.typeName.generic = expectedActualTypeName.generic\n\n                        let types = parse(\"struct Blah { struct Foo {}; struct Bar { let foo: [Foo: Foo]? }}\")\n                        let blah = types.first(where: { $0.name == \"Blah\" })\n                        let bar = types.first(where: { $0.name == \"Blah.Bar\" })\n\n                        expect(blah).to(equal(expectedBlah))\n                        expect(bar?.variables.first).to(equal(expectedVariable))\n                        expect(bar?.variables.first?.actualTypeName).to(equal(expectedVariable.actualTypeName))\n                    }\n\n                    it(\"extracts property of nested type tuple properly\") {\n                        let expectedActualTypeName = TypeName(name: \"(Blah.Foo, Blah.Foo, Blah.Foo)?\", tuple: TupleType(name: \"(Blah.Foo, Blah.Foo, Blah.Foo)\", elements: [\n                            TupleElement(name: \"a\", typeName: TypeName(name: \"Blah.Foo\"), type: Struct(name: \"Foo\")),\n                            TupleElement(name: \"1\", typeName: TypeName(name: \"Blah.Foo\"), type: Struct(name: \"Foo\")),\n                            TupleElement(name: \"2\", typeName: TypeName(name: \"Blah.Foo\"), type: Struct(name: \"Foo\"))\n                            ]))\n                        let expectedVariable = Variable(name: \"foo\", typeName: TypeName(name: \"(a: Foo, _: Foo, Foo)?\", actualTypeName: expectedActualTypeName, tuple: expectedActualTypeName.tuple), accessLevel: (read: .internal, write: .none), definedInTypeName: TypeName(name: \"Blah.Bar\"))\n                        let expectedBlah = Struct(name: \"Blah\", containedTypes: [Struct(name: \"Foo\"), Struct(name: \"Bar\", variables: [expectedVariable])])\n\n                        let types = parse(\"struct Blah { struct Foo {}; struct Bar { let foo: (a: Foo, _: Foo, Foo)? }}\")\n                        let blah = types.first(where: { $0.name == \"Blah\" })\n                        let bar = types.first(where: { $0.name == \"Blah.Bar\" })\n\n                        expect(blah).to(equal(expectedBlah))\n                        expect(bar?.variables.first).to(equal(expectedVariable))\n                        expect(bar?.variables.first?.actualTypeName).to(equal(expectedVariable.actualTypeName))\n                    }\n\n                    it(\"resolves protocol generic requirement types and inherits associated types\") {\n                        let expectedRightType = Struct(name: \"RightType\")\n                        let genericProtocol = Protocol(name: \"GenericProtocol\", associatedTypes: [\"LeftType\": AssociatedType(name: \"LeftType\", typeName: TypeName(name: \"Any\"))])\n                        let expectedProtocol = Protocol(name: \"SomeGenericProtocol\", inheritedTypes: [\"GenericProtocol\"])\n                        expectedProtocol.associatedTypes = genericProtocol.associatedTypes\n                        expectedProtocol.genericRequirements = [\n                            GenericRequirement(leftType: .init(name: \"LeftType\"),\n                                               rightType: GenericTypeParameter(typeName: TypeName(name: \"RightType\"), type: expectedRightType),\n                                               relationship: .equals)\n                        ]\n\n                        let results = parse(\n                                \"\"\"\n                                struct RightType {}\n                                protocol GenericProtocol {\n                                    associatedtype LeftType\n                                }\n                                protocol SomeGenericProtocol: GenericProtocol where LeftType == RightType {}\n                                \"\"\"\n                        )\n                        let parsedProtocol = results.first(where: { $0.name == \"SomeGenericProtocol\" }) as? SourceryProtocol\n\n                        expect(parsedProtocol).to(equal(expectedProtocol))\n                        expect(parsedProtocol?.associatedTypes).to(equal(genericProtocol.associatedTypes))\n                        expect(parsedProtocol?.implements[\"GenericProtocol\"]).to(equal(genericProtocol))\n                        expect(parsedProtocol?.genericRequirements[0].rightType.type).to(equal(expectedRightType))\n                    }\n                }\n\n                context(\"given types within modules\") {\n                    it(\"doesn't automatically add module name to unknown types but keeps the info in the AST via module property\") {\n                        let extensionType = Type(name: \"AnyPublisher\", isExtension: true).asUnknownException()\n                        extensionType.module = \"MyModule\"\n\n                        let types = parseModules(\n                            (name: \"MyModule\", contents:\n                                \"\"\"\n                                extension AnyPublisher {}\n                                struct Foo {\n                                    var publisher: AnyPublisher<TimeInterval, Never>\n                                }\n                                \"\"\")\n                        ).types\n                        let publisher = types.first\n                        let fooVariable = types.last?.variables.last\n\n                        expect(publisher).to(equal(extensionType))\n                        expect(publisher?.globalName).to(equal(\"AnyPublisher\"))\n\n                        expect(fooVariable?.typeName.generic?.name).to(equal(\"AnyPublisher\"))\n                    }\n\n                    it(\"combines unknown extensions correctly\") {\n                        let extensionType = Type(name: \"AnyPublisher\", isExtension: true, variables: [\n                        .init(name: \"property1\", typeName: .Int, accessLevel: (read: .internal, write: .none), isComputed: true, definedInTypeName: TypeName(name: \"AnyPublisher\")),\n                        .init(name: \"property2\", typeName: .String, accessLevel: (read: .internal, write: .none), isComputed: true, definedInTypeName: TypeName(name: \"AnyPublisher\"))\n                        ])\n                        extensionType.isUnknownExtension = true\n                        extensionType.module = \"MyModule\"\n\n                        let types = parseModules(\n                          (name: \"MyModule\", contents:\n                          \"\"\"\n                          extension AnyPublisher {}\n                          extension AnyPublisher {\n                            var property1: Int { 0 }\n                            var property2: String { \"\" }\n                          }\n                          \"\"\")\n                        ).types\n\n                        expect(types).to(equal([extensionType]))\n                        expect(types.first?.globalName).to(equal(\"AnyPublisher\"))\n                    }\n\n                    it(\"combines unknown extensions from different files correctly\") {\n                        let extensionType = Type(name: \"AnyPublisher\", isExtension: true, variables: [\n                        .init(name: \"property1\", typeName: .Int, accessLevel: (read: .internal, write: .none), isComputed: true, definedInTypeName: TypeName(name: \"AnyPublisher\")),\n                        .init(name: \"property2\", typeName: .String, accessLevel: (read: .internal, write: .none), isComputed: true, definedInTypeName: TypeName(name: \"AnyPublisher\"))\n                        ])\n                        extensionType.isUnknownExtension = true\n                        extensionType.module = \"MyModule\"\n\n                        let types = parseModules(\n                          (name: \"MyModule\", contents:\n                          \"\"\"\n                          extension AnyPublisher {\n                            var property1: Int { 0 }\n                          }\n                          \"\"\"),\n                          (name: \"MyModule\", contents:\n                          \"\"\"\n                          extension AnyPublisher {\n                            var property2: String { \"\" }\n                          }\n                          \"\"\")\n                        ).types\n\n                        expect(types).to(equal([extensionType]))\n                        expect(types.first?.globalName).to(equal(\"AnyPublisher\"))\n                    }\n\n                    it(\"combines known types with extensions correctly\") {\n                        let fooType = Struct(name: \"Foo\", variables: [\n                            .init(name: \"property1\", typeName: .Int, accessLevel: (read: .internal, write: .none), isComputed: true, definedInTypeName: TypeName(name: \"Foo\")),\n                            .init(name: \"property2\", typeName: .String, accessLevel: (read: .internal, write: .none), isComputed: true, definedInTypeName: TypeName(name: \"Foo\"))\n                        ])\n                        fooType.module = \"MyModule\"\n\n                        let types = parseModules(\n                          (name: \"MyModule\", contents:\n                          \"\"\"\n                          struct Foo {}\n                          extension Foo {}\n                          extension Foo {\n                            var property1: Int { 0 }\n                            var property2: String { \"\" }\n                          }\n                          \"\"\")\n                        ).types\n\n                        expect(types).to(equal([fooType]))\n                        expect(types.first?.globalName).to(equal(\"MyModule.Foo\"))\n                    }\n\n                    context(\"when using global names\") {\n\n                        it(\"extends type with extension\") {\n                            let expectedBar = Struct(name: \"Bar\", variables: [\n                                Variable(name: \"foo\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .none), isComputed: true, definedInTypeName: TypeName(name: \"MyModule.Bar\"))\n                            ])\n                            expectedBar.module = \"MyModule\"\n\n                            let types = parseModules(\n                                (name: \"MyModule\", contents: \"struct Bar {}\"),\n                                (name: nil, contents: \"extension MyModule.Bar { var foo: Int { return 0 } }\")\n                            ).types\n\n                            expect(types).to(equal([expectedBar]))\n                        }\n\n                        it(\"resolves variable type\") {\n                            let expectedBar = Struct(name: \"Bar\")\n                            expectedBar.module = \"MyModule\"\n                            let expectedFoo = Struct(name: \"Foo\", variables: [Variable(name: \"bar\", typeName: TypeName(name: \"MyModule.Bar\"), type: expectedBar, definedInTypeName: TypeName(name: \"Foo\"))])\n\n                            let types = parseModules(\n                                (name: \"MyModule\", contents: \"struct Bar {}\"),\n                                (name: nil, contents: \"struct Foo { var bar: MyModule.Bar }\")\n                            ).types\n\n                            expect(types).to(equal([expectedFoo, expectedBar]))\n                            expect(types.first?.variables.first?.type).to(equal(expectedBar))\n                        }\n\n                        it(\"resolves variable defined in type\") {\n                            let expectedBar = Struct(name: \"Bar\")\n                            expectedBar.module = \"MyModule\"\n                            let expectedFoo = Struct(name: \"Foo\", variables: [Variable(name: \"bar\", typeName: TypeName(name: \"MyModule.Bar\"), type: expectedBar, definedInTypeName: TypeName(name: \"Foo\"))])\n\n                            let types = parseModules(\n                                (name: \"MyModule\", contents: \"struct Bar {}\"),\n                                (name: nil, contents: \"struct Foo { var bar: MyModule.Bar }\")\n                            ).types\n\n                            expect(types).to(equal([expectedFoo, expectedBar]))\n                            expect(types.first?.variables.first?.type).to(equal(expectedBar))\n                            expect(types.first?.variables.first?.definedInType).to(equal(expectedFoo))\n                        }\n                    }\n\n                    context(\"when using local names\") {\n                        it(\"resolves variable type properly\") {\n                            let expectedBarA = Struct(name: \"Bar\")\n                            expectedBarA.module = \"ModuleA\"\n\n                            let expectedFoo = Struct(name: \"Foo\", variables: [Variable(name: \"bar\", typeName: TypeName(name: \"Bar\"), type: expectedBarA, definedInTypeName: TypeName(name: \"Foo\"))])\n                            expectedFoo.module = \"ModuleB\"\n                            expectedFoo.imports = [Import(path: \"ModuleA\")]\n\n                            let expectedBarC = Struct(name: \"Bar\")\n                            expectedBarC.module = \"ModuleC\"\n\n                            let types = parseModules(\n                                (name: \"ModuleA\", contents: \"struct Bar {}\"),\n                                (name: \"ModuleB\", contents:\n                                    \"\"\"\n                                    import ModuleA\n                                    struct Foo { var bar: Bar }\n                                    \"\"\"\n                                ),\n                                (name: \"ModuleC\", contents: \"struct Bar {}\")\n                            ).types\n\n                            expect(types).to(equal([expectedBarA, expectedFoo, expectedBarC]))\n                            expect(types.first(where: { $0.name == \"Foo\" })?.variables.first?.type).to(equal(expectedBarA))\n                        }\n\n                        it(\"resolves variable type properly even when using specialized imports\") {\n                            let expectedBarA = Struct(name: \"Bar\")\n                            expectedBarA.module = \"ModuleA.Submodule\"\n\n                            let expectedFoo = Struct(name: \"Foo\", variables: [Variable(name: \"bar\", typeName: TypeName(name: \"Bar\"), type: expectedBarA, definedInTypeName: TypeName(name: \"Foo\"))])\n                            expectedFoo.module = \"ModuleB\"\n                            expectedFoo.imports = [Import(path: \"ModuleA.Submodule.Bar\", kind: \"struct\")]\n\n                            let expectedBarC = Struct(name: \"Bar\")\n                            expectedBarC.module = \"ModuleC\"\n\n                            let types = parseModules(\n                                (name: \"ModuleA.Submodule\", contents: \"struct Bar {}\"),\n                                (name: \"ModuleB\", contents:\n                                    \"\"\"\n                                    import struct ModuleA.Submodule.Bar\n                                    struct Foo { var bar: Bar }\n                                    \"\"\"\n                                ),\n                                (name: \"ModuleC\", contents: \"struct Bar {}\")\n                            ).types\n\n                            expect(types).to(equal([expectedBarA, expectedFoo, expectedBarC]))\n                            expect(types.first(where: { $0.name == \"Foo\" })?.variables.first?.type).to(equal(expectedBarA))\n                        }\n\n                        it(\"throws error when variable type is ambigious\") {\n                            let expectedBarA = Struct(name: \"Bar\")\n                            expectedBarA.module = \"ModuleA\"\n\n                            let expectedFoo = Struct(name: \"Foo\", variables: [Variable(name: \"bar\", typeName: TypeName(name: \"Bar\"), type: expectedBarA, definedInTypeName: TypeName(name: \"Foo\"))])\n                            expectedFoo.module = \"ModuleB\"\n\n                            let expectedBarC = Struct(name: \"Bar\")\n                            expectedBarC.module = \"ModuleC\"\n\n                            let types = parseModules(\n                                (name: \"ModuleA\", contents: \"struct Bar {}\"),\n                                (name: \"ModuleB\", contents:\n                                    \"\"\"\n                                    struct Foo { var bar: Bar }\n                                    \"\"\"\n                                ),\n                                (name: \"ModuleC\", contents: \"struct Bar {}\")\n                            ).types\n\n                            let barVariable = types.last?.variables.first\n\n                            expect(types).to(equal([expectedBarA, expectedFoo, expectedBarC]))\n                            expect(barVariable?.typeName).to(beNil())\n                            expect(barVariable?.type).to(beNil())\n                        }\n\n                        it(\"resolves variable type correctly\") {\n                            let expectedBar = Struct(name: \"Bar\", variables: [\n                                                        Variable(name: \"bat\", typeName: TypeName(name: \"Int\"), type: nil, accessLevel: (.internal, .none), definedInTypeName: TypeName(name: \"Foo.Bar\"))\n                            ])\n                            expectedBar.module = \"Foo\"\n\n                            let expectedFoo = Struct(name: \"Foo\", variables: [Variable(name: \"bar\", typeName: TypeName(name: \"Foo.Bar\"), type: expectedBar, accessLevel: (.internal, .none), definedInTypeName: TypeName(name: \"Foo\"))], containedTypes: [expectedBar])\n                            expectedFoo.module = \"Foo\"\n\n                            let types = parseModules(\n                                (name: \"Foo\", contents:\n                                    \"\"\"\n                                    struct Foo {\n                                        struct Bar {\n                                            let bat: Int\n                                        }\n                                        let bar: Bar\n                                    }\n                                    \"\"\"\n                                )).types\n\n                            expect(types).to(equal([expectedFoo, expectedBar]))\n\n                            let parsedFoo = types.first(where: { $0.globalName == \"Foo.Foo\" })\n                            expect(parsedFoo).to(equal(expectedFoo))\n                            expect(parsedFoo?.variables.first?.type).to(equal(expectedBar))\n                        }\n\n                        it(\"resolves variable type correctly when generics are used\") {\n                            let expectedBar = Struct(name: \"Bar\", variables: [\n                                Variable(name: \"batDouble\", typeName: TypeName(name: \"Double\"), type: nil, accessLevel: (.internal, .none), definedInTypeName: TypeName(name: \"Foo.Bar\")),\n                                Variable(name: \"batInt\", typeName: TypeName(name: \"Int\"), type: nil, accessLevel: (.internal, .none), definedInTypeName: TypeName(name: \"Foo.Bar\"))\n                            ])\n                            expectedBar.module = \"ModuleA\"\n\n                            let expectedBaz = Struct(name: \"Baz\", isGeneric: true)\n                            expectedBaz.module = \"ModuleA\"\n\n                            let expectedFoo = Struct(name: \"Foo\", variables: [\n                                Variable(name: \"bar\", typeName: TypeName(name: \"Foo.Bar\"), type: expectedBar, accessLevel: (.internal, .none), definedInTypeName: TypeName(name: \"Foo\")),\n                                Variable(name: \"bazbars\", typeName: TypeName(name: \"Baz<Bar>\", generic: .init(name: \"ModuleA.Foo.Baz\", typeParameters: [.init(typeName: .init(\"ModuleA.Foo.Bar\"))])), type: expectedBaz, accessLevel: (.internal, .none), definedInTypeName: TypeName(name: \"Foo\")),\n                                Variable(name: \"bazDoubles\", typeName: TypeName(name: \"Baz<Double>\", generic: .init(name: \"ModuleA.Foo.Baz\", typeParameters: [.init(typeName: .init(\"Double\"))])), type: expectedBaz, accessLevel: (.internal, .none), definedInTypeName: TypeName(name: \"Foo\")),\n                                Variable(name: \"bazInts\", typeName: TypeName(name: \"Baz<Int>\", generic: .init(name: \"ModuleA.Foo.Baz\", typeParameters: [.init(typeName: .init(\"Int\"))])), type: expectedBaz, accessLevel: (.internal, .none), definedInTypeName: TypeName(name: \"Foo\"))\n                            ], containedTypes: [expectedBar, expectedBaz])\n                            expectedFoo.module = \"ModuleA\"\n\n                            let expectedDouble = Type(name: \"Double\", accessLevel: .internal, isExtension: true).asUnknownException()\n                            expectedDouble.module = \"ModuleA\"\n\n                            let types = parseModules(\n                                (name: \"ModuleA\", contents:\n                                    \"\"\"\n                                    extension Double {}\n                                    struct Foo {\n                                            struct Bar {\n                                                let batDouble: Double\n                                                let batInt: Int\n                                            }\n\n                                            struct Baz<T> {\n                                            }\n\n                                            let bar: Bar\n                                            let bazbars: Baz<Bar>\n                                            let bazDoubles: Baz<Double>\n                                            let bazInts: Baz<Int>\n                                    }\n                                    \"\"\"\n                                )).types\n\n                            expect(types).to(equal([expectedDouble, expectedFoo, expectedBar, expectedBaz]))\n\n                            func check(variable: String, typeName: String?, type: String?, onType globalName: String) {\n                                let entity = types.first(where: { $0.globalName == globalName })\n                                expect(entity).toNot(beNil())\n\n                                let variable = entity?.allVariables.first(where: { $0.name == variable })\n                                expect(variable).toNot(beNil())\n                                if let typeName = typeName {\n                                    expect(variable?.typeName.description).to(equal(typeName))\n                                } else {\n                                    expect(variable?.typeName.description).to(beNil())\n                                }\n\n                                if let type = type {\n                                    expect(variable?.type?.name).to(equal(type))\n                                } else {\n                                    expect(variable?.type?.name).to(beNil())\n                                }\n                            }\n\n                            check(variable: \"bar\", typeName: \"Foo.Bar\", type: \"Foo.Bar\", onType: \"ModuleA.Foo\")\n                            check(variable: \"bazbars\", typeName: \"Baz<Bar>\", type: \"Foo.Baz\", onType: \"ModuleA.Foo\")\n                            check(variable: \"bazDoubles\", typeName: \"Baz<Double>\", type: \"Foo.Baz\", onType: \"ModuleA.Foo\")\n                            check(variable: \"bazInts\", typeName: \"Baz<Int>\", type: \"Foo.Baz\", onType: \"ModuleA.Foo\")\n                            check(variable: \"batDouble\", typeName: \"Double\", type: \"Double\", onType: \"ModuleA.Foo.Bar\")\n                            check(variable: \"batInt\", typeName: \"Int\", type: nil, onType: \"ModuleA.Foo.Bar\")\n                        }\n                        \n                        it(\"resolves variable type correctly when typealias is used\") {\n                            let expectedBar = Class(name: \"Bar\", variables: [])\n                            \n                            let expectedContainsTopLevelTypealias = Struct(name: \"ContainsTopLevelTypealias\")\n\n                            let expectedBaz = Struct(name: \"Baz\", variables: [\n                                Variable(name: \"bar\", typeName: TypeName(name: \"Foo.Bar\"), type: expectedBar, accessLevel: (.internal, .none), definedInTypeName: TypeName(name: \"Foo.Baz\")),\n                                Variable(name: \"topLevelTypealias\", typeName: TypeName(name: \"TopLevelTypealias\"), type: expectedBar, accessLevel: (.internal, .none), definedInTypeName: TypeName(name: \"Foo.Baz\")),\n                                Variable(name: \"topLevelType\", typeName: TypeName(name: \"ContainsTopLevelTypealias\"), type: expectedContainsTopLevelTypealias, accessLevel: (.internal, .none), definedInTypeName: TypeName(name: \"Foo.Baz\")),\n                                Variable(name: \"usingTypealias\", typeName: TypeName(name: \"MyEnum.MyTypealias.Bar\"), type: expectedBar, accessLevel: (.internal, .none), definedInTypeName: TypeName(name: \"Foo.Baz\"))\n                            ])\n                            \n                            let expectedFoo = Struct(name: \"Foo\", containedTypes: [expectedBar, expectedBaz])\n                            \n                            let types = parseModules(\n                                (name: nil, contents:\n                                    \"\"\"\n                                    enum MyEnum {\n                                        typealias MyTypealias = Foo\n                                    }\n                                    \n                                    typealias TopLevelTypealias = Foo.Bar\n                                    struct ContainsTopLevelTypealias {}\n\n                                    struct Foo {\n                                        class Bar {}\n\n                                        struct Baz {\n                                            let bar: Foo.Bar\n                                            let topLevelTypealias: TopLevelTypealias\n                                            let topLevelType: ContainsTopLevelTypealias\n                                            let usingTypealias: MyEnum.MyTypealias.Bar\n                                        }\n                                    }\n                                    \"\"\"\n                                )).types\n\n                            let parsedFoo = types.first(where: { $0.globalName == \"Foo\" })\n                            expect(parsedFoo).to(equal(expectedFoo))\n                            let parsedBaz = parsedFoo?.containedTypes.last\n                            expect(parsedBaz).toNot(beNil())\n                            expect(parsedBaz!.variables.first?.type).to(equal(expectedBar))\n                            expect(parsedBaz!.variables.last?.type).to(equal(expectedBar))\n                            for variable in parsedBaz!.variables {\n                                expect(variable.type).toNot(beNil(), description: \"\\(variable.typeName.name)\")\n                            }\n                        }\n\n                        it(\"resolves geeneric method parameter type correctly when typealias is used\") {\n                            let expectedBar = Class(name: \"Foo\", variables: [], methods: [\n                                Method(name: \"foo<Value>(param: Bar<Value>)\", selectorName: \"foo(param:)\", parameters: [\n                                    MethodParameter(name: \"param\", index: 0, typeName: TypeName(name: \"Bar<Value>\", generic: GenericType(name: \"Bar\", typeParameters: [\n                                        GenericTypeParameter(typeName: TypeName(name: \"Value\"), type: nil)\n                                    ])), type: nil, defaultValue: nil, annotations: [:], isInout: false, isVariadic: false)\n                                ], definedInTypeName: TypeName(name: \"Foo\"), genericParameters: [\n                                    GenericParameter(name: \"Value\", inheritedTypeName: nil)\n                                ]),\n                                Method(name: \"foo<Value: Int>(param: Bar<Value>)\", selectorName: \"foo(param:)\", parameters: [\n                                    MethodParameter(name: \"param\", index: 0, typeName: TypeName(name: \"Bar<Value>\", generic: GenericType(name: \"Bar\", typeParameters: [\n                                        GenericTypeParameter(typeName: TypeName(name: \"Value\"), type: nil)\n                                    ])), type: nil, defaultValue: nil, annotations: [:], isInout: false, isVariadic: false)\n                                ], definedInTypeName: TypeName(name: \"Foo\"), genericParameters: [\n                                    GenericParameter(name: \"Value\", inheritedTypeName: TypeName(name: \"Int\"))\n                                ]),\n                                Method(name: \"fooBar<Value>(param: Bar<Value>)\", selectorName: \"fooBar(param:)\", parameters: [\n                                    MethodParameter(name: \"param\", index: 0, typeName: TypeName(name: \"Bar<Value>\", generic: GenericType(name: \"Bar\", typeParameters: [\n                                        GenericTypeParameter(typeName: TypeName(name: \"Value\"), type: nil)\n                                    ])), type: nil, defaultValue: nil, annotations: [:], isInout: false, isVariadic: false)\n                                ], returnTypeName: TypeName(name: \"Void where Value == Int\"), definedInTypeName: TypeName(name: \"Foo\"), genericRequirements: [\n                                    GenericRequirement(leftType: AssociatedType(name: \"Value\"), rightType: GenericTypeParameter(typeName: TypeName(name: \"Int\")), relationship: .equals)\n                                ], genericParameters: [\n                                    GenericParameter(name: \"Value\", inheritedTypeName: TypeName(name: \"Int\"))\n                                ])\n                            ])\n\n                            let types = parseModules(\n                                (name: nil, contents:\n                                    \"\"\"\n                                    typealias Value = String?\n\n                                    class Foo {\n                                        func foo<Value>(param: Bar<Value>)\n                                        func foo<Value: Int>(param: Bar<Value>)\n                                        func fooBar<Value>(param: Bar<Value>) where Value == Int\n                                    }\n                                    \"\"\"\n                                )).types\n\n                            let parsedFoo = types.first(where: { $0.globalName == \"Foo\" })\n                            expect(parsedFoo).to(equal(expectedBar))\n                        }\n\n                        it(\"ignores empty generic arguments created by trailing commas\") {\n                            let types = parse(\"\"\"\n                                struct Example<A: RandomAccessCollection, B: RandomAccessCollection>\n                                  where A.Element == String,\n                                  B.Element == String\n                                {\n                                  let asyncTaskData: OrderedDictionary<\n                                    String,\n                                    (status: Result<Int, Error>, messages: [String]),\n                                  >\n                                }\n                                \"\"\")\n\n                            let example = types.first(where: { $0.globalName == \"Example\" })\n                            expect(example).toNot(beNil())\n\n                            let variable = example?.variables.first(where: { $0.name == \"asyncTaskData\" })\n                            let parameters = variable?.typeName.generic?.typeParameters\n\n                            expect(parameters).to(haveCount(2))\n                            expect(parameters?.first?.typeName.name).to(equal(\"String\"))\n                            expect(parameters?.last?.typeName.name).to(equal(\"(status: Result<Int, Error>, messages: [String])\"))\n                        }\n                    }\n                }\n\n                context(\"given free function\") {\n                    it(\"resolves generic return types properly\") {\n                        let functions = parseFunctions(\"func foo() -> Bar<String> { }\")\n                        expect(functions[0]).to(equal(SourceryMethod(\n                            name: \"foo()\",\n                            selectorName: \"foo\",\n                            parameters: [],\n                            returnTypeName: TypeName(\n                                name: \"Bar<String>\",\n                                generic: GenericType(\n                                    name: \"Bar\",\n                                    typeParameters: [\n                                        GenericTypeParameter(\n                                            typeName: TypeName(name: \"String\"),\n                                            type: nil\n                                        )\n                                ])\n                            ),\n                            definedInTypeName: nil)))\n                    }\n\n                    it(\"resolves tuple return types properly\") {\n                        let functions = parseFunctions(\"func foo() -> (bar: String, biz: Int) { }\")\n                        expect(functions[0]).to(equal(SourceryMethod(\n                            name: \"foo()\",\n                            selectorName: \"foo\",\n                            parameters: [],\n                            returnTypeName: TypeName(\n                                name: \"(bar: String, biz: Int)\",\n                                tuple: TupleType(\n                                    name: \"(bar: String, biz: Int)\",\n                                    elements: [\n                                        TupleElement(name: \"bar\", typeName: TypeName(name: \"String\")),\n                                        TupleElement(name: \"biz\", typeName: TypeName(name: \"Int\"))\n                                    ])\n                            ),\n                            definedInTypeName: nil)))\n                    }\n                }\n\n                context(\"given nested types\") {\n                    it(\"resolve extensions of nested type properly\") {\n                        let types = parseModules(\n                            (\"Mod1\", \"enum NS {}; extension NS { struct Foo { func f1() } }\"),\n                            (\"Mod2\", \"import Mod1; extension NS.Foo { func f2() }\"),\n                            (\"Mod3\", \"import Mod1; extension NS.Foo { func f3() }\")\n                        ).types\n                        expect(types.map { $0.globalName }).to(equal([\"Mod1.NS\", \"Mod1.NS.Foo\"]))\n                        expect(types[1].methods.map { $0.name }).to(equal([\"f1()\", \"f2()\", \"f3()\"]))\n                    }\n\n                    it(\"resolve extensions with nested types properly\") {\n                        let types = parseModules(\n                            (\"Mod1\", \"enum NS {}\"),\n                            (\"Mod2\", \"import Mod1; extension NS { struct A { struct D {} } }\"),\n                            (\"Mod3\", \"import Mod1; extension Mod1.NS { struct B { struct C {} } }\")\n                        ).types\n                        expect(types.map(\\.globalName).sorted()).to(equal([\"Mod1.NS\", \"Mod2.NS.A\", \"Mod2.NS.A.D\", \"Mod3.NS.B\", \"Mod3.NS.B.C\"]))\n                    }\n\n                    it(\"resolve extensions with global names declared before nested type\") {\n                        let types = parseModules(\n                            (\"Mod1\", \"enum A {}; extension Mod1.A.B.C { enum D {} }; extension Mod1.A { enum B { enum C {} } }\")\n                        ).types\n                        expect(types.map(\\.globalName).sorted()).to(equal([\"Mod1.A\", \"Mod1.A.B\", \"Mod1.A.B.C\", \"Mod1.A.B.C.D\"]))\n                    }\n\n                    it(\"resolve extensions declared before nested type\") {\n                        let types = parseModules(\n                            (\"Mod1\", \"enum A {}; extension A.B.C { enum D {} }; extension A { enum B { enum C {} } }\")\n                        ).types\n                        expect(types.map(\\.globalName).sorted()).to(equal([\"Mod1.A\", \"Mod1.A.B\", \"Mod1.A.B.C\", \"Mod1.A.B.C.D\"]))\n                    }\n\n                    it(\"resolve extensions with nested types properly\") {\n                        let types = parseModules((\"Mod1\", \"enum NS {}; extension Mod1.NS.A.B { struct D {} } extension Mod1.NS { struct A { struct B {} } }\")).types\n                        expect(types.map(\\.globalName).sorted()).to(equal([\"Mod1.NS\", \"Mod1.NS.A\", \"Mod1.NS.A.B\", \"Mod1.NS.A.B.D\"]))\n                    }\n\n                    it(\"resolves extension of type with global parent name in same module\") {\n                        let types = parseModules((\"Mod1\", \"enum NS {}; extension Mod1.NS { struct A {} }; extension Mod1.NS.A { struct B {} }; extension Mod1.NS.A.B { struct C {} }\")).types\n                        expect(types.map(\\.globalName).sorted()).to(equal([\"Mod1.NS\", \"Mod1.NS.A\", \"Mod1.NS.A.B\", \"Mod1.NS.A.B.C\"]))\n                    }\n\n                    it(\"resolves extensions of nested types properly\") {\n                        let code =\n                        \"\"\"\n                        struct Root {\n                            struct ViewState {}\n                        }\n\n                        extension Root.ViewState {\n                            struct Item: AutoInitializable {\n                            }\n                        }\n\n                        extension Root.ViewState.Item {\n                            struct ChildItem {}\n                        }\n                        \"\"\"\n\n                        let types = parseModules(\n                            (\"Mod1\", code)\n                        ).types\n\n                        expect(types.map { $0.globalName }).to(equal([\n                            \"Mod1.Root\",\n                            \"Mod1.Root.ViewState\",\n                            \"Mod1.Root.ViewState.Item\",\n                            \"Mod1.Root.ViewState.Item.ChildItem\"\n                        ]))\n                    }\n                }\n\n                context(\"given protocols of the same name in different modules\") {\n                    func parseModules(_ modules: (name: String?, contents: String)...) -> [Type] {\n                        let moduleResults = modules.compactMap {\n                            try? makeParser(for: $0.contents, module: $0.name).parse()\n                        }\n\n                        let parserResult = moduleResults.reduce(FileParserResult(path: nil, module: nil, types: [], functions: [], typealiases: [])) { acc, next in\n                            acc.typealiases += next.typealiases\n                            acc.types += next.types\n                            return acc\n                        }\n\n                        return Composer.uniqueTypesAndFunctions(parserResult).types.sorted {\n                            $0.globalName < $1.globalName\n                        }\n                    }\n\n                    it(\"resolves inherited properties\") {\n                        let types = parseModules(\n                            (\"A\", \"protocol Foo { var a: Int { get } }\"),\n                            (\"B\", \"protocol Foo { var b: Int { get } }\"),\n                            (\"C\", \"import A; import B; protocol Foo: A.Foo, B.Foo { var c: Int { get } }\"))\n\n                        expect(types.last?.allVariables.map(\\.name).sorted()).to(equal([\"a\", \"b\", \"c\"]))\n                    }\n\n                    it(\"resolves types properly\") {\n                        let types = parseModules(\n                            (\"Mod1\", \"protocol Foo { func foo1() }\"),\n                            (\"Mod2\", \"protocol Foo { func foo2() }\"))\n\n                        expect(types.first?.globalName).to(equal(\"Mod1.Foo\"))\n                        expect(types.first?.allMethods.map { $0.name }).to(equal([\"foo1()\"]))\n                        expect(types.last?.globalName).to(equal(\"Mod2.Foo\"))\n                        expect(types.last?.allMethods.map { $0.name }).to(equal([\"foo2()\"]))\n                    }\n\n                    it(\"resolves inheritance properly with global type name\") {\n                        let types = parseModules(\n                            (\"Mod1\", \"protocol Foo { func foo1() }\"),\n                            (\"Mod2\", \"protocol Foo { func foo2() }\"),\n                            (\"Mod3\", \"import Mod1; import Mod2; protocol Bar: Mod1.Foo { func bar() }\"))\n                        let bar = types.first { $0.name == \"Bar\" }\n\n                        expect(bar?.allMethods.map { $0.name }.sorted()).to(equal([\"bar()\", \"foo1()\"]))\n                    }\n\n                    it(\"resolves inheritance properly with local type name\") {\n                        let types = parseModules(\n                            (\"Mod1\", \"protocol Foo { func foo1() }\"),\n                            (\"Mod2\", \"protocol Foo { func foo2() }\"),\n                            (\"Mod3\", \"import Mod1; protocol Bar: Foo { func bar() }\"))\n                        let bar = types.first { $0.name == \"Bar\"}\n\n                        expect(bar?.allMethods.map { $0.name }.sorted()).to(equal([\"bar()\", \"foo1()\"]))\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Parsing/FileParserSpec.swift",
    "content": "import Quick\nimport Nimble\nimport PathKit\n#if SWIFT_PACKAGE\nimport Foundation\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\n\nclass FileParserSpec: QuickSpec {\n    // swiftlint:disable function_body_length\n    override func spec() {\n        describe(\"Parser\") {\n            describe(\"parse\") {\n                func parse(_ code: String, parseDocumentation: Bool = false) -> [Type] {\n                    guard let parserResult = try? makeParser(for: code, parseDocumentation: parseDocumentation).parse() else { fail(); return [] }\n                    return parserResult.types\n                }\n\n                describe(\"regression files\") {\n                    it(\"doesnt crash on localized strings\") {\n                        let templatePath = Stubs.errorsDirectory + Path(\"localized-error.swift\")\n                        guard let content = try? templatePath.read(.utf8) else { return fail() }\n\n                        _ = parse(content)\n                    }\n                }\n\n                context(\"given it has sourcery annotations\") {\n                    it(\"extract annotations from extensions properly\") {\n                        let result = parse(\n                            \"\"\"\n                            // sourcery: forceMockPublisher\n                            public extension AnyPublisher {}\n                            \"\"\"\n                        )\n\n                        let annotations: [String: NSObject] = [\n                                \"forceMockPublisher\": NSNumber(value: true)\n                        ]\n\n                        expect(result.first?.annotations).to(equal(\n                            annotations\n                        ))\n                    }\n\n                    it(\"extracts annotation block\") {\n                        let annotations = [\n                                [\"skipEquality\": NSNumber(value: true)],\n                                [\"skipEquality\": NSNumber(value: true), \"extraAnnotation\": NSNumber(value: Float(2))],\n                                [:]\n                        ]\n                        let expectedVariables = (1...3)\n                                .map { Variable(name: \"property\\($0)\", typeName: TypeName(name: \"Int\"), annotations: annotations[$0 - 1], definedInTypeName: TypeName(name: \"Foo\")) }\n                        let expectedType = Class(name: \"Foo\", variables: expectedVariables, annotations: [\"skipEquality\": NSNumber(value: true)])\n\n                        let result = parse(\"\"\"\n                                            // sourcery:begin: skipEquality\n                                            class Foo {\n                                                var property1: Int\n                                                // sourcery: extraAnnotation = 2\n                                                var property2: Int\n                                                // sourcery:end\n                                                var property3: Int\n                                            }\n                                           \"\"\")\n                        expect(result).to(equal([expectedType]))\n                    }\n\n                    it(\"extracts file annotation block\") {\n                        let annotations: [[String: NSObject]] = [\n                            [\"fileAnnotation\": NSNumber(value: true), \"skipEquality\": NSNumber(value: true)],\n                            [\"fileAnnotation\": NSNumber(value: true), \"skipEquality\": NSNumber(value: true), \"extraAnnotation\": NSNumber(value: Float(2))],\n                            [\"fileAnnotation\": NSNumber(value: true)]\n                        ]\n                        let expectedVariables = (1...3)\n                            .map { Variable(name: \"property\\($0)\", typeName: TypeName(name: \"Int\"), annotations: annotations[$0 - 1], definedInTypeName: TypeName(name: \"Foo\")) }\n                        let expectedType = Class(name: \"Foo\", variables: expectedVariables, annotations: [\"fileAnnotation\": NSNumber(value: true), \"skipEquality\": NSNumber(value: true)])\n\n                        let result = parse(\"// sourcery:file: fileAnnotation\\n\" +\n                            \"// sourcery:begin: skipEquality\\n\\n\\n\\n\" +\n                            \"class Foo {\\n\" +\n                            \"  var property1: Int\\n\\n\\n\" +\n                            \" // sourcery: extraAnnotation = 2\\n\" +\n                            \"  var property2: Int\\n\\n\" +\n                            \"  // sourcery:end\\n\" +\n                            \"  var property3: Int\\n\" +\n                            \"}\")\n                        expect(result.first).to(equal(expectedType))\n                    }\n\n                    it(\"extracts annotations which not affect consequently declared properties\") {\n                        let annotations: [[String: NSObject]] = [\n                            [\"extraAnnotation\": NSNumber(value: Float(2))],\n                            [:],\n                            [:]\n                        ]\n                        let attributes: [AttributeList] = [\n                            [\"objc\": [Attribute(name: \"objc\")]],\n                            [\"objc\": [Attribute(name: \"objc\")]],\n                            [:]\n                        ]\n                        let expectedVariables = (1...3)\n                            .map { Variable(name: \"property\\($0)\", typeName: TypeName (name: \"Int\"), attributes: attributes[$0 - 1], annotations: annotations[$0 - 1], definedInTypeName: TypeName (name: \"Foo\" )) }\n                        let expectedType = Class(name: \"Foo\", variables: expectedVariables, annotations: [:])\n                        let result = parse(\n                        \"\"\"\n                        class Foo {\\n\n                          // sourcery: extraAnnotation = 2\n                          @objc var property1: Int\n                          @objc var property2: Int\n                          var property3: Int\n                        }\n                        \"\"\"\n                        )\n                        expect(result.first).to(equal(expectedType))\n                    }\n\n                    it(\"extracts annotations and attributes which not affect consequently declared properties\") {\n                        let annotations: [[String: NSObject]] = [\n                            [\"extraAnnotation\": NSNumber(value: Float(2))],\n                            [:],\n                            [:],\n                            [:],\n                            [:]\n                        ]\n                        let attributes: [AttributeList] = [\n                            [\"objc\": [Attribute(name: \"objc\")]],\n                            [\"objc\": [Attribute(name: \"objc\")]],\n                            [\"MyAttribute\": [Attribute(name: \"MyAttribute\")]],\n                            [\"MyAttribute2\": [Attribute(name: \"MyAttribute2\", arguments: [\"0\": \"Hello\" as NSString], description: \"@MyAttribute2(Hello there)\")]],\n                            [:]\n                        ]\n                        let expectedVariables = (1...5)\n                            .map {\n                                Variable(\n                                    name: \"property\\($0)\",\n                                    typeName: TypeName (name: \"Int\"),\n                                    attributes: attributes[$0 - 1],\n                                    annotations: annotations[$0 - 1],\n                                    definedInTypeName: TypeName (name: \"Foo\" )\n                                )\n                            }\n                        let expectedType = Class(name: \"Foo\", variables: expectedVariables, annotations: [:])\n                        let result = parse(\n                        \"\"\"\n                        class Foo {\\n\n                          // sourcery: extraAnnotation = 2\n                          @objc\n                          var property1: Int\n                          @objc var property2: Int\n                          @MyAttribute\n                          var property3: Int\n                          @MyAttribute2(Hello there)\n                          var property4: Int\n                          var property5: Int\n                        }\n                        \"\"\"\n                        )\n                        expect(result.first).to(equal(expectedType))\n                    }\n\n                    it(\"extracts annotations when declaration has an attribute on the preceding line\") {\n                        let annotations = [\"Annotation\": NSNumber(value: true)]\n\n                        let expectedClass = Class(name: \"SomeClass\", variables: [], attributes: [\"MainActor\": [Attribute(name: \"MainActor\")]], annotations: annotations)\n                        let result = parse(\"\"\"\n                        //sourcery: Annotation\n                        @MainActor\n                        class SomeClass {\n                        }\n                        \"\"\")\n                        expect(result.first).to(equal(expectedClass))\n                    }\n\n                    it(\"extracts annotations when declaration has a directive on the preceding line\") {\n                        let annotations = [\"Annotation\": NSNumber(value: true)]\n                        let result = parse(\"\"\"\n                        //sourcery: Annotation\n                        #warning(\"some warning\")\n                        class SomeClass {\n                        }\n                        \"\"\")\n                        expect(result.first?.annotations).to(equal(annotations))\n                    }\n\n                    it(\"extracts annotations when declaration has a directive and an attribute on the preceding line\") {\n                        let annotations = [\"Annotation\": NSNumber(value: true)]\n                        let result = parse(\"\"\"\n                        //sourcery: Annotation\n                        #warning(\"some warning\")\n                        @MainActor\n                        class SomeClass {\n                        }\n                        \"\"\")\n                        expect(result.first?.annotations).to(equal(annotations))\n                    }\n                }\n\n                context(\"given struct\") {\n\n                    it(\"extracts properly\") {\n                        expect(parse(\"struct Foo { }\"))\n                                .to(equal([\n                                        Struct(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [])\n                                ]))\n                    }\n\n                    it(\"extracts import correctly\") {\n                        let expectedStruct = Struct(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [])\n                        expectedStruct.imports = [\n                            Import(path: \"SimpleModule\"),\n                            Import(path: \"SpecificModule.ClassName\")\n                        ]\n\n                        expect(parse(\"\"\"\n                                     import SimpleModule\n                                     import SpecificModule.ClassName\n                                     struct Foo {}\n                                     \"\"\").first)\n                                .to(equal(expectedStruct))\n                    }\n\n                    it(\"extracts properly with access information\") {\n                        expect(parse(\"public struct Foo { }\"))\n                          .to(equal([\n                                        Struct(name: \"Foo\", accessLevel: .public, isExtension: false, variables: [], modifiers: [Modifier(name: \"public\")])\n                                    ]))\n                    }\n\n                    it(\"extracts properly with access information for extended types via extension\") {\n                        let foo = Struct(name: \"Foo\", accessLevel: .public, isExtension: false, variables: [], modifiers: [Modifier(name: \"public\")])\n\n                        expect(parse(\n                                \"\"\"\n                                public struct Foo { }\n                                public extension Foo {\n                                    struct Boo {}\n                                }\n                                \"\"\"\n                        ).last)\n                          .to(equal(\n                            Struct(name: \"Boo\", parent: foo, accessLevel: .public, isExtension: false, variables: [], modifiers: [])\n                       ))\n                    }\n\n                    it(\"extracts generic struct properly\") {\n                        expect(parse(\"struct Foo<Something> { }\"))\n                                .to(equal([\n                                    Struct(name: \"Foo\", isGeneric: true)\n                                          ]))\n                    }\n\n                    it(\"extracts instance variables properly\") {\n                        expect(parse(\"struct Foo { var x: Int }\"))\n                                .to(equal([\n                                    Struct(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [Variable(name: \"x\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .internal), isComputed: false, definedInTypeName: TypeName(name: \"Foo\"))])\n                                          ]))\n                    }\n\n                    it(\"extracts instance variables with custom accessors properly\") {\n                        expect(parse(\"struct Foo { public private(set) var x: Int }\"))\n                          .to(equal([\n                                        Struct(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [\n                                                Variable(\n                                                    name: \"x\",\n                                                    typeName: TypeName(name: \"Int\"),\n                                                    accessLevel: (read: .public, write: .private),\n                                                    isComputed: false,\n                                                    modifiers: [\n                                                        Modifier(name: \"public\"),\n                                                        Modifier(name: \"private\", detail: \"set\")\n                                                    ],\n                                                    definedInTypeName: TypeName(name: \"Foo\"))\n                                        ])\n                                    ]))\n                    }\n\n                    it(\"extracts multi-line instance variables definitions properly\") {\n                        let defaultValue =\n                            \"\"\"\n                            [\n                                \"This isn't the simplest to parse\",\n                                // Especially with interleaved comments\n                                \"but we can deal with it\",\n                                // pretty well\n                                \"or so we hope\"\n                            ]\n                            \"\"\"\n\n                        expect(parse(\n                            \"\"\"\n                                struct Foo {\n                                    var complicatedArray = \\(defaultValue)\n                                }\n                                \"\"\"\n                        ))\n                        .to(equal([\n                            Struct(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [\n                                    Variable(\n                                        name: \"complicatedArray\",\n                                        typeName: TypeName(\n                                            name: \"[String]\",\n                                            array: ArrayType(name: \"[String]\",\n                                                             elementTypeName: TypeName(name: \"String\")\n                                            ),\n                                            generic: GenericType(name: \"Array\", typeParameters: [.init(typeName: TypeName(name: \"String\"))])\n                                        ),\n                                        accessLevel: (read: .internal, write: .internal),\n                                        isComputed: false,\n                                        defaultValue: defaultValue,\n                                        definedInTypeName: TypeName(name: \"Foo\")\n                                    )])\n                        ]))\n                    }\n\n                    it(\"extracts instance variables with property setters properly\") {\n                        expect(parse(\n                                \"\"\"\n                                struct Foo {\n                                var array = [Int]() {\n                                    willSet {\n                                        print(\"new value \\\\(newValue)\")\n                                    }\n                                }\n\n                                }\n                                \"\"\"\n                        ))\n                        .to(equal([\n                            Struct(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [\n                                    Variable(\n                                        name: \"array\",\n                                        typeName: TypeName(\n                                            name: \"[Int]\",\n                                            array: ArrayType(name: \"[Int]\",\n                                                             elementTypeName: TypeName(name: \"Int\")\n                                            ),\n                                            generic: GenericType(name: \"Array\", typeParameters: [.init(typeName: TypeName(name: \"Int\"))])\n                                        ),\n                                        accessLevel: (read: .internal, write: .internal),\n                                        isComputed: false,\n                                        defaultValue: \"[Int]()\",\n                                        definedInTypeName: TypeName(name: \"Foo\")\n                                    )])\n                        ]))\n                    }\n\n                    it(\"extracts computed variables properly\") {\n                        expect(parse(\"struct Foo { var x: Int { return 2 } }\"))\n                          .to(equal([\n                                        Struct(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [\n                                            Variable(name: \"x\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .none), isComputed: true, isStatic: false, definedInTypeName: TypeName(name: \"Foo\"))\n                                        ])\n                                    ]))\n                    }\n\n                    it(\"extracts class variables properly\") {\n                        expect(parse(\"struct Foo { static var x: Int { return 2 }; class var y: Int = 0 }\"))\n                                .to(equal([\n                                    Struct(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [\n                                        Variable(name: \"x\",\n                                                 typeName: TypeName(name: \"Int\"),\n                                                 accessLevel: (read: .internal, write: .none),\n                                                 isComputed: true,\n                                                 isStatic: true,\n                                                 modifiers: [\n                                                    Modifier(name: \"static\")\n                                                 ],\n                                                 definedInTypeName: TypeName(name: \"Foo\")),\n                                        Variable(name: \"y\",\n                                                 typeName: TypeName(name: \"Int\"),\n                                                 accessLevel: (read: .internal, write: .internal),\n                                                 isComputed: false,\n                                                 isStatic: true,\n                                                 defaultValue: \"0\",\n                                                 modifiers: [\n                                                    Modifier(name: \"class\")\n                                                 ],\n                                                 definedInTypeName: TypeName(name: \"Foo\"))\n                                        ])\n                                    ]))\n                    }\n\n                    context(\"given nested struct\") {\n                        it(\"extracts properly from body\") {\n                            let innerType = Struct(name: \"Bar\", accessLevel: .internal, isExtension: false, variables: [])\n\n                            expect(parse(\"struct Foo { struct Bar { } }\"))\n                                    .to(equal([\n                                            Struct(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [], containedTypes: [innerType]),\n                                            innerType\n                                    ]))\n                        }\n                    }\n                }\n\n                context(\"given class\") {\n\n                    it(\"extracts variables properly\") {\n                        expect(parse(\"class Foo { var x: Int }\"))\n                          .to(equal([\n                                        Class(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [Variable(name: \"x\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .internal), isComputed: false, definedInTypeName: TypeName(name: \"Foo\"))])\n                                    ]))\n                    }\n\n                    it(\"extracts inherited types properly\") {\n                        expect(parse(\"class Foo: TestProtocol, AnotherProtocol {}\").first(where: { $0.name == \"Foo\" }))\n                          .to(equal(\n                                        Class(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [], inheritedTypes: [\"TestProtocol\", \"AnotherProtocol\"])\n                                    ))\n                    }\n\n                    it(\"extracts annotations correctly\") {\n                        let expectedType = Class(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [], inheritedTypes: [\"TestProtocol\"])\n                        expectedType.annotations[\"firstLine\"] = NSNumber(value: true)\n                        expectedType.annotations[\"thirdLine\"] = NSNumber(value: 4543)\n\n                        expect(parse(\"// sourcery: thirdLine = 4543\\n/// comment\\n// sourcery: firstLine\\nclass Foo: TestProtocol { }\"))\n                                .to(equal([expectedType]))\n                    }\n\n                    it(\"extracts documentation correctly\") {\n                        let expectedType = Class(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [], inheritedTypes: [\"TestProtocol\"])\n                        expectedType.annotations[\"thirdLine\"] = NSNumber(value: 4543)\n                        expectedType.documentation = [\"doc\", \"comment\", \"baz\"]\n\n                        expect(parse(\"/// doc\\n// sourcery: thirdLine = 4543\\n/// comment\\n// firstLine\\n///baz\\nclass Foo: TestProtocol { }\", parseDocumentation: true))\n                                .to(equal([expectedType]))\n                    }\n\n                    it(\"extracts documentation correctly if there is a directive on preceeding line\") {\n                        let expectedType = Class(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [], inheritedTypes: [\"TestProtocol\"])\n                        expectedType.annotations[\"thirdLine\"] = NSNumber(value: 4543)\n                        expectedType.documentation = [\"doc\", \"comment\", \"baz\"]\n\n                        expect(parse(\"\"\"\n                            /// doc\n                            // sourcery: thirdLine = 4543\n                            /// comment\n                            // firstLine\n                            ///baz\n                            #warning(\"a warning\")\n                            class Foo: TestProtocol { }\n                            \"\"\", parseDocumentation: true))\n                        .to(equal([expectedType]))\n                    }\n\n                    it(\"extracts documentation correctly if there is a directive and an attribute on preceeding line\") {\n                        let expectedType = Class(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [], inheritedTypes: [\"TestProtocol\"], attributes: [\"MainActor\": [Attribute(name: \"MainActor\")]])\n                        expectedType.annotations[\"thirdLine\"] = NSNumber(value: 4543)\n                        expectedType.documentation = [\"doc\", \"comment\", \"baz\"]\n\n                        expect(parse(\"\"\"\n                            /// doc\n                            // sourcery: thirdLine = 4543\n                            /// comment\n                            // firstLine\n                            ///baz\n                            #warning(\"a warning\")\n                            @MainActor\n                            class Foo: TestProtocol { }\n                            \"\"\", parseDocumentation: true))\n                        .to(equal([expectedType]))\n                    }\n\n                    it(\"extracts documentation correctly if there is a directive and an attribute on preceeding line\") {\n                        let expectedType = Class(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [], inheritedTypes: [\"TestProtocol\"], attributes: [\"MainActor\": [Attribute(name: \"MainActor\")]])\n                        expectedType.annotations[\"thirdLine\"] = NSNumber(value: 4543)\n                        expectedType.documentation = [\"doc\", \"comment\", \"baz\"]\n\n                        expect(parse(\"\"\"\n                            /// doc\n                            // sourcery: thirdLine = 4543\n                            /// comment\n                            // firstLine\n                            ///baz\n                            #warning(\"a warning\")\n                            @MainActor\n                            class Foo: TestProtocol { }\n                            \"\"\", parseDocumentation: true))\n                        .to(equal([expectedType]))\n                    }\n\n                    it(\"extracts documentation correctly if there is a directive and multiline comments\") {\n                        let expectedType = Class(name: \"Foo\", accessLevel: .internal, isExtension: false, variables: [], inheritedTypes: [\"TestProtocol\"], attributes: [\"MainActor\": [Attribute(name: \"MainActor\")]])\n                        expectedType.annotations[\"thirdLine\"] = NSNumber(value: 4543)\n                        expectedType.documentation = [\"doc\", \"This is a documentation comment\", \"This is another documentation comment\", \"This is another another documentation comment\", \"This is yet another documentation comment\"]\n\n                        let parsedType = parse(\"\"\"\n                            /// doc\n                            // sourcery: thirdLine = 4543\n                            /* This is not a documentation comment */\n                            /** This is a documentation comment */\n                            /**\n                             This is another documentation comment\n                            */\n                            /** This is another another documentation comment\n                            */\n                            /**\n                              This is yet another documentation comment */\n                            #warning(\"a warning\")\n                            @MainActor\n                            class Foo: TestProtocol { }\n                            \"\"\", parseDocumentation: true)\n                        expect(parsedType)\n                        .to(equal([expectedType]))\n                    }\n                }\n\n                context(\"given typealias\") {\n                    func parse(_ code: String) -> FileParserResult {\n                        guard let parserResult = try? makeParser(for: code).parse() else { fail(); return FileParserResult(path: nil, module: nil, types: [], functions: [], typealiases: []) }\n                        return parserResult\n                    }\n\n                    context(\"given global typealias\") {\n                        it(\"extracts global typealiases properly\") {\n                            expect(parse(\"typealias GlobalAlias = Foo; class Foo { typealias FooAlias = Int; class Bar { typealias BarAlias = Int } }\").typealiases)\n                                .to(equal([\n                                    Typealias(aliasName: \"GlobalAlias\", typeName: TypeName(name: \"Foo\"))\n                                    ]))\n                        }\n\n                        it(\"extracts typealiases for inner types\") {\n                            expect(parse(\"typealias GlobalAlias = Foo.Bar;\").typealiases)\n                                .to(equal([\n                                    Typealias(aliasName: \"GlobalAlias\", typeName: TypeName(name: \"Foo.Bar\"))\n                                    ]))\n                        }\n\n                        it(\"extracts typealiases of other typealiases\") {\n                            expect(parse(\"typealias Foo = Int; typealias Bar = Foo\").typealiases)\n                                .to(contain([\n                                    Typealias(aliasName: \"Foo\", typeName: TypeName(name: \"Int\")),\n                                    Typealias(aliasName: \"Bar\", typeName: TypeName(name: \"Foo\"))\n                                    ]))\n                        }\n\n                        it(\"extracts typealias for tuple\") {\n                            let typealiase = parse(\"typealias GlobalAlias = (Foo, Bar)\").typealiases.first\n                            expect(typealiase)\n                              .to(equal(\n                                Typealias(aliasName: \"GlobalAlias\",\n                                          typeName: TypeName(name: \"(Foo, Bar)\", tuple: TupleType(name: \"(Foo, Bar)\", elements: [.init(name: \"0\", typeName: .init(\"Foo\")), .init(name: \"1\", typeName: .init(\"Bar\"))]))\n                                )\n                              ))\n                        }\n\n                        it(\"extracts typealias for closure\") {\n                            expect(parse(\"typealias GlobalAlias = (Int) -> (String)\").typealiases)\n                                .to(equal([\n                                        Typealias(aliasName: \"GlobalAlias\", typeName: TypeName(name: \"(Int) -> String\", closure: ClosureType(name: \"(Int) -> String\", parameters: [.init(typeName: TypeName(name: \"Int\"))], returnTypeName: TypeName(name: \"String\"))))\n                                    ]))\n                        }\n\n                        it(\"extracts typealias for void closure\") {\n                            let parsed = parse(\"typealias GlobalAlias = () -> ()\").typealiases.first\n                            let expected = Typealias(aliasName: \"GlobalAlias\", typeName: TypeName(name: \"() -> ()\", closure: ClosureType(name: \"() -> ()\", parameters: [], returnTypeName: TypeName(name: \"()\"))))\n\n                            expect(parsed).to(equal(expected))\n                        }\n\n                        it(\"extracts private typealias\") {\n                            expect(parse(\"private typealias GlobalAlias = () -> ()\").typealiases)\n                                .to(equal([\n                                    Typealias(aliasName: \"GlobalAlias\", typeName: TypeName(name: \"() -> ()\", closure: ClosureType(name: \"() -> ()\", parameters: [], returnTypeName: TypeName(name: \"()\"))), accessLevel: .private)\n                                    ]))\n                        }\n                    }\n\n                    context(\"given local typealias\") {\n                        it(\"extracts local typealiases properly\") {\n                            let foo = Type(name: \"Foo\")\n                            let bar = Type(name: \"Bar\", parent: foo)\n                            let fooBar = Type(name: \"FooBar\", parent: bar)\n\n                            let types = parse(\"class Foo { typealias FooAlias = String; struct Bar { typealias BarAlias = Int; struct FooBar { typealias FooBarAlias = Float } } }\").types\n\n                            let fooAliases = types.first?.typealiases\n                            let barAliases = types.first?.containedTypes.first?.typealiases\n                            let fooBarAliases = types.first?.containedTypes.first?.containedTypes.first?.typealiases\n\n                            expect(fooAliases).to(equal([\"FooAlias\": Typealias(aliasName: \"FooAlias\", typeName: TypeName(name: \"String\"), parent: foo)]))\n                            expect(barAliases).to(equal([\"BarAlias\": Typealias(aliasName: \"BarAlias\", typeName: TypeName(name: \"Int\"), parent: bar)]))\n                            expect(fooBarAliases).to(equal([\"FooBarAlias\": Typealias(aliasName: \"FooBarAlias\", typeName: TypeName(name: \"Float\"), parent: fooBar)]))\n                        }\n                    }\n\n                }\n\n                context(\"given a protocol composition\") {\n\n                    context(\"when used as typeName\") {\n                        it(\"is extracted correctly as return type\") {\n                            let expectedFoo = Method(name: \"foo()\", selectorName: \"foo\", returnTypeName: TypeName(name: \"ProtocolA & ProtocolB\", isProtocolComposition: true), definedInTypeName: TypeName(name: \"Foo\"))\n                            expectedFoo.returnType = ProtocolComposition(name: \"ProtocolA & Protocol B\")\n                            let expectedFooOptional = Method(name: \"fooOptional()\", selectorName: \"fooOptional\", returnTypeName: TypeName(name: \"(ProtocolA & ProtocolB)\", isOptional: true, isProtocolComposition: true), definedInTypeName: TypeName(name: \"Foo\"))\n                            expectedFooOptional.returnType = ProtocolComposition(name: \"ProtocolA & Protocol B\")\n\n                            let methods = parse(\"\"\"\n                                                protocol Foo {\n                                                  func foo() -> ProtocolA & ProtocolB\n                                                  func fooOptional() -> (ProtocolA & ProtocolB)?\n                                                }\n                                                \"\"\")[0].methods\n\n                            expect(methods[0]).to(equal(expectedFoo))\n                            expect(methods[1]).to(equal(expectedFooOptional))\n                        }\n                    }\n\n                    context(\"of two protocols\") {\n                        it(\"extracts protocol composition for typealias with ampersand\") {\n                            expect(parse(\"typealias Composition = Foo & Bar; protocol Foo {}; protocol Bar {}\"))\n                                .to(contain([\n                                    ProtocolComposition(name: \"Composition\", inheritedTypes: [\"Foo\", \"Bar\"], composedTypeNames: [TypeName(name: \"Foo\"), TypeName(name: \"Bar\")])\n                                    ]))\n\n                            expect(parse(\"private typealias Composition = Foo & Bar; protocol Foo {}; protocol Bar {}\"))\n                                .to(contain([\n                                    ProtocolComposition(name: \"Composition\", accessLevel: .private, inheritedTypes: [\"Foo\", \"Bar\"], composedTypeNames: [TypeName(name: \"Foo\"), TypeName(name: \"Bar\")])\n                                    ]))\n                        }\n                    }\n\n                    context(\"of three protocols\") {\n                        it(\"extracts protocol composition for typealias with ampersand\") {\n                            expect(parse(\"typealias Composition = Foo & Bar & Baz; protocol Foo {}; protocol Bar {}; protocol Baz {}\"))\n                                .to(contain([\n                                    ProtocolComposition(name: \"Composition\", inheritedTypes: [\"Foo\", \"Bar\", \"Baz\"], composedTypeNames: [TypeName(name: \"Foo\"), TypeName(name: \"Bar\"), TypeName(name: \"Baz\")])\n                                    ]))\n                        }\n\n                        it(\"extracts protocol composition for typealias with ampersand\") {\n                            expect(parse(\"typealias Composition = Foo & Bar & Baz; protocol Foo {}; protocol Bar {}; protocol Baz {}\"))\n                              .to(contain([\n                                              ProtocolComposition(name: \"Composition\", inheritedTypes: [\"Foo\", \"Bar\", \"Baz\"], composedTypeNames: [TypeName(name: \"Foo\"), TypeName(name: \"Bar\"), TypeName(name: \"Baz\")])\n                                          ]))\n                        }\n                    }\n\n                    context(\"of a protocol and a class\") {\n                        it(\"extracts protocol composition for typealias with ampersand\") {\n                            expect(parse(\"typealias Composition = Foo & Bar; protocol Foo {}; class Bar {}\"))\n                                .to(contain([\n                                    ProtocolComposition(name: \"Composition\", inheritedTypes: [\"Foo\", \"Bar\"], composedTypeNames: [TypeName(name: \"Foo\"), TypeName(name: \"Bar\")])\n                                    ]))\n                        }\n                    }\n\n                    context(\"given local protocol composition\") {\n                        it(\"extracts local protocol compositions properly\") {\n                            let foo = Type(name: \"Foo\")\n                            let bar = Type(name: \"Bar\", parent: foo)\n\n                            let types = parse(\"protocol P {}; class Foo { typealias FooComposition = Bar & P; class Bar { typealias BarComposition = FooBar & P; class FooBar {} } }\")\n\n                            let fooType = types.first(where: { $0.name == \"Foo\" })\n                            let fooComposition = fooType?.containedTypes.first\n                            let barComposition = fooType?.containedTypes.last?.containedTypes.first\n\n                            expect(fooComposition).to(equal(\n                                ProtocolComposition(name: \"FooComposition\", parent: foo, inheritedTypes: [\"Bar\", \"P\"], composedTypeNames: [TypeName(name: \"Bar\"), TypeName(name: \"P\")])))\n                            expect(barComposition).to(equal(\n                                ProtocolComposition(name: \"BarComposition\", parent: bar, inheritedTypes: [\"FooBar\", \"P\"], composedTypeNames: [TypeName(name: \"FooBar\"), TypeName(name: \"P\")])))\n                        }\n                    }\n                }\n\n                context(\"given enum\") {\n\n                    it(\"extracts empty enum properly\") {\n                        expect(parse(\"enum Foo { }\"))\n                                .to(equal([\n                                        Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [], cases: [])\n                                ]))\n                    }\n\n                    it(\"extracts cases properly\") {\n                        expect(parse(\"enum Foo { case optionA; case optionB }\"))\n                                .to(equal([\n                                        Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [], cases: [EnumCase(name: \"optionA\"), EnumCase(name: \"optionB\")])\n                                ]))\n                    }\n\n                    it(\"extracts cases with special names\") {\n                        expect(parse(\"\"\"\n                                     enum Foo {\n                                       case `default`\n                                       case `for`(something: Int, else: Float, `default`: Bool)\n                                     }\n                                     \"\"\"))\n                          .to(equal([\n                                        Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [], cases: [\n                                            EnumCase(name: \"`default`\"),\n                                            EnumCase(name: \"`for`\", associatedValues:\n                                            [\n                                                AssociatedValue(name: \"something\", typeName: TypeName(name: \"Int\")),\n                                                AssociatedValue(name: \"else\", typeName: TypeName(name: \"Float\")),\n                                                AssociatedValue(name: \"`default`\", typeName: TypeName(name: \"Bool\"))\n                                            ])])\n                                    ]))\n                    }\n\n                    it(\"extracts multi-byte cases properly\") {\n                        expect(parse(\"enum JapaneseEnum {\\ncase アイウエオ\\n}\"))\n                            .to(equal([\n                                Enum(name: \"JapaneseEnum\", cases: [EnumCase(name: \"アイウエオ\")])\n                                ]))\n                    }\n\n                    context(\"given enum cases annotations\") {\n\n                        it(\"extracts cases with annotations properly\") {\n                            let parsedTypes = parse(\"\"\"\n                                         enum Foo {\n                                             // sourcery:begin: block\n                                             // sourcery: first, second=\\\"value\\\"\n                                             case optionA(/* sourcery: first, third = \\\"value\\\" */Int)\n                                             // sourcery: fourth\n                                             case optionB\n                                             case optionC\n                                             // sourcery:end\n                                         }\n                                         \"\"\")\n                            let expectedTypes = [\n                                Enum(name: \"Foo\", cases: [\n                                    EnumCase(name: \"optionA\", associatedValues: [\n                                        AssociatedValue(name: nil, typeName: TypeName(name: \"Int\"), annotations: [\n                                            \"first\": NSNumber(value: true),\n                                            \"third\": \"value\" as NSString,\n                                            \"block\": NSNumber(value: true)\n                                            ])\n                                        ], annotations: [\n                                            \"block\": NSNumber(value: true),\n                                            \"first\": NSNumber(value: true),\n                                            \"second\": \"value\" as NSString\n                                        ]\n                                    ),\n                                    EnumCase(name: \"optionB\", annotations: [\n                                        \"block\": NSNumber(value: true),\n                                        \"fourth\": NSNumber(value: true)\n                                        ]\n                                    ),\n                                    EnumCase(name: \"optionC\", annotations: [\n                                        \"block\": NSNumber(value: true)\n                                        ])\n                                    ])\n                                ]\n\n                            expect((parsedTypes.first! as! Enum).cases[0].annotations).to(equal((expectedTypes.first!).cases[0].annotations))\n                            expect((parsedTypes.first! as! Enum).cases[1].annotations).to(equal((expectedTypes.first!).cases[1].annotations))\n                            expect((parsedTypes.first! as! Enum).cases[2].annotations).to(equal((expectedTypes.first!).cases[2].annotations))\n\n                            expect(parsedTypes)\n                                .to(equal(expectedTypes))\n                        }\n\n                        it(\"extracts cases with inline annotations properly\") {\n                            expect(parse(\"\"\"\n                                         enum Foo {\n                                          //sourcery:begin: block\n                                         /* sourcery: first, second = \\\"value\\\" */ case optionA(/* sourcery: first, second = \\\"value\\\" */Int);\n                                         /* sourcery: third */ case optionB\n                                          case optionC\n                                         //sourcery:end\n                                         }\n                                         \"\"\").first)\n                                .to(equal(\n                                    Enum(name: \"Foo\", cases: [\n                                        EnumCase(name: \"optionA\", associatedValues: [\n                                            AssociatedValue(name: nil, typeName: TypeName(name: \"Int\"), annotations: [\n                                                \"first\": NSNumber(value: true),\n                                                \"second\": \"value\" as NSString,\n                                                \"block\": NSNumber(value: true)\n                                                ])\n                                            ], annotations: [\n                                                \"block\": NSNumber(value: true),\n                                                \"first\": NSNumber(value: true),\n                                                \"second\": \"value\" as NSString\n                                            ]),\n                                        EnumCase(name: \"optionB\", annotations: [\n                                            \"block\": NSNumber(value: true),\n                                            \"third\": NSNumber(value: true)\n                                            ]),\n                                        EnumCase(name: \"optionC\", annotations: [\n                                            \"block\": NSNumber(value: true)\n                                            ])\n                                        ])\n                                    ))\n                        }\n\n                        it(\"extracts one line cases with inline annotations properly\") {\n                            expect(parse(\"\"\"\n                                         enum Foo {\n                                          //sourcery:begin: block\n                                         case /* sourcery: first, second = \\\"value\\\" */ optionA(Int), /* sourcery: third, fourth = \\\"value\\\" */ optionB, optionC\n                                         //sourcery:end\n                                         }\n                                         \"\"\").first)\n                                .to(equal(\n                                    Enum(name: \"Foo\", cases: [\n                                        EnumCase(name: \"optionA\", associatedValues: [\n                                            AssociatedValue(name: nil, typeName: TypeName(name: \"Int\"), annotations: [\n                                                \"block\": NSNumber(value: true)\n                                            ])\n                                            ], annotations: [\n                                                \"block\": NSNumber(value: true),\n                                                \"first\": NSNumber(value: true),\n                                                \"second\": \"value\" as NSString\n                                            ]),\n                                        EnumCase(name: \"optionB\", annotations: [\n                                            \"block\": NSNumber(value: true),\n                                            \"third\": NSNumber(value: true),\n                                            \"fourth\": \"value\" as NSString\n                                            ]),\n                                        EnumCase(name: \"optionC\", annotations: [\n                                            \"block\": NSNumber(value: true)\n                                            ])\n                                        ])\n                                    ))\n                        }\n\n                        it(\"extracts cases with annotations and computed variables properly\") {\n                            expect(parse(\"\"\"\n                                         enum Foo {\n                                          // sourcery: var\n                                          var first: Int { return 0 }\n                                          // sourcery: first, second=\\\"value\\\"\n                                          case optionA(Int)\n                                          // sourcery: var\n                                          var second: Int { return 0 }\n                                          // sourcery: third\n                                          case optionB\n                                          case optionC }\n                                         \"\"\").first)\n                                .to(equal(\n                                    Enum(name: \"Foo\", cases: [\n                                        EnumCase(name: \"optionA\", associatedValues: [\n                                            AssociatedValue(name: nil, typeName: TypeName(name: \"Int\"))\n                                            ], annotations: [\n                                                \"first\": NSNumber(value: true),\n                                                \"second\": \"value\" as NSString\n                                            ]),\n                                        EnumCase(name: \"optionB\", annotations: [\n                                            \"third\": NSNumber(value: true)\n                                            ]),\n                                        EnumCase(name: \"optionC\")\n                                        ], variables: [\n                                            Variable(name: \"first\", typeName: TypeName(name: \"Int\"), accessLevel: (.internal, .none), isComputed: true, annotations: [ \"var\": NSNumber(value: true) ], definedInTypeName: TypeName(name: \"Foo\")),\n                                            Variable(name: \"second\", typeName: TypeName(name: \"Int\"), accessLevel: (.internal, .none), isComputed: true, annotations: [ \"var\": NSNumber(value: true) ], definedInTypeName: TypeName(name: \"Foo\"))\n                                        ])\n                                    ))\n                        }\n                    }\n\n                    it(\"extracts associated value annotations properly\") {\n                        let result = parse(\"\"\"\n                                           enum Foo {\n                                               case optionA(\n                                                 // sourcery: first\n                                                 // sourcery: second, third = \"value\"\n                                                 Int)\n                                               case optionB\n                                           }\n                                           \"\"\")\n                        expect(result)\n                            .to(equal([\n                                Enum(name: \"Foo\",\n                                     cases: [\n                                        EnumCase(name: \"optionA\", associatedValues: [\n                                            AssociatedValue(name: nil, typeName: TypeName(name: \"Int\"), annotations: [\"first\": NSNumber(value: true), \"second\": NSNumber(value: true), \"third\": \"value\" as NSString])\n                                            ]),\n                                        EnumCase(name: \"optionB\")\n                                    ])\n                                ]))\n                    }\n\n                    it(\"extracts associated value inline annotations properly\") {\n                        let result = parse(\"enum Foo {\\n case optionA(/* sourcery: annotation*/Int)\\n case optionB }\")\n                        expect(result)\n                            .to(equal([\n                                Enum(name: \"Foo\",\n                                     cases: [\n                                        EnumCase(name: \"optionA\", associatedValues: [\n                                            AssociatedValue(name: nil, typeName: TypeName(name: \"Int\"), annotations: [\"annotation\": NSNumber(value: true)])\n                                            ]),\n                                        EnumCase(name: \"optionB\")\n                                    ])\n                                ]))\n                    }\n\n                    it(\"extracts variables properly\") {\n                        expect(parse(\"enum Foo { var x: Int { return 1 } }\"))\n                                .to(equal([\n                                        Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [], cases: [], variables: [Variable(name: \"x\", typeName: TypeName(name: \"Int\"), accessLevel: (.internal, .none), isComputed: true, definedInTypeName: TypeName(name: \"Foo\"))])\n                                ]))\n                    }\n\n                    context(\"given enum without rawType\") {\n                        it(\"extracts inherited types properly\") {\n                            expect(parse(\"enum Foo: SomeProtocol { case optionA }; protocol SomeProtocol {}\"))\n                                .to(equal([\n                                    Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [\"SomeProtocol\"], rawTypeName: nil, cases: [EnumCase(name: \"optionA\")]),\n                                    Protocol(name: \"SomeProtocol\")\n                                    ]))\n\n                        }\n                    }\n\n                    it(\"extracts enums with custom values\") {\n                        expect(parse(\"\"\"\n                                     enum Foo: String {\n                                       case optionA = \"Value\"\n                                     }\n                                     \"\"\"))\n                            .to(equal([\n                                Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [\"String\"], cases: [EnumCase(name: \"optionA\", rawValue: \"Value\")])\n                            ]))\n\n                        expect(parse(\"\"\"\n                                     enum Foo: Int {\n                                       case optionA = 2\n                                     }\n                                     \"\"\"))\n                            .to(equal([\n                                Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [\"Int\"], cases: [EnumCase(name: \"optionA\", rawValue: \"2\")])\n                            ]))\n\n                        expect(parse(\"\"\"\n                                     enum Foo: Int {\n                                       case optionA = -1\n                                       case optionB = 0\n                                     }\n                                     \"\"\"))\n                            .to(equal([\n                                Enum(\n                                    name: \"Foo\",\n                                    accessLevel: .internal,\n                                    isExtension: false,\n                                    inheritedTypes: [\"Int\"],\n                                    cases: [\n                                        EnumCase(name: \"optionA\", rawValue: \"-1\"),\n                                        EnumCase(name: \"optionB\", rawValue: \"0\")\n                                    ])\n                            ]))\n\n                        expect(parse(\"\"\"\n                                     enum Foo: Int {\n                                       case optionA = 2 // comment\n                                     }\n                                     \"\"\"))\n                            .to(equal([\n                                Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [\"Int\"], cases: [EnumCase(name: \"optionA\", rawValue: \"2\")])\n                            ]))\n                    }\n\n                    it(\"extracts enums without rawType\") {\n                        let expectedEnum = Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [], cases: [EnumCase(name: \"optionA\")])\n\n                        expect(parse(\"enum Foo { case optionA }\")).to(equal([expectedEnum]))\n                    }\n\n                    it(\"extracts enums with associated types\") {\n                        expect(parse(\"enum Foo { case optionA(Observable<Int, Int>); case optionB(Int, named: Float, _: Int); case optionC(dict: [String: String]) }\"))\n                                .to(equal([\n                                    Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [], cases:\n                                        [\n                                            EnumCase(name: \"optionA\", associatedValues: [\n                                                AssociatedValue(localName: nil, externalName: nil, typeName: TypeName(name: \"Observable<Int, Int>\", generic: GenericType(\n                                                    name: \"Observable\", typeParameters: [\n                                                        GenericTypeParameter(typeName: TypeName(name: \"Int\")),\n                                                        GenericTypeParameter(typeName: TypeName(name: \"Int\"))\n                                                    ])))\n                                                ]),\n                                            EnumCase(name: \"optionB\", associatedValues: [\n                                                AssociatedValue(localName: nil, externalName: \"0\", typeName: TypeName(name: \"Int\")),\n                                                AssociatedValue(localName: \"named\", externalName: \"named\", typeName: TypeName(name: \"Float\")),\n                                                AssociatedValue(localName: nil, externalName: \"2\", typeName: TypeName(name: \"Int\"))\n                                                ]),\n                                            EnumCase(name: \"optionC\", associatedValues: [\n                                                AssociatedValue(localName: \"dict\", externalName: nil, typeName: TypeName(name: \"[String: String]\", dictionary: DictionaryType(name: \"[String: String]\", valueTypeName: TypeName(name: \"String\"), keyTypeName: TypeName(name: \"String\")), generic: GenericType(name: \"Dictionary\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"String\")), GenericTypeParameter(typeName: TypeName(name: \"String\"))])))\n                                                ])\n                                        ])\n                                ]))\n                    }\n\n                    it(\"parses enums with multibyte cases with associated types\") {\n                        let expectedEnum = Enum(name: \"Foo\", cases: [\n                            EnumCase(name: \"こんにちは\", associatedValues: [\n                                AssociatedValue(localName: nil, externalName: nil, typeName: TypeName(name: \"Int\"))\n                            ])\n                        ])\n                        expect(parse(\"enum Foo { case こんにちは(Int) }\")).to(equal([expectedEnum]))\n                    }\n\n                    it(\"extracts enums with indirect cases\") {\n                        expect(parse(\"enum Foo { case optionA; case optionB; indirect case optionC(Foo) }\"))\n                                .to(equal([\n                                    Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [], cases:\n                                        [\n                                            EnumCase(name: \"optionA\", indirect: false),\n                                            EnumCase(name: \"optionB\"),\n                                            EnumCase(name: \"optionC\", associatedValues: [AssociatedValue(typeName: TypeName(name: \"Foo\"))], indirect: true)\n                                        ])\n                                ]))\n                        expect(parse(\"\"\"\n                                     enum Foo {\n                                         /// Option A\n                                         case optionA\n                                         /// Option B\n                                         case optionB\n                                         /// Option C\n                                         indirect case optionC(Foo)\n                                     }\n                                     \"\"\", parseDocumentation: true))\n                                .to(equal([\n                                    Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [], cases:\n                                        [\n                                            EnumCase(name: \"optionA\", documentation: [\"Option A\"], indirect: false),\n                                            EnumCase(name: \"optionB\", documentation: [\"Option B\"]),\n                                            EnumCase(name: \"optionC\", associatedValues: [AssociatedValue(typeName: TypeName(name: \"Foo\"))], documentation: [\"Option C\"], indirect: true)\n                                        ])\n                                ]))\n                    }\n\n                    it(\"extracts enums with Void associated type\") {\n                        expect(parse(\"enum Foo { case optionA(Void); case optionB(Void) }\"))\n                                .to(equal([\n                                                  Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [], cases:\n                                                  [\n                                                          EnumCase(name: \"optionA\", associatedValues: [AssociatedValue(typeName: TypeName(name: \"Void\"))]),\n                                                          EnumCase(name: \"optionB\", associatedValues: [AssociatedValue(typeName: TypeName(name: \"Void\"))])\n                                                  ])\n                                          ]))\n                    }\n\n                    it(\"extracts default values for associated values\") {\n                        expect(parse(\"enum Foo { case optionA(Int = 1, named: Float = 42.0, _: Bool = false); case optionB(Bool = true) }\"))\n                        .to(equal([\n                            Enum(name: \"Foo\", accessLevel: .internal, isExtension: false, inheritedTypes: [], cases:\n                                [\n                                    EnumCase(name: \"optionA\", associatedValues: [\n                                        AssociatedValue(localName: nil, externalName: \"0\", typeName: TypeName(name: \"Int\"), defaultValue: \"1\"),\n                                        AssociatedValue(localName: \"named\", externalName: \"named\", typeName: TypeName(name: \"Float\"), defaultValue: \"42.0\"),\n                                        AssociatedValue(localName: nil, externalName: \"2\", typeName: TypeName(name: \"Bool\"), defaultValue: \"false\")\n                                        ]),\n                                    EnumCase(name: \"optionB\", associatedValues: [\n                                        AssociatedValue(localName: nil, externalName: nil, typeName: TypeName(name: \"Bool\"), defaultValue: \"true\")\n                                    ])\n                                ])\n                        ]))\n                    }\n                }\n\n                context(\"given protocol\") {\n                    it(\"extracts generic requirements properly\") {\n                        expect(parse(\n                            \"\"\"\n                            protocol SomeGenericProtocol: GenericProtocol {}\n                            \"\"\"\n                        ).first).to(equal(\n                            Protocol(name: \"SomeGenericProtocol\", inheritedTypes: [\"GenericProtocol\"])\n                        ))\n\n                        expect(parse(\n                            \"\"\"\n                            protocol SomeGenericProtocol: GenericProtocol where LeftType == RightType {}\n                            \"\"\"\n                        ).first).to(equal(\n                            Protocol(\n                                name: \"SomeGenericProtocol\",\n                                inheritedTypes: [\"GenericProtocol\"],\n                                genericRequirements: [\n                                    GenericRequirement(leftType: .init(name: \"LeftType\"), rightType: .init(typeName: .init(\"RightType\")), relationship: .equals)\n                                ])\n                        ))\n\n                        expect(parse(\n                            \"\"\"\n                            protocol SomeGenericProtocol: GenericProtocol where LeftType: RightType {}\n                            \"\"\"\n                        ).first).to(equal(\n                            Protocol(\n                                name: \"SomeGenericProtocol\",\n                                inheritedTypes: [\"GenericProtocol\"],\n                                genericRequirements: [\n                                    GenericRequirement(leftType: .init(name: \"LeftType\"), rightType: .init(typeName: .init(\"RightType\")), relationship: .conformsTo)\n                                ])\n                        ))\n\n                        expect(parse(\n                            \"\"\"\n                            protocol SomeGenericProtocol: GenericProtocol where LeftType == RightType, LeftType2: RightType2 {}\n                            \"\"\"\n                        ).first).to(equal(\n                            Protocol(\n                                name: \"SomeGenericProtocol\",\n                                inheritedTypes: [\"GenericProtocol\"],\n                                genericRequirements: [\n                                    GenericRequirement(leftType: .init(name: \"LeftType\"), rightType: .init(typeName: .init(\"RightType\")), relationship: .equals),\n                                    GenericRequirement(leftType: .init(name: \"LeftType2\"), rightType: .init(typeName: .init(\"RightType2\")), relationship: .conformsTo)\n                                ])\n                        ))\n                    }\n\n                    it(\"extracts empty protocol properly\") {\n                        expect(parse(\"protocol Foo { }\"))\n                            .to(equal([\n                                Protocol(name: \"Foo\")\n                                ]))\n                    }\n\n                    it(\"does not consider protocol variables as computed\") {\n                        expect(parse(\"protocol Foo { var some: Int { get } }\"))\n                            .to(equal([\n                                Protocol(name: \"Foo\", variables: [Variable(name: \"some\", typeName: TypeName(name: \"Int\"), accessLevel: (.internal, .none), isComputed: false, definedInTypeName: TypeName(name: \"Foo\"))])\n                                ]))\n                    }\n\n                    it(\"does consider type variables as computed when they are, even if they adhere to protocol\") {\n                        expect(parse(\"protocol Foo { var some: Int { get }\\nvar some2: Int { get } }\\nclass Bar: Foo { var some: Int { return 2 }\\nvar some2: Int { get { return 2 } } }\").first(where: { $0.name == \"Bar\" }))\n                            .to(equal(\n                                Class(name: \"Bar\", variables: [\n                                    Variable(name: \"some\", typeName: TypeName(name: \"Int\"), accessLevel: (.internal, .none), isComputed: true, definedInTypeName: TypeName(name: \"Bar\")),\n                                    Variable(name: \"some2\", typeName: TypeName(name: \"Int\"), accessLevel: (.internal, .none), isComputed: true, definedInTypeName: TypeName(name: \"Bar\"))\n                                ], inheritedTypes: [\"Foo\"])\n                                ))\n                    }\n\n                    it(\"does not consider type variables as computed when they aren't, even if they adhere to protocol and have didSet blocks\") {\n                        expect(parse(\"protocol Foo { var some: Int { get } }\\nclass Bar: Foo { var some: Int { didSet { } }\").first(where: { $0.name == \"Bar\" }))\n                          .to(equal(\n                            Class(name: \"Bar\", variables: [Variable(name: \"some\", typeName: TypeName(name: \"Int\"), accessLevel: (.internal, .internal), isComputed: false, definedInTypeName: TypeName(name: \"Bar\"))], inheritedTypes: [\"Foo\"])\n                          ))\n                    }\n\n                    it(\"sets members access level to protocol access level\") {\n                        func assert(_ accessLevel: AccessLevel, line: UInt = #line) {\n                            expect(line: line, parse(\"\\(accessLevel) protocol Foo { var some: Int { get }; func foo() -> Void }\"))\n                                .to(equal([\n                                    Protocol(name: \"Foo\", accessLevel: accessLevel, variables: [Variable(name: \"some\", typeName: TypeName(name: \"Int\"), accessLevel: (accessLevel, .none), isComputed: false, definedInTypeName: TypeName(name: \"Foo\"))], methods: [Method(name: \"foo()\", selectorName: \"foo\", returnTypeName: TypeName(name: \"Void\"), throws: false, rethrows: false, accessLevel: accessLevel, definedInTypeName: TypeName(name: \"Foo\"))], modifiers: [Modifier(name: \"\\(accessLevel)\")])\n                                    ]))\n                        }\n\n                        assert(.private)\n                        assert(.internal)\n                        assert(.private)\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Parsing/FileParser_AssociatedTypeSpec.swift",
    "content": "import Quick\nimport Nimble\nimport PathKit\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\n\nfinal class FileParserAssociatedTypeSpec: QuickSpec {\n    override func spec() {\n        describe(\"Parser\") {\n#if canImport(ObjectiveC)\n            describe(\"parse associated type\") {\n                func associatedType(_ code: String, protocolName: String? = nil) -> [AssociatedType] {\n                    guard let parserResult = try? makeParser(for: code).parse() else { fail(); return [] }\n\n                    return parserResult.types\n                      .compactMap({ type in\n                          type as? SourceryProtocol\n                      })\n                      .first(where: { protocolName != nil ? $0.name == protocolName : true })?\n                      .associatedTypes.values.map { $0 } ?? []\n                }\n\n                context(\"given protocol\") {\n                    context(\"with an associated type\") {\n                        it(\"extracts associated type properly\") {\n                            let code = \"\"\"\n                                protocol Foo {\n                                    associatedtype Bar\n                                }\n                            \"\"\"\n                            expect(associatedType(code)).to(equal([AssociatedType(name: \"Bar\", typeName: TypeName(name: \"Any\"))]))\n                        }\n                    }\n\n                    context(\"with multiple associated types\") {\n                        it(\"extracts associated types properly\") {\n                            let code = \"\"\"\n                                protocol Foo {\n                                    associatedtype Bar\n                                    associatedtype Baz\n                                }\n                            \"\"\"\n                            expect(associatedType(code).sorted(by: { $0.name < $1.name })).to(equal([AssociatedType(name: \"Bar\", typeName: TypeName(name: \"Any\")), AssociatedType(name: \"Baz\", typeName: TypeName(name: \"Any\"))]))\n                        }\n                    }\n\n                    context(\"with associated type constrained to an unknown type\") {\n                        it(\"extracts associated type properly\") {\n                            let code = \"\"\"\n                                protocol Foo {\n                                    associatedtype Bar: Codable\n                                }\n                            \"\"\"\n                            expect(associatedType(code)).to(equal([AssociatedType(\n                              name: \"Bar\",\n                              typeName: TypeName(name: \"Codable\")\n                            )]))\n                        }\n                    }\n\n                    context(\"with associated type constrained to a known type\") {\n                        it(\"extracts associated type properly\") {\n                            let code = \"\"\"\n                                protocol A {}\n                                protocol Foo {\n                                    associatedtype Bar: A\n                                }\n                            \"\"\"\n                            expect(associatedType(code, protocolName: \"Foo\")).to(equal([AssociatedType(\n                              name: \"Bar\",\n                              typeName: TypeName(name: \"A\")\n                            )]))\n                        }\n                    }\n\n                    context(\"with associated type constrained to a composite type\") {\n                        it(\"extracts associated type properly and creates a protocol composition\") {\n                            let parsed = associatedType(\"\"\"\n                                protocol Foo {\n                                    associatedtype Bar: Encodable & Decodable\n                                }\n                            \"\"\").first\n\n                            expect(parsed).to(equal(AssociatedType(\n                              name: \"Bar\",\n                              typeName: TypeName(name: \"Encodable & Decodable\")\n                            )))\n                            expect(parsed?.type).to(equal(ProtocolComposition(\n                              parent: SourceryProtocol(name: \"Foo\"),\n                              inheritedTypes: [\"Encodable\", \"Decodable\"],\n                              composedTypeNames: [TypeName(name: \"Encodable\"), TypeName(name: \"Decodable\")]\n                            )))\n                        }\n                    }\n                }\n            }\n#endif\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Parsing/FileParser_AttributesModifierSpec.swift",
    "content": "import Quick\nimport Nimble\nimport XCTest\n#if SWIFT_PACKAGE\nimport Foundation\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\nimport SourceryFramework\nimport SourceryRuntime\n\nclass FileParserAttributesSpec: QuickSpec {\n    override func spec() {\n        describe(\"FileParser\") {\n            func parse(_ code: String) -> [Type] {\n                guard let parserResult = try? makeParser(for: code).parse() else { fail(); return [] }\n                return parserResult.types\n            }\n\n            it(\"extracts type attribute and modifiers\") {\n                expect(parse(\"\"\"\n                             /*\n                               docs\n                             */\n                             @objc(WAGiveRecognitionCoordinator)\n                             // sourcery: AutoProtocol, AutoMockable\n                             class GiveRecognitionCoordinator: NSObject {\n                             }\n                             \"\"\").first?.attributes).to(\n                  equal([\"objc\": [Attribute(name: \"objc\", arguments: [\"0\": \"WAGiveRecognitionCoordinator\" as NSString], description: \"@objc(WAGiveRecognitionCoordinator)\")]])\n                )\n\n                expect(parse(\"class Foo { func some(param: @convention(swift) @escaping ()->()) {} }\").first?.methods.first?.parameters.first?.typeAttributes).to(equal([\n                    \"escaping\": [Attribute(name: \"escaping\")],\n                    \"convention\": [Attribute(name: \"convention\", arguments: [\"0\": \"swift\" as NSString], description: \"@convention(swift)\")]\n                ]))\n\n                expect(parse(\"final class Foo { }\").first?.modifiers).to(equal([\n                    Modifier(name: \"final\")\n                ]))\n\n                expect((parse(\"final class Foo { }\").first as? Class)?.isFinal).to(beTrue())\n\n                expect(parse(\"@objc class Foo {}\").first?.attributes).to(equal([\n                    \"objc\": [Attribute(name: \"objc\", arguments: [:], description: \"@objc\")]\n                ]))\n\n                expect(parse(\"@objc(Bar) class Foo {}\").first?.attributes).to(equal([\n                    \"objc\": [Attribute(name: \"objc\", arguments: [\"0\": \"Bar\" as NSString], description: \"@objc(Bar)\")]\n                ]))\n\n                expect(parse(\"@objcMembers class Foo {}\").first?.attributes).to(equal([\n                    \"objcMembers\": [Attribute(name: \"objcMembers\", arguments: [:], description: \"@objcMembers\")]\n                ]))\n\n                expect(parse(\"public class Foo {}\").first?.modifiers).to(equal([\n                    Modifier(name: \"public\")\n                ]))\n            }\n\n            context(\"given attribute with arguments\") {\n                it(\"extracts attribute arguments with values\") {\n                    expect(parse(\"\"\"\n                            @available(*, unavailable, renamed: \\\"NewFoo\\\")\n                            protocol Foo {}\n                            \"\"\"\n                    ).first?.attributes)\n                    .to(equal([\n                                \"available\": [Attribute(name: \"available\", arguments: [\n                                    \"0\": \"*\" as NSString,\n                                    \"1\": \"unavailable\" as NSString,\n                                    \"renamed\": \"\\\"NewFoo\\\"\" as NSString\n                                ], description: \"@available(*, unavailable, renamed: \\\"NewFoo\\\")\")\n                                ]]))\n\n                    expect(parse(\"\"\"\n                            @available(iOS 10.0, macOS 10.12, *)\n                            protocol Foo {}\n                            \"\"\"\n                    ).first?.attributes)\n                    .to(equal([\n                                \"available\": [Attribute(name: \"available\", arguments: [\n                                    \"0\": \"iOS 10.0\" as NSString,\n                                    \"1\": \"macOS 10.12\" as NSString,\n                                    \"2\": \"*\" as NSString\n                                ], description: \"@available(iOS 10.0, macOS 10.12, *)\")\n                                ]]))\n                }\n            }\n\n            it(\"extracts method attributes and modifiers\") {\n                expect(parse(\"class Foo { @discardableResult\\n@objc(some)\\nfunc some() {} }\").first?.methods.first?.attributes).to(equal([\n                    \"discardableResult\": [Attribute(name: \"discardableResult\")],\n                    \"objc\": [Attribute(name: \"objc\", arguments: [\"0\": \"some\" as NSString], description: \"@objc(some)\")]\n                ]))\n\n                expect(parse(\"class Foo { @nonobjc convenience required init() {} }\").first?.initializers.first?.attributes).to(equal([\n                    \"nonobjc\": [Attribute(name: \"nonobjc\")]\n                ]))\n\n                let initializer = parse(\"class Foo { @nonobjc convenience required init() {} }\").first?.initializers.first\n\n                expect(initializer?.modifiers).to(equal([\n                    Modifier(name: \"convenience\"),\n                    Modifier(name: \"required\")\n                ]))\n\n                expect(initializer?.isConvenienceInitializer).to(beTrue())\n                expect(initializer?.isRequired).to(beTrue())\n\n                expect(parse(\"struct Foo { mutating func some() {} }\").first?.methods.first?.modifiers).to(equal([\n                    Modifier(name: \"mutating\")\n                ]))\n\n                expect(parse(\"struct Foo { mutating func some() {} }\").first?.methods.first?.isMutating).to(beTrue())\n\n                expect(parse(\"class Foo { final func some() {} }\").first?.methods.first?.modifiers).to(equal([\n                    Modifier(name: \"final\")\n                ]))\n\n                expect(parse(\"class Foo { final func some() {} }\").first?.methods.first?.isFinal).to(beTrue())\n\n                expect(parse(\"@objc protocol Foo { @objc optional func some() }\").first?.methods.first?.modifiers).to(equal([\n                    Modifier(name: \"optional\")\n                ]))\n\n                expect(parse(\"@objc protocol Foo { @objc optional func some() }\").first?.methods.first?.isOptional).to(beTrue())\n\n                expect(parse(\"actor Foo { nonisolated func bar() {} }\").first?.methods.first?.isNonisolated).to(beTrue())\n\n                expect(parse(\"actor Foo { func bar() {} }\").first?.methods.first?.isNonisolated).to(beFalse())\n                expect(parse(\"actor Foo { distributed func bar() {} }\").first?.methods.first?.isDistributed).to(beTrue())\n                expect((parse(\"distributed actor Foo { distributed func bar() {} }\").first as? Actor)?.isDistributed).to(beTrue())\n            }\n\n            it(\"extracts method parameter attributes\") {\n                expect(parse(\"class Foo { func some(param: @escaping ()->()) {} }\").first?.methods.first?.parameters.first?.typeAttributes).to(equal([\n                    \"escaping\": [Attribute(name: \"escaping\")]\n                ]))\n            }\n\n            it(\"extracts variable attributes and modifiers\") {\n                expect(parse(\"class Foo { @NSCopying @objc(objcName) var name: NSString = \\\"\\\" }\").first?.variables.first?.attributes).to(equal([\n                    \"NSCopying\": [Attribute(name: \"NSCopying\", description: \"@NSCopying\")],\n                    \"objc\": [Attribute(name: \"objc\", arguments: [\"0\": \"objcName\" as NSString], description: \"@objc(objcName)\")]\n                ]))\n\n                expect(parse(\"struct Foo { mutating var some: Int }\").first?.variables.first?.modifiers).to(equal([\n                    Modifier(name: \"mutating\")\n                ]))\n\n                expect(parse(\"class Foo { final var some: Int }\").first?.variables.first?.modifiers).to(equal([\n                    Modifier(name: \"final\")\n                ]))\n                expect(parse(\"class Foo { final var some: Int }\").first?.variables.first?.isFinal).to(beTrue())\n\n                expect(parse(\"class Foo { lazy var name: String = \\\"Hello\\\" }\").first?.variables.first?.modifiers).to(equal([\n                    Modifier(name: \"lazy\")\n                ]))\n\n                expect(parse(\"class Foo { lazy var name: String = \\\"Hello\\\" }\").first?.variables.first?.isLazy).to(beTrue())\n\n                func assertSetterAccess(_ access: String, line: UInt = #line) {\n                    let variable = parse(\"public class Foo { \\(access)(set) var some: Int }\").first?.variables.first\n                    expect(line: line, variable?.modifiers).to(equal([\n                       Modifier(name: access, detail: \"set\")\n                    ]))\n                    expect(variable?.writeAccess).to(equal(access))\n                }\n\n                assertSetterAccess(\"private\")\n                assertSetterAccess(\"fileprivate\")\n                assertSetterAccess(\"internal\")\n                assertSetterAccess(\"public\")\n                assertSetterAccess(\"open\")\n\n                func assertGetterAccess(_ access: String, line: UInt = #line) {\n                    let variable = parse(\"public class Foo { \\(access) var some: Int }\").first?.variables.first\n                    expect(line: line, variable?.modifiers).to(equal([\n                        Modifier(name: access)\n                    ]))\n                    expect(variable?.readAccess).to(equal(access))\n                }\n\n                assertGetterAccess(\"private\")\n                assertGetterAccess(\"fileprivate\")\n                assertGetterAccess(\"internal\")\n                assertGetterAccess(\"public\")\n                assertGetterAccess(\"open\")\n\n            }\n\n            it(\"extracts type attributes\") {\n                expect(parse(\"@nonobjc class Foo {}\").first?.attributes).to(equal([\n                    \"nonobjc\": [Attribute(name: \"nonobjc\")]\n                ]))\n            }\n\n            context(\"parsing property wrapper\") {\n                it(\"extracts attributes\") {\n                    expect(parse(\"\"\"\n                    class Foo {\n                        @UserDefaults(key: \"user_name\", 123)\n                        var name: String = \"abc\"\n                    }\n                \"\"\").first?.variables.first?.attributes).to(equal([\n                    \"UserDefaults\": [\n                        Attribute(\n                            name: \"UserDefaults\",\n                            arguments: [\"key\": \"\\\"user_name\\\"\" as NSString, \"1\": \"123\" as NSString],\n                            description: \"@UserDefaults(key: \\\"user_name\\\", 123)\"\n                        )\n                    ]\n                ]))\n                }\n\n                it(\"extracts and parses attributes correctly\") {\n                    let expectedArguments: [String: NSObject] = [\n                        \"path\": \"\\\"provisioning_features.is_enabled\\\"\" as NSString,\n                        \"remoteFeatureName\": \"\\\"provision_enabled\\\"\" as NSString\n                    ]\n                    let arguments = parse(\n\"\"\"\nclass Foo {\n@FeatureFlag(remoteFeatureName: \"provision_enabled\", path: \"provisioning_features.is_enabled\", description: nil)\nvar variable: Bool\n}\n\"\"\"\n                    ).first?.variables.first?.attributes[\"FeatureFlag\"]?.first?.arguments\n                    expect(arguments).toNot(beNil())\n                    if let parsedArguments = arguments {\n                        for expected in expectedArguments {\n                            expect(parsedArguments[expected.key]).to(equal(expected.value))\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Parsing/FileParser_MethodsSpec.swift",
    "content": "import Quick\nimport Nimble\nimport PathKit\n#if SWIFT_PACKAGE\nimport Foundation\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\nimport SourceryFramework\nimport SourceryRuntime\n\nclass Bar {}\nclass FileParserMethodsSpec: QuickSpec {\n    // swiftlint:disable function_body_length\n    override func spec() {\n        describe(\"FileParser\") {\n            describe(\"parseMethod\") {\n                func parse(_ code: String) -> [Type] {\n                    guard let parserResult = try? makeParser(for: code).parse() else { fail(); return [] }\n                    return parserResult.types\n                }\n\n                func parseFunctions(_ code: String) -> [SourceryMethod] {\n                    guard let parserResult = try? makeParser(for: code).parse() else { fail(); return [] }\n                    return parserResult.functions\n                }\n\n                it(\"extracts methods with inout properties\") {\n                    let methods = parse(\"\"\"\n                    class Foo {\n                        func fooInOut(some: Int, anotherSome: inout String)\n                    }\n                    \"\"\")[0].methods\n\n                    expect(methods[0]).to(equal(Method(name: \"fooInOut(some: Int, anotherSome: inout String)\", selectorName: \"fooInOut(some:anotherSome:)\", parameters: [\n                        MethodParameter(name: \"some\", index: 0, typeName: TypeName(name: \"Int\")),\n                        MethodParameter(name: \"anotherSome\", index: 1, typeName: TypeName(name: \"inout String\"), isInout: true)\n                    ], returnTypeName: TypeName(name: \"Void\"), definedInTypeName: TypeName(name: \"Foo\"))))\n                }\n                \n                it(\"extracts methods with inout closure\") {\n                    let method = parse(\n                    \"\"\"\n                    class Foo {\n                        func fooInOut(some: Int, anotherSome: (inout String) -> Void)\n                    }\n                    \"\"\"\n                    )[0].methods.first\n                    \n                    expect(method).to(equal(Method(name: \"fooInOut(some: Int, anotherSome: (inout String) -> Void)\", selectorName: \"fooInOut(some:anotherSome:)\", parameters: [\n                        MethodParameter(name: \"some\", index: 0, typeName: TypeName(name: \"Int\")),\n                        MethodParameter(name: \"anotherSome\", index: 1, typeName: TypeName.buildClosure(ClosureParameter(typeName: TypeName.String, isInout: true), returnTypeName: .Void))\n                    ], returnTypeName: .Void, definedInTypeName: TypeName(name: \"Foo\"))))\n                }\n                \n                it(\"extracts methods with async closure\") {\n                    let method = parse(\n                    \"\"\"\n                    class Foo {\n                        func fooAsync(some: Int, anotherSome: (String) async -> Void)\n                    }\n                    \"\"\"\n                    )[0].methods.first\n                    \n                    expect(method).to(equal(Method(name: \"fooAsync(some: Int, anotherSome: (String) async -> Void)\", selectorName: \"fooAsync(some:anotherSome:)\", parameters: [\n                        MethodParameter(name: \"some\", index: 0, typeName: TypeName(name: \"Int\")),\n                        MethodParameter(name: \"anotherSome\", index: 1, typeName: TypeName(name: \"(String) async -> Void\", closure: ClosureType(name: \"(String) async -> Void\", parameters: [ClosureParameter(typeName: TypeName(name: \"String\"))], returnTypeName: .Void, asyncKeyword: \"async\")))\n                    ], returnTypeName: .Void, definedInTypeName: TypeName(name: \"Foo\"))))\n                }\n\n                it(\"extracts methods with attributes\") {\n                    let methods = parse(\"\"\"\n                                        class Foo {\n                                        @discardableResult func foo() ->\n                                                                    Foo\n                                        }\n                                        \"\"\")[0].methods\n\n                    expect(methods[0]).to(equal(Method(name: \"foo()\", selectorName: \"foo\", returnTypeName: TypeName(name: \"Foo\"), attributes: [\"discardableResult\": [Attribute(name: \"discardableResult\")]], definedInTypeName: TypeName(name: \"Foo\"))))\n                }\n\n                it(\"extracts methods with escaping closure attribute correctly\") {\n                    let methods = parse(\"\"\"\n                                        protocol ClosureProtocol {\n                                            func setClosure(_ closure: @escaping () -> Void)\n                                        }\n                                        \"\"\")[0].methods\n\n                    expect(methods[0]).to(equal(\n                                            Method(name: \"setClosure(_ closure: @escaping () -> Void)\",\n                                                   selectorName: \"setClosure(_:)\",\n                                                   parameters: [\n                                                    MethodParameter(argumentLabel: nil, name: \"closure\", index: 0, typeName: .buildClosure(TypeName(name: \"Void\"), attributes: [\"escaping\": [Attribute(name: \"escaping\")]]), type: nil, defaultValue: nil, annotations: [:], isInout: false)\n                                                   ],\n                                                   returnTypeName: TypeName(name: \"Void\"),\n                                                   attributes: [:],\n                                                   definedInTypeName: TypeName(name: \"ClosureProtocol\")))\n                    )\n                }\n\n                it(\"extracts protocol methods properly\") {\n                    let methods = parse(\"\"\"\n                    protocol Foo {\n                        init() throws; func bar(some: Int) throws ->Bar\n                        @discardableResult func foo() ->\n                                                    Foo\n                        func fooBar() rethrows ; func fooVoid();\n                        func fooAsync() async; func barAsync() async throws;\n                        func fooInOut(some: Int, anotherSome: inout String)\n                        func fooTypedThrows() throws(CustomError); func fooTypedThrowsAsync() async throws(CustomError) \n                        func rethrowing<E>(block: () throws(E) -> Int) throws(E) -> Int where E: Error\n                    }\n                    \"\"\")[0].methods\n                    expect(methods[0]).to(equal(Method(name: \"init()\", selectorName: \"init\", parameters: [], returnTypeName: TypeName(name: \"Foo\"), throws: true, isStatic: true, definedInTypeName: TypeName(name: \"Foo\"))))\n                    expect(methods[1]).to(equal(Method(name: \"bar(some: Int)\", selectorName: \"bar(some:)\", parameters: [\n                        MethodParameter(name: \"some\", index: 0, typeName: TypeName(name: \"Int\"))\n                        ], returnTypeName: TypeName(name: \"Bar\"), throws: true, definedInTypeName: TypeName(name: \"Foo\"))))\n                    expect(methods[2]).to(equal(Method(name: \"foo()\", selectorName: \"foo\", returnTypeName: TypeName(name: \"Foo\"), attributes: [\"discardableResult\": [Attribute(name: \"discardableResult\")]], definedInTypeName: TypeName(name: \"Foo\"))))\n                    expect(methods[3]).to(equal(Method(name: \"fooBar()\", selectorName: \"fooBar\", returnTypeName: TypeName(name: \"Void\"), throws: false, rethrows: true, definedInTypeName: TypeName(name: \"Foo\"))))\n                    expect(methods[4]).to(equal(Method(name: \"fooVoid()\", selectorName: \"fooVoid\", returnTypeName: TypeName(name: \"Void\"), definedInTypeName: TypeName(name: \"Foo\"))))\n                    expect(methods[5]).to(equal(Method(name: \"fooAsync()\", selectorName: \"fooAsync\", returnTypeName: TypeName(name: \"Void\"), isAsync: true, definedInTypeName: TypeName(name: \"Foo\"))))\n                    expect(methods[6]).to(equal(Method(name: \"barAsync()\", selectorName: \"barAsync\", returnTypeName: TypeName(name: \"Void\"), isAsync: true, throws: true, definedInTypeName: TypeName(name: \"Foo\"))))\n                    expect(methods[7]).to(equal(Method(name: \"fooInOut(some: Int, anotherSome: inout String)\", selectorName: \"fooInOut(some:anotherSome:)\", parameters: [\n                        MethodParameter(name: \"some\", index: 0, typeName: TypeName(name: \"Int\")),\n                        MethodParameter(name: \"anotherSome\", index: 1, typeName: TypeName(name: \"inout String\"), isInout: true)\n                        ], returnTypeName: TypeName(name: \"Void\"), definedInTypeName: TypeName(name: \"Foo\"))))\n                    expect(methods[8]).to(equal(Method(name: \"fooTypedThrows()\", selectorName: \"fooTypedThrows\", returnTypeName: TypeName(name: \"Void\"), throws: true, throwsTypeName: TypeName(name: \"CustomError\"), rethrows: false, definedInTypeName: TypeName(name: \"Foo\"))))\n                    expect(methods[9]).to(equal(Method(name: \"fooTypedThrowsAsync()\", selectorName: \"fooTypedThrowsAsync\", returnTypeName: TypeName(name: \"Void\"), isAsync: true, throws: true, throwsTypeName: TypeName(name: \"CustomError\"), rethrows: false, definedInTypeName: TypeName(name: \"Foo\"))))\n                    expect(methods[9].isThrowsTypeGeneric).to(beFalse())\n                    expect(methods[10]).to(equal(Method(name: \"rethrowing<E>(block: () throws(E) -> Int)\", selectorName: \"rethrowing(block:)\", parameters: [\n                        MethodParameter(name: \"block\", index: 0, typeName: TypeName(name: \"() throws(E) -> Int\", closure: ClosureType(name: \"() throws(E) -> Int\", parameters: [], returnTypeName: TypeName(name: \"Int\"), returnType: nil, asyncKeyword: nil, throwsOrRethrowsKeyword: \"throws\", throwsTypeName: TypeName(name: \"E\")))),\n                    ], returnTypeName: TypeName(name: \"Int where E: Error\"), isAsync: false, throws: true, throwsTypeName: TypeName(name: \"E\"), rethrows: false, definedInTypeName: TypeName(name: \"Foo\"), genericRequirements: [\n                        GenericRequirement.init(leftType: AssociatedType(name: \"E\", typeName: nil, type: nil), rightType: GenericTypeParameter(typeName: TypeName(\"Error\"), type: nil), relationship: .conformsTo)\n                    ], genericParameters: [\n                        GenericParameter(name: \"E\", inheritedTypeName: TypeName(\"Error\"))\n                    ])))\n                    expect(methods[10].isThrowsTypeGeneric).to(beTrue())\n\n                }\n\n                it(\"extracts class method properly\") {\n                    expect(parse(\"class Foo { class func foo() {} }\")).to(equal([\n                        Class(name: \"Foo\", methods: [\n                            Method(name: \"foo()\", selectorName: \"foo\", parameters: [], isClass: true, modifiers: [Modifier(name: \"class\")], definedInTypeName: TypeName(name: \"Foo\"))\n                            ])\n                        ]))\n                }\n\n                it(\"extracts enum methods properly\") {\n                    expect(parse(\"enum Baz { case a; func foo() {} }\")).to(equal([\n                        Enum(name: \"Baz\",\n                             cases: [\n                            EnumCase(name: \"a\")\n                            ],\n                             methods: [\n                                Method(name: \"foo()\", selectorName: \"foo\", parameters: [], definedInTypeName: TypeName(name: \"Baz\"))\n                            ])\n                        ]))\n                }\n\n                it(\"extracts struct methods properly\") {\n                    expect(parse(\"struct Baz { func foo() {} }\")).to(equal([\n                        Struct(name: \"Baz\", methods: [\n                            Method(name: \"foo()\", selectorName: \"foo\", parameters: [], definedInTypeName: TypeName(name: \"Baz\"))\n                            ])\n                        ]))\n                }\n\n                context(\"extracts distirbuted modifier\") {\n                    it(\"as item in modifiers\") {\n                        let method = parseFunctions(\"distributed func foo() {}\")\n                        expect(method).to(equal([\n                            Method(name: \"foo()\", selectorName: \"foo\", parameters: [], modifiers: [.init(name: \"distributed\")])\n                        ]))\n                    }\n\n                    it(\"and reports isDistributed correctly\") {\n                        let method = parseFunctions(\"distributed func foo() {}\")\n                        expect(method.first?.isDistributed).to(beTrue())\n                    }\n                }\n\n                it(\"extracts static method properly\") {\n                    expect(parse(\"class Foo { static func foo() {} }\")).to(equal([\n                        Class(name: \"Foo\", methods: [\n                            Method(name: \"foo()\", selectorName: \"foo\", isStatic: true, modifiers: [Modifier(name: \"static\")], definedInTypeName: TypeName(name: \"Foo\"))\n                            ])\n                        ]))\n                }\n\n                it(\"extracts free functions properly\") {\n                    expect(parseFunctions(\"func foo() {}\")).to(equal([\n                        Method(name: \"foo()\", selectorName: \"foo\", isStatic: false, definedInTypeName: nil)\n                    ]))\n                }\n\n                it(\"extracts free functions properly with private access\") {\n                    expect(parseFunctions(\"private func foo() {}\")).to(equal([\n                        Method(\n                            name: \"foo()\",\n                            selectorName: \"foo\",\n                            accessLevel: (.private),\n                            isStatic: false,\n                            modifiers: [Modifier(name: \"private\")],\n                            definedInTypeName: nil)\n                    ]))\n                }\n\n                context(\"given method with parameters\") {\n                    it(\"extracts method with single parameter properly\") {\n                        expect(parse(\"class Foo { func foo(bar: Int) {} }\")).to(equal([\n                            Class(name: \"Foo\", methods: [\n                                Method(name: \"foo(bar: Int)\", selectorName: \"foo(bar:)\", parameters: [\n                                    MethodParameter(name: \"bar\", index: 0, typeName: TypeName(name: \"Int\"))], definedInTypeName: TypeName(name: \"Foo\"))\n                                ])\n                            ]))\n                    }\n                    \n                    it(\"extracts method with variadic parameter properly\") {\n                        expect(parse(\"class Foo { func foo(bar: Int...) {} }\")).to(equal([\n                            Class(name: \"Foo\", methods: [\n                                Method(name: \"foo(bar: Int...)\", selectorName: \"foo(bar:)\", parameters: [\n                                        MethodParameter(name: \"bar\", index: 0, typeName: TypeName(name: \"Int\"), isVariadic: true)], definedInTypeName: TypeName(name: \"Foo\"))\n                                ])\n                            ]))\n                    }\n\n                    it(\"extracts method with single set parameter properly\") {\n                        let type = parse(\"protocol Foo { func someMethod(aValue: Set<Int>) }\").first\n                        expect(type).to(equal(\n                            Protocol(name: \"Foo\", methods: [\n                                Method(name: \"someMethod(aValue: Set<Int>)\", selectorName: \"someMethod(aValue:)\", parameters: [\n                                    MethodParameter(name: \"aValue\", index: 0, typeName: .buildSet(of: .Int))], definedInTypeName: TypeName(name: \"Foo\"))\n                                ])\n                            ))\n                    }\n\n                    it(\"extracts method with two parameters properly\") {\n                        expect(parse(\"class Foo { func foo( bar:   Int,   foo : String  ) {} }\")).to(equal([\n                            Class(name: \"Foo\", methods: [\n                                Method(name: \"foo(bar: Int, foo: String)\", selectorName: \"foo(bar:foo:)\", parameters: [\n                                    MethodParameter(name: \"bar\", index: 0, typeName: TypeName(name: \"Int\")),\n                                    MethodParameter(name: \"foo\", index: 1, typeName: TypeName(name: \"String\"))\n                                    ], returnTypeName: TypeName(name: \"Void\"), definedInTypeName: TypeName(name: \"Foo\"))\n                                ])\n                            ]))\n                    }\n\n                    it(\"extracts method with complex parameters properly\") {\n                        expect(parse(\"class Foo { func foo( bar: [String: String],   foo : ((String, String) -> Void), other: Optional<String>) {} }\"))\n                            .to(equal([\n                                Class(name: \"Foo\", methods: [\n                                    Method(name: \"foo(bar: [String: String], foo: (String, String) -> Void, other: Optional<String>)\", selectorName: \"foo(bar:foo:other:)\", parameters: [\n                                        MethodParameter(name: \"bar\", index: 0, typeName: TypeName(name: \"[String: String]\", dictionary: DictionaryType(name: \"[String: String]\", valueTypeName: TypeName(name: \"String\"), keyTypeName: TypeName(name: \"String\")), generic: GenericType(name: \"Dictionary\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"String\")), GenericTypeParameter(typeName: TypeName(name: \"String\"))]))),\n                                        MethodParameter(name: \"foo\", index: 1, typeName: TypeName(name: \"(String, String) -> Void\", closure: ClosureType(name: \"(String, String) -> Void\", parameters: [\n                                            ClosureParameter(typeName: TypeName(name: \"String\")),\n                                            ClosureParameter(typeName: TypeName(name: \"String\"))\n                                            ], returnTypeName: TypeName(name: \"Void\")))),\n                                        MethodParameter(name: \"other\", index: 2, typeName: TypeName(name: \"Optional<String>\"))\n                                        ], returnTypeName: TypeName(name: \"Void\"), definedInTypeName: TypeName(name: \"Foo\"))\n                                    ])\n                                ]))\n                    }\n\n                    it(\"extracts method with parameter with two names\") {\n                        expect(parse(\"class Foo { func foo(bar Bar: Int, _ foo: Int, fooBar: (_ a: Int, _ b: Int) -> ()) {} }\")).to(equal([\n                            Class(name: \"Foo\", methods: [\n                                Method(name: \"foo(bar Bar: Int, _ foo: Int, fooBar: (_ a: Int, _ b: Int) -> ())\", selectorName: \"foo(bar:_:fooBar:)\", parameters: [\n                                    MethodParameter(argumentLabel: \"bar\", name: \"Bar\", index: 0, typeName: TypeName(name: \"Int\")),\n                                    MethodParameter(argumentLabel: nil, name: \"foo\", index: 1, typeName: TypeName(name: \"Int\")),\n                                    MethodParameter(name: \"fooBar\", index: 2, typeName: TypeName(name: \"(_ a: Int, _ b: Int) -> ()\", closure: ClosureType(name: \"(_ a: Int, _ b: Int) -> ()\", parameters: [\n                                        ClosureParameter(argumentLabel: nil, name: \"a\", typeName: TypeName(name: \"Int\")),\n                                        ClosureParameter(argumentLabel: nil, name: \"b\", typeName: TypeName(name: \"Int\"))\n                                        ], returnTypeName: TypeName(name: \"()\"))))\n                                    ], returnTypeName: TypeName(name: \"Void\"), definedInTypeName: TypeName(name: \"Foo\"))\n                                ])\n                            ]))\n                    }\n\n                    it(\"extracts parameters having inner closure\") {\n                        expect(parse(\"class Foo { func foo(a: Int) { let handler = { (b:Int) in } } }\")).to(equal([\n                            Class(name: \"Foo\", methods: [\n                                Method(name: \"foo(a: Int)\", selectorName: \"foo(a:)\", parameters: [\n                                    MethodParameter(argumentLabel: \"a\", name: \"a\", index: 0, typeName: TypeName(name: \"Int\"))\n                                    ], returnTypeName: TypeName(name: \"Void\"), definedInTypeName: TypeName(name: \"Foo\"))\n                                ])\n                            ]))\n\n                    }\n\n                    it(\"extracts inout parameters\") {\n                        expect(parse(\"class Foo { func foo(a: inout Int) {} }\")).to(equal([\n                            Class(name: \"Foo\", methods: [\n                                Method(name: \"foo(a: inout Int)\", selectorName: \"foo(a:)\", parameters: [\n                                    MethodParameter(argumentLabel: \"a\", name: \"a\", index: 0, typeName: TypeName(name: \"inout Int\"), isInout: true)\n                                    ], returnTypeName: TypeName(name: \"Void\"), definedInTypeName: TypeName(name: \"Foo\"))\n                                ])\n                            ]))\n                    }\n\n                    it(\"extracts correct typeName when a nested type shadows a global type\") {\n                        let code = \"\"\"\n                        protocol Foo {\n                        }\n\n                        class Bar {\n                            struct Foo {\n                            }\n\n                            func doSomething(with foo: Foo) -> Foo {\n                            }\n                        }\n                        \"\"\"\n\n                        let fooProtocol = Protocol(name: \"Foo\")\n                        let fooStruct = Struct(name: \"Foo\")\n                        let barClass = Class(\n                            name: \"Bar\",\n                            methods: [\n                                Method(name: \"doSomething(with foo: Bar.Foo)\", selectorName: \"doSomething(with:)\", parameters: [\n                                    MethodParameter(argumentLabel: \"with\", name: \"foo\", index: 0, typeName: TypeName(\"Bar.Foo\"), type: fooStruct)\n                                ], returnTypeName: TypeName(\"Bar.Foo\"), definedInTypeName: TypeName(\"Bar\"))\n                            ],\n                            containedTypes: [\n                                fooStruct\n                            ]\n                        )\n\n                        let result = parse(code)\n                        expect(result).to(equal([fooProtocol, barClass, fooStruct]))\n                    }\n\n                    context(\"given parameter default value\") {\n                        it(\"extracts simple default value\") {\n                            expect(parse(\"class Foo { func foo(a: Int? = nil) {} }\")).to(equal([\n                                Class(name: \"Foo\", methods: [\n                                    Method(name: \"foo(a: Int? = nil)\", selectorName: \"foo(a:)\", parameters: [\n                                        MethodParameter(argumentLabel: \"a\", name: \"a\", index: 0, typeName: TypeName(name: \"Int?\"), defaultValue: \"nil\")\n                                        ], returnTypeName: TypeName(name: \"Void\"), definedInTypeName: TypeName(name: \"Foo\"))\n                                    ])\n                                ]))\n                        }\n\n                        it(\"extracts complex default value\") {\n                            expect(parse(\"class Foo { func foo(a: Int? = \\n\\t{ return nil } \\n\\t ) {} }\")).to(equal([\n                                Class(name: \"Foo\", methods: [\n                                    Method(name: \"foo(a: Int? = { return nil })\", selectorName: \"foo(a:)\", parameters: [\n                                        MethodParameter(argumentLabel: \"a\", name: \"a\", index: 0, typeName: TypeName(name: \"Int?\"), defaultValue: \"{ return nil }\")\n                                        ], returnTypeName: TypeName(name: \"Void\"), definedInTypeName: TypeName(name: \"Foo\"))\n                                    ])\n                                ]))\n                        }\n                    }\n\n                    context(\"given parameters are split between lines\") {\n                        it(\"extracts method name with parametes separated by line break\") {\n                            let result = parse(\"\"\"\n                            class Foo {\n                                func foo(bar: [String: String],\n                                         foo: ((String, String) -> Void),\n                                         other: Optional<String>) {}\n                            }\n                            \"\"\")\n\n                            expect(result)\n                            .to(equal([\n                                Class(name: \"Foo\", methods: [\n                                    Method(name: \"foo(bar: [String: String], foo: (String, String) -> Void, other: Optional<String>)\",\n                                           selectorName: \"foo(bar:foo:other:)\", parameters: [\n                                        MethodParameter(name: \"bar\", index: 0, typeName: TypeName(name: \"[String: String]\", dictionary: DictionaryType(name: \"[String: String]\", valueTypeName: TypeName(name: \"String\"), keyTypeName: TypeName(name: \"String\")), generic: GenericType(name: \"Dictionary\", typeParameters: [GenericTypeParameter(typeName: TypeName(name: \"String\")), GenericTypeParameter(typeName: TypeName(name: \"String\"))]))),\n                                        MethodParameter(name: \"foo\", index: 1, typeName: TypeName(name: \"(String, String) -> Void\", closure: ClosureType(name: \"(String, String) -> Void\", parameters: [\n                                            ClosureParameter(typeName: TypeName(name: \"String\")),\n                                            ClosureParameter(typeName: TypeName(name: \"String\"))\n                                            ], returnTypeName: TypeName(name: \"Void\")))),\n                                        MethodParameter(name: \"other\", index: 2, typeName: TypeName(name: \"Optional<String>\"))\n                                        ], returnTypeName: TypeName(name: \"Void\"), definedInTypeName: TypeName(name: \"Foo\"))\n                                    ])\n                                ]))\n                        }\n                    }\n                }\n\n                context(\"given generic method\") {\n                    func assertMethods(_ types: [Type]) {\n                        let fooType = types.first(where: { $0.name == \"Foo\" })\n                        let foo = fooType?.methods.first\n\n//                        expect(foo?.name).to(equal(\"foo<T: Equatable>()\"))\n//                        expect(foo?.selectorName).to(equal(\"foo\"))\n//                        expect(foo?.shortName).to(equal(\"foo<T: Equatable>\"))\n//                        expect(foo?.callName).to(equal(\"foo\"))\n                        expect(foo?.returnTypeName).to(equal(TypeName(name: \"Bar? where \\nT: Equatable\")))\n//                        expect(foo?.unwrappedReturnTypeName).to(equal(\"Bar\"))\n//                        expect(foo?.definedInTypeName).to(equal(TypeName(name: \"Foo\")))\n//\n//                        expect(fooBar?.name).to(equal(\"fooBar<T>(bar: T)\"))\n//                        expect(fooBar?.selectorName).to(equal(\"fooBar(bar:)\"))\n//                        expect(fooBar?.shortName).to(equal(\"fooBar<T>\"))\n//                        expect(fooBar?.callName).to(equal(\"fooBar\"))\n//                        expect(fooBar?.returnTypeName).to(equal(TypeName(name: \"Void where T: Equatable\")))\n//                        expect(fooBar?.unwrappedReturnTypeName).to(equal(\"Void\"))\n//                        expect(fooBar?.definedInTypeName).to(equal(TypeName(name: \"Foo\")))\n                    }\n\n                    it(\"extracts class method properly\") {\n                        let types = parse(\"\"\"\n                        class Foo {\n                            func foo<T: Equatable>() -> Bar?\\n where \\nT: Equatable {\n                            };  /// Asks a Duck to quack\n                                ///\n                                /// - Parameter times: How many times the Duck will quack\n                            func fooBar<T>(bar: T) where T: Equatable { }\n                        };\n                        class Bar {}\n                        \"\"\")\n                        assertMethods(types)\n                    }\n\n                    it(\"extracts protocol method properly\") {\n                        let types = parse(\"\"\"\n                        protocol Foo {\n                            func foo<T: Equatable>(t: T) -> Bar?\\n where \\nT: Equatable  /// Asks a Duck to quack\n                                ///\n                                /// - Parameter times: How many times the Duck will quack\n                            func fooBar<T>(bar: T) where T: Equatable\n                        };\n                        class Bar {}\n                        \"\"\")\n                        assertMethods(types)\n                    }\n                }\n\n                context(\"given method with return type\") {\n                    it(\"extracts tuple return type correctly\") {\n                        let expectedTypeName = TypeName(name: \"(Bar, Int)\", tuple: TupleType(name: \"(Bar, Int)\", elements: [\n                            TupleElement(name: \"0\", typeName: TypeName(name: \"Bar\"), type: Class(name: \"Bar\")),\n                            TupleElement(name: \"1\", typeName: TypeName(name: \"Int\"))\n                            ]))\n\n                        let types = parse(\"class Foo { func foo() -> (Bar, Int) { } }; class Bar {}\")\n                        let method = types.first(where: { $0.name == \"Foo\" })?.methods.first\n\n                        expect(method?.returnTypeName).to(equal(expectedTypeName))\n                        expect(method?.returnTypeName.isTuple).to(beTrue())\n                    }\n\n                    it(\"extracts closure return type correcty\") {\n                        let types = parse(\"class Foo { func foo() -> (Int, Int) -> () { } }\")\n                        let method = types.last?.methods.first\n\n                        expect(method?.returnTypeName).to(equal(TypeName(name: \"(Int, Int) -> ()\", closure: ClosureType(name: \"(Int, Int) -> ()\", parameters: [\n                            ClosureParameter(typeName: TypeName(name: \"Int\")),\n                            ClosureParameter(typeName: TypeName(name: \"Int\"))\n                            ], returnTypeName: TypeName(name: \"()\")))))\n                        expect(method?.returnTypeName.isClosure).to(beTrue())\n                    }\n\n                    it(\"extracts optional closure return type correctly\") {\n                        let types = parse(\"protocol Foo { func foo() -> (() -> Void)? }\")\n                        let method = types.last?.methods.first\n\n                        expect(method?.returnTypeName).to(equal(TypeName(name: \"(() -> Void)?\", closure: ClosureType(name: \"() -> Void\", parameters: [\n                        ], returnTypeName: TypeName(name: \"Void\")))))\n                        expect(method?.returnTypeName.isClosure).to(beTrue())\n                    }\n\n                    it(\"extracts optional closure return type correctly\") {\n                        let types = parse(\"protocol Foo { func foo() -> (() -> Void)? }\")\n                        let method = types.last?.methods.first\n\n                        expect(method?.returnTypeName).to(equal(TypeName(name: \"(() -> Void)?\", closure: ClosureType(name: \"() -> Void\", parameters: [\n                        ], returnTypeName: TypeName(name: \"Void\")))))\n                        expect(method?.returnTypeName.isClosure).to(beTrue())\n                    }\n                }\n\n                context(\"given initializer\") {\n                    it(\"extracts initializer properly\") {\n                        let fooType = Class(name: \"Foo\")\n                        let expectedInitializer = Method(name: \"init()\", selectorName: \"init\", returnTypeName: TypeName(name: \"Foo\"), isStatic: true, definedInTypeName: TypeName(name: \"Foo\"))\n                        expectedInitializer.returnType = fooType\n                        fooType.rawMethods = [Method(name: \"foo()\", selectorName: \"foo\", definedInTypeName: TypeName(name: \"Foo\")), expectedInitializer]\n\n                        let type = parse(\"class Foo { func foo() {}; init() {} }\").first\n                        let initializer = type?.initializers.first\n\n                        expect(initializer).to(equal(expectedInitializer))\n                    }\n\n                    it(\"extracts failable initializer properly\") {\n                        let fooType = Class(name: \"Foo\")\n                        let expectedInitializer = Method(name: \"init?()\", selectorName: \"init\", returnTypeName: TypeName(name: \"Foo?\"), isStatic: true, isFailableInitializer: true, definedInTypeName: TypeName(name: \"Foo\"))\n                        expectedInitializer.returnType = fooType\n                        fooType.rawMethods = [Method(name: \"foo()\", selectorName: \"foo\", definedInTypeName: TypeName(name: \"Foo\")), expectedInitializer]\n\n                        let type = parse(\"class Foo { func foo() {}; init?() {} }\").first\n                        let initializer = type?.initializers.first\n\n                        expect(initializer).to(equal(expectedInitializer))\n                    }\n                }\n\n                it(\"extracts method definedIn type name\") {\n                    expect(parse(\"class Bar { func foo() {} }\")).to(equal([\n                        Class(name: \"Bar\", methods: [\n                            Method(name: \"foo()\", selectorName: \"foo\", definedInTypeName: TypeName(name: \"Bar\"))\n                            ])\n                        ]))\n                }\n\n                it(\"extracts method annotations\") {\n                    expect(parse(\"class Foo {\\n // sourcery: annotation\\nfunc foo() {} }\")).to(equal([\n                        Class(name: \"Foo\", methods: [\n                            Method(name: \"foo()\", selectorName: \"foo\", annotations: [\"annotation\": NSNumber(value: true)], definedInTypeName: TypeName(name: \"Foo\"))\n                            ])\n                        ]))\n                }\n\n                it(\"extracts method annotations from initializers\") {\n                    expect(parse(\"\"\"\n                    class Foo {\n                        // sourcery: annotation\n                        init() {\n                        }\n                    }\n                    \"\"\")).to(equal([\n                        Class(name: \"Foo\", methods: [\n                                Method(name: \"init()\", selectorName: \"init\", returnTypeName: TypeName(name: \"Foo\"), isStatic: true, annotations: [\"annotation\": NSNumber(value: true)], definedInTypeName: TypeName(name: \"Foo\"))\n                            ])\n                        ]))\n                }\n\n                it(\"extracts method inline annotations\") {\n                    expect(parse(\"class Foo {\\n /* sourcery: annotation */func foo() {} }\")).to(equal([\n                        Class(name: \"Foo\", methods: [\n                            Method(name: \"foo()\", selectorName: \"foo\", annotations: [\"annotation\": NSNumber(value: true)], definedInTypeName: TypeName(name: \"Foo\"))\n                            ])\n                        ]))\n                }\n\n                it(\"extracts parameter annotations\") {\n                    expect(parse(\"class Foo {\\n //sourcery: foo\\nfunc foo(\\n// sourcery: annotationA\\na: Int,\\n// sourcery: annotationB\\nb: Int) {}\\n//sourcery: bar\\nfunc bar(\\n// sourcery: annotationA\\na: Int,\\n// sourcery: annotationB\\nb: Int) {} }\")).to(equal([\n                        Class(name: \"Foo\", methods: [\n                            Method(name: \"foo(a: Int, b: Int)\", selectorName: \"foo(a:b:)\", parameters: [\n                                MethodParameter(name: \"a\", index: 0, typeName: TypeName(name: \"Int\"), annotations: [\"annotationA\": NSNumber(value: true)]),\n                                MethodParameter(name: \"b\", index: 1, typeName: TypeName(name: \"Int\"), annotations: [\"annotationB\": NSNumber(value: true)])\n                                ], annotations: [\"foo\": NSNumber(value: true)], definedInTypeName: TypeName(name: \"Foo\")),\n                            Method(name: \"bar(a: Int, b: Int)\", selectorName: \"bar(a:b:)\", parameters: [\n                                MethodParameter(name: \"a\", index: 0, typeName: TypeName(name: \"Int\"), annotations: [\"annotationA\": NSNumber(value: true)]),\n                                MethodParameter(name: \"b\", index: 1, typeName: TypeName(name: \"Int\"), annotations: [\"annotationB\": NSNumber(value: true)])\n                                ], annotations: [\"bar\": NSNumber(value: true)], definedInTypeName: TypeName(name: \"Foo\"))\n                            ])\n                        ]))\n                }\n\n                it(\"extracts parameter inline annotations\") {\n                    expect(parse(\"class Foo {\\n//sourcery:begin:func\\n //sourcery: foo\\nfunc foo(/* sourcery: annotationA */a: Int, /* sourcery: annotationB*/b: Int) {}\\n//sourcery: bar\\nfunc bar(/* sourcery: annotationA */a: Int, /* sourcery: annotationB*/b: Int) {}\\n//sourcery:end}\")).to(equal([\n                        Class(name: \"Foo\", methods: [\n                            Method(name: \"foo(a: Int, b: Int)\", selectorName: \"foo(a:b:)\", parameters: [\n                                MethodParameter(name: \"a\", index: 0, typeName: TypeName(name: \"Int\"), annotations: [\"annotationA\": NSNumber(value: true), \"func\": NSNumber(value: true)]),\n                                MethodParameter(name: \"b\", index: 1, typeName: TypeName(name: \"Int\"), annotations: [\"annotationB\": NSNumber(value: true), \"func\": NSNumber(value: true)])\n                                ], annotations: [\"foo\": NSNumber(value: true), \"func\": NSNumber(value: true)], definedInTypeName: TypeName(name: \"Foo\")),\n                            Method(name: \"bar(a: Int, b: Int)\", selectorName: \"bar(a:b:)\", parameters: [\n                                MethodParameter(name: \"a\", index: 0, typeName: TypeName(name: \"Int\"), annotations: [\"annotationA\": NSNumber(value: true), \"func\": NSNumber(value: true)]),\n                                MethodParameter(name: \"b\", index: 1, typeName: TypeName(name: \"Int\"), annotations: [\"annotationB\": NSNumber(value: true), \"func\": NSNumber(value: true)])\n                                ], annotations: [\"bar\": NSNumber(value: true), \"func\": NSNumber(value: true)], definedInTypeName: TypeName(name: \"Foo\"))\n                            ])\n                        ]))\n                }\n\n                it(\"extracts parameter inline prefix and suffix annotations\") {\n                    let parsed = parse(\"\"\"\n                                            class Foo {\n                                                func foo(paramA: String, // sourcery: anAnnotation = \"PARAM A AND METHOD ONLY\"\n                                                    /* sourcery: testAnnotation=\"PARAM B ONLY\"*/ paramB: String,\n                                                    paramC: String,  // sourcery: anotherAnnotation = \"PARAM C ONLY\"\n                                                    paramD: String\n                                                ) {}\n                                            }\n                                        \"\"\")\n                    expect(parsed).to(equal([\n                        Class(name: \"Foo\", methods: [\n                            Method(name: \"foo(paramA: String, paramB: String, paramC: String, paramD: String)\", selectorName: \"foo(paramA:paramB:paramC:paramD:)\", parameters: [\n                                MethodParameter(name: \"paramA\", index: 0, typeName: TypeName(name: \"String\"), annotations: [\"anAnnotation\": \"PARAM A AND METHOD ONLY\" as NSString]),\n                                MethodParameter(name: \"paramB\", index: 1, typeName: TypeName(name: \"String\"), annotations: [\"testAnnotation\": \"PARAM B ONLY\" as NSString]),\n                                MethodParameter(name: \"paramC\", index: 2, typeName: TypeName(name: \"String\"), annotations: [\"anotherAnnotation\": \"PARAM C ONLY\" as NSString]),\n                                MethodParameter(name: \"paramD\", index: 3, typeName: TypeName(name: \"String\"), annotations: [:]),\n                            ], annotations: [\"anAnnotation\": \"PARAM A AND METHOD ONLY\" as NSString], definedInTypeName: TypeName(name: \"Foo\"))\n                        ])]))\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Parsing/FileParser_ProtocolComposition.swift",
    "content": "import Quick\nimport Nimble\nimport PathKit\nimport Foundation\n#if SWIFT_PACKAGE\nimport Foundation\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\n\nclass FileParserProtocolCompositionSpec: QuickSpec {\n\n    override func spec() {\n        describe(\"FileParser\") {\n            describe(\"parseProtocolComposition\") {\n                func parse(_ code: String) -> [Type] {\n                    guard let parserResult = try? makeParser(for: code).parse() else { fail(); return [] }\n                    return parserResult.types\n                }\n\n                it(\"extracts protocol compositions properly\") {\n                    let types = parse(\"\"\"\n                                            protocol Foo {\n                                                func fooDo()\n                                            }\n\n                                            protocol Bar {\n                                                var bar: String { get }\n                                            }\n\n                                            typealias FooBar = Foo & Bar\n                                            \"\"\")\n                    let protocolComp = types.first(where: { $0 is ProtocolComposition }) as? ProtocolComposition\n\n                    expect(protocolComp).to(equal(\n                        ProtocolComposition(name: \"FooBar\",\n                                            inheritedTypes: [\"Foo\", \"Bar\"],\n                                            composedTypeNames: [\n                                                TypeName(\"Foo\"),\n                                                TypeName(\"Bar\")\n                                            ],\n                                            composedTypes: [\n                                                SourceryProtocol(name: \"Foo\"),\n                                                SourceryProtocol(name: \"Bar\")\n                                            ])\n                    ))\n                }\n\n                it(\"extracts annotations on a protocol composition\") {\n                    let types = parse(\"\"\"\n                                        protocol Foo {\n                                            func fooDo()\n                                        }\n\n                                        protocol Bar {\n                                            var bar: String { get }\n                                        }\n\n                                        // sourcery: TestAnnotation\n                                        typealias FooBar = Foo & Bar\n                                        \"\"\")\n                    let protocolComp = types.first(where: { $0 is ProtocolComposition }) as? ProtocolComposition\n\n                    expect(protocolComp?.annotations).to(equal([\"TestAnnotation\": NSNumber(true)]))\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Parsing/FileParser_SubscriptsSpec.swift",
    "content": "import Quick\nimport Nimble\nimport PathKit\n#if SWIFT_PACKAGE\nimport Foundation\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\n\nclass FileParserSubscriptsSpec: QuickSpec {\n\n    override func spec() {\n        describe(\"FileParser\") {\n            describe(\"parseSubscript\") {\n                func parse(_ code: String) -> [Type] {\n                    guard let parserResult = try? makeParser(for: code).parse() else { fail(); return [] }\n                    return parserResult.types\n                }\n\n                it(\"extracts subscripts properly\") {\n                    let subscripts = parse(\"\"\"\n                                           class Foo {\n                                               final private subscript(_ index: Int, a: String) -> Int {\n                                                   get { return 0 }\n                                                   set { do {} }\n                                               }\n                                               public private(set) subscript(b b: Int) -> String {\n                                                   get { return \\\"\\\"}\n                                                   set { }\n                                               }\n                                           }\n                                           \"\"\").first?.subscripts\n\n                    expect(subscripts?.first).to(equal(\n                        Subscript(\n                            parameters: [\n                                MethodParameter(argumentLabel: nil, name: \"index\", index: 0, typeName: TypeName(name: \"Int\")),\n                                MethodParameter(argumentLabel: \"a\", name: \"a\", index: 1, typeName: TypeName(name: \"String\"))\n                            ],\n                            returnTypeName: TypeName(name: \"Int\"),\n                            accessLevel: (.private, .private),\n                            modifiers: [\n                                Modifier(name: \"final\"),\n                                Modifier(name: \"private\")\n                            ],\n                            annotations: [:],\n                            definedInTypeName: TypeName(name: \"Foo\")\n                        )\n                    ))\n\n                    expect(subscripts?.last).to(equal(\n                        Subscript(\n                            parameters: [\n                                MethodParameter(argumentLabel: \"b\", name: \"b\", index: 0, typeName: TypeName(name: \"Int\"))\n                            ],\n                            returnTypeName: TypeName(name: \"String\"),\n                            accessLevel: (.public, .private),\n                            modifiers: [\n                                Modifier(name: \"public\"),\n                                Modifier(name: \"private\", detail: \"set\")\n                            ],\n                            annotations: [:],\n                            definedInTypeName: TypeName(name: \"Foo\")\n                        )\n                    ))\n                }\n\n                it(\"extracts subscript isMutable state properly\") {\n                    let subscripts = parse(\"\"\"\n                                           protocol Subscript: AnyObject {\n                                             subscript(arg1: String, arg2: Int) -> Bool { get set }\n                                             subscript(with arg1: String, and arg2: Int) -> String { get }\n                                           }\n                                           \"\"\").first?.subscripts\n\n                    expect(subscripts?.first?.isMutable).to(beTrue())\n                    expect(subscripts?.last?.isMutable).to(beFalse())\n                    \n                    expect(subscripts?.first?.readAccess).to(equal(\"internal\"))\n                    expect(subscripts?.first?.writeAccess).to(equal(\"internal\"))\n\n                    expect(subscripts?.last?.readAccess).to(equal(\"internal\"))\n                    expect(subscripts?.last?.writeAccess).to(equal(\"\"))\n                }\n\n                it(\"extracts subscript annotations\") {\n                    let subscripts = parse(\"//sourcery: thisIsClass\\nclass Foo {\\n // sourcery: thisIsSubscript\\nsubscript(\\n\\n/* sourcery: thisIsSubscriptParam */a: Int) -> Int { return 0 } }\").first?.subscripts\n\n                    let subscriptAnnotations = subscripts?.first?.annotations\n                    expect(subscriptAnnotations).to(equal([\"thisIsSubscript\": NSNumber(value: true)]))\n\n                    let paramAnnotations = subscripts?.first?.parameters.first?.annotations\n                    expect(paramAnnotations).to(equal([\"thisIsSubscriptParam\": NSNumber(value: true)]))\n                }\n\n                it(\"extracts generic requirements\") {\n                    let subscripts = parse(\"\"\"\n                                           protocol Subscript: AnyObject {\n                                             subscript(arg1: Int) -> Int? { get set }\n                                             subscript<T: Hashable & Cancellable>(arg1: String) -> T? { get set }\n                                             subscript<T>(with arg1: String) -> T? where T: Cancellable { get }\n                                           }\n                                           \"\"\").first?.subscripts\n\n                    expect(subscripts?[0].isGeneric).to(beFalse())\n                    expect(subscripts?[1].isGeneric).to(beTrue())\n                    expect(subscripts?[2].isGeneric).to(beTrue())\n\n                    expect(subscripts?[1].genericParameters.first?.name).to(equal(\"T\"))\n                    expect(subscripts?[1].genericParameters.first?.inheritedTypeName?.name).to(equal(\"Hashable & Cancellable\"))\n\n                    expect(subscripts?[2].genericParameters.first?.name).to(equal(\"T\"))\n                    expect(subscripts?[2].genericRequirements.first?.leftType.name).to(equal(\"T\"))\n                    expect(subscripts?[2].genericRequirements.first?.relationshipSyntax).to(equal(\":\"))\n                    expect(subscripts?[2].genericRequirements.first?.rightType.typeName.name).to(equal(\"Cancellable\"))\n                }\n                \n                it(\"extracts async and throws\") {\n                    let subscripts = parse(\"\"\"\n                                           protocol Subscript: AnyObject {\n                                             subscript(arg1: Int) -> Int? { get async }\n                                             subscript(arg2: Int) -> Int? { get throws }\n                                             subscript(arg3: Int) -> Int? { get throws(CustomError) }\n                                             subscript(arg4: Int) -> Int? { get async throws }\n                                             subscript(arg5: Int) -> Int? { get async throws(CustomError) }\n                                           }\n                                           \"\"\").first?.subscripts\n\n                    expect(subscripts?[0].isAsync).to(beTrue())\n                    expect(subscripts?[1].isAsync).to(beFalse())\n                    expect(subscripts?[2].isAsync).to(beFalse())\n                    expect(subscripts?[3].isAsync).to(beTrue())\n                    expect(subscripts?[4].isAsync).to(beTrue())\n\n                    expect(subscripts?[0].throws).to(beFalse())\n                    expect(subscripts?[1].throws).to(beTrue())\n                    expect(subscripts?[2].throws).to(beTrue())\n                    expect(subscripts?[3].throws).to(beTrue())\n                    expect(subscripts?[4].throws).to(beTrue())\n\n                    expect(subscripts?[0].throwsTypeName).to(beNil())\n                    expect(subscripts?[1].throwsTypeName).to(beNil())\n                    expect(subscripts?[2].throwsTypeName).to(equal(TypeName(\"CustomError\")))\n                    expect(subscripts?[3].throwsTypeName).to(beNil())\n                    expect(subscripts?[4].throwsTypeName).to(equal(TypeName(\"CustomError\")))\n                }\n                \n                it(\"extracts optional return type\") {\n                    let subscripts = parse(\"\"\"\n                                           protocol Subscript: AnyObject {\n                                             subscript(arg1: Int) -> Int? { get set }\n                                             subscript(arg2: Int) -> Int! { get }\n                                           }\n                                           \"\"\").first?.subscripts\n\n                    expect(subscripts?[0].returnTypeName.name).to(equal(\"Int?\"))\n                    expect(subscripts?[0].returnTypeName.unwrappedTypeName).to(equal(\"Int\"))\n\n                    expect(subscripts?[1].returnTypeName.name).to(equal(\"Int!\"))\n                    expect(subscripts?[1].returnTypeName.unwrappedTypeName).to(equal(\"Int\"))\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Parsing/FileParser_TypeNameSpec.swift",
    "content": "import Quick\nimport Nimble\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\nimport SourceryFramework\nimport SourceryRuntime\n\nclass TypeNameSpec: QuickSpec {\n    override func spec() {\n        describe(\"TypeName\") {\n            func variableTypeName(_ variableType: String) -> TypeName {\n                let wrappedCode =\n                  \"\"\"\n                  struct Wrapper {\n                      var myFoo: \\(variableType)\n                  }\n                  \"\"\"\n                guard let parser = try? makeParser(for: wrappedCode) else { fail(); return TypeName(name: \"\") }\n                let result = try? parser.parse()\n                let variable = result?.types.first?.variables.first\n                return variable?.typeName ?? TypeName(name: \"\")\n            }\n            func funcArgumentTypeName(_ functionArgumentType: String) -> MethodParameter? {\n                let wrappedCode =\n                  \"\"\"\n                  struct Wrapper {\n                    func myFunc(_ arg: \\(functionArgumentType)) {}\n                  }\n                  \"\"\"\n                guard let parser = try? makeParser(for: wrappedCode) else { fail(); return MethodParameter(name: \"\", index: 0, typeName: TypeName(name: \"\")) }\n                let result = try? parser.parse()\n                let methodParameter = result?.types.first?.methods.first?.parameters.first\n                return methodParameter\n            }\n\n            func typeNameFromTypealias(_ code: String) -> TypeName {\n                let wrappedCode = \"typealias Wrapper = \\(code)\"\n                guard let parser = try? makeParser(for: wrappedCode) else { fail(); return TypeName(name: \"\") }\n                let result = try? parser.parse()\n                return result?.typealiases.first?.typeName ?? TypeName(name: \"\")\n            }\n\n            context(\"given optional type with short syntax\") {\n                it(\"reports optional true\") {\n                    expect(variableTypeName(\"Int?\").isOptional).to(beTrue())\n                    expect(variableTypeName(\"Int!\").isOptional).to(beTrue())\n                    expect(variableTypeName(\"Int?\").isImplicitlyUnwrappedOptional).to(beFalse())\n                    expect(variableTypeName(\"Int!\").isImplicitlyUnwrappedOptional).to(beTrue())\n                }\n\n                it(\"reports non-optional type for unwrappedTypeName\") {\n                    expect(variableTypeName(\"Int?\").unwrappedTypeName).to(equal(\"Int\"))\n                    expect(variableTypeName(\"Int!\").unwrappedTypeName).to(equal(\"Int\"))\n                }\n            }\n\n            context(\"given inout type\") {\n                it(\"reports correct unwrappedTypeName\") {\n                    expect(variableTypeName(\"inout String\").unwrappedTypeName).to(equal(\"String\"))\n                }\n            }\n\n            context(\"given optional type with long generic syntax\") {\n                it(\"reports optional true\") {\n                    expect(variableTypeName(\"Optional<Int>\").isOptional).to(beTrue())\n                    expect(variableTypeName(\"Optional<Int>\").isImplicitlyUnwrappedOptional).to(beFalse())\n                }\n\n                it(\"reports non-optional type for unwrappedTypeName\") {\n                    expect(variableTypeName(\"Optional<Int>\").unwrappedTypeName).to(equal(\"Int\"))\n                }\n            }\n\n            context(\"given type wrapped with extra closures\") {\n                it(\"unwraps it completely\") {\n                    expect(variableTypeName(\"(Int)\").unwrappedTypeName).to(equal(\"Int\"))\n                    expect(variableTypeName(\"(Int)?\").unwrappedTypeName).to(equal(\"Int\"))\n                    expect(variableTypeName(\"(Int, Int)\").unwrappedTypeName).to(equal(\"(Int, Int)\"))\n                    expect(variableTypeName(\"(Int)\").unwrappedTypeName).to(equal(\"Int\"))\n                    expect(variableTypeName(\"((Int, Int))\").unwrappedTypeName).to(equal(\"(Int, Int)\"))\n                    expect(variableTypeName(\"((Int, Int) -> ())\").unwrappedTypeName).to(equal(\"(Int, Int) -> ()\"))\n                }\n            }\n\n            context(\"given tuple type\") {\n                it(\"reports tuple correctly\") {\n                    expect(variableTypeName(\"(Int, Int)\").isTuple).to(beTrue())\n                    expect(variableTypeName(\"(Int, Int)?\").isTuple).to(beTrue())\n                    expect(variableTypeName(\"(Int)\").isTuple).to(beFalse())\n                    expect(variableTypeName(\"Int\").isTuple).to(beFalse())\n                    expect(variableTypeName(\"(Int) -> (Int)\").isTuple).to(beFalse())\n                    expect(variableTypeName(\"(Int, Int) -> (Int)\").isTuple).to(beFalse())\n                    expect(variableTypeName(\"(Int, (Int, Int) -> (Int))\").isTuple).to(beTrue())\n                    expect(variableTypeName(\"(Int, (Int, Int))\").isTuple).to(beTrue())\n                    expect(variableTypeName(\"(Int, (Int) -> (Int -> Int))\").isTuple).to(beTrue())\n                }\n            }\n\n            context(\"given array type\") {\n                it(\"reports array correctly\") {\n                    expect(variableTypeName(\"Array<Int>\").isArray).to(beTrue())\n                    expect(variableTypeName(\"[Int]\").isArray).to(beTrue())\n                    expect(variableTypeName(\"[[Int]]\").isArray).to(beTrue())\n                    expect(variableTypeName(\"[[Int: Int]]\").isArray).to(beTrue())\n                }\n\n                it(\"reports dictionary correctly\") {\n                    expect(variableTypeName(\"[Int]\").isDictionary).to(beFalse())\n                    expect(variableTypeName(\"[[Int]]\").isDictionary).to(beFalse())\n                    expect(variableTypeName(\"[[Int: Int]]\").isDictionary).to(beFalse())\n                }\n            }\n\n            context(\"given dictionary type\") {\n                context(\"as name\") {\n                    it(\"reports dictionary correctly\") {\n                        expect(variableTypeName(\"Dictionary<Int, Int>\").isDictionary).to(beTrue())\n                        expect(variableTypeName(\"[Int: Int]\").isDictionary).to(beTrue())\n                        expect(variableTypeName(\"[[Int]: [Int]]\").isDictionary).to(beTrue())\n                        expect(variableTypeName(\"[Int: [Int: Int]]\").isDictionary).to(beTrue())\n                    }\n\n                    it(\"reports array correctly\") {\n                        expect(variableTypeName(\"[Int: Int]\").isArray).to(beFalse())\n                        expect(variableTypeName(\"[[Int]: [Int]]\").isArray).to(beFalse())\n                        expect(variableTypeName(\"[Int: [Int: Int]]\").isArray).to(beFalse())\n                    }\n                }\n            }\n\n            context(\"given set type\") {\n                context(\"as name\") {\n                    it(\"reports set correctly\") {\n                        expect(variableTypeName(\"Set<Int>\").isSet).to(beTrue())\n                    }\n                }\n            }\n\n            context(\"given closure type\") {\n                it(\"reports closure correctly\") {\n                    expect(variableTypeName(\"() -> ()\").isClosure).to(beTrue())\n                    expect(variableTypeName(\"(() -> ())?\").isClosure).to(beTrue())\n                    expect(variableTypeName(\"(Int, Int) -> ()\").isClosure).to(beTrue())\n                    expect(variableTypeName(\"() -> (Int, Int)\").isClosure).to(beTrue())\n                    expect(variableTypeName(\"() -> (Int) -> (Int)\").isClosure).to(beTrue())\n                    expect(variableTypeName(\"((Int) -> (Int)) -> ()\").isClosure).to(beTrue())\n                    expect(variableTypeName(\"(Foo<String>) -> Bool\").isClosure).to(beTrue())\n                    expect(variableTypeName(\"(Int) -> Foo<Bool>\").isClosure).to(beTrue())\n                    expect(variableTypeName(\"(Foo<String>) -> Foo<Bool>\").isClosure).to(beTrue())\n                    expect(variableTypeName(\"((Int, Int) -> (), Int)\").isClosure).to(beFalse())\n                    expect(typeNameFromTypealias(\"(Foo) -> Bar\").isClosure).to(beTrue())\n                    expect(typeNameFromTypealias(\"(Foo) -> Bar & Baz\").isClosure).to(beTrue())\n                }\n\n                it(\"reports variadicity of closure arguments correctly\") {\n                    expect(funcArgumentTypeName(\"((String...) -> Int)\")?.isVariadic).to(beFalse())\n                    expect(funcArgumentTypeName(\"((String...) -> Int)\")?.isClosure).to(beTrue())\n                    expect(funcArgumentTypeName(\"((String...) -> Int)\")?.typeName.closure?.parameters.first?.isVariadic).to(beTrue())\n                }\n\n                it(\"reports optional status correctly\") {\n                    expect(variableTypeName(\"() -> ()\").isOptional).to(beFalse())\n                    expect(variableTypeName(\"() -> ()?\").isOptional).to(beFalse())\n                    expect(variableTypeName(\"() -> ()!\").isImplicitlyUnwrappedOptional).to(beFalse())\n                    expect(variableTypeName(\"(() -> ()!)\").isImplicitlyUnwrappedOptional).to(beFalse())\n                    expect(variableTypeName(\"Optional<()> -> ()\").isOptional).to(beFalse())\n                    expect(variableTypeName(\"(() -> ()?)\").isOptional).to(beFalse())\n\n                    expect(variableTypeName(\"(() -> ())?\").isOptional).to(beTrue())\n                    expect(variableTypeName(\"(() -> ())!\").isImplicitlyUnwrappedOptional).to(beTrue())\n                    expect(variableTypeName(\"Optional<() -> ()>\").isOptional).to(beTrue())\n                }\n            }\n\n            context(\"given closure type inside generic type\") {\n                it(\"reports closure correctly\") {\n                    expect(variableTypeName(\"Foo<() -> ()>\").isClosure).to(beFalse())\n                    expect(variableTypeName(\"Foo<(String) -> Bool>\").isClosure).to(beFalse())\n                    expect(variableTypeName(\"Foo<(String) -> Bool?>\").isClosure).to(beFalse())\n                    expect(variableTypeName(\"Foo<(Bar<String>) -> Bool>\").isClosure).to(beFalse())\n                    expect(variableTypeName(\"Foo<(Bar<String>) -> Bar<Bool>>\").isClosure).to(beFalse())\n                }\n            }\n\n            context(\"given closure type with attributes\") {\n                it(\"removes attributes in unwrappedTypeName\") {\n                    expect(variableTypeName(\"@escaping (@escaping ()->())->()\").unwrappedTypeName).to(equal(\"(@escaping () -> ()) -> ()\"))\n                }\n\n                it(\"orders attributes alphabetically\") {\n                    expect(variableTypeName(\"@escaping @autoclosure () -> String\").asSource).to(equal(\"@autoclosure @escaping () -> String\"))\n                    expect(variableTypeName(\"@escaping @autoclosure () -> String\").description).to(equal(\"@autoclosure @escaping () -> String\"))\n                }\n            }\n\n            context(\"given optional closure type with attributes\") {\n                it(\"keeps attributes in unwrappedTypeName\") {\n                    expect(variableTypeName(\"(@MainActor @Sendable (Int) -> Void)?\").unwrappedTypeName).to(equal(\"(@MainActor @Sendable (Int) -> Void)\"))\n                }\n                it(\"keeps attributes in name\") {\n                    expect(variableTypeName(\"(@MainActor @Sendable (Int) -> Void)?\").name).to(equal(\"(@MainActor @Sendable (Int) -> Void)?\"))\n                }\n            }\n\n            context(\"given implicitly unwrapped optional closure type with attributes\") {\n                it(\"keeps attributes in unwrappedTypeName\") {\n                    expect(variableTypeName(\"(@MainActor @Sendable (Int) -> Void)!\").unwrappedTypeName).to(equal(\"(@MainActor @Sendable (Int) -> Void)\"))\n                }\n                it(\"keeps attributes in name\") {\n                    expect(variableTypeName(\"(@MainActor @Sendable (Int) -> Void)!\").name).to(equal(\"(@MainActor @Sendable (Int) -> Void)!\"))\n                }\n            }\n\n            context(\"given Never type\") {\n                it(\"reports Never correctly\") {\n                    expect(variableTypeName(\"Never\").isNever).to(beTrue())\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Parsing/FileParser_VariableSpec.swift",
    "content": "import Quick\nimport Nimble\nimport PathKit\n#if SWIFT_PACKAGE\nimport Foundation\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\n\nclass FileParserVariableSpec: QuickSpec {\n    // swiftlint:disable:next function_body_length\n    override func spec() {\n        describe(\"Parser\") {\n            describe(\"parseVariable\") {\n                func parse(_ code: String, parseDocumentation: Bool = false) -> FileParserResult? {\n                    guard let parser = try? makeParser(for: code, parseDocumentation: parseDocumentation) else { fail(); return nil }\n                    return try? parser.parse()\n                }\n\n                func variable(_ code: String, parseDocumentation: Bool = false) -> Variable? {\n                    let wrappedCode =\n                        \"\"\"\n                        struct Wrapper {\n                            \\(code)\n                        }\n                        \"\"\"\n                    let result = parse(wrappedCode, parseDocumentation: parseDocumentation)\n                    let variable = result?.types.first?.variables.first\n                    variable?.definedInType = nil\n                    variable?.definedInTypeName = nil\n                    return variable\n                }\n\n                it(\"infers generic type initializer correctly\") {\n                    func verify(_ type: String) {\n                        let parsedTypeName = variable(\"static let generic: \\(type)\")?.typeName\n                        expect(variable(\"static let generic = \\(type)(value: true)\")?.typeName).to(equal(parsedTypeName))\n                    }\n\n                    verify(\"GenericType<Bool>\")\n                    verify(\"GenericType<Optional<Int>>\")\n                    verify(\"GenericType<Whatever, Int, [Float]>\")\n\n                    expect(variable(\n                    \"\"\"\n                    var pointPool = {\n                        ReusableItemPool<Point>(something: \"cool\")\n                    }()\n                    \"\"\"\n                    )?.typeName).to(equal(variable(\"static let generic: ReusableItemPool<Point>\")?.typeName))\n                }\n\n                it(\"infers types for variables when it's easy\") {\n                    expect(variable(\"static let redirectButtonDefaultURL = URL(string: \\\"https://www.nytimes.com\\\")!\")?.typeName).to(equal(TypeName(name: \"URL!\")))\n                }\n\n                it(\"reports variable mutability\") {\n                    expect(variable(\"var name: String\")?.isMutable).to(beTrue())\n                    expect(variable(\"let name: String\")?.isMutable).to(beFalse())\n                    expect(variable(\"private(set) var name: String\")?.isMutable).to(beTrue())\n                    expect(variable(\"var name: String { return \\\"\\\" }\")?.isMutable).to(beFalse())\n                }\n\n                it(\"extracts standard property correctly\") {\n                    expect(variable(\"var name: String\")).to(equal(Variable(name: \"name\", typeName: TypeName(name: \"String\"), accessLevel: (read: .internal, write: .internal), isComputed: false)))\n                }\n\n                it(\"infers types for variable when type is an inner type of the contained type correctly\") {\n                    let content = \"\"\"\n                    struct X {\n                      struct A {}\n\n                      let a: A\n                    }\n\n                    struct A {}\n                    \"\"\"\n                    let expectedVariable = Variable(name: \"a\", typeName: TypeName(\"X.A\"), type: Type(name: \"A\"), accessLevel: (.internal, .none), isComputed: false, isAsync: false, throws: false, isStatic: false, defaultValue: nil, attributes: [:], modifiers: [], annotations: [:], documentation: [], definedInTypeName: TypeName(\"X\"))\n                    let result = parse(content)\n                    let variable = result?.types.first?.variables.first\n                    expect(variable).to(equal(expectedVariable))\n                }\n\n                it(\"extracts with custom access correctly\") {\n                    expect(variable(\"private var name: String\"))\n                        .to(equal(\n                                Variable(name: \"name\",\n                                         typeName: TypeName(name: \"String\"),\n                                         accessLevel: (read: .private, write: .private),\n                                         isComputed: false,\n                                         modifiers: [\n                                            Modifier(name: \"private\")\n                                         ]\n                                )\n                        ))\n\n                    expect(variable(\"private(set) var name: String\"))\n                        .to(equal(\n                                Variable(name: \"name\",\n                                         typeName: TypeName(name: \"String\"),\n                                         accessLevel: (read: .internal, write: .private),\n                                         isComputed: false,\n                                         modifiers: [\n                                            Modifier(name: \"private\", detail: \"set\")\n                                         ]\n                                )\n                        ))\n\n                    expect(variable(\"public private(set) var name: String\"))\n                        .to(equal(\n                                Variable(name: \"name\",\n                                         typeName: TypeName(name: \"String\"),\n                                         accessLevel: (read: .public, write: .private),\n                                         isComputed: false,\n                                         modifiers: [\n                                            Modifier(name: \"public\"),\n                                            Modifier(name: \"private\", detail: \"set\")\n                                         ]\n                                )\n                        ))\n                }\n                \n                context(\"given variable defined in protocol\") {\n                    func variable(_ code: String) -> Variable? {\n                        let wrappedCode =\n                            \"\"\"\n                            protocol Wrapper {\n                                \\(code)\n                            }\n                            \"\"\"\n                        guard let parser = try? makeParser(for: wrappedCode) else { fail(); return nil }\n                        let result = try? parser.parse()\n                        let variable = result?.types.first?.variables.first\n                        variable?.definedInType = nil\n                        variable?.definedInTypeName = nil\n                        return variable\n                    }\n                    \n                    it(\"reports variable mutability\") {\n                        expect(variable(\"var name: String { get } \")?.isMutable).to(beFalse())\n                        expect(variable(\"var name: String { get set }\")?.isMutable).to(beTrue())\n                        \n                        let internalVariable = variable(\"var name: String { get set }\")\n                        expect(internalVariable?.writeAccess).to(equal(\"internal\"))\n                        expect(internalVariable?.readAccess).to(equal(\"internal\"))\n\n                        let publicVariable = variable(\"public var name: String { get set }\")\n                        expect(publicVariable?.writeAccess).to(equal(\"public\"))\n                        expect(publicVariable?.readAccess).to(equal(\"public\"))\n                    }\n                    \n                    it(\"reports variable concurrency\") {\n                        expect(variable(\"var name: String { get } \")?.isAsync).to(beFalse())\n                        expect(variable(\"var name: String { get async }\")?.isAsync).to(beTrue())\n                    }\n                    \n                    it(\"reports variable throwability\") {\n                        expect(variable(\"var name: String { get } \")?.throws).to(beFalse())\n                        expect(variable(\"var name: String { get throws }\")?.throws).to(beTrue())\n                        expect(variable(\"var name: String { get throws(CustomError) }\")?.throws).to(beTrue())\n                        expect(variable(\"var name: String { get throws(CustomError) }\")?.throwsTypeName).to(equal(TypeName(\"CustomError\")))\n                    }\n                }\n\n                context(\"given variable with initial value\") {\n                    it(\"extracts default value\") {\n                        expect(variable(\"var name: String = String()\")?.defaultValue).to(equal(\"String()\"))\n                        expect(variable(\"var name = Parent.Children.init()\")?.defaultValue).to(equal(\"Parent.Children.init()\"))\n                        expect(variable(\"var name = [[1, 2], [1, 2]]\")?.defaultValue).to(equal(\"[[1, 2], [1, 2]]\"))\n                        expect(variable(\"var name = { return 0 }()\")?.defaultValue).to(equal(\"{ return 0 }()\"))\n                        expect(variable(\"var name = \\t\\n { return 0 }() \\t\\n\")?.defaultValue).to(equal(\"{ return 0 }()\"))\n                        expect(variable(\"var name: Int = \\t\\n { return 0 }() \\t\\n\")?.defaultValue).to(equal(\"{ return 0 }()\"))\n                        expect(variable(\"var name: String = String() { didSet { print(0) } }\")?.defaultValue).to(equal(\"String()\"))\n                        expect(variable(\"var name: String = String() {\\n\\tdidSet { print(0) }\\n}\")?.defaultValue).to(equal(\"String()\"))\n                        expect(variable(\"var name: String = String()\\n{\\n\\twillSet { print(0) }\\n}\")?.defaultValue).to(equal(\"String()\"))\n                    }\n\n                    it(\"extracts property with default initializer correctly\") {\n                        expect(variable(\"var name = String()\")?.typeName).to(equal(TypeName(name: \"String\")))\n                        expect(variable(\"var name = Parent.Children.init()\")?.typeName).to(equal(TypeName(name: \"Parent.Children\")))\n                        expect(variable(\"var name: String? = String()\")?.typeName).to(equal(TypeName(name: \"String?\")))\n                        expect(variable(\"var name = { return 0 }() \")?.typeName).toNot(equal(TypeName(name: \"{ return 0 }\")))\n\n                        expect(variable(\n                        \"\"\"\n                        var reducer = Reducer<WorkoutTemplate.State, WorkoutTemplate.Action, GlobalEnvironment<Programs.Environment>>.combine(\n                            periodizationConfiguratorReducer.optional().pullback(state: \\\\.periodizationConfigurator, action: /WorkoutTemplate.Action.periodizationConfigurator, environment: { $0.map { _ in Programs.Environment() } })) {\n                            somethingUnrealted.init()\n                        }\n                        \"\"\"\n                        )?.typeName).to(equal(TypeName(name: \"Reducer<WorkoutTemplate.State, WorkoutTemplate.Action, GlobalEnvironment<Programs.Environment>>\")))\n                    }\n\n                    it(\"extracts property with literal value correctrly\") {\n                        expect(variable(\"var name = 1\")?.typeName).to(equal(TypeName(name: \"Int\")))\n                        expect(variable(\"var name = 1.0\")?.typeName).to(equal(TypeName(name: \"Double\")))\n                        expect(variable(\"var name = \\\"1\\\"\")?.typeName).to(equal(TypeName(name: \"String\")))\n                        expect(variable(\"var name = true\")?.typeName).to(equal(TypeName(name: \"Bool\")))\n                        expect(variable(\"var name = false\")?.typeName).to(equal(TypeName(name: \"Bool\")))\n                        expect(variable(\"var name = nil\")?.typeName).to(equal(TypeName(name: \"Optional\")))\n                        expect(variable(\"var name = Optional.none\")?.typeName).to(equal(TypeName(name: \"Optional\")))\n                        expect(variable(\"var name = Optional.some(1)\")?.typeName).to(equal(TypeName(name: \"Optional\")))\n                        expect(variable(\"var name = Foo.Bar()\")?.typeName).to(equal(TypeName(name: \"Foo.Bar\")))\n                    }\n\n                    it(\"extracts property with array literal value correctly\") {\n                        expect(variable(\"var name = [Int]()\")?.typeName).to(equal(TypeName.buildArray(of: .Int)))\n                        expect(variable(\"var name = [1]\")?.typeName).to(equal(TypeName.buildArray(of: .Int)))\n                        expect(variable(\"var name = [1, 2]\")?.typeName).to(equal(TypeName.buildArray(of: .Int)))\n                        expect(variable(\"var name = [1, \\\"a\\\"]\")?.typeName).to(equal(TypeName.buildArray(of: .Any)))\n                        expect(variable(\"var name = [1, nil]\")?.typeName).to(equal(TypeName.buildArray(of: TypeName.Int.asOptional)))\n                        expect(variable(\"var name = [1, [1, 2]]\")?.typeName).to(equal(TypeName.buildArray(of: .Any)))\n                        expect(variable(\"var name = [[1, 2], [1, 2]]\")?.typeName).to(equal(TypeName.buildArray(of: TypeName.buildArray(of: .Int))))\n                        expect(variable(\"var name = [Int()]\")?.typeName).to(equal(TypeName.buildArray(of: .Int)))\n                    }\n\n                    it(\"extracts property with dictionary literal value correctly\") {\n                        expect(variable(\"var name = [Int: Int]()\")?.typeName).to(equal(TypeName.buildDictionary(key: .Int, value: .Int)))\n                        expect(variable(\"var name = [1: 2]\")?.typeName).to(equal(TypeName.buildDictionary(key: .Int, value: .Int)))\n                        expect(variable(\"var name = [1: 2, 2: 3]\")?.typeName).to(equal(TypeName.buildDictionary(key: .Int, value: .Int)))\n                        expect(variable(\"var name = [1: 1, 2: \\\"a\\\"]\")?.typeName).to(equal(TypeName.buildDictionary(key: .Int, value: .Any)))\n                        expect(variable(\"var name = [1: 1, 2: nil]\")?.typeName).to(equal(TypeName.buildDictionary(key: .Int, value: TypeName.Int.asOptional)))\n                        expect(variable(\"var name = [1: 1, 2: [1, 2]]\")?.typeName).to(equal(TypeName.buildDictionary(key: .Int, value: .Any)))\n                        expect(variable(\"var name = [[1: 1, 2: 2], [1: 1, 2: 2]]\")?.typeName).to(equal(TypeName.buildArray(of: .buildDictionary(key: .Int, value: .Int))))\n                        expect(variable(\"var name = [1: [1: 1, 2: 2], 2: [1: 1, 2: 2]]\")?.typeName).to(equal(TypeName.buildDictionary(key: .Int, value: .buildDictionary(key: .Int, value: .Int))))\n                        expect(variable(\"var name = [Int(): String()]\")?.typeName).to(equal(TypeName.buildDictionary(key: .Int, value: .String)))\n                    }\n\n                    it(\"matches inference with parser tuple\") {\n                        let infer = variable(\"var name = (1, b: \\\"[2,3]\\\", c: 1)\")?.typeName\n                        let parsed = variable(\"var name: (Int, b: String, c: Int)\")?.typeName\n                        expect(infer).to(equal(parsed))\n                    }\n\n                    it(\"extracts property with tuple literal value correctly\") {\n                        expect(variable(\"var name = (1, 2)\")?.typeName).to(equal(TypeName.buildTuple(TypeName.Int, TypeName.Int)))\n                        expect(variable(\"var name = (1, b: \\\"[2,3]\\\", c: 1)\")?.typeName).to(equal(TypeName.buildTuple(.init(name: \"0\", typeName: .Int), .init(name: \"b\", typeName: .String), .init(name: \"c\", typeName: .Int))))\n                        expect(variable(\"var name = (_: 1, b: 2)\")?.typeName).to(equal(TypeName.buildTuple(.init(name: \"0\", typeName: .Int), .init(name: \"b\", typeName: .Int))))\n                        expect(variable(\"var name = ((1, 2), [\\\"a\\\": \\\"b\\\"])\")?.typeName).to(equal(TypeName.buildTuple(TypeName.buildTuple(TypeName.Int, TypeName.Int), TypeName.buildDictionary(key: .String, value: .String))))\n                        expect(variable(\"var name = ((1, 2), [1, 2])\")?.typeName).to(equal(TypeName.buildTuple(TypeName.buildTuple(TypeName.Int, TypeName.Int), TypeName.buildArray(of: .Int))))\n                        expect(variable(\"var name = ((1, 2), [\\\"a,b\\\": \\\"b\\\"])\")?.typeName)\n                          .to(\n                            equal(TypeName.buildTuple(\n                              .buildTuple(.Int, .Int),\n                              .buildDictionary(key: .String, value: .String))\n                            ))\n                    }\n                }\n\n                it(\"extracts standard let property correctly\") {\n                    let r = variable(\"let name: String\")\n                    expect(r).to(equal(Variable(name: \"name\", typeName: TypeName(name: \"String\"), accessLevel: (read: .internal, write: .none), isComputed: false)))\n                }\n\n                it(\"extracts computed property correctly\") {\n                    expect(variable(\"var name: Int { return 2 }\")).to(equal(Variable(name: \"name\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .none), isComputed: true)))\n                    expect(variable(\"let name: Int\")).to(equal(Variable(name: \"name\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .none), isComputed: false)))\n                    expect(variable(\"var name: Int\")).to(equal(Variable(name: \"name\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .internal), isComputed: false)))\n                    expect(variable(\"var name: Int { \\nget { return 0 } \\nset {} }\")).to(equal(Variable(name: \"name\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .internal), isComputed: true)))\n                    expect(variable(\"var name: Int { \\nget { return 0 } }\")).to(equal(Variable(name: \"name\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .none), isComputed: true, isAsync: false, throws: false)))\n                    expect(variable(\"var name: Int { \\nget async { return 0 } }\")).to(equal(Variable(name: \"name\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .none), isComputed: true, isAsync: true, throws: false)))\n                    expect(variable(\"var name: Int { \\nget throws { return 0 } }\")).to(equal(Variable(name: \"name\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .none), isComputed: true, isAsync: false, throws: true)))\n                    expect(variable(\"var name: Int { \\nget async throws { return 0 } }\")).to(equal(Variable(name: \"name\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .none), isComputed: true, isAsync: true, throws: true)))\n                    expect(variable(\"var name: Int \\n{ willSet { } }\")).to(equal(Variable(name: \"name\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .internal), isComputed: false)))\n                    expect(variable(\"var name: Int { \\ndidSet {} }\")).to(equal(Variable(name: \"name\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .internal), isComputed: false)))\n                }\n\n                it(\"extracts generic property correctly\") {\n                    expect(variable(\"let name: Observable<Int>\")).to(equal(Variable(name: \"name\", typeName:\n                    TypeName(name: \"Observable<Int>\", generic: .init(name: \"Observable\", typeParameters: [.init(typeName: TypeName(name: \"Int\"))])\n                    ), accessLevel: (read: .internal, write: .none), isComputed: false)))\n\n                    expect(variable(\"let name: Combine.Observable<Int>\")).to(equal(Variable(name: \"name\", typeName:\n                    TypeName(name: \"Combine.Observable<Int>\", generic: .init(name: \"Combine.Observable\", typeParameters: [.init(typeName: TypeName(name: \"Int\"))])\n                    ), accessLevel: (read: .internal, write: .none), isComputed: false)))\n                }\n\n                context(\"given it has sourcery annotations\") {\n\n                    it(\"extracts single annotation\") {\n                        let expectedVariable = Variable(name: \"name\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .none), isComputed: true)\n                        expectedVariable.annotations[\"skipEquability\"] = NSNumber(value: true)\n\n                        expect(variable(\"// sourcery: skipEquability\\n\" +\n                                             \"var name: Int { return 2 }\")).to(equal(expectedVariable))\n                    }\n\n                    it(\"extracts multiple annotations on the same line\") {\n                        let expectedVariable = Variable(name: \"name\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .none), isComputed: true)\n                        expectedVariable.annotations[\"skipEquability\"] = NSNumber(value: true)\n                        expectedVariable.annotations[\"jsonKey\"] = \"json_key\" as NSString\n\n                        expect(variable(\"// sourcery: skipEquability, jsonKey = \\\"json_key\\\"\\n\" +\n                                             \"var name: Int { return 2 }\")).to(equal(expectedVariable))\n                    }\n\n                    it(\"extracts multi-line annotations, including numbers\") {\n                        let expectedVariable = Variable(name: \"name\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .none), isComputed: true)\n                        expectedVariable.annotations[\"skipEquability\"] = NSNumber(value: true)\n                        expectedVariable.annotations[\"jsonKey\"] = \"json_key\" as NSString\n                        expectedVariable.annotations[\"thirdProperty\"] = NSNumber(value: -3)\n\n                        let result = variable(        \"// sourcery: skipEquability, jsonKey = \\\"json_key\\\"\\n\" +\n                                                           \"// sourcery: thirdProperty = -3\\n\" +\n                                                           \"var name: Int { return 2 }\")\n                        expect(result).to(equal(expectedVariable))\n                    }\n\n                    it(\"extracts annotations interleaved with comments\") {\n                        let expectedVariable = Variable(name: \"name\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .none), isComputed: true)\n                        expectedVariable.annotations[\"isSet\"] = NSNumber(value: true)\n                        expectedVariable.annotations[\"numberOfIterations\"] = NSNumber(value: 2)\n                        expectedVariable.documentation = [\"isSet is used for something useful\"]\n\n                        let result = variable(        \"// sourcery: isSet\\n\" +\n                                                           \"/// isSet is used for something useful\\n\" +\n                                                           \"// sourcery: numberOfIterations = 2\\n\" +\n                                                           \"var name: Int { return 2 }\",\n                                                      parseDocumentation: true)\n                        expect(result).to(equal(expectedVariable))\n                    }\n\n                    it(\"stops extracting annotations if it encounters a non-comment line\") {\n                        let expectedVariable = Variable(name: \"name\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .none), isComputed: true)\n                        expectedVariable.annotations[\"numberOfIterations\"] = NSNumber(value: 2)\n\n                        let result = variable(        \"// sourcery: isSet\\n\" +\n                                                           \"\\n\" +\n                                                           \"// sourcery: numberOfIterations = 2\\n\" +\n                                                           \"var name: Int { return 2 }\")\n                        expect(result).to(equal(expectedVariable))\n                    }\n\n                    it(\"separates comments correctly from variable name\") {\n                        let result = variable(\n\"\"\"\n@SomeWrapper\nvar variable2 // some comment\n\"\"\")\n                        let expectedVariable = Variable(name: \"variable2\", typeName: TypeName(name: \"UnknownTypeSoAddTypeAttributionToVariable\"), accessLevel: (read: .internal, write: .internal), isComputed: false, attributes: [\"SomeWrapper\": [Attribute(name: \"SomeWrapper\", arguments: [:])]])\n                        expect(result).to(equal(expectedVariable))\n                    }\n                    \n                    it(\"extracts trailing annotations\") {\n                        let expectedVariable = Variable(name: \"name\", typeName: TypeName(name: \"Int\"), accessLevel: (read: .internal, write: .none), isComputed: true)\n                        expectedVariable.annotations[\"jsonKey\"] = \"json_key\" as NSString\n                        expectedVariable.annotations[\"skipEquability\"] = NSNumber(value: true)\n\n                        expect(variable(\"// sourcery: jsonKey = \\\"json_key\\\"\\nvar name: Int { return 2 } // sourcery: skipEquability\")).to(equal(expectedVariable))\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Parsing/Helpers/AnnotationsParserSpec.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 31/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Quick\nimport Nimble\nimport PathKit\n#if SWIFT_PACKAGE\nimport Foundation\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\nimport SwiftParser\nimport SwiftSyntax\n\nclass AnnotationsParserSpec: QuickSpec {\n    override func spec() {\n        describe(\"AnnotationsParser\") {\n            describe(\"parse(line:)\") {\n                func parse(_ content: String) -> Annotations {\n                    return AnnotationsParser.parse(line: content)\n                }\n\n                it(\"extracts single annotation\") {\n                    let annotations = [\"skipEquality\": NSNumber(value: true)]\n\n                    expect(parse(\"skipEquality\")).to(equal(annotations))\n                }\n\n                it(\"extracts repeated annotations into array\") {\n                    let parsedAnnotations = parse(\"implements = \\\"Service1\\\", implements = \\\"Service2\\\"\")\n                    expect(parsedAnnotations[\"implements\"] as? [String]).to(equal([\"Service1\", \"Service2\"]))\n                }\n\n                it(\"extracts multiple annotations on the same line\") {\n                    let annotations = [\"skipEquality\": NSNumber(value: true),\n                                       \"jsonKey\": \"json_key\" as NSString]\n\n                    expect(parse(\"skipEquality, jsonKey = \\\"json_key\\\"\")).to(equal(annotations))\n                }\n            }\n            describe(\"parse(content:)\") {\n                func parse(_ content: String) -> Annotations {\n                    let tree = Parser.parse(source: content)\n                    let fileName = \"in-memory\"\n                    let sourceLocationConverter = SourceLocationConverter(fileName: fileName, tree: tree)\n                    return AnnotationsParser(contents: content, sourceLocationConverter: sourceLocationConverter).all\n                }\n\n                it(\"extracts inline annotations\") {\n                    let result = parse(\"//sourcery: skipDescription\\n/* sourcery: skipEquality */\\n/** sourcery: skipCoding */var name: Int { return 2 }\")\n                    expect(result).to(equal([\n                        \"skipDescription\": NSNumber(value: true),\n                        \"skipEquality\": NSNumber(value: true),\n                        \"skipCoding\": NSNumber(value: true)\n                        ]))\n                }\n\n                it(\"extracts inline annotations from multi line comments\") {\n                    let result = parse(\"//**\\n*Comment\\n*sourcery: skipDescription\\n*sourcery: skipEquality\\n*/var name: Int { return 2 }\")\n                    expect(result).to(equal([\n                        \"skipDescription\": NSNumber(value: true),\n                        \"skipEquality\": NSNumber(value: true)\n                        ]))\n                }\n\n                it(\"extracts multi-line annotations, including numbers\") {\n                    let annotations = [\"skipEquality\": NSNumber(value: true),\n                                       \"placeholder\": \"geo:37.332112,-122.0329753?q=1 Infinite Loop\" as NSString,\n                                       \"jsonKey\": \"[\\\"json_key\\\": key, \\\"json_value\\\": value]\" as NSString,\n                                       \"thirdProperty\": NSNumber(value: -3)]\n\n                    let result = parse(\"// sourcery: skipEquality, jsonKey = [\\\"json_key\\\": key, \\\"json_value\\\": value]\\n\" +\n                                               \"// sourcery: thirdProperty = -3\\n\" +\n                                               \"// sourcery: placeholder = \\\"geo:37.332112,-122.0329753?q=1 Infinite Loop\\\"\\n\" +\n                                               \"var name: Int { return 2 }\")\n                    expect(result).to(equal(annotations))\n                }\n\n                it(\"extracts suffix annotations, both block and inline\") {\n                    let annotations = [\"anAnnotation\": \"PARAM A ONLY\" as NSString,\n                                       \"testAnnotation\": \"PARAM B ONLY\" as NSString,\n                                       \"anotherAnnotation\": \"PARAM C ONLY\" as NSString]\n\n                    let result = parse(\"\"\"\n                        class Foo {\n                            func bar(paramA: String, // sourcery: anAnnotation = \"PARAM A ONLY\"\n                                /* sourcery: testAnnotation=\"PARAM B ONLY\"*/ paramB: String,\n                                paramC: String,  // sourcery: anotherAnnotation = \"PARAM C ONLY\"\n                                paramD: String\n                            ) {}\n                        }\n                    \"\"\")\n                    expect(result).to(equal(annotations))\n                }\n\n                it(\"extracts repeated annotations into array\") {\n                    let parsedAnnotations = parse(\"// sourcery: implements = \\\"Service1\\\"\\n// sourcery: implements = \\\"Service2\\\"\")\n                    expect(parsedAnnotations[\"implements\"] as? [String]).to(equal([\"Service1\", \"Service2\"]))\n                }\n\n                it(\"extracts annotations interleaved with comments\") {\n                    let annotations = [\"isSet\": NSNumber(value: true),\n                                       \"numberOfIterations\": NSNumber(value: 2)]\n\n                    let result = parse(\"// sourcery: isSet\\n\" +\n                                               \"/// isSet is used for something useful\\n\" +\n                                               \"// sourcery: numberOfIterations = 2\\n\" +\n                                               \"var name: Int { return 2 }\")\n                    expect(result).to(equal(annotations))\n                }\n\n                it(\"extracts end of line annotations\") {\n                    let result = parse(\"// sourcery: first = 1 \\n let property: Int // sourcery: second = 2, third = \\\"three\\\"\")\n                    expect(result).to(equal([\"first\": NSNumber(value: 1), \"second\": NSNumber(value: 2), \"third\": \"three\" as NSString]))\n                }\n\n                it(\"extracts end of line block comment annotations\") {\n                    let result = parse(\"// sourcery: first = 1 \\n let property: Int /* sourcery: second = 2, third = \\\"three\\\" */ // comment\")\n                    expect(result).to(equal([\"first\": NSNumber(value: 1), \"second\": NSNumber(value: 2), \"third\": \"three\" as NSString]))\n                }\n\n                it (\"ignores annotations in string literals\") {\n                    let result = parse(\"// sourcery: first = 1 \\n let property = \\\"// sourcery: second = 2\\\" // sourcery: third = 3\")\n                    expect(result).to(equal([\"first\": NSNumber(value: 1), \"third\": NSNumber(value: 3)]))\n                }\n\n                it(\"extracts file annotations\") {\n                    let annotations = [\"isSet\": NSNumber(value: true)]\n\n                    let result = parse(\"// sourcery:file: isSet\\n\" +\n                        \"/// isSet is used for something useful\\n\" +\n                        \"var name: Int { return 2 }\")\n                    expect(result).to(equal(annotations))\n                }\n\n                it(\"extracts namespace annotations\") {\n                    let annotations: [String: NSObject] = [\"smth\": [\"key\": \"aKey\" as NSObject, \"default\": NSNumber(value: 0), \"prune\": NSNumber(value: true)] as NSObject]\n                    let result = parse(\"// sourcery:decoding:smth: key='aKey', default=0\\n\" +\n                        \"// sourcery:decoding:smth: prune\\n\" +\n                        \"var name: Int { return 2 }\")\n\n                    expect(result[\"decoding\"] as? Annotations).to(equal(annotations))\n                }\n\n                it(\"extracts json string annotations into array\") {\n                    let parsedAnnotations = parse(\"// sourcery: theArray=\\\"[22,55,88]\\\"\")\n                    expect(parsedAnnotations[\"theArray\"] as? [Int]).to(equal([22, 55, 88]))\n                }\n\n                it(\"extracts json string annotations into arrays of dictionaries\") {\n                    let parsedAnnotations = parse(\"// sourcery: propertyMapping=\\\"[{\\\"from\\\": \\\"lockVersion\\\", \\\"to\\\": \\\"version\\\"},{\\\"from\\\": \\\"goalStatus\\\", \\\"to\\\": \\\"status\\\"}]\\\"\")\n                    expect(parsedAnnotations[\"propertyMapping\"] as? [[String: String]]).to(equal([[\"from\": \"lockVersion\", \"to\": \"version\"], [\"from\": \"goalStatus\", \"to\": \"status\"]]))\n                }\n\n                it(\"extracts json string annotations into dictionary\") {\n                    let parsedAnnotations = parse(\"// sourcery: theDictionary=\\\"{\\\"firstValue\\\": 22,\\\"secondValue\\\": 55}\\\"\")\n                    expect(parsedAnnotations[\"theDictionary\"] as? [String: Int]).to(equal([\"firstValue\": 22, \"secondValue\": 55]))\n                }\n\n                it(\"extracts json string annotations into dictionaries of arrays\") {\n                    let parsedAnnotations = parse(\"// sourcery: theArrays=\\\"{\\\"firstArray\\\":[22,55,88],\\\"secondArray\\\":[1,2,3,4]}\\\"\")\n                    expect(parsedAnnotations[\"theArrays\"] as? [String: [Int]]).to(equal([\"firstArray\": [22, 55, 88], \"secondArray\": [1, 2, 3, 4]]))\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Parsing/Helpers/StringViewSpec.swift",
    "content": "//\n// Created by Ruslan Alikhamov on 02/07/2023.\n// Copyright (c) 2023 Evolutions - FZCO. All rights reserved.\n//\n\nimport Quick\nimport Nimble\nimport PathKit\n#if SWIFT_PACKAGE\nimport Foundation\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\n\nclass StringViewSpec: QuickSpec {\n    override func spec() {\n        describe(\"StringView\") {\n            describe(\"init()\") {\n                func instantiate(_ content: String) -> [Line] {\n                    return StringView.init(content).lines\n                }\n\n                it(\"parses correct number of lines when utf8 comments are present\") {\n                    let lines = instantiate(\"protocol AgeModel {\\r\\n    var ageDesc: String { get } // 年龄的描述\\r\\n}\\r\\n\")\n                    expect(lines.count).to(equal(4))\n                }\n\n                it(\"parses correct number of lines when \\r\\n newline symbols are present\") {\n                    let lines = instantiate(\"'struct S {}\\r\\nprotocol AP {}\\r\\n\")\n                    expect(lines.count).to(equal(3))\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Parsing/Helpers/TemplateAnnotationsParserSpec.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 16/01/2017.\n// Copyright (c) 2017 Pixle. All rights reserved.\n//\n\nimport Quick\nimport Nimble\nimport PathKit\n#if SWIFT_PACKAGE\nimport Foundation\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\n\nclass TemplateAnnotationsParserSpec: QuickSpec {\n    override func spec() {\n        describe(\"InlineParser\") {\n            context(\"without indentation\") {\n                let source =\n                        \"// sourcery:inline:Type.AutoCoding\\n\" +\n                        \"var something: Int\\n\" +\n                        \"// sourcery:end\\n\"\n\n                let result = TemplateAnnotationsParser.parseAnnotations(\"inline\", contents: source, forceParse: [])\n\n                it(\"tracks it\") {\n                    let annotatedRanges = result.annotatedRanges[\"Type.AutoCoding\"]\n                    expect(annotatedRanges?.map { $0.range }).to(equal([NSRange(location: 35, length: 19)]))\n                    expect(annotatedRanges?.map { $0.indentation }).to(equal([\"\"]))\n                }\n\n                it(\"removes content between the markup\") {\n                    expect(result.contents).to(equal(\n                        \"// sourcery:inline:Type.AutoCoding\\n\" +\n                        String(repeating: \" \", count: 19) +\n                        \"// sourcery:end\\n\"\n                    ))\n                }\n            }\n\n            context(\"with indentation\") {\n                let source =\n                        \"    // sourcery:inline:Type.AutoCoding\\n\" +\n                        \"    var something: Int\\n\" +\n                        \"    // sourcery:end\\n\"\n\n                let result = TemplateAnnotationsParser.parseAnnotations(\"inline\", contents: source, forceParse: [])\n\n                it(\"tracks it\") {\n                    let annotatedRanges = result.annotatedRanges[\"Type.AutoCoding\"]\n                    expect(annotatedRanges?.map { $0.range }).to(equal([NSRange(location: 39, length: 23)]))\n                    expect(annotatedRanges?.map { $0.indentation }).to(equal([\"    \"]))\n                }\n\n                it(\"removes content between the markup\") {\n                    expect(result.contents).to(equal(\n                        \"    // sourcery:inline:Type.AutoCoding\\n\" +\n                        String(repeating: \" \", count: 23) +\n                        \"    // sourcery:end\\n\"\n                    ))\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Parsing/Helpers/TemplatesAnnotationParser_ForceParseInlineCodeSpec.swift",
    "content": "//\n//  TemplatesAnnotationParser+ForceParseInlineCodeSpec.swift\n//  SourceryTests\n//\n//  Created by Ranvir Prasad on 07/04/20.\n//  Copyright © 2020 Pixle. All rights reserved.\n//\n\nimport Quick\nimport Nimble\nimport PathKit\n#if SWIFT_PACKAGE\nimport Foundation\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\n\nclass TemplatesAnnotationParserPassInlineCodeSpec: QuickSpec {\n    override func spec() {\n        describe(\"InlineParser\") {\n            context(\"without indentation\") {\n                let source =\n                    \"// sourcery:inline:Type.AutoCoding\\n\" +\n                        \"var something: Int\\n\" +\n                \"// sourcery:end\\n\"\n\n                let result = TemplateAnnotationsParser.parseAnnotations(\"inline\", contents: source, aggregate: false, forceParse: [\"AutoCoding\"])\n\n                it(\"tracks it\") {\n                    let annotatedRanges = result.annotatedRanges[\"Type.AutoCoding\"]\n                    expect(annotatedRanges?.map { $0.range }).to(equal([NSRange(location: 35, length: 19)]))\n                    expect(annotatedRanges?.map { $0.indentation }).to(equal([\"\"]))\n                }\n\n                it(\"does not remove content between the markup when force parse parameter is set to template name\") {\n                    expect(result.contents).to(equal(\"// sourcery:inline:Type.AutoCoding\\n\" +\n                        \"var something: Int\\n\" +\n                        \"// sourcery:end\\n\"\n                    ))\n                }\n            }\n\n            context(\"with indentation\") {\n                let source =\n                    \"    // sourcery:inline:Type.AutoCoding\\n\" +\n                        \"    var something: Int\\n\" +\n                \"    // sourcery:end\\n\"\n\n                let result = TemplateAnnotationsParser.parseAnnotations(\"inline\", contents: source, aggregate: false, forceParse: [\"AutoCoding\"])\n\n                it(\"tracks it\") {\n                    let annotatedRanges = result.annotatedRanges[\"Type.AutoCoding\"]\n                    expect(annotatedRanges?.map { $0.range }).to(equal([NSRange(location: 39, length: 23)]))\n                    expect(annotatedRanges?.map { $0.indentation }).to(equal([\"    \"]))\n                }\n\n                it(\"does not remove the content between the markup when force parse parameter is set to template name\") {\n                    expect(result.contents).to(equal( \"    // sourcery:inline:Type.AutoCoding\\n\" +\n                        \"    var something: Int\\n\" +\n                        \"    // sourcery:end\\n\"\n))\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Parsing/Helpers/VerifierSpec.swift",
    "content": "import Quick\nimport Nimble\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n@testable import SourceryFramework\n@testable import SourceryRuntime\nimport SourceryUtils\n\nclass VerifierSpec: QuickSpec {\n    override func spec() {\n        describe(\"Verifier\") {\n            it(\"allows empty strings\") {\n                expect(Verifier.canParse(content: \"\", path: Path(\"/\"), generationMarker: Sourcery.generationMarker)).to(equal(Verifier.Result.approved))\n            }\n\n            it(\"rejects files generated by Sourcery\") {\n                let content = Sourcery.generationMarker + \"\\n something\\n is\\n there\"\n\n                expect(Verifier.canParse(content: content, path: Path(\"/\"), generationMarker: Sourcery.generationMarker)).to(equal(Verifier.Result.isCodeGenerated))\n            }\n\n            it(\"rejects files generated by Sourcery when a force parse extension is defined but doesn't match file\") {\n                let content = Sourcery.generationMarker + \"\\n something\\n is\\n there\"\n\n                expect(Verifier.canParse(content: content, path: Path(\"/file.swift\"), generationMarker: Sourcery.generationMarker, forceParse: [\"toparse\"])).to(equal(Verifier.Result.isCodeGenerated))\n            }\n\n            it(\"doesn't reject files generated by Sourcery but that we want to force the parsing for\") {\n                let content = Sourcery.generationMarker + \"\\n something\\n is\\n there\"\n\n                expect(Verifier.canParse(content: content, path: Path(\"/file.toparse.swift\"), generationMarker: Sourcery.generationMarker, forceParse: [\"toparse\"])).to(equal(Verifier.Result.approved))\n            }\n\n            it(\"rejects file containing conflict marker\") {\n                let content = [\"\\n<<<<<\\n\", \"\\n>>>>>\\n\"]\n\n                content.forEach { expect(Verifier.canParse(content: $0, path: Path(\"/\"), generationMarker: Sourcery.generationMarker)).to(equal(Verifier.Result.containsConflictMarkers)) }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Sourcery+PerformanceSpec.swift",
    "content": "/*\n//\n//  Sourcery+PerformanceSpec.swift\n//  Sourcery\n//\n//  Created by Krzysztof Zabłocki on 26/12/2016.\n//  Copyright © 2016 Pixle. All rights reserved.\n//\n\nimport XCTest\nimport PathKit\n\n@testable\nimport Sourcery\n\nclass SourceryPerformanceSpec: XCTestCase {\n    let outputDir: Path = {\n        Path.cleanTemporaryDir(name: \"SourceryPerformance\")\n    }()\n\n    func testParsingPerformanceOnCleanRun() {\n        let _ = try? Path.cachesDir(sourcePath: Stubs.sourceForPerformance).delete()\n\n        self.measure {\n            let _ = try? Sourcery().processFiles(Stubs.sourceForPerformance,\n                                                 usingTemplates: Stubs.templateDirectory + Path(\"Basic.stencil\"),\n                                                 output: self.outputDir,\n                                                 cacheDisabled: true)\n        }\n    }\n\n    func testParsingPerformanceOnSubsequentRun() {\n        let _ = try? Path.cachesDir(sourcePath: Stubs.sourceForPerformance).delete()\n        let _ = try? Sourcery().processFiles(Stubs.sourceForPerformance,\n                                             usingTemplates: Stubs.templateDirectory + Path(\"Basic.stencil\"),\n                                             output: self.outputDir)\n\n        self.measure {\n            let _ = try? Sourcery().processFiles(Stubs.sourceForPerformance,\n                                                 usingTemplates: Stubs.templateDirectory + Path(\"Basic.stencil\"),\n                                                 output: self.outputDir)\n        }\n    }\n}\n*/\n"
  },
  {
    "path": "SourceryTests/SourcerySpec.swift",
    "content": "import Quick\nimport Nimble\nimport PathKit\n#if SWIFT_PACKAGE\nimport Foundation\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n#if !canImport(ObjectiveC)\nimport CDispatch\n#endif\n@testable import SourceryRuntime\nimport XcodeProj\n\nprivate let version = \"Major.Minor.Patch\"\n\n// swiftlint:disable file_length type_body_length\nclass SourcerySpecTests: QuickSpec {\n    // swiftlint:disable:next function_body_length\n    override func spec() {\n        func update(code: String, in path: Path) { guard (try? path.write(code)) != nil else { fatalError() } }\n\n        describe(\"Sourcery\") {\n            var outputDir = Path(\"/tmp\")\n            var output: Output { return Output(outputDir) }\n\n            beforeEach {\n                outputDir = Stubs.cleanTemporarySourceryDir()\n            }\n\n            context(\"with already generated files\") {\n                let templatePath = Stubs.templateDirectory + Path(\"Other.stencil\")\n                let sourcePath = outputDir + Path(\"Source.swift\")\n                var generatedFileModificationDate: Date!\n                var newGeneratedFileModificationDate: Date!\n\n                func fileModificationDate(url: URL) -> Date? {\n                    guard let attr = try? FileManager.default.attributesOfItem(atPath: url.path) else {\n                        return nil\n                    }\n                    return attr[FileAttributeKey.modificationDate] as? Date\n                }\n\n                beforeEach {\n                    update(code: \"\"\"\n                        class Foo {\n                        }\n                        \"\"\", in: sourcePath)\n\n                    _ = try? Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(\n                        .sources(Paths(include: [sourcePath])),\n                        usingTemplates: Paths(include: [templatePath]),\n                        output: output,\n                        baseIndentation: 0\n                    )\n                }\n\n                context(\"without changes\") {\n                    it(\"doesn't update existing files\") {\n                        let generatedFilePath = outputDir + Sourcery().generatedPath(for: templatePath)\n                        generatedFileModificationDate = fileModificationDate(url: generatedFilePath.url)\n                        DispatchQueue.main.asyncAfter( deadline: DispatchTime.now() + Double(Int64(0.5 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC)) {\n                            _ = try? Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0)\n                            newGeneratedFileModificationDate = fileModificationDate(url: generatedFilePath.url)\n                        }\n                        expect(newGeneratedFileModificationDate).toEventually(equal(generatedFileModificationDate))\n                    }\n                }\n\n                context(\"with changes\") {\n                    let anotherSourcePath = outputDir + Path(\"AnotherSource.swift\")\n\n                    beforeEach {\n                        update(code: \"\"\"\n                            class Bar {\n                            }\n                            \"\"\", in: anotherSourcePath)\n                    }\n\n                    it(\"updates existing files\") {\n                        let generatedFilePath = outputDir + Sourcery().generatedPath(for: templatePath)\n                        generatedFileModificationDate = fileModificationDate(url: generatedFilePath.url)\n                        DispatchQueue.main.asyncAfter( deadline: DispatchTime.now() + Double(Int64(1 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC)) {\n                            _ = try? Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath, anotherSourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0)\n                            newGeneratedFileModificationDate = fileModificationDate(url: generatedFilePath.url)\n                        }\n                        expect(newGeneratedFileModificationDate).toNotEventually(equal(generatedFileModificationDate))\n                    }\n                }\n            }\n\n            context(\"given a single template\") {\n                let templatePath = Stubs.templateDirectory + Path(\"Basic.stencil\")\n                let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic.swift\")).read(.utf8).withoutWhitespaces\n\n                describe(\"using inline generation\") {\n                    let templatePath = outputDir + Path(\"FakeTemplate.stencil\")\n                    let sourcePath = outputDir + Path(\"Source.swift\")\n\n                    beforeEach {\n                        update(code: \"\"\"\n                            class Foo {\n                            // sourcery:inline:Foo.Inlined\n\n                            // This will be replaced\n                            Last line\n                            // sourcery:end\n                            }\n                            \"\"\", in: sourcePath)\n\n                        update(code: \"\"\"\n                            // Line One\n                            // sourcery:inline:Foo.Inlined\n                            var property = 2\n                            // Line Three\n                            // sourcery:end\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n                    }\n\n                    it(\"replaces placeholder with generated code\") {\n                        let expectedResult = \"\"\"\n                            class Foo {\n                            // sourcery:inline:Foo.Inlined\n                            var property = 2\n                            // Line Three\n                            // sourcery:end\n                            }\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"removes code from within generated template\") {\n                        let expectedResult = \"\"\"\n                            // Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n                            // DO NOT EDIT\n\n                            // Line One\n                            \"\"\"\n\n                        let generatedPath = outputDir + Sourcery().generatedPath(for: templatePath)\n\n                        let result = try? generatedPath.read(.utf8)\n                        expect(result?.withoutWhitespaces).to(equal(expectedResult.withoutWhitespaces))\n                    }\n\n                    context(\"with hide version from header enabled\") {\n                        beforeEach {\n                            expect { try Sourcery(watcherEnabled: false, cacheDisabled: true, hideVersionHeader: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n                        }\n                        it(\"removes version information from within generated template\") {\n                        let expectedResult = \"\"\"\n                            // Generated using Sourcery — https://github.com/krzysztofzablocki/Sourcery\n                            // DO NOT EDIT\n\n                            // Line One\n                            \"\"\"\n\n                        let generatedPath = outputDir + Sourcery().generatedPath(for: templatePath)\n\n                        let result = try? generatedPath.read(.utf8)\n                        expect(result?.withoutWhitespaces).to(equal(expectedResult.withoutWhitespaces))\n                        }\n                    }\n\n                    context(\"with custom header prefix\") {\n                        beforeEach {\n                            expect { try Sourcery(watcherEnabled: false, cacheDisabled: true, hideVersionHeader: true, headerPrefix: \"// swiftlint:disable all\").processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n                        }\n                        it(\"removes version information from within generated template\") {\n                        let expectedResult = \"\"\"\n                            // swiftlint:disable all\n                            // Generated using Sourcery — https://github.com/krzysztofzablocki/Sourcery\n                            // DO NOT EDIT\n\n                            // Line One\n                            \"\"\"\n\n                        let generatedPath = outputDir + Sourcery().generatedPath(for: templatePath)\n\n                        let result = try? generatedPath.read(.utf8)\n                        expect(result?.withoutWhitespaces).to(equal(expectedResult.withoutWhitespaces))\n                        }\n                    }\n\n                    it(\"does not remove code from within generated template when missing origin\") {\n                        update(code: \"\"\"\n                            class Foo {\n                            // sourcery:inline:Bar.Inlined\n\n                            // This will be replaced\n                            Last line\n                            // sourcery:end\n                            }\n                            \"\"\", in: sourcePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            // Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n                            // DO NOT EDIT\n\n                            // Line One\n                            // sourcery:inline:Foo.Inlined\n                            var property = 2\n                            // Line Three\n                            // sourcery:end\n                            \"\"\"\n\n                        let generatedPath = outputDir + Sourcery().generatedPath(for: templatePath)\n\n                        let result = try? generatedPath.read(.utf8)\n                        expect(result?.withoutWhitespaces).to(equal(expectedResult.withoutWhitespaces))\n                    }\n\n                    it(\"does not create generated file with empty content\") {\n                        update(code: \"\"\"\n                            // sourcery:inline:Foo.Inlined\n                            var property = 2\n                            // Line Three\n                            // sourcery:end\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true, prune: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let generatedPath = outputDir + Sourcery().generatedPath(for: templatePath)\n\n                        let result = try? generatedPath.read(.utf8)\n                        expect(result).to(beNil())\n                    }\n\n                    it(\"inline multiple generated code blocks correctly\") {\n                        update(code: \"\"\"\n                            class Foo {\n                            // sourcery:inline:Foo.Inlined\n\n                            // This will be replaced\n                            Last line\n                            // sourcery:end\n                            }\n\n                            class Bar {\n                            // sourcery:inline:Bar.Inlined\n\n                            // This will be replaced\n                            Last line\n                            // sourcery:end\n                            }\n                            \"\"\", in: sourcePath)\n\n                        update(code: \"\"\"\n                            // Line One\n                            // sourcery:inline:Bar.Inlined\n                            var property = bar\n                            // Line Three\n                            // sourcery:end\n                            // Line One\n                            // sourcery:inline:Foo.Inlined\n                            var property = foo\n                            // Line Three\n                            // sourcery:end\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            class Foo {\n                            // sourcery:inline:Foo.Inlined\n                            var property = foo\n                            // Line Three\n                            // sourcery:end\n                            }\n\n                            class Bar {\n                            // sourcery:inline:Bar.Inlined\n                            var property = bar\n                            // Line Three\n                            // sourcery:end\n                            }\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"indents generated code blocks correctly\") {\n                        update(code: \"\"\"\n                            class Foo {\n                                // sourcery:inline:Foo.Inlined\n\n                                // This will be replaced\n                                Last line\n                                // sourcery:end\n\n                                class Bar {\n                                    // sourcery:inline:Bar.Inlined\n\n                                    // This will be replaced\n                                    Last line\n                                    // sourcery:end\n                                }\n                            }\n                            \"\"\", in: sourcePath)\n\n                        update(code: \"\"\"\n                            // Line One\n                            // sourcery:inline:Bar.Inlined\n                            var property = bar\n\n                            // Line Three\n                            // sourcery:end\n                            // Line One\n                            // sourcery:inline:Foo.Inlined\n                            var property = foo\n                            // Line Three\n                            // sourcery:end\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            class Foo {\n                                // sourcery:inline:Foo.Inlined\n                                var property = foo\n                                // Line Three\n                                // sourcery:end\n\n                                class Bar {\n                                    // sourcery:inline:Bar.Inlined\n                                    var property = bar\n\n                                    // Line Three\n                                    // sourcery:end\n                                }\n                            }\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n                }\n\n                describe(\"using automatic inline generation\") {\n                    let templatePath = outputDir + Path(\"FakeTemplate.stencil\")\n                    let sourcePath = outputDir + Path(\"Source.swift\")\n\n                    it(\"insert generated code in the end of type body\") {\n                        update(code: \"class Foo {}\", in: sourcePath)\n\n                        update(code: \"\"\"\n                            // Line One\n                            // sourcery:inline:auto:Foo.Inlined\n                            var property = 2\n                            // Line Three\n                            // sourcery:end\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            class Foo {\n                            // sourcery:inline:auto:Foo.Inlined\n                            var property = 2\n                            // Line Three\n                            // sourcery:end\n                            }\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"insert generated code in the end of type body maintaining identation, accomodates for baseIdent\") {\n                        update(code:\n                        \"\"\"\n                        class Foo {\n                            struct Inner {\n                            }\n                        }\n                        \"\"\",\n                        in: sourcePath)\n\n                        update(code: \"\"\"\n                            // Line One\n                            // sourcery:inline:auto:Foo.Inner.Inlined\n                                var property = 3\n                            // Line Three\n                            // sourcery:end\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 4) }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            class Foo {\n                                struct Inner {\n\n                                    // sourcery:inline:auto:Foo.Inner.Inlined\n                                        var property = 3\n                                    // Line Three\n                                    // sourcery:end\n                                }\n                            }\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"insert generated code after the end of type body when using after-auto\") {\n                        update(code: \"class Foo {}\\nstruct Boo {}\", in: sourcePath)\n\n                        update(code: \"\"\"\n                            // sourcery:inline:after-auto:Foo.Inlined\n                            var property = 2\n                            // sourcery:end\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            class Foo {}\n                            // sourcery:inline:after-auto:Foo.Inlined\n                            var property = 2\n                            // sourcery:end\n                            struct Boo {}\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"insert generated code line before the end of type body\") {\n                        update(code: \"\"\"\n                        class Foo {\n                            var property = 1 }\n                        \"\"\", in: sourcePath)\n\n                        update(code: \"\"\"\n                            // Line One\n                            // sourcery:inline:auto:Foo.Inlined\n                            var property = 2\n                            // Line Three\n                            // sourcery:end\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            class Foo {\n\n                                // sourcery:inline:auto:Foo.Inlined\n                                var property = 2\n                                // Line Three\n                                // sourcery:end\n                                var property = 1 }\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"handles UTF16 characters\") {\n                        update(code: \"\"\"\n                            class A {\n                                let 👩‍🚀: String\n                            }\n                            \"\"\", in: sourcePath)\n                        update(code: \"\"\"\n                            {% for type in types.all %}\n                            // sourcery:inline:auto:{{ type.name }}.init\n                            init({% for variable in type.storedVariables %}{{variable.name}}: {{variable.typeName}}{% ifnot forloop.last %}, {% endif %}{% endfor %}) {\n                            {% for variable in type.storedVariables %}\n                                self.{{variable.name}} = {{variable.name}}\n                            {% endfor %}\n                            }\n                            // sourcery:end\n                            {% endfor %}\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            class A {\n                                let 👩‍🚀: String\n\n                            // sourcery:inline:auto:A.init\n                            init(👩‍🚀: String) {\n                                self.👩‍🚀 = 👩‍🚀\n                            }\n                            // sourcery:end\n                            }\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"extracts annotations when prefix contains case noun\") {\n                        update(code: \"\"\"\n                            struct MyStruct {\n                                // sourcery:inline:MyStruct.Inlined\n                                // This will be replaced\n                                // sourcery:end\n                                // sourcery: stub = \"A\"\n                                let basic: String;\n                                // sourcery: stub = \"B\"\n                                let caseProperty: String;\n                                // sourcery: stub = \"C\"\n                                let casesProperty: String;\n                                // sourcery: stub = \"D\"\n                                let CaseProperty: String;\n                            }\n                            \"\"\", in: sourcePath)\n                        update(code: \"\"\"\n                            // sourcery:inline:MyStruct.Inlined\n                            {% for type in types.all %}\n                            {% for variable in type.storedVariables %}\n                            let {{ variable.name }}XXX = \"{{ variable.annotations[\"stub\"] }}\";\n                            {% endfor %}\n                            {% endfor %}\n                            // sourcery:end\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            struct MyStruct {\n                                // sourcery:inline:MyStruct.Inlined\n                                let basicXXX = \"A\";\n                                let casePropertyXXX = \"B\";\n                                let casesPropertyXXX = \"C\";\n                                let CasePropertyXXX = \"D\";\n                                // sourcery:end\n                                // sourcery: stub = \"A\"\n                                let basic: String;\n                                // sourcery: stub = \"B\"\n                                let caseProperty: String;\n                                // sourcery: stub = \"C\"\n                                let casesProperty: String;\n                                // sourcery: stub = \"D\"\n                                let CaseProperty: String;\n                            }\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"replaces inline contents without crashing\") {\n                        update(code: \"\"\"\n                            struct MyStruct {\n                                // sourcery:inline:MyStruct.Inlined\n                                // This will be replaced\n                                // sourcery:end\n                                // sourcery:inline:MyStruct.Inlined.Foo\n                                // sourcery: stub = \"A\"\n                                let basic: String;\n                                // sourcery: stub = \"B\"\n                                let caseProperty: String;\n                                // sourcery: stub = \"C\"\n                                let casesProperty: String;\n                                // sourcery: stub = \"D\"\n                                let CaseProperty: String;\n                                // sourcery:end\n                            }\n                            \"\"\", in: sourcePath)\n                        update(code: \"\"\"\n                            // sourcery:inline:MyStruct.Inlined\n                            {% for type in types.all %}\n                            {% for variable in type.storedVariables %}\n                            let {{ variable.name }}XXX = \"{{ variable.annotations[\"stub\"] }}\";\n                            {% endfor %}\n                            {% endfor %}\n                            // sourcery:end\n                            // sourcery:inline:MyStruct.Inlined.Foo\n                            // sourcery:end\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            struct MyStruct {\n                                // sourcery:inline:MyStruct.Inlined\n                                // sourcery:end\n                                // sourcery:inline:MyStruct.Inlined.Foo\n                                // sourcery:end\n                            }\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"handles previously generated code with UTF16 characters\") {\n                        update(code: \"\"\"\n                            class A {\n                                let 👩‍🚀: String\n\n                                // sourcery:inline:auto:A.init\n                                init(👩‍🚀: String) {\n                                    self.👩‍🚀 = 👩‍🚀\n                                }\n                                // sourcery:end\n                            }\n\n                            class B {\n                                let 👩‍🚀: String\n                            }\n                            \"\"\", in: sourcePath)\n                        update(code: \"\"\"\n                            {% for type in types.all %}\n                            // sourcery:inline:auto:{{ type.name }}.init\n                            init({% for variable in type.storedVariables %}{{variable.name}}: {{variable.typeName}}{% ifnot forloop.last %}, {% endif %}{% endfor %}) {\n                            {% for variable in type.storedVariables %}\n                                self.{{variable.name}} = {{variable.name}}\n                            {% endfor %}\n                            }\n                            // sourcery:end\n                            {% endfor %}\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            class A {\n                                let 👩‍🚀: String\n\n                                // sourcery:inline:auto:A.init\n                                init(👩‍🚀: String) {\n                                    self.👩‍🚀 = 👩‍🚀\n                                }\n                                // sourcery:end\n                            }\n\n                            class B {\n                                let 👩‍🚀: String\n\n                            // sourcery:inline:auto:B.init\n                            init(👩‍🚀: String) {\n                                self.👩‍🚀 = 👩‍🚀\n                            }\n                            // sourcery:end\n                            }\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"insert generated code in multiple types\") {\n                        update(code: \"\"\"\n                            class Foo {}\n\n                            class Bar {}\n                            \"\"\", in: sourcePath)\n\n                        update(code: \"\"\"\n                            // Line One\n                            // sourcery:inline:auto:Bar.Inlined\n                            var property = bar\n                            // Line Three\n                            // sourcery:end\n\n                            // Line One\n                            // sourcery:inline:auto:Foo.Inlined\n                            var property = foo\n                            // Line Three\n                            // sourcery:end\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            class Foo {\n                            // sourcery:inline:auto:Foo.Inlined\n                            var property = foo\n                            // Line Three\n                            // sourcery:end\n                            }\n\n                            class Bar {\n                            // sourcery:inline:auto:Bar.Inlined\n                            var property = bar\n                            // Line Three\n                            // sourcery:end\n                            }\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"insert same generated code in multiple types\") {\n                        update(code: \"\"\"\n                            class Foo {\n                            // sourcery:inline:auto:Foo.fake\n                            // sourcery:end\n                            }\n\n                            class Bar {}\n                            \"\"\", in: sourcePath)\n\n                        update(code: \"\"\"\n                            // Line One\n                            {% for type in types.all %}\n                            // sourcery:inline:auto:{{ type.name }}.fake\n                            var property = bar\n                            // Line Three\n                            // sourcery:end\n                            {% endfor %}\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            class Foo {\n                            // sourcery:inline:auto:Foo.fake\n                            var property = bar\n                            // Line Three\n                            // sourcery:end\n                            }\n\n                            class Bar {\n                            // sourcery:inline:auto:Bar.fake\n                            var property = bar\n                            // Line Three\n                            // sourcery:end\n                            }\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"insert generated code in a nested type\") {\n                        update(code: \"\"\"\n                            class Foo {\n                                class Bar {}\n                            }\n                            \"\"\", in: sourcePath)\n\n                        update(code: \"\"\"\n                            // Line One\n                            // sourcery:inline:auto:Foo.Bar.AutoInlined\n                            var property = bar\n                            // Line Three\n                            // sourcery:end\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            class Foo {\n                                class Bar {\n                            // sourcery:inline:auto:Foo.Bar.AutoInlined\n                            var property = bar\n                            // Line Three\n                            // sourcery:end\n                            }\n                            }\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"insert generated code in a nested type with extension\") {\n                        update(code: \"\"\"\n                            class Foo {}\n\n                            extension Foo {\n                                class Bar {}\n                            }\n                            \"\"\", in: sourcePath)\n\n                        update(code: \"\"\"\n                            // Line One\n                            // sourcery:inline:auto:Foo.Bar.AutoInlined\n                            var property = bar\n                            // Line Three\n                            // sourcery:end\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            class Foo {}\n\n                            extension Foo {\n                                class Bar {\n                            // sourcery:inline:auto:Foo.Bar.AutoInlined\n                            var property = bar\n                            // Line Three\n                            // sourcery:end\n                            }\n                            }\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"insert generated code in both type and its nested type\") {\n                        update(code: \"\"\"\n                            class Foo {}\n\n                            extension Foo {\n                                class Bar {}\n                            }\n                            \"\"\", in: sourcePath)\n\n                        update(code: \"\"\"\n                            // Line One\n                            // sourcery:inline:auto:Foo.AutoInlined\n                            var property = foo\n                            // Line Three\n                            // sourcery:end\n                            // sourcery:inline:auto:Foo.Bar.AutoInlined\n                            var property = bar\n                            // Line Three\n                            // sourcery:end\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            class Foo {\n                            // sourcery:inline:auto:Foo.AutoInlined\n                            var property = foo\n                            // Line Three\n                            // sourcery:end\n                            }\n\n                            extension Foo {\n                                class Bar {\n                            // sourcery:inline:auto:Foo.Bar.AutoInlined\n                            var property = bar\n                            // Line Three\n                            // sourcery:end\n                            }\n                            }\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"inserts generated code from different templates (both inline:auto)\") {\n                        update(code: \"class Foo {}\", in: sourcePath)\n\n                        update(code: \"\"\"\n                            // Line One\n                            // sourcery:inline:auto:Foo.fake\n                            var property = 2\n                            // Line Three\n                            // sourcery:end\n                            \"\"\", in: templatePath)\n\n                        let secondTemplatePath = outputDir + Path(\"OtherFakeTemplate.stencil\")\n\n                        update(code: \"\"\"\n                            // sourcery:inline:auto:Foo.otherFake\n                            // Line Four\n                            // sourcery:end\n                            \"\"\", in: secondTemplatePath)\n\n                        expect {\n                            try Sourcery(watcherEnabled: false, cacheDisabled: true)\n                                .processFiles(.sources(Paths(include: [sourcePath])),\n                                              usingTemplates: Paths(include: [secondTemplatePath, templatePath]),\n                                              output: output, baseIndentation: 0)\n                            }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                            class Foo {\n                            // sourcery:inline:auto:Foo.fake\n                            var property = 2\n                            // Line Three\n                            // sourcery:end\n\n                            // sourcery:inline:auto:Foo.otherFake\n                            // Line Four\n                            // sourcery:end\n                            }\n                            \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n\n                        // when regenerated\n                        expect {\n                            try Sourcery(watcherEnabled: false, cacheDisabled: true)\n                                .processFiles(.sources(Paths(include: [sourcePath])),\n                                              usingTemplates: Paths(include: [secondTemplatePath, templatePath]),\n                                              output: output, baseIndentation: 0)\n                            }.toNot(throwError())\n\n                        let newResult = try? sourcePath.read(.utf8)\n                        expect(newResult).to(equal(expectedResult))\n                    }\n\n                    it(\"inserts generated code from different templates (both inline)\") {\n                        let templatePathA = outputDir + Path(\"InlineTemplateA.stencil\")\n                        let templatePathB = outputDir + Path(\"InlineTemplateB.stencil\")\n                        let sourcePath = outputDir + Path(\"ClassWithMultipleInlineAnnotations.swift\")\n\n                        update(code: \"\"\"\n                                     class ClassWithMultipleInlineAnnotations {\n                                     // sourcery:inline:ClassWithMultipleInlineAnnotations.A\n                                     var a0: Int\n                                     // sourcery:end\n\n                                     // sourcery:inline:ClassWithMultipleInlineAnnotations.B\n                                     var b0: String\n                                     // sourcery:end\n                                     }\n                                     \"\"\", in: sourcePath)\n\n                        update(code: \"\"\"\n                                     {% for type in types.all %}\n                                     // sourcery:inline:{{ type.name }}.A\n                                     var a0: Int\n                                     var a1: Int\n                                     var a2: Int\n                                     // sourcery:end\n                                     {% endfor %}\n                                     \"\"\", in: templatePathA)\n\n                        update(code: \"\"\"\n                                     {% for type in types.all %}\n                                     // sourcery:inline:{{ type.name }}.B\n                                     var b0: Int\n                                     var b1: Int\n                                     var b2: Int\n                                     // sourcery:end\n                                     {% endfor %}\n                                     \"\"\", in: templatePathB)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true)\n                            .processFiles(.sources(Paths(include: [sourcePath])),\n                                usingTemplates: Paths(include: [templatePathA, templatePathB]),\n                                output: output, baseIndentation: 0)\n                        }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                                             class ClassWithMultipleInlineAnnotations {\n                                             // sourcery:inline:ClassWithMultipleInlineAnnotations.A\n                                             var a0: Int\n                                             var a1: Int\n                                             var a2: Int\n                                             // sourcery:end\n\n                                             // sourcery:inline:ClassWithMultipleInlineAnnotations.B\n                                             var b0: Int\n                                             var b1: Int\n                                             var b2: Int\n                                             // sourcery:end\n                                             }\n                                             \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"inserts generated code from different templates (inline and inline:auto)\") {\n                        let templatePathA = outputDir + Path(\"InlineTemplateA.stencil\")\n                        let templatePathB = outputDir + Path(\"InlineTemplateB.stencil\")\n                        let sourcePath = outputDir + Path(\"ClassWithMultipleInlineAnnotations.swift\")\n\n                        /*\n                         inline:auto annotations are inserted at the beginning of the last line of a declaration,\n                         OR at the beginning of the last line of the containing file,\n                         if proposed location out of bounds, which should not be.\n\n                         To differentiate such cases the last line of a declaration\n                         shall not be the last line of the file.\n                         */\n\n                        update(code: \"\"\"\n                                     class ClassWithMultipleInlineAnnotations {\n                                     // sourcery:inline:ClassWithMultipleInlineAnnotations.A\n                                     var a0: Int\n                                     // sourcery:end\n                                     }\n                                     // the last line of the file\n                                     \"\"\", in: sourcePath)\n\n                        update(code: \"\"\"\n                                     {% for type in types.all %}\n                                     // sourcery:inline:{{ type.name }}.A\n                                     var a0: Int\n                                     var a1: Int\n                                     var a2: Int\n                                     // sourcery:end\n                                     {% endfor %}\n                                     \"\"\", in: templatePathA)\n\n                        update(code: \"\"\"\n                                     {% for type in types.all %}\n                                     // sourcery:inline:auto:{{ type.name }}.B\n                                     var b0: Int\n                                     var b1: Int\n                                     var b2: Int\n                                     // sourcery:end\n                                     {% endfor %}\n                                     \"\"\", in: templatePathB)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true)\n                            .processFiles(.sources(Paths(include: [sourcePath])),\n                                usingTemplates: Paths(include: [templatePathA, templatePathB]),\n                                output: output, baseIndentation: 0)\n                        }.toNot(throwError())\n\n                        let expectedResult = \"\"\"\n                                             class ClassWithMultipleInlineAnnotations {\n                                             // sourcery:inline:ClassWithMultipleInlineAnnotations.A\n                                             var a0: Int\n                                             var a1: Int\n                                             var a2: Int\n                                             // sourcery:end\n\n                                             // sourcery:inline:auto:ClassWithMultipleInlineAnnotations.B\n                                             var b0: Int\n                                             var b1: Int\n                                             var b2: Int\n                                             // sourcery:end\n                                             }\n                                             // the last line of the file\n                                             \"\"\"\n\n                        let result = try? sourcePath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    context(\"with cache of already inserted code\") {\n                        beforeEach {\n                            Sourcery.removeCache(for: [sourcePath])\n\n                            update(code: \"class Foo {}\", in: sourcePath)\n\n                            update(code: \"\"\"\n                                // Line One\n                                // sourcery:inline:auto:Foo.Inlined\n                                var property = 2\n                                // Line Three\n                                // sourcery:end\n                                \"\"\", in: templatePath)\n\n                            _ = try? Sourcery(watcherEnabled: false, cacheDisabled: false).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: Output(outputDir, linkTo: nil), baseIndentation: 0)\n                        }\n\n                        it(\"inserts the generated code if it was deleted\") {\n                            update(code: \"class Foo {}\", in: sourcePath)\n\n                            expect { try Sourcery(watcherEnabled: false, cacheDisabled: false).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: Output(outputDir, linkTo: nil), baseIndentation: 0) }.toNot(throwError())\n\n                            let expectedResult = \"\"\"\n                                class Foo {\n                                // sourcery:inline:auto:Foo.Inlined\n                                var property = 2\n                                // Line Three\n                                // sourcery:end\n                                }\n                                \"\"\"\n\n                            let result = try? sourcePath.read(.utf8)\n                            expect(result).to(equal(expectedResult))\n                        }\n\n                        afterEach {\n                            Sourcery.removeCache(for: [sourcePath])\n                        }\n                    }\n                }\n\n                describe(\"using per file generation\") {\n                    let templatePath = outputDir + Path(\"FakeTemplate.stencil\")\n                    let sourcePath = outputDir + Path(\"Source.swift\")\n\n                    beforeEach {\n                        update(code: \"class Foo { }\", in: sourcePath)\n\n                        update(code: \"\"\"\n                            // Line One\n                            {% for type in types.all %}\n                            // sourcery:file:Generated/{{ type.name }}\n                            extension {{ type.name }} {\n                            var property = 2\n                            // Line Three\n                            }\n                            // sourcery:end\n                            {% endfor %}\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n                    }\n\n                    it(\"replaces placeholder with generated code\") {\n                        let expectedResult = \"\"\"\n                            // Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n                            // DO NOT EDIT\n                            extension Foo {\n                            var property = 2\n                            // Line Three\n                            }\n\n                            \"\"\"\n\n                        let generatedPath = outputDir + Path(\"Generated/Foo.generated.swift\")\n\n                        let result = try? generatedPath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                    it(\"removes code from within generated template\") {\n                        let expectedResult = \"\"\"\n                            // Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n                            // DO NOT EDIT\n\n                            // Line One\n\n                            \"\"\"\n\n                        let generatedPath = outputDir + Sourcery().generatedPath(for: templatePath)\n\n                        let result = try? generatedPath.read(.utf8)\n                        expect(result?.withoutWhitespaces).to(equal(expectedResult.withoutWhitespaces))\n                    }\n\n                    it(\"does not create generated file with empty content\") {\n                        update(code: \"\"\"\n                            {% for type in types.all %}\n                            // sourcery:file:Generated/{{ type.name }}\n                            // sourcery:end\n                            {% endfor %}\n                            \"\"\", in: templatePath)\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true, prune: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let generatedPath = outputDir + Path(\"Generated/Foo.generated.swift\")\n\n                        let result = try? generatedPath.read(.utf8)\n                        expect(result).to(beNil())\n                    }\n\n                    it(\"appends content of several annotations into one file\") {\n                        update(code: \"\"\"\n                            // Line One\n                            // sourcery:file:Generated/Foo\n                            extension Foo {\n                            var property1 = 1\n                            }\n                            // sourcery:end\n                            // sourcery:file:Generated/Foo\n                            extension Foo {\n                            var property2 = 2\n                            }\n                            // sourcery:end\n                            \"\"\", in: templatePath)\n\n                        let expectedResult = \"\"\"\n                            // Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n                            // DO NOT EDIT\n                            extension Foo {\n                            var property1 = 1\n                            }\n\n                            extension Foo {\n                            var property2 = 2\n                            }\n\n                            \"\"\"\n\n                        expect { try Sourcery(watcherEnabled: false, cacheDisabled: true, prune: true).processFiles(.sources(Paths(include: [sourcePath])), usingTemplates: Paths(include: [templatePath]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        let generatedPath = outputDir + Path(\"Generated/Foo.generated.swift\")\n\n                        let result = try? generatedPath.read(.utf8)\n                        expect(result).to(equal(expectedResult))\n                    }\n\n                }\n\n                context(\"given a restricted file\") {\n                    let targetPath = outputDir + Sourcery().generatedPath(for: templatePath)\n\n                    it(\"ignores files that are marked with generated by Sourcery\") {\n                        _ = try? targetPath.delete()\n\n                        expect {\n                            try Sourcery(cacheDisabled: true)\n                                .processFiles(.sources(Paths(include: [Stubs.resultDirectory] + Path(\"Basic.swift\"))),\n                                              usingTemplates: Paths(include: [templatePath]),\n                                              output: output, baseIndentation: 0)\n                            }.toNot(throwError())\n\n                        expect(targetPath.exists).to(beFalse())\n                    }\n\n                    it(\"throws error when file contains merge conflict markers\") {\n                        let sourcePath = outputDir + Path(\"Source.swift\")\n\n                        update(code: \"\"\"\n\n\n                            <<<<<\n\n                            \"\"\", in: sourcePath)\n\n                        expect {\n                            try Sourcery(cacheDisabled: true)\n                                .processFiles(.sources(Paths(include: [sourcePath])),\n                                              usingTemplates: Paths(include: [templatePath]),\n                                              output: output, baseIndentation: 0)\n                            }.to(throwError())\n                    }\n\n                    it(\"does not throw when source file does not exist\") {\n                        let sourcePath = outputDir + Path(\"Missing.swift\")\n                        expect {\n                            try Sourcery(cacheDisabled: true)\n                                .processFiles(.sources(Paths(include: [sourcePath])),\n                                              usingTemplates: Paths(include: [templatePath]),\n                                              output: Output(outputDir, linkTo: nil), baseIndentation: 0)\n                            }.toNot(throwError())\n                    }\n                }\n\n                context(\"given excluded source paths\") {\n                    it(\"ignores excluded sources\") {\n                        expect {\n                            try Sourcery(cacheDisabled: true)\n                                .processFiles(.sources(Paths(include: [Stubs.sourceDirectory], exclude: [Stubs.sourceDirectory + \"Foo.swift\"])),\n                                              usingTemplates: Paths(include: [templatePath]),\n                                              output: output, baseIndentation: 0)\n                            }.toNot(throwError())\n\n                        let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                        let expectedResult = try? (Stubs.resultDirectory + Path(\"BasicFooExcluded.swift\")).read(.utf8).withoutWhitespaces\n                        expect(result.flatMap { $0.withoutWhitespaces }).to(equal(expectedResult?.withoutWhitespaces))\n                    }\n                }\n\n                context(\"without a watcher\") {\n                    it(\"creates expected output file\") {\n                        expect {\n                            try Sourcery(cacheDisabled: true)\n                                .processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                              usingTemplates: Paths(include: [templatePath]),\n                                              output: output, baseIndentation: 0)\n                            }.toNot(throwError())\n\n                        let result = (try? (outputDir + Sourcery().generatedPath(for: templatePath)).read(.utf8))\n                        expect(result.flatMap { $0.withoutWhitespaces }).to(equal(expectedResult?.withoutWhitespaces))\n                    }\n                }\n\n#if canImport(ObjectiveC)\n                context(\"with watcher\") {\n                    var watcher: Any?\n                    let tmpTemplate = outputDir + Path(\"FakeTemplate.stencil\")\n                    func updateTemplate(code: String) { guard (try? tmpTemplate.write(code)) != nil else { fatalError() } }\n\n                    it(\"re-generates on template change\") {\n                        updateTemplate(code: \"Found {{ types.enums.count }} Enums\")\n                        let sourcery = Sourcery(watcherEnabled: true, cacheDisabled: true)\n                        expect { watcher = try sourcery.processFiles(.sources(Paths(include: [Stubs.sourceDirectory])), usingTemplates: Paths(include: [tmpTemplate]), output: output, baseIndentation: 0) }.toNot(throwError())\n\n                        // ! Change the template\n                        updateTemplate(code: \"Found {{ types.all.count }} Types\")\n\n                        let result: () -> String? = { (try? (outputDir + Sourcery().generatedPath(for: tmpTemplate)).read(.utf8)) }\n                        expect(result()).toEventually(contain(\"\\(sourcery.generationHeader)Found 3 Types\"))\n\n                        _ = watcher\n                    }\n                }\n#endif\n            }\n\n            context(\"given a template folder\") {\n\n                context(\"given a single file output\") {\n                    let outputFile = outputDir + \"Composed.swift\"\n#if canImport(JavaScriptCore)\n                    let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic+Other+SourceryTemplates.swift\")).read(.utf8).withoutWhitespaces\n                    it(\"joins generated code into single file\") {\n                        expect {\n                            try Sourcery(cacheDisabled: true)\n                                .processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                              usingTemplates: Paths(include: [\n                                                Stubs.templateDirectory + \"Basic.stencil\",\n                                                Stubs.templateDirectory + \"Other.stencil\",\n                                                Stubs.templateDirectory + \"SourceryTemplateStencil.sourcerytemplate\",\n                                                Stubs.templateDirectory + \"SourceryTemplateEJS.sourcerytemplate\"\n                                              ]),\n                                              output: Output(outputFile), baseIndentation: 0)\n                            }.toNot(throwError())\n\n                        let result = try? outputFile.read(.utf8)\n                        expect(result?.withoutWhitespaces).to(equal(expectedResult?.withoutWhitespaces))\n                    }\n#else\n                    let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic+Other+SourceryTemplates_Linux.swift\")).read(.utf8).withoutWhitespaces\n                    it(\"joins generated code into single file\") {\n                        expect {\n                            try Sourcery(cacheDisabled: true)\n                                .processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                              usingTemplates: Paths(include: [\n                                                Stubs.templateDirectory + \"Basic.stencil\",\n                                                Stubs.templateDirectory + \"Other.stencil\",\n                                                Stubs.templateDirectory + \"SourceryTemplateStencil.sourcerytemplate\"\n                                              ]),\n                                              output: Output(outputFile), baseIndentation: 0)\n                            }.toNot(throwError())\n\n                        let result = try? outputFile.read(.utf8)\n                        expect(result?.withoutWhitespaces).to(equal(expectedResult?.withoutWhitespaces))\n                    }\n#endif\n\n                    it(\"does not create generated file with empty content\") {\n                        let templatePath = Stubs.templateDirectory + Path(\"Empty.stencil\")\n                        update(code: \"\", in: templatePath)\n\n                        expect {\n                            try Sourcery(cacheDisabled: true, prune: true).processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                                                                        usingTemplates: Paths(include: [templatePath]),\n                                                                                        output: Output(outputFile), baseIndentation: 0)\n                        }.toNot(throwError())\n\n                        let result = try? outputFile.read(.utf8)\n                        expect(result).to(beNil())\n                    }\n                }\n\n                context(\"given an output directory\") {\n                    it(\"creates corresponding output file for each template\") {\n                        let templateNames = [\"Basic\", \"Other\"]\n                        let generated = templateNames.map { outputDir + Sourcery().generatedPath(for: Stubs.templateDirectory + \"\\($0).stencil\") }\n                        let expected = templateNames.map { Stubs.resultDirectory + Path(\"\\($0).swift\") }\n\n                        expect {\n                            try Sourcery(cacheDisabled: true)\n                                .processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                              usingTemplates: Paths(include: [Stubs.templateDirectory]),\n                                              output: output, baseIndentation: 0)\n                            }.toNot(throwError())\n\n                        for (idx, outputPath) in generated.enumerated() {\n                            let output = try? outputPath.read(.utf8)\n                            let expected = try? expected[idx].read(.utf8)\n\n                            expect(output?.withoutWhitespaces).to(equal(expected?.withoutWhitespaces))\n                        }\n                    }\n                }\n\n                context(\"given excluded template paths\") {\n                    let outputFile = outputDir + \"Composed.swift\"\n                    let expectedResult = try? (Stubs.resultDirectory + Path(\"Basic+Other.swift\")).read(.utf8).withoutWhitespaces\n\n                    it(\"do not create generated file for excluded templates\") {\n                        expect {\n                            try Sourcery(cacheDisabled: true)\n                                .processFiles(.sources(Paths(include: [Stubs.sourceDirectory])),\n                                              usingTemplates: Paths(include: [Stubs.templateDirectory],\n                                                                    exclude: [\n                                                                        Stubs.templateDirectory + \"GenerationWays.stencil\",\n                                                                        Stubs.templateDirectory + \"Include.stencil\",\n                                                                        Stubs.templateDirectory + \"Partial.stencil\",\n                                                                        Stubs.templateDirectory + \"SourceryTemplateStencil.sourcerytemplate\",\n                                                                        Stubs.templateDirectory + \"SourceryTemplateEJS.sourcerytemplate\"\n                                                                    ]),\n                                              output: Output(outputFile), baseIndentation: 0)\n                            }.toNot(throwError())\n\n                        let result = try? outputFile.read(.utf8)\n                        expect(result.flatMap { $0.withoutWhitespaces }).to(equal(expectedResult?.withoutWhitespaces))\n                    }\n                }\n\n            }\n\n#if canImport(ObjectiveC)\n            context(\"given project\") {\n                var originalProject: XcodeProj?\n\n                let projectPath = Stubs.sourceDirectory + \"TestProject\"\n                let projectFilePath = Stubs.sourceDirectory + \"TestProject/TestProject.xcodeproj\"\n                // swiftlint:disable:next force_try\n                let sources = try! Source(dict: [\n                    \"project\": [\n                        \"file\": \"TestProject.xcodeproj\",\n                        \"target\": [\"name\": \"TestProject\"]\n                    ]], relativePath: projectPath)\n                var templatePath = Stubs.templateDirectory + \"Other.stencil\"\n                var templates: Paths {\n                    return Paths(include: [templatePath])\n                }\n                var output: Output {\n                    // swiftlint:disable:next force_try\n                    return try! Output(dict: [\n                        \"path\": outputDir.string,\n                        \"link\": [\"project\": \"TestProject.xcodeproj\", \"target\": \"TestProject\"]\n                        ], relativePath: projectPath)\n                }\n                var sourceFilesPaths: [Path] {\n                    guard let project = try? XcodeProj(path: projectFilePath),\n                        let target = project.target(named: \"TestProject\") else {\n                            return []\n                    }\n\n                    return project.sourceFilesPaths(target: target, sourceRoot: projectPath)\n                }\n\n                beforeEach {\n                    expect {\n                        originalProject = try XcodeProj(path: projectFilePath)\n                        }.toNot(throwError())\n                }\n\n                afterEach {\n                    expect {\n                        try originalProject?.writePBXProj(path: projectFilePath, outputSettings: .init())\n                        }.toNot(throwError())\n                }\n\n                it(\"links generated files\") {\n                    expect {\n                        try Sourcery(cacheDisabled: true, prune: true).processFiles(sources, usingTemplates: templates, output: output, baseIndentation: 0)\n                    }.toNot(throwError())\n\n                    expect(sourceFilesPaths.contains(outputDir + \"Other.generated.swift\")).to(beTrue())\n                }\n\n                it(\"links generated files when using per file generation\") {\n                    templatePath = outputDir + \"PerFileGeneration.stencil\"\n                    update(code: \"\"\"\n                            // Line One\n                            {% for type in types.all %}\n                            // sourcery:file:Generated/{{ type.name }}.generated.swift\n                            extension {{ type.name }} {\n                            var property = 2\n                            // Line Three\n                            }\n                            // sourcery:end\n                            {% endfor %}\n                            \"\"\", in: templatePath)\n\n                    expect {\n                        try Sourcery(cacheDisabled: true, prune: true).processFiles(sources, usingTemplates: templates, output: output, baseIndentation: 0)\n                    }.toNot(throwError())\n\n                    expect {\n                        let paths = sourceFilesPaths\n                        expect(paths.contains(outputDir + \"PerFileGeneration.generated.swift\")).to(beTrue())\n                        expect(paths.contains(outputDir + \"Generated/FooBarBaz.generated.swift\")).to(beTrue())\n                    }.toNot(throwError())\n                }\n            }\n#endif\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Configs/invalid.yml",
    "content": "invalid configuration\n"
  },
  {
    "path": "SourceryTests/Stub/Configs/multi.yml",
    "content": "configurations:\n    - sources:\n        - \"${SOURCE_PATH}/0\"\n      templates:\n        - \"Templates/0\"\n      output: \"Output/0\"\n      args:\n        serverUrl: \"${serverUrl}/0\"\n        serverPort: \"${serverPort}/0\"\n    - sources:\n        - \"${SOURCE_PATH}/1\"\n      templates:\n        - \"Templates/1\"\n      output: \"Output/1\"\n      args:\n        serverUrl: \"${serverUrl}/1\"\n        serverPort: \"${serverPort}1\"\n\n"
  },
  {
    "path": "SourceryTests/Stub/Configs/parent.yml",
    "content": "configurations:\n    - child: valid.yml\n"
  },
  {
    "path": "SourceryTests/Stub/Configs/valid.yml",
    "content": "sources:\n    - \"${SOURCE_PATH}\"\ntemplates:\n    - \"Templates\"\noutput: \"Output\"\nargs:\n    serverUrl: ${serverUrl}\n    serverPort: ${serverPort}\n"
  },
  {
    "path": "SourceryTests/Stub/DryRun-Code/Base.swift",
    "content": "import Foundation\n\nprotocol AutoEquatable {}\n\nstruct Eq: AutoEquatable {\n// sourcery:inline:Eq.AutoEquatable\n// sourcery:end\n    let s: Int\n    let o: String\n    let u: String\n    let r: Int\n    let c: [Int]\n    let e: Bool\n}\n\nstruct Eq3: AutoEquatable {\n    let counter: Int\n    let foo: String\n    let bar: Set<Bool>\n}\n\nstruct Eq2: AutoEquatable {\n// sourcery:inline:Eq2.AutoEquatable\n// sourcery:end\n    let r: Int\n    let y: String\n    let d: [Int: Bool]\n    let r2: Int\n    let y2: [Int]\n    let r3: Bool\n    let u: Int64\n    let n: Double\n}\n\nenum EqEnum: AutoEquatable {\n    case some(Int)\n    case other(Bool)\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Errors/localized-error.swift",
    "content": "import Foundation\n\nfinal class Localized: NSObject {\n    fileprivate override init() {}\n}\n\nextension Localized {\n    static func storeEnterRecipientNickname() -> String {\n        return NSLocalizedString(\"Please enter the recipient's nickname\", comment: \"\")\n    }\n    static func storeNameCannotBeEmpty() -> String {\n        return NSLocalizedString(\"Sorry, the name can't be empty. Please enter a nickname to send the gift to. You can also send the gift to yourself!\", comment: \"\")\n    }\n    static func storeSendGiftToUser() -> String {\n        return NSLocalizedString(\"Send a gift to \", comment: \"\")\n    }\n    static func storeSendStickerPackToUser() -> String {\n        return NSLocalizedString(\"Send Free Sticker Pack to \", comment: \"label\")\n    }\n    static func storeBuyStickerPackForUser() -> String {\n        return NSLocalizedString(\"Buy Sticker Pack for \", comment: \"label\")\n    }\n    static func storeAddFreeStickerPackToUser() -> String {\n        return NSLocalizedString(\"Add Free Sticker Pack to \", comment: \"button\")\n    }\n    static func storeAddFreeStickerPack() -> String {\n        return NSLocalizedString(\"Add Free Sticker Pack\", comment: \"button\")\n    }\n    static func storeNoUserWithNickname() -> String {\n        return NSLocalizedString(\"No user exists with that nickname\", comment: \"\")\n    }\n    static func storeWhosThisGiftGoigTo() -> String {\n        return NSLocalizedString(\"Who's this gift going to?\", comment:\"\")\n    }\n    static func profileGiftFrom(_ nick: String) -> String {\n        return NSLocalizedString(\"Gift from %@\", comment: \"label\")\n    }\n    static func profileGiftFromAnonymous() -> String {\n        return NSLocalizedString(\"Gift from Anonymous\", comment: \"label\")\n    }\n    static func profileInvisibleModeAlert() -> String {\n        return NSLocalizedString(\"Invisible mode makes you appear to be offline. To allow special friends to know you are online go to your Settings and add their name to the Visible User List.\\nAre you sure you want to do this?\", comment: \"Alert\")\n    }\n    static func profileNextDateDisplayNameAlert(_ nextChangeDate: String) -> String {\n        return NSLocalizedString(\"Please note that you will not be able to change this until %@\", comment: \"Warning\")\n    }\n    static func profileGiftSendIMButton() -> String {\n        return NSLocalizedString(\"Send IM\", comment: \"Button\")\n    }\n    static func profileYouHaveNoSubscription() -> String {\n        return NSLocalizedString(\"You have no subscription\", comment: \"Label\")\n    }\n    static func roomSortingMaleFemale() -> String {\n        return NSLocalizedString(\"Females/Males\", comment: \"\")\n    }\n\n    static func roomSortingAlphabetical() -> String {\n        return NSLocalizedString(\"Alphabetical\", comment: \"\")\n    }\n\n    static func roomSortingWhosViewingYou() -> String {\n        return NSLocalizedString(\"Who's viewing you\", comment: \"\")\n    }\n\n    static func roomSortingOnlyAvailableToSubscribers() -> String {\n        return NSLocalizedString(\"Sorting features are only available to subscribers\", comment: \"\")\n    }\n\n    static func roomSortingUpgradeToChange() -> String {\n        return NSLocalizedString(\"Upgrade to change sorting to:\", comment: \"\")\n    }\n    \n    static func roomPositiveBarUserViewedYourCam(_ userDisplayName: String) -> String {\n        return NSLocalizedString(\"%@ viewed your webcam\", comment: \"\")\n    }\n    \n    static func roomPositiveBarUserSentRoomGift(_ userDisplayName: String) -> String {\n        return NSLocalizedString(\"%@ sent room a gift\", comment: \"\")\n    }\n    \n    static func roomPositiveBarUserSentUserGift(_ userDisplayName: String) -> String {\n        return NSLocalizedString(\"%@ sent you a gift\", comment: \"\")\n    }\n    \n    static func roomPositiveBarYouSentUserGift(_ userDisplayName: String) -> String {\n        return NSLocalizedString(\"You sent a gift to %@\", comment: \"\")\n    }\n\n    static var coinsAreNotAvailableForPurchase: String {\n        return NSLocalizedString(\"Sorry, coins aren’t available to be purchased right now. Please try again later\", comment: \"\")\n    }\n}"
  },
  {
    "path": "SourceryTests/Stub/JavaScriptTemplates/AllTypealiases.ejs",
    "content": "<%_\nfor (alias of types.typealiases.filter((t) => t.annotations.AutoStruct != null)) { %>\nstruct Any<%- alias.name %>: <%- alias.type.name %> {\n<%_ for (variable of alias.type.instanceVariables) { -%>\n    var <%- variable.name %>: <%- variable.typeName.asSource %>\n<% } -%>\n}\n<%_ } -%>\n"
  },
  {
    "path": "SourceryTests/Stub/JavaScriptTemplates/Equality.ejs",
    "content": "<% for (type of types.classes) { -%>\n    <%_ %><%# this is a comment -%>\nextension <%= type.name %>: Equatable {}\n\n<%_ if (type.annotations.showComment) { -%>\n<% _%> // <%= type.name %> has Annotations\n\n<% } -%>\nfunc == (lhs: <%= type.name %>, rhs: <%= type.name %>) -> Bool {\n<%_ for (variable of type.variables) { -%>\n    if lhs.<%= variable.name %> != rhs.<%= variable.name %> { return false }\n<%_ } %>\n    return true\n}\n\n<% } -%>\n"
  },
  {
    "path": "SourceryTests/Stub/JavaScriptTemplates/Function.ejs",
    "content": "<%_\nfor (func of functions) {\n    let functionName = String(func.name.split(\"(\")[0])\n    let capitalizedName = functionName.charAt(0).toUpperCase() + functionName.slice(1)\n-%>\nfunc wrapped<%= capitalizedName %>(<%=\n    func.parameters.map((param) => {\n        return param.name + \": \" + param.typeName.name\n    }).join(\", \")\n%>) {\n    <%= functionName %>(<%=\n        func.parameters.map((param) => {\n            return param.name + \": \" + param.name\n        }).join(\", \")\n    %>)\n}\n<%_ } -%>\n"
  },
  {
    "path": "SourceryTests/Stub/JavaScriptTemplates/Includes.ejs",
    "content": "<%- include('Equality') -%><%- include('Other.ejs') -%>\n"
  },
  {
    "path": "SourceryTests/Stub/JavaScriptTemplates/Other.ejs",
    "content": "// Found <%- types.all.length %> types\n"
  },
  {
    "path": "SourceryTests/Stub/JavaScriptTemplates/ProtocolCompositions.ejs",
    "content": "<%_\nfor (composition of types.protocolCompositions.filter((t) => t.annotations.AutoStruct != null)) { %>\nstruct Any<%- composition.name %>: <%- composition.name %> {\n<%_ for (type of composition.composedTypes) { -%>\n\n    // MARK: <%- type.name %> properties\n<%_ for (variable of type.instanceVariables) { -%>\n    var <%- variable.name %>: <%- variable.typeName.asSource %>\n<% }\n} -%>\n}\n<%_ } -%>\n"
  },
  {
    "path": "SourceryTests/Stub/JavaScriptTemplates/SubfolderIncludes.ejs",
    "content": "<%- include('lib/One') %><% -%>\n"
  },
  {
    "path": "SourceryTests/Stub/JavaScriptTemplates/Typealiases.ejs",
    "content": "<%_ for (type of types.all) { -%>\n// Typealiases in <%= type.name %>\n<%_ for (const [aliasName, aliasValue] of Object.entries(type.typealiases)) { -%>\n// - name '<%= aliasName %>', type '<%= aliasValue.typeName.name %>'\n<% }\n} -%>\n"
  },
  {
    "path": "SourceryTests/Stub/JavaScriptTemplates/lib/One.ejs",
    "content": "<%- include('Two') %><% -%>\n"
  },
  {
    "path": "SourceryTests/Stub/JavaScriptTemplates/lib/Two.ejs",
    "content": "<%- include('../Equality') %><% -%>\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Admin/AdminCardTestingViewController.swift",
    "content": "import Foundation\nimport RxSwift\nimport Keys\n\nclass AdminCardTestingViewController: UIViewController {\n\n    lazy var keys = EidolonKeys()\n    var cardHandler: CardHandler!\n\n    @IBOutlet weak var logTextView: UITextView!\n\n     override func viewDidLoad() {\n        super.viewDidLoad()\n\n        self.logTextView.text = \"\"\n\n        if AppSetup.sharedState.useStaging {\n            cardHandler = CardHandler(apiKey: self.keys.cardflightStagingAPIClientKey(), accountToken: self.keys.cardflightStagingMerchantAccountToken())\n        } else {\n            cardHandler = CardHandler(apiKey: self.keys.cardflightProductionAPIClientKey(), accountToken: self.keys.cardflightProductionMerchantAccountToken())\n        }\n\n        cardHandler.cardStatus\n            .subscribe { (event) in\n                switch event {\n                case .next(let message):\n                    self.log(\"\\(message)\")\n                case .error(let error):\n                    self.log(\"\\n====Error====\\n\\(error)\\nThe card reader may have become disconnected.\\n\\n\")\n                    if self.cardHandler.card != nil {\n                        self.log(\"==\\n\\(self.cardHandler.card!)\\n\\n\")\n                    }\n                case .completed:\n                    guard let card = self.cardHandler.card else {\n                        // Restarts the card reader\n                        self.cardHandler.startSearching()\n                        return\n                    }\n\n                    let cardDetails = \"Card: \\(card.name) - \\(card.last4) \\n \\(card.cardToken)\"\n                    self.log(cardDetails)\n                }\n            }\n            .addDisposableTo(rx_disposeBag)\n\n        cardHandler.startSearching()\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n        cardHandler.end()\n    }\n\n    func log(_ string: String) {\n        self.logTextView.text = \"\\(self.logTextView.text ?? \"\")\\n\\(string)\"\n\n    }\n\n    @IBAction func backTapped(_ sender: AnyObject) {\n        _ = navigationController?.popViewController(animated: true)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Admin/AdminLogViewController.swift",
    "content": "import UIKit\n\nclass AdminLogViewController: UIViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        textView.text = try? NSString(contentsOf: logPath(), encoding: String.Encoding.ascii.rawValue) as String\n    }\n\n    @IBOutlet weak var textView: UITextView!\n    @IBAction func backButtonTapped(_ sender: AnyObject) {\n        _ = self.navigationController?.popViewController(animated: true)\n    }\n\n    func logPath() -> URL {\n        let docs = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last!\n        return docs.appendingPathComponent(\"logger.txt\")\n    }\n\n    @IBAction func scrollTapped(_ sender: AnyObject) {\n        textView.scrollRangeToVisible(NSMakeRange(textView.text.count - 1, 1))\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Admin/AdminPanelViewController.swift",
    "content": "import UIKit\nimport Artsy_UILabels\n\nclass AdminPanelViewController: UIViewController {\n\n    @IBOutlet weak var auctionIDLabel: UILabel!\n\n    @IBAction func backTapped(_ sender: AnyObject) {\n        self.presentingViewController?.dismiss(animated: true, completion: nil)\n        appDelegate().setHelpButtonHidden(false)\n    }\n\n    @IBAction func closeAppTapped(_ sender: AnyObject) {\n        exit(1)\n    }\n\n    override func viewDidAppear(_ animated: Bool) {\n        super.viewDidAppear(animated)\n\n        appDelegate().setHelpButtonHidden(true)\n    }\n\n    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n        if segue == .LoadAdminWebViewController {\n            let webVC = segue.destination as! AuctionWebViewController\n            let auctionID = AppSetup.sharedState.auctionID\n            let base = AppSetup.sharedState.useStaging ? \"staging.artsy.net\" : \"artsy.net\"\n\n            webVC.url = URL(string: \"https://\\(base)/feature/\\(auctionID)\")!\n\n            // TODO: Hide help button\n        }\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        let state = AppSetup.sharedState\n\n        if APIKeys.sharedKeys.stubResponses {\n            auctionIDLabel.text = \"STUBBING API RESPONSES\\nNOT CONTACTING ARTSY API\"\n        } else {\n            let version = (Bundle.main.object(forInfoDictionaryKey: \"CFBundleShortVersionString\") as? String)  ?? \"Unknown\"\n            auctionIDLabel.text = \"\\(state.auctionID), Kiosk version: \\(version)\"\n        }\n\n        let environment = state.useStaging ? \"PRODUCTION\" : \"STAGING\"\n        environmentChangeButton.setTitle(\"USE \\(environment)\", for: .normal)\n\n        let buttonsTitle = state.showDebugButtons ? \"HIDE\" : \"SHOW\"\n        showAdminButtonsButton.setTitle(buttonsTitle, for: .normal)\n\n        let readStatus = state.disableCardReader ? \"ENABLE\" : \"DISABLE\"\n        toggleCardReaderButton.setTitle(readStatus, for: .normal)\n    }\n\n    @IBOutlet weak var environmentChangeButton: UIButton!\n    @IBAction func switchStagingProductionTapped(_ sender: AnyObject) {\n        let defaults = UserDefaults.standard\n        defaults.set(!AppSetup.sharedState.useStaging, forKey: \"KioskUseStaging\")\n\n        defaults.removeObject(forKey: XAppToken.DefaultsKeys.TokenKey.rawValue)\n        defaults.removeObject(forKey: XAppToken.DefaultsKeys.TokenExpiry.rawValue)\n\n        defaults.synchronize()\n        delayToMainThread(1) {\n            exit(1)\n        }\n\n    }\n\n    @IBOutlet weak var showAdminButtonsButton: UIButton!\n    @IBAction func toggleAdminButtons(_ sender: UIButton) {\n        let defaults = UserDefaults.standard\n        defaults.set(!AppSetup.sharedState.showDebugButtons, forKey: \"KioskShowDebugButtons\")\n        defaults.synchronize()\n        delayToMainThread(1) {\n            exit(1)\n        }\n\n    }\n\n    @IBOutlet weak var cardReaderLabel: ARSerifLabel!\n    @IBOutlet weak var toggleCardReaderButton: SecondaryActionButton!\n    @IBAction func toggleCardReaderTapped(_ sender: AnyObject) {\n        let defaults = UserDefaults.standard\n        defaults.set(!AppSetup.sharedState.disableCardReader, forKey: \"KioskDisableCardReader\")\n        defaults.synchronize()\n        delayToMainThread(1) {\n            exit(1)\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Admin/AuctionWebViewController.swift",
    "content": "import UIKit\n\nclass AuctionWebViewController: WebViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        let flexibleSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)\n\n        let exitImage = UIImage(named: \"toolbar_close\")\n        let backwardBarItem = UIBarButtonItem(image: exitImage, style: .plain, target: self, action: #selector(exit))\n        let allItems = self.toolbarItems! + [flexibleSpace, backwardBarItem]\n        toolbarItems = allItems\n    }\n\n    func exit() {\n        let passwordVC = PasswordAlertViewController.alertView { [weak self] in\n            _ = self?.navigationController?.popViewController(animated: true)\n            return\n        }\n        self.present(passwordVC, animated: true) {}\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Admin/ChooseAuctionViewController.swift",
    "content": "import UIKit\nimport ORStackView\nimport FLKAutoLayout\nimport Artsy_UIFonts\nimport Artsy_UIButtons\n\nclass ChooseAuctionViewController: UIViewController {\n\n    var auctions: [Sale]!\n    let provider = appDelegate().provider\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        stackScrollView.backgroundColor = .white\n        stackScrollView.bottomMarginHeight = CGFloat(NSNotFound)\n        stackScrollView.updateConstraints()\n\n        let endpoint: ArtsyAPI = ArtsyAPI.activeAuctions\n\n        provider.request(endpoint)\n            .filterSuccessfulStatusCodes()\n            .mapJSON()\n            .mapTo(arrayOf: Sale.self)\n            .subscribe(onNext: { activeSales in\n                self.auctions = activeSales\n\n                for i in 0 ..< self.auctions.count {\n                    let sale = self.auctions[i]\n                    let title = \" \\(sale.name) - #\\(sale.auctionState) - \\(sale.artworkCount)\"\n\n                    let button = ARFlatButton()\n                    button.setTitle(title, for: .normal)\n                    button.setTitleColor(.black, for: .normal)\n                    button.tag = i\n                    button.rx.tap.subscribe(onNext: { (_) in\n                        let defaults = UserDefaults.standard\n                        defaults.set(sale.id, forKey: \"KioskAuctionID\")\n                        defaults.synchronize()\n                        exit(1)\n                        })\n                        .addDisposableTo(self.rx_disposeBag)\n\n                    self.stackScrollView.addSubview(button, withTopMargin: \"12\", sideMargin: \"0\")\n                    button.constrainHeight(\"50\")\n                }\n            })\n            .addDisposableTo(rx_disposeBag)\n\n    }\n\n    @IBOutlet weak var stackScrollView: ORStackView!\n    @IBAction func backButtonTapped(_ sender: AnyObject) {\n        _ = self.navigationController?.popViewController(animated: true)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Admin/PasswordAlertViewController.swift",
    "content": "import UIKit\n\nclass PasswordAlertViewController: UIAlertController {\n\n    class func alertView(completion: @escaping () -> ()) -> PasswordAlertViewController {\n        let alertController = PasswordAlertViewController(title: \"Exit Kiosk\", message: nil, preferredStyle: .alert)\n        let exitAction = UIAlertAction(title: \"Exit\", style: .default) { (_) in\n            completion()\n            return\n        }\n\n        if detectDevelopmentEnvironment() {\n            exitAction.isEnabled = true\n        } else {\n            exitAction.isEnabled = false\n        }\n\n        let cancelAction = UIAlertAction(title: \"Cancel\", style: .cancel) { (_) in }\n\n        alertController.addTextField { (textField) in\n            textField.placeholder = \"Exit Password\"\n\n            NotificationCenter.default.addObserver(forName: NSNotification.Name.UITextFieldTextDidChange, object: textField, queue: OperationQueue.main) { (notification) in\n                // compiler crashes when using weak\n                exitAction.isEnabled = textField.text == \"Genome401\"\n            }\n        }\n\n        alertController.addAction(exitAction)\n        alertController.addAction(cancelAction)\n        return alertController\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/APIPingManager.swift",
    "content": "import Foundation\nimport Moya\nimport RxSwift\n\nclass APIPingManager {\n\n    let syncInterval: TimeInterval = 2\n    var letOnline: Observable<Bool>!\n    var provider: Networking\n\n    init(provider: Networking) {\n        self.provider = provider\n\n        letOnline = Observable<Int>.interval(syncInterval, scheduler: MainScheduler.instance)\n            .flatMap { [weak self] _ in\n                return self?.ping() ?? .empty()\n            }\n            .retry() // Retry because ping may fail when disconnected and error.\n            .startWith(true)\n    }\n\n    fileprivate func ping() -> Observable<Bool> {\n        return provider.request(ArtsyAPI.ping).map(responseIsOK)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/AppDelegate+GlobalActions.swift",
    "content": "import UIKit\nimport QuartzCore\nimport ARAnalytics\nimport RxSwift\nimport Action\n\nfunc appDelegate() -> AppDelegate {\n    return UIApplication.shared.delegate as! AppDelegate\n}\n\nextension AppDelegate {\n\n    // Registration\n\n    var sale: Sale! {\n        return appViewController!.sale.value\n    }\n\n    internal var appViewController: AppViewController! {\n        let nav = self.window?.rootViewController?.findChildViewControllerOfType(UINavigationController.self) as? UINavigationController\n        return nav?.delegate as? AppViewController\n    }\n\n    // Help button and menu\n\n    func setupHelpButton() {\n        helpButton = MenuButton()\n        helpButton.setTitle(\"Help\", for: .normal)\n        helpButton.rx.action = helpButtonCommand()\n        window?.addSubview(helpButton)\n        helpButton.alignTop(nil, leading: nil, bottom: \"-24\", trailing: \"-24\", to: window)\n        window?.layoutIfNeeded()\n\n        helpIsVisisble.subscribe(onNext: { visisble in\n            let image: UIImage? = visisble ?  UIImage(named: \"xbtn_white\")?.withRenderingMode(.alwaysOriginal) : nil\n            let text: String? = visisble ? nil : \"HELP\"\n\n            self.helpButton.setTitle(text, for: .normal)\n            self.helpButton.setImage(image, for: .normal)\n\n            let transition = CATransition()\n            transition.duration = AnimationDuration.Normal\n            transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)\n            transition.type = kCATransitionFade\n            self.helpButton.layer.add(transition, forKey: \"fade\")\n\n        }).addDisposableTo(rx_disposeBag)\n    }\n\n    func setHelpButtonHidden(_ hidden: Bool) {\n        helpButton.isHidden = hidden\n    }\n}\n\n// MARK: - ReactiveCocoa extensions\n\nfileprivate var retainedAction: CocoaAction?\nextension AppDelegate {\n    // In this extension, I'm omitting [weak self] because the app delegate will outlive everyone.\n\n    func showBuyersPremiumCommand(enabled: Observable<Bool> = .just(true)) -> CocoaAction {\n        return CocoaAction(enabledIf: enabled) { _ in\n            self.hideAllTheThings()\n                .then(self.showWebController(address: \"https://m.artsy.net/auction/\\(self.sale.id)/buyers-premium\"))\n                .map(void)\n        }\n    }\n\n    func registerToBidCommand(enabled: Observable<Bool> = .just(true)) -> CocoaAction {\n        return CocoaAction(enabledIf: enabled) { _ in\n            self.hideAllTheThings()\n                .then(self.showRegistration())\n        }\n    }\n\n    func requestBidderDetailsCommand(enabled: Observable<Bool> = .just(true)) -> CocoaAction {\n        return CocoaAction(enabledIf: enabled) { _ in\n            self.hideHelp()\n                .then(self.showBidderDetailsRetrieval())\n        }\n    }\n\n    func helpButtonCommand() -> CocoaAction {\n        return CocoaAction { _ in\n            let showHelp = self.hideAllTheThings().then(self.showHelp())\n\n            return self.helpIsVisisble.take(1).flatMap { (visible: Bool) -> Observable<Void> in\n                if visible {\n                    return self.hideHelp()\n                } else {\n                    return showHelp\n                }\n            }\n        }\n    }\n\n    /// This is a hack around the fact that the command might dismiss the view controller whose UI owns the command itself.\n    /// So we store the CocoaAction in a variable private to this file to retain it. Once the action is complete, then we\n    /// release our reference to the CocoaAction. This ensures that the action isn't cancelled while it's executing.\n    func ensureAction(action: CocoaAction) -> CocoaAction {\n        retainedAction = action\n        let action = CocoaAction { input -> Observable<Void> in\n            return retainedAction?\n                .execute(input)\n                .doOnCompleted {\n                    retainedAction = nil\n                } ?? Observable.just(Void())\n        }\n\n        return action\n    }\n\n    func showPrivacyPolicyCommand() -> CocoaAction {\n        return ensureAction(action: CocoaAction { _ in\n            self.hideAllTheThings().then(self.showWebController(address: \"https://artsy.net/privacy\"))\n        })\n    }\n\n    func showConditionsOfSaleCommand() -> CocoaAction {\n        return ensureAction(action: CocoaAction { _ in\n            self.hideAllTheThings().then(self.showWebController(address: \"https://artsy.net/conditions-of-sale\"))\n        })\n    }\n}\n\n// MARK: - Private ReactiveCocoa Extension\n\nprivate extension AppDelegate {\n\n    // MARK: - s that do things\n\n    func ツ() -> Observable<Void> {\n        return hideAllTheThings()\n    }\n\n    func hideAllTheThings() -> Observable<Void> {\n        return self.closeFulfillmentViewController().then(self.hideHelp())\n    }\n\n    func showBidderDetailsRetrieval() -> Observable<Void> {\n        let appVC = self.appViewController\n        let presentingViewController: UIViewController = (appVC!.presentedViewController ?? appVC!)\n        return presentingViewController.promptForBidderDetailsRetrieval(provider: self.provider)\n    }\n\n    func showRegistration() -> Observable<Void> {\n        return Observable.create { observer in\n            ARAnalytics.event(\"Register To Bid Tapped\")\n\n            let storyboard = UIStoryboard.fulfillment()\n            let containerController = storyboard.instantiateInitialViewController() as! FulfillmentContainerViewController\n            containerController.allowAnimations = self.appViewController.allowAnimations\n\n            if let internalNav: FulfillmentNavigationController = containerController.internalNavigationController() {\n                internalNav.auctionID = self.appViewController.auctionID\n                let registerVC = storyboard.viewController(withID: .RegisterAnAccount) as! RegisterViewController\n                registerVC.placingBid = false\n                registerVC.provider = self.provider\n                internalNav.auctionID = self.appViewController.auctionID\n                internalNav.viewControllers = [registerVC]\n            }\n\n            self.appViewController.present(containerController, animated: false) {\n                containerController.viewDidAppearAnimation(containerController.allowAnimations)\n\n                sendDispatchCompleted(to: observer)\n            }\n\n            return Disposables.create()\n        }\n    }\n\n    func showHelp() -> Observable<Void> {\n        return Observable.create { observer in\n            let helpViewController = HelpViewController()\n            helpViewController.modalPresentationStyle = .custom\n            helpViewController.transitioningDelegate = self\n\n            self.window?.rootViewController?.present(helpViewController, animated: true, completion: {\n                self.helpViewController.value = helpViewController\n                sendDispatchCompleted(to: observer)\n            })\n\n            return Disposables.create()\n        }\n    }\n\n    func closeFulfillmentViewController() -> Observable<Void> {\n        let close: Observable<Void> = Observable.create { observer in\n            (self.appViewController.presentedViewController as? FulfillmentContainerViewController)?.closeFulfillmentModal() {\n                sendDispatchCompleted(to: observer)\n            }\n\n            return Disposables.create()\n        }\n\n        return fullfilmentVisible.flatMap { visible -> Observable<Void> in\n            if visible {\n                return close\n            } else {\n                return .empty()\n            }\n        }\n\n    }\n\n    func showWebController(address: String) -> Observable<Void> {\n        return hideWebViewController().then (\n            Observable.create { observer in\n                let webController = ModalWebViewController(url: NSURL(string: address)! as URL)\n\n                let nav = UINavigationController(rootViewController: webController)\n                nav.modalPresentationStyle = .formSheet\n\n                ARAnalytics.event(\"Show Web View\", withProperties: [\"url\" : address])\n                self.window?.rootViewController?.present(nav, animated: true) {\n                    sendDispatchCompleted(to: observer)\n                }\n\n                self.webViewController = nav\n\n                return Disposables.create()\n            }\n        )\n    }\n\n    func hideHelp() -> Observable<Void> {\n        return Observable.create { observer in\n            if let presentingViewController = self.helpViewController.value?.presentingViewController {\n                presentingViewController.dismiss(animated: true) {\n                    DispatchQueue.main.async {\n                        observer.onCompleted()\n                        self.helpViewController.value = nil\n                    }\n                    sendDispatchCompleted(to: observer)\n                }\n            } else {\n                observer.onCompleted()\n            }\n\n            return Disposables.create()\n        }\n    }\n\n    func hideWebViewController() -> Observable<Void> {\n        return Observable.create { observer in\n            if let webViewController = self.webViewController {\n                webViewController.presentingViewController?.dismiss(animated: true) {\n                    sendDispatchCompleted(to: observer)\n                }\n            } else {\n                observer.onCompleted()\n            }\n\n            return Disposables.create()\n        }\n    }\n\n    // MARK: - Computed property observables\n\n    var fullfilmentVisible: Observable<Bool> {\n        return Observable.deferred {\n            return Observable.create { observer in\n                observer.onNext((self.appViewController.presentedViewController as? FulfillmentContainerViewController) != nil)\n                observer.onCompleted()\n\n                return Disposables.create()\n            }\n        }\n    }\n\n    var helpIsVisisble: Observable<Bool> {\n        return helpViewController.asObservable().map { controller in\n            return controller.hasValue\n        }\n    }\n}\n\n// MARK: - Help transtion animation\n\nextension AppDelegate: UIViewControllerTransitioningDelegate {\n    func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {\n        return HelpAnimator(presenting: true)\n    }\n\n    func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {\n        return HelpAnimator()\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/AppDelegate.swift",
    "content": "import UIKit\nimport ARAnalytics\nimport SDWebImage\nimport RxSwift\nimport Keys\nimport Stripe\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    let helpViewController = Variable<HelpViewController?>(nil)\n    var helpButton: UIButton!\n\n    weak var webViewController: UIViewController?\n\n    var window: UIWindow? = UIWindow(frame:CGRect(x: 0, y: 0, width: UIScreen.main.bounds.height, height: UIScreen.main.bounds.width))\n\n    fileprivate(set) var provider = Networking.newDefaultNetworking()\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {\n\n        // Disable sleep timer\n        UIApplication.shared.isIdleTimerDisabled = true\n\n        // Set up network layer\n        if StubResponses.stubResponses() {\n            provider = Networking.newStubbingNetworking()\n        }\n\n        // I couldn't figure how to swizzle this out like we do in objc.\n        if let _ = NSClassFromString(\"XCTest\") { return true }\n\n        // Clear possible old contents from cache and defaults. \n        let imageCache = SDImageCache.shared()\n        imageCache?.clearDisk()\n\n        let defaults = UserDefaults.standard\n        defaults.removeObject(forKey: XAppToken.DefaultsKeys.TokenKey.rawValue)\n        defaults.removeObject(forKey: XAppToken.DefaultsKeys.TokenExpiry.rawValue)\n\n        let auctionStoryboard = UIStoryboard.auction()\n        let appViewController = auctionStoryboard.instantiateInitialViewController() as? AppViewController\n        appViewController?.provider = provider\n        window?.rootViewController = appViewController\n        window?.makeKeyAndVisible()\n\n        let keys = EidolonKeys()\n\n        if AppSetup.sharedState.useStaging {\n            Stripe.setDefaultPublishableKey(keys.stripeStagingPublishableKey())\n        } else {\n            Stripe.setDefaultPublishableKey(keys.stripeProductionPublishableKey())\n        }\n\n//        let mixpanelToken = AppSetup.sharedState.useStaging ? keys.mixpanelStagingAPIClientKey() : keys.mixpanelProductionAPIClientKey()\n\n        ARAnalytics.setup(withAnalytics: [\n            ARHockeyAppBetaID: keys.hockeyBetaSecret(),\n            ARHockeyAppLiveID: keys.hockeyProductionSecret(),\n//            ARMixpanelToken: mixpanelToken // TODO: Restore mixpanel\n        ])\n\n        setupHelpButton()\n        setupUserAgent()\n\n        logger.log(\"App Started\")\n        ARAnalytics.event(\"Session Started\")\n        return true\n    }\n\n    func setupUserAgent() {\n        let version = Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as! String?\n        let build = Bundle.main.infoDictionary?[\"CFBundleVersion\"] as! String?\n\n        let webView = UIWebView(frame: CGRect.zero)\n        let oldAgent = webView.stringByEvaluatingJavaScript(from: \"navigator.userAgent\")\n\n        let agentString = \"\\(oldAgent) Artsy-Mobile/\\(version!) Eigen/\\(build!) Kiosk Eidolon\"\n\n        let defaults = UserDefaults.standard\n        let userAgentDict = [\"UserAgent\": agentString]\n        defaults.register(defaults: userAgentDict)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/AppSetup.swift",
    "content": "import UIKit\n\nclass AppSetup {\n\n    var auctionID = \"los-angeles-modern-auctions-march-2015\"\n    lazy var useStaging = true\n    lazy var showDebugButtons = false\n    lazy var disableCardReader = false\n    var isTesting = false\n\n    class var sharedState: AppSetup {\n        struct Static {\n            static let instance = AppSetup()\n        }\n        return Static.instance\n    }\n\n    init() {\n        let defaults = UserDefaults.standard\n        if let auction = defaults.string(forKey: \"KioskAuctionID\") {\n            auctionID = auction\n        }\n\n        useStaging = defaults.bool(forKey: \"KioskUseStaging\")\n        showDebugButtons = defaults.bool(forKey: \"KioskShowDebugButtons\")\n        disableCardReader = defaults.bool(forKey: \"KioskDisableCardReader\")\n\n        if let _ = NSClassFromString(\"XCTest\") { isTesting = true }\n    }\n\n    var needsZipCode: Bool {\n        // If we're swiping with the card reaer, we don't need to collect a zip code.\n        return false\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/AppViewController.swift",
    "content": "import UIKit\nimport RxSwift\nimport Action\n\nclass AppViewController: UIViewController, UINavigationControllerDelegate {\n    var allowAnimations = true\n    var auctionID = AppSetup.sharedState.auctionID\n\n    @IBOutlet var countdownManager: ListingsCountdownManager!\n    @IBOutlet var offlineBlockingView: UIView!\n    @IBOutlet weak var registerToBidButton: ActionButton!\n\n    var provider: Networking!\n\n    lazy var _apiPinger: APIPingManager = {\n        return APIPingManager(provider: self.provider)\n    }()\n\n    lazy var reachability: Observable<Bool> = {\n        [connectedToInternetOrStubbing(), self.apiPinger].combineLatestAnd()\n    }()\n\n    lazy var apiPinger: Observable<Bool> = {\n        self._apiPinger.letOnline\n    }()\n\n    var registerToBidCommand = { () -> CocoaAction in\n        appDelegate().registerToBidCommand()\n    }\n\n    class func instantiate(from storyboard: UIStoryboard) -> AppViewController {\n        return storyboard.viewController(withID: .AppViewController) as! AppViewController\n    }\n\n    var sale = Variable(Sale(id: \"\", name: \"\", isAuction: true, startDate: Date(), endDate: Date(), artworkCount: 0, state: \"\"))\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        registerToBidButton.rx.action = registerToBidCommand()\n\n        countdownManager.setFonts()\n        countdownManager.provider = provider\n\n        reachability\n            .bindTo(offlineBlockingView.rx_hidden)\n            .addDisposableTo(rx_disposeBag)\n\n        auctionRequest(provider, auctionID: auctionID)\n            .bindTo(sale)\n            .addDisposableTo(rx_disposeBag)\n\n        sale\n            .asObservable()\n            .mapToOptional()\n            .bindTo(countdownManager.sale)\n            .addDisposableTo(rx_disposeBag)\n\n        for controller in childViewControllers {\n            if let nav = controller as? UINavigationController {\n                nav.delegate = self\n            }\n        }\n    }\n\n    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n        // This is the embed segue\n        guard let navigtionController = segue.destination as? UINavigationController else { return }\n        guard let listingsViewController = navigtionController.topViewController as? ListingsViewController else { return }\n\n        listingsViewController.provider = provider\n    }\n\n    deinit {\n        countdownManager.invalidate()\n    }\n\n    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {\n        let hide = (viewController as? SaleArtworkZoomViewController != nil)\n        countdownManager.setLabelsHiddenIfSynced(hide)\n        registerToBidButton.isHidden = hide\n    }\n}\n\nextension AppViewController {\n\n    @IBAction func longPressForAdmin(_ sender: UIGestureRecognizer) {\n        if sender.state != .began {\n            return\n        }\n\n        let passwordVC = PasswordAlertViewController.alertView { [weak self] in\n            self?.performSegue(.ShowAdminOptions)\n            return\n        }\n        self.present(passwordVC, animated: true) {}\n    }\n\n    func auctionRequest(_ provider: Networking, auctionID: String) -> Observable<Sale> {\n        let auctionEndpoint: ArtsyAPI = ArtsyAPI.auctionInfo(auctionID: auctionID)\n\n        return provider.request(auctionEndpoint)\n            .filterSuccessfulStatusCodes()\n            .mapJSON()\n            .mapTo(object: Sale.self)\n            .logError()\n            .retry()\n            .throttle(1, scheduler: MainScheduler.instance)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/BidderDetailsRetrieval.swift",
    "content": "import UIKit\nimport RxSwift\nimport SVProgressHUD\nimport Action\n\nextension UIViewController {\n    func promptForBidderDetailsRetrieval(provider: Networking) -> Observable<Void> {\n        return Observable.deferred { () -> Observable<Void> in\n            let alertController = self.emailPromptAlertController(provider: provider)\n\n            self.present(alertController, animated: true) { }\n\n            return .empty()\n        }\n    }\n\n    func retrieveBidderDetails(provider: Networking, email: String) -> Observable<Void> {\n        return Observable.just(email)\n            .take(1)\n            .doOnNext { _ in\n                SVProgressHUD.show()\n            }\n            .flatMap { email -> Observable<Void> in\n                let endpoint = ArtsyAPI.bidderDetailsNotification(auctionID: appDelegate().appViewController.sale.value.id, identifier: email)\n\n                return provider.request(endpoint).filterSuccessfulStatusCodes().map(void)\n            }\n            .throttle(1, scheduler: MainScheduler.instance)\n            .doOnNext { _ in\n                SVProgressHUD.dismiss()\n                self.present(UIAlertController.successfulBidderDetailsAlertController(), animated: true, completion: nil)\n            }\n            .doOnError { _ in\n                SVProgressHUD.dismiss()\n                self.present(UIAlertController.failedBidderDetailsAlertController(), animated: true, completion: nil)\n            }\n    }\n\n    func emailPromptAlertController(provider: Networking) -> UIAlertController {\n        let alertController = UIAlertController(title: \"Send Bidder Details\", message: \"Enter your email address or phone number registered with Artsy and we will send your bidder number and PIN.\", preferredStyle: .alert)\n\n        var ok = UIAlertAction.Action(\"OK\", style: .default)\n        let action = CocoaAction { _ -> Observable<Void> in\n            let text = (alertController.textFields?.first)?.text ?? \"\"\n\n            return self.retrieveBidderDetails(provider: provider, email: text)\n        }\n        ok.rx.action = action\n        let cancel = UIAlertAction.Action(\"Cancel\", style: .cancel)\n\n        alertController.addTextField(configurationHandler: nil)\n        alertController.addAction(ok)\n        alertController.addAction(cancel)\n\n        return alertController\n    }\n}\n\nextension UIAlertController {\n    class func successfulBidderDetailsAlertController() -> UIAlertController {\n        let alertController = self.init(title: \"Your details have been sent\", message: nil, preferredStyle: .alert)\n        alertController.addAction(UIAlertAction.Action(\"OK\", style: .default))\n\n        return alertController\n    }\n\n    class func failedBidderDetailsAlertController() -> UIAlertController {\n        let alertController = self.init(title: \"Incorrect Email\", message: \"Email was not recognized. You may not be registered to bid yet.\", preferredStyle: .alert)\n        alertController.addAction(UIAlertAction.Action(\"Cancel\", style: .cancel))\n\n        var retryAction = UIAlertAction.Action(\"Retry\", style: .default)\n        retryAction.rx.action = appDelegate().requestBidderDetailsCommand()\n\n        alertController.addAction(retryAction)\n\n        return alertController\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/CardHandler.swift",
    "content": "import UIKit\nimport RxSwift\n\nclass CardHandler: NSObject, CFTReaderDelegate {\n\n    fileprivate let _cardStatus = PublishSubject<String>()\n\n    var cardStatus: Observable<String> {\n        return _cardStatus.asObservable()\n    }\n\n    var card: CFTCard?\n\n    let APIKey: String\n    let APIToken: String\n\n    var reader: CFTReader!\n    lazy var sessionManager = CFTSessionManager.sharedInstance()!\n\n    init(apiKey: String, accountToken: String) {\n        APIKey = apiKey\n        APIToken = accountToken\n\n        super.init()\n\n        sessionManager.setApiToken(APIKey, accountToken: APIToken)\n    }\n\n    func startSearching() {\n        sessionManager.setLogging(true)\n\n        reader = CFTReader(reader: 1)\n        reader.delegate = self\n        reader.swipeHasTimeout(false)\n        _cardStatus.onNext(\"Started searching\")\n    }\n\n    func end() {\n        reader.cancelTransaction()\n        reader = nil\n    }\n\n    func readerCardResponse(_ card: CFTCard?, withError error: Error?) {\n        if let card = card {\n            self.card = card\n            _cardStatus.onNext(\"Got Card\")\n\n            card.tokenizeCard(success: { [weak self] in\n                self?._cardStatus.onCompleted()\n                logger.log(\"Card was tokenized\")\n\n            }, failure: { [weak self] (error) in\n                self?._cardStatus.onNext(\"Card Flight Error: \\(error)\")\n                logger.log(\"Card was not tokenizable\")\n            })\n\n        } else if let error = error {\n            self._cardStatus.onNext(\"response Error \\(error)\")\n            logger.log(\"CardReader got a response it cannot handle\")\n\n            reader.beginSwipe()\n        }\n    }\n\n    func transactionResult(_ charge: CFTCharge!, withError error: Error!) {\n        logger.log(\"Unexcepted call to transactionResult callback: \\(charge)\\n\\(error)\")\n    }\n\n    // handle other delegate call backs with the status messages\n\n    func readerIsAttached() {\n        _cardStatus.onNext(\"Reader is attatched\")\n    }\n\n    func readerIsConnecting() {\n        _cardStatus.onNext(\"Reader is connecting\")\n    }\n\n    func readerIsDisconnected() {\n        _cardStatus.onNext(\"Reader is disconnected\")\n        logger.log(\"Card Reader Disconnected\")\n    }\n\n    func readerSwipeDidCancel() {\n        _cardStatus.onNext(\"Reader did cancel\")\n        logger.log(\"Card Reader was Cancelled\")\n    }\n\n    func readerGenericResponse(_ cardData: String!) {\n        _cardStatus.onNext(\"Reader received non-card data: \\(cardData) \")\n        reader.beginSwipe()\n    }\n\n    func readerIsConnected(_ isConnected: Bool, withError error: Error!) {\n        if isConnected {\n            _cardStatus.onNext(\"Reader is connected\")\n            reader.beginSwipe()\n        } else {\n            if (error != nil) {\n                _cardStatus.onNext(\"Reader is disconnected: \\(error.localizedDescription)\")\n            } else {\n                _cardStatus.onNext(\"Reader is disconnected\")\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Constants.swift",
    "content": "import Foundation\n\nstruct AnimationDuration {\n    static let Normal: TimeInterval = 0.30\n    static let Short: TimeInterval = 0.15\n}\n\nlet SyncInterval: TimeInterval = 60\nlet ButtonHeight: CGFloat = 50\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/GlobalFunctions.swift",
    "content": "import RxSwift\nimport Reachability\nimport Moya\n\n// Ideally a Pod. For now a file.\nfunc delayToMainThread(_ delay: Double, closure:@escaping ()->()) {\n    DispatchQueue.main.asyncAfter (\n        deadline: DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: closure)\n}\n\nfunc logPath() -> URL {\n    let docs = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last!\n    return docs.appendingPathComponent(\"logger.txt\")\n}\n\nlet logger = Logger(destination: logPath())\n\nprivate let reachabilityManager = ReachabilityManager()\n\n// An observable that completes when the app gets online (possibly completes immediately).\nfunc connectedToInternetOrStubbing() -> Observable<Bool> {\n    let online = reachabilityManager.reach\n    let stubbing = Observable.just(APIKeys.sharedKeys.stubResponses)\n\n    return [online, stubbing].combineLatestOr()\n}\n\nfunc responseIsOK(_ response: Response) -> Bool {\n    return response.statusCode == 200\n}\n\nfunc detectDevelopmentEnvironment() -> Bool {\n    var developmentEnvironment = false\n    #if DEBUG || (arch(i386) || arch(x86_64)) && os(iOS)\n        developmentEnvironment = true\n    #endif\n    return developmentEnvironment\n}\n\nprivate class ReachabilityManager: NSObject {\n    let _reach = ReplaySubject<Bool>.create(bufferSize: 1)\n    var reach: Observable<Bool> {\n        return _reach.asObservable()\n    }\n\n    fileprivate let reachability = Reachability.forInternetConnection()\n\n    override init() {\n        super.init()\n\n        reachability?.reachableBlock = { [weak self] _ in\n            DispatchQueue.main.async {\n                self?._reach.onNext(true)\n            }\n        }\n\n        reachability?.unreachableBlock = { [weak self] _ in\n            DispatchQueue.main.async {\n                self?._reach.onNext(false)\n            }\n        }\n\n        reachability?.startNotifier()\n        _reach.onNext(reachability?.isReachable() ?? false)\n    }\n}\n\nfunc bindingErrorToInterface(_ error: Swift.Error) {\n    let error = \"Binding error to UI: \\(error)\"\n    #if DEBUG\n        fatalError(error)\n    #else\n        print(error)\n    #endif\n}\n\n// Applies an instance method to the instance with an unowned reference.\nfunc applyUnowned<Type: AnyObject, Parameters, ReturnValue>(_ instance: Type, _ function: @escaping ((Type) -> (Parameters) -> ReturnValue)) -> ((Parameters) -> ReturnValue) {\n    return { [unowned instance] parameters -> ReturnValue in\n        return function(instance)(parameters)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/KioskDateFormatter.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface KioskDateFormatter :NSObject\n\n+ (NSDate * __nullable)fromString:(NSString * _Nonnull)string;\n\n@end\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/KioskDateFormatter.m",
    "content": "#import \"KioskDateFormatter.h\"\n@import ISO8601DateFormatter;\n\n@implementation KioskDateFormatter\n\n+ (NSDate *)fromString:(NSString *)string {\n    ISO8601DateFormatter *formatter = [[ISO8601DateFormatter alloc] init];\n    return [formatter dateFromString:string];\n}\n\n@end\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Logger.swift",
    "content": "import Foundation\n\nclass Logger {\n    let destination: URL\n    lazy fileprivate var dateFormatter: DateFormatter = {\n        let formatter = DateFormatter()\n        formatter.locale = Locale.current\n        formatter.dateFormat = \"yyyy-MM-dd HH:mm:ss.SSS\"\n\n        return formatter\n    }()\n    lazy fileprivate var fileHandle: FileHandle? = {\n        let path = self.destination.path\n        FileManager.default.createFile(atPath: path, contents: nil, attributes: nil)\n\n        do {\n            let fileHandle = try FileHandle(forWritingTo: self.destination)\n            print(\"Successfully logging to: \\(path)\")\n            return fileHandle\n        } catch let error as NSError {\n            print(\"Serious error in logging: could not open path to log file. \\(error).\")\n        }\n\n        return nil\n    }()\n\n    init(destination: URL) {\n        self.destination = destination\n    }\n\n    deinit {\n        fileHandle?.closeFile()\n    }\n\n    func log(_ message: String, function: String = #function, file: String = #file, line: Int = #line) {\n        let logMessage = stringRepresentation(message, function: function, file: file, line: line)\n\n        printToConsole(logMessage)\n        printToDestination(logMessage)\n    }\n}\n\nprivate extension Logger {\n    func stringRepresentation(_ message: String, function: String, file: String, line: Int) -> String {\n        let dateString = dateFormatter.string(from: Date())\n\n        let file = URL(fileURLWithPath: file).lastPathComponent\n        return \"\\(dateString) [\\(file):\\(line)] \\(function): \\(message)\\n\"\n    }\n\n    func printToConsole(_ logMessage: String) {\n        print(logMessage)\n    }\n\n    func printToDestination(_ logMessage: String) {\n        if let data = logMessage.data(using: String.Encoding.utf8) {\n            fileHandle?.write(data)\n        } else {\n            print(\"Serious error in logging: could not encode logged string into data.\")\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/MarkdownParser.swift",
    "content": "import Foundation\nimport XNGMarkdownParser\nimport Artsy_UIFonts\n\nclass MarkdownParser: XNGMarkdownParser {\n\n    override init() {\n        super.init()\n\n        paragraphFont = UIFont.serifFont(withSize: 16)\n        linkFontName = UIFont.serifItalicFont(withSize: 16).fontName\n        boldFontName = UIFont.serifBoldFont(withSize: 16).fontName\n        italicFontName = UIFont.serifItalicFont(withSize: 16).fontName\n        shouldParseLinks = false\n\n        let paragraphStyle = NSMutableParagraphStyle()\n        paragraphStyle.minimumLineHeight = 16\n\n        topAttributes = [\n            NSParagraphStyleAttributeName: paragraphStyle,\n            NSForegroundColorAttributeName: UIColor.black\n        ]\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Models/Artist.swift",
    "content": "import Foundation\nimport SwiftyJSON\n\nfinal class Artist: NSObject, JSONAbleType {\n\n    let id: String\n    dynamic var name: String\n    let sortableID: String?\n\n    var blurb: String?\n\n    init(id: String, name: String, sortableID: String?) {\n        self.id = id\n        self.name = name\n        self.sortableID = sortableID\n    }\n\n    static func fromJSON(_ json: [String: Any]) -> Artist {\n        let json = JSON(json)\n\n        let id = json[\"id\"].stringValue\n        let name = json[\"name\"].stringValue\n        let sortableID = json[\"sortable_id\"].string\n        return Artist(id: id, name:name, sortableID:sortableID)\n    }\n\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Models/Artwork.swift",
    "content": "import Foundation\nimport SwiftyJSON\n\nfinal class Artwork: NSObject, JSONAbleType {\n\n    enum SoldStatus {\n        case notSold\n        case sold\n\n        static func fromString(_ string: String) -> SoldStatus {\n            switch string.lowercased() {\n            case \"sold\":\n                return .sold\n            default:\n                return .notSold\n            }\n        }\n    }\n\n    let id: String\n\n    let dateString: String\n    dynamic let title: String\n    var titleAndDate: NSAttributedString {\n        return titleAndDateAttributedString(self.title, dateString: self.date)\n    }\n    dynamic let price: String\n    dynamic let date: String\n\n    dynamic var soldStatus: String\n    dynamic var medium: String?\n    dynamic var dimensions = [String]()\n\n    dynamic var imageRights: String?\n    dynamic var additionalInfo: String?\n    dynamic var blurb: String?\n\n    dynamic var artists: [Artist]?\n    dynamic var culturalMarker: String?\n\n    dynamic var images: [Image]?\n\n    lazy var defaultImage: Image? = {\n        let defaultImages = self.images?.filter { $0.isDefault }\n\n        return defaultImages?.first ?? self.images?.first\n    }()\n\n    init(id: String, dateString: String, title: String, price: String, date: String, sold: String) {\n        self.id = id\n        self.dateString = dateString\n        self.title = title\n        self.price = price\n        self.date = date\n        self.soldStatus = sold\n    }\n\n    static func fromJSON(_ json: [String: Any]) -> Artwork {\n        let json = JSON(json)\n\n        let id = json[\"id\"].stringValue\n        let title = json[\"title\"].stringValue\n        let dateString = json[\"date\"].stringValue\n        let price = json[\"price\"].stringValue\n        let date = json[\"date\"].stringValue\n        let sold = json[\"sold\"].stringValue\n\n        let artwork = Artwork(id: id, dateString: dateString, title: title, price: price, date: date, sold: sold)\n\n        artwork.additionalInfo = json[\"additional_information\"].string\n        artwork.medium = json[\"medium\"].string\n        artwork.blurb = json[\"blurb\"].string\n\n        if let artistDictionary = json[\"artist\"].object as? [String: AnyObject] {\n            artwork.artists = [Artist.fromJSON(artistDictionary)]\n        }\n\n        if let imageDicts = json[\"images\"].object as? Array<Dictionary<String, AnyObject>> {\n            // There's a possibility that image_versions comes back as null from the API, which fromJSON() is allergic to.\n            artwork.images = imageDicts.filter { dict -> Bool in\n                let imageVersions = (dict[\"image_versions\"] as? [String]) ?? []\n                return imageVersions.count > 0\n            }.map { return Image.fromJSON($0) }\n        }\n\n        if let dimensions = json[\"dimensions\"].dictionary {\n            artwork.dimensions = [\"in\", \"cm\"].reduce([String](), { (array, key) -> [String] in\n                if let dimension = dimensions[key]?.string {\n                    return array + [dimension]\n                } else {\n                    return array\n                }\n            })\n        }\n\n        return artwork\n    }\n\n    func updateWithValues(_ newArtwork: Artwork) {\n        // soldStatus is the only value we expect to change at runtime.\n        soldStatus = newArtwork.soldStatus\n    }\n\n    func sortableArtistID() -> String {\n        return artists?.first?.sortableID ?? \"_\"\n    }\n}\n\nprivate func titleAndDateAttributedString(_ title: String, dateString: String) -> NSAttributedString {\n    let workTitle = title.isEmpty ? \"Untitled\" : title\n\n    let workFont = UIFont.serifItalicFont(withSize: 16)!\n    let attributedString = NSMutableAttributedString(string: workTitle, attributes: [NSFontAttributeName : workFont])\n\n    if dateString.isNotEmpty {\n        let dateFont = UIFont.serifFont(withSize: 16)!\n        let dateString = NSAttributedString(string: \", \" + dateString, attributes: [NSFontAttributeName : dateFont])\n        attributedString.append(dateString)\n    }\n\n    return attributedString.copy() as! NSAttributedString\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Models/Bid.swift",
    "content": "import Foundation\nimport SwiftyJSON\n\nfinal class Bid: NSObject, JSONAbleType {\n    let id: String\n    let amountCents: Int\n\n    init(id: String, amountCents: Int) {\n        self.id = id\n        self.amountCents = amountCents\n    }\n\n    static func fromJSON(_ json: [String: Any]) -> Bid {\n        let json = JSON(json)\n\n        let id = json[\"id\"].stringValue\n        let amount = json[\"amount_cents\"].int\n        return Bid(id: id, amountCents: amount!)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Models/Bidder.swift",
    "content": "import UIKit\nimport SwiftyJSON\n\nfinal class Bidder: NSObject, JSONAbleType {\n    let id: String\n    let saleID: String\n    let createdByAdmin: Bool\n    var pin: String?\n\n    init(id: String, saleID: String, createdByAdmin: Bool, pin: String?) {\n        self.id = id\n        self.saleID = saleID\n        self.createdByAdmin = createdByAdmin\n        self.pin = pin\n    }\n\n    static func fromJSON(_ json: [String: Any]) -> Bidder {\n        let json = JSON(json)\n\n        let id = json[\"id\"].stringValue\n        let saleID = json[\"sale\"][\"id\"].stringValue\n        let createdByAdmin = json[\"created_by_admin\"].bool ?? false\n        let pin = json[\"pin\"].stringValue\n        return Bidder(id: id, saleID: saleID, createdByAdmin: createdByAdmin, pin: pin)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Models/BidderPosition.swift",
    "content": "import Foundation\nimport SwiftyJSON\n\nfinal class BidderPosition: NSObject, JSONAbleType {\n    let id: String\n    let highestBid: Bid?\n    let maxBidAmountCents: Int\n    let processedAt: Date?\n\n    init(id: String, highestBid: Bid?, maxBidAmountCents: Int, processedAt: Date?) {\n        self.id = id\n        self.highestBid = highestBid\n        self.maxBidAmountCents = maxBidAmountCents\n        self.processedAt = processedAt\n    }\n\n    static func fromJSON(_ source: [String: Any]) -> BidderPosition {\n        let json = JSON(source)\n\n        let id = json[\"id\"].stringValue\n        let maxBidAmount = json[\"max_bid_amount_cents\"].intValue\n        let processedAt = KioskDateFormatter.fromString(json[\"processed_at\"].stringValue)\n\n        var bid: Bid?\n        if let bidDictionary = json[\"highest_bid\"].object as? [String: AnyObject] {\n            bid = Bid.fromJSON(bidDictionary)\n        }\n\n        return BidderPosition(id: id, highestBid: bid, maxBidAmountCents: maxBidAmount, processedAt: processedAt)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Models/BuyersPremium.swift",
    "content": "import UIKit\nimport SwiftyJSON\n\nfinal class BuyersPremium: NSObject, JSONAbleType {\n    let id: String\n    let name: String\n\n    init(id: String, name: String) {\n        self.id = id\n        self.name = name\n    }\n\n    static func fromJSON(_ json: [String: Any]) -> BuyersPremium {\n        let json = JSON(json)\n        let id = json[\"id\"].stringValue\n        let name = json[\"name\"].stringValue\n\n        return BuyersPremium(id: id, name: name)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Models/Card.swift",
    "content": "import Foundation\nimport SwiftyJSON\n\nfinal class Card: NSObject, JSONAbleType {\n    let id: String\n    let name: String\n    let lastDigits: String\n    let expirationMonth: String\n    let expirationYear: String\n\n    init(id: String, name: String, lastDigits: String, expirationMonth: String, expirationYear: String) {\n\n        self.id = id\n        self.name = name\n        self.lastDigits = lastDigits\n        self.expirationMonth = expirationMonth\n        self.expirationYear = expirationYear\n    }\n\n    static func fromJSON(_ json: [String: Any]) -> Card {\n        let json = JSON(json)\n\n        let id = json[\"id\"].stringValue\n        let name = json[\"name\"].stringValue\n        let lastDigits = json[\"last_digits\"].stringValue\n        let expirationMonth = json[\"expiration_month\"].stringValue\n        let expirationYear = json[\"expiration_year\"].stringValue\n\n        return Card(id: id, name: name, lastDigits: lastDigits, expirationMonth: expirationMonth, expirationYear: expirationYear)\n    }\n\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Models/GenericError.swift",
    "content": "import Foundation\nimport SwiftyJSON\n\nfinal class GenericError: NSObject, JSONAbleType {\n    let detail: [String:AnyObject]\n    let message: String\n    let type: String\n\n    init(type: String, message: String, detail: [String:AnyObject]) {\n        self.detail = detail\n        self.message = message\n        self.type = type\n    }\n\n    static func fromJSON(_ json: [String: Any]) -> GenericError {\n        let json = JSON(json)\n\n        let type = json[\"type\"].stringValue\n        let message = json[\"message\"].stringValue\n        var detailDictionary = json[\"detail\"].object as? [String: AnyObject]\n\n        detailDictionary = detailDictionary ?? [:]\n        return GenericError(type: type, message: message, detail: detailDictionary!)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Models/Image.swift",
    "content": "import Foundation\nimport SwiftyJSON\n\nfinal class Image: NSObject, JSONAbleType {\n    let id: String\n    let imageFormatString: String\n    let imageVersions: [String]\n    let imageSize: CGSize\n    let aspectRatio: CGFloat?\n\n    let baseURL: String\n    let tileSize: Int\n    let maxTiledHeight: Int\n    let maxTiledWidth: Int\n    let maxLevel: Int\n    let isDefault: Bool\n\n    init(id: String, imageFormatString: String, imageVersions: [String], imageSize: CGSize, aspectRatio: CGFloat?, baseURL: String, tileSize: Int, maxTiledHeight: Int, maxTiledWidth: Int, maxLevel: Int, isDefault: Bool) {\n        self.id = id\n        self.imageFormatString = imageFormatString\n        self.imageVersions = imageVersions\n        self.imageSize = imageSize\n        self.aspectRatio = aspectRatio\n        self.baseURL = baseURL\n        self.tileSize = tileSize\n        self.maxTiledHeight = maxTiledHeight\n        self.maxTiledWidth = maxTiledWidth\n        self.maxLevel = maxLevel\n        self.isDefault = isDefault\n    }\n\n    static func fromJSON(_ json: [String: Any]) -> Image {\n        let json = JSON(json)\n\n        let id = json[\"id\"].stringValue\n        let imageFormatString = json[\"image_url\"].stringValue\n        let imageVersions = (json[\"image_versions\"].object as? [String]) ?? []\n        let imageSize = CGSize(width: json[\"original_width\"].int ?? 1, height: json[\"original_height\"].int ?? 1)\n        let aspectRatio = { () -> CGFloat? in\n            if let aspectRatio = json[\"aspect_ratio\"].float {\n                return CGFloat(aspectRatio)\n            }\n            return nil\n        }()\n\n        let baseURL = json[\"tile_base_url\"].stringValue\n        let tileSize = json[\"tile_size\"].intValue\n        let maxTiledHeight = json[\"max_tiled_height\"].int ?? 1\n        let maxTiledWidth = json[\"max_tiled_width\"].int ?? 1\n        let isDefault = json[\"is_default\"].bool ?? false\n\n        let dimension = max( maxTiledWidth, maxTiledHeight)\n        let logD = logf( Float(dimension) )\n        let log2 = Float(logf(2))\n\n        let maxLevel = Int( ceilf( logD / log2) )\n\n        return Image(id: id, imageFormatString: imageFormatString, imageVersions: imageVersions, imageSize: imageSize, aspectRatio: aspectRatio, baseURL: baseURL, tileSize: tileSize, maxTiledHeight: maxTiledHeight, maxTiledWidth: maxTiledWidth, maxLevel: maxLevel, isDefault: isDefault)\n    }\n\n    func thumbnailURL() -> URL? {\n        let preferredVersions = { () -> Array<String> in\n            // For very tall images, the \"medium\" version looks terribad.\n            // In the long-term, we have an issue to fix this for good: https://github.com/artsy/eidolon/issues/396\n            if [\"57be35d7a09a6711ab004fa5\", \"57be1fb4cd530e65fe000862\"].contains(self.id) {\n                return [\"large\", \"larger\"]\n            } else {\n                return [\"medium\", \"large\", \"larger\"]\n            }\n        }()\n\n        return urlFromPreferenceList(preferredVersions)\n    }\n\n    func fullsizeURL() -> URL? {\n        return urlFromPreferenceList([\"larger\", \"large\", \"medium\"])\n    }\n\n    fileprivate func urlFromPreferenceList(_ preferenceList: Array<String>) -> URL? {\n        if let format = preferenceList.filter({ self.imageVersions.contains($0) }).first {\n            let path = NSString(string: self.imageFormatString).replacingOccurrences(of: \":version\", with: format)\n            return URL(string: path)\n        }\n        return nil\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Models/JSONAble.swift",
    "content": "protocol JSONAbleType {\n    static func fromJSON(_: [String: Any]) -> Self\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Models/Location.swift",
    "content": "import UIKit\nimport SwiftyJSON\n\nfinal class Location: NSObject, JSONAbleType {\n    let address: String\n    let address2: String\n    let city: String\n    let state: String\n    let stateCode: String\n    var postalCode: String\n\n    init(address: String, address2: String, city: String, state: String, stateCode: String, postalCode: String) {\n        self.address = address\n        self.address2 = address2\n        self.city = city\n        self.state = state\n        self.stateCode = stateCode\n        self.postalCode = postalCode\n    }\n\n    static func fromJSON(_ json: [String: Any]) -> Location {\n        let json = JSON(json)\n\n        let address =  json[\"address\"].stringValue\n        let address2 =  json[\"address_2\"].stringValue\n        let city =  json[\"city\"].stringValue\n        let state =  json[\"state\"].stringValue\n        let stateCode =  json[\"state_code\"].stringValue\n        let postalCode =  json[\"postal_code\"].stringValue\n\n        return Location(address: address, address2: address2, city: city, state: state, stateCode: stateCode, postalCode: postalCode)\n    }\n\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Models/Sale.swift",
    "content": "import UIKit\nimport SwiftyJSON\n\nfinal class Sale: NSObject, JSONAbleType {\n    dynamic let id: String\n    dynamic let isAuction: Bool\n    dynamic let startDate: Date\n    dynamic let endDate: Date\n    dynamic let name: String\n    dynamic var artworkCount: Int\n    dynamic let auctionState: String\n\n    dynamic var buyersPremium: BuyersPremium?\n\n    init(id: String, name: String, isAuction: Bool, startDate: Date, endDate: Date, artworkCount: Int, state: String) {\n        self.id = id\n        self.name = name\n        self.isAuction = isAuction\n        self.startDate = startDate\n        self.endDate = endDate\n        self.artworkCount = artworkCount\n        self.auctionState = state\n    }\n\n    static func fromJSON(_ json: [String: Any]) -> Sale {\n        let json = JSON(json)\n\n        let id = json[\"id\"].stringValue\n        let isAuction = json[\"is_auction\"].boolValue\n        let startDate = KioskDateFormatter.fromString(json[\"start_at\"].stringValue)!\n        let endDate = KioskDateFormatter.fromString(json[\"end_at\"].stringValue)!\n        let name = json[\"name\"].stringValue\n        let artworkCount = json[\"eligible_sale_artworks_count\"].intValue\n        let state = json[\"auction_state\"].stringValue\n\n        let sale = Sale(id: id, name:name, isAuction: isAuction, startDate: startDate, endDate: endDate, artworkCount: artworkCount, state: state)\n\n        if let buyersPremiumDict = json[\"buyers_premium\"].object as? [String: AnyObject] {\n            sale.buyersPremium = BuyersPremium.fromJSON(buyersPremiumDict)\n        }\n\n        return sale\n    }\n\n    func isActive(_ systemTime: SystemTime) -> Bool {\n        let now = systemTime.date()\n        return (now as NSDate).earlierDate(startDate) == startDate && (now as NSDate).laterDate(endDate) == endDate\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Models/SaleArtwork.swift",
    "content": "import UIKit\nimport SwiftyJSON\n\nenum ReserveStatus: String {\n    case ReserveNotMet = \"reserve_not_met\"\n    case NoReserve = \"no_reserve\"\n    case ReserveMet = \"reserve_met\"\n\n    var reserveNotMet: Bool {\n        return self == .ReserveNotMet\n    }\n\n    static func initOrDefault (_ rawValue: String?) -> ReserveStatus {\n        return ReserveStatus(rawValue: rawValue ?? \"\") ?? .NoReserve\n    }\n}\n\nstruct SaleNumberFormatter {\n    static let dollarFormatter = createDollarFormatter()\n}\n\nfinal class SaleArtwork: NSObject, JSONAbleType {\n\n    let id: String\n    let artwork: Artwork\n\n    var auctionID: String?\n\n    var saleHighestBid: Bid?\n    dynamic var bidCount: NSNumber?\n\n    var userBidderPosition: BidderPosition?\n    var positions: [String]?\n\n    var openingBidCents: NSNumber?\n    var minimumNextBidCents: NSNumber?\n\n    dynamic var highestBidCents: NSNumber?\n    var estimateCents: Int?\n    var lowEstimateCents: Int?\n    var highEstimateCents: Int?\n\n    dynamic var reserveStatus: String?\n    dynamic var lotNumber: NSNumber?\n\n    init(id: String, artwork: Artwork) {\n        self.id = id\n        self.artwork = artwork\n    }\n\n    lazy var viewModel: SaleArtworkViewModel = {\n        return SaleArtworkViewModel(saleArtwork: self)\n    }()\n\n    static func fromJSON(_ json: [String: Any]) -> SaleArtwork {\n        let json = JSON(json)\n        let id = json[\"id\"].stringValue\n        let artworkDict = json[\"artwork\"].object as! [String: AnyObject]\n        let artwork = Artwork.fromJSON(artworkDict)\n\n        let saleArtwork = SaleArtwork(id: id, artwork: artwork) as SaleArtwork\n\n        if let highestBidDict = json[\"highest_bid\"].object as? [String: AnyObject] {\n            saleArtwork.saleHighestBid = Bid.fromJSON(highestBidDict)\n        }\n\n        saleArtwork.auctionID = json[\"sale_id\"].string\n        saleArtwork.openingBidCents = json[\"opening_bid_cents\"].int as NSNumber?\n        saleArtwork.minimumNextBidCents = json[\"minimum_next_bid_cents\"].int as NSNumber?\n\n        saleArtwork.highestBidCents = json[\"highest_bid_amount_cents\"].int as NSNumber?\n        saleArtwork.estimateCents = json[\"estimate_cents\"].int\n        saleArtwork.lowEstimateCents = json[\"low_estimate_cents\"].int\n        saleArtwork.highEstimateCents = json[\"high_estimate_cents\"].int\n        saleArtwork.bidCount = json[\"bidder_positions_count\"].int as NSNumber?\n        saleArtwork.reserveStatus = json[\"reserve_status\"].string\n        saleArtwork.lotNumber = json[\"lot_number\"].int as NSNumber?\n\n        return saleArtwork\n    }\n\n    func updateWithValues(_ newSaleArtwork: SaleArtwork) {\n        saleHighestBid = newSaleArtwork.saleHighestBid\n        auctionID = newSaleArtwork.auctionID\n        openingBidCents = newSaleArtwork.openingBidCents\n        minimumNextBidCents = newSaleArtwork.minimumNextBidCents\n        highestBidCents = newSaleArtwork.highestBidCents\n        estimateCents = newSaleArtwork.estimateCents\n        lowEstimateCents = newSaleArtwork.lowEstimateCents\n        highEstimateCents = newSaleArtwork.highEstimateCents\n        bidCount = newSaleArtwork.bidCount\n        reserveStatus = newSaleArtwork.reserveStatus\n        lotNumber = newSaleArtwork.lotNumber ?? lotNumber\n\n        artwork.updateWithValues(newSaleArtwork.artwork)\n    }\n}\n\nfunc createDollarFormatter() -> NumberFormatter {\n    let formatter = NumberFormatter()\n    formatter.numberStyle = NumberFormatter.Style.currency\n\n    // This is always dollars, so let's make sure that's how it shows up\n    // regardless of locale.\n\n    formatter.currencyGroupingSeparator = \",\"\n    formatter.currencySymbol = \"$\"\n    formatter.maximumFractionDigits = 0\n    return formatter\n}\n\nfunc ==(lhs: SaleArtwork, rhs: SaleArtwork) -> Bool {\n    return lhs.id == rhs.id\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Models/SaleArtworkViewModel.swift",
    "content": "import Foundation\nimport RxSwift\n\nprivate let kNoBidsString = \"\"\n\nclass SaleArtworkViewModel: NSObject {\n    fileprivate let saleArtwork: SaleArtwork\n\n    init (saleArtwork: SaleArtwork) {\n        self.saleArtwork = saleArtwork\n    }\n}\n\n// Extension for computed properties\n\nextension SaleArtworkViewModel {\n\n    // MARK: Computed values we don't expect to ever change.\n\n    var estimateString: String {\n        // Default to estimateCents\n        switch (saleArtwork.estimateCents, saleArtwork.lowEstimateCents, saleArtwork.highEstimateCents) {\n        // Default to estimateCents.\n        case (.some(let estimateCents), _, _):\n            let dollars = NumberFormatter.currencyString(forDollarCents: estimateCents as NSNumber!)!\n            return \"Estimate: \\(dollars)\"\n\n        // Try to extract non-nil low/high estimates.\n        case (_, .some(let lowCents), .some(let highCents)):\n            let lowDollars = NumberFormatter.currencyString(forDollarCents: lowCents as NSNumber!)!\n            let highDollars = NumberFormatter.currencyString(forDollarCents: highCents as NSNumber!)!\n            return \"Estimate: \\(lowDollars)–\\(highDollars)\"\n\n        default: return \"\"\n        }\n    }\n\n    var thumbnailURL: URL? {\n        return saleArtwork.artwork.defaultImage?.thumbnailURL() as URL?\n    }\n\n    var thumbnailAspectRatio: CGFloat? {\n        return saleArtwork.artwork.defaultImage?.aspectRatio\n    }\n\n    var artistName: String? {\n        return saleArtwork.artwork.artists?.first?.name\n    }\n\n    var titleAndDateAttributedString: NSAttributedString {\n        return saleArtwork.artwork.titleAndDate\n    }\n\n    var saleArtworkID: String {\n        return saleArtwork.id\n    }\n\n    // Observables representing values that change over time.\n\n    func numberOfBids() -> Observable<String> {\n        return saleArtwork.rx.observe(NSNumber.self, \"bidCount\").map { optionalBidCount -> String in\n            guard let bidCount = optionalBidCount, bidCount.intValue > 0 else {\n                return kNoBidsString\n            }\n\n            let suffix = bidCount == 1 ? \"\" : \"s\"\n            return \"\\(bidCount) bid\\(suffix) placed\"\n        }\n    }\n\n    // The language used here is very specific – see https://github.com/artsy/eidolon/pull/325#issuecomment-64121996 for details\n    var numberOfBidsWithReserve: Observable<String> {\n\n        // Ignoring highestBidCents; only there to trigger on bid update.\n        let highestBidString = saleArtwork.rx.observe(NSNumber.self, \"highestBidCents\").map { \"\\($0)\" }\n        let reserveStatus = saleArtwork.rx.observe(String.self, \"reserveStatus\").map { input -> String in\n            switch input {\n            case .some(let reserveStatus):\n                return reserveStatus\n            default:\n                return \"\"\n            }\n        }\n\n        return Observable.combineLatest([numberOfBids(), reserveStatus, highestBidString]) { strings -> String in\n\n            let numberOfBidsString = strings[0]\n            let reserveStatus = ReserveStatus.initOrDefault(strings[1])\n\n            // if there is no reserve, just return the number of bids string.\n            if reserveStatus == .NoReserve {\n                return numberOfBidsString\n            } else {\n                if numberOfBidsString == kNoBidsString {\n                    // If there are no bids, then return only this string.\n                    return \"This lot has a reserve\"\n                } else if reserveStatus == .ReserveNotMet {\n                    return \"(\\(numberOfBidsString), Reserve not met)\"\n                } else { // implicitly, reserveStatus is .ReserveMet\n                    return \"(\\(numberOfBidsString), Reserve met)\"\n                }\n            }\n        }\n    }\n\n    func lotNumber() -> Observable<String?> {\n        return saleArtwork.rx.observe(NSNumber.self, \"lotNumber\").map { lotNumber  in\n            if let lotNumber = lotNumber as? Int {\n                return \"Lot \\(lotNumber)\"\n            } else {\n                return \"\"\n            }\n        }\n    }\n\n    func forSale() -> Observable<Bool> {\n        return saleArtwork.artwork.rx.observe(String.self, \"soldStatus\").filterNil().map { status in\n            return Artwork.SoldStatus.fromString(status) == .notSold\n        }\n\n    }\n\n    func currentBid(prefix: String = \"\", missingPrefix: String = \"\") -> Observable<String> {\n        return saleArtwork.rx.observe(NSNumber.self, \"highestBidCents\").map { [weak self] highestBidCents in\n            if let currentBidCents = highestBidCents as? Int {\n                let formatted = NumberFormatter.currencyString(forDollarCents: currentBidCents as NSNumber) ?? \"\"\n                return \"\\(prefix)\\(formatted)\"\n            } else {\n                 let formatted = NumberFormatter.currencyString(forDollarCents: self?.saleArtwork.openingBidCents ?? 0) ?? \"\"\n                return \"\\(missingPrefix)\\(formatted)\"\n            }\n        }\n    }\n\n    func currentBidOrOpeningBid() -> Observable<String> {\n        let observables = [\n            saleArtwork.rx.observe(NSNumber.self, \"bidCount\"),\n            saleArtwork.rx.observe(NSNumber.self, \"openingBidCents\"),\n            saleArtwork.rx.observe(NSNumber.self, \"highestBidCents\")\n        ]\n\n        return Observable.combineLatest(observables) { numbers -> Int in\n            let bidCount = (numbers[0] ?? 0) as Int\n            let openingBid = numbers[1] as Int?\n            let highestBid = numbers[2] as Int?\n\n            return (bidCount > 0 ? highestBid : openingBid) ?? 0\n        }.map(centsToPresentableDollarsString)\n    }\n\n    func currentBidOrOpeningBidLabel() -> Observable<String> {\n        return saleArtwork.rx.observe(NSNumber.self, \"bidCount\").map { input in\n            guard let count = input as? Int else { return \"\" }\n\n            if count > 0 {\n                return \"Current Bid:\"\n            } else {\n                return \"Opening Bid:\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Models/SystemTime.swift",
    "content": "import Foundation\nimport RxSwift\n\nclass SystemTime {\n    var systemTimeInterval: TimeInterval? = nil\n\n    init () {}\n\n    func sync(_ provider: Networking) -> Observable<Void> {\n        let endpoint: ArtsyAPI = ArtsyAPI.systemTime\n\n        return provider.request(endpoint)\n            .filterSuccessfulStatusCodes()\n            .mapJSON()\n            .doOnNext { [weak self] response in\n                guard let dictionary = response as? NSDictionary else { return }\n\n                let timestamp: String = (dictionary[\"iso8601\"] as? String) ?? \"\"\n                if let artsyDate = KioskDateFormatter.fromString(timestamp) {\n                    self?.systemTimeInterval = Date().timeIntervalSince(artsyDate)\n                }\n\n            }.logError().map(void)\n    }\n\n    func inSync() -> Bool {\n        return systemTimeInterval != nil\n    }\n\n    func date() -> Date {\n        let now = Date()\n        if let systemTimeInterval = systemTimeInterval {\n            return now.addingTimeInterval(-systemTimeInterval)\n        } else {\n            return now\n        }\n    }\n\n    func reset() {\n        systemTimeInterval = nil\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Models/User.swift",
    "content": "import Foundation\nimport SwiftyJSON\n\nfinal class User: NSObject, JSONAbleType {\n\n    dynamic let id: String\n    dynamic let email: String\n    dynamic let name: String\n    dynamic let paddleNumber: String\n    dynamic let phoneNumber: String\n    dynamic var bidder: Bidder?\n    dynamic var location: Location?\n\n    init(id: String, email: String, name: String, paddleNumber: String, phoneNumber: String, location: Location?) {\n        self.id = id\n        self.name = name\n        self.paddleNumber = paddleNumber\n        self.email = email\n        self.phoneNumber = phoneNumber\n        self.location = location\n    }\n\n    static func fromJSON(_ json: [String: Any]) -> User {\n        let json = JSON(json)\n\n        let id = json[\"id\"].stringValue\n        let name = json[\"name\"].stringValue\n        let email = json[\"email\"].stringValue\n        let paddleNumber = json[\"paddle_number\"].stringValue\n        let phoneNumber = json[\"phone\"].stringValue\n\n        var location: Location?\n        if let bidDictionary = json[\"location\"].object as? [String: AnyObject] {\n            location = Location.fromJSON(bidDictionary)\n        }\n\n        return User(id: id, email: email, name: name, paddleNumber: paddleNumber, phoneNumber: phoneNumber, location:location)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/NSErrorExtensions.swift",
    "content": "import Foundation\nimport Moya\n\nextension NSError {\n\n    func artsyServerError() -> NSString {\n        if let errorJSON = userInfo[\"data\"] as? [String: AnyObject] {\n            let error =  GenericError.fromJSON(errorJSON)\n            return \"\\(error.message) - \\(error.detail) + \\(error.detail)\" as NSString\n        } else if let response = userInfo[\"data\"] as? Response {\n            let stringData = NSString(data: response.data, encoding: String.Encoding.utf8.rawValue)\n            return \"Status Code: \\(response.statusCode), Data Length: \\(response.data.count), String Data: \\(stringData)\" as NSString\n        }\n\n        return \"\\(userInfo)\" as NSString\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Networking/APIKeys.swift",
    "content": "import Foundation\nimport Keys\n\nprivate let minimumKeyLength = 2\n\n// Mark: - API Keys\n\nstruct APIKeys {\n    let key: String\n    let secret: String\n\n    // MARK: Shared Keys\n\n    fileprivate struct SharedKeys {\n        static var instance = APIKeys()\n    }\n\n    static var sharedKeys: APIKeys {\n        get {\n            return SharedKeys.instance\n        }\n\n        set (newSharedKeys) {\n            SharedKeys.instance = newSharedKeys\n        }\n    }\n\n    // MARK: Methods\n\n    var stubResponses: Bool {\n        return key.count < minimumKeyLength || secret.count < minimumKeyLength\n    }\n\n    // MARK: Initializers\n\n    init(key: String, secret: String) {\n        self.key = key\n        self.secret = secret\n    }\n\n    init(keys: EidolonKeys) {\n        self.init(key: keys.artsyAPIClientKey() ?? \"\", secret: keys.artsyAPIClientSecret() ?? \"\")\n    }\n\n    init() {\n        let keys = EidolonKeys()\n        self.init(keys: keys)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Networking/ArtsyAPI.swift",
    "content": "import Foundation\nimport RxSwift\nimport Moya\nimport Alamofire\n\nprotocol ArtsyAPIType {\n    var addXAuth: Bool { get }\n}\n\nenum ArtsyAPI {\n    case xApp\n    case xAuth(email: String, password: String)\n    case trustToken(number: String, auctionPIN: String)\n\n    case systemTime\n    case ping\n\n    case artwork(id: String)\n    case artist(id: String)\n\n    case auctions\n    case auctionListings(id: String, page: Int, pageSize: Int)\n    case auctionInfo(auctionID: String)\n    case auctionInfoForArtwork(auctionID: String, artworkID: String)\n    case findBidderRegistration(auctionID: String, phone: String)\n    case activeAuctions\n\n    case createUser(email: String, password: String, phone: String, postCode: String, name: String)\n\n    case bidderDetailsNotification(auctionID: String, identifier: String)\n\n    case lostPasswordNotification(email: String)\n    case findExistingEmailRegistration(email: String)\n}\n\nenum ArtsyAuthenticatedAPI {\n    case myCreditCards\n    case createPINForBidder(bidderID: String)\n    case registerToBid(auctionID: String)\n    case myBiddersForAuction(auctionID: String)\n    case myBidPositionsForAuctionArtwork(auctionID: String, artworkID: String)\n    case myBidPosition(id: String)\n    case findMyBidderRegistration(auctionID: String)\n    case placeABid(auctionID: String, artworkID: String, maxBidCents: String)\n\n    case updateMe(email: String, phone: String, postCode: String, name: String)\n    case registerCard(stripeToken: String, swiped: Bool)\n    case me\n}\n\nextension ArtsyAPI : TargetType, ArtsyAPIType {\n    public var task: Task {\n        return .request\n    }\n\n     var path: String {\n        switch self {\n\n        case .xApp:\n            return \"/api/v1/xapp_token\"\n\n        case .xAuth:\n            return \"/oauth2/access_token\"\n\n        case .auctionInfo(let id):\n            return \"/api/v1/sale/\\(id)\"\n\n        case .auctions:\n            return \"/api/v1/sales\"\n\n        case .auctionListings(let id, _, _):\n            return \"/api/v1/sale/\\(id)/sale_artworks\"\n\n        case .auctionInfoForArtwork(let auctionID, let artworkID):\n            return \"/api/v1/sale/\\(auctionID)/sale_artwork/\\(artworkID)\"\n\n        case .systemTime:\n            return \"/api/v1/system/time\"\n\n        case .ping:\n            return \"/api/v1/system/ping\"\n\n        case .findBidderRegistration:\n            return \"/api/v1/bidder\"\n\n        case .activeAuctions:\n            return \"/api/v1/sales\"\n\n        case .createUser:\n            return \"/api/v1/user\"\n\n        case .artwork(let id):\n            return \"/api/v1/artwork/\\(id)\"\n\n        case .artist(let id):\n            return \"/api/v1/artist/\\(id)\"\n\n        case .trustToken:\n            return \"/api/v1/me/trust_token\"\n\n        case .bidderDetailsNotification:\n            return \"/api/v1/bidder/bidding_details_notification\"\n\n        case .lostPasswordNotification:\n            return \"/api/v1/users/send_reset_password_instructions\"\n\n        case .findExistingEmailRegistration:\n            return \"/api/v1/user\"\n\n        }\n    }\n\n    var base: String { return AppSetup.sharedState.useStaging ? \"https://stagingapi.artsy.net\" : \"https://api.artsy.net\" }\n    var baseURL: URL { return URL(string: base)! }\n\n    var parameters: [String: Any]? {\n        switch self {\n\n        case .xAuth(let email, let password):\n            return [\n                \"client_id\": APIKeys.sharedKeys.key as AnyObject? ?? \"\" as AnyObject,\n                \"client_secret\": APIKeys.sharedKeys.secret as AnyObject? ?? \"\" as AnyObject,\n                \"email\": email as AnyObject,\n                \"password\":  password as AnyObject,\n                \"grant_type\": \"credentials\" as AnyObject\n            ]\n\n        case .xApp:\n            return [\"client_id\": APIKeys.sharedKeys.key as AnyObject? ?? \"\" as AnyObject,\n                \"client_secret\": APIKeys.sharedKeys.secret as AnyObject? ?? \"\" as AnyObject]\n\n        case .auctions:\n            return [\"is_auction\": \"true\" as AnyObject]\n\n        case .trustToken(let number, let auctionID):\n            return [\"number\": number as AnyObject, \"auction_pin\": auctionID as AnyObject]\n\n        case .createUser(let email, let password, let phone, let postCode, let name):\n            return [\n                \"email\": email as AnyObject, \"password\": password as AnyObject,\n                \"phone\": phone as AnyObject, \"name\": name as AnyObject,\n                \"location\": [ \"postal_code\": postCode ] as AnyObject\n            ]\n\n        case .bidderDetailsNotification(let auctionID, let identifier):\n            return [\"sale_id\": auctionID as AnyObject, \"identifier\": identifier as AnyObject]\n\n        case .lostPasswordNotification(let email):\n            return [\"email\": email as AnyObject]\n\n        case .findExistingEmailRegistration(let email):\n            return [\"email\": email as AnyObject]\n\n        case .findBidderRegistration(let auctionID, let phone):\n            return [\"sale_id\": auctionID as AnyObject, \"number\": phone as AnyObject]\n\n        case .auctionListings(_, let page, let pageSize):\n            return [\"size\": pageSize as AnyObject, \"page\": page as AnyObject]\n\n        case .activeAuctions:\n            return [\"is_auction\": true as AnyObject, \"live\": true as AnyObject]\n\n        default:\n            return nil\n        }\n    }\n\n    var method: Moya.Method {\n        switch self {\n        case .lostPasswordNotification,\n        .createUser:\n            return .post\n        case .findExistingEmailRegistration:\n            return .head\n        case .bidderDetailsNotification:\n            return .put\n        default:\n            return .get\n        }\n    }\n\n    var sampleData: Data {\n        switch self {\n\n        case .xApp:\n            return stubbedResponse(\"XApp\")\n\n        case .xAuth:\n            return stubbedResponse(\"XAuth\")\n\n        case .trustToken:\n            return stubbedResponse(\"XAuth\")\n\n        case .auctions:\n            return stubbedResponse(\"Auctions\")\n\n        case .auctionListings:\n            return stubbedResponse(\"AuctionListings\")\n\n        case .systemTime:\n            return stubbedResponse(\"SystemTime\")\n\n        case .activeAuctions:\n            return stubbedResponse(\"ActiveAuctions\")\n\n        case .createUser:\n            return stubbedResponse(\"Me\")\n\n        case .artwork:\n            return stubbedResponse(\"Artwork\")\n\n        case .artist:\n            return stubbedResponse(\"Artist\")\n\n        case .auctionInfo:\n            return stubbedResponse(\"AuctionInfo\")\n\n        // This API returns a 302, so stubbed response isn't valid\n        case .findBidderRegistration:\n            return stubbedResponse(\"Me\")\n\n        case .bidderDetailsNotification:\n            return stubbedResponse(\"RegisterToBid\")\n\n        case .lostPasswordNotification:\n            return stubbedResponse(\"ForgotPassword\")\n\n        case .findExistingEmailRegistration:\n            return stubbedResponse(\"ForgotPassword\")\n\n        case .auctionInfoForArtwork:\n            return stubbedResponse(\"AuctionInfoForArtwork\")\n\n        case .ping:\n            return stubbedResponse(\"Ping\")\n\n        }\n    }\n\n    var addXAuth: Bool {\n        switch self {\n        case .xApp: return false\n        case .xAuth: return false\n        default: return true\n        }\n    }\n}\n\nextension ArtsyAuthenticatedAPI: TargetType, ArtsyAPIType {\n    public var task: Task {\n        return .request\n    }\n\n    var path: String {\n        switch self {\n\n        case .registerToBid:\n            return \"/api/v1/bidder\"\n\n        case .myCreditCards:\n            return \"/api/v1/me/credit_cards\"\n\n        case .createPINForBidder(let bidderID):\n            return \"/api/v1/bidder/\\(bidderID)/pin\"\n\n        case .me:\n            return \"/api/v1/me\"\n\n        case .updateMe:\n            return \"/api/v1/me\"\n\n        case .myBiddersForAuction:\n            return \"/api/v1/me/bidders\"\n\n        case .myBidPositionsForAuctionArtwork:\n            return \"/api/v1/me/bidder_positions\"\n\n        case .myBidPosition(let id):\n            return \"/api/v1/me/bidder_position/\\(id)\"\n\n        case .findMyBidderRegistration:\n            return \"/api/v1/me/bidders\"\n\n        case .placeABid:\n            return \"/api/v1/me/bidder_position\"\n\n        case .registerCard:\n            return \"/api/v1/me/credit_cards\"\n        }\n    }\n\n    var base: String { return AppSetup.sharedState.useStaging ? \"https://stagingapi.artsy.net\" : \"https://api.artsy.net\" }\n    var baseURL: URL { return URL(string: base)! }\n\n    var parameters: [String: Any]? {\n        switch self {\n\n        case .registerToBid(let auctionID):\n            return [\"sale_id\": auctionID as AnyObject]\n\n        case .myBiddersForAuction(let auctionID):\n            return [\"sale_id\": auctionID as AnyObject]\n\n        case .placeABid(let auctionID, let artworkID, let maxBidCents):\n            return [\n                \"sale_id\": auctionID as AnyObject,\n                \"artwork_id\":  artworkID as AnyObject,\n                \"max_bid_amount_cents\": maxBidCents as AnyObject\n            ]\n\n        case .findMyBidderRegistration(let auctionID):\n            return [\"sale_id\": auctionID as AnyObject]\n\n        case .updateMe(let email, let phone, let postCode, let name):\n            return [\n                \"email\": email as AnyObject, \"phone\": phone as AnyObject,\n                \"name\": name as AnyObject, \"location\": [ \"postal_code\": postCode ]\n            ]\n\n        case .registerCard(let token, let swiped):\n            return [\"provider\": \"stripe\" as AnyObject, \"token\": token as AnyObject, \"created_by_trusted_client\": swiped as AnyObject]\n\n        case .myBidPositionsForAuctionArtwork(let auctionID, let artworkID):\n            return [\"sale_id\": auctionID as AnyObject, \"artwork_id\": artworkID as AnyObject]\n\n        default:\n            return nil\n        }\n    }\n\n    var method: Moya.Method {\n        switch self {\n        case .placeABid,\n        .registerCard,\n        .registerToBid,\n        .createPINForBidder:\n            return .post\n        case .updateMe:\n            return .put\n        default:\n            return .get\n        }\n    }\n\n    var sampleData: Data {\n        switch self {\n        case .createPINForBidder:\n            return stubbedResponse(\"CreatePINForBidder\")\n\n        case .myCreditCards:\n            return stubbedResponse(\"MyCreditCards\")\n\n        case .registerToBid:\n            return stubbedResponse(\"RegisterToBid\")\n\n        case .myBiddersForAuction:\n            return stubbedResponse(\"MyBiddersForAuction\")\n\n        case .me:\n            return stubbedResponse(\"Me\")\n\n        case .updateMe:\n            return stubbedResponse(\"Me\")\n\n        case .placeABid:\n            return stubbedResponse(\"CreateABid\")\n\n        case .findMyBidderRegistration:\n            return stubbedResponse(\"FindMyBidderRegistration\")\n\n        case .registerCard:\n            return stubbedResponse(\"RegisterCard\")\n\n        case .myBidPositionsForAuctionArtwork:\n            return stubbedResponse(\"MyBidPositionsForAuctionArtwork\")\n\n        case .myBidPosition:\n            return stubbedResponse(\"MyBidPosition\")\n\n        }\n    }\n\n    var addXAuth: Bool {\n        return true\n    }\n}\n\n// MARK: - Provider support\n\nfunc stubbedResponse(_ filename: String) -> Data! {\n    @objc class TestClass: NSObject { }\n\n    let bundle = Bundle(for: TestClass.self)\n    let path = bundle.path(forResource: filename, ofType: \"json\")\n    return (try? Data(contentsOf: URL(fileURLWithPath: path!)))\n}\n\nprivate extension String {\n    var URLEscapedString: String {\n        return self.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlHostAllowed)!\n    }\n}\n\nfunc url(_ route: TargetType) -> String {\n    return route.baseURL.appendingPathComponent(route.path).absoluteString\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Networking/NetworkLogger.swift",
    "content": "import Foundation\nimport Moya\nimport Result\n\n/// Logs network activity (outgoing requests and incoming responses).\nclass NetworkLogger: PluginType {\n\n    typealias Comparison = (TargetType) -> Bool\n\n    let whitelist: Comparison\n    let blacklist: Comparison\n\n    init(whitelist: @escaping Comparison = { _ -> Bool in return true }, blacklist: @escaping Comparison = { _ -> Bool in  return true }) {\n        self.whitelist = whitelist\n        self.blacklist = blacklist\n    }\n\n    func willSendRequest(_ request: RequestType, target: TargetType) {\n        // If the target is in the blacklist, don't log it.\n        guard blacklist(target) == false else { return }\n        logger.log(\"Sending request: \\(request.request?.url?.absoluteString ?? String())\")\n    }\n\n    func didReceiveResponse(_ result: Result<Moya.Response, Moya.Error>, target: TargetType) {\n        // If the target is in the blacklist, don't log it.\n        guard blacklist(target) == false else { return }\n\n        switch result {\n        case .success(let response):\n            if 200..<400 ~= (response.statusCode ) && whitelist(target) == false {\n                // If the status code is OK, and if it's not in our whitelist, then don't worry about logging its response body.\n                logger.log(\"Received response(\\(response.statusCode )) from \\(response.response?.url?.absoluteString ?? String()).\")\n            }\n        case .failure(let error):\n            // Otherwise, log everything.\n            logger.log(\"Received networking error: \\(error)\")\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Networking/Networking.swift",
    "content": "import Foundation\nimport Moya\nimport RxSwift\nimport Alamofire\n\nclass OnlineProvider<Target>: RxMoyaProvider<Target> where Target: TargetType {\n\n    fileprivate let online: Observable<Bool>\n\n    init(endpointClosure: @escaping EndpointClosure = MoyaProvider.DefaultEndpointMapping,\n        requestClosure: @escaping RequestClosure = MoyaProvider.DefaultRequestMapping,\n        stubClosure: @escaping StubClosure = MoyaProvider.NeverStub,\n        manager: Manager = RxMoyaProvider<Target>.DefaultAlamofireManager(),\n        plugins: [PluginType] = [],\n        trackInflights: Bool = false,\n        online: Observable<Bool> = connectedToInternetOrStubbing()) {\n\n        self.online = online\n        super.init(endpointClosure: endpointClosure, requestClosure: requestClosure, stubClosure: stubClosure, manager: manager, plugins: plugins, trackInflights: trackInflights)\n    }\n\n    override func request(_ token: Target) -> Observable<Moya.Response> {\n        let actualRequest = super.request(token)\n        return online\n            .ignore(value: false)  // Wait until we're online\n            .take(1)        // Take 1 to make sure we only invoke the API once.\n            .flatMap { _ in // Turn the online state into a network request\n                return actualRequest\n            }\n\n    }\n}\n\nprotocol NetworkingType {\n    associatedtype T: TargetType, ArtsyAPIType\n    var provider: OnlineProvider<T> { get }\n}\n\nstruct Networking: NetworkingType {\n    typealias T = ArtsyAPI\n    let provider: OnlineProvider<ArtsyAPI>\n}\n\nstruct AuthorizedNetworking: NetworkingType {\n    typealias T = ArtsyAuthenticatedAPI\n    let provider: OnlineProvider<ArtsyAuthenticatedAPI>\n}\n\nprivate extension Networking {\n\n    /// Request to fetch and store new XApp token if the current token is missing or expired.\n    func XAppTokenRequest(_ defaults: UserDefaults) -> Observable<String?> {\n\n        var appToken = XAppToken(defaults: defaults)\n\n        // If we have a valid token, return it and forgo a request for a fresh one.\n        if appToken.isValid {\n            return Observable.just(appToken.token)\n        }\n\n        let newTokenRequest = self.provider.request(ArtsyAPI.xApp)\n            .filterSuccessfulStatusCodes()\n            .mapJSON()\n            .map { element -> (token: String?, expiry: String?) in\n                guard let dictionary = element as? NSDictionary else { return (token: nil, expiry: nil) }\n\n                return (token: dictionary[\"xapp_token\"] as? String, expiry: dictionary[\"expires_in\"] as? String)\n            }\n            .do(onNext: { element in\n                // These two lines set the defaults values injected into appToken\n                appToken.token = element.0\n                appToken.expiry = KioskDateFormatter.fromString(element.1 ?? \"\")\n            })\n            .map { (token, expiry) -> String? in\n                return token\n            }\n            .logError()\n\n        return newTokenRequest\n    }\n}\n\n// \"Public\" interfaces\nextension Networking {\n    /// Request to fetch a given target. Ensures that valid XApp tokens exist before making request\n    func request(_ token: ArtsyAPI, defaults: UserDefaults = UserDefaults.standard) -> Observable<Moya.Response> {\n\n        let actualRequest = self.provider.request(token)\n        return self.XAppTokenRequest(defaults).flatMap { _ in actualRequest }\n    }\n}\n\nextension AuthorizedNetworking {\n    func request(_ token: ArtsyAuthenticatedAPI, defaults: UserDefaults = UserDefaults.standard) -> Observable<Moya.Response> {\n        return self.provider.request(token)\n    }\n}\n\n// Static methods\nextension NetworkingType {\n\n    static func newDefaultNetworking() -> Networking {\n        return Networking(provider: newProvider(plugins))\n    }\n\n    static func newAuthorizedNetworking(_ xAccessToken: String) -> AuthorizedNetworking {\n        return AuthorizedNetworking(provider: newProvider(authenticatedPlugins, xAccessToken: xAccessToken))\n    }\n\n    static func newStubbingNetworking() -> Networking {\n        return Networking(provider: OnlineProvider(endpointClosure: endpointsClosure(), requestClosure: Networking.endpointResolver(), stubClosure: MoyaProvider.ImmediatelyStub, online: .just(true)))\n    }\n\n    static func newAuthorizedStubbingNetworking() -> AuthorizedNetworking {\n        return AuthorizedNetworking(provider: OnlineProvider(endpointClosure: endpointsClosure(), requestClosure: Networking.endpointResolver(), stubClosure: MoyaProvider.ImmediatelyStub, online: .just(true)))\n    }\n\n    static func endpointsClosure<T>(_ xAccessToken: String? = nil) -> (T) -> Endpoint<T> where T: TargetType, T: ArtsyAPIType {\n        return { target in\n            var endpoint: Endpoint<T> = Endpoint<T>(URL: url(target), sampleResponseClosure: {.networkResponse(200, target.sampleData)}, method: target.method, parameters: target.parameters)\n\n            // If we were given an xAccessToken, add it\n            if let xAccessToken = xAccessToken {\n                endpoint = endpoint.adding(httpHeaderFields: [\"X-Access-Token\": xAccessToken])\n            }\n\n            // Sign all non-XApp, non-XAuth token requests\n            if target.addXAuth {\n                return endpoint.adding(httpHeaderFields:[\"X-Xapp-Token\": XAppToken().token ?? \"\"])\n            } else {\n                return endpoint\n            }\n        }\n    }\n\n    static func APIKeysBasedStubBehaviour<T>(_: T) -> Moya.StubBehavior {\n        return APIKeys.sharedKeys.stubResponses ? .immediate : .never\n    }\n\n    static var plugins: [PluginType] {\n        return [\n            NetworkLogger(blacklist: { target -> Bool in\n                guard let target = target as? ArtsyAPI else { return false }\n\n                switch target {\n                case .ping: return true\n                default: return false\n                }\n            })\n        ]\n    }\n    static var authenticatedPlugins: [PluginType] {\n        return [NetworkLogger(whitelist: { target -> Bool in\n            guard let target = target as? ArtsyAuthenticatedAPI else { return false }\n\n            switch target {\n            case .myBidPosition: return true\n            case .findMyBidderRegistration: return true\n            default: return false\n            }\n        })\n        ]\n    }\n\n    // (Endpoint<Target>, NSURLRequest -> Void) -> Void\n    static func endpointResolver<T>() -> MoyaProvider<T>.RequestClosure where T: TargetType {\n        return { (endpoint, closure) in\n            var request = endpoint.urlRequest!\n            request.httpShouldHandleCookies = false\n            closure(.success(request))\n        }\n    }\n}\n\nprivate func newProvider<T>(_ plugins: [PluginType], xAccessToken: String? = nil) -> OnlineProvider<T> where T: TargetType, T: ArtsyAPIType {\n    return OnlineProvider(endpointClosure: Networking.endpointsClosure(xAccessToken),\n        requestClosure: Networking.endpointResolver(),\n        stubClosure: Networking.APIKeysBasedStubBehaviour,\n        plugins: plugins)\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Networking/UserCredentials.swift",
    "content": "import Foundation\n\nstruct UserCredentials {\n    let user: User\n    let accessToken: String\n\n    init(user: User, accessToken: String) {\n        self.user = user\n        self.accessToken = accessToken\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Networking/XAppToken.swift",
    "content": "import Foundation\n\nprivate extension Date {\n    var isInPast: Bool {\n        let now = Date()\n        return self.compare(now) == ComparisonResult.orderedAscending\n    }\n}\n\nstruct XAppToken {\n    enum DefaultsKeys: String {\n        case TokenKey = \"TokenKey\"\n        case TokenExpiry = \"TokenExpiry\"\n    }\n\n    // MARK: - Initializers\n\n    let defaults: UserDefaults\n\n    init(defaults: UserDefaults) {\n        self.defaults = defaults\n    }\n\n    init() {\n        self.defaults = UserDefaults.standard\n    }\n\n    // MARK: - Properties\n\n    var token: String? {\n        get {\n            let key = defaults.string(forKey: DefaultsKeys.TokenKey.rawValue)\n            return key\n        }\n        set(newToken) {\n            defaults.set(newToken, forKey: DefaultsKeys.TokenKey.rawValue)\n        }\n    }\n\n    var expiry: Date? {\n        get {\n            return defaults.object(forKey: DefaultsKeys.TokenExpiry.rawValue) as? Date\n        }\n        set(newExpiry) {\n            defaults.set(newExpiry, forKey: DefaultsKeys.TokenExpiry.rawValue)\n        }\n    }\n\n    var expired: Bool {\n        if let expiry = expiry {\n            return expiry.isInPast\n        }\n        return true\n    }\n\n    var isValid: Bool {\n        if let token = token {\n            return token.isNotEmpty && !expired\n        }\n\n        return false\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/OfflineViewController.swift",
    "content": "import UIKit\nimport Artsy_UIFonts\n\nclass OfflineViewController: UIViewController {\n    @IBOutlet var offlineLabel: UILabel!\n    @IBOutlet var subtitleLabel: UILabel!\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        offlineLabel.font = UIFont.serifFont(withSize: 49)\n        subtitleLabel.font = UIFont.serifItalicFont(withSize: 32)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/STPCard+Validation.h",
    "content": "#import <Foundation/Foundation.h>\n#import <Stripe/Stripe.h>\n\n@interface STPCard (Validation)\n\n+ (BOOL)validateCardNumber:(NSString *)cardNumber;\n\n@end\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/STPCard+Validation.m",
    "content": "#import \"STPCard+Validation.h\"\n\n@implementation STPCard (Validation)\n\n+ (BOOL)validateCardNumber:(NSString *)cardNumber {\n    STPCard *card = [[STPCard alloc] init];\n    card.number = cardNumber;\n\n    __autoreleasing NSString *cardNumberCopy = [cardNumber copy];\n\n    return [card validateNumber:&cardNumberCopy error:nil];\n}\n\n@end\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/StubResponses.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface StubResponses : NSObject\n\n+ (BOOL)stubResponses;\n\n@end\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/StubResponses.m",
    "content": "#import \"StubResponses.h\"\n\n#define STUB_RESPONSES YES\n\n// We're inferring if you have access to the private Artsy fonts, then you have access to our API.\n#if __has_include(<Artsy_UIFonts/UIFont+ArtsyFonts.h>)\n#undef STUB_RESPONSES\n#define STUB_RESPONSES NO\n#endif\n\n@implementation StubResponses\n\n+ (BOOL)stubResponses {\n    return STUB_RESPONSES;\n}\n\n@end\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/SwiftExtensions.swift",
    "content": "extension Optional {\n    var hasValue: Bool {\n        switch self {\n        case .none:\n            return false\n        case .some(_):\n            return true\n        }\n    }\n}\n\nextension String {\n    func toUInt() -> UInt? {\n        return UInt(self)\n    }\n\n    func toUInt(withDefault defaultValue: UInt) -> UInt {\n        return UInt(self) ?? defaultValue\n    }\n}\n\n// Anything that can hold a value (strings, arrays, etc)\nprotocol Occupiable {\n    var isEmpty: Bool { get }\n    var isNotEmpty: Bool { get }\n}\n\n// Give a default implementation of isNotEmpty, so conformance only requires one implementation\nextension Occupiable {\n    var isNotEmpty: Bool {\n        return !isEmpty\n    }\n}\n\nextension String: Occupiable { }\n\n// I can't think of a way to combine these collection types. Suggestions welcome.\nextension Array: Occupiable { }\nextension Dictionary: Occupiable { }\nextension Set: Occupiable { }\n\n// Extend the idea of occupiability to optionals. Specifically, optionals wrapping occupiable things.\nextension Optional where Wrapped: Occupiable {\n    var isNilOrEmpty: Bool {\n        switch self {\n        case .none:\n            return true\n        case .some(let value):\n            return value.isEmpty\n        }\n    }\n\n    var isNotNilNotEmpty: Bool {\n        return !isNilOrEmpty\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/UIStoryboardSegueExtensions.swift",
    "content": "import UIKit\n\nextension UIStoryboardSegue {\n}\n\nfunc ==(lhs: UIStoryboardSegue, rhs: SegueIdentifier) -> Bool {\n    return lhs.identifier == rhs.rawValue\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/UIViewControllerExtensions.swift",
    "content": "import UIKit\n\nextension UIViewController {\n\n    /// Short hand syntax for loading the view controller \n\n    func loadViewProgrammatically() {\n        self.beginAppearanceTransition(true, animated: false)\n        self.endAppearanceTransition()\n    }\n\n    /// Short hand syntax for performing a segue with a known hardcoded identity\n\n    func performSegue(_ identifier: SegueIdentifier) {\n        self.performSegue(withIdentifier: identifier.rawValue, sender: self)\n    }\n\n    func fulfillmentNav() -> FulfillmentNavigationController {\n        return (navigationController! as! FulfillmentNavigationController)\n    }\n\n    func fulfillmentContainer() -> FulfillmentContainerViewController? {\n        return fulfillmentNav().parent as? FulfillmentContainerViewController\n    }\n\n    func findChildViewControllerOfType(_ klass: AnyClass) -> UIViewController? {\n        for child in childViewControllers {\n            if child.isKind(of: klass) {\n                return child\n            }\n        }\n        return nil\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/UIViewSubclassesErrorExtensions.swift",
    "content": "import UIKit\n\nextension Button {\n\n    func flashError(_ message: String) {\n        let originalTitle = self.title(for: .normal)\n\n        setTitleColor(.white, for: .disabled)\n        setBackgroundColor(.artsyRedRegular(), for: .disabled, animated: true)\n        setBorderColor(.artsyRedRegular(), for: .disabled, animated: true)\n\n        setTitle(message.uppercased(), for: .disabled)\n\n        delayToMainThread(2) {\n            self.setTitleColor(.artsyGrayMedium(), for: .disabled)\n            self.setBackgroundColor(.white, for: .disabled, animated: true)\n            self.setTitle(originalTitle, for: .disabled)\n            self.setBorderColor(.artsyGrayMedium(), for: .disabled, animated: true)\n        }\n    }\n}\n\nextension TextField {\n\n    func flashForError() {\n        self.setBorderColor(.artsyRedRegular())\n        delayToMainThread(2) {\n            self.setBorderColor(.artsyPurpleRegular())\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Views/Button Subclasses/Button.swift",
    "content": "import UIKit\nimport QuartzCore\nimport Artsy_UIButtons\n\nclass Button: ARFlatButton {\n\n    override func setup() {\n        super.setup()\n        setTitleShadowColor(UIColor.clear, for: .normal)\n        setTitleShadowColor(UIColor.clear, for: .highlighted)\n        setTitleShadowColor(UIColor.clear, for: .disabled)\n        shouldDimWhenDisabled = false\n    }\n}\n\nclass ActionButton: Button {\n\n    override var intrinsicContentSize: CGSize {\n        return CGSize(width: UIViewNoIntrinsicMetric, height: ButtonHeight)\n    }\n\n    override func setup() {\n        super.setup()\n\n        setBorderColor(.black, for: .normal, animated: false)\n        setBorderColor(.artsyPurpleRegular(), for: .highlighted, animated: false)\n        setBorderColor(.artsyGraySemibold(), for: .disabled, animated: false)\n\n        setBackgroundColor(.black, for: .normal, animated: false)\n        setBackgroundColor(.artsyPurpleRegular(), for: .highlighted, animated: false)\n        setBackgroundColor(.white, for: .disabled, animated: false)\n\n        setTitleColor(.white, for: .normal)\n        setTitleColor(.white, for: .highlighted)\n        setTitleColor(.artsyGraySemibold(), for: .disabled)\n    }\n}\n\nclass SecondaryActionButton: Button {\n\n    override var intrinsicContentSize: CGSize {\n        return CGSize(width: UIViewNoIntrinsicMetric, height: ButtonHeight)\n    }\n\n    override func setup() {\n        super.setup()\n\n        setBorderColor(.artsyGrayMedium(), for: .normal, animated: false)\n        setBorderColor(.artsyPurpleRegular(), for: .highlighted, animated: false)\n        setBorderColor(.artsyGrayLight(), for: .disabled, animated: false)\n\n        setBackgroundColor(.white, for: .normal, animated: false)\n        setBackgroundColor(.artsyPurpleRegular(), for: .highlighted, animated: false)\n        setBackgroundColor(.white, for: .disabled, animated: false)\n\n        setTitleColor(.black, for:.normal)\n        setTitleColor(.white, for:.highlighted)\n        setTitleColor(.artsyGrayBold(), for:.disabled)\n    }\n}\n\nclass CancelModalButton: Button {\n    override func setup() {\n        super.setup()\n\n        setBorderColor(.clear, for: .normal, animated: false)\n        setBorderColor(.clear, for: .highlighted, animated: false)\n        setBorderColor(.clear, for: .disabled, animated: false)\n    }\n}\n\nclass KeypadButton: Button {\n\n    override func setup() {\n        super.setup()\n        shouldAnimateStateChange = false\n        layer.borderWidth = 0\n        setBackgroundColor(.black, for: .highlighted, animated: false)\n        setBackgroundColor(.white, for: .normal, animated: false)\n    }\n}\n\nclass LargeKeypadButton: KeypadButton {\n    override func setup() {\n        super.setup()\n        self.titleLabel!.font = UIFont.sansSerifFont(withSize: 20)\n    }\n}\n\nclass MenuButton: ARMenuButton {\n    override func setup() {\n        super.setup()\n        if let titleLabel = titleLabel {\n            titleLabel.font = titleLabel.font.withSize(12)\n        }\n    }\n\n    override func layoutSubviews() {\n        super.layoutSubviews()\n        if let titleLabel = titleLabel { self.bringSubview(toFront: titleLabel) }\n        if let imageView = imageView { self.bringSubview(toFront: imageView) }\n    }\n\n    override var intrinsicContentSize: CGSize {\n        return CGSize(width: 45, height: 45)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Views/RegisterFlowView.swift",
    "content": "import UIKit\nimport ORStackView\nimport RxSwift\n\nclass RegisterFlowView: ORStackView {\n\n    let highlightedIndex = Variable(0)\n\n    lazy var appSetup: AppSetup = .sharedState\n\n    var details: BidDetails? {\n        didSet {\n            update()\n        }\n    }\n\n    override func awakeFromNib() {\n        super.awakeFromNib()\n\n        backgroundColor = .white\n        bottomMarginHeight = CGFloat(NSNotFound)\n        updateConstraints()\n    }\n\n    fileprivate struct SubViewParams {\n        let title: String\n        let getters: Array<(NewUser) -> String?>\n    }\n\n    fileprivate lazy var subViewParams: Array<SubViewParams> = {\n        return [\n            [SubViewParams(title: \"Mobile\", getters: [ { $0.phoneNumber.value }])],\n            [SubViewParams(title: \"Email\", getters: [ { $0.email.value }])],\n            [SubViewParams(title: \"Postal/Zip\", getters: [ { $0.zipCode.value }])].filter { _ in self.appSetup.needsZipCode },\n            [SubViewParams(title: \"Credit Card\", getters: [ { $0.creditCardName.value }, { $0.creditCardType.value }])]\n        ].flatMap {$0}\n    }()\n\n    func update() {\n        let user = details!.newUser\n\n        removeAllSubviews()\n        for (i, subViewParam) in subViewParams.enumerated() {\n            let itemView = ItemView(frame: bounds)\n            itemView.createTitleViewWithTitle(subViewParam.title)\n\n            addSubview(itemView, withTopMargin: \"10\", sideMargin: \"0\")\n\n            if let value = (subViewParam.getters.flatMap { $0(user) }.first) {\n                itemView.createInfoLabel(value)\n\n                let button = itemView.createJumpToButtonAtIndex(i)\n                button.addTarget(self, action: #selector(pressed(_:)), for: .touchUpInside)\n\n                itemView.constrainHeight(\"44\")\n            } else {\n                itemView.constrainHeight(\"20\")\n            }\n\n            if i == highlightedIndex.value {\n                itemView.highlight()\n            }\n        }\n\n        let spacer = UIView(frame: bounds)\n        spacer.setContentHuggingPriority(12, for: .horizontal)\n        addSubview(spacer, withTopMargin: \"0\", sideMargin: \"0\")\n\n        bottomMarginHeight = 0\n    }\n\n    func pressed(_ sender: UIButton!) {\n        highlightedIndex.value = sender.tag\n    }\n\n    class ItemView: UIView {\n\n        var titleLabel: UILabel?\n\n        func highlight() {\n            titleLabel?.textColor = .artsyPurpleRegular()\n        }\n\n        func createTitleViewWithTitle(_ title: String) {\n            let label = UILabel(frame: bounds)\n            label.font = UIFont.sansSerifFont(withSize: 16)\n            label.text = title.uppercased()\n            titleLabel = label\n\n            addSubview(label)\n            label.constrainWidth(to: self, predicate: \"0\")\n            label.alignLeadingEdge(with: self, predicate: \"0\")\n            label.alignTopEdge(with: self, predicate: \"0\")\n        }\n\n        func createInfoLabel(_ info: String) {\n            let label = UILabel(frame: bounds)\n            label.font = UIFont.serifFont(withSize: 16)\n            label.text = info\n\n            addSubview(label)\n            label.constrainWidth(to: self, predicate: \"-52\")\n            label.alignLeadingEdge(with: self, predicate: \"0\")\n            label.constrainTopSpace(to: titleLabel!, predicate: \"8\")\n        }\n\n        func createJumpToButtonAtIndex(_ index: NSInteger) -> UIButton {\n            let button = UIButton(type: .custom)\n            button.tag = index\n            button.setImage(UIImage(named: \"edit_button\"), for: .normal)\n            button.isUserInteractionEnabled = true\n            button.isEnabled = true\n\n            addSubview(button)\n            button.alignTopEdge(with: self, predicate: \"0\")\n            button.alignTrailingEdge(with: self, predicate: \"0\")\n            button.constrainWidth(\"36\")\n            button.constrainHeight(\"36\")\n\n            return button\n\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Views/SimulatorOnlyView.swift",
    "content": "import UIKit\n\nclass DeveloperOnlyView: UIView {\n\n    override func awakeFromNib() {\n        // Show only if we're supposed to show AND we're on staging.\n        self.isHidden = !(AppSetup.sharedState.showDebugButtons && AppSetup.sharedState.useStaging)\n\n        if let _ = NSClassFromString(\"XCTest\") {\n            // We are running in a test.\n            self.isHidden = true\n            self.alpha = 0\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Views/Spinner.swift",
    "content": "import UIKit\n\nclass Spinner: UIView {\n    var spinner: UIView!\n    let rotationDuration = 0.9\n\n    func createSpinner() -> UIView {\n        let view = UIView(frame: CGRect(x: 0, y: 0, width: 20, height: 5))\n        view.backgroundColor = .black\n        return view\n    }\n\n    override func awakeFromNib() {\n        spinner = createSpinner()\n        addSubview(spinner)\n        backgroundColor = .clear\n        animateN(Float.infinity)\n    }\n\n    override func layoutSubviews() {\n        // .center uses frame\n        spinner.center = CGPoint( x: bounds.width / 2, y: bounds.height / 2)\n    }\n\n    func animateN(_ times: Float) {\n        let transformOffset = -1.01 * M_PI\n        let transform = CATransform3DMakeRotation( CGFloat(transformOffset), 0, 0, 1)\n        let rotationAnimation = CABasicAnimation(keyPath:\"transform\")\n\n        rotationAnimation.toValue = NSValue(caTransform3D:transform)\n        rotationAnimation.duration = rotationDuration\n        rotationAnimation.isCumulative = true\n        rotationAnimation.repeatCount = Float(times)\n        layer.add(rotationAnimation, forKey:\"spin\")\n    }\n\n    func animate(_ animate: Bool) {\n        let isAnimating = layer.animation(forKey: \"spin\") != nil\n        if (isAnimating && !animate) {\n            layer.removeAllAnimations()\n\n        } else if (!isAnimating && animate) {\n            self.animateN(Float.infinity)\n        }\n    }\n\n    func stopAnimating() {\n        layer.removeAllAnimations()\n        animateN(1)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Views/SwitchView.swift",
    "content": "import UIKit\nimport RxSwift\n\nlet SwitchViewBorderWidth: CGFloat = 2\n\nclass SwitchView: UIView {\n\n    fileprivate var _selectedIndex = Variable(0)\n\n    var selectedIndex: Observable<Int> { return _selectedIndex.asObservable() }\n\n    var shouldAnimate = true\n    var animationDuration: TimeInterval = AnimationDuration.Short\n\n    fileprivate let buttons: Array<UIButton>\n    fileprivate let selectionIndicator: UIView\n    fileprivate let topSelectionIndicator: UIView\n    fileprivate let bottomSelectionIndicator: UIView\n\n    fileprivate let topBar = CALayer()\n    fileprivate let bottomBar = CALayer()\n\n    var selectionConstraint: NSLayoutConstraint!\n\n    init(buttonTitles: Array<String>) {\n        buttons = buttonTitles.map { (buttonTitle: String) -> UIButton in\n            let button = UIButton(type: .custom)\n\n            button.setTitle(buttonTitle, for: .normal)\n            button.setTitle(buttonTitle, for: .disabled)\n\n            if let titleLabel = button.titleLabel {\n                titleLabel.font = UIFont.sansSerifFont(withSize: 13)\n                titleLabel.backgroundColor = .white\n                titleLabel.isOpaque = true\n            }\n\n            button.backgroundColor = .white\n            button.setTitleColor(.black, for: .disabled)\n            button.setTitleColor(.black, for: .selected)\n            button.setTitleColor(.artsyGrayMedium(), for: .normal)\n\n            return button\n        }\n        selectionIndicator = UIView()\n        topSelectionIndicator = UIView()\n        bottomSelectionIndicator = UIView()\n\n        super.init(frame: CGRect.zero)\n\n        setup()\n    }\n\n    override func layoutSubviews() {\n        super.layoutSubviews()\n        var rect = CGRect(x: 0, y: 0, width: layer.bounds.width, height: SwitchViewBorderWidth)\n        topBar.frame = rect\n        rect.origin.y = layer.bounds.height - SwitchViewBorderWidth\n        bottomBar.frame = rect\n    }\n\n    required convenience init(coder aDecoder: NSCoder) {\n        self.init(buttonTitles: [])\n    }\n\n    override var intrinsicContentSize: CGSize {\n        return CGSize(width: UIViewNoIntrinsicMetric, height: 46)\n    }\n\n    func selectedButton(_ button: UIButton!) {\n        let index = buttons.index(of: button)!\n        setSelectedIndex(index, animated: shouldAnimate)\n    }\n\n    subscript(index: Int) -> UIButton? {\n        get {\n            if index >= 0 && index < buttons.count {\n                return buttons[index]\n            }\n            return nil\n        }\n    }\n}\n\nprivate extension SwitchView {\n    func setup() {\n        if let firstButton = buttons.first {\n            firstButton.isEnabled = false\n        }\n\n        let widthPredicateMultiplier = \"*\\(widthMultiplier())\"\n\n        for i in 0 ..< buttons.count {\n            let button = buttons[i]\n\n            self.addSubview(button)\n            button.addTarget(self, action: #selector(SwitchView.selectedButton(_:)), for: .touchUpInside)\n\n            button.constrainWidth(to: self, predicate: widthPredicateMultiplier)\n\n            if (i == 0) {\n                button.alignLeadingEdge(with: self, predicate: nil)\n            } else {\n                button.constrainLeadingSpace(to: buttons[i-1], predicate: nil)\n            }\n\n            button.alignTop(\"\\(SwitchViewBorderWidth)\", bottom: \"\\(-SwitchViewBorderWidth)\", to: self)\n        }\n\n        topBar.backgroundColor = UIColor.artsyGrayMedium().cgColor\n        bottomBar.backgroundColor = UIColor.artsyGrayMedium().cgColor\n        layer.addSublayer(topBar)\n        layer.addSublayer(bottomBar)\n\n        selectionIndicator.addSubview(topSelectionIndicator)\n        selectionIndicator.addSubview(bottomSelectionIndicator)\n\n        topSelectionIndicator.backgroundColor = .black\n        bottomSelectionIndicator.backgroundColor = .black\n\n        topSelectionIndicator.alignTop(\"0\", leading: \"0\", bottom: nil, trailing: \"0\", to: selectionIndicator)\n        bottomSelectionIndicator.alignTop(nil, leading: \"0\", bottom: \"0\", trailing: \"0\", to: selectionIndicator)\n\n        topSelectionIndicator.constrainHeight(\"\\(SwitchViewBorderWidth)\")\n        bottomSelectionIndicator.constrainHeight(\"\\(SwitchViewBorderWidth)\")\n\n        addSubview(selectionIndicator)\n        selectionIndicator.constrainWidth(to: self, predicate: widthPredicateMultiplier)\n        selectionIndicator.alignTop(\"0\", bottom: \"0\", to: self)\n\n        selectionConstraint = selectionIndicator.alignLeadingEdge(with: self, predicate: nil).last! as! NSLayoutConstraint\n    }\n\n    func widthMultiplier() -> Float {\n        return 1.0 / Float(buttons.count)\n    }\n\n    func setSelectedIndex(_ index: Int) {\n        setSelectedIndex(index, animated: false)\n    }\n\n    func setSelectedIndex(_ index: Int, animated: Bool) {\n        UIView.animateIf(shouldAnimate && animated, duration: animationDuration, options: .curveEaseOut) {\n            let button = self.buttons[index]\n\n            self.buttons.forEach { (button: UIButton) in\n                button.isEnabled = true\n            }\n\n            button.isEnabled = false\n\n            // Set the x-position of the selection indicator as a fraction of the total width of the switch view according to which button was pressed.\n            let multiplier = CGFloat(index) / CGFloat(self.buttons.count)\n\n            self.removeConstraint(self.selectionConstraint)\n            // It's illegal to have a multiplier of zero, so if we're at index zero, we .just stick to the left side.\n            if multiplier == 0 {\n                self.selectionConstraint = self.selectionIndicator.alignLeadingEdge(with: self, predicate: nil).last! as! NSLayoutConstraint\n            } else {\n                self.selectionConstraint = NSLayoutConstraint(item: self.selectionIndicator, attribute: .left, relatedBy: .equal, toItem: self, attribute: .right, multiplier: multiplier, constant: 0)\n            }\n            self.addConstraint(self.selectionConstraint)\n            self.layoutIfNeeded()\n        }\n\n        self._selectedIndex.value = index\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Views/Text Fields/CursorView.swift",
    "content": "import UIKit\n\nclass CursorView: UIView {\n\n    let cursorLayer: CALayer = CALayer()\n\n    override init(frame: CGRect) {\n        super.init(frame: frame)\n        setup()\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        setup()\n    }\n\n    override func awakeFromNib() {\n        setupCursorLayer()\n        startAnimating()\n    }\n\n    func setup() {\n        layer.addSublayer(cursorLayer)\n        setupCursorLayer()\n    }\n\n    func setupCursorLayer() {\n        cursorLayer.frame = CGRect(x: layer.frame.width/2 - 1, y: 0, width: 2, height: layer.frame.height)\n        cursorLayer.backgroundColor = UIColor.black.cgColor\n        cursorLayer.opacity = 0.0\n    }\n\n    func startAnimating() {\n        animate(Float.infinity)\n    }\n\n    fileprivate func animate(_ times: Float) {\n        let fade = CABasicAnimation()\n        fade.duration = 0.5\n        fade.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)\n        fade.repeatCount = times\n        fade.autoreverses = true\n        fade.fromValue = 0.0\n        fade.toValue = 1.0\n        cursorLayer.add(fade, forKey: \"opacity\")\n    }\n\n    func stopAnimating() {\n        cursorLayer.removeAllAnimations()\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/App/Views/Text Fields/TextField.swift",
    "content": "import UIKit\n\nclass TextField: UITextField {\n\n    var shouldAnimateStateChange: Bool = true\n    var shouldChangeColorWhenEditing: Bool = true\n\n    override init(frame: CGRect) {\n        super.init(frame: frame)\n        setup()\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        setup()\n    }\n\n    override func awakeFromNib() {\n        super.awakeFromNib()\n        setup()\n    }\n\n    func setup() {\n        borderStyle = .none\n        layer.cornerRadius = 0\n        layer.masksToBounds = true\n        layer.borderWidth = 1\n        tintColor = .black\n        font = UIFont.serifFont(withSize: self.font?.pointSize ?? 26)\n        stateChangedAnimated(false)\n        setupEvents()\n    }\n\n    func setupEvents () {\n        addTarget(self, action: #selector(TextField.editingDidBegin(_:)), for: .editingDidBegin)\n        addTarget(self, action: #selector(TextField.editingDidFinish(_:)), for: .editingDidEnd)\n    }\n\n    func editingDidBegin (_ sender: AnyObject) {\n        stateChangedAnimated(shouldAnimateStateChange)\n    }\n\n    func editingDidFinish(_ sender: AnyObject) {\n        stateChangedAnimated(shouldAnimateStateChange)\n    }\n\n    func stateChangedAnimated(_ animated: Bool) {\n        let newBorderColor = borderColorForState().cgColor\n        if newBorderColor == layer.borderColor {\n            return\n        }\n        if animated {\n            let fade = CABasicAnimation()\n            if layer.borderColor == nil { layer.borderColor = UIColor.clear.cgColor }\n            fade.fromValue = self.layer.borderColor ?? UIColor.clear.cgColor\n            fade.toValue = newBorderColor\n            fade.duration = AnimationDuration.Short\n            layer.add(fade, forKey: \"borderColor\")\n        }\n        layer.borderColor = newBorderColor\n    }\n\n    func borderColorForState() -> UIColor {\n        if isEditing && shouldChangeColorWhenEditing {\n            return .artsyPurpleRegular()\n        } else {\n            return .artsyGrayMedium()\n        }\n    }\n\n    func setBorderColor(_ color: UIColor) {\n        self.layer.borderColor = color.cgColor\n    }\n\n    override func textRect(forBounds bounds: CGRect) -> CGRect {\n        return bounds.insetBy(dx: 10, dy: 0 )\n    }\n\n    override func editingRect(forBounds bounds: CGRect) -> CGRect {\n        return bounds.insetBy(dx: 10, dy: 0 )\n    }\n}\n\nclass SecureTextField: TextField {\n\n    var actualText: String = \"\"\n\n    override var text: String! {\n        get {\n            if isEditing {\n                return super.text\n            } else {\n                return actualText\n            }\n        }\n\n        set {\n            super.text=(newValue)\n        }\n    }\n\n    override func setup() {\n        super.setup()\n        clearsOnBeginEditing = true\n    }\n\n    override func setupEvents () {\n        super.setupEvents()\n        addTarget(self, action: #selector(SecureTextField.editingDidChange(_:)), for: .editingChanged)\n    }\n\n    override func editingDidBegin (_ sender: AnyObject) {\n        super.editingDidBegin(sender)\n        isSecureTextEntry = true\n        actualText = text\n    }\n\n    func editingDidChange(_ sender: AnyObject) {\n        actualText = text\n    }\n\n    override func editingDidFinish(_ sender: AnyObject) {\n        super.editingDidFinish(sender)\n        isSecureTextEntry = false\n        actualText = text\n        text = dotPlaceholder()\n    }\n\n    func dotPlaceholder() -> String {\n        var index = 0\n        let dots = NSMutableString()\n        while (index < text.count) {\n            dots.append(\"•\")\n            index += 1\n        }\n        return dots as String\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Auction Listings/ListingsCountdownManager.swift",
    "content": "import UIKit\nimport RxSwift\n\nclass ListingsCountdownManager: NSObject {\n\n    @IBOutlet weak var countdownLabel: UILabel!\n    @IBOutlet weak var countdownContainerView: UIView!\n    let formatter = NumberFormatter()\n\n    let sale = Variable<Sale?>(nil)\n\n    let time = SystemTime()\n    var provider: Networking! {\n        didSet {\n            time.sync(provider)\n                .dispatchAsyncMainScheduler()\n                .take(1)\n                .subscribe(onNext: { [weak self] (_) in\n                    self?.startTimer()\n                    self?.setLabelsHidden(false)\n                })\n                .addDisposableTo(rx_disposeBag)\n        }\n    }\n\n    fileprivate var _timer: Timer? = nil\n\n    override func awakeFromNib() {\n        super.awakeFromNib()\n        formatter.minimumIntegerDigits = 2\n    }\n\n    /// Immediately invalidates the timer. No further updates will be made to the UI after this method is called.\n    func invalidate() {\n        _timer?.invalidate()\n    }\n\n    func setFonts() {\n        (countdownContainerView.subviews).forEach { (view) -> () in\n            if let label = view as? UILabel {\n                label.font = UIFont.serifFont(withSize: 15)\n            }\n        }\n        countdownLabel.font = UIFont.sansSerifFont(withSize: 20)\n    }\n\n    func setLabelsHidden(_ hidden: Bool) {\n        countdownContainerView.isHidden = hidden\n    }\n\n    func setLabelsHiddenIfSynced(_ hidden: Bool) {\n        if time.inSync() {\n            setLabelsHidden(hidden)\n        }\n    }\n\n    func hideDenomenatorLabels() {\n        for subview in countdownContainerView.subviews {\n            subview.isHidden = subview != countdownLabel\n        }\n    }\n\n    func startTimer() {\n        let timer = Timer(timeInterval: 0.49, target: self, selector: #selector(ListingsCountdownManager.tick(_:)), userInfo: nil, repeats: true)\n        RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)\n\n        _timer = timer\n\n        self.tick(timer)\n    }\n\n    func tick(_ timer: Timer) {\n        guard let sale = sale.value else { return }\n        guard time.inSync() else { return }\n        guard sale.id != \"\" else { return }\n\n        if sale.isActive(time) {\n            let now = time.date()\n\n            let components = Calendar.current.dateComponents([.hour, .minute, .second], from: now, to: sale.endDate)\n\n            self.countdownLabel.text = \"\\(formatter.string(from: (components.hour ?? 0) as NSNumber)!) : \\(formatter.string(from: (components.minute ?? 0) as NSNumber)!) : \\(formatter.string(from: (components.second ?? 0) as NSNumber)!)\"\n\n        } else {\n            self.countdownLabel.text = \"CLOSED\"\n            hideDenomenatorLabels()\n            timer.invalidate()\n            _timer = nil\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Auction Listings/ListingsViewController.swift",
    "content": "import UIKit\nimport SystemConfiguration\nimport ARAnalytics\nimport RxSwift\nimport ARCollectionViewMasonryLayout\nimport NSObject_Rx\n\nlet HorizontalMargins = 65\nlet VerticalMargins = 26\nlet MasonryCellIdentifier = \"MasonryCell\"\nlet TableCellIdentifier = \"TableCell\"\n\nclass ListingsViewController: UIViewController {\n    var allowAnimations = true\n\n    var downloadImage: ListingsCollectionViewCell.DownloadImageClosure = { (url, imageView) -> () in\n        if let url = url {\n            imageView.sd_setImage(with: url as URL!)\n        } else {\n            imageView.image = nil\n        }\n    }\n    var cancelDownloadImage: ListingsCollectionViewCell.CancelDownloadImageClosure = { (imageView) -> () in\n        imageView.sd_cancelCurrentImageLoad()\n    }\n\n    var provider: Networking!\n\n    lazy var viewModel: ListingsViewModelType = {\n        return ListingsViewModel(provider:\n            self.provider,\n            selectedIndex: self.switchView.selectedIndex,\n            showDetails: applyUnowned(self, ListingsViewController.showDetails),\n            presentModal: applyUnowned(self, ListingsViewController.presentModalForSaleArtwork)\n        )\n    }()\n\n    var cellIdentifier = Variable(MasonryCellIdentifier)\n\n    @IBOutlet var stagingFlag: UIImageView!\n    @IBOutlet var loadingSpinner: Spinner!\n\n    lazy var collectionView: UICollectionView = { return .listingsCollectionViewWithDelegateDatasource(self) }()\n\n    lazy var switchView: SwitchView = {\n        return SwitchView(buttonTitles: ListingsViewModel.SwitchValues.allSwitchValueNames())\n    }()\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        // Set up development environment.\n\n        if AppSetup.sharedState.isTesting {\n            stagingFlag.isHidden = true\n        } else {\n            if APIKeys.sharedKeys.stubResponses {\n                stagingFlag.image = UIImage(named: \"StubbingFlag\")\n            } else if detectDevelopmentEnvironment() {\n                let flagImageName = AppSetup.sharedState.useStaging ? \"StagingFlag\" : \"ProductionFlag\"\n                stagingFlag.image = UIImage(named: flagImageName)\n            } else {\n                stagingFlag.isHidden = AppSetup.sharedState.useStaging == false\n            }\n        }\n\n        // Add subviews\n\n        view.addSubview(switchView)\n        view.insertSubview(collectionView, belowSubview: loadingSpinner)\n\n        // Set up reactive bindings\n        viewModel\n            .showSpinner\n            .not()\n            .bindTo(loadingSpinner.rx_hidden)\n            .addDisposableTo(rx_disposeBag)\n\n        // Map switch selection to cell reuse identifier.\n        viewModel\n            .gridSelected\n            .map { gridSelected -> String in\n                if gridSelected {\n                    return MasonryCellIdentifier\n                } else {\n                    return TableCellIdentifier\n                }\n            }\n            .bindTo(cellIdentifier)\n            .addDisposableTo(rx_disposeBag)\n\n        // Reload collection view when there is new content.\n        viewModel\n            .updatedContents\n            .mapReplace(with: collectionView)\n            .doOnNext { collectionView in\n                collectionView.reloadData()\n            }\n            .dispatchAsyncMainScheduler()\n            .subscribe(onNext: { [weak self] collectionView in\n                // Make sure we're on screen and not in a test or something.\n                guard let _ = self?.view.window else { return }\n\n                // Need to dispatchAsyncMainScheduler, since the changes in the CV's model aren't imediate, so we may scroll to a cell that doesn't exist yet.\n                collectionView.scrollToItem(at: IndexPath(item: 0, section: 0), at: .top, animated: false)\n            })\n            .addDisposableTo(rx_disposeBag)\n\n        // Respond to changes in layout, driven by switch selection.\n        viewModel\n            .gridSelected\n            .map { [weak self] gridSelected -> UICollectionViewLayout in\n                switch gridSelected {\n                case true:\n                    return ListingsViewController.masonryLayout()\n                default:\n                    return ListingsViewController.tableLayout(width: (self?.switchView.frame ?? CGRect.zero).width)\n                }\n            }\n            .subscribe(onNext: { [weak self] layout in\n                // Need to explicitly call animated: false and reload to avoid animation\n                self?.collectionView.setCollectionViewLayout(layout, animated: false)\n            })\n            .addDisposableTo(rx_disposeBag)\n    }\n\n    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n        if segue == .ShowSaleArtworkDetails {\n            let saleArtwork = sender as! SaleArtwork!\n            let detailsViewController = segue.destination as! SaleArtworkDetailsViewController\n            detailsViewController.saleArtwork = saleArtwork\n            detailsViewController.provider = provider\n            ARAnalytics.event(\"Show Artwork Details\", withProperties: [\"id\": saleArtwork?.artwork.id])\n        }\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        let switchHeightPredicate = \"\\(switchView.intrinsicContentSize.height)\"\n\n        switchView.constrainHeight(switchHeightPredicate)\n        switchView.alignTop(\"\\(64+VerticalMargins)\", leading: \"\\(HorizontalMargins)\", bottom: nil, trailing: \"-\\(HorizontalMargins)\", to: view)\n        collectionView.constrainTopSpace(to: switchView, predicate: \"0\")\n        collectionView.alignTop(nil, leading: \"0\", bottom: \"0\", trailing: \"0\", to: view)\n        collectionView.contentInset = UIEdgeInsets(top: 40, left: 0, bottom: 80, right: 0)\n    }\n}\n\nextension ListingsViewController {\n    class func instantiateFromStoryboard(_ storyboard: UIStoryboard) -> ListingsViewController {\n        return storyboard.viewController(withID: .AuctionListings) as! ListingsViewController\n    }\n}\n\n// MARK: - Collection View\n\nextension ListingsViewController: UICollectionViewDataSource, UICollectionViewDelegate, ARCollectionViewMasonryLayoutDelegate {\n\n    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {\n        return viewModel.numberOfSaleArtworks\n    }\n\n    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {\n        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier.value, for: indexPath)\n\n        if let listingsCell = cell as? ListingsCollectionViewCell {\n\n            listingsCell.downloadImage = downloadImage\n            listingsCell.cancelDownloadImage = cancelDownloadImage\n\n            listingsCell.setViewModel(viewModel.saleArtworkViewModel(atIndexPath: indexPath))\n\n            let bid = listingsCell.bidPressed.takeUntil(listingsCell.preparingForReuse)\n            let moreInfo = listingsCell.moreInfo.takeUntil(listingsCell.preparingForReuse)\n\n            bid\n                .subscribe(onNext: { [weak self] _ in\n                    self?.viewModel.presentModalForSaleArtwork(atIndexPath: indexPath)\n                })\n                .addDisposableTo(rx_disposeBag)\n\n            moreInfo\n                .subscribe(onNext: { [weak self] _ in\n                    self?.viewModel.showDetailsForSaleArtwork(atIndexPath: indexPath)\n                })\n                .addDisposableTo(rx_disposeBag)\n        }\n\n        return cell\n    }\n\n    func collectionView(_ collectionView: UICollectionView!, layout collectionViewLayout: ARCollectionViewMasonryLayout!, variableDimensionForItemAt indexPath: IndexPath!) -> CGFloat {\n        let aspectRatio = viewModel.imageAspectRatioForSaleArtwork(atIndexPath: indexPath)\n        let hasEstimate = viewModel.hasEstimateForSaleArtwork(atIndexPath: indexPath)\n        return MasonryCollectionViewCell.heightForCellWithImageAspectRatio(aspectRatio, hasEstimate: hasEstimate)\n    }\n}\n\n// MARK: Private Methods\n\nprivate extension ListingsViewController {\n\n    func showDetails(forSaleArtwork saleArtwork: SaleArtwork) {\n\n        ARAnalytics.event(\"Artwork Details Tapped\", withProperties: [\"id\": saleArtwork.artwork.id])\n        self.performSegue(withIdentifier: SegueIdentifier.ShowSaleArtworkDetails.rawValue, sender: saleArtwork)\n    }\n\n    func presentModalForSaleArtwork(_ saleArtwork: SaleArtwork) {\n        bid(auctionID: viewModel.auctionID, saleArtwork: saleArtwork, allowAnimations: self.allowAnimations, provider: provider)\n    }\n\n    // MARK: Class methods\n\n    class func masonryLayout() -> ARCollectionViewMasonryLayout {\n        let layout = ARCollectionViewMasonryLayout(direction: .vertical)\n        layout?.itemMargins = CGSize(width: 65, height: 20)\n        layout?.dimensionLength = CGFloat(MasonryCollectionViewCellWidth)\n        layout?.rank = 3\n        layout?.contentInset = UIEdgeInsetsMake(0.0, 0.0, CGFloat(VerticalMargins), 0.0)\n\n        return layout!\n    }\n\n    class func tableLayout(width: CGFloat) -> UICollectionViewFlowLayout {\n        let layout = UICollectionViewFlowLayout()\n        TableCollectionViewCell.Width = width\n        layout.itemSize = CGSize(width: width, height: TableCollectionViewCell.Height)\n        layout.minimumLineSpacing = 0.0\n\n        return layout\n    }\n}\n\n// MARK: Collection view setup\n\nextension UICollectionView {\n\n    class func listingsCollectionViewWithDelegateDatasource(_ delegateDatasource: ListingsViewController) -> UICollectionView {\n        let collectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: ListingsViewController.masonryLayout())\n        collectionView.backgroundColor = .clear\n        collectionView.dataSource = delegateDatasource\n        collectionView.delegate = delegateDatasource\n        collectionView.alwaysBounceVertical = true\n        collectionView.register(MasonryCollectionViewCell.self, forCellWithReuseIdentifier: MasonryCellIdentifier)\n        collectionView.register(TableCollectionViewCell.self, forCellWithReuseIdentifier: TableCellIdentifier)\n        collectionView.allowsSelection = false\n        return collectionView\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Auction Listings/ListingsViewModel.swift",
    "content": "import Foundation\nimport RxSwift\n\ntypealias ShowDetailsClosure = (SaleArtwork) -> Void\ntypealias PresentModalClosure = (SaleArtwork) -> Void\n\nprotocol ListingsViewModelType {\n\n    var auctionID: String { get }\n    var syncInterval: TimeInterval { get }\n    var pageSize: Int { get }\n    var logSync: (Date) -> Void { get }\n    var numberOfSaleArtworks: Int { get }\n\n    var showSpinner: Observable<Bool>! { get }\n    var gridSelected: Observable<Bool>! { get }\n    var updatedContents: Observable<NSDate> { get }\n\n    var scheduleOnBackground: (_ observable: Observable<Any>) -> Observable<Any> { get }\n    var scheduleOnForeground: (_ observable: Observable<[SaleArtwork]>) -> Observable<[SaleArtwork]> { get }\n\n    func saleArtworkViewModel(atIndexPath indexPath: IndexPath) -> SaleArtworkViewModel\n    func showDetailsForSaleArtwork(atIndexPath indexPath: IndexPath)\n    func presentModalForSaleArtwork(atIndexPath indexPath: IndexPath)\n    func imageAspectRatioForSaleArtwork(atIndexPath indexPath: IndexPath) -> CGFloat?\n    func hasEstimateForSaleArtwork(atIndexPath indexPath: IndexPath) -> Bool\n}\n\n// Cheating here, should be in the instance but there's only ever one instance, so ¯\\_(ツ)_/¯\nprivate let backgroundScheduler = SerialDispatchQueueScheduler(qos: .default)\n\nclass ListingsViewModel: NSObject, ListingsViewModelType {\n\n    // These are private to the view model – should not be accessed directly\n    fileprivate var saleArtworks = Variable(Array<SaleArtwork>())\n    fileprivate var sortedSaleArtworks = Variable<Array<SaleArtwork>>([])\n\n    let auctionID: String\n    let pageSize: Int\n    let syncInterval: TimeInterval\n    let logSync: (Date) -> Void\n    var scheduleOnBackground: (_ observable: Observable<Any>) -> Observable<Any>\n    var scheduleOnForeground: (_ observable: Observable<[SaleArtwork]>) -> Observable<[SaleArtwork]>\n\n    var numberOfSaleArtworks: Int {\n        return sortedSaleArtworks.value.count\n    }\n\n    var showSpinner: Observable<Bool>!\n    var gridSelected: Observable<Bool>!\n    var updatedContents: Observable<NSDate> {\n        return sortedSaleArtworks\n            .asObservable()\n            .map { $0.count > 0 }\n            .ignore(value: false)\n            .map { _ in NSDate() }\n    }\n\n    let showDetails: ShowDetailsClosure\n    let presentModal: PresentModalClosure\n    let provider: Networking\n\n    init(provider: Networking,\n         selectedIndex: Observable<Int>,\n         showDetails: @escaping ShowDetailsClosure,\n         presentModal: @escaping PresentModalClosure,\n         pageSize: Int = 10,\n         syncInterval: TimeInterval = SyncInterval,\n         logSync:@escaping (Date) -> Void = ListingsViewModel.DefaultLogging,\n         scheduleOnBackground: @escaping (_ observable: Observable<Any>) -> Observable<Any> = ListingsViewModel.DefaultScheduler(onBackground: true),\n         scheduleOnForeground: @escaping (_ observable: Observable<[SaleArtwork]>) -> Observable<[SaleArtwork]> = ListingsViewModel.DefaultScheduler(onBackground: false),\n         auctionID: String = AppSetup.sharedState.auctionID) {\n\n        self.provider = provider\n        self.auctionID = auctionID\n        self.showDetails = showDetails\n        self.presentModal = presentModal\n        self.pageSize = pageSize\n        self.syncInterval = syncInterval\n        self.logSync = logSync\n        self.scheduleOnBackground = scheduleOnBackground\n        self.scheduleOnForeground = scheduleOnForeground\n\n        super.init()\n\n        setup(selectedIndex)\n    }\n\n    // MARK: Private Methods\n\n    fileprivate func setup(_ selectedIndex: Observable<Int>) {\n\n        recurringListingsRequest()\n            .takeUntil(rx.deallocated)\n            .bindTo(saleArtworks)\n            .addDisposableTo(rx_disposeBag)\n\n        showSpinner = sortedSaleArtworks.asObservable().map { sortedSaleArtworks in\n            return sortedSaleArtworks.count == 0\n        }\n\n        gridSelected = selectedIndex.map { ListingsViewModel.SwitchValues(rawValue: $0) == .some(.grid) }\n\n        let distinctSaleArtworks = saleArtworks\n            .asObservable()\n            .distinctUntilChanged { (lhs, rhs) -> Bool in\n                return lhs == rhs\n            }\n            .mapReplace(with: 0) // To use in combineLatest, we must have an array of identically-typed observables. \n\n        Observable.combineLatest([selectedIndex, distinctSaleArtworks]) { ints in\n                // We use distinctSaleArtworks to trigger an update, but ints[1] is unused.\n                return ints[0]\n            }\n            .startWith(0)\n            .map { selectedIndex in\n                return ListingsViewModel.SwitchValues(rawValue: selectedIndex)\n            }\n            .filterNil()\n            .map { [weak self] switchValue -> [SaleArtwork] in\n                guard let me = self else { return [] }\n                return switchValue.sortSaleArtworks(me.saleArtworks.value)\n            }\n            .bindTo(sortedSaleArtworks)\n            .addDisposableTo(rx_disposeBag)\n\n    }\n\n    fileprivate func listingsRequest(forPage page: Int) -> Observable<Any> {\n        return provider.request(.auctionListings(id: auctionID, page: page, pageSize: self.pageSize)).filterSuccessfulStatusCodes().mapJSON()\n    }\n\n    // Repeatedly calls itself with page+1 until the count of the returned array is < pageSize.\n    fileprivate func retrieveAllListingsRequest(_ page: Int) -> Observable<Any> {\n        return Observable.create { [weak self] observer in\n            guard let me = self else { return Disposables.create() }\n\n            return me.listingsRequest(forPage: page).subscribe(onNext: { object in\n                guard let array = object as? Array<AnyObject> else { return }\n                guard let me = self else { return }\n\n                // This'll either be the next page request or .empty.\n                let nextPage: Observable<Any>\n\n                // We must have more results to retrieve\n                if array.count >= me.pageSize {\n                    nextPage = me.retrieveAllListingsRequest(page+1)\n                } else {\n                    nextPage = .empty()\n                }\n\n                // TODO: Anything with this disposable?\n                _ = Observable<Any>.just(object)\n                    .concat(nextPage)\n                    .subscribe(observer)\n            })\n        }\n    }\n\n    // Fetches all pages of the auction\n    fileprivate func allListingsRequest() -> Observable<[SaleArtwork]> {\n        let backgroundJSONParsing = scheduleOnBackground(retrieveAllListingsRequest(1)).reduce([Any]()) { (memo, object) in\n                guard let array = object as? Array<Any> else { return memo }\n                return memo + array\n            }\n            .mapTo(arrayOf: SaleArtwork.self)\n            .logServerError(message: \"Sale artworks failed to retrieve+parse\")\n            .catchErrorJustReturn([])\n\n        return scheduleOnForeground(backgroundJSONParsing)\n    }\n\n    fileprivate func recurringListingsRequest() -> Observable<Array<SaleArtwork>> {\n        let recurring = Observable<Int>.interval(syncInterval, scheduler: MainScheduler.instance)\n            .map { _ in Date() }\n            .startWith(Date())\n            .takeUntil(rx.deallocated)\n\n        return recurring\n            .doOnNext(logSync)\n            .flatMap { [weak self] _ in\n                return self?.allListingsRequest() ?? .empty()\n            }\n            .map { [weak self] newSaleArtworks -> [SaleArtwork] in\n                guard let me = self else { return [] }\n\n                let currentSaleArtworks = me.saleArtworks.value\n\n                // So we want to do here is pretty simple – if the existing and new arrays are of the same length,\n                // then update the individual values in the current array and return the existing value.\n                // If the array's length has changed, then we pass through the new array\n                if newSaleArtworks.count == currentSaleArtworks.count {\n                    if update(currentSaleArtworks, newSaleArtworks: newSaleArtworks) {\n                        return currentSaleArtworks\n                    }\n                }\n\n                return newSaleArtworks\n            }\n    }\n\n    // MARK: Private class methods\n\n    fileprivate class func DefaultLogging(_ date: Date) {\n        #if (arch(i386) || arch(x86_64)) && os(iOS)\n            logger.log(\"Syncing on \\(date)\")\n        #endif\n    }\n\n    fileprivate class func DefaultScheduler<T>(onBackground background: Bool) -> (_ observable: Observable<T>) -> Observable<T> {\n        return { observable in\n            if background {\n                return observable.observeOn(backgroundScheduler)\n            } else {\n                return observable.observeOn(MainScheduler.instance)\n            }\n        }\n    }\n\n    // MARK: Public methods\n\n    func saleArtworkViewModel(atIndexPath indexPath: IndexPath) -> SaleArtworkViewModel {\n        return sortedSaleArtworks.value[indexPath.item].viewModel\n    }\n\n    func imageAspectRatioForSaleArtwork(atIndexPath indexPath: IndexPath) -> CGFloat? {\n        return sortedSaleArtworks.value[indexPath.item].artwork.defaultImage?.aspectRatio\n    }\n\n    func hasEstimateForSaleArtwork(atIndexPath indexPath: IndexPath) -> Bool {\n        let saleArtwork = sortedSaleArtworks.value[indexPath.item]\n        switch (saleArtwork.estimateCents, saleArtwork.lowEstimateCents, saleArtwork.highEstimateCents) {\n        case (.some, _, _): return true\n        case (_, .some, .some): return true\n        default: return false\n        }\n    }\n\n    func showDetailsForSaleArtwork(atIndexPath indexPath: IndexPath) {\n        showDetails(sortedSaleArtworks.value[indexPath.item])\n    }\n\n    func presentModalForSaleArtwork(atIndexPath indexPath: IndexPath) {\n        presentModal(sortedSaleArtworks.value[indexPath.item])\n    }\n\n    // MARK: - Switch Values\n\n    enum SwitchValues: Int {\n        case grid = 0\n        case leastBids\n        case mostBids\n        case highestCurrentBid\n        case lowestCurrentBid\n        case alphabetical\n\n        var name: String {\n            switch self {\n            case .grid:\n                return \"Grid\"\n            case .leastBids:\n                return \"Least Bids\"\n            case .mostBids:\n                return \"Most Bids\"\n            case .highestCurrentBid:\n                return \"Highest Bid\"\n            case .lowestCurrentBid:\n                return \"Lowest Bid\"\n            case .alphabetical:\n                return \"A–Z\"\n            }\n        }\n\n        func sortSaleArtworks(_ saleArtworks: [SaleArtwork]) -> [SaleArtwork] {\n            switch self {\n            case .grid:\n                return saleArtworks\n            case .leastBids:\n                return saleArtworks.sorted(by: leastBidsSort)\n            case .mostBids:\n                return saleArtworks.sorted(by: mostBidsSort)\n            case .highestCurrentBid:\n                return saleArtworks.sorted(by: highestCurrentBidSort)\n            case .lowestCurrentBid:\n                return saleArtworks.sorted(by: lowestCurrentBidSort)\n            case .alphabetical:\n                return saleArtworks.sorted(by: alphabeticalSort)\n            }\n        }\n\n        static func allSwitchValues() -> [SwitchValues] {\n            return [grid, leastBids, mostBids, highestCurrentBid, lowestCurrentBid, alphabetical]\n        }\n\n        static func allSwitchValueNames() -> [String] {\n            return allSwitchValues().map {$0.name.uppercased()}\n        }\n    }\n}\n\n// MARK: - Sorting Functions\n\nprotocol IntOrZeroable {\n    var intOrZero: Int { get }\n}\n\nextension NSNumber: IntOrZeroable {\n    var intOrZero: Int {\n        return self as Int\n    }\n}\n\nextension Optional where Wrapped: IntOrZeroable {\n    var intOrZero: Int {\n        return self.value?.intOrZero ?? 0\n    }\n}\n\nfunc leastBidsSort(_ lhs: SaleArtwork, _ rhs: SaleArtwork) -> Bool {\n    return (lhs.bidCount.intOrZero) < (rhs.bidCount.intOrZero)\n}\n\nfunc mostBidsSort(_ lhs: SaleArtwork, _ rhs: SaleArtwork) -> Bool {\n    return !leastBidsSort(lhs, rhs)\n}\n\nfunc lowestCurrentBidSort(_ lhs: SaleArtwork, _ rhs: SaleArtwork) -> Bool {\n    return (lhs.highestBidCents.intOrZero) < (rhs.highestBidCents.intOrZero)\n}\n\nfunc highestCurrentBidSort(_ lhs: SaleArtwork, _ rhs: SaleArtwork) -> Bool {\n    return !lowestCurrentBidSort(lhs, rhs)\n}\n\nfunc alphabeticalSort(_ lhs: SaleArtwork, _ rhs: SaleArtwork) -> Bool {\n    return lhs.artwork.sortableArtistID().caseInsensitiveCompare(rhs.artwork.sortableArtistID()) == .orderedAscending\n}\n\nfunc sortById(_ lhs: SaleArtwork, _ rhs: SaleArtwork) -> Bool {\n    return lhs.id.caseInsensitiveCompare(rhs.id) == .orderedAscending\n}\n\nprivate func update(_ currentSaleArtworks: [SaleArtwork], newSaleArtworks: [SaleArtwork]) -> Bool {\n    assert(currentSaleArtworks.count == newSaleArtworks.count, \"Arrays' counts must be equal.\")\n    // Updating the currentSaleArtworks is easy. Both are already sorted as they came from the API (by lot #).\n    // Because we assume that their length is the same, we just do a linear scan through and\n    // copy values from the new to the existing.\n\n    let saleArtworksCount = currentSaleArtworks.count\n\n    for i in 0 ..< saleArtworksCount {\n        if currentSaleArtworks[i].id == newSaleArtworks[i].id {\n            currentSaleArtworks[i].updateWithValues(newSaleArtworks[i])\n        } else {\n            // Failure: the list was the same size but had different artworks.\n            return false\n        }\n    }\n\n    return true\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Auction Listings/MasonryCollectionViewCell.swift",
    "content": "import UIKit\nimport RxSwift\nimport ORStackView\n\nlet MasonryCollectionViewCellWidth: CGFloat = 254\n\nclass MasonryCollectionViewCell: ListingsCollectionViewCell {\n    fileprivate lazy var bidView: UIView = {\n        let view = UIView()\n        for subview in [self.currentBidLabel, self.numberOfBidsLabel] {\n            view.addSubview(subview)\n            subview.alignTopEdge(with: view, predicate:\"13\")\n            subview.alignBottomEdge(with: view, predicate:\"0\")\n            subview.constrainHeight(\"18\")\n        }\n        self.currentBidLabel.alignLeadingEdge(with: view, predicate: \"0\")\n        self.numberOfBidsLabel.alignTrailingEdge(with: view, predicate: \"0\")\n        return view\n    }()\n\n    private var artworkImageViewHeightConstraint: NSLayoutConstraint?\n\n    private let stackView = ORTagBasedAutoStackView()\n\n    override func setup() {\n        super.setup()\n\n        contentView.constrainWidth(\"\\(MasonryCollectionViewCellWidth)\")\n\n        contentView.addSubview(stackView)\n        stackView.align(to: contentView)\n\n        let whitespaceGobbler = WhitespaceGobbler()\n\n        let stackViewSubviews = [artworkImageView, lotNumberLabel, artistNameLabel, artworkTitleLabel, estimateLabel, bidView, bidButton, moreInfoLabel, whitespaceGobbler]\n        for (index, subview) in stackViewSubviews.enumerated() {\n            subview.tag = index\n        }\n\n        stackView.addSubview(artworkImageView, withTopMargin: \"0\", sideMargin: \"0\")\n        stackView.addSubview(lotNumberLabel, withTopMargin: \"20\", sideMargin: \"0\")\n        stackView.addSubview(artistNameLabel, withTopMargin: \"20\", sideMargin: \"0\")\n        stackView.addSubview(artworkTitleLabel, withTopMargin: \"10\", sideMargin: \"0\")\n        stackView.addSubview(estimateLabel, withTopMargin: \"10\", sideMargin: \"0\")\n        stackView.addSubview(bidView, withTopMargin: \"13\", sideMargin: \"0\")\n        stackView.addSubview(bidButton, withTopMargin: \"13\", sideMargin: \"0\")\n        stackView.addSubview(moreInfoLabel, withTopMargin: \"0\", sideMargin: \"0\")\n        stackView.addSubview(whitespaceGobbler, withTopMargin: \"0\", sideMargin: \"0\")\n\n        artistNameLabel.constrainHeight(\"20\")\n        artworkTitleLabel.constrainHeight(\"16\")\n        estimateLabel.constrainHeight(\"16\")\n\n        moreInfoLabel.constrainHeight(\"44\")\n\n        viewModel.flatMapTo(SaleArtworkViewModel.lotNumber)\n            .map { $0.isNilOrEmpty }\n            .subscribe(onNext: removeLabelWhenEmpty(label: lotNumberLabel, topMargin: \"20\"))\n            .addDisposableTo(rx_disposeBag)\n\n        viewModel\n            .map { $0.estimateString }\n            .map { $0.isEmpty }\n            .subscribe(onNext: removeLabelWhenEmpty(label: estimateLabel, topMargin: \"10\"))\n            .addDisposableTo(rx_disposeBag)\n\n        viewModel\n            .map { $0.artistName }\n            .map { $0.isNilOrEmpty }\n            .subscribe(onNext: removeLabelWhenEmpty(label: artistNameLabel, topMargin: \"20\"))\n            .addDisposableTo(rx_disposeBag)\n\n        // Binds the imageView to always be the correct aspect ratio\n        viewModel.subscribe(onNext: { [weak self] viewModel in\n                if let artworkImageViewHeightConstraint = self?.artworkImageViewHeightConstraint {\n                    self?.artworkImageView.removeConstraint(artworkImageViewHeightConstraint)\n                }\n                let imageHeight = heightForImage(withAspectRatio: viewModel.thumbnailAspectRatio)\n                self?.artworkImageViewHeightConstraint = self?.artworkImageView.constrainHeight(\"\\(imageHeight)\").first as? NSLayoutConstraint\n                self?.layoutIfNeeded()\n            })\n            .addDisposableTo(rx_disposeBag)\n    }\n\n    override func layoutSubviews() {\n        super.layoutSubviews()\n        bidView.drawTopDottedBorder(with: .artsyGrayMedium())\n    }\n\n    func removeLabelWhenEmpty(label: UIView, topMargin: String) -> (Bool) -> Void {\n        return { [weak self] isEmpty in\n            guard let `self` = self else { return }\n            if isEmpty {\n                self.stackView.removeSubview(label)\n            } else {\n                self.stackView.addSubview(label, withTopMargin: topMargin, sideMargin: \"0\")\n            }\n        }\n    }\n}\n\nextension MasonryCollectionViewCell {\n    class func heightForCellWithImageAspectRatio(_ aspectRatio: CGFloat?, hasEstimate: Bool) -> CGFloat {\n        let imageHeight = heightForImage(withAspectRatio: aspectRatio)\n        let estimateHeight =\n            16 + // estimate\n            13   // padding\n        let remainingHeight =\n            20 + // padding\n            20 + // artist name\n            10 + // padding\n            16 + // artwork name\n            10 + // padding\n            13 + // padding\n            16 + // bid\n            13 + // padding\n            44 + // more info button\n            12   // padding\n\n        return imageHeight + ButtonHeight + CGFloat(remainingHeight) + CGFloat(hasEstimate ? estimateHeight : 0)\n    }\n}\n\nprivate func heightForImage(withAspectRatio aspectRatio: CGFloat?) -> CGFloat {\n    if let ratio = aspectRatio {\n        if ratio != 0 {\n            return CGFloat(MasonryCollectionViewCellWidth) / ratio\n        }\n    }\n    return CGFloat(MasonryCollectionViewCellWidth)\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Auction Listings/TableCollectionViewCell.swift",
    "content": "import UIKit\nimport RxCocoa\n\nclass TableCollectionViewCell: ListingsCollectionViewCell {\n    fileprivate lazy var infoView: UIView = {\n        let view = UIView()\n        view.addSubview(self.lotNumberLabel)\n        view.addSubview(self.artistNameLabel)\n        view.addSubview(self.artworkTitleLabel)\n\n        self.lotNumberLabel.alignTop(\"0\", bottom: nil, to: view)\n        self.lotNumberLabel.alignLeading(\"0\", trailing: \"0\", to: view)\n        self.artistNameLabel.alignAttribute(.top, to: .bottom, of: self.lotNumberLabel, predicate: \"5\")\n        self.artistNameLabel.alignLeading(\"0\", trailing: \"0\", to: view)\n        self.artworkTitleLabel.alignLeading(\"0\", trailing: \"0\", to: view)\n        self.artworkTitleLabel.alignAttribute(.top, to: .bottom, of: self.artistNameLabel, predicate: \"0\")\n        self.artworkTitleLabel.alignTop(nil, bottom: \"0\", to: view)\n        return view\n    }()\n\n    fileprivate lazy var cellSubviews: [UIView] = [self.artworkImageView, self.infoView, self.currentBidLabel, self.numberOfBidsLabel, self.bidButton]\n\n    override func setup() {\n        super.setup()\n\n        contentView.constrainWidth(\"\\(TableCollectionViewCell.Width)\")\n\n        // Configure subviews\n        numberOfBidsLabel.textAlignment = .center\n        artworkImageView.contentMode = .scaleAspectFill\n        artworkImageView.clipsToBounds = true\n\n        // Add subviews\n        cellSubviews.forEach { self.contentView.addSubview($0) }\n\n        // Constrain subviews\n        artworkImageView.alignAttribute(.width, to: .height, of: artworkImageView, predicate: nil)\n        artworkImageView.alignTop(\"14\", leading: \"0\", bottom: \"-14\", trailing: nil, to: contentView)\n        artworkImageView.constrainHeight(\"56\")\n\n        infoView.alignAttribute(.left, to: .right, of: artworkImageView, predicate: \"28\")\n        infoView.alignCenterY(with: artworkImageView, predicate: \"0\")\n        infoView.constrainWidth(\"300\")\n\n        currentBidLabel.alignAttribute(.left, to: .right, of: infoView, predicate: \"33\")\n        currentBidLabel.alignCenterY(with: artworkImageView, predicate: \"0\")\n        currentBidLabel.constrainWidth(\"180\")\n\n        numberOfBidsLabel.alignAttribute(.left, to: .right, of: currentBidLabel, predicate: \"33\")\n        numberOfBidsLabel.alignCenterY(with: artworkImageView, predicate: \"0\")\n        numberOfBidsLabel.alignAttribute(.right, to: .left, of: bidButton, predicate: \"-33\")\n\n        bidButton.alignBottom(nil, trailing: \"0\", to: contentView)\n        bidButton.alignCenterY(with: artworkImageView, predicate: \"0\")\n        bidButton.constrainWidth(\"127\")\n\n        // Replaces the observable defined in the superclass, normally used to emit taps to a \"More Info\" label, which we don't have.\n        let recognizer = UITapGestureRecognizer()\n        contentView.addGestureRecognizer(recognizer)\n        self.moreInfo = recognizer.rx.event.map { _ -> Date in\n            return Date()\n        }\n    }\n\n    override func layoutSubviews() {\n        super.layoutSubviews()\n        contentView.drawBottomSolidBorder(with: .artsyGrayMedium())\n    }\n}\n\nextension TableCollectionViewCell {\n    fileprivate struct SharedDimensions {\n        var width: CGFloat = 0\n        var height: CGFloat = 84\n\n        static var instance = SharedDimensions()\n    }\n\n    class var Width: CGFloat {\n        get {\n            return SharedDimensions.instance.width\n        }\n        set (newWidth) {\n            SharedDimensions.instance.width = newWidth\n        }\n    }\n\n    class var Height: CGFloat {\n        return SharedDimensions.instance.height\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Auction Listings/WebViewController.swift",
    "content": "import DZNWebViewController\n\nlet modalHeight: CGFloat = 660\n\nclass WebViewController: DZNWebViewController {\n    var showToolbar = true\n\n    convenience override init(url: URL) {\n        self.init()\n        self.url = url\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        let webView = view as! UIWebView\n        webView.scalesPageToFit = true\n\n        self.navigationItem.rightBarButtonItem = nil\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        navigationController?.setNavigationBarHidden(true, animated:false)\n        navigationController?.setToolbarHidden(!showToolbar, animated:false)\n    }\n}\n\nclass ModalWebViewController: WebViewController {\n    var closeButton: UIButton!\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        closeButton = UIButton()\n        view.addSubview(closeButton)\n        closeButton.titleLabel?.font = UIFont.sansSerifFont(withSize: 14)\n        closeButton.setTitleColor(.artsyGrayMedium(), for:.normal)\n        closeButton.setTitle(\"CLOSE\", for:.normal)\n        closeButton.constrainWidth(\"140\", height: \"72\")\n        closeButton.alignTop(\"0\", leading:\"0\", bottom:nil, trailing:nil, to:view)\n        closeButton.addTarget(self, action:#selector(closeTapped(_:)), for:.touchUpInside)\n\n        var height = modalHeight\n        if let nav = navigationController {\n            if !nav.isNavigationBarHidden { height -= nav.navigationBar.frame.height }\n            if !nav.isToolbarHidden { height -= nav.toolbar.frame.height }\n        }\n        preferredContentSize = CGSize(width: 815, height: height)\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        navigationController?.view.superview?.layer.cornerRadius = 0\n    }\n\n    func closeTapped(_ sender: AnyObject) {\n        presentingViewController?.dismiss(animated: true, completion:nil)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/AdminCCBypassNetworkModel.swift",
    "content": "import Foundation\nimport RxSwift\nimport Moya\n\nenum BypassResult {\n    case requireCC\n    case skipCCRequirement\n}\n\nprotocol AdminCCBypassNetworkModelType {\n\n    func checkForAdminCCBypass(_ saleID: String, authorizedNetworking: AuthorizedNetworking) -> Observable<BypassResult>\n}\n\nclass AdminCCBypassNetworkModel: AdminCCBypassNetworkModelType {\n\n    /// Returns an Observable of (Bool, AuthorizedNetworking)\n    /// The Bool represents if the Credit Card requirement should be waived.\n    /// THe AuthorizedNetworking is the same instance that's passed in, which is a convenience for chaining observables.\n    func checkForAdminCCBypass(_ saleID: String, authorizedNetworking: AuthorizedNetworking) -> Observable<BypassResult> {\n\n        return authorizedNetworking\n            .request(ArtsyAuthenticatedAPI.findMyBidderRegistration(auctionID: saleID))\n            .filterSuccessfulStatusCodes()\n            .mapJSON()\n            .mapTo(arrayOf: Bidder.self)\n            .map { bidders in\n                return bidders.first\n            }\n            .map { bidder -> BypassResult in\n                guard let bidder = bidder else { return .requireCC }\n\n                switch bidder.createdByAdmin {\n                case true: return .skipCCRequirement\n                case false: return .requireCC\n                }\n            }\n            .logError()\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/BidCheckingNetworkModel.swift",
    "content": "import UIKit\nimport RxSwift\nimport Moya\n\nenum BidCheckingError: String {\n    case PollingExceeded\n}\n\nextension BidCheckingError: Swift.Error { }\n\nprotocol BidCheckingNetworkModelType {\n    var bidDetails: BidDetails { get }\n\n    var bidIsResolved: Variable<Bool> { get }\n    var isHighestBidder: Variable<Bool> { get }\n    var reserveNotMet: Variable<Bool> { get }\n\n    func waitForBidResolution (bidderPositionId: String, provider: AuthorizedNetworking) -> Observable<Void>\n}\n\nclass BidCheckingNetworkModel: NSObject, BidCheckingNetworkModelType {\n\n    fileprivate var pollInterval = TimeInterval(1)\n    fileprivate var maxPollRequests = 20\n    fileprivate var pollRequests = 0\n\n    // inputs\n    let provider: Networking\n    let bidDetails: BidDetails\n\n    // outputs\n    var bidIsResolved = Variable(false)\n    var isHighestBidder = Variable(false)\n    var reserveNotMet = Variable(false)\n\n    fileprivate var mostRecentSaleArtwork: SaleArtwork?\n\n    init(provider: Networking, bidDetails: BidDetails) {\n        self.provider = provider\n        self.bidDetails = bidDetails\n    }\n\n    func waitForBidResolution (bidderPositionId: String, provider: AuthorizedNetworking) -> Observable<Void> {\n        return self\n            .poll(forUpdatedBidderPosition: bidderPositionId, provider: provider)\n            .then {\n\n                return self.getUpdatedSaleArtwork()\n                    .flatMap { saleArtwork -> Observable<Void> in\n\n                        // This is an updated model – hooray!\n                        self.mostRecentSaleArtwork = saleArtwork\n                        self.bidDetails.saleArtwork?.updateWithValues(saleArtwork)\n                        self.reserveNotMet.value = ReserveStatus.initOrDefault(saleArtwork.reserveStatus).reserveNotMet\n\n                        return .just(Void())\n                    }\n                    .doOnError { _ in\n                        logger.log(\"Bidder position was processed but corresponding saleArtwork was not found\")\n                    }\n                    .catchErrorJustReturn()\n                    .flatMap { _ -> Observable<Void> in\n                        return self.checkForMaxBid(provider: provider)\n                }\n            } .doOnNext { _ in\n                self.bidIsResolved.value = true\n\n                // If polling fails, we can still show bid confirmation. Do not error.\n            }.catchErrorJustReturn()\n    }\n\n    fileprivate func poll(forUpdatedBidderPosition bidderPositionId: String, provider: AuthorizedNetworking) -> Observable<Void> {\n        let updatedBidderPosition = getUpdatedBidderPosition(bidderPositionId: bidderPositionId, provider: provider)\n            .flatMap { bidderPositionObject -> Observable<Void> in\n                self.pollRequests += 1\n\n                logger.log(\"Polling \\(self.pollRequests) of \\(self.maxPollRequests) for updated sale artwork\")\n\n                if let processedAt = bidderPositionObject.processedAt {\n                    logger.log(\"BidPosition finished processing at \\(processedAt), proceeding...\")\n                    return .just(Void())\n                } else {\n                    // The backend hasn't finished processing the bid yet\n\n                    guard self.pollRequests < self.maxPollRequests else {\n                        // We have exceeded our max number of polls, fail.\n                        throw BidCheckingError.PollingExceeded\n                    }\n\n                    // We didn't get an updated value, so let's try again.\n                    return Observable<Int>.interval(self.pollInterval, scheduler: MainScheduler.instance)\n                        .take(1)\n                        .map(void)\n                        .then {\n                            return self.poll(forUpdatedBidderPosition: bidderPositionId, provider: provider)\n                    }\n                }\n        }\n\n        return Observable<Int>.interval(pollInterval, scheduler: MainScheduler.instance)\n            .take(1)\n            .map(void)\n            .then { updatedBidderPosition }\n    }\n\n    fileprivate func checkForMaxBid(provider: AuthorizedNetworking) -> Observable<Void> {\n        return getMyBidderPositions(provider: provider)\n            .doOnNext { newBidderPositions in\n\n                if let topBidID = self.mostRecentSaleArtwork?.saleHighestBid?.id {\n                    for position in newBidderPositions where position.highestBid?.id == topBidID {\n                        self.isHighestBidder.value = true\n                    }\n                }\n            }\n            .map(void)\n    }\n\n    fileprivate func getMyBidderPositions(provider: AuthorizedNetworking) -> Observable<[BidderPosition]> {\n        let artworkID = bidDetails.saleArtwork!.artwork.id\n        let auctionID = bidDetails.saleArtwork!.auctionID!\n\n        let endpoint = ArtsyAuthenticatedAPI.myBidPositionsForAuctionArtwork(auctionID: auctionID, artworkID: artworkID)\n        return provider\n            .request(endpoint)\n            .filterSuccessfulStatusCodes()\n            .mapJSON()\n            .mapTo(arrayOf: BidderPosition.self)\n    }\n\n    fileprivate func getUpdatedSaleArtwork() -> Observable<SaleArtwork> {\n\n        let artworkID = bidDetails.saleArtwork!.artwork.id\n        let auctionID = bidDetails.saleArtwork!.auctionID!\n\n        let endpoint: ArtsyAPI = ArtsyAPI.auctionInfoForArtwork(auctionID: auctionID, artworkID: artworkID)\n        return provider\n            .request(endpoint)\n            .filterSuccessfulStatusCodes()\n            .mapJSON()\n            .mapTo(object: SaleArtwork.self)\n    }\n\n    fileprivate func getUpdatedBidderPosition(bidderPositionId: String, provider: AuthorizedNetworking) -> Observable<BidderPosition> {\n        let endpoint = ArtsyAuthenticatedAPI.myBidPosition(id: bidderPositionId)\n        return provider\n            .request(endpoint)\n            .filterSuccessfulStatusCodes()\n            .mapJSON()\n            .mapTo(object: BidderPosition.self)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/BidDetailsPreviewView.swift",
    "content": "import UIKit\nimport Artsy_UILabels\nimport Artsy_UIButtons\nimport UIImageViewAligned\nimport RxSwift\nimport RxCocoa\n\nclass BidDetailsPreviewView: UIView {\n\n    let _bidDetails = Variable<BidDetails?>(nil)\n    var bidDetails: BidDetails? {\n        didSet {\n            self._bidDetails.value = bidDetails\n        }\n    }\n\n    dynamic let artworkImageView = UIImageViewAligned()\n    dynamic let artistNameLabel = ARSansSerifLabel()\n    dynamic let artworkTitleLabel = ARSerifLabel()\n    dynamic let currentBidPriceLabel = ARSerifLabel()\n\n    override func awakeFromNib() {\n        self.backgroundColor = .white\n\n        artistNameLabel.numberOfLines = 1\n        artworkTitleLabel.numberOfLines = 1\n        currentBidPriceLabel.numberOfLines = 1\n\n        artworkImageView.alignRight = true\n        artworkImageView.alignBottom = true\n        artworkImageView.contentMode = .scaleAspectFit\n\n        artistNameLabel.font = UIFont.sansSerifFont(withSize: 14)\n        currentBidPriceLabel.font = UIFont.serifBoldFont(withSize: 14)\n\n        let artwork = _bidDetails\n            .asObservable()\n            .filterNil()\n            .map { bidDetails in\n                return bidDetails.saleArtwork?.artwork\n            }\n            .take(1)\n\n        artwork\n            .subscribe(onNext: { [weak self] artwork in\n                if let url = artwork?.defaultImage?.thumbnailURL() {\n                    self?.bidDetails?.setImage(url, self!.artworkImageView)\n                } else {\n                    self?.artworkImageView.image = nil\n                }\n            })\n            .addDisposableTo(rx_disposeBag)\n\n        artwork\n            .map { artwork in\n                return artwork?.artists?.first?.name\n            }\n            .map { name in\n                return name ?? \"\"\n            }\n            .bindTo(artistNameLabel.rx.text)\n            .addDisposableTo(rx_disposeBag)\n\n        artwork\n            .map { artwork -> NSAttributedString in\n                guard let artwork = artwork else {\n                    return NSAttributedString()\n                }\n\n                return artwork.titleAndDate\n            }\n            .mapToOptional()\n            .bindTo(artworkTitleLabel.rx.attributedText)\n            .addDisposableTo(rx_disposeBag)\n\n        _bidDetails\n            .asObservable()\n            .filterNil()\n            .take(1)\n            .map { bidDetails in\n                guard let cents = bidDetails.bidAmountCents.value else { return \"\" }\n\n                return \"Your bid: \" + NumberFormatter.currencyString(forDollarCents: cents)\n            }\n            .bindTo(currentBidPriceLabel.rx.text)\n            .addDisposableTo(rx_disposeBag)\n\n        for subview in [artworkImageView, artistNameLabel, artworkTitleLabel, currentBidPriceLabel] {\n            self.addSubview(subview)\n        }\n\n        self.constrainHeight(\"60\")\n\n        artworkImageView.alignTop(\"0\", leading: \"0\", bottom: \"0\", trailing: nil, to: self)\n        artworkImageView.constrainWidth(\"84\")\n        artworkImageView.constrainHeight(\"60\")\n\n        artistNameLabel.alignAttribute(.top, to: .top, of: self, predicate: \"0\")\n        artistNameLabel.constrainHeight(\"16\")\n        artworkTitleLabel.alignAttribute(.top, to: .bottom, of: artistNameLabel, predicate: \"8\")\n        artworkTitleLabel.constrainHeight(\"16\")\n        currentBidPriceLabel.alignAttribute(.top, to: .bottom, of: artworkTitleLabel, predicate: \"4\")\n        currentBidPriceLabel.constrainHeight(\"16\")\n\n        UIView.alignAttribute(.leading, ofViews: [artistNameLabel, artworkTitleLabel, currentBidPriceLabel], to:.trailing, ofViews: [artworkImageView, artworkImageView, artworkImageView], predicate: \"20\")\n        UIView.alignAttribute(.trailing, ofViews: [artistNameLabel, artworkTitleLabel, currentBidPriceLabel], to:.trailing, ofViews: [self, self, self], predicate: \"0\")\n\n    }\n\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/BidderNetworkModel.swift",
    "content": "import Foundation\nimport RxSwift\nimport Moya\n\nprotocol BidderNetworkModelType {\n    var createdNewUser: Observable<Bool> { get }\n    var bidDetails: BidDetails { get }\n\n    func createOrGetBidder() -> Observable<AuthorizedNetworking>\n}\n\nclass BidderNetworkModel: NSObject, BidderNetworkModelType {\n\n    let bidDetails: BidDetails\n    let provider: Networking\n\n    var createdNewUser: Observable<Bool> {\n        return self.bidDetails.newUser.hasBeenRegistered.asObservable()\n    }\n\n    init(provider: Networking, bidDetails: BidDetails) {\n        self.provider = provider\n        self.bidDetails = bidDetails\n    }\n\n    // MARK: - Main observable\n\n    /// Returns an authorized provider\n    func createOrGetBidder() -> Observable<AuthorizedNetworking> {\n        return createOrUpdateUser()\n            .flatMap { provider -> Observable<AuthorizedNetworking> in\n                return self.createOrUpdateBidder(provider: provider).mapReplace(with: provider)\n            }\n            .flatMap { provider -> Observable<AuthorizedNetworking> in\n                self.getMyPaddleNumber(provider: provider).mapReplace(with: provider)\n            }\n    }\n}\n\nprivate extension BidderNetworkModel {\n\n    // MARK: - Chained observables\n\n    func checkUserEmailExists(_ email: String) -> Observable<Bool> {\n        let request = provider.request(.findExistingEmailRegistration(email: email))\n\n        return request.map { response in\n            return response.statusCode != 404\n        }\n    }\n\n    func createOrUpdateUser() -> Observable<AuthorizedNetworking> {\n        // observable to test for user existence (does a user exist with this email?)\n        let bool = self.checkUserEmailExists(bidDetails.newUser.email.value ?? \"\")\n\n        // If the user exists, update their info to the API, otherwise create a new user.\n        return bool\n            .flatMap { emailExists -> Observable<AuthorizedNetworking> in\n                if emailExists {\n                    return self.updateUser()\n                } else {\n                    return self.createNewUser()\n                }\n            }\n            .flatMap { provider -> Observable<AuthorizedNetworking> in\n                self.addCardToUser(provider: provider).mapReplace(with: provider) // After update/create observable finishes, add a CC to their account (if we've collected one)\n            }\n    }\n\n    func createNewUser() -> Observable<AuthorizedNetworking> {\n        let newUser = bidDetails.newUser\n        let endpoint: ArtsyAPI = ArtsyAPI.createUser(email: newUser.email.value!, password: newUser.password.value!, phone: newUser.phoneNumber.value!, postCode: newUser.zipCode.value ?? \"\", name: newUser.name.value ?? \"\")\n\n        return provider.request(endpoint)\n            .filterSuccessfulStatusCodes()\n            .map(void)\n            .doOnError { error in\n                logger.log(\"Creating user failed.\")\n                logger.log(\"Error: \\((error as NSError).localizedDescription). \\n \\((error as NSError).artsyServerError())\")\n        }.flatMap { _ -> Observable<AuthorizedNetworking> in\n            self.bidDetails.authenticatedNetworking(provider: self.provider)\n        }\n    }\n\n    func updateUser() -> Observable<AuthorizedNetworking> {\n        let newUser = bidDetails.newUser\n        let endpoint = ArtsyAuthenticatedAPI.updateMe(email: newUser.email.value!, phone: newUser.phoneNumber.value!, postCode: newUser.zipCode.value ?? \"\", name: newUser.name.value ?? \"\")\n\n        return bidDetails.authenticatedNetworking(provider: provider)\n            .flatMap { (provider) -> Observable<AuthorizedNetworking> in\n                provider.request(endpoint)\n                    .mapJSON()\n                    .logNext()\n                    .mapReplace(with: provider)\n            }\n            .logServerError(message: \"Updating user failed.\")\n    }\n\n    func addCardToUser(provider: AuthorizedNetworking) -> Observable<Void> {\n        // If the user was asked to swipe a card, we'd have stored the token. \n        // If the token is not there, then the user must already have one on file. So we can skip this step.\n        guard let token = bidDetails.newUser.creditCardToken.value else {\n            return .just(Void())\n        }\n\n        let swiped = bidDetails.newUser.swipedCreditCard\n        let endpoint = ArtsyAuthenticatedAPI.registerCard(stripeToken: token, swiped: swiped)\n\n        return provider.request(endpoint)\n            .filterSuccessfulStatusCodes()\n            .map(void)\n            .doOnCompleted { [weak self] in\n                // Adding the credit card succeeded, so we should clear the newUser.creditCardToken so that we don't\n                // inadvertently try to re-add their card token if they need to increase their bid.\n\n                self?.bidDetails.newUser.creditCardToken.value = nil\n            }\n            .logServerError(message: \"Adding Card to User failed\")\n    }\n\n    // MARK: - Auction / Bidder observables\n\n    func createOrUpdateBidder(provider: AuthorizedNetworking) -> Observable<Void> {\n        let bool = self.checkForBidderOnAuction(auctionID: bidDetails.auctionID, provider: provider)\n\n        return bool.flatMap { exists -> Observable<Void> in\n            if exists {\n                return .just(Void())\n            } else {\n                return self.register(toAuction: self.bidDetails.auctionID, provider: provider).then { [weak self] in self?.generateAPIN(provider: provider) }\n            }\n        }\n    }\n\n    func checkForBidderOnAuction(auctionID: String, provider: AuthorizedNetworking) -> Observable<Bool> {\n\n        let endpoint = ArtsyAuthenticatedAPI.myBiddersForAuction(auctionID: auctionID)\n        let request = provider.request(endpoint)\n            .filterSuccessfulStatusCodes()\n            .mapJSON()\n            .mapTo(arrayOf: Bidder.self)\n\n        return request.map { [weak self] bidders -> Bool in\n            if let bidder = bidders.first {\n                self?.bidDetails.bidderID.value = bidder.id\n                self?.bidDetails.bidderPIN.value =  bidder.pin\n\n                return true\n            }\n            return false\n\n        }.logServerError(message: \"Getting user bidders failed.\")\n    }\n\n    func register(toAuction auctionID: String, provider: AuthorizedNetworking) -> Observable<Void> {\n        let endpoint = ArtsyAuthenticatedAPI.registerToBid(auctionID: auctionID)\n        let register = provider.request(endpoint)\n            .filterSuccessfulStatusCodes()\n            .mapJSON()\n            .mapTo(object: Bidder.self)\n\n        return\n            register.doOnNext { [weak self] bidder in\n                self?.bidDetails.bidderID.value = bidder.id\n                self?.bidDetails.newUser.hasBeenRegistered.value = true\n            }\n            .logServerError(message: \"Registering for Auction Failed.\")\n            .map(void)\n    }\n\n    func generateAPIN(provider: AuthorizedNetworking) -> Observable<Void> {\n        let endpoint = ArtsyAuthenticatedAPI.createPINForBidder(bidderID: bidDetails.bidderID.value!)\n\n        return provider.request(endpoint)\n            .filterSuccessfulStatusCodes()\n            .mapJSON()\n            .doOnNext { [weak self] json in\n                let pin = (json as AnyObject)[\"pin\"] as? String\n                self?.bidDetails.bidderPIN.value = pin\n            }\n            .logServerError(message: \"Generating a PIN for bidder has failed.\")\n            .map(void)\n    }\n\n    func getMyPaddleNumber(provider: AuthorizedNetworking) -> Observable<Void> {\n        let endpoint = ArtsyAuthenticatedAPI.me\n        return provider.request(endpoint)\n            .filterSuccessfulStatusCodes()\n            .mapJSON()\n            .mapTo(object: User.self)\n            .doOnNext { [weak self] user in\n                self?.bidDetails.paddleNumber.value =  user.paddleNumber\n            }\n            .logServerError(message: \"Getting Bidder ID failed.\")\n            .map(void)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/ConfirmYourBidArtsyLoginViewController.swift",
    "content": "import UIKit\nimport Moya\nimport RxSwift\nimport Action\n\nclass ConfirmYourBidArtsyLoginViewController: UIViewController {\n\n    @IBOutlet var emailTextField: UITextField!\n    @IBOutlet var passwordTextField: TextField!\n    @IBOutlet var bidDetailsPreviewView: BidDetailsPreviewView!\n    @IBOutlet var useArtsyBidderButton: UIButton!\n    @IBOutlet var confirmCredentialsButton: Button!\n\n    fileprivate let _viewWillDisappear = PublishSubject<Void>()\n    var viewWillDisappear: Observable<Void> {\n        return self._viewWillDisappear.asObserver()\n    }\n\n    var createNewAccount = false\n    var provider: Networking!\n\n    class func instantiateFromStoryboard(_ storyboard: UIStoryboard) -> ConfirmYourBidArtsyLoginViewController {\n        return storyboard.viewController(withID: .ConfirmYourBidArtsyLogin) as! ConfirmYourBidArtsyLoginViewController\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        let titleString = useArtsyBidderButton.title(for: useArtsyBidderButton.state) ?? \"\"\n        let attributes = [NSUnderlineStyleAttributeName: NSUnderlineStyle.styleSingle.rawValue,\n            NSFontAttributeName: useArtsyBidderButton.titleLabel!.font] as [String : Any]\n        let attrTitle = NSAttributedString(string: titleString, attributes:attributes)\n        useArtsyBidderButton.setAttributedTitle(attrTitle, for:useArtsyBidderButton.state)\n\n        let nav = self.fulfillmentNav()\n        let bidDetails = nav.bidDetails\n        bidDetailsPreviewView.bidDetails = bidDetails\n\n        emailTextField.text = nav.bidDetails.newUser.email.value ?? \"\"\n\n        let emailText = emailTextField.rx.text.takeUntil(viewWillDisappear)\n        let passwordText = passwordTextField.rx.text.takeUntil(viewWillDisappear)\n\n        emailText\n            .bindTo(nav.bidDetails.newUser.email)\n            .addDisposableTo(rx_disposeBag)\n\n        passwordText\n            .bindTo(nav.bidDetails.newUser.password)\n            .addDisposableTo(rx_disposeBag)\n\n        let inputIsEmail = emailText.asObservable().replaceNil(with: \"\").map(stringIsEmailAddress)\n        let passwordIsLongEnough = passwordText.asObservable().replaceNil(with: \"\").map(isZeroLength).not()\n        let formIsValid = [inputIsEmail, passwordIsLongEnough].combineLatestAnd()\n\n        let provider = self.provider\n\n        confirmCredentialsButton.rx.action = CocoaAction(enabledIf: formIsValid) { [weak self] _ -> Observable<Void> in\n            guard let me = self else { return .empty() }\n\n            return bidDetails.authenticatedNetworking(provider: provider!)\n                .flatMap { provider -> Observable<AuthorizedNetworking> in\n                    return me.fulfillmentNav()\n                        .updateUserCredentials(loggedInProvider: provider)\n                        .mapReplace(with: provider)\n                }.flatMap { provider -> Observable<Void> in\n                    return me.creditCard(provider)\n                        .doOnNext { cards in\n                            guard let me = self else { return }\n\n                            if cards.count > 0 {\n                                me.performSegue(.EmailLoginConfirmedHighestBidder)\n                            } else {\n                                me.performSegue(.ArtsyUserHasNotRegisteredCard)\n                            }\n                        }\n                        .map(void)\n\n                }.doOnError { [weak self] error in\n                    logger.log(\"Error logging in: \\((error as NSError).localizedDescription)\")\n                    logger.log(\"Error Logging in, likely bad auth creds, email = \\(self?.emailTextField.text)\")\n                    self?.showAuthenticationError()\n            }\n        }\n    }\n\n    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n        super.prepare(for: segue, sender: sender)\n\n        if segue == .EmailLoginConfirmedHighestBidder {\n            let viewController = segue.destination as! LoadingViewController\n            viewController.provider = provider\n        } else if segue == .ArtsyUserHasNotRegisteredCard {\n            let viewController = segue.destination as! RegisterViewController\n            viewController.provider = provider\n        }\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        if emailTextField.text.isNilOrEmpty {\n            emailTextField.becomeFirstResponder()\n        } else {\n            passwordTextField.becomeFirstResponder()\n        }\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n        _viewWillDisappear.onNext()\n    }\n\n    func showAuthenticationError() {\n        confirmCredentialsButton.flashError(\"Wrong login info\")\n        passwordTextField.flashForError()\n        fulfillmentNav().bidDetails.newUser.password.value = \"\"\n        passwordTextField.text = \"\"\n    }\n\n    @IBAction func forgotPasswordTapped(_ sender: AnyObject) {\n        let alertController = UIAlertController(title: \"Forgot Password\", message: \"Please enter your email address and we'll send you a reset link.\", preferredStyle: .alert)\n\n        var submitAction = UIAlertAction.Action(\"Send\", style: .default)\n        let email = Variable(\"\")\n        submitAction.rx.action = CocoaAction(enabledIf: email.asObservable().map(stringIsEmailAddress), workFactory: { () -> Observable<Void> in\n            let endpoint: ArtsyAPI = ArtsyAPI.lostPasswordNotification(email: email.value)\n\n            return self.provider.request(endpoint)\n                .filterSuccessfulStatusCodes()\n                .doOnNext { _ in\n                    logger.log(\"Sent forgot password request\")\n                }\n                .map(void)\n        })\n\n        let cancelAction = UIAlertAction(title: \"Cancel\", style: .cancel) { (_) in }\n\n        alertController.addTextField { textField in\n            textField.placeholder = \"email@domain.com\"\n            textField.text = self.emailTextField.text\n\n            textField\n                .rx.text\n                .asObservable()\n                .replaceNil(with: \"\")\n                .bindTo(email)\n                .addDisposableTo(textField.rx_disposeBag)\n\n            NotificationCenter.default.addObserver(forName: NSNotification.Name.UITextFieldTextDidChange, object: textField, queue: OperationQueue.main) { (notification) in\n                submitAction.isEnabled = stringIsEmailAddress(textField.text ?? \"\").boolValue\n            }\n        }\n\n        alertController.addAction(submitAction)\n        alertController.addAction(cancelAction)\n\n        self.present(alertController, animated: true) {}\n    }\n\n    func creditCard(_ provider: AuthorizedNetworking) -> Observable<[Card]> {\n        let endpoint = ArtsyAuthenticatedAPI.myCreditCards\n        return provider\n            .request(endpoint)\n            .filterSuccessfulStatusCodes()\n            .mapJSON()\n            .mapTo(arrayOf: Card.self)\n    }\n\n    @IBAction func useBidderTapped(_ sender: AnyObject) {\n        for controller in navigationController!.viewControllers {\n            if controller.isKind(of: ConfirmYourBidViewController.self) {\n                navigationController!.popToViewController(controller, animated:true)\n                break\n            }\n        }\n    }\n}\n\nprivate extension  ConfirmYourBidArtsyLoginViewController {\n\n    @IBAction func dev_hasCardTapped(_ sender: AnyObject) {\n        self.performSegue(.EmailLoginConfirmedHighestBidder)\n    }\n\n    @IBAction func dev_noCardFoundTapped(_ sender: AnyObject) {\n        self.performSegue(.ArtsyUserHasNotRegisteredCard)\n    }\n\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/ConfirmYourBidEnterYourEmailViewController.swift",
    "content": "import UIKit\nimport RxSwift\nimport RxCocoa\nimport Action\n\nclass ConfirmYourBidEnterYourEmailViewController: UIViewController {\n\n    @IBOutlet var emailTextField: UITextField!\n    @IBOutlet var confirmButton: UIButton!\n    @IBOutlet var bidDetailsPreviewView: BidDetailsPreviewView!\n\n    class func instantiateFromStoryboard(_ storyboard: UIStoryboard) -> ConfirmYourBidEnterYourEmailViewController {\n        return storyboard.viewController(withID: .ConfirmYourBidEnterEmail) as! ConfirmYourBidEnterYourEmailViewController\n    }\n\n    var provider: Networking!\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        let emailText = emailTextField.rx.textInput.text.asObservable().replaceNil(with: \"\")\n        let inputIsEmail = emailText.map(stringIsEmailAddress)\n\n        let action = CocoaAction(enabledIf: inputIsEmail) { [weak self] _ in\n            guard let me = self else { return .empty() }\n\n            let endpoint: ArtsyAPI = ArtsyAPI.findExistingEmailRegistration(email: me.emailTextField.text ?? \"\")\n\n            return self?.provider.request(endpoint)\n                .filterStatusCode(200)\n                .doOnNext { _ in\n                    me.performSegue(.ExistingArtsyUserFound)\n                }\n                .doOnError { error in\n\n                    self?.performSegue(.EmailNotFoundonArtsy)\n                }\n                .map(void) ?? .empty()\n        }\n\n        confirmButton.rx.action = action\n\n        let unbind = action.executing.ignore(value: false)\n\n        let nav = self.fulfillmentNav()\n\n        bidDetailsPreviewView.bidDetails = nav.bidDetails\n\n        emailText\n            .asObservable()\n            .mapToOptional()\n            .takeUntil(unbind)\n            .bindTo(nav.bidDetails.newUser.email)\n            .addDisposableTo(rx_disposeBag)\n\n        emailTextField.rx_returnKey.subscribe(onNext: { _ in\n            action.execute()\n        }).addDisposableTo(rx_disposeBag)\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n\n        self.emailTextField.becomeFirstResponder()\n    }\n\n    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n        super.prepare(for: segue, sender: sender)\n\n        if segue == .EmailNotFoundonArtsy {\n            let viewController = segue.destination as! RegisterViewController\n            viewController.provider = provider\n        } else if segue == .ExistingArtsyUserFound {\n            let viewController = segue.destination as! ConfirmYourBidArtsyLoginViewController\n            viewController.provider = provider\n        }\n    }\n}\n\nprivate extension ConfirmYourBidEnterYourEmailViewController {\n\n    @IBAction func dev_emailFound(_ sender: AnyObject) {\n        performSegue(.ExistingArtsyUserFound)\n    }\n\n    @IBAction func dev_emailNotFound(_ sender: AnyObject) {\n        performSegue(.EmailNotFoundonArtsy)\n    }\n\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/ConfirmYourBidPINViewController.swift",
    "content": "import UIKit\nimport Moya\nimport RxSwift\nimport Action\n\nclass ConfirmYourBidPINViewController: UIViewController {\n\n    fileprivate var _pin = Variable(\"\")\n\n    @IBOutlet var keypadContainer: KeypadContainerView!\n    @IBOutlet var pinTextField: TextField!\n    @IBOutlet var confirmButton: Button!\n    @IBOutlet var bidDetailsPreviewView: BidDetailsPreviewView!\n\n    lazy var pin: Observable<String> = { self.keypadContainer.stringValue }()\n    lazy var networkModel: AdminCCBypassNetworkModelType = AdminCCBypassNetworkModel()\n\n    var provider: Networking!\n\n    // TODO: These all need to be changed.\n    class func instantiateFromStoryboard(_ storyboard: UIStoryboard) -> ConfirmYourBidPINViewController {\n        return storyboard.viewController(withID: .ConfirmYourBidPIN) as! ConfirmYourBidPINViewController\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        pin\n            .bindTo(_pin)\n            .addDisposableTo(rx_disposeBag)\n\n        pin\n            .bindTo(pinTextField.rx.text)\n            .addDisposableTo(rx_disposeBag)\n\n        pin\n            .mapToOptional()\n            .bindTo(fulfillmentNav().bidDetails.bidderPIN)\n            .addDisposableTo(rx_disposeBag)\n\n        let pinExists = pin.map { $0.isNotEmpty }\n\n        let bidDetails = fulfillmentNav().bidDetails\n        let provider = self.provider\n\n        bidDetailsPreviewView.bidDetails = bidDetails\n        /// verify if we can connect with number & pin\n\n        confirmButton.rx.action = CocoaAction(enabledIf: pinExists) { [weak self] _ in\n            guard let me = self else { return .empty() }\n\n            var loggedInProvider: AuthorizedNetworking!\n\n            return bidDetails.authenticatedNetworking(provider: provider!)\n                .doOnNext { provider in\n                    loggedInProvider = provider\n                }\n                .flatMap { provider -> Observable<AuthorizedNetworking> in\n                    return provider\n                        .request(ArtsyAuthenticatedAPI.me)\n                        .filterSuccessfulStatusCodes()\n                        .mapReplace(with: provider)\n                }\n                .flatMap { provider -> Observable<AuthorizedNetworking> in\n                    return me\n                        .fulfillmentNav()\n                        .updateUserCredentials(loggedInProvider: loggedInProvider)\n                        .mapReplace(with: provider)\n                }\n                .flatMap { provider -> Observable<Void> in\n                    return me\n                        .networkModel\n                        .checkForAdminCCBypass(bidDetails.auctionID, authorizedNetworking: provider)\n                        .flatMap { result -> Observable<Void> in\n\n                            switch result {\n                            case .skipCCRequirement:\n                                // We should bypass the CC requirement and move directly onto placing the bid.\n                                me.performSegue(.PINConfirmedhasCard)\n                                return .empty()\n                            case .requireCC:\n                                // We must check for a CC, and collect one if necessary.\n                                return me\n                                    .checkForCreditCard(loggedInProvider: provider)\n                                    .doOnNext(me.got)\n                                    .map(void)\n                            }\n                        }\n                }\n                .doOnError { error in\n                    if let response = (error as? Moya.Error)?.response {\n                        let responseBody = NSString(data: response.data, encoding: String.Encoding.utf8.rawValue)\n                        print(\"Error authenticating(\\(response.statusCode)): \\(responseBody)\")\n                    }\n\n                    me.showAuthenticationError()\n                }\n        }\n    }\n\n    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n        super.prepare(for: segue, sender: sender)\n\n        if segue == .ArtsyUserviaPINHasNotRegisteredCard {\n            let viewController = segue.destination as! RegisterViewController\n            viewController.provider = provider\n        } else if segue == .PINConfirmedhasCard {\n            let viewController = segue.destination as! LoadingViewController\n            viewController.provider = provider\n        }\n    }\n\n    @IBAction func forgotPINTapped(_ sender: AnyObject) {\n        let auctionID = fulfillmentNav().auctionID ?? \"\"\n        let number = fulfillmentNav().bidDetails.newUser.phoneNumber.value ?? \"\"\n        let endpoint: ArtsyAPI = ArtsyAPI.bidderDetailsNotification(auctionID: auctionID, identifier: number)\n\n        let alertController = UIAlertController(title: \"Forgot PIN\", message: \"We have sent your bidder details to your device.\", preferredStyle: .alert)\n\n        let cancelAction = UIAlertAction(title: \"Back\", style: .cancel) { (_) in }\n        alertController.addAction(cancelAction)\n\n        self.present(alertController, animated: true) {}\n\n        provider.request(endpoint)\n            .filterSuccessfulStatusCodes()\n            .subscribe(onNext: { _ in\n\n                // Necessary to subscribe to the actual observable. This should be in a CocoaAction of the button, instead.\n                logger.log(\"Sent forgot PIN request\")\n            })\n            .addDisposableTo(rx_disposeBag)\n    }\n\n    func showAuthenticationError() {\n        confirmButton.flashError(\"Wrong PIN\")\n        pinTextField.flashForError()\n        keypadContainer.resetAction.execute()\n    }\n\n    func checkForCreditCard(loggedInProvider: AuthorizedNetworking) -> Observable<[Card]> {\n        let endpoint = ArtsyAuthenticatedAPI.myCreditCards\n        return loggedInProvider.request(endpoint).filterSuccessfulStatusCodes().mapJSON().mapTo(arrayOf: Card.self)\n    }\n\n    func got(cards: [Card]) {\n        // If the cards list doesn't exist, or its .empty, then perform the segue to collect one.\n        // Otherwise, proceed directly to the loading view controller to place the bid.\n        if cards.isEmpty {\n            performSegue(.ArtsyUserviaPINHasNotRegisteredCard)\n        } else {\n            performSegue(.PINConfirmedhasCard)\n        }\n    }\n}\n\nprivate extension ConfirmYourBidPINViewController {\n    @IBAction func dev_loggedInTapped(_ sender: AnyObject) {\n        self.performSegue(.PINConfirmedhasCard)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/ConfirmYourBidPasswordViewController.swift",
    "content": "import UIKit\n\n// Unused ATM\n\nclass ConfirmYourBidPasswordViewController: UIViewController {\n\n    @IBOutlet var bidDetailsPreviewView: BidDetailsPreviewView!\n\n    class func instantiateFromStoryboard(_ storyboard: UIStoryboard) -> ConfirmYourBidPasswordViewController {\n        return storyboard.viewController(withID: .ConfirmYourBid) as! ConfirmYourBidPasswordViewController\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        bidDetailsPreviewView.bidDetails = fulfillmentNav().bidDetails\n    }\n\n    @IBAction func dev_noPhoneNumberFoundTapped(_ sender: AnyObject) {\n\n    }\n\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/ConfirmYourBidViewController.swift",
    "content": "import UIKit\nimport ECPhoneNumberFormatter\nimport Moya\nimport RxSwift\nimport Action\n\nclass ConfirmYourBidViewController: UIViewController {\n\n    fileprivate var _number = Variable(\"\")\n    let phoneNumberFormatter = ECPhoneNumberFormatter()\n\n    @IBOutlet var bidDetailsPreviewView: BidDetailsPreviewView!\n    @IBOutlet var numberAmountTextField: TextField!\n    @IBOutlet var cursor: CursorView!\n    @IBOutlet var keypadContainer: KeypadContainerView!\n    @IBOutlet var enterButton: UIButton!\n    @IBOutlet var useArtsyLoginButton: UIButton!\n\n    fileprivate let _viewWillDisappear = PublishSubject<Void>()\n    var viewWillDisappear: Observable<Void> {\n        return self._viewWillDisappear.asObserver()\n    }\n\n    // Need takeUntil because we bind this observable eventually to bidDetails, making us stick around longer than we should!\n    lazy var number: Observable<String> = { self.keypadContainer.stringValue.takeUntil(self.viewWillDisappear) }()\n\n    var provider: Networking!\n\n    class func instantiateFromStoryboard(_ storyboard: UIStoryboard) -> ConfirmYourBidViewController {\n        return storyboard.viewController(withID: .ConfirmYourBid) as! ConfirmYourBidViewController\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        let titleString = useArtsyLoginButton.title(for: useArtsyLoginButton.state)!\n        let attributes = [NSUnderlineStyleAttributeName: NSUnderlineStyle.styleSingle.rawValue,\n            NSFontAttributeName: useArtsyLoginButton.titleLabel!.font] as [String : Any]\n        let attrTitle = NSAttributedString(string: titleString, attributes:attributes)\n        useArtsyLoginButton.setAttributedTitle(attrTitle, for:useArtsyLoginButton.state)\n\n        number\n            .bindTo(_number)\n            .addDisposableTo(rx_disposeBag)\n\n        number\n            .map(toPhoneNumberString)\n            .bindTo(numberAmountTextField.rx.text)\n            .addDisposableTo(rx_disposeBag)\n\n        let nav = self.fulfillmentNav()\n\n        bidDetailsPreviewView.bidDetails = nav.bidDetails\n\n        let optionalNumber = number.mapToOptional()\n\n        // We don't know if it's a paddle number or a phone number yet, so bind both ¯\\_(ツ)_/¯\n        [nav.bidDetails.paddleNumber, nav.bidDetails.newUser.phoneNumber].forEach { variable in\n            optionalNumber\n                .bindTo(variable)\n                .addDisposableTo(rx_disposeBag)\n        }\n\n        // Does a bidder exist for this phone number?\n        //   if so forward to PIN input VC\n        //   else send to enter email\n\n        let auctionID = nav.auctionID ?? \"\"\n\n        let numberIsZeroLength = number.map(isZeroLength)\n\n        enterButton.rx.action = CocoaAction(enabledIf: numberIsZeroLength.not(), workFactory: { [weak self] _ in\n            guard let me = self else { return .empty() }\n\n            let endpoint = ArtsyAPI.findBidderRegistration(auctionID: auctionID, phone: String(me._number.value))\n\n            return me.provider.request(endpoint)\n                .filterStatusCode(400)\n                .map(void)\n                .doOnError { error in\n                    guard let me = self else { return }\n\n                    // Due to AlamoFire restrictions we can't stop HTTP redirects\n                    // so to figure out if we got 302'd we have to introspect the\n                    // error to see if it's the original URL to know if the\n                    // request succeeded.\n\n                    var response: Moya.Response?\n\n                    if case .statusCode(let receivedResponse)? = error as? Moya.Error {\n                        response = receivedResponse\n                    }\n\n                    if let responseURL = response?.response?.url?.absoluteString, responseURL.contains(\"v1/bidder/\") {\n\n                        me.performSegue(.ConfirmyourBidBidderFound)\n                    } else {\n                        me.performSegue(.ConfirmyourBidBidderNotFound)\n                    }\n                }\n\n        })\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n\n        _viewWillDisappear.onNext()\n    }\n\n    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n        if segue == .ConfirmyourBidBidderFound {\n            let nextViewController = segue.destination as! ConfirmYourBidPINViewController\n            nextViewController.provider = provider\n        } else if segue == .ConfirmyourBidBidderNotFound {\n            let viewController = segue.destination as! ConfirmYourBidEnterYourEmailViewController\n            viewController.provider = provider\n        } else if segue == .ConfirmyourBidArtsyLogin {\n            let viewController = segue.destination as! ConfirmYourBidArtsyLoginViewController\n            viewController.provider = provider\n        } else if segue == .ConfirmyourBidBidderFound {\n            let viewController = segue.destination as! ConfirmYourBidPINViewController\n            viewController.provider = provider\n        }\n    }\n\n    func toOpeningBidString(_ cents: AnyObject!) -> AnyObject! {\n        if let dollars = NumberFormatter.currencyString(forDollarCents: cents as? Int as NSNumber!) {\n            return \"Enter \\(dollars) or more\" as AnyObject!\n        }\n        return \"\" as AnyObject!\n    }\n\n    func toPhoneNumberString(_ number: String) -> String {\n        if number.count >= 7 {\n            return phoneNumberFormatter.string(for: number) ?? number\n        } else {\n            return number\n        }\n    }\n}\n\nprivate extension ConfirmYourBidViewController {\n\n    @IBAction func dev_noPhoneNumberFoundTapped(_ sender: AnyObject) {\n        self.performSegue(.ConfirmyourBidArtsyLogin )\n    }\n\n    @IBAction func dev_phoneNumberFoundTapped(_ sender: AnyObject) {\n        self.performSegue(.ConfirmyourBidBidderFound)\n    }\n\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/FulfillmentContainerViewController.swift",
    "content": "import UIKit\n\nclass FulfillmentContainerViewController: UIViewController {\n    var allowAnimations = true\n\n    @IBOutlet var cancelButton: UIButton!\n    @IBOutlet var contentView: UIView!\n    @IBOutlet var backgroundView: UIView!\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        modalPresentationStyle = UIModalPresentationStyle.overCurrentContext\n\n        contentView.alpha = 0\n        backgroundView.alpha = 0\n        cancelButton.alpha = 0\n    }\n\n    // We force viewDidAppear to access the PlaceBidViewController\n    // so this allow animations in the modal\n\n    // This is mostly a placeholder for a more complex animation in the future\n\n    func viewDidAppearAnimation(_ animated: Bool) {\n        self.contentView.frame = self.contentView.frame.offsetBy(dx: 0, dy: 100)\n        UIView.animateTwoStepIf(animated, duration: 0.3, {\n            self.backgroundView.alpha = 1\n\n        }, midway: {\n            self.contentView.alpha = 1\n            self.cancelButton.alpha = 1\n            self.contentView.frame = self.contentView.frame.offsetBy(dx: 0, dy: -100)\n        }) { (complete) in\n\n        }\n    }\n\n    @IBAction func closeModalTapped(_ sender: AnyObject) {\n        closeFulfillmentModal()\n    }\n\n    func closeFulfillmentModal(completion: (() -> ())? = nil) -> Void {\n        UIView.animateIf(allowAnimations, duration: 0.4, {\n            self.contentView.alpha = 0\n            self.backgroundView.alpha = 0\n            self.cancelButton.alpha = 0\n\n            }) { (completed: Bool) in\n                let presentingVC = self.presentingViewController!\n                presentingVC.dismiss(animated: false, completion: nil)\n                completion?()\n        }\n    }\n\n    func internalNavigationController() -> FulfillmentNavigationController? {\n\n        self.loadViewProgrammatically()\n        return self.childViewControllers.first as? FulfillmentNavigationController\n    }\n\n    class func instantiateFromStoryboard(_ storyboard: UIStoryboard) -> FulfillmentContainerViewController {\n        return storyboard.viewController(withID: .FulfillmentContainer) as! FulfillmentContainerViewController\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/FulfillmentNavigationController.swift",
    "content": "import UIKit\nimport Moya\nimport RxSwift\n\n// We abstract this out so that we don't have network models, etc, aware of the view controller.\n// This is a \"source of truth\" that should be referenced in lieu of many independent variables. \nprotocol FulfillmentController: AnyObject {\n    var bidDetails: BidDetails { get set }\n    var auctionID: String! { get set }\n}\n\nclass FulfillmentNavigationController: UINavigationController, FulfillmentController {\n\n    // MARK: - FulfillmentController bits\n\n    /// The the collection of details necessary to eventually create a bid\n    lazy var bidDetails: BidDetails = {\n        return BidDetails(saleArtwork:nil, paddleNumber: nil, bidderPIN: nil, bidAmountCents:nil, auctionID: self.auctionID)\n    }()\n    var auctionID: String!\n    var user: User!\n\n    var provider: Networking!\n\n    // MARK: - Everything else\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        self.delegate = self\n    }\n\n    func reset() {\n        let storage = HTTPCookieStorage.shared\n        let cookies = storage.cookies\n        cookies?.forEach { storage.deleteCookie($0) }\n    }\n\n    func updateUserCredentials(loggedInProvider: AuthorizedNetworking) -> Observable<Void> {\n        let endpoint = ArtsyAuthenticatedAPI.me\n        let request = loggedInProvider.request(endpoint).filterSuccessfulStatusCodes().mapJSON().mapTo(object: User.self)\n\n        return request\n            .doOnNext { [weak self] fullUser in\n                guard let me = self else { return }\n\n                me.user = fullUser\n\n                let newUser = me.bidDetails.newUser\n\n                newUser.email.value = me.user.email\n                newUser.phoneNumber.value = me.user.phoneNumber\n                newUser.zipCode.value = me.user.location?.postalCode\n                newUser.name.value = me.user.name\n            }\n            .logError(prefix: \"error, the authentication for admin is likely wrong: \")\n            .map(void)\n    }\n}\n\nextension FulfillmentNavigationController: UINavigationControllerDelegate {\n    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {\n        guard let viewController = viewController as? PlaceBidViewController else { return }\n\n        viewController.provider = provider\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/GenericFormValidationViewModel.swift",
    "content": "import Foundation\nimport RxSwift\nimport Action\n\nclass GenericFormValidationViewModel {\n    let command: CocoaAction\n    let disposeBag = DisposeBag()\n\n    init(isValid: Observable<Bool>, manualInvocation: Observable<Void>, finishedSubject: PublishSubject<Void>) {\n\n        command = CocoaAction(enabledIf: isValid) { _ in\n            return Observable.create { observer in\n\n                finishedSubject.onCompleted()\n                observer.onCompleted()\n\n                return Disposables.create()\n            }\n        }\n\n        manualInvocation\n            .subscribe(onNext: { [weak self] _ in\n                self?.command.execute()\n            })\n            .addDisposableTo(disposeBag)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/KeypadContainerView.swift",
    "content": "import UIKit\nimport Foundation\nimport RxSwift\nimport Action\nimport FLKAutoLayout\n\n//@IBDesignable\nclass KeypadContainerView: UIView {\n    fileprivate var keypad: KeypadView!\n    fileprivate let viewModel = KeypadViewModel()\n\n    var stringValue: Observable<String>!\n    var intValue: Observable<Int>!\n    var deleteAction: CocoaAction!\n    var resetAction: CocoaAction!\n\n    override func prepareForInterfaceBuilder() {\n        for subview in subviews { subview.removeFromSuperview() }\n\n        let bundle = Bundle(for: type(of: self))\n        let image  = UIImage(named: \"KeypadViewPreviewIB\", in: bundle, compatibleWith: self.traitCollection)\n        let imageView = UIImageView(frame: self.bounds)\n        imageView.image = image\n\n        self.addSubview(imageView)\n    }\n\n    override func awakeFromNib() {\n        super.awakeFromNib()\n\n        keypad = Bundle(for: type(of: self)).loadNibNamed(\"KeypadView\", owner: self, options: nil)?.first as? KeypadView\n        keypad.leftAction = viewModel.deleteAction\n        keypad.rightAction = viewModel.clearAction\n        keypad.keyAction = viewModel.addDigitAction\n\n        intValue = viewModel.intValue.asObservable()\n        stringValue = viewModel.stringValue.asObservable()\n        deleteAction = viewModel.deleteAction\n        resetAction = viewModel.clearAction\n\n        self.addSubview(keypad)\n\n        keypad.align(to: self)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/KeypadView.swift",
    "content": "import UIKit\nimport RxSwift\nimport Action\n\nclass KeypadView: UIView {\n    var leftAction: CocoaAction? {\n        didSet {\n            self.leftButton.rx.action = leftAction\n        }\n    }\n    var rightAction: CocoaAction? {\n        didSet {\n            self.rightButton.rx.action = rightAction\n        }\n    }\n\n    var keyAction: Action<Int, Void>?\n\n    @IBOutlet fileprivate var keys: [Button]!\n    @IBOutlet fileprivate var leftButton: Button!\n    @IBOutlet fileprivate var rightButton: Button!\n\n    @IBAction func keypadButtonTapped(_ sender: UIButton) {\n        keyAction?.execute(sender.tag)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/KeypadViewModel.swift",
    "content": "import Foundation\nimport Action\nimport RxSwift\n\nlet KeypadViewModelMaxIntegerValue = 10_000_000\n\nclass KeypadViewModel: NSObject {\n\n    //MARK: - Variables\n\n    lazy var intValue = Variable(0)\n\n    lazy var stringValue = Variable(\"\")\n\n    // MARK: - Actions\n\n    lazy var deleteAction: CocoaAction = {\n        return CocoaAction { [weak self] _ in\n            self?.delete() ?? .empty()\n        }\n    }()\n\n    lazy var clearAction: CocoaAction = {\n        return CocoaAction { [weak self] _ in\n            self?.clear() ?? .empty()\n        }\n    }()\n\n    lazy var addDigitAction: Action<Int, Void> = {\n        let localSelf = self\n        return Action<Int, Void> { [weak localSelf] input in\n            return localSelf?.addDigit(input) ?? .empty()\n        }\n    }()\n}\n\nprivate extension KeypadViewModel {\n    func delete() -> Observable<Void> {\n        return Observable.create { [weak self] observer in\n            if let strongSelf = self {\n                strongSelf.intValue.value = Int(strongSelf.intValue.value / 10)\n                if strongSelf.stringValue.value.isNotEmpty {\n                    let string = strongSelf.stringValue.value\n                    strongSelf.stringValue.value = string.substring(to: string.index(before: string.endIndex))\n                }\n            }\n            observer.onCompleted()\n            return Disposables.create()\n        }\n    }\n\n    func clear() -> Observable<Void> {\n        return Observable.create { [weak self] observer in\n            self?.intValue.value = 0\n            self?.stringValue.value = \"\"\n            observer.onCompleted()\n            return Disposables.create()\n        }\n    }\n\n    func addDigit(_ input: Int) -> Observable<Void> {\n        return Observable.create { [weak self] observer in\n            if let strongSelf = self {\n                let newValue = (10 * strongSelf.intValue.value) + input\n                if (newValue < KeypadViewModelMaxIntegerValue) {\n                    strongSelf.intValue.value = newValue\n                }\n                strongSelf.stringValue.value = \"\\(strongSelf.stringValue.value)\\(input)\"\n            }\n            observer.onCompleted()\n            return Disposables.create()\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/LoadingViewController.swift",
    "content": "import UIKit\nimport Artsy_UILabels\nimport ARAnalytics\nimport RxSwift\n\nclass LoadingViewController: UIViewController {\n\n    var provider: Networking!\n\n    @IBOutlet weak var titleLabel: ARSerifLabel!\n    @IBOutlet var bidDetailsPreviewView: BidDetailsPreviewView!\n\n    @IBOutlet weak var statusMessage: ARSerifLabel!\n    @IBOutlet weak var spinner: Spinner!\n    @IBOutlet weak var bidConfirmationImageView: UIImageView!\n\n    var placingBid = true\n\n    var animate = true\n\n    @IBOutlet weak var backToAuctionButton: SecondaryActionButton!\n    @IBOutlet weak var placeHigherBidButton: ActionButton!\n\n    fileprivate let _viewWillDisappear = PublishSubject<Void>()\n    var viewWillDisappear: Observable<Void> {\n        return self._viewWillDisappear.asObserver()\n    }\n\n    lazy var viewModel: LoadingViewModelType = {\n        return LoadingViewModel(\n            provider: self.provider,\n            bidNetworkModel: BidderNetworkModel(provider: self.provider, bidDetails: self.fulfillmentNav().bidDetails),\n            placingBid: self.placingBid,\n            actionsComplete: self.viewWillDisappear\n        )\n    }()\n\n    lazy var recognizer = UITapGestureRecognizer()\n    lazy var closeSelf: () -> Void = { [weak self] in\n        self?.fulfillmentContainer()?.closeFulfillmentModal()\n        return\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        if placingBid {\n            bidDetailsPreviewView.bidDetails = viewModel.bidDetails\n        } else {\n            bidDetailsPreviewView.isHidden = true\n        }\n\n        statusMessage.isHidden = true\n        backToAuctionButton.isHidden = true\n        placeHigherBidButton.isHidden = true\n\n        spinner.animate(animate)\n\n        titleLabel.text = placingBid ? \"Placing bid...\" : \"Registering...\"\n\n        // Either finishUp() or bidderError() are responsible for providing a way back to the auction.\n        fulfillmentContainer()?.cancelButton.isHidden = true\n\n        // The view model will perform actions like registering a user if necessary,\n        // placing a bid if requested, and polling for results.\n        viewModel.performActions().subscribe(onNext: nil,\n            onError: { [weak self] error in\n                logger.log(\"Bidder error \\(error)\")\n                self?.bidderError(error as NSError)\n            },\n            onCompleted: { [weak self] in\n                logger.log(\"Bid placement and polling completed\")\n                self?.finishUp()\n            },\n            onDisposed: { [weak self] in\n                // Regardless of error or completion. hide the spinner.\n                self?.spinner.isHidden = true\n            })\n            .addDisposableTo(rx_disposeBag)\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n        _viewWillDisappear.onNext()\n    }\n\n    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n        if segue == .PushtoRegisterConfirmed {\n            let detailsVC = segue.destination as! YourBiddingDetailsViewController\n            detailsVC.confirmationImage = bidConfirmationImageView.image\n            detailsVC.provider = provider\n        }\n\n        if segue == .PlaceaHigherBidAfterNotBeingHighestBidder {\n            let placeBidVC = segue.destination as! PlaceBidViewController\n            placeBidVC.hasAlreadyPlacedABid = true\n            placeBidVC.provider = provider\n        }\n    }\n}\n\nextension LoadingViewController {\n\n    func finishUp() {\n        let reserveNotMet = viewModel.reserveNotMet.value\n        let isHighestBidder = viewModel.isHighestBidder.value\n        let bidIsResolved = viewModel.bidIsResolved.value\n        let createdNewBidder = viewModel.createdNewBidder.value\n\n        logger.log(\"Bidding process result: reserveNotMet \\(reserveNotMet), isHighestBidder \\(isHighestBidder), bidIsResolved \\(bidIsResolved), createdNewbidder \\(createdNewBidder)\")\n\n        if placingBid {\n            ARAnalytics.event(\"Placed a bid\", withProperties: [\"top_bidder\" : isHighestBidder, \"sale_artwork\": viewModel.bidDetails.saleArtwork?.artwork.id ?? \"\"])\n\n            if bidIsResolved {\n\n                if reserveNotMet {\n                    handleReserveNotMet()\n                } else if isHighestBidder {\n                    handleHighestBidder()\n                } else {\n                    handleLowestBidder()\n                }\n\n            } else {\n                handleUnknownBidder()\n            }\n\n        } else { // Not placing bid\n            if createdNewBidder { // Creating new user\n                handleRegistered()\n            } else { // Updating existing user\n                handleUpdate()\n            }\n        }\n\n        let showPlaceHigherButton = placingBid && (!isHighestBidder || reserveNotMet)\n        placeHigherBidButton.isHidden = !showPlaceHigherButton\n\n        let showAuctionButton = showPlaceHigherButton || isHighestBidder || (!placingBid && !createdNewBidder)\n        backToAuctionButton.isHidden = !showAuctionButton\n\n        let title = reserveNotMet ? \"NO, THANKS\" : (createdNewBidder ? \"CONTINUE\" : \"BACK TO AUCTION\")\n        backToAuctionButton.setTitle(title, for: .normal)\n        fulfillmentContainer()?.cancelButton.isHidden = false\n    }\n\n    func handleRegistered() {\n        titleLabel.text = \"Registration Complete\"\n        bidConfirmationImageView.image = UIImage(named: \"BidHighestBidder\")\n        fulfillmentContainer()?.cancelButton.setTitle(\"DONE\", for: .normal)\n        Observable<Int>.interval(1, scheduler: MainScheduler.instance)\n            .take(1)\n            .subscribe(onCompleted: { [weak self] in\n                self?.performSegue(.PushtoRegisterConfirmed)\n            })\n            .addDisposableTo(rx_disposeBag)\n    }\n\n    func handleUpdate() {\n        titleLabel.text = \"Updated your Information\"\n        bidConfirmationImageView.image = UIImage(named: \"BidHighestBidder\")\n        fulfillmentContainer()?.cancelButton.setTitle(\"DONE\", for: .normal)\n    }\n\n    func handleUnknownBidder() {\n        titleLabel.text = \"Bid Submitted\"\n        bidConfirmationImageView.image = UIImage(named: \"BidHighestBidder\")\n    }\n\n    func handleReserveNotMet() {\n        titleLabel.text = \"Reserve Not Met\"\n        statusMessage.isHidden = false\n        statusMessage.text = \"Your bid is still below this lot's reserve. Please place a higher bid.\"\n        bidConfirmationImageView.image = UIImage(named: \"BidNotHighestBidder\")\n    }\n\n    func handleHighestBidder() {\n        titleLabel.text = \"High Bid!\"\n        statusMessage.isHidden = false\n        statusMessage.text = \"You are the high bidder for this lot.\"\n        bidConfirmationImageView.image = UIImage(named: \"BidHighestBidder\")\n\n        recognizer.rx.event.subscribe(onNext: { [weak self] _ in\n            self?.closeSelf()\n        }).addDisposableTo(rx_disposeBag)\n\n        bidConfirmationImageView.isUserInteractionEnabled = true\n        bidConfirmationImageView.addGestureRecognizer(recognizer)\n\n        fulfillmentContainer()?.cancelButton.setTitle(\"DONE\", for: .normal)\n    }\n\n    func handleLowestBidder() {\n        titleLabel.text = \"Higher bid needed\"\n\n        titleLabel.textColor = .artsyRedRegular()\n        statusMessage.isHidden = false\n        statusMessage.text = \"Another bidder has placed a higher maximum bid. Place a higher bid to secure the lot.\"\n        bidConfirmationImageView.image = UIImage(named: \"BidNotHighestBidder\")\n        placeHigherBidButton.isHidden = false\n    }\n\n    // MARK: - Error Handling\n\n    func bidderError(_ error: NSError) {\n        if placingBid {\n            // If you are bidding, we show a bidding error regardless of whether or not you're also registering.\n            if error.domain == OutbidDomain {\n                handleLowestBidder()\n            } else {\n                bidPlacementFailed(error: error)\n            }\n        } else {\n            // If you're not placing a bid, you're here because you're .just registering.\n            handleRegistrationFailed(error: error)\n        }\n    }\n\n    func handleRegistrationFailed(error: NSError) {\n        handleError(withTitle: \"Registration Failed\",\n            message: \"There was a problem registering for the auction. Please speak to an Artsy representative.\",\n            error: error)\n    }\n\n    func bidPlacementFailed(error: NSError) {\n        handleError(withTitle: \"Bid Failed\",\n            message: \"There was a problem placing your bid. Please speak to an Artsy representative.\",\n            error: error)\n    }\n\n    func handleError(withTitle title: String, message: String, error: NSError) {\n        titleLabel.textColor = .artsyRedRegular()\n        titleLabel.text = title\n        statusMessage.text = message\n        statusMessage.isHidden = false\n        backToAuctionButton.isHidden = false\n\n        statusMessage.presentOnLongPress(\"Error: \\(error.localizedDescription). \\n \\(error.artsyServerError())\", title: title) { [weak self] alertController in\n            self?.present(alertController, animated: true, completion: nil)\n        }\n    }\n\n    @IBAction func placeHigherBidTapped(_ sender: AnyObject) {\n        self.fulfillmentNav().bidDetails.bidAmountCents.value = 0\n        self.performSegue(.PlaceaHigherBidAfterNotBeingHighestBidder)\n    }\n\n    @IBAction func backToAuctionTapped(_ sender: AnyObject) {\n        if viewModel.createdNewBidder.value {\n            self.performSegue(.PushtoRegisterConfirmed)\n        } else {\n            closeSelf()\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/LoadingViewModel.swift",
    "content": "import Foundation\nimport ARAnalytics\nimport RxSwift\n\nprotocol LoadingViewModelType {\n\n    var createdNewBidder: Variable<Bool> { get }\n    var bidIsResolved: Variable<Bool> { get }\n    var isHighestBidder: Variable<Bool> { get }\n    var reserveNotMet: Variable<Bool> { get }\n    var bidDetails: BidDetails { get }\n\n    func performActions() -> Observable<Void>\n}\n\n/// Encapsulates activities of the LoadingViewController.\nclass LoadingViewModel: NSObject, LoadingViewModelType {\n    let placingBid: Bool\n    let bidderNetworkModel: BidderNetworkModelType\n\n    lazy var placeBidNetworkModel: PlaceBidNetworkModelType = {\n        return PlaceBidNetworkModel(bidDetails: self.bidderNetworkModel.bidDetails)\n    }()\n    lazy var bidCheckingModel: BidCheckingNetworkModelType = {\n        return BidCheckingNetworkModel(provider: self.provider, bidDetails: self.bidderNetworkModel.bidDetails)\n    }()\n\n    let provider: Networking\n    let createdNewBidder = Variable(false)\n    let bidIsResolved = Variable(false)\n    let isHighestBidder = Variable(false)\n    let reserveNotMet = Variable(false)\n\n    var bidDetails: BidDetails {\n        return bidderNetworkModel.bidDetails\n    }\n\n    init(provider: Networking, bidNetworkModel: BidderNetworkModelType, placingBid: Bool, actionsComplete: Observable<Void>) {\n        self.provider = provider\n        self.bidderNetworkModel = bidNetworkModel\n        self.placingBid = placingBid\n\n        super.init()\n\n        // Set up bindings.\n        [\n            (bidderNetworkModel.createdNewUser, createdNewBidder),\n            (bidCheckingModel.bidIsResolved.asObservable(), bidIsResolved),\n            (bidCheckingModel.isHighestBidder.asObservable(), isHighestBidder),\n            (bidCheckingModel.reserveNotMet.asObservable(), reserveNotMet)\n        ].forEach { pair in\n            pair.0\n                .takeUntil(actionsComplete)\n                .bindTo(pair.1)\n                .addDisposableTo(rx_disposeBag)\n        }\n    }\n\n    /// Encapsulates essential activities of the LoadingViewController, including:\n    /// - Registering new users\n    /// - Placing bids for users\n    /// - Polling for bid results\n    func performActions() -> Observable<Void> {\n        return bidderNetworkModel\n            .createOrGetBidder()\n            .flatMap { [weak self] provider -> Observable<(String, AuthorizedNetworking)> in\n                guard let me = self else { return .empty() }\n                guard me.placingBid else {\n                    ARAnalytics.event(\"Registered New User Only\")\n                    // Skipping all further actions, since we're not placing a bid.\n                    return .empty()\n                }\n\n                ARAnalytics.event(\"Started Placing Bid\", withProperties: [\"id\": me.bidDetails.saleArtwork?.artwork.id ?? \"\"])\n\n                return me\n                    .placeBidNetworkModel\n                    .bid(provider)\n                    .map { return ($0, provider) }\n            }\n            .flatMap { [weak self] tuple -> Observable<Void> in\n                guard let me = self else { return .empty() }\n                guard me.placingBid else { return .empty() }\n\n                return me.bidCheckingModel.waitForBidResolution(bidderPositionId: tuple.0, provider: tuple.1).map(void)\n            }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/ManualCreditCardInputViewController.swift",
    "content": "import UIKit\nimport RxSwift\nimport Keys\n\nclass ManualCreditCardInputViewController: UIViewController, RegistrationSubController {\n    let finished = PublishSubject<Void>()\n\n    @IBOutlet weak var cardNumberTextField: TextField!\n    @IBOutlet weak var expirationMonthTextField: TextField!\n    @IBOutlet weak var expirationYearTextField: TextField!\n    @IBOutlet weak var securitycodeTextField: TextField!\n    @IBOutlet weak var billingZipTextField: TextField!\n\n    @IBOutlet weak var cardNumberWrapperView: UIView!\n    @IBOutlet weak var expirationDateWrapperView: UIView!\n    @IBOutlet weak var securityCodeWrapperView: UIView!\n    @IBOutlet weak var billingZipWrapperView: UIView!\n    @IBOutlet weak var billingZipErrorLabel: UILabel!\n\n    @IBOutlet weak var cardConfirmButton: ActionButton!\n    @IBOutlet weak var dateConfirmButton: ActionButton!\n    @IBOutlet weak var securityCodeConfirmButton: ActionButton!\n    @IBOutlet weak var billingZipConfirmButton: ActionButton!\n\n    lazy var keys = EidolonKeys()\n\n    lazy var viewModel: ManualCreditCardInputViewModel = {\n        var bidDetails = self.navigationController?.fulfillmentNav().bidDetails\n        return ManualCreditCardInputViewModel(bidDetails: bidDetails, finishedSubject: self.finished)\n    }()\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        expirationDateWrapperView.isHidden = true\n        securityCodeWrapperView.isHidden = true\n        billingZipWrapperView.isHidden = true\n\n        // We show the enter credit card number, then the date switching the views around\n        viewModel\n            .cardFullDigits\n            .asObservable()\n            .bindTo(cardNumberTextField.rx.text)\n            .addDisposableTo(rx_disposeBag)\n\n        viewModel\n            .expirationYear\n            .asObservable()\n            .bindTo(expirationYearTextField.rx.text)\n            .addDisposableTo(rx_disposeBag)\n\n        viewModel\n            .expirationMonth\n            .asObservable()\n            .bindTo(expirationMonthTextField.rx.text)\n            .addDisposableTo(rx_disposeBag)\n\n        viewModel\n            .securityCode\n            .asObservable()\n            .bindTo(securitycodeTextField.rx.text)\n            .addDisposableTo(rx_disposeBag)\n\n        viewModel\n            .billingZip\n            .asObservable()\n            .bindTo(billingZipTextField.rx.text)\n            .addDisposableTo(rx_disposeBag)\n\n        viewModel\n            .creditCardNumberIsValid\n            .bindTo(cardConfirmButton.rx.isEnabled)\n            .addDisposableTo(rx_disposeBag)\n\n        let action = viewModel.registerButtonCommand()\n        billingZipConfirmButton.rx.action = action\n\n        action\n            .errors // Based on errors\n            .take(1) // On the first error, then forever\n            .mapReplace(with: false) // Replace the error with false\n            .startWith(true) // But begin with true\n            .bindTo(billingZipErrorLabel.rx_hidden) // show the error label\n            .addDisposableTo(rx_disposeBag)\n\n        viewModel.moveToYear.take(1).subscribe(onNext: { [weak self] _ in\n            self?.expirationYearTextField.becomeFirstResponder()\n        }).addDisposableTo(rx_disposeBag)\n\n        cardNumberTextField.becomeFirstResponder()\n    }\n\n    func textField(_ textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {\n        return viewModel.isEntryValid(string)\n    }\n\n    @IBAction func cardNumberconfirmTapped(_ sender: AnyObject) {\n        cardNumberWrapperView.isHidden = true\n        expirationDateWrapperView.isHidden = false\n        securityCodeWrapperView.isHidden = true\n        billingZipWrapperView.isHidden = true\n\n        expirationDateWrapperView.frame = CGRect(x: 0, y: 0, width: expirationDateWrapperView.frame.width, height: expirationDateWrapperView.frame.height)\n\n        expirationMonthTextField.becomeFirstResponder()\n    }\n\n    @IBAction func expirationDateConfirmTapped(_ sender: AnyObject) {\n        cardNumberWrapperView.isHidden = true\n        expirationDateWrapperView.isHidden = true\n        securityCodeWrapperView.isHidden = false\n        billingZipWrapperView.isHidden = true\n\n        securityCodeWrapperView.frame = CGRect(x: 0, y: 0, width: securityCodeWrapperView.frame.width, height: securityCodeWrapperView.frame.height)\n\n        securitycodeTextField.becomeFirstResponder()\n    }\n\n    @IBAction func securityCodeConfirmTapped(_ sender: AnyObject) {\n        cardNumberWrapperView.isHidden = true\n        expirationDateWrapperView.isHidden = true\n        securityCodeWrapperView.isHidden = true\n        billingZipWrapperView.isHidden = false\n\n        billingZipWrapperView.frame = CGRect(x: 0, y: 0, width: billingZipWrapperView.frame.width, height: billingZipWrapperView.frame.height)\n\n        billingZipTextField.becomeFirstResponder()\n    }\n\n    @IBAction func backToCardNumber(_ sender: AnyObject) {\n        cardNumberWrapperView.isHidden = false\n        expirationDateWrapperView.isHidden = true\n        securityCodeWrapperView.isHidden = true\n        billingZipWrapperView.isHidden = true\n\n        cardNumberTextField.becomeFirstResponder()\n    }\n\n    @IBAction func backToExpirationDate(_ sender: AnyObject) {\n        cardNumberWrapperView.isHidden = true\n        expirationDateWrapperView.isHidden = false\n        securityCodeWrapperView.isHidden = true\n        billingZipWrapperView.isHidden = true\n\n        expirationMonthTextField.becomeFirstResponder()\n    }\n\n    @IBAction func backToSecurityCode(_ sender: AnyObject) {\n        cardNumberWrapperView.isHidden = true\n        expirationDateWrapperView.isHidden = true\n        securityCodeWrapperView.isHidden = false\n        billingZipWrapperView.isHidden = true\n\n        securitycodeTextField.becomeFirstResponder()\n    }\n\n    class func instantiateFromStoryboard(_ storyboard: UIStoryboard) -> ManualCreditCardInputViewController {\n        return storyboard.viewController(withID: .ManualCardDetailsInput) as! ManualCreditCardInputViewController\n    }\n}\n\nprivate extension ManualCreditCardInputViewController {\n    func applyCardWithSuccess(_ success: Bool) {\n        cardNumberTextField.text = success ? \"4242424242424242\" : \"4000000000000002\"\n        cardNumberTextField.sendActions(for: .allEditingEvents)\n        cardConfirmButton.sendActions(for: .touchUpInside)\n\n        expirationMonthTextField.text = \"04\"\n        expirationMonthTextField.sendActions(for: .allEditingEvents)\n        expirationYearTextField.text = \"2018\"\n        expirationYearTextField.sendActions(for: .allEditingEvents)\n        dateConfirmButton.sendActions(for: .touchUpInside)\n\n        securitycodeTextField.text = \"123\"\n        securitycodeTextField.sendActions(for: .allEditingEvents)\n        securityCodeConfirmButton.sendActions(for: .touchUpInside)\n\n        billingZipTextField.text = \"10001\"\n        billingZipTextField.sendActions(for: .allEditingEvents)\n        billingZipTextField.sendActions(for: .touchUpInside)\n    }\n\n    @IBAction func dev_creditCardOKTapped(_ sender: AnyObject) {\n        applyCardWithSuccess(true)\n    }\n\n    @IBAction func dev_creditCardFailTapped(_ sender: AnyObject) {\n        applyCardWithSuccess(false)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/ManualCreditCardInputViewModel.swift",
    "content": "import Foundation\nimport RxSwift\nimport Action\nimport Stripe\n\nclass ManualCreditCardInputViewModel: NSObject {\n\n    /// MARK: - Things the user is entering (expecting to be bound to s)\n\n    var cardFullDigits = Variable(\"\")\n    var expirationMonth = Variable(\"\")\n    var expirationYear = Variable(\"\")\n    var securityCode = Variable(\"\")\n    var billingZip = Variable(\"\")\n\n    fileprivate(set) var bidDetails: BidDetails!\n    fileprivate(set) var finishedSubject: PublishSubject<Void>?\n\n    /// Mark: - Public members\n\n    init(bidDetails: BidDetails!, finishedSubject: PublishSubject<Void>? = nil) {\n        super.init()\n\n        self.bidDetails = bidDetails\n        self.finishedSubject = finishedSubject\n    }\n\n    var creditCardNumberIsValid: Observable<Bool> {\n        return cardFullDigits.asObservable().map(stripeManager.stringIsCreditCard)\n    }\n\n    var expiryDatesAreValid: Observable<Bool> {\n        let month = expirationMonth.asObservable().map(isStringLength(in: 1..<3))\n        let year = expirationYear.asObservable().map(isStringLength(oneOf: [2, 4]))\n\n        return [month, year].combineLatestAnd()\n    }\n\n    var securityCodeIsValid: Observable<Bool> {\n        return securityCode.asObservable().map(isStringLength(in: 3..<5))\n    }\n\n    var billingZipIsValid: Observable<Bool> {\n        return billingZip.asObservable().map(isStringLength(in: 4..<8))\n    }\n\n    var moveToYear: Observable<Void> {\n        return expirationMonth.asObservable().filter { value in\n            return value.count == 2\n        }.map(void)\n    }\n\n    func registerButtonCommand() -> CocoaAction {\n        let newUser = bidDetails.newUser\n        let enabled = [creditCardNumberIsValid, expiryDatesAreValid, securityCodeIsValid, billingZipIsValid].combineLatestAnd()\n\n        return CocoaAction(enabledIf: enabled) { [weak self] _ in\n            guard let me = self else {\n                return .empty()\n            }\n\n            return me.registerCard(newUser: newUser).doOnCompleted {\n                me.finishedSubject?.onCompleted()\n            }.map(void)\n        }\n\n    }\n\n    func isEntryValid(_ entry: String) -> Bool {\n        // Allow delete\n        if (entry.isEmpty) { return true }\n\n        // the API doesn't accept chars\n        let notNumberChars = CharacterSet.decimalDigits.inverted\n        return entry.trimmingCharacters(in: notNumberChars).isNotEmpty\n    }\n\n    /// MARK: - Private Methods\n\n    fileprivate func registerCard(newUser: NewUser) -> Observable<STPToken> {\n        let month = expirationMonth.value.toUInt(withDefault: 0)\n        let year = expirationYear.value.toUInt(withDefault: 0)\n\n        return stripeManager.registerCard(digits: cardFullDigits.value, month: month, year: year, securityCode: securityCode.value, postalCode: billingZip.value).doOnNext { token in\n\n            newUser.creditCardName.value = token.card.name\n            newUser.creditCardType.value = token.card.brand.name\n            newUser.creditCardToken.value = token.tokenId\n            newUser.creditCardDigit.value = token.card.last4\n        }\n    }\n\n    // Only set for testing purposes, otherwise ignore.\n    lazy var stripeManager: StripeManager = StripeManager()\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/Models/BidDetails.swift",
    "content": "import UIKit\nimport RxSwift\nimport Moya\n\n@objc class BidDetails: NSObject {\n    typealias DownloadImageClosure = (_ url: URL, _ imageView: UIImageView) -> ()\n\n    let auctionID: String\n\n    var newUser: NewUser = NewUser()\n    var saleArtwork: SaleArtwork?\n\n    var paddleNumber = Variable<String?>(nil)\n    var bidderPIN = Variable<String?>(nil)\n    var bidAmountCents = Variable<NSNumber?>(nil)\n    var bidderID = Variable<String?>(nil)\n\n    var setImage: DownloadImageClosure = { (url, imageView) -> () in\n        imageView.sd_setImage(with: url)\n    }\n\n    init(saleArtwork: SaleArtwork?, paddleNumber: String?, bidderPIN: String?, bidAmountCents: Int?, auctionID: String) {\n        self.auctionID = auctionID\n        self.saleArtwork = saleArtwork\n        self.paddleNumber.value = paddleNumber\n        self.bidderPIN.value = bidderPIN\n        self.bidAmountCents.value = bidAmountCents as NSNumber?\n    }\n\n    /// Creates a new authenticated networking provider based on either:\n    /// - User's paddle/phone # and PIN, or\n    /// - User's email and password\n    func authenticatedNetworking(provider: Networking) -> Observable<AuthorizedNetworking> {\n\n        let auctionID = saleArtwork?.auctionID ?? \"\"\n\n        if let number = paddleNumber.value, let pin = bidderPIN.value {\n            let newEndpointsClosure = { (target: ArtsyAuthenticatedAPI) -> Endpoint<ArtsyAuthenticatedAPI> in\n                // Grab existing endpoint to piggy-back off of any existing configurations being used by the sharedprovider.\n                let endpoint = Networking.endpointsClosure()(target)\n\n                return endpoint.adding(newParameters: [\"auction_pin\": pin, \"number\": number, \"sale_id\": auctionID])\n            }\n\n            let provider = OnlineProvider(endpointClosure: newEndpointsClosure, requestClosure: Networking.endpointResolver(), stubClosure: Networking.APIKeysBasedStubBehaviour, plugins: Networking.authenticatedPlugins)\n\n            return .just(AuthorizedNetworking(provider: provider))\n\n        } else {\n            let endpoint: ArtsyAPI = ArtsyAPI.xAuth(email: newUser.email.value ?? \"\", password: newUser.password.value ?? \"\")\n\n            return provider.request(endpoint)\n                .filterSuccessfulStatusCodes()\n                .mapJSON()\n                .flatMap { accessTokenDict -> Observable<AuthorizedNetworking> in\n                    guard let accessToken = (accessTokenDict as AnyObject)[\"access_token\"] as? String else {\n                        return Observable.error(EidolonError.couldNotParseJSON)\n                    }\n\n                    return .just(Networking.newAuthorizedNetworking(accessToken))\n                }\n                .logServerError(message: \"Getting Access Token failed.\")\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/Models/NewUser.swift",
    "content": "import RxSwift\n\nclass NewUser {\n    var email = Variable<String?>(nil)\n    var password = Variable<String?>(nil)\n    var phoneNumber = Variable<String?>(nil)\n    var creditCardDigit = Variable<String?>(nil)\n    var creditCardToken = Variable<String?>(nil)\n    var creditCardName = Variable<String?>(nil)\n    var creditCardType = Variable<String?>(nil)\n    var zipCode = Variable<String?>(nil)\n    var name = Variable<String?>(nil)\n\n    var hasBeenRegistered = Variable(false)\n\n    var swipedCreditCard = false\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/Models/RegistrationCoordinator.swift",
    "content": "import UIKit\nimport RxSwift\n\nenum RegistrationIndex {\n    case mobileVC\n    case emailVC\n    case passwordVC\n    case creditCardVC\n    case zipCodeVC\n    case confirmVC\n\n    func toInt() -> Int {\n        switch (self) {\n            case .mobileVC: return 0\n            case .emailVC: return 1\n            case .passwordVC: return 1\n            case .zipCodeVC: return 2\n            case .creditCardVC: return 3\n            case .confirmVC: return 4\n        }\n    }\n\n    static func fromInt(_ index: Int) -> RegistrationIndex {\n        switch (index) {\n            case 0: return .mobileVC\n            case 1: return .emailVC\n            case 1: return .passwordVC\n            case 2: return .zipCodeVC\n            case 3: return .creditCardVC\n            default : return .confirmVC\n        }\n    }\n}\n\nclass RegistrationCoordinator: NSObject {\n\n    let currentIndex = Variable(0)\n    var storyboard: UIStoryboard!\n\n    func viewControllerForIndex(_ index: RegistrationIndex) -> UIViewController {\n        currentIndex.value = index.toInt()\n\n        switch index {\n\n        case .mobileVC:\n            return storyboard.viewController(withID: .RegisterMobile)\n\n        case .emailVC:\n            return storyboard.viewController(withID: .RegisterEmail)\n\n        case .passwordVC:\n            return storyboard.viewController(withID: .RegisterPassword)\n\n        case .zipCodeVC:\n            return storyboard.viewController(withID: .RegisterPostalorZip)\n\n        case .creditCardVC:\n            if AppSetup.sharedState.disableCardReader {\n                return storyboard.viewController(withID: .ManualCardDetailsInput)\n            } else {\n                return storyboard.viewController(withID: .RegisterCreditCard)\n            }\n\n        case .confirmVC:\n            return storyboard.viewController(withID: .RegisterConfirm)\n        }\n    }\n\n    func nextViewControllerForBidDetails(_ details: BidDetails) -> UIViewController {\n        if notSet(details.newUser.phoneNumber.value) {\n            return viewControllerForIndex(.mobileVC)\n        }\n\n        if notSet(details.newUser.email.value) {\n            return viewControllerForIndex(.emailVC)\n        }\n\n        if notSet(details.newUser.password.value) {\n            return viewControllerForIndex(.passwordVC)\n        }\n\n        if notSet(details.newUser.zipCode.value) && AppSetup.sharedState.needsZipCode {\n            return viewControllerForIndex(.zipCodeVC)\n        }\n\n        if notSet(details.newUser.creditCardToken.value) {\n            return viewControllerForIndex(.creditCardVC)\n        }\n\n        return viewControllerForIndex(.confirmVC)\n    }\n}\n\nprivate func notSet(_ string: String?) -> Bool {\n    return string?.isEmpty ?? true\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/PlaceBidNetworkModel.swift",
    "content": "import Foundation\nimport RxSwift\nimport Moya\nimport SwiftyJSON\n\nlet OutbidDomain = \"Outbid\"\n\nprotocol PlaceBidNetworkModelType {\n    var bidDetails: BidDetails { get }\n\n    func bid(_ provider: AuthorizedNetworking) -> Observable<String>\n}\n\nclass PlaceBidNetworkModel: NSObject, PlaceBidNetworkModelType {\n\n    let bidDetails: BidDetails\n\n    init(bidDetails: BidDetails) {\n        self.bidDetails = bidDetails\n\n        super.init()\n    }\n\n    func bid(_ provider: AuthorizedNetworking) -> Observable<String> {\n        let saleArtwork = bidDetails.saleArtwork.value\n\n        assert(saleArtwork.hasValue, \"Sale artwork cannot nil at bidding stage.\")\n\n        let cents = (bidDetails.bidAmountCents.value as? Int) ?? 0\n        return bidOnSaleArtwork(saleArtwork!, bidAmountCents: String(cents), provider: provider)\n    }\n\n    fileprivate func bidOnSaleArtwork(_ saleArtwork: SaleArtwork, bidAmountCents: String, provider: AuthorizedNetworking) -> Observable<String> {\n        let bidEndpoint = ArtsyAuthenticatedAPI.placeABid(auctionID: saleArtwork.auctionID!, artworkID: saleArtwork.artwork.id, maxBidCents: bidAmountCents)\n\n        let request = provider\n            .request(bidEndpoint)\n            .filterSuccessfulStatusCodes()\n            .mapJSON()\n            .mapTo(object: BidderPosition.self)\n\n        return request\n            .map { position in\n                return position.id\n            }.catchError { e -> Observable<String> in\n                // We've received an error. We're going to check to see if it's type is \"param_error\", which indicates we were outbid.\n\n                guard let error = e as? Moya.Error else { throw e }\n                guard case .statusCode(let response) = error else { throw e }\n\n                let json = JSON(data: response.data)\n\n                if let type = json[\"type\"].string, type == \"param_error\" {\n                    throw NSError(domain: OutbidDomain, code: 0, userInfo: [NSUnderlyingErrorKey: error as NSError])\n                } else {\n                    throw error\n                }\n            }\n            .logError()\n    }\n\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/PlaceBidViewController.swift",
    "content": "import UIKit\nimport Artsy_UILabels\nimport RxSwift\nimport Artsy_UIButtons\nimport Artsy_UILabels\nimport ORStackView\nimport Action\n\nclass PlaceBidViewController: UIViewController {\n\n    var provider: Networking!\n\n    fileprivate var _bidDollars = Variable(0)\n    var hasAlreadyPlacedABid: Bool = false\n\n    @IBOutlet var bidAmountTextField: TextField!\n    @IBOutlet var cursor: CursorView!\n    @IBOutlet var keypadContainer: KeypadContainerView!\n\n    @IBOutlet var currentBidTitleLabel: UILabel!\n    @IBOutlet var yourBidTitleLabel: UILabel!\n    @IBOutlet var currentBidAmountLabel: UILabel!\n    @IBOutlet var nextBidAmountLabel: UILabel!\n\n    @IBOutlet var artworkImageView: UIImageView!\n    @IBOutlet weak var detailsStackView: ORTagBasedAutoStackView!\n\n    @IBOutlet var bidButton: Button!\n    @IBOutlet weak var conditionsOfSaleButton: UIButton!\n    @IBOutlet weak var privacyPolictyButton: UIButton!\n\n    var showBuyersPremiumCommand = { () -> CocoaAction in\n        appDelegate().showBuyersPremiumCommand()\n    }\n\n    var showPrivacyPolicyCommand = { () -> CocoaAction in\n        appDelegate().showPrivacyPolicyCommand()\n    }\n\n    var showConditionsOfSaleCommand = { () -> CocoaAction in\n        appDelegate().showConditionsOfSaleCommand()\n    }\n\n    lazy var bidDollars: Observable<Int> = { self.keypadContainer.intValue }()\n    var buyersPremium: () -> (BuyersPremium?) = { appDelegate().sale.buyersPremium }\n\n    class func instantiateFromStoryboard(_ storyboard: UIStoryboard) -> PlaceBidViewController {\n        return storyboard.viewController(withID: .PlaceYourBid) as! PlaceBidViewController\n    }\n\n    fileprivate let _viewWillDisappear = PublishSubject<Void>()\n    var viewWillDisappear: Observable<Void> {\n        return self._viewWillDisappear.asObserver()\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        if !hasAlreadyPlacedABid {\n            self.fulfillmentNav().reset()\n        }\n\n        currentBidTitleLabel.font = UIFont.serifSemiBoldFont(withSize: 17)\n        yourBidTitleLabel.font = UIFont.serifSemiBoldFont(withSize: 17)\n\n        conditionsOfSaleButton.rx.action = showConditionsOfSaleCommand()\n        privacyPolictyButton.rx.action = showPrivacyPolicyCommand()\n\n        bidDollars\n            .bindTo(_bidDollars)\n            .addDisposableTo(rx_disposeBag)\n\n        bidDollars\n            .map(dollarsToCurrencyString)\n            .bindTo(bidAmountTextField.rx.text)\n            .addDisposableTo(rx_disposeBag)\n\n        if let nav = self.navigationController as? FulfillmentNavigationController {\n            bidDollars\n                .map { $0 * 100 }\n                .takeUntil(viewWillDisappear)\n                .map { bid in\n                    return bid as NSNumber?\n                }\n                .bindTo(nav.bidDetails.bidAmountCents)\n                .addDisposableTo(rx_disposeBag)\n\n            if let saleArtwork = nav.bidDetails.saleArtwork {\n\n                let minimumNextBid = saleArtwork\n                    .rx.observe(NSNumber.self, \"minimumNextBidCents\")\n                    .filterNil()\n                    .map { $0 as Int }\n\n                saleArtwork.viewModel\n                    .currentBidOrOpeningBidLabel()\n                    .mapToOptional()\n                    .bindTo(currentBidTitleLabel.rx.text)\n                    .addDisposableTo(rx_disposeBag)\n\n                saleArtwork.viewModel\n                    .currentBidOrOpeningBid()\n                    .mapToOptional()\n                    .bindTo(currentBidAmountLabel.rx.text)\n                    .addDisposableTo(rx_disposeBag)\n\n                minimumNextBid\n                    .map { $0 as Int }\n                    .map(toNextBidString)\n                    .bindTo(nextBidAmountLabel.rx.text)\n                    .addDisposableTo(rx_disposeBag)\n\n                Observable.combineLatest([bidDollars, minimumNextBid], { ints  in\n                        return (ints[0]) * 100 >= (ints[1])\n                    })\n                    .bindTo(bidButton.rx.isEnabled)\n                    .addDisposableTo(rx_disposeBag)\n\n                enum LabelTags: Int {\n                    case lotNumber = 1\n                    case artistName\n                    case artworkTitle\n                    case artworkPrice\n                    case buyersPremium\n                    case gobbler\n                }\n\n                let lotNumber = nav.bidDetails.saleArtwork?.lotNumber\n\n                if let _ = lotNumber {\n                    let lotNumberLabel = smallSansSerifLabel()\n                    lotNumberLabel.tag = LabelTags.lotNumber.rawValue\n                    detailsStackView.addSubview(lotNumberLabel, withTopMargin: \"10\", sideMargin: \"0\")\n                    saleArtwork.viewModel\n                        .lotNumber()\n                        .filterNilKeepOptional()\n                        .takeUntil(viewWillDisappear)\n                        .bindTo(lotNumberLabel.rx.text)\n                        .addDisposableTo(rx_disposeBag)\n\n                }\n\n                let artistNameLabel = sansSerifLabel()\n                artistNameLabel.tag = LabelTags.artistName.rawValue\n                detailsStackView.addSubview(artistNameLabel, withTopMargin: \"15\", sideMargin: \"0\")\n\n                let artworkTitleLabel = serifLabel()\n                artworkTitleLabel.tag = LabelTags.artworkTitle.rawValue\n                detailsStackView.addSubview(artworkTitleLabel, withTopMargin: \"15\", sideMargin: \"0\")\n\n                let artworkPriceLabel = serifLabel()\n                artworkPriceLabel.tag = LabelTags.artworkPrice.rawValue\n                detailsStackView.addSubview(artworkPriceLabel, withTopMargin: \"15\", sideMargin: \"0\")\n\n                if let _ = buyersPremium() {\n                    let buyersPremiumView = UIView()\n                    buyersPremiumView.tag = LabelTags.buyersPremium.rawValue\n\n                    let buyersPremiumLabel = ARSerifLabel()\n                    buyersPremiumLabel.font = buyersPremiumLabel.font.withSize(16)\n                    buyersPremiumLabel.text = \"This work has a \"\n                    buyersPremiumLabel.textColor = .artsyGrayBold()\n\n                    var buyersPremiumButton = ARUnderlineButton()\n                    buyersPremiumButton.titleLabel?.font = buyersPremiumLabel.font\n                    buyersPremiumButton.setTitle(\"buyers premium\", for: .normal)\n                    buyersPremiumButton.setTitleColor(.artsyGrayBold(), for: .normal)\n                    buyersPremiumButton.rx.action = showBuyersPremiumCommand()\n\n                    buyersPremiumView.addSubview(buyersPremiumLabel)\n                    buyersPremiumView.addSubview(buyersPremiumButton)\n\n                    buyersPremiumLabel.alignTop(\"0\", leading: \"0\", bottom: \"0\", trailing: nil, to: buyersPremiumView)\n                    buyersPremiumLabel.alignBaseline(with: buyersPremiumButton, predicate: nil)\n                    buyersPremiumButton.alignAttribute(.left, to: .right, of: buyersPremiumLabel, predicate: \"0\")\n\n                    detailsStackView.addSubview(buyersPremiumView, withTopMargin: \"15\", sideMargin: \"0\")\n                }\n\n                let gobbler = WhitespaceGobbler()\n                gobbler.tag = LabelTags.gobbler.rawValue\n                detailsStackView.addSubview(gobbler, withTopMargin: \"0\")\n\n                if let artist = saleArtwork.artwork.artists?.first {\n                    artist\n                        .rx.observe(String.self, \"name\")\n                        .filterNil()\n                        .mapToOptional()\n                        .bindTo(artistNameLabel.rx.text)\n                        .addDisposableTo(rx_disposeBag)\n                }\n\n                saleArtwork\n                    .artwork\n                    .rx.observe(NSAttributedString.self, \"titleAndDate\")\n                    .takeUntil(rx.deallocated)\n                    .bindTo(artworkTitleLabel.rx.attributedText)\n                    .addDisposableTo(rx_disposeBag)\n\n                saleArtwork\n                    .artwork\n                    .rx.observe(String.self, \"price\")\n                    .filterNil()\n                    .mapToOptional()\n                    .takeUntil(rx.deallocated)\n                    .bindTo(artworkPriceLabel.rx.text)\n                    .addDisposableTo(rx_disposeBag)\n\n                if let url = saleArtwork.artwork.defaultImage?.thumbnailURL() {\n                    self.artworkImageView.sd_setImage(with: url as URL!)\n                } else {\n                    self.artworkImageView.image = nil\n                }\n            }\n        }\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n\n        _viewWillDisappear.onNext()\n    }\n\n    @IBAction func bidButtonTapped(_ sender: AnyObject) {\n        let identifier = hasAlreadyPlacedABid ? SegueIdentifier.PlaceAnotherBid : SegueIdentifier.ConfirmBid\n        performSegue(identifier)\n    }\n\n    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n\n        if segue == .PlaceAnotherBid {\n            let nextViewController = segue.destination as! LoadingViewController\n            nextViewController.provider = provider\n            nextViewController.placingBid = true\n        } else if segue == .ConfirmBid {\n            let viewController = segue.destination as! ConfirmYourBidViewController\n            viewController.provider = provider\n        }\n    }\n}\n\nprivate extension PlaceBidViewController {\n    func smallSansSerifLabel() -> UILabel {\n        let label = sansSerifLabel()\n        label.font = label.font.withSize(12)\n        return label\n    }\n\n    func sansSerifLabel() -> UILabel {\n        let label = ARSansSerifLabel()\n        label.numberOfLines = 1\n        return label\n    }\n\n    func serifLabel() -> UILabel {\n        let label = ARSerifLabel()\n        label.numberOfLines = 1\n        label.font = label.font.withSize(16)\n        return label\n    }\n}\n\n/// These are for RAC only\n\nfunc dollarsToCurrencyString(_ dollars: Int) -> String {\n    if dollars == 0 {\n        return \"\"\n    }\n\n    let formatter = NumberFormatter()\n    formatter.locale = Locale(identifier: \"en_US\")\n    formatter.numberStyle = .decimal\n    return formatter.string(from: dollars as NSNumber) ?? \"\"\n}\n\nfunc toNextBidString(_ cents: Int) -> String {\n    guard let dollars = NumberFormatter.currencyString(forDollarCents: cents as NSNumber!)  else {\n        return \"\"\n    }\n    return \"Enter \\(dollars) or more\"\n}\n\ntypealias DeveloperOnly = PlaceBidViewController\nextension DeveloperOnly {\n    @IBAction func dev_nextIncrementPressed(_ sender: AnyObject) {\n        let bidDetails = (self.navigationController as? FulfillmentNavigationController)?.bidDetails\n        bidDetails?.bidAmountCents.value = bidDetails?.saleArtwork?.minimumNextBidCents\n        performSegue(SegueIdentifier.ConfirmBid)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/RegisterViewController.swift",
    "content": "import UIKit\nimport RxSwift\n\nprotocol RegistrationSubController {\n    // I know, leaky abstraction, but the amount\n    // of useless syntax to change it isn't worth it.\n\n    var finished: PublishSubject<Void> { get }\n}\n\nclass RegisterViewController: UIViewController {\n\n    @IBOutlet var flowView: RegisterFlowView!\n    @IBOutlet var bidDetailsPreviewView: BidDetailsPreviewView!\n    @IBOutlet var confirmButton: UIButton!\n\n    var provider: Networking!\n\n    let coordinator = RegistrationCoordinator()\n\n    dynamic var placingBid = true\n\n    fileprivate let _viewWillDisappear = PublishSubject<Void>()\n    var viewWillDisappear: Observable<Void> {\n        return self._viewWillDisappear.asObserver()\n    }\n\n    func internalNavController() -> UINavigationController? {\n        return self.childViewControllers.first as? UINavigationController\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        coordinator.storyboard = self.storyboard!\n        let registerIndex = coordinator.currentIndex.asObservable()\n        let indexIsConfirmed = registerIndex.map { return ($0 == RegistrationIndex.confirmVC.toInt()) }\n\n        indexIsConfirmed\n            .not()\n            .bindTo(confirmButton.rx_hidden)\n            .addDisposableTo(rx_disposeBag)\n\n        registerIndex\n            .bindTo(flowView.highlightedIndex)\n            .addDisposableTo(rx_disposeBag)\n\n        let details = self.fulfillmentNav().bidDetails\n        flowView.details = details\n        bidDetailsPreviewView.bidDetails = details\n\n        flowView\n            .highlightedIndex\n            .asObservable()\n            .distinctUntilChanged()\n            .subscribe(onNext: { [weak self] (index) in\n                if let _ = self?.fulfillmentNav() {\n                    let registrationIndex = RegistrationIndex.fromInt(index)\n\n                    let nextVC = self?.coordinator.viewControllerForIndex(registrationIndex)\n                    self?.goToViewController(nextVC!)\n                }\n            })\n            .addDisposableTo(rx_disposeBag)\n\n        goToNextVC()\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n        _viewWillDisappear.onNext()\n    }\n\n    func goToNextVC() {\n        let nextVC = coordinator.nextViewControllerForBidDetails(fulfillmentNav().bidDetails)\n        goToViewController(nextVC)\n    }\n\n    func goToViewController(_ controller: UIViewController) {\n        self.internalNavController()!.viewControllers = [controller]\n\n        if let subscribableVC = controller as? RegistrationSubController {\n            subscribableVC\n                .finished\n                .subscribe(onCompleted: { [weak self] in\n                    self?.goToNextVC()\n                    self?.flowView.update()\n                })\n                .addDisposableTo(rx_disposeBag)\n        }\n\n        if let viewController = controller as? RegistrationPasswordViewController {\n            viewController.provider = provider\n        }\n    }\n\n    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n\n        if segue == .ShowLoadingView {\n            let nextViewController = segue.destination as! LoadingViewController\n            nextViewController.placingBid = placingBid\n            nextViewController.provider = provider\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/RegistrationEmailViewController.swift",
    "content": "import UIKit\nimport RxSwift\n\nclass RegistrationEmailViewController: UIViewController, RegistrationSubController, UITextFieldDelegate {\n\n    @IBOutlet var emailTextField: TextField!\n    @IBOutlet var confirmButton: ActionButton!\n    var finished = PublishSubject<Void>()\n\n    lazy var viewModel: GenericFormValidationViewModel = {\n        let emailIsValid = self.emailTextField.rx.textInput.text.asObservable().replaceNil(with: \"\").map(stringIsEmailAddress)\n        return GenericFormValidationViewModel(isValid: emailIsValid, manualInvocation: self.emailTextField.rx_returnKey, finishedSubject: self.finished)\n    }()\n\n    fileprivate let _viewWillDisappear = PublishSubject<Void>()\n    var viewWillDisappear: Observable<Void> {\n        return self._viewWillDisappear.asObserver()\n    }\n\n    lazy var bidDetails: BidDetails! = { self.navigationController!.fulfillmentNav().bidDetails }()\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        emailTextField.text = bidDetails.newUser.email.value\n        emailTextField.rx.textInput.text\n            .asObservable()\n            .takeUntil(viewWillDisappear)\n            .bindTo(bidDetails.newUser.email)\n            .addDisposableTo(rx_disposeBag)\n\n        confirmButton.rx.action = viewModel.command\n\n        emailTextField.becomeFirstResponder()\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n\n        _viewWillDisappear.onNext()\n    }\n\n    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {\n\n        // Allow delete\n        if (string.isEmpty) { return true }\n\n        // the API doesn't accept spaces\n        return string != \" \"\n    }\n\n    class func instantiateFromStoryboard(_ storyboard: UIStoryboard) -> RegistrationEmailViewController {\n        return storyboard.viewController(withID: .RegisterEmail) as! RegistrationEmailViewController\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/RegistrationMobileViewController.swift",
    "content": "import UIKit\nimport RxSwift\n\nclass RegistrationMobileViewController: UIViewController, RegistrationSubController, UITextFieldDelegate {\n\n    @IBOutlet var numberTextField: TextField!\n    @IBOutlet var confirmButton: ActionButton!\n    let finished = PublishSubject<Void>()\n\n    lazy var viewModel: GenericFormValidationViewModel = {\n        let numberIsValid = self.numberTextField.rx.text.asObservable().replaceNil(with: \"\").map(isZeroLength).not()\n        return GenericFormValidationViewModel(isValid: numberIsValid, manualInvocation: self.numberTextField.rx_returnKey, finishedSubject: self.finished)\n    }()\n\n    fileprivate let _viewWillDisappear = PublishSubject<Void>()\n    var viewWillDisappear: Observable<Void> {\n        return self._viewWillDisappear.asObserver()\n    }\n\n    lazy var bidDetails: BidDetails! = { self.navigationController!.fulfillmentNav().bidDetails }()\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        numberTextField.text = bidDetails.newUser.phoneNumber.value\n        numberTextField\n            .rx.text\n            .asObservable()\n            .takeUntil(viewWillDisappear)\n            .bindTo(bidDetails.newUser.phoneNumber)\n            .addDisposableTo(rx_disposeBag)\n\n        confirmButton.rx.action = viewModel.command\n\n        numberTextField.becomeFirstResponder()\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n\n        _viewWillDisappear.onNext()\n    }\n\n    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {\n\n        // Allow delete\n        if string.isEmpty { return true }\n\n        // the API doesn't accept chars\n        let notNumberChars = CharacterSet.decimalDigits.inverted\n        return string.trimmingCharacters(in: notNumberChars).isNotEmpty\n    }\n\n    class func instantiateFromStoryboard(_ storyboard: UIStoryboard) -> RegistrationMobileViewController {\n        return storyboard.viewController(withID: .RegisterMobile) as! RegistrationMobileViewController\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/RegistrationPasswordViewController.swift",
    "content": "import UIKit\nimport RxSwift\nimport Moya\nimport Action\n\nclass RegistrationPasswordViewController: UIViewController, RegistrationSubController {\n\n    @IBOutlet var passwordTextField: TextField!\n    @IBOutlet var confirmButton: ActionButton!\n    @IBOutlet var subtitleLabel: UILabel!\n    @IBOutlet var forgotPasswordButton: UIButton!\n\n    let finished = PublishSubject<Void>()\n\n    var provider: Networking!\n\n    fileprivate let _viewWillDisappear = PublishSubject<Void>()\n    var viewWillDisappear: Observable<Void> {\n        return self._viewWillDisappear.asObserver()\n    }\n\n    lazy var viewModel: RegistrationPasswordViewModelType = {\n        let email = self.navigationController?.fulfillmentNav().bidDetails.newUser.email.value ?? \"\"\n\n        return RegistrationPasswordViewModel(\n            provider: self.provider,\n            password: self.passwordTextField.rx.text.asObservable().replaceNil(with: \"\"),\n            execute: self.passwordTextField.rx_returnKey,\n            completed: self.finished,\n            email: email)\n    }()\n\n    lazy var bidDetails: BidDetails! = { self.navigationController!.fulfillmentNav().bidDetails }()\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        forgotPasswordButton.isHidden = false\n\n        let passwordText = passwordTextField.rx.text\n        passwordText\n            .asObservable()\n            .takeUntil(viewWillDisappear)\n            .bindTo(bidDetails.newUser.password)\n            .addDisposableTo(rx_disposeBag)\n\n        confirmButton.rx.action = viewModel.action\n\n        viewModel\n            .action\n            .errors\n            .subscribe(onNext: { [weak self] _ in\n                self?.showAuthenticationError()\n                return\n            })\n            .addDisposableTo(rx_disposeBag)\n\n        viewModel\n            .emailExists\n            .not()\n            .startWith(true)\n            .bindTo(forgotPasswordButton.rx_hidden)\n            .addDisposableTo(rx_disposeBag)\n\n        forgotPasswordButton.rx.action = CocoaAction { [weak self] _ in\n            return self?\n                .viewModel\n                .userForgotPassword()\n                .then {\n                    self?.alertUserPasswordSent()\n                } ?? .empty()\n        }\n\n        viewModel\n            .emailExists\n            .map { emailExists in\n                if emailExists {\n                    return \"Enter your Artsy password\"\n                } else {\n                    return \"Create a password\"\n                }\n            }\n            .bindTo(subtitleLabel.rx.text)\n            .addDisposableTo(rx_disposeBag)\n\n        passwordTextField.becomeFirstResponder()\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n        _viewWillDisappear.onNext()\n    }\n\n    func alertUserPasswordSent() -> Observable<Void> {\n        return Observable.create { observer in\n\n            let alertController = UIAlertController(title: \"Forgot Password\", message: \"We have sent you your password.\", preferredStyle: .alert)\n\n            let okAction = UIAlertAction(title: \"OK\", style: .default) { (_) in }\n\n            alertController.addAction(okAction)\n\n            self.present(alertController, animated: true) {\n                observer.onCompleted()\n            }\n\n            return Disposables.create()\n        }\n    }\n\n    func showAuthenticationError() {\n        confirmButton.flashError(\"Incorrect\")\n        passwordTextField.flashForError()\n        confirmButton.setEnabled(false, animated: false)\n        navigationController!.fulfillmentNav().bidDetails.newUser.password.value = \"\"\n        passwordTextField.text = \"\"\n    }\n\n    class func instantiateFromStoryboard(_ storyboard: UIStoryboard) -> RegistrationPasswordViewController {\n        return storyboard.viewController(withID: .RegisterPassword) as! RegistrationPasswordViewController\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/RegistrationPasswordViewModel.swift",
    "content": "import Foundation\nimport RxSwift\nimport Moya\nimport Action\n\nprotocol RegistrationPasswordViewModelType {\n    var emailExists: Observable<Bool> { get }\n    var action: CocoaAction! { get }\n\n    func userForgotPassword() -> Observable<Void>\n}\n\nclass RegistrationPasswordViewModel: RegistrationPasswordViewModelType {\n\n    fileprivate let password = Variable(\"\")\n\n    var action: CocoaAction!\n    let provider: Networking\n\n    let email: String\n    let emailExists: Observable<Bool>\n\n    let disposeBag = DisposeBag()\n\n    init(provider: Networking, password: Observable<String>, execute: Observable<Void>, completed: PublishSubject<Void>, email: String) {\n        self.provider = provider\n        self.email = email\n\n        let checkEmail = provider\n            .request(ArtsyAPI.findExistingEmailRegistration(email: email))\n            .map(responseIsOK)\n            .shareReplay(1)\n\n        emailExists = checkEmail\n\n        password.bindTo(self.password).addDisposableTo(disposeBag)\n\n        let password = self.password\n\n        // Action takes nothing, is enabled if the password is valid, and does the following:\n        // Check if the email exists, it tries to log in.\n        // If it doesn't exist, then it does nothing.\n        let action = CocoaAction(enabledIf: password.asObservable().map(isStringLengthAtLeast(length: 6))) { _ in\n\n            return self.emailExists\n                .flatMap { exists -> Observable<Void> in\n                    if exists {\n                        let endpoint: ArtsyAPI = ArtsyAPI.xAuth(email: email, password: password.value )\n                        return provider\n                            .request(endpoint)\n                            .filterSuccessfulStatusCodes()\n                            .map(void)\n                    } else {\n                        // Return a non-empty observable, so that the action sends something on its elements observable.\n                        return .just(Void())\n                    }\n                }\n                .doOnCompleted {\n                    completed.onCompleted()\n                }\n        }\n\n        self.action = action\n\n        execute\n            .subscribe { _ in\n                action.execute(Void())\n            }\n            .addDisposableTo(disposeBag)\n    }\n\n    func userForgotPassword() -> Observable<Void> {\n        let endpoint = ArtsyAPI.lostPasswordNotification(email: email)\n        return provider.request(endpoint)\n            .filterSuccessfulStatusCodes()\n            .map(void)\n            .doOnNext { _ in\n                logger.log(\"Sent forgot password request\")\n            }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/RegistrationPostalZipViewController.swift",
    "content": "import RxSwift\n\nclass RegistrationPostalZipViewController: UIViewController, RegistrationSubController {\n    @IBOutlet var zipCodeTextField: TextField!\n    @IBOutlet var confirmButton: ActionButton!\n    let finished = PublishSubject<Void>()\n\n    lazy var viewModel: GenericFormValidationViewModel = {\n        let zipCodeIsValid = self.zipCodeTextField.rx.text.asObservable().replaceNil(with: \"\").map(isZeroLength).not()\n        return GenericFormValidationViewModel(isValid: zipCodeIsValid, manualInvocation: self.zipCodeTextField.rx_returnKey, finishedSubject: self.finished)\n    }()\n\n    fileprivate let _viewWillDisappear = PublishSubject<Void>()\n    var viewWillDisappear: Observable<Void> {\n        return self._viewWillDisappear.asObserver()\n    }\n\n    lazy var bidDetails: BidDetails! = { self.navigationController!.fulfillmentNav().bidDetails }()\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        zipCodeTextField.text = bidDetails.newUser.zipCode.value\n\n        zipCodeTextField\n            .rx.text\n            .asObservable()\n            .takeUntil(viewWillDisappear)\n            .bindTo(bidDetails.newUser.zipCode)\n            .addDisposableTo(rx_disposeBag)\n\n        confirmButton.rx.action = viewModel.command\n\n        zipCodeTextField.becomeFirstResponder()\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n\n        _viewWillDisappear.onNext()\n    }\n\n    class func instantiateFromStoryboard(_ storyboard: UIStoryboard) -> RegistrationPostalZipViewController {\n        return storyboard.viewController(withID: .RegisterPostalorZip) as! RegistrationPostalZipViewController\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/StripeManager.swift",
    "content": "import Foundation\nimport RxSwift\nimport Stripe\n\nclass StripeManager: NSObject {\n    var stripeClient = STPAPIClient.shared()\n\n    func registerCard(digits: String, month: UInt, year: UInt, securityCode: String, postalCode: String) -> Observable<STPToken> {\n        let card = STPCard()\n        card.number = digits\n        card.expMonth = month\n        card.expYear = year\n        card.cvc = securityCode\n        card.addressZip = postalCode\n\n        return Observable.create { [weak self] observer in\n            guard let me = self else {\n                observer.onCompleted()\n                return Disposables.create()\n            }\n\n            me.stripeClient?.createToken(with: card) { (token, error) in\n                if (token as STPToken?).hasValue {\n                    observer.onNext(token!)\n                    observer.onCompleted()\n                } else {\n                    observer.onError(error!)\n                }\n            }\n\n            return Disposables.create()\n        }\n    }\n\n    func stringIsCreditCard(_ cardNumber: String) -> Bool {\n        return STPCard.validateNumber(cardNumber)\n    }\n}\n\nextension STPCardBrand {\n    var name: String? {\n        switch self {\n        case .visa:\n            return \"Visa\"\n        case .amex:\n            return \"American Express\"\n        case .masterCard:\n            return \"MasterCard\"\n        case .discover:\n            return \"Discover\"\n        case .JCB:\n            return \"JCB\"\n        case .dinersClub:\n            return \"Diners Club\"\n        default:\n            return nil\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/SwipeCreditCardViewController.swift",
    "content": "import UIKit\nimport Artsy_UILabels\nimport RxSwift\nimport Keys\nimport Stripe\n\nclass SwipeCreditCardViewController: UIViewController, RegistrationSubController {\n\n    @IBOutlet var cardStatusLabel: ARSerifLabel!\n    let finished = PublishSubject<Void>()\n\n    @IBOutlet weak var spinner: Spinner!\n    @IBOutlet weak var processingLabel: UILabel!\n    @IBOutlet weak var illustrationImageView: UIImageView!\n\n    @IBOutlet weak var titleLabel: ARSerifLabel!\n\n    class func instantiateFromStoryboard(_ storyboard: UIStoryboard) -> SwipeCreditCardViewController {\n        return storyboard.viewController(withID: .RegisterCreditCard) as! SwipeCreditCardViewController\n    }\n\n    let cardName = Variable(\"\")\n    let cardLastDigits = Variable(\"\")\n    let cardToken = Variable(\"\")\n\n    lazy var keys = EidolonKeys()\n    lazy var bidDetails: BidDetails! = { self.navigationController!.fulfillmentNav().bidDetails }()\n\n    lazy var appSetup = AppSetup.sharedState\n    lazy var cardHandler: CardHandler = {\n        if self.appSetup.useStaging {\n            return CardHandler(apiKey: self.keys.cardflightStagingAPIClientKey(), accountToken: self.keys.cardflightStagingMerchantAccountToken())\n        } else {\n            return CardHandler(apiKey: self.keys.cardflightProductionAPIClientKey(), accountToken: self.keys.cardflightProductionMerchantAccountToken())\n        }\n    }()\n\n    fileprivate let _viewWillDisappear = PublishSubject<Void>()\n    var viewWillDisappear: Observable<Void> {\n        return self._viewWillDisappear.asObserver()\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        self.setInProgress(false)\n\n        cardHandler.cardStatus\n            .takeUntil(self.viewWillDisappear)\n            .subscribe(onNext: { message in\n                    self.cardStatusLabel.text = \"Card Status: \\(message)\"\n                    if message == \"Got Card\" {\n                        self.setInProgress(true)\n                    }\n\n                    if message.hasPrefix(\"Card Flight Error\") {\n                        self.processingLabel.text = \"ERROR PROCESSING CARD - SEE ADMIN\"\n                    }\n                },\n                onError: { error in\n                    self.cardStatusLabel.text = \"Card Status: Errored\"\n                    self.setInProgress(false)\n                    self.titleLabel.text = \"Please Swipe a Valid Credit Card\"\n                    self.titleLabel.textColor = .artsyRedRegular()\n                },\n                onCompleted: {\n                    self.cardStatusLabel.text = \"Card Status: completed\"\n\n                    if let card = self.cardHandler.card {\n                        self.cardName.value = card.name\n                        self.cardLastDigits.value = card.last4\n\n                        self.cardToken.value = card.cardToken\n\n                        if let newUser = self.navigationController?.fulfillmentNav().bidDetails.newUser {\n                            newUser.name.value = (newUser.name.value.isNilOrEmpty) ? card.name : newUser.name.value\n                        }\n                    }\n\n                    self.cardHandler.end()\n                    self.finished.onCompleted()\n                },\n                onDisposed: nil)\n                .addDisposableTo(rx_disposeBag)\n\n        cardHandler.startSearching()\n\n        cardName\n            .asObservable()\n            .takeUntil(viewWillDisappear)\n            .mapToOptional()\n            .bindTo(bidDetails.newUser.creditCardName)\n            .addDisposableTo(rx_disposeBag)\n\n        cardLastDigits\n            .asObservable()\n            .takeUntil(viewWillDisappear)\n            .mapToOptional()\n            .bindTo(bidDetails.newUser.creditCardDigit)\n            .addDisposableTo(rx_disposeBag)\n\n        cardToken\n            .asObservable()\n            .takeUntil(viewWillDisappear)\n            .mapToOptional()\n            .bindTo(bidDetails.newUser.creditCardToken)\n            .addDisposableTo(rx_disposeBag)\n\n        bidDetails.newUser.swipedCreditCard = true\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n\n        _viewWillDisappear.onNext()\n    }\n\n    func setInProgress(_ show: Bool) {\n        illustrationImageView.alpha = show ? 0.1 : 1\n        processingLabel.isHidden = !show\n        spinner.isHidden = !show\n    }\n\n    // Used only for development, in private extension for testing.\n    fileprivate lazy var stripeManager = StripeManager()\n}\n\nprivate extension SwipeCreditCardViewController {\n    func applyCardWithSuccess(_ success: Bool) {\n        let cardFullDigits = success ? \"4242424242424242\" : \"4000000000000002\"\n\n        stripeManager.registerCard(digits: cardFullDigits, month: 04, year: 2018, securityCode: \"123\", postalCode: \"10013\")\n            .subscribe(onNext: { [weak self] token in\n\n                self?.cardName.value = \"Kiosk Staging CC Test\"\n                self?.cardToken.value = token.tokenId\n                self?.cardLastDigits.value = token.card.last4\n\n                if let newUser = self?.navigationController?.fulfillmentNav().bidDetails.newUser {\n                    newUser.name.value = token.card.brand.name\n                }\n\n                self?.finished.onCompleted()\n            })\n            .addDisposableTo(rx_disposeBag)\n    }\n\n    @IBAction func dev_creditCardOKTapped(_ sender: AnyObject) {\n        applyCardWithSuccess(true)\n    }\n\n    @IBAction func dev_creditCardFailTapped(_ sender: AnyObject) {\n        applyCardWithSuccess(false)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Bid Fulfillment/YourBiddingDetailsViewController.swift",
    "content": "import UIKit\nimport Artsy_UILabels\nimport Artsy_UIButtons\nimport RxCocoa\nimport RxSwift\n\nclass YourBiddingDetailsViewController: UIViewController {\n\n    var provider: Networking!\n    @IBOutlet dynamic var bidderNumberLabel: UILabel!\n    @IBOutlet dynamic var pinNumberLabel: UILabel!\n\n    @IBOutlet weak var confirmationImageView: UIImageView!\n    @IBOutlet weak var subtitleLabel: ARSerifLabel!\n    @IBOutlet weak var bodyLabel: ARSerifLabel!\n    @IBOutlet weak var notificationLabel: ARSerifLabel!\n\n    var confirmationImage: UIImage?\n\n    lazy var bidDetails: BidDetails! = { (self.navigationController as! FulfillmentNavigationController).bidDetails }()\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        [notificationLabel, bidderNumberLabel, pinNumberLabel].forEach { $0.makeTransparent() }\n        notificationLabel.setLineHeight(5)\n        bodyLabel.setLineHeight(10)\n\n        if let image = confirmationImage {\n            confirmationImageView.image = image\n        }\n\n        bodyLabel?.makeSubstringsBold([\"Bidder Number\", \"PIN\"])\n\n        bidDetails\n            .paddleNumber\n            .asObservable()\n            .filterNilKeepOptional()\n            .bindTo(bidderNumberLabel.rx.text)\n            .addDisposableTo(rx_disposeBag)\n\n        bidDetails\n            .bidderPIN\n            .asObservable()\n            .filterNilKeepOptional()\n            .bindTo(pinNumberLabel.rx.text)\n            .addDisposableTo(rx_disposeBag)\n    }\n\n    @IBAction func confirmButtonTapped(_ sender: AnyObject) {\n        fulfillmentContainer()?.closeFulfillmentModal()\n    }\n\n    class func instantiateFromStoryboard(_ storyboard: UIStoryboard) -> YourBiddingDetailsViewController {\n        return storyboard.viewController(withID: .YourBidderDetails) as! YourBiddingDetailsViewController\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Help/HelpAnimator.swift",
    "content": "import UIKit\nimport RxSwift\n\nclass HelpAnimator: NSObject, UIViewControllerAnimatedTransitioning {\n    let presenting: Bool\n\n    init(presenting: Bool = false) {\n        self.presenting = presenting\n        super.init()\n    }\n\n    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {\n        return AnimationDuration.Normal\n    }\n\n    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {\n        let containerView = transitionContext.containerView\n\n        let fromView: UIView! = transitionContext.view(forKey: UITransitionContextViewKey.from) ?? transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)!.view\n        let toView: UIView! = transitionContext.view(forKey: UITransitionContextViewKey.to) ?? transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)!.view\n\n        if presenting {\n            let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)! as! HelpViewController\n\n            let dismissTapGestureRecognizer = UITapGestureRecognizer()\n            dismissTapGestureRecognizer\n                .rx.event\n                .subscribe(onNext: { [weak toView] sender in\n                    let pointInContainer = sender.location(in: toView)\n                    if toView?.point(inside: pointInContainer, with: nil) == false {\n                        appDelegate().helpButtonCommand().execute()\n                    }\n                })\n            .addDisposableTo(rx_disposeBag)\n            toViewController.dismissTapGestureRecognizer = dismissTapGestureRecognizer\n            containerView.addGestureRecognizer(dismissTapGestureRecognizer)\n\n            fromView.isUserInteractionEnabled = false\n\n            containerView.backgroundColor = .black\n\n            containerView.addSubview(fromView)\n            containerView.addSubview(toView)\n\n            toView.alignTop(\"0\", bottom: \"0\", to: containerView)\n            toView.constrainWidth(\"\\(HelpViewController.width)\")\n            toViewController.positionConstraints = toView.alignAttribute(.left, to: .right, of: containerView, predicate: \"0\") as? [NSLayoutConstraint]\n            containerView.layoutIfNeeded()\n\n            UIView.animate(withDuration: transitionDuration(using: transitionContext), animations: {\n                containerView.removeConstraints(toViewController.positionConstraints ?? [])\n                toViewController.positionConstraints = toView.alignLeading(nil, trailing: \"0\", to: containerView) as? [NSLayoutConstraint]\n                containerView.layoutIfNeeded()\n\n                fromView.alpha = 0.5\n            }, completion: { (value: Bool) in\n                transitionContext.completeTransition(true)\n            })\n        } else {\n            let fromViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)! as! HelpViewController\n\n            if let dismissTapGestureRecognizer = fromViewController.dismissTapGestureRecognizer {\n                containerView.removeGestureRecognizer(dismissTapGestureRecognizer)\n            }\n\n            toView.isUserInteractionEnabled = true\n\n            containerView.addSubview(toView)\n            containerView.addSubview(fromView)\n\n            UIView.animate(withDuration: self.transitionDuration(using: transitionContext), animations: {\n                containerView.removeConstraints(fromViewController.positionConstraints ?? [])\n                fromViewController.positionConstraints = fromView.alignAttribute(.left, to: .right, of: containerView, predicate: \"0\") as? [NSLayoutConstraint]\n                containerView.layoutIfNeeded()\n\n                toView.alpha = 1.0\n            }, completion: { (value: Bool) in\n                transitionContext.completeTransition(true)\n                // This following line is to work around a bug in iOS 8 💩\n                UIApplication.shared.keyWindow!.insertSubview(transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)!.view, at: 0)\n            })\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Help/HelpViewController.swift",
    "content": "import UIKit\nimport ORStackView\nimport Artsy_UILabels\nimport Artsy_UIButtons\nimport Action\nimport RxSwift\nimport RxCocoa\n\nclass HelpViewController: UIViewController {\n    var positionConstraints: [NSLayoutConstraint]?\n    var dismissTapGestureRecognizer: UITapGestureRecognizer?\n\n    fileprivate let stackView = ORTagBasedAutoStackView()\n\n    fileprivate var buyersPremiumButton: UIButton!\n\n    fileprivate let sideMargin: Float = 90.0\n    fileprivate let topMargin: Float = 45.0\n    fileprivate let headerMargin: Float = 25.0\n    fileprivate let inbetweenMargin: Float = 10.0\n\n    var showBuyersPremiumCommand = { () -> CocoaAction in\n        appDelegate().showBuyersPremiumCommand()\n    }\n\n    var registerToBidCommand = { (enabled: Observable<Bool>) -> CocoaAction in\n        appDelegate().registerToBidCommand(enabled: enabled)\n    }\n\n    var requestBidderDetailsCommand = { (enabled: Observable<Bool>) -> CocoaAction in\n        appDelegate().requestBidderDetailsCommand(enabled: enabled)\n    }\n\n    var showPrivacyPolicyCommand = { () -> CocoaAction in\n        appDelegate().showPrivacyPolicyCommand()\n    }\n\n    var showConditionsOfSaleCommand = { () -> CocoaAction in\n        appDelegate().showConditionsOfSaleCommand()\n    }\n\n    lazy var hasBuyersPremium: Observable<Bool> = {\n        return appDelegate()\n            .appViewController\n            .sale\n            .value\n            .rx.observe(String.self, \"buyersPremium\")\n            .map { $0.hasValue }\n    }()\n\n    class var width: Float {\n        get {\n            return 415.0\n        }\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        // Configure view\n        view.backgroundColor = .white\n\n        addSubviews()\n    }\n}\n\nprivate extension HelpViewController {\n\n    enum SubviewTag: Int {\n        case assistanceLabel = 0\n        case stuckLabel, stuckExplainLabel\n        case bidLabel, bidExplainLabel\n        case registerButton\n        case bidderDetailsLabel, bidderDetailsExplainLabel, bidderDetailsButton\n        case conditionsOfSaleButton, buyersPremiumButton, privacyPolicyButton\n    }\n\n    func addSubviews() {\n\n        // Configure subviews\n        let assistanceLabel = ARSerifLabel()\n        assistanceLabel.font = assistanceLabel.font.withSize(35)\n        assistanceLabel.text = \"Assistance\"\n        assistanceLabel.tag = SubviewTag.assistanceLabel.rawValue\n\n        let stuckLabel = titleLabel(tag: .stuckLabel, title: \"Stuck in the process?\")\n\n        let stuckExplainLabel = wrappingSerifLabel(tag: .stuckExplainLabel, text: \"Find the nearest Artsy representative and they will assist you.\")\n\n        let bidLabel = titleLabel(tag: .bidLabel, title: \"How do I place a bid?\")\n\n        let bidExplainLabel = wrappingSerifLabel(tag: .bidExplainLabel, text: \"Enter the amount you would like to bid. You will confirm this bid in the next step. Enter your mobile number or bidder number and PIN that you received when you registered.\")\n        bidExplainLabel.makeSubstringsBold([\"mobile number\", \"bidder number\", \"PIN\"])\n\n        var registerButton = blackButton(tag: .registerButton, title: \"Register\")\n        registerButton.rx.action = registerToBidCommand(connectedToInternetOrStubbing())\n\n        let bidderDetailsLabel = titleLabel(tag: .bidderDetailsLabel, title: \"What Are Bidder Details?\")\n\n        let bidderDetailsExplainLabel = wrappingSerifLabel(tag: .bidderDetailsExplainLabel, text: \"The bidder number is how you can identify yourself to bid and see your place in bid history. The PIN is a four digit number that authenticates your bid.\")\n        bidderDetailsExplainLabel.makeSubstringsBold([\"bidder number\", \"PIN\"])\n\n        var sendDetailsButton = blackButton(tag: .bidderDetailsButton, title: \"Send me my details\")\n        sendDetailsButton.rx.action = requestBidderDetailsCommand(connectedToInternetOrStubbing())\n\n        var conditionsButton = serifButton(tag: .conditionsOfSaleButton, title: \"Conditions of Sale\")\n        conditionsButton.rx.action = showConditionsOfSaleCommand()\n\n        buyersPremiumButton = serifButton(tag: .buyersPremiumButton, title: \"Buyers Premium\")\n        buyersPremiumButton.rx.action = showBuyersPremiumCommand()\n\n        var privacyButton = serifButton(tag: .privacyPolicyButton, title: \"Privacy Policy\")\n        privacyButton.rx.action = showPrivacyPolicyCommand()\n\n        // Add subviews\n        view.addSubview(stackView)\n        stackView.alignTop(\"0\", leading: \"0\", bottom: nil, trailing: \"0\", to: view)\n        stackView.addSubview(assistanceLabel, withTopMargin: \"\\(topMargin)\", sideMargin: \"\\(sideMargin)\")\n        stackView.addSubview(stuckLabel, withTopMargin: \"\\(headerMargin)\", sideMargin: \"\\(sideMargin)\")\n        stackView.addSubview(stuckExplainLabel, withTopMargin: \"\\(inbetweenMargin)\", sideMargin: \"\\(sideMargin)\")\n        stackView.addSubview(bidLabel, withTopMargin: \"\\(headerMargin)\", sideMargin: \"\\(sideMargin)\")\n        stackView.addSubview(bidExplainLabel, withTopMargin: \"\\(inbetweenMargin)\", sideMargin: \"\\(sideMargin)\")\n        stackView.addSubview(registerButton, withTopMargin: \"20\", sideMargin: \"\\(sideMargin)\")\n        stackView.addSubview(bidderDetailsLabel, withTopMargin: \"\\(headerMargin)\", sideMargin: \"\\(sideMargin)\")\n        stackView.addSubview(bidderDetailsExplainLabel, withTopMargin: \"\\(inbetweenMargin)\", sideMargin: \"\\(sideMargin)\")\n        stackView.addSubview(sendDetailsButton, withTopMargin: \"\\(inbetweenMargin)\", sideMargin: \"\\(sideMargin)\")\n        stackView.addSubview(conditionsButton, withTopMargin: \"\\(headerMargin)\", sideMargin: \"\\(sideMargin)\")\n        stackView.addSubview(privacyButton, withTopMargin: \"\\(inbetweenMargin)\", sideMargin: \"\\(self.sideMargin)\")\n\n        hasBuyersPremium\n            .subscribe(onNext: { [weak self] hasBuyersPremium in\n                if hasBuyersPremium {\n                    self?.stackView.addSubview(self!.buyersPremiumButton, withTopMargin: \"\\(self!.inbetweenMargin)\", sideMargin: \"\\(self!.sideMargin)\")\n                } else {\n                    self?.stackView.removeSubview(self!.buyersPremiumButton)\n                }\n            })\n            .addDisposableTo(rx_disposeBag)\n    }\n\n    func blackButton(tag: SubviewTag, title: String) -> ARBlackFlatButton {\n        let button = ARBlackFlatButton()\n        button.setTitle(title, for: .normal)\n        button.tag = tag.rawValue\n\n        return button\n    }\n\n    func serifButton(tag: SubviewTag, title: String) -> ARUnderlineButton {\n        let button = ARUnderlineButton()\n        button.setTitle(title, for: .normal)\n        button.setTitleColor(.artsyGrayBold(), for: .normal)\n        button.titleLabel?.font = UIFont.serifFont(withSize: 18)\n        button.contentHorizontalAlignment = .left\n        button.tag = tag.rawValue\n\n        return button\n    }\n\n    func wrappingSerifLabel(tag: SubviewTag, text: String) -> UILabel {\n        let label = ARSerifLabel()\n        label.font = label.font.withSize(18)\n        label.lineBreakMode = .byWordWrapping\n        label.preferredMaxLayoutWidth = CGFloat(HelpViewController.width - sideMargin)\n        label.tag = tag.rawValue\n\n        let paragraphStyle = NSMutableParagraphStyle()\n        paragraphStyle.lineSpacing = 4\n\n        label.attributedText = NSAttributedString(string: text, attributes: [NSParagraphStyleAttributeName: paragraphStyle])\n\n        return label\n    }\n\n    func titleLabel(tag: SubviewTag, title: String) -> ARSerifLabel {\n        let label = ARSerifLabel()\n        label.font = label.font.withSize(24)\n        label.text = title\n        label.tag = tag.rawValue\n        return label\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/HelperFunctions.swift",
    "content": "import Foundation\n\n// Collection of stanardised mapping funtions for Rx work\n\nfunc stringIsEmailAddress(_ text: String) -> Bool {\n    let emailRegex = \"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,6}\"\n    let testPredicate = NSPredicate(format:\"SELF MATCHES %@\", emailRegex)\n    return testPredicate.evaluate(with: text)\n}\n\nfunc centsToPresentableDollarsString(_ cents: Int) -> String {\n    guard let dollars = NumberFormatter.currencyString(forDollarCents: cents as NSNumber!) else {\n        return \"\"\n    }\n\n    return dollars\n}\n\nfunc isZeroLength(string: String) -> Bool {\n    return string.isEmpty\n}\n\nfunc isStringLength(in range: Range<Int>) -> (String) -> Bool {\n    return { string in\n        return range.contains(string.count)\n    }\n}\n\nfunc isStringOf(length: Int) -> (String) -> Bool {\n    return { string in\n        return string.count == length\n    }\n}\n\nfunc isStringLengthAtLeast(length: Int) -> (String) -> Bool {\n    return { string in\n        return string.count >= length\n    }\n}\n\nfunc isStringLength(oneOf lengths: [Int]) -> (String) -> Bool {\n    return { string in\n        return lengths.contains(string.count)\n    }\n}\n\n// Useful for mapping an Observable<Whatever> into an Observable<Void> to hide details.\nfunc void<T>(_: T) -> Void {\n    return Void()\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/ListingsCollectionViewCell.swift",
    "content": "import Foundation\nimport Artsy_UILabels\nimport RxSwift\nimport RxCocoa\nimport NSObject_Rx\n\nclass ListingsCollectionViewCell: UICollectionViewCell {\n    typealias DownloadImageClosure = (_ url: URL?, _ imageView: UIImageView) -> ()\n    typealias CancelDownloadImageClosure = (_ imageView: UIImageView) -> ()\n\n    dynamic let lotNumberLabel = ListingsCollectionViewCell._sansSerifLabel()\n    dynamic let artworkImageView = ListingsCollectionViewCell._artworkImageView()\n    dynamic let artistNameLabel = ListingsCollectionViewCell._largeLabel()\n    dynamic let artworkTitleLabel = ListingsCollectionViewCell._italicsLabel()\n    dynamic let estimateLabel = ListingsCollectionViewCell._normalLabel()\n    dynamic let currentBidLabel = ListingsCollectionViewCell._boldLabel()\n    dynamic let numberOfBidsLabel = ListingsCollectionViewCell._rightAlignedNormalLabel()\n    dynamic let bidButton = ListingsCollectionViewCell._bidButton()\n    dynamic let moreInfoLabel = ListingsCollectionViewCell._infoLabel()\n\n    var downloadImage: DownloadImageClosure?\n    var cancelDownloadImage: CancelDownloadImageClosure?\n    var reuseBag: DisposeBag?\n\n    lazy var moreInfo: Observable<Date> = {\n        return Observable.from([self.imageGestureSigal, self.infoGesture]).merge()\n    }()\n\n    fileprivate lazy var imageGestureSigal: Observable<Date> = {\n        let recognizer = UITapGestureRecognizer()\n        self.artworkImageView.addGestureRecognizer(recognizer)\n        self.artworkImageView.isUserInteractionEnabled = true\n        return recognizer.rx.event.map { _ in Date() }\n    }()\n\n    fileprivate lazy var infoGesture: Observable<Date> = {\n        let recognizer = UITapGestureRecognizer()\n        self.moreInfoLabel.addGestureRecognizer(recognizer)\n        self.moreInfoLabel.isUserInteractionEnabled = true\n        return recognizer.rx.event.map { _ in Date() }\n    }()\n\n    fileprivate var _preparingForReuse = PublishSubject<Void>()\n\n    var preparingForReuse: Observable<Void> {\n        return _preparingForReuse.asObservable()\n    }\n\n    var viewModel = PublishSubject<SaleArtworkViewModel>()\n    func setViewModel(_ newViewModel: SaleArtworkViewModel) {\n        self.viewModel.onNext(newViewModel)\n    }\n\n    fileprivate var _bidPressed = PublishSubject<Date>()\n    var bidPressed: Observable<Date> {\n        return _bidPressed.asObservable()\n    }\n\n    override init(frame: CGRect) {\n        super.init(frame: frame)\n        setupSubscriptions()\n        setup()\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        setupSubscriptions()\n        setup()\n    }\n\n    override func prepareForReuse() {\n        super.prepareForReuse()\n        cancelDownloadImage?(artworkImageView)\n        _preparingForReuse.onNext()\n        setupSubscriptions()\n    }\n\n    func setup() {\n        // Necessary to use Autolayout\n        contentView.translatesAutoresizingMaskIntoConstraints = false\n    }\n\n    func setupSubscriptions() {\n\n        // Bind subviews\n        reuseBag = DisposeBag()\n\n        guard let reuseBag = reuseBag else { return }\n\n        // Start with things not expected to ever change. \n        viewModel.flatMapTo(SaleArtworkViewModel.lotNumber)\n            .replaceNil(with: \"\")\n            .mapToOptional()\n            .bindTo(lotNumberLabel.rx.text)\n            .addDisposableTo(reuseBag)\n\n        viewModel.map { (viewModel) -> URL? in\n                return viewModel.thumbnailURL\n            }.subscribe(onNext: { [weak self] url in\n                guard let imageView = self?.artworkImageView else { return }\n                self?.downloadImage?(url, imageView)\n            }).addDisposableTo(reuseBag)\n\n        viewModel.map { $0.artistName ?? \"\" }\n            .bindTo(artistNameLabel.rx.text)\n            .addDisposableTo(reuseBag)\n\n        viewModel.map { $0.titleAndDateAttributedString }\n            .mapToOptional()\n            .bindTo(artworkTitleLabel.rx.attributedText)\n            .addDisposableTo(reuseBag)\n\n        viewModel.map { $0.estimateString }\n            .bindTo(estimateLabel.rx.text)\n            .addDisposableTo(reuseBag)\n\n        // Now do properties that _do_ change.\n\n        viewModel.flatMap { (viewModel) -> Observable<String> in\n                return viewModel.currentBid(prefix: \"Current Bid: \", missingPrefix: \"Starting Bid: \")\n            }\n            .mapToOptional()\n            .bindTo(currentBidLabel.rx.text)\n            .addDisposableTo(reuseBag)\n\n        viewModel.flatMapTo(SaleArtworkViewModel.numberOfBids)\n            .mapToOptional()\n            .bindTo(numberOfBidsLabel.rx.text)\n            .addDisposableTo(reuseBag)\n\n        viewModel.flatMapTo(SaleArtworkViewModel.forSale)\n            .doOnNext { [weak bidButton] forSale in\n                // Button titles aren't KVO-able\n                bidButton?.setTitle((forSale ? \"BID\" : \"SOLD\"), for: .normal)\n            }\n            .bindTo(bidButton.rx.isEnabled)\n            .addDisposableTo(reuseBag)\n\n        bidButton.rx.tap.subscribe(onNext: { [weak self] in\n                self?._bidPressed.onNext(Date())\n            })\n            .addDisposableTo(reuseBag)\n    }\n}\n\nprivate extension ListingsCollectionViewCell {\n\n    // Mark: UIView-property-methods – need an _ prefix to appease the compiler ¯\\_(ツ)_/¯\n    class func _artworkImageView() -> UIImageView {\n        let imageView = UIImageView()\n        imageView.backgroundColor = .artsyGrayLight()\n        return imageView\n    }\n\n    class func _rightAlignedNormalLabel() -> UILabel {\n        let label = _normalLabel()\n        label.textAlignment = .right\n        label.numberOfLines = 1\n        return label\n    }\n\n    class func _normalLabel() -> UILabel {\n        let label = ARSerifLabel()\n        label.font = label.font.withSize(16)\n        label.numberOfLines = 1\n        return label\n    }\n\n    class func _sansSerifLabel() -> UILabel {\n        let label = ARSansSerifLabel()\n        label.font = label.font.withSize(12)\n        label.numberOfLines = 1\n        return label\n    }\n\n    class func _italicsLabel() -> UILabel {\n        let label = ARItalicsSerifLabel()\n        label.font = label.font.withSize(16)\n        label.numberOfLines = 1\n        return label\n    }\n\n    class func _largeLabel() -> UILabel {\n        let label = _normalLabel()\n        label.font = label.font.withSize(20)\n        return label\n    }\n\n    class func _bidButton() -> ActionButton {\n        let button = ActionButton()\n        button.setTitle(\"BID\", for: .normal)\n        return button\n    }\n\n    class func _boldLabel() -> UILabel {\n        let label = _normalLabel()\n        label.font = UIFont.serifBoldFont(withSize: label.font.pointSize)\n        label.numberOfLines = 1\n        return label\n    }\n\n    class func _infoLabel() -> UILabel {\n        let label = ARSansSerifLabelWithChevron()\n        label.tintColor = .black\n        label.text = \"MORE INFO\"\n        return label\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Observable+JSONAble.swift",
    "content": "import Foundation\nimport Moya\nimport RxSwift\n\nenum EidolonError: String {\n    case couldNotParseJSON\n    case notLoggedIn\n    case missingData\n}\n\nextension EidolonError: Swift.Error { }\n\nextension Observable {\n\n    typealias Dictionary = [String: AnyObject]\n\n    /// Get given JSONified data, pass back objects\n    func mapTo<B: JSONAbleType>(object classType: B.Type) -> Observable<B> {\n        return self.map { json in\n            guard let dict = json as? Dictionary else {\n                throw EidolonError.couldNotParseJSON\n            }\n\n            return B.fromJSON(dict)\n        }\n    }\n\n    /// Get given JSONified data, pass back objects as an array\n    func mapTo<B: JSONAbleType>(arrayOf classType: B.Type) -> Observable<[B]> {\n        return self.map { json in\n            guard let array = json as? [AnyObject] else {\n                throw EidolonError.couldNotParseJSON\n            }\n\n            guard let dicts = array as? [Dictionary] else {\n                throw EidolonError.couldNotParseJSON\n            }\n\n            return dicts.map { B.fromJSON($0) }\n        }\n    }\n\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Observable+Logging.swift",
    "content": "import RxSwift\n\nextension Observable {\n    func logError(prefix: String = \"Error: \") -> Observable<Element> {\n        return self.do(onError: { error in\n            print(\"\\(prefix)\\(error)\")\n        })\n    }\n\n    func logServerError(message: String) -> Observable<Element> {\n        return self.do(onError: { e in\n            let error = e as NSError\n            logger.log(message)\n            logger.log(\"Error: \\(error.localizedDescription). \\n \\(error.artsyServerError())\")\n        })\n    }\n\n    func logNext() -> Observable<Element> {\n        return self.do(onNext: { element in\n            print(\"\\(element)\")\n        })\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Observable+Operators.swift",
    "content": "import RxSwift\n\nextension Observable where Element: Equatable {\n    func ignore(value: Element) -> Observable<Element> {\n        return filter { (e) -> Bool in\n            return value != e\n        }\n    }\n}\n\nextension Observable {\n    // OK, so the idea is that I have a Variable that exposes an Observable and I want\n    // to switch to the latest without mapping.\n    //\n    // viewModel.flatMap { saleArtworkViewModel in return saleArtworkViewModel.lotNumber }\n    //\n    // Becomes...\n    //\n    // viewModel.flatMapTo(SaleArtworkViewModel.lotNumber)\n    //\n    // Still not sure if this is a good idea.\n\n    func flatMapTo<R>(_ selector: @escaping (Element) -> () -> Observable<R>) -> Observable<R> {\n        return self.map { (s) -> Observable<R> in\n            return selector(s)()\n        }.switchLatest()\n    }\n}\n\nprotocol OptionalType {\n    associatedtype Wrapped\n\n    var value: Wrapped? { get }\n}\n\nextension Optional: OptionalType {\n    var value: Wrapped? {\n        return self\n    }\n}\n\nextension Observable where Element: OptionalType {\n    func filterNil() -> Observable<Element.Wrapped> {\n        return flatMap { (element) -> Observable<Element.Wrapped> in\n            if let value = element.value {\n                return .just(value)\n            } else {\n                return .empty()\n            }\n        }\n    }\n\n    func filterNilKeepOptional() -> Observable<Element> {\n        return self.filter { (element) -> Bool in\n            return element.value != nil\n        }\n    }\n\n    func replaceNil(with nilValue: Element.Wrapped) -> Observable<Element.Wrapped> {\n        return flatMap { (element) -> Observable<Element.Wrapped> in\n            if let value = element.value {\n                return .just(value)\n            } else {\n                return .just(nilValue)\n            }\n        }\n    }\n}\n\n// TODO: Added in new RxSwift?\nextension Observable {\n    func doOnNext(_ closure: @escaping (Element) -> Void) -> Observable<Element> {\n        return self.do(onNext: { (element) in\n            closure(element)\n        })\n    }\n\n    func doOnCompleted(_ closure: @escaping () -> Void) -> Observable<Element> {\n        return self.do(onCompleted: {\n            closure()\n        })\n    }\n\n    func doOnError(_ closure: @escaping (Error) -> Void) -> Observable<Element> {\n        return self.do(onError: { (error) in\n            closure(error)\n        })\n    }\n}\n\nprivate let backgroundScheduler = SerialDispatchQueueScheduler(qos: .default)\n\nextension Observable {\n    func mapReplace<T>(with value: T) -> Observable<T> {\n        return map { _ -> T in\n            return value\n        }\n    }\n\n    func dispatchAsyncMainScheduler() -> Observable<E> {\n        return self.observeOn(backgroundScheduler).observeOn(MainScheduler.instance)\n    }\n}\n\nprotocol BooleanType {\n    var boolValue: Bool { get }\n}\nextension Bool: BooleanType {\n    var boolValue: Bool { return self }\n}\n\n// Maps true to false and vice versa\nextension Observable where Element: BooleanType {\n    func not() -> Observable<Bool> {\n        return self.map { input in\n            return !input.boolValue\n        }\n    }\n}\n\nextension Collection where Iterator.Element: ObservableType, Iterator.Element.E: BooleanType {\n\n    func combineLatestAnd() -> Observable<Bool> {\n        return Observable.combineLatest(self) { bools -> Bool in\n            return bools.reduce(true, { (memo, element) in\n                return memo && element.boolValue\n            })\n        }\n    }\n\n    func combineLatestOr() -> Observable<Bool> {\n        return Observable.combineLatest(self) { bools in\n            bools.reduce(false, { (memo, element) in\n                return memo || element.boolValue\n            })\n        }\n    }\n}\n\nextension ObservableType {\n\n    func then(_ closure: @escaping () -> Observable<E>?) -> Observable<E> {\n        return then(closure() ?? .empty())\n    }\n\n    func then( _ closure: @autoclosure @escaping () -> Observable<E>) -> Observable<E> {\n        let next = Observable.deferred {\n            return closure()\n        }\n\n        return self\n            .ignoreElements()\n            .concat(next)\n    }\n}\n\nextension Observable {\n    func mapToOptional() -> Observable<Optional<Element>> {\n        return map { Optional($0) }\n    }\n}\n\nfunc sendDispatchCompleted<T>(to observer: AnyObserver<T>) {\n    DispatchQueue.main.async {\n        observer.onCompleted()\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Sale Artwork Details/ImageTiledDataSource.swift",
    "content": "import Foundation\nimport ARTiledImageView\n\nclass TiledImageDataSourceWithImage: ARWebTiledImageDataSource {\n    let image: Image\n\n    init(image: Image) {\n        self.image = image\n        super.init()\n\n        tileFormat = \"jpg\"\n        tileBaseURL = URL(string: image.baseURL)\n        tileSize = image.tileSize\n        maxTiledHeight = image.maxTiledHeight\n        maxTiledWidth = image.maxTiledWidth\n        maxTileLevel = image.maxLevel\n        minTileLevel = 11\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Sale Artwork Details/SaleArtworkDetailsViewController.swift",
    "content": "import UIKit\nimport ORStackView\nimport Artsy_UILabels\nimport Artsy_UIFonts\nimport RxSwift\nimport Artsy_UIButtons\nimport SDWebImage\nimport Action\n\nclass SaleArtworkDetailsViewController: UIViewController {\n    var allowAnimations = true\n    var auctionID = AppSetup.sharedState.auctionID\n    var saleArtwork: SaleArtwork!\n    var provider: Networking!\n\n    var showBuyersPremiumCommand = { () -> CocoaAction in\n        appDelegate().showBuyersPremiumCommand()\n    }\n\n    class func instantiateFromStoryboard(_ storyboard: UIStoryboard) -> SaleArtworkDetailsViewController {\n        return storyboard.viewController(withID: .SaleArtworkDetail) as! SaleArtworkDetailsViewController\n    }\n\n    lazy var artistInfo: Observable<Any> = {\n        let artistInfo = self.provider.request(.artwork(id: self.saleArtwork.artwork.id)).filterSuccessfulStatusCodes().mapJSON()\n        return artistInfo.shareReplay(1)\n    }()\n\n    @IBOutlet weak var metadataStackView: ORTagBasedAutoStackView!\n    @IBOutlet weak var additionalDetailScrollView: ORStackScrollView!\n\n    var buyersPremium: () -> (BuyersPremium?) = { appDelegate().sale.buyersPremium }\n    let layoutSubviews = PublishSubject<Void>()\n    let viewWillAppear = PublishSubject<Void>()\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        setupMetadataView()\n        setupAdditionalDetailStackView()\n    }\n\n    override func viewDidLayoutSubviews() {\n        super.viewDidLayoutSubviews()\n\n        // OK, so this is pretty weird, eh? So basically we need to be notified of layout changes _just after_ the layout\n        // is actually done. For whatever reason, the UIKit hack to get the labels to adhere to their proper width only\n        // works if we defer recalculating their geometry to the next runloop.\n        // This wasn't an issue with RAC's rac_signalForSelector because that invoked the signal _after_ this method completed.\n        // So that's what I've done here.\n        DispatchQueue.main.async {\n            self.layoutSubviews.onNext()\n        }\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n\n        viewWillAppear.onCompleted()\n    }\n\n    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n        if segue == .ZoomIntoArtwork {\n            let nextViewController = segue.destination as! SaleArtworkZoomViewController\n            nextViewController.saleArtwork = saleArtwork\n        }\n    }\n\n    enum MetadataStackViewTag: Int {\n        case lotNumberLabel = 1\n        case artistNameLabel\n        case artworkNameLabel\n        case artworkMediumLabel\n        case artworkDimensionsLabel\n        case imageRightsLabel\n        case estimateTopBorder\n        case estimateLabel\n        case estimateBottomBorder\n        case currentBidLabel\n        case currentBidValueLabel\n        case numberOfBidsPlacedLabel\n        case bidButton\n        case buyersPremium\n    }\n\n    @IBAction func backWasPressed(_ sender: AnyObject) {\n        _ = navigationController?.popViewController(animated: true)\n    }\n\n    fileprivate func setupMetadataView() {\n        enum LabelType {\n            case serif\n            case sansSerif\n            case italicsSerif\n            case bold\n        }\n\n        func label(_ type: LabelType, tag: MetadataStackViewTag, fontSize: CGFloat = 16.0) -> UILabel {\n            let label: UILabel = { () -> UILabel in\n                switch type {\n                case .serif:\n                    return ARSerifLabel()\n                case .sansSerif:\n                    return ARSansSerifLabel()\n                case .italicsSerif:\n                    return ARItalicsSerifLabel()\n                case .bold:\n                    let label = ARSerifLabel()\n                    label.font = UIFont.sansSerifFont(withSize: label.font.pointSize)\n                    return label\n                }\n            }()\n\n            label.lineBreakMode = .byWordWrapping\n            label.font = label.font.withSize(fontSize)\n            label.tag = tag.rawValue\n            label.preferredMaxLayoutWidth = 276\n\n            return label\n        }\n\n        let hasLotNumber = (saleArtwork.lotNumber != nil)\n\n        if let _ = saleArtwork.lotNumber {\n            let lotNumberLabel = label(.sansSerif, tag: .lotNumberLabel)\n            lotNumberLabel.font = lotNumberLabel.font.withSize(12)\n            metadataStackView.addSubview(lotNumberLabel, withTopMargin: \"0\", sideMargin: \"0\")\n\n            saleArtwork\n                .viewModel\n                .lotNumber()\n                .filterNil()\n                .mapToOptional()\n                .bindTo(lotNumberLabel.rx.text)\n                .addDisposableTo(rx_disposeBag)\n        }\n\n        if let artist = artist() {\n            let artistNameLabel = label(.sansSerif, tag: .artistNameLabel)\n            artistNameLabel.text = artist.name\n            metadataStackView.addSubview(artistNameLabel, withTopMargin: hasLotNumber ? \"10\" : \"0\", sideMargin: \"0\")\n        }\n\n        let artworkNameLabel = label(.italicsSerif, tag: .artworkNameLabel)\n        artworkNameLabel.text = \"\\(saleArtwork.artwork.title), \\(saleArtwork.artwork.date)\"\n        metadataStackView.addSubview(artworkNameLabel, withTopMargin: \"10\", sideMargin: \"0\")\n\n        if let medium = saleArtwork.artwork.medium {\n            if medium.isNotEmpty {\n                let mediumLabel = label(.serif, tag: .artworkMediumLabel)\n                mediumLabel.text = medium\n                metadataStackView.addSubview(mediumLabel, withTopMargin: \"22\", sideMargin: \"0\")\n            }\n        }\n\n        if saleArtwork.artwork.dimensions.count > 0 {\n            let dimensionsLabel = label(.serif, tag: .artworkDimensionsLabel)\n            dimensionsLabel.text = (saleArtwork.artwork.dimensions as NSArray).componentsJoined(by: \"\\n\")\n            metadataStackView.addSubview(dimensionsLabel, withTopMargin: \"5\", sideMargin: \"0\")\n        }\n\n        retrieveImageRights()\n            .filter { imageRights -> Bool in\n                return imageRights.isNotEmpty\n            }.subscribe(onNext: { [weak self] imageRights in\n                let rightsLabel = label(.serif, tag: .imageRightsLabel)\n                rightsLabel.text = imageRights\n                self?.metadataStackView.addSubview(rightsLabel, withTopMargin: \"22\", sideMargin: \"0\")\n            })\n            .addDisposableTo(rx_disposeBag)\n\n        let estimateTopBorder = UIView()\n        estimateTopBorder.constrainHeight(\"1\")\n        estimateTopBorder.tag = MetadataStackViewTag.estimateTopBorder.rawValue\n        metadataStackView.addSubview(estimateTopBorder, withTopMargin: \"22\", sideMargin: \"0\")\n\n        var estimateBottomBorder: UIView?\n\n        let estimateString = saleArtwork.viewModel.estimateString\n        if estimateString.isNotEmpty {\n            let estimateLabel = label(.serif, tag: .estimateLabel)\n            estimateLabel.text = estimateString\n            metadataStackView.addSubview(estimateLabel, withTopMargin: \"15\", sideMargin: \"0\")\n\n            estimateBottomBorder = UIView()\n            _ = estimateBottomBorder?.constrainHeight(\"1\")\n            estimateBottomBorder?.tag = MetadataStackViewTag.estimateBottomBorder.rawValue\n            metadataStackView.addSubview(estimateBottomBorder, withTopMargin: \"10\", sideMargin: \"0\")\n        }\n\n        viewWillAppear\n            .subscribe(onCompleted: { [weak estimateTopBorder, weak estimateBottomBorder] in\n                estimateTopBorder?.drawDottedBorders()\n                estimateBottomBorder?.drawDottedBorders()\n            })\n            .addDisposableTo(rx_disposeBag)\n\n        let hasBids = saleArtwork\n            .rx.observe(NSNumber.self, \"highestBidCents\")\n            .map { observeredCents -> Bool in\n                guard let cents = observeredCents else { return false }\n                return (cents as Int) > 0\n            }\n\n        let currentBidLabel = label(.serif, tag: .currentBidLabel)\n\n        hasBids\n            .flatMap { hasBids -> Observable<String> in\n                if hasBids {\n                    return .just(\"Current Bid:\")\n                } else {\n                    return .just(\"Starting Bid:\")\n                }\n            }\n            .mapToOptional()\n            .bindTo(currentBidLabel.rx.text)\n            .addDisposableTo(rx_disposeBag)\n\n        metadataStackView.addSubview(currentBidLabel, withTopMargin: \"22\", sideMargin: \"0\")\n\n        let currentBidValueLabel = label(.bold, tag: .currentBidValueLabel, fontSize: 27)\n        saleArtwork\n            .viewModel\n            .currentBid()\n            .mapToOptional()\n            .bindTo(currentBidValueLabel.rx.text)\n            .addDisposableTo(rx_disposeBag)\n        metadataStackView.addSubview(currentBidValueLabel, withTopMargin: \"10\", sideMargin: \"0\")\n\n        let numberOfBidsPlacedLabel = label(.serif, tag: .numberOfBidsPlacedLabel)\n        saleArtwork\n            .viewModel\n            .numberOfBidsWithReserve\n            .mapToOptional()\n            .bindTo(numberOfBidsPlacedLabel.rx.text)\n            .addDisposableTo(rx_disposeBag)\n        metadataStackView.addSubview(numberOfBidsPlacedLabel, withTopMargin: \"10\", sideMargin: \"0\")\n\n        let bidButton = ActionButton()\n        bidButton\n            .rx.tap\n            .asObservable()\n            .subscribe(onNext: { [weak self] _ in\n                guard let me = self else { return }\n\n                me.bid(auctionID: me.auctionID, saleArtwork: me.saleArtwork, allowAnimations: me.allowAnimations, provider: me.provider)\n            })\n            .addDisposableTo(rx_disposeBag)\n\n        saleArtwork\n            .viewModel\n            .forSale()\n            .subscribe(onNext: { [weak bidButton] forSale in\n                let forSale = forSale\n\n                let title = forSale ? \"BID\" : \"SOLD\"\n                bidButton?.setTitle(title, for: .normal)\n            })\n            .addDisposableTo(rx_disposeBag)\n\n        saleArtwork\n            .viewModel\n            .forSale()\n            .bindTo(bidButton.rx.isEnabled)\n            .addDisposableTo(rx_disposeBag)\n\n        bidButton.tag = MetadataStackViewTag.bidButton.rawValue\n        metadataStackView.addSubview(bidButton, withTopMargin: \"40\", sideMargin: \"0\")\n\n        if let _ = buyersPremium() {\n            let buyersPremiumView = UIView()\n            buyersPremiumView.tag = MetadataStackViewTag.buyersPremium.rawValue\n\n            let buyersPremiumLabel = ARSerifLabel()\n            buyersPremiumLabel.font = buyersPremiumLabel.font.withSize(16)\n            buyersPremiumLabel.text = \"This work has a \"\n            buyersPremiumLabel.textColor = .artsyGrayBold()\n\n            var buyersPremiumButton = ARButton()\n            let title = \"buyers premium\"\n            let attributes: [String: AnyObject] = [ NSUnderlineStyleAttributeName: NSUnderlineStyle.styleSingle.rawValue as AnyObject, NSFontAttributeName: buyersPremiumLabel.font ]\n            let attributedTitle = NSAttributedString(string: title, attributes: attributes)\n            buyersPremiumButton.setTitle(title, for: .normal)\n            buyersPremiumButton.titleLabel?.attributedText = attributedTitle\n            buyersPremiumButton.setTitleColor(.artsyGrayBold(), for: .normal)\n\n            buyersPremiumButton.rx.action = showBuyersPremiumCommand()\n\n            buyersPremiumView.addSubview(buyersPremiumLabel)\n            buyersPremiumView.addSubview(buyersPremiumButton)\n\n            buyersPremiumLabel.alignTop(\"0\", leading: \"0\", bottom: \"0\", trailing: nil, to: buyersPremiumView)\n            buyersPremiumLabel.alignBaseline(with: buyersPremiumButton, predicate: nil)\n            buyersPremiumButton.alignAttribute(.left, to: .right, of: buyersPremiumLabel, predicate: \"0\")\n\n            metadataStackView.addSubview(buyersPremiumView, withTopMargin: \"30\", sideMargin: \"0\")\n        }\n\n        metadataStackView.bottomMarginHeight = CGFloat(NSNotFound)\n    }\n\n    fileprivate func setupImageView(_ imageView: UIImageView) {\n        if let image = saleArtwork.artwork.defaultImage {\n\n            // We'll try to retrieve the thumbnail image from the cache. If we don't have it, we'll set the background colour to grey to indicate that we're downloading it.\n            let key = SDWebImageManager.shared().cacheKey(for: image.thumbnailURL() as URL!)\n            let thumbnailImage = SDImageCache.shared().imageFromDiskCache(forKey: key)\n            if thumbnailImage == nil {\n                imageView.backgroundColor = .artsyGrayLight()\n            }\n\n            imageView.sd_setImage(with: image.fullsizeURL(), placeholderImage: thumbnailImage, options: [], completed: { (image, _, _, _) in\n                // If the image was successfully downloaded, make sure we aren't still displaying grey.\n                if image != nil {\n                    imageView.backgroundColor = .clear\n                }\n            })\n\n            let heightConstraintNumber = { () -> CGFloat in\n                if let aspectRatio = image.aspectRatio {\n                    if aspectRatio != 0 {\n                        return min(400, CGFloat(538) / aspectRatio)\n                    }\n                }\n                return 400\n            }()\n            imageView.constrainHeight( \"\\(heightConstraintNumber)\" )\n\n            imageView.contentMode = .scaleAspectFit\n            imageView.isUserInteractionEnabled = true\n\n            let recognizer = UITapGestureRecognizer()\n            imageView.addGestureRecognizer(recognizer)\n            recognizer\n                .rx.event\n                .asObservable()\n                .subscribe(onNext: { [weak self] _ in\n                     self?.performSegue(.ZoomIntoArtwork)\n                })\n                .addDisposableTo(rx_disposeBag)\n        }\n    }\n\n    fileprivate func setupAdditionalDetailStackView() {\n        enum LabelType {\n            case header\n            case body\n        }\n\n        func label(_ type: LabelType, layout: Observable<Void>? = nil) -> UILabel {\n            let (label, fontSize) = { () -> (UILabel, CGFloat) in\n                switch type {\n                case .header:\n                    return (ARSansSerifLabel(), 14)\n                case .body:\n                    return (ARSerifLabel(), 16)\n                }\n            }()\n\n            label.font = label.font.withSize(fontSize)\n            label.lineBreakMode = .byWordWrapping\n\n            layout?\n                .take(1)\n                .subscribe(onNext: { [weak label] (_) in\n                    if let label = label {\n                        label.preferredMaxLayoutWidth = label.frame.width\n                    }\n                })\n                .addDisposableTo(rx_disposeBag)\n\n            return label\n        }\n\n        additionalDetailScrollView.stackView.bottomMarginHeight = 40\n\n        let imageView = UIImageView()\n        additionalDetailScrollView.stackView.addSubview(imageView, withTopMargin: \"0\", sideMargin: \"40\")\n        setupImageView(imageView)\n\n        let additionalInfoHeaderLabel = label(.header)\n        additionalInfoHeaderLabel.text = \"Additional Information\"\n        additionalDetailScrollView.stackView.addSubview(additionalInfoHeaderLabel, withTopMargin: \"20\", sideMargin: \"40\")\n\n        if let blurb = saleArtwork.artwork.blurb {\n            let blurbLabel = label(.body, layout: layoutSubviews)\n            blurbLabel.attributedText = MarkdownParser().attributedString( fromMarkdownString: blurb )\n            additionalDetailScrollView.stackView.addSubview(blurbLabel, withTopMargin: \"22\", sideMargin: \"40\")\n        }\n\n        let additionalInfoLabel = label(.body, layout: layoutSubviews)\n        additionalInfoLabel.attributedText = MarkdownParser().attributedString( fromMarkdownString: saleArtwork.artwork.additionalInfo )\n        additionalDetailScrollView.stackView.addSubview(additionalInfoLabel, withTopMargin: \"22\", sideMargin: \"40\")\n\n        retrieveAdditionalInfo()\n            .filter { info in\n                return info.isNotEmpty\n            }.subscribe(onNext: { [weak self] info in\n                additionalInfoLabel.attributedText = MarkdownParser().attributedString(fromMarkdownString: info)\n                self?.view.setNeedsLayout()\n                self?.view.layoutIfNeeded()\n            })\n            .addDisposableTo(rx_disposeBag)\n\n        if let artist = artist() {\n            retrieveArtistBlurb()\n                .filter { blurb in\n                    return blurb.isNotEmpty\n                }\n                .subscribe(onNext: { [weak self] blurb in\n                    guard let me = self else { return }\n\n                    let aboutArtistHeaderLabel = label(.header)\n                    aboutArtistHeaderLabel.text = \"About \\(artist.name)\"\n                    me.additionalDetailScrollView.stackView.addSubview(aboutArtistHeaderLabel, withTopMargin: \"22\", sideMargin: \"40\")\n\n                    let aboutAristLabel = label(.body, layout: me.layoutSubviews)\n                    aboutAristLabel.attributedText = MarkdownParser().attributedString(fromMarkdownString: blurb)\n                    me.additionalDetailScrollView.stackView.addSubview(aboutAristLabel, withTopMargin: \"22\", sideMargin: \"40\")\n                })\n                .addDisposableTo(rx_disposeBag)\n        }\n    }\n\n    fileprivate func artist() -> Artist? {\n        return saleArtwork.artwork.artists?.first\n    }\n\n    fileprivate func retrieveImageRights() -> Observable<String> {\n        let artwork = saleArtwork.artwork\n\n        if let imageRights = artwork.imageRights {\n            return .just(imageRights)\n\n        } else {\n            return artistInfo.map { json in\n                    return (json as AnyObject)[\"image_rights\"] as? String\n                }\n                .filterNil()\n                .doOnNext { imageRights in\n                    artwork.imageRights = imageRights\n                }\n        }\n    }\n\n    fileprivate func retrieveAdditionalInfo() -> Observable<String> {\n        let artwork = saleArtwork.artwork\n\n        if let additionalInfo = artwork.additionalInfo {\n            return .just(additionalInfo)\n        } else {\n            return artistInfo.map { json in\n                    return (json as AnyObject)[\"additional_information\"] as? String\n                }\n                .filterNil()\n                .doOnNext { info in\n                    artwork.additionalInfo = info\n                }\n        }\n    }\n\n    fileprivate func retrieveArtistBlurb() -> Observable<String> {\n        guard let artist = artist() else {\n            return .empty()\n        }\n\n        if let blurb = artist.blurb {\n            return .just(blurb)\n        } else {\n            let retrieveArtist = provider.request(.artist(id: artist.id))\n                .filterSuccessfulStatusCodes()\n                .mapJSON()\n\n            return retrieveArtist.map { json in\n                    return (json as AnyObject)[\"blurb\"] as? String\n                }\n                .filterNil()\n                .doOnNext { blurb in\n                    artist.blurb = blurb\n                }\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Sale Artwork Details/SaleArtworkZoomViewController.swift",
    "content": "import Foundation\nimport ARTiledImageView\n\nclass SaleArtworkZoomViewController: UIViewController {\n    var dataSource: TiledImageDataSourceWithImage!\n    var saleArtwork: SaleArtwork!\n    var tiledImageView: ARTiledImageScrollView!\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        let image = saleArtwork.artwork.defaultImage!\n        dataSource = TiledImageDataSourceWithImage(image:image)\n\n        let tiledView = ARTiledImageScrollView(frame:view.bounds)\n        tiledView.decelerationRate = UIScrollViewDecelerationRateFast\n        tiledView.showsHorizontalScrollIndicator = false\n        tiledView.showsVerticalScrollIndicator = false\n        tiledView.contentMode = .scaleAspectFit\n        tiledView.dataSource = dataSource\n        tiledView.backgroundImageURL = image.fullsizeURL() as URL!\n\n        view.insertSubview(tiledView, at:0)\n        tiledImageView = tiledView\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n\n        tiledImageView.zoom(toFit: false)\n    }\n\n    @IBAction func backButtonTapped(_ sender: AnyObject) {\n        _ = self.navigationController?.popViewController(animated: true)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/Sale Artwork Details/WhitespaceGobbler.swift",
    "content": "import UIKit\n\nclass WhitespaceGobbler: UIView {\n    override init(frame: CGRect) {\n        super.init(frame: frame)\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n    }\n\n    convenience init() {\n        self.init(frame: CGRect.zero)\n\n        setContentHuggingPriority(50, for: .vertical)\n        setContentHuggingPriority(50, for: .horizontal)\n        backgroundColor = .clear\n    }\n\n    override var intrinsicContentSize: CGSize {\n        return CGSize.zero\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/UIKit+Rx.swift",
    "content": "import UIKit\nimport RxSwift\nimport RxCocoa\n\nextension UIView {\n    public var rx_hidden: AnyObserver<Bool> {\n        return AnyObserver { [weak self] event in\n            MainScheduler.ensureExecutingOnScheduler()\n\n            switch event {\n            case .next(let value):\n                self?.isHidden = value\n            case .error(let error):\n                bindingErrorToInterface(error)\n                break\n            case .completed:\n                break\n            }\n        }\n    }\n}\n\nextension UITextField {\n    var rx_returnKey: Observable<Void> {\n        return self.rx.controlEvent(.editingDidEndOnExit).takeUntil(rx.deallocated)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/UILabel+Fonts.swift",
    "content": "import UIKit\n\nextension UILabel {\n    func makeSubstringsBold(_ text: [String]) {\n        text.forEach { self.makeSubstringBold($0) }\n    }\n\n    func makeSubstringBold(_ boldText: String) {\n        let attributedText = self.attributedText!.mutableCopy() as! NSMutableAttributedString\n\n        let range = ((self.text ?? \"\") as NSString).range(of: boldText)\n        if range.location != NSNotFound {\n            attributedText.setAttributes([NSFontAttributeName: UIFont.serifSemiBoldFont(withSize: self.font.pointSize)], range: range)\n        }\n\n        self.attributedText = attributedText\n    }\n\n    func makeSubstringsItalic(_ text: [String]) {\n        text.forEach { self.makeSubstringItalic($0) }\n    }\n\n    func makeSubstringItalic(_ italicText: String) {\n        let attributedText = self.attributedText!.mutableCopy() as! NSMutableAttributedString\n\n        let range = ((self.text ?? \"\") as NSString).range(of: italicText)\n        if range.location != NSNotFound {\n            attributedText.setAttributes([NSFontAttributeName: UIFont.serifItalicFont(withSize: self.font.pointSize)], range: range)\n        }\n\n        self.attributedText = attributedText\n    }\n\n    func setLineHeight(_ lineHeight: Int) {\n        let displayText = text ?? \"\"\n        let attributedString = self.attributedText!.mutableCopy() as! NSMutableAttributedString\n        let paragraphStyle = NSMutableParagraphStyle()\n        paragraphStyle.lineSpacing = CGFloat(lineHeight)\n        paragraphStyle.alignment = textAlignment\n        attributedString.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: NSMakeRange(0, displayText.count))\n\n        attributedText = attributedString\n    }\n\n    func makeTransparent() {\n        isOpaque = false\n        backgroundColor = .clear\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/UIView+LongPressDisplayMessage.swift",
    "content": "import UIKit\nimport RxSwift\n\nprivate func alertController(_ message: String, title: String) -> UIAlertController {\n    let alertController =  UIAlertController(title: title, message: message, preferredStyle: .alert)\n\n    alertController.addAction(UIAlertAction(title: \"OK\", style: .default, handler: nil))\n\n    return alertController\n}\n\nextension UIView {\n    typealias PresentAlertClosure = (_ alertController: UIAlertController) -> Void\n\n    func presentOnLongPress(_ message: String, title: String, closure: @escaping PresentAlertClosure) {\n        let recognizer = UILongPressGestureRecognizer()\n\n        recognizer\n            .rx.event\n            .subscribe(onNext: { _ in\n                closure(alertController(message, title: title))\n            })\n            .addDisposableTo(rx_disposeBag)\n\n        isUserInteractionEnabled = true\n        addGestureRecognizer(recognizer)\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/Kiosk/UIViewController+Bidding.swift",
    "content": "import UIKit\nimport ARAnalytics\n\nextension UIViewController {\n    func bid(auctionID: String, saleArtwork: SaleArtwork, allowAnimations: Bool, provider: Networking) {\n        ARAnalytics.event(\"Bid Button Tapped\", withProperties: [\"id\": saleArtwork.artwork.id])\n\n        let storyboard = UIStoryboard.fulfillment()\n        let containerController = storyboard.instantiateInitialViewController() as! FulfillmentContainerViewController\n        containerController.allowAnimations = allowAnimations\n\n        if let internalNav: FulfillmentNavigationController = containerController.internalNavigationController() {\n            internalNav.auctionID = auctionID\n            internalNav.bidDetails.saleArtwork = saleArtwork\n            internalNav.provider = provider\n        }\n\n        // Present the VC, then once it's ready trigger it's own showing animations\n        appDelegate().appViewController.present(containerController, animated: false) {\n            containerController.viewDidAppearAnimation(containerController.allowAnimations)\n        }\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Performance-Code/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Artsy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "SourceryTests/Stub/Result/AllTypealiases.swift",
    "content": "// Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n\nstruct AnyBarAlias: HasBar {\n    var bar: BarBaz\n}\n\nstruct AnyFooAlias: HasFoo {\n    var foo: FooBarBaz\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Result/Basic+Other+SourceryTemplates.swift",
    "content": "// Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\nextension BarBaz: Equatable {}\n\n// BarBaz has Annotations\n\nfunc == (lhs: BarBaz, rhs: BarBaz) -> Bool {\n    if lhs.parent != rhs.parent { return false }\n    if lhs.otherVariable != rhs.otherVariable { return false }\n\n    return true\n}\n\nextension FooBarBaz: Equatable {}\n\nfunc == (lhs: FooBarBaz, rhs: FooBarBaz) -> Bool {\n    if lhs.name != rhs.name { return false }\n    if lhs.value != rhs.value { return false }\n\n    return true\n}\n\nextension FooSubclass: Equatable {}\n\nfunc == (lhs: FooSubclass, rhs: FooSubclass) -> Bool {\n    if lhs.other != rhs.other { return false }\n\n    return true\n}\n\n// Found 3 types\n// SourceryTemplateEJS Found 3 types\n// SourceryTemplateStencil found 3 types\n"
  },
  {
    "path": "SourceryTests/Stub/Result/Basic+Other+SourceryTemplates_Linux.swift",
    "content": "// Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\nextension BarBaz: Equatable {}\n\n// BarBaz has Annotations\n\nfunc == (lhs: BarBaz, rhs: BarBaz) -> Bool {\n    if lhs.parent != rhs.parent { return false }\n    if lhs.otherVariable != rhs.otherVariable { return false }\n\n    return true\n}\n\nextension FooBarBaz: Equatable {}\n\nfunc == (lhs: FooBarBaz, rhs: FooBarBaz) -> Bool {\n    if lhs.name != rhs.name { return false }\n    if lhs.value != rhs.value { return false }\n\n    return true\n}\n\nextension FooSubclass: Equatable {}\n\nfunc == (lhs: FooSubclass, rhs: FooSubclass) -> Bool {\n    if lhs.other != rhs.other { return false }\n\n    return true\n}\n\n// Found 3 types\n// SourceryTemplateStencil found 3 types\n"
  },
  {
    "path": "SourceryTests/Stub/Result/Basic+Other.swift",
    "content": "// Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\nextension BarBaz: Equatable {}\n\n// BarBaz has Annotations\n\nfunc == (lhs: BarBaz, rhs: BarBaz) -> Bool {\n    if lhs.parent != rhs.parent { return false }\n    if lhs.otherVariable != rhs.otherVariable { return false }\n\n    return true\n}\n\nextension FooBarBaz: Equatable {}\n\nfunc == (lhs: FooBarBaz, rhs: FooBarBaz) -> Bool {\n    if lhs.name != rhs.name { return false }\n    if lhs.value != rhs.value { return false }\n\n    return true\n}\n\nextension FooSubclass: Equatable {}\n\nfunc == (lhs: FooSubclass, rhs: FooSubclass) -> Bool {\n    if lhs.other != rhs.other { return false }\n\n    return true\n}\n\n// Found 3 types\n"
  },
  {
    "path": "SourceryTests/Stub/Result/Basic.swift",
    "content": "// Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\nextension BarBaz: Equatable {}\n\n// BarBaz has Annotations\n\nfunc == (lhs: BarBaz, rhs: BarBaz) -> Bool {\n    if lhs.parent != rhs.parent { return false }\n    if lhs.otherVariable != rhs.otherVariable { return false }\n\n    return true\n}\n\nextension FooBarBaz: Equatable {}\n\nfunc == (lhs: FooBarBaz, rhs: FooBarBaz) -> Bool {\n    if lhs.name != rhs.name { return false }\n    if lhs.value != rhs.value { return false }\n\n    return true\n}\n\nextension FooSubclass: Equatable {}\n\nfunc == (lhs: FooSubclass, rhs: FooSubclass) -> Bool {\n    if lhs.other != rhs.other { return false }\n\n    return true\n}\n\n"
  },
  {
    "path": "SourceryTests/Stub/Result/BasicFooExcluded.swift",
    "content": "// Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\nextension BarBaz: Equatable {}\n\n// BarBaz has Annotations\n\nfunc == (lhs: BarBaz, rhs: BarBaz) -> Bool {\n    if lhs.parent != rhs.parent { return false }\n    if lhs.otherVariable != rhs.otherVariable { return false }\n\n    return true\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Result/Function.swift",
    "content": "// Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\nfunc wrappedPerformFoo(value: FooBarBaz) {\n    performFoo(value: value)\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Result/Other.swift",
    "content": "// Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// Found 3 types\n"
  },
  {
    "path": "SourceryTests/Stub/Result/ProtocolCompositions.swift",
    "content": "// Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n\nstruct AnyFooBar: FooBar {\n\n    // MARK: HasFoo properties\n    var foo: FooBarBaz\n\n    // MARK: HasBar properties\n    var bar: BarBaz\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Result/Typealiases.swift",
    "content": "// Generated using Sourcery Major.Minor.Patch — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// Typealiases in BarBaz\n// - name 'List', type '[FooBarBaz]'\n// Typealiases in FooBarBaz\n// - name 'Name', type '[String: String]'\n// Typealiases in FooSubclass\n"
  },
  {
    "path": "SourceryTests/Stub/Source/Bar.swift",
    "content": "import Foundation\n\n// sourcery: this will not appear under FooBarBaz\n\n/// Documentation for bar\n// sourcery: showComment\n/// other documentation\nclass BarBaz: FooBarBaz, AutoEquatable {\n    typealias List = [FooBarBaz]\n    var parent: FooBarBaz? = nil\n    var otherVariable: Int = 0\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Source/Foo.swift",
    "content": "import Foundation\n\nclass FooBarBaz {\n    typealias Name = [String: String]\n\n    var name: String = \"\"\n    var value: Int = 0\n}\n\nprotocol AutoEquatable {}\n\nclass FooSubclass: FooBarBaz, AutoEquatable {\n    var other: String = \"\"\n}\n\nfunc performFoo(value: FooBarBaz) {\n\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Source/FooBar.swift",
    "content": "import Foundation\n\nprotocol HasFoo {\n    var foo: FooBarBaz { get }\n}\nprotocol HasBar {\n    var bar: BarBaz { get }\n}\n\n// sourcery: AutoStruct\ntypealias FooBar = HasFoo & HasBar\n\n// sourcery: AutoStruct\ntypealias FooAlias = HasFoo\n\n// sourcery: AutoStruct\ntypealias BarAlias = HasBar\n"
  },
  {
    "path": "SourceryTests/Stub/Source/TestProject/TestProject/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "SourceryTests/Stub/Source/TestProject/TestProject.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 48;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t6396C56D202B236B00BC2767 /* Bar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6396C56B202B236B00BC2767 /* Bar.swift */; };\n\t\t6396C56E202B236B00BC2767 /* Foo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6396C56C202B236B00BC2767 /* Foo.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t6396C556202B234E00BC2767 /* TestProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestProject.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6396C565202B234E00BC2767 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t6396C56B202B236B00BC2767 /* Bar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Bar.swift; path = ../../Bar.swift; sourceTree = \"<group>\"; };\n\t\t6396C56C202B236B00BC2767 /* Foo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Foo.swift; path = ../../Foo.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t6396C553202B234E00BC2767 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t6396C54D202B234E00BC2767 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6396C558202B234E00BC2767 /* TestProject */,\n\t\t\t\t6396C557202B234E00BC2767 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6396C557202B234E00BC2767 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6396C556202B234E00BC2767 /* TestProject.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6396C558202B234E00BC2767 /* TestProject */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6396C565202B234E00BC2767 /* Info.plist */,\n\t\t\t\t6396C56B202B236B00BC2767 /* Bar.swift */,\n\t\t\t\t6396C56C202B236B00BC2767 /* Foo.swift */,\n\t\t\t);\n\t\t\tpath = TestProject;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t6396C555202B234E00BC2767 /* TestProject */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 6396C568202B234E00BC2767 /* Build configuration list for PBXNativeTarget \"TestProject\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t6396C552202B234E00BC2767 /* Sources */,\n\t\t\t\t6396C553202B234E00BC2767 /* Frameworks */,\n\t\t\t\t6396C554202B234E00BC2767 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = TestProject;\n\t\t\tproductName = TestProject;\n\t\t\tproductReference = 6396C556202B234E00BC2767 /* TestProject.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t6396C54E202B234E00BC2767 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0920;\n\t\t\t\tLastUpgradeCheck = 0920;\n\t\t\t\tORGANIZATIONNAME = Pixle;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t6396C555202B234E00BC2767 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.2;\n\t\t\t\t\t\tLastSwiftMigration = 0920;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 6396C551202B234E00BC2767 /* Build configuration list for PBXProject \"TestProject\" */;\n\t\t\tcompatibilityVersion = \"Xcode 8.0\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 6396C54D202B234E00BC2767;\n\t\t\tproductRefGroup = 6396C557202B234E00BC2767 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t6396C555202B234E00BC2767 /* TestProject */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t6396C554202B234E00BC2767 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t6396C552202B234E00BC2767 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6396C56E202B236B00BC2767 /* Foo.swift in Sources */,\n\t\t\t\t6396C56D202B236B00BC2767 /* Bar.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t6396C566202B234E00BC2767 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.2;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t6396C567202B234E00BC2767 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.2;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t6396C569202B234E00BC2767 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = TestProject/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = Pixle.TestProject;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t6396C56A202B234E00BC2767 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = TestProject/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = Pixle.TestProject;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t6396C551202B234E00BC2767 /* Build configuration list for PBXProject \"TestProject\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6396C566202B234E00BC2767 /* Debug */,\n\t\t\t\t6396C567202B234E00BC2767 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t6396C568202B234E00BC2767 /* Build configuration list for PBXNativeTarget \"TestProject\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6396C569202B234E00BC2767 /* Debug */,\n\t\t\t\t6396C56A202B234E00BC2767 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 6396C54E202B234E00BC2767 /* Project object */;\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Source/TestProject/TestProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:TestProject.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "SourceryTests/Stub/Source_Linux/Bar.swift",
    "content": "import Foundation\n\n// sourcery: this will not appear under FooBarBaz\n\n/// Documentation for bar\n// sourcery: showComment\n/// other documentation\nclass BarBaz: FooBarBaz, AutoEquatable {\n    // Note: when Swift Linux doesn't bug out on [String: String], add a test back for it\n\t// See https://github.com/krzysztofzablocki/Sourcery/pull/1208#issuecomment-1752185381\n    // typealias List = [FooBarBaz]\n    var parent: FooBarBaz? = nil\n    var otherVariable: Int = 0\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Source_Linux/Foo.swift",
    "content": "import Foundation\n\nclass FooBarBaz {\n\t// Note: when Swift Linux doesn't bug out on [String: String], add a test back for it\n\t// See https://github.com/krzysztofzablocki/Sourcery/pull/1208#issuecomment-1752185381\n    // typealias Name = String\n\n    var name: String = \"\"\n    var value: Int = 0\n}\n\nprotocol AutoEquatable {}\n\nclass FooSubclass: FooBarBaz, AutoEquatable {\n    var other: String = \"\"\n}\n\nfunc performFoo(value: FooBarBaz) {\n\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Source_Linux/FooBar.swift",
    "content": "import Foundation\n\nprotocol HasFoo {\n    var foo: FooBarBaz { get }\n}\nprotocol HasBar {\n    var bar: BarBaz { get }\n}\n\n// sourcery: AutoStruct\ntypealias FooBar = HasFoo & HasBar\n"
  },
  {
    "path": "SourceryTests/Stub/Source_Linux/TestProject/TestProject/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "SourceryTests/Stub/Source_Linux/TestProject/TestProject.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 48;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t6396C56D202B236B00BC2767 /* Bar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6396C56B202B236B00BC2767 /* Bar.swift */; };\n\t\t6396C56E202B236B00BC2767 /* Foo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6396C56C202B236B00BC2767 /* Foo.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t6396C556202B234E00BC2767 /* TestProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestProject.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6396C565202B234E00BC2767 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t6396C56B202B236B00BC2767 /* Bar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Bar.swift; path = ../../Bar.swift; sourceTree = \"<group>\"; };\n\t\t6396C56C202B236B00BC2767 /* Foo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Foo.swift; path = ../../Foo.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t6396C553202B234E00BC2767 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t6396C54D202B234E00BC2767 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6396C558202B234E00BC2767 /* TestProject */,\n\t\t\t\t6396C557202B234E00BC2767 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6396C557202B234E00BC2767 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6396C556202B234E00BC2767 /* TestProject.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6396C558202B234E00BC2767 /* TestProject */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6396C565202B234E00BC2767 /* Info.plist */,\n\t\t\t\t6396C56B202B236B00BC2767 /* Bar.swift */,\n\t\t\t\t6396C56C202B236B00BC2767 /* Foo.swift */,\n\t\t\t);\n\t\t\tpath = TestProject;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t6396C555202B234E00BC2767 /* TestProject */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 6396C568202B234E00BC2767 /* Build configuration list for PBXNativeTarget \"TestProject\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t6396C552202B234E00BC2767 /* Sources */,\n\t\t\t\t6396C553202B234E00BC2767 /* Frameworks */,\n\t\t\t\t6396C554202B234E00BC2767 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = TestProject;\n\t\t\tproductName = TestProject;\n\t\t\tproductReference = 6396C556202B234E00BC2767 /* TestProject.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t6396C54E202B234E00BC2767 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0920;\n\t\t\t\tLastUpgradeCheck = 0920;\n\t\t\t\tORGANIZATIONNAME = Pixle;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t6396C555202B234E00BC2767 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.2;\n\t\t\t\t\t\tLastSwiftMigration = 0920;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 6396C551202B234E00BC2767 /* Build configuration list for PBXProject \"TestProject\" */;\n\t\t\tcompatibilityVersion = \"Xcode 8.0\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 6396C54D202B234E00BC2767;\n\t\t\tproductRefGroup = 6396C557202B234E00BC2767 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t6396C555202B234E00BC2767 /* TestProject */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t6396C554202B234E00BC2767 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t6396C552202B234E00BC2767 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6396C56E202B236B00BC2767 /* Foo.swift in Sources */,\n\t\t\t\t6396C56D202B236B00BC2767 /* Bar.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t6396C566202B234E00BC2767 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.2;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t6396C567202B234E00BC2767 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.2;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t6396C569202B234E00BC2767 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = TestProject/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = Pixle.TestProject;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t6396C56A202B234E00BC2767 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = TestProject/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = Pixle.TestProject;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t6396C551202B234E00BC2767 /* Build configuration list for PBXProject \"TestProject\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6396C566202B234E00BC2767 /* Debug */,\n\t\t\t\t6396C567202B234E00BC2767 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t6396C568202B234E00BC2767 /* Build configuration list for PBXNativeTarget \"TestProject\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6396C569202B234E00BC2767 /* Debug */,\n\t\t\t\t6396C56A202B234E00BC2767 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 6396C54E202B234E00BC2767 /* Project object */;\n}\n"
  },
  {
    "path": "SourceryTests/Stub/Source_Linux/TestProject/TestProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:TestProject.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "SourceryTests/Stub/Stubs.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 13/12/2016.\n// Copyright (c) 2016 Pixle. All rights reserved.\n//\n\nimport Foundation\nimport PathKit\nimport Quick\n\n#if SWIFT_PACKAGE\n@testable import SourceryLib\n#else\n@testable import Sourcery\n#endif\n\nprivate class Reference {}\n\nenum Stubs {\n    #if SWIFT_PACKAGE\n    static let bundle = Bundle.module\n    #else\n    static let bundle = Bundle(for: Reference.self)\n    #endif\n    private static let basePath = bundle.resourcePath.flatMap { Path($0) }!\n    static let swiftTemplates = basePath + Path(\"SwiftTemplates/\")\n    static let jsTemplates = basePath + Path(\"JavaScriptTemplates/\")\n#if canImport(ObjectiveC)\n    static let sourceDirectory = basePath + Path(\"Source/\")\n#else\n    static let sourceDirectory = basePath + Path(\"Source_Linux/\")\n#endif\n    static let sourceForPerformance = basePath + Path(\"Performance-Code/\")\n    static let sourceForDryRun = basePath + Path(\"DryRun-Code/\")\n    static let resultDirectory = basePath + Path(\"Result/\")\n    static let templateDirectory = basePath + Path(\"Templates\")\n    static let errorsDirectory = basePath + Path(\"Errors/\")\n    static let configs = basePath + Path(\"Configs/\")\n\n    static func cleanTemporarySourceryDir() -> Path {\n        return Path.cleanTemporaryDir(name: \"Sourcery\")\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/Equality.swift",
    "content": "import SourceryRuntime\n\nenum EqualityGenerator {\n    static func generate(for types: Types) -> String {\n        return types.classes.map { $0.generateEquality() }.joined(separator: \"\\n\")\n    }\n}\n\nextension Class {\n    func generateEquality() -> String {\n        let propertyComparisons = variables.map { $0.generateEquality() }.joined(separator: \"\\n    \")\n\n        return \"\"\"\n        extension \\(name): Equatable {}\n        \\(hasAnnotations())\n        func == (lhs: \\(name), rhs: \\(name)) -> Bool {\n            \\(propertyComparisons)\n        \n            return true\n        }\n        \n        \"\"\"\n    }\n\n    func hasAnnotations() -> String {\n        guard annotations[\"showComment\"] != nil else {\n            return \"\"\n        }\n        return \"\"\"\n\n        // \\(name) has Annotations\n        \n        \"\"\"\n    }\n}\n\nextension Variable {\n    func generateEquality() -> String {\n        return \"if lhs.\\(name) != rhs.\\(name) { return false }\"\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/Equality.swifttemplate",
    "content": "<% for type in types.classes { -%>\n    <%_ %><%# this is a comment -%>\nextension <%= type.name %>: Equatable {}\n\n<%_ if type.annotations[\"showComment\"] != nil { -%>\n<% _%> // <%= type.name %> has Annotations\n\n<% } -%>\nfunc == (lhs: <%= type.name %>, rhs: <%= type.name %>) -> Bool {\n<%_ for variable in type.variables { -%>\n    if lhs.<%= variable.name %> != rhs.<%= variable.name %> { return false }\n<%_ } %>\n    return true\n}\n\n<% } -%>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/Function.swifttemplate",
    "content": "<%_\nfor function in functions {\n    let functionName = String(function.name.split(separator: \"(\")[0])\n    let capitalizedName = functionName.prefix(1).uppercased() + functionName.dropFirst()\n-%>\nfunc wrapped<%= capitalizedName %>(<%= function.parameters.map { \"\\($0.name): \\($0.typeName.name)\" }.joined(separator: \", \") %>) {\n    <%= functionName %>(<%= function.parameters.map { \"\\($0.name): \\($0.name)\" }.joined(separator: \", \") %>)\n}\n<%_\n}\n-%>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/IncludeCycle.swifttemplate",
    "content": "<%- include(\"includeCycle/One.swifttemplate\") -%>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/IncludeFile.swifttemplate",
    "content": "<%- includeFile(\"Equality.swift\") -%><%= EqualityGenerator.generate(for: types) %>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/IncludeFileNoExtension.swifttemplate",
    "content": "<%- includeFile(\"Equality\") -%><%= EqualityGenerator.generate(for: types) %>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/Includes.swifttemplate",
    "content": "<%- include(\"Equality.swifttemplate\") -%><%- include(\"Other.swifttemplate\") -%>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/IncludesNoExtension.swifttemplate",
    "content": "<%- include(\"Equality\") -%><%- include(\"Other\") -%>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/Invalid.swifttemplate",
    "content": "<%= %>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/InvalidTag.swifttemplate",
    "content": "<% for type in types.all {%>\nextension <%= type.name > {\n}\n<%}%>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/Other.swifttemplate",
    "content": "// Found <%= types.all.count %> types\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/Runtime.swifttemplate",
    "content": "<%= types.implementing[\"Some\"] %>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/SelfIncludeCycle.swifttemplate",
    "content": "<%- include(\"SelfIncludeCycle.swifttemplate\") -%>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/SubfolderFileIncludes.swifttemplate",
    "content": "<%- includeFile(\"lib/Equality.swift\") -%><%= EqualityGenerator.generate(for: types) %>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/SubfolderIncludes.swifttemplate",
    "content": "<%- include(\"lib/One.swifttemplate\") -%>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/Throws.swifttemplate",
    "content": "<% fatalError(\"Template not implemented\") %>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/includeCycle/One.swifttemplate",
    "content": "<%- include(\"Two.swifttemplate\") -%>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/includeCycle/Two.swifttemplate",
    "content": "<%- include(\"One.swifttemplate\") -%>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/lib/Equality.swift",
    "content": "import SourceryRuntime\n\nenum EqualityGenerator {\n    static func generate(for types: Types) -> String {\n        return types.classes.map { $0.generateEquality() }.joined(separator: \"\\n\")\n    }\n}\n\nextension Class {\n    func generateEquality() -> String {\n        let propertyComparisons = variables.map { $0.generateEquality() }.joined(separator: \"\\n    \")\n\n        return \"\"\"\n        extension \\(name): Equatable {}\n        \\(hasAnnotations())\n        func == (lhs: \\(name), rhs: \\(name)) -> Bool {\n            \\(propertyComparisons)\n\n            return true\n        }\n\n        \"\"\"\n    }\n\n    func hasAnnotations() -> String {\n        guard annotations[\"showComment\"] != nil else {\n            return \"\"\n        }\n        return \"\"\"\n\n        // \\(name) has Annotations\n\n        \"\"\"\n    }\n}\n\nextension Variable {\n    func generateEquality() -> String {\n        return \"if lhs.\\(name) != rhs.\\(name) { return false }\"\n    }\n}\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/lib/One.swifttemplate",
    "content": "<%- include(\"Two.swifttemplate\") -%>\n"
  },
  {
    "path": "SourceryTests/Stub/SwiftTemplates/lib/Two.swifttemplate",
    "content": "<%- include(\"../Equality.swifttemplate\") -%>\n"
  },
  {
    "path": "SourceryTests/Stub/Templates/Basic.stencil",
    "content": "\n{% for type in types.classes %}\nextension {{ type.name }}: Equatable {}\n\n{% if type.annotations.showComment %} // {{ type.name }} has Annotations {% endif %}\n\nfunc == (lhs: {{ type.name }}, rhs: {{ type.name }}) -> Bool {\n    {% for variable in type.variables %} if lhs.{{ variable.name }} != rhs.{{ variable.name }} { return false }\n    {% endfor %}\n    return true\n}\n{% endfor %}\n"
  },
  {
    "path": "SourceryTests/Stub/Templates/GenerationWays.stencil",
    "content": "\n// swiftlint:disable file_length\nfileprivate func compareOptionals<T>(lhs: T?, rhs: T?, compare: (_ lhs: T, _ rhs: T) -> Bool) -> Bool {\n    switch (lhs, rhs) {\n    case let (lValue?, rValue?):\n        return compare(lValue, rValue)\n    case (nil, nil):\n        return true\n    default:\n        return false\n    }\n}\n\nfileprivate func compareArrays<T>(lhs: [T], rhs: [T], compare: (_ lhs: T, _ rhs: T) -> Bool) -> Bool {\n    guard lhs.count == rhs.count else { return false }\n    for (idx, lhsItem) in lhs.enumerated() {\n        guard compare(lhsItem, rhs[idx]) else { return false }\n    }\n\n    return true\n}\n\n{% macro compareVariables variables %}\n{% for variable in variables where variable.readAccess != \"private\" and variable.readAccess != \"fileprivate\" %}{% if not variable.annotations.skipEquality %}guard {% if not variable.isOptional %}{% if not variable.annotations.arrayEquality %}lhs.{{ variable.name }} == rhs.{{ variable.name }}{% else %}compareArrays(lhs: lhs.{{ variable.name }}, rhs: rhs.{{ variable.name }}, compare: ==){% endif %}{% else %}compareOptionals(lhs: lhs.{{ variable.name }}, rhs: rhs.{{ variable.name }}, compare: ==){% endif %} else { return false }{% endif %}\n{% endfor %}\n{% endmacro %}\n\n// MARK: - AutoEquatable for classes, protocols, structs\n{% for type in types.types|!enum where type.implements.AutoEquatable or type|annotated:\"AutoEquatable\" %}\n\n// sourcery:inline:{{ type.name }}.AutoEquatable\n// MARK: - {{ type.name }} AutoEquatable\n{% if not type.kind == \"protocol\" and not type.based.NSObject %}extension {{ type.name }}: Equatable {}{% endif %}\n{% if type.supertype.based.Equatable or type.supertype.implements.AutoEquatable or type.supertype|annotated:\"AutoEquatable\" %}THIS WONT COMPILE, WE DONT SUPPORT INHERITANCE for AutoEquatable{% endif %}\n{{ type.accessLevel }} func == (lhs: {{ type.name }}, rhs: {{ type.name }}) -> Bool {\n    {% if not type.kind == \"protocol\" %}\n    {% call compareVariables type.storedVariables %}\n    {% else %}\n    {% call compareVariables type.allVariables %}\n    {% endif %}\n    return true\n}\n\n// sourcery:end\n{% endfor %}\n\n// MARK: - AutoEquatable for Enums\n{% for type in types.enums where type.implements.AutoEquatable or type|annotated:\"AutoEquatable\" %}\n\n// sourcery:file:Generated/{{ type.name }}+TemplateName\n// MARK: - {{ type.name }} AutoEquatable\nextension {{ type.name }}: Equatable {}\n{{ type.accessLevel }} func == (lhs: {{ type.name }}, rhs: {{ type.name }}) -> Bool {\n    switch (lhs, rhs) {\n        {% for case in type.cases %}\n        {% if case.hasAssociatedValue %}\n        {% if case.associatedValues.count == 1 %}\n    case let (.{{ case.name }}(lhs), .{{ case.name }}(rhs)):\n        {% else %}\n        {% map case.associatedValues into lhsValues using associated %}lhs{{ associated.externalName|upperFirstLetter }}{% endmap %}\n        {% map case.associatedValues into rhsValues using associated %}rhs{{ associated.externalName|upperFirstLetter }}{% endmap %}\n    case let (.{{ case.name }}({{ lhsValues|join: \", \" }}), .{{ case.name }}({{ rhsValues|join: \", \" }})):\n        {% endif %}\n        {% else %}\n    case (.{{ case.name }}, .{{ case.name }}):\n        {% endif %}\n        {% if not case.hasAssociatedValue %}return true{% else %}\n        {% if case.associatedValues.count == 1 %}\n        return lhs == rhs\n        {% else %}\n        {% for associated in case.associatedValues %}if lhs{{ associated.externalName|upperFirstLetter }} != rhs{{ associated.externalName|upperFirstLetter }} { return false }\n        {% endfor %}return true\n        {% endif %}\n        {% endif %}\n        {% endfor %}\n        {{ 'default: return false' if type.cases.count > 1 }}\n    }\n}\n\n// sourcery:end\n{% endfor %}\n"
  },
  {
    "path": "SourceryTests/Stub/Templates/Include.stencil",
    "content": "{% include \"Partial.stencil\" %}\n"
  },
  {
    "path": "SourceryTests/Stub/Templates/Other.stencil",
    "content": "// Found {{ types.all.count }} types\n"
  },
  {
    "path": "SourceryTests/Stub/Templates/Partial.stencil",
    "content": "partial template content\n"
  },
  {
    "path": "SourceryTests/Stub/Templates/SourceryTemplateEJS.sourcerytemplate",
    "content": "{\"version\":2,\"instance\":\"eyJpZCI6IkNFOEJDQkQyLTFBODItNDQyNy1CN0M4LTM5NzVFMDRFOEUwNCIsImRlc2NyaXB0aW9uIjoiIiwiY29udGVudCI6IlwvXC8gU291cmNlcnlUZW1wbGF0ZUVKUyBGb3VuZCA8JS0gdHlwZXMuYWxsLmxlbmd0aCAlPiB0eXBlcyIsInZlcnNpb24iOjIsImZhdm9yaXRlIjp0cnVlLCJhdXRob3IiOiIiLCJ1cmwiOiIiLCJyZWdlbmVyYXRpb25Db3VudGVyIjoxLCJmaWxlVVJMIjoiZmlsZTpcL1wvXC9Vc2Vyc1wvbWVyb3dpbmdcL3dvcmtcL3ByaXZhdGVcL1NvdXJjZXJ5XC9Tb3VyY2VyeVRlc3RzXC9TdHViXC9UZW1wbGF0ZXNcL1NvdXJjZXJ5VGVtcGxhdGVFSlMuc291cmNlcnl0ZW1wbGF0ZSIsInJ1bkNvbmZpZ3VyYXRpb24iOiJzZWxlY3Rpb24iLCJzYW1wbGVDb2RlIjoic3RydWN0IEZvbyB7XG4gICAgdmFyIG51bWJlcjogSW50ID0gMlxuICAgIHZhciBuYW1lOiBTdHJpbmcgPSBcIlwiXG59XG5jbGFzcyBCb28ge30iLCJpc0xvY2tlZCI6ZmFsc2UsImtpbmQiOiJlanMiLCJ0cmltV2hpdGVzcGFjZXMiOnRydWUsIm5hbWUiOiJJbXBvcnRlZCBTb3VyY2VyeVRlc3RFSlMgMSIsImluc2VydGlvbk1vZGUiOiJlbmRPZkZpbGUifQ==\"}"
  },
  {
    "path": "SourceryTests/Stub/Templates/SourceryTemplateStencil.sourcerytemplate",
    "content": "{\"version\":2,\"instance\":\"eyJpZCI6IkU2RUVGOTZBLUY5QTktNEU4NC1CNUJGLTlCNkNFRkRFNTA1RSIsImRlc2NyaXB0aW9uIjoiIiwiY29udGVudCI6IlwvXC8gU291cmNlcnlUZW1wbGF0ZVN0ZW5jaWwgZm91bmQge3sgdHlwZXMuYWxsLmNvdW50IH19IHR5cGVzIiwidmVyc2lvbiI6MiwiZmF2b3JpdGUiOnRydWUsImF1dGhvciI6IiIsInVybCI6IiIsInJlZ2VuZXJhdGlvbkNvdW50ZXIiOjAsImZpbGVVUkwiOiJmaWxlOlwvXC9cL1VzZXJzXC9tZXJvd2luZ1wvd29ya1wvcHJpdmF0ZVwvU291cmNlcnlcL1NvdXJjZXJ5VGVzdHNcL1N0dWJcL1RlbXBsYXRlc1wvU291cmNlcnlUZW1wbGF0ZVN0ZW5jaWwuc291cmNlcnl0ZW1wbGF0ZSIsInJ1bkNvbmZpZ3VyYXRpb24iOiJzZWxlY3Rpb24iLCJzYW1wbGVDb2RlIjoic3RydWN0IEZvbyB7XG4gICAgdmFyIG51bWJlcjogSW50ID0gMlxuICAgIHZhciBuYW1lOiBTdHJpbmcgPSBcIlwiXG59XG5jbGFzcyBCb28ge30iLCJpc0xvY2tlZCI6ZmFsc2UsImtpbmQiOiJzdGVuY2lsIiwidHJpbVdoaXRlc3BhY2VzIjp0cnVlLCJuYW1lIjoiSW1wb3J0ZWQgU291cmNlcnlUZXN0IDEiLCJpbnNlcnRpb25Nb2RlIjoiZW5kT2ZGaWxlIn0=\"}"
  },
  {
    "path": "SourceryUtils/Sources/Path+Extensions.swift",
    "content": "//\n//  Path+Extensions.swift\n//  Sourcery\n//\n//  Created by Krunoslav Zaher on 1/6/17.\n//  Copyright © 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\nimport PathKit\n\npublic typealias Path = PathKit.Path\n\nextension Path {\n    public var modifiedDate: Date? {\n        (try? FileManager.default.attributesOfItem(atPath: string)[.modificationDate]) as? Date\n    }\n\n    public static func cleanTemporaryDir(name: String) -> Path {\n        guard let tempDirURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(\"Sourcery.\\(name)\") else { fatalError(\"Unable to get temporary path\") }\n        _ = try? FileManager.default.removeItem(at: tempDirURL)\n        // swiftlint:disable:next force_try\n        try! FileManager.default.createDirectory(at: tempDirURL, withIntermediateDirectories: true, attributes: nil)\n        return Path(tempDirURL.path)\n    }\n\n    /// - returns: The `.cachesDirectory` search path in the user domain, as a `Path`.\n    public static var defaultBaseCachePath: Path {\n        let paths = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true) as [String]\n        let path = paths[0]\n        return Path(path)\n    }\n\n    /// - parameter _basePath: The value of the `--cachePath` command line parameter, if any.\n    /// - note: This function does not consider the `--disableCache` command line parameter.\n    ///         It is considered programmer error to call this function when `--disableCache` is specified.\n    public static func cachesDir(sourcePath: Path, basePath _basePath: Path?, createIfMissing: Bool = true) -> Path {\n        let basePath = _basePath ?? defaultBaseCachePath\n        let path = basePath + \"Sourcery\" + sourcePath.lastComponent\n        if !path.exists && createIfMissing {\n            // swiftlint:disable:next force_try\n            try! FileManager.default.createDirectory(at: path.url, withIntermediateDirectories: true, attributes: nil)\n        }\n        return path\n    }\n\n    public var isTemplateFile: Bool {\n        return self.extension == \"stencil\" ||\n            self.extension == \"swifttemplate\" ||\n            self.extension == \"ejs\" ||\n            self.extension == \"sourcerytemplate\"\n    }\n\n    public var isSwiftSourceFile: Bool {\n        return !self.isDirectory && (self.extension == \"swift\" || self.extension == \"swiftinterface\")\n    }\n\n    public func hasExtension(as string: String) -> Bool {\n        let extensionString = \".\\(string).\"\n        return self.string.contains(extensionString)\n    }\n\n    public init(_ string: String, relativeTo relativePath: Path) {\n        var path = Path(string)\n        if !path.isAbsolute {\n            path = (relativePath + path).absolute()\n        }\n        self.init(path.string)\n    }\n\n    public var allPaths: [Path] {\n        if isDirectory {\n            return (try? recursiveChildren()) ?? []\n        } else {\n            return [self]\n        }\n    }\n\n}\n"
  },
  {
    "path": "SourceryUtils/Sources/Sha.swift",
    "content": "//\n// Created by Krzysztof Zablocki on 10/01/2017.\n// Copyright (c) 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n#if canImport(ObjectiveC)\nimport CommonCrypto\n#else\nimport Crypto\n#endif\n\nextension Data {\n    public func sha256() -> Data {\n#if canImport(ObjectiveC)\n        var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))\n        self.withUnsafeBytes { (pointer) -> Void in\n            _ = CC_SHA256(pointer.baseAddress, CC_LONG(pointer.count), &hash)\n        }\n        return Data(hash)\n        #else\n        let digest = SHA256.hash(data: self)\n        return Data(digest)\n        #endif\n    }\n}\n\nextension String {\n    public func sha256() -> String? {\n        guard let data = data(using: String.Encoding.utf8) else { return nil }\n        let rc = data.sha256().base64EncodedString(options: [])\n        return rc\n    }\n}\n"
  },
  {
    "path": "SourceryUtils/Sources/Time.swift",
    "content": "//\n//  Time.swift\n//  SourceryFramework\n//\n//  Created by merowing on 03/09/2019.\n//  Copyright © 2019 Pixle. All rights reserved.\n//\nimport Foundation\n\n/// Returns current timestamp interval\npublic func currentTimestamp() -> TimeInterval {\n    return Date().timeIntervalSince1970\n}\n"
  },
  {
    "path": "SourceryUtils/Sources/Version.swift",
    "content": "//\n//  Version.swift\n//  Sourcery\n//\n//  Created by Anton Domashnev on 15.06.17.\n//  Copyright © 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\npublic struct SourceryVersion {\n    public let value: String\n    public static let current = SourceryVersion(value: inUnitTests ? \"Major.Minor.Patch\" : \"2.3.0\")\n}\n\n#if canImport(ObjectiveC)\npublic let inUnitTests: Bool = NSClassFromString(\"XCTest\") != nil\n#else\npublic let inUnitTests: Bool = ProcessInfo.processInfo.processName.hasSuffix(\"xctest\")\n#endif\n"
  },
  {
    "path": "SourceryUtils/Supporting Files/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2018 Pixle. All rights reserved.</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "SourceryUtils/Supporting Files/SourceryUtils.h",
    "content": "//\n//  Copyright © 2018 Pixle. All rights reserved.\n//\n\n#import <Cocoa/Cocoa.h>\n\n//! Project version number for SourceryUtils.\nFOUNDATION_EXPORT double SourceryUtilsVersionNumber;\n\n//! Project version string for SourceryUtils.\nFOUNDATION_EXPORT const unsigned char SourceryUtilsVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <SourceryUtils/PublicHeader.h>\n\n\n"
  },
  {
    "path": "SourceryUtils.podspec",
    "content": "Pod::Spec.new do |s|\n\n  s.name         = \"SourceryUtils\"\n  s.version      = \"2.3.0\"\n  s.summary      = \"A tool that brings meta-programming to Swift, allowing you to code generate Swift code.\"\n  s.platform     = :osx, '10.15'\n\n  s.description  = <<-DESC\n                 A tool that brings meta-programming to Swift, allowing you to code generate Swift code.\n                   * Featuring daemon mode that allows you to write templates side-by-side with generated code.\n                   * Using SourceKit so you can scan your regular code.\n                   DESC\n\n  s.homepage     = \"https://github.com/krzysztofzablocki/Sourcery\"\n  s.license      = 'MIT'\n  s.author       = { \"Krzysztof Zabłocki\" => \"krzysztof.zablocki@pixle.pl\" }\n  s.social_media_url = \"https://twitter.com/merowing_\"\n  s.source       = { :http => \"https://github.com/krzysztofzablocki/Sourcery/releases/download/#{s.version}/sourcery-#{s.version}.zip\" }\n\n  s.source_files = \"SourceryUtils/Sources/**/*.swift\"\n  \n  s.osx.deployment_target  = '10.15'\n  \n  s.dependency 'PathKit'\nend\n"
  },
  {
    "path": "Templates/.swiftlint.yml",
    "content": "excluded: # paths to ignore during linting. Takes precedence over `included`.\n  - Tests/Generated\n  - Tests/Expected\n"
  },
  {
    "path": "Templates/CodableContext/CodableContext.h",
    "content": "//\n//  CodableContext.h\n//  CodableContext\n//\n//  Created by Ilya Puchka on 29/04/2018.\n//  Copyright © 2018 Pixle. All rights reserved.\n//\n\n#import <Cocoa/Cocoa.h>\n\n//! Project version number for CodableContext.\nFOUNDATION_EXPORT double CodableContextVersionNumber;\n\n//! Project version string for CodableContext.\nFOUNDATION_EXPORT const unsigned char CodableContextVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <CodableContext/PublicHeader.h>\n\n\n"
  },
  {
    "path": "Templates/CodableContext/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2018 Pixle. All rights reserved.</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Templates/CodableContextTests/CodableContextTests.swift",
    "content": "import Foundation\nimport Quick\nimport Nimble\n@testable import CodableContext\n\nclass CodableContextTests: QuickSpec {\n    override func spec() {\n#if canImport(ObjectiveC)\n        let encoder: JSONEncoder = {\n            let encoder = JSONEncoder()\n            encoder.outputFormatting = [.prettyPrinted, .sortedKeys]\n            return encoder\n        }()\n\n        let decoder = JSONDecoder()\n\n        describe(\"enum\") {\n\n            context(\"with enum case key\") {\n\n                it(\"codes value with associated values\") {\n                    let value = AssociatedValuesEnum.someCase(id: 0, name: \"a\")\n\n                    let encoded = try! encoder.encode(value)\n                    expect(String(data: encoded, encoding: .utf8)).to(equal(\"\"\"\n                    {\n                      \"id\" : 0,\n                      \"name\" : \"a\",\n                      \"type\" : \"someCase\"\n                    }\n                    \"\"\"\n                    ))\n\n                    let decoded = try! decoder.decode(AssociatedValuesEnum.self, from: encoded)\n                    expect(decoded).to(equal(value))\n                }\n\n                it(\"can't use value with unnamed associated values\") {\n                    let value = AssociatedValuesEnum.unnamedCase(0, \"a\")\n                    let encoded = \"{\\\"type\\\" : \\\"unnamedCase\\\"}\".data(using: .utf8)!\n\n                    expect { try encoder.encode(value) }.to(throwError())\n                    expect { try decoder.decode(AssociatedValuesEnum.self, from: encoded) }.to(throwError())\n                }\n\n                it(\"can't use value with mixed associated values\") {\n                    let value = AssociatedValuesEnum.mixCase(0, name: \"a\")\n                    let encoded = \"{\\\"type\\\" : \\\"mixCase\\\"}\".data(using: .utf8)!\n\n                    expect { try encoder.encode(value) }.to(throwError())\n                    expect { try decoder.decode(AssociatedValuesEnum.self, from: encoded) }.to(throwError())\n                }\n\n                it(\"codes value without associated values\") {\n                    let value = AssociatedValuesEnum.anotherCase\n\n                    let encoded = try! encoder.encode(value)\n                    expect(String(data: encoded, encoding: .utf8)).to(equal(\"\"\"\n                    {\n                      \"type\" : \"anotherCase\"\n                    }\n                    \"\"\"\n                    ))\n\n                    let decoded = try! decoder.decode(AssociatedValuesEnum.self, from: encoded)\n                    expect(decoded).to(equal(value))\n                }\n            }\n\n            context(\"without enum case key\") {\n\n                it(\"codes value with associated values\") {\n                    let value = AssociatedValuesEnumNoCaseKey.someCase(id: 0, name: \"a\")\n\n                    let encoded = try! encoder.encode(value)\n                    expect(String(data: encoded, encoding: .utf8)).to(equal(\n\"\"\"\n{\n  \"someCase\" : {\n    \"id\" : 0,\n    \"name\" : \"a\"\n  }\n}\n\"\"\"\n                    ))\n\n                    let decoded = try! decoder.decode(AssociatedValuesEnumNoCaseKey.self, from: encoded)\n                    expect(decoded).to(equal(value))\n                }\n\n                it(\"codes value with unnamed associated values\") {\n                    let value = AssociatedValuesEnumNoCaseKey.unnamedCase(0, \"a\")\n\n                    let encoded = try! encoder.encode(value)\n                    expect(String(data: encoded, encoding: .utf8)).to(equal(\"\"\"\n                    {\n                      \"unnamedCase\" : [\n                        0,\n                        \"a\"\n                      ]\n                    }\n                    \"\"\"\n                    ))\n\n                    let decoded = try! decoder.decode(AssociatedValuesEnumNoCaseKey.self, from: encoded)\n                    expect(decoded).to(equal(value))\n                }\n\n                it(\"can't use value with mixed associated values\") {\n                    let value = AssociatedValuesEnumNoCaseKey.mixCase(0, name: \"a\")\n                    let encoded = \"{\\\"type\\\" : \\\"mixCase\\\"}\".data(using: .utf8)!\n\n                    expect { try encoder.encode(value) }.to(throwError())\n                    expect { try decoder.decode(AssociatedValuesEnumNoCaseKey.self, from: encoded) }.to(throwError())\n                }\n\n                it(\"codes value without assoicated values\") {\n                    let value = AssociatedValuesEnumNoCaseKey.anotherCase\n\n                    let encoded = try! encoder.encode(value)\n                    expect(String(data: encoded, encoding: .utf8)).to(equal(\"\"\"\n                    {\n                      \"anotherCase\" : {\n\n                      }\n                    }\n                    \"\"\"\n                    ))\n\n                    let decoded = try! decoder.decode(AssociatedValuesEnumNoCaseKey.self, from: encoded)\n                    expect(decoded).to(equal(value))\n                }\n            }\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "Templates/CodableContextTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Templates/Templates/AutoCases.stencil",
    "content": "{% for enum in types.implementing.AutoCases|enum %}\n{{ enum.accessLevel }} extension {{ enum.name }} {\n  static let count: Int = {{ enum.cases.count }}\n  {% if not enum.hasAssociatedValues %}\n  static let allCases: [{{ enum.name }}] = [\n  {% for case in enum.cases %}  .{{ case.name }}{{ ',' if not forloop.last }}\n  {% endfor %}]\n  {% endif %}\n}\n{% endfor %}\n"
  },
  {
    "path": "Templates/Templates/AutoCodable.swifttemplate",
    "content": "<%\nfunc capitalizedName(for variable: Variable) -> String {\n    return \"\\(String(variable.name.first!).capitalized)\\(String(variable.name.dropFirst()))\"\n}\nfunc customDecodingMethod(for variable: Variable, of type: Type) -> SourceryMethod? {\n    return type.staticMethods.first { $0.selectorName == \"decode\\(capitalizedName(for: variable))(from:)\" }\n}\nfunc defaultDecodingValue(for variable: Variable, of type: Type) -> Variable? {\n    return type.staticVariables.first { $0.name == \"default\\(capitalizedName(for: variable))\" }\n}\nfunc decodingContainerMethod(for type: Type) -> SourceryMethod? {\n    if let enumType = type as? Enum, !enumType.hasAssociatedValues {\n        return SourceryMethod(name: \"singleValueContainer\", throws: true)\n    }\n    return type.staticMethods.first { $0.selectorName == \"decodingContainer(_:)\" }\n}\nfunc customEncodingMethod(for variable: Variable, of type: Type) -> SourceryMethod? {\n    return type.instanceMethods.first { $0.selectorName == \"encode\\(capitalizedName(for: variable))(to:)\" }\n}\nfunc encodeAdditionalVariablesMethod(for type: Type) -> SourceryMethod? {\n    return type.instanceMethods.first { $0.selectorName == \"encodeAdditionalValues(to:)\" }\n}\nfunc encodingContainerMethod(for type: Type) -> SourceryMethod? {\n    if let enumType = type as? Enum, !enumType.hasAssociatedValues {\n        return SourceryMethod(name: \"singleValueContainer\")\n    }\n    return type.instanceMethods.first { $0.selectorName == \"encodingContainer(_:)\" }\n}\nfunc typeHasMoreCodingKeysThanStoredProperties(_ type: Type, codingKeys: [String]) -> Bool {\n    let allKeysSet = Set(codingKeys)\n    let allStoredPropertiesNames = Set(type.storedVariables.map({ $0.name }))\n    let hasMoreKeys = allKeysSet.subtracting(allStoredPropertiesNames).count > 0\n    return hasMoreKeys\n}\nfunc needsDecodableImplementation(for type: Type, codingKeys: (generated: [String], all: [String])) -> Bool {\n    guard type.implements[\"AutoDecodable\"] != nil else { return false }\n    if let enumType = type as? Enum, enumType.rawTypeName == nil { return true }\n\n    if type.storedVariables.contains(where: { customDecodingMethod(for: $0, of: type) != nil }) { return true }\n    if type.storedVariables.contains(where: { defaultDecodingValue(for: $0, of: type) != nil }) { return true }\n    if decodingContainerMethod(for: type) != nil { return true }\n    if typeHasMoreCodingKeysThanStoredProperties(type, codingKeys: codingKeys.all) { return true }\n    return false\n}\nfunc needsEncodableImplementation(for type: Type, codingKeys: (generated: [String], all: [String])) -> Bool {\n    guard type.implements[\"AutoEncodable\"] != nil else { return false }\n    if let enumType = type as? Enum, enumType.rawTypeName == nil { return true }\n\n    if type.variables.contains(where: { customEncodingMethod(for: $0, of: type) != nil }) { return true }\n    if encodeAdditionalVariablesMethod(for: type) != nil { return true }\n    if decodingContainerMethod(for: type) != nil { return true }\n    if typeHasMoreCodingKeysThanStoredProperties(type, codingKeys: codingKeys.all) { return true }\n    if ((type.containedType[\"SkipEncodingKeys\"] as? Enum)?.cases.count ?? 0) > 0 { return true }\n    return false\n}\nfunc codingKeysFor(_ type: Type) -> (generated: [String], all: [String]) {\n    var generatedKeys = [String]()\n    var allCodingKeys = [String]()\n    if type is Struct {\n        if let codingKeysType = type.containedType[\"CodingKeys\"] as? Enum {\n            allCodingKeys = codingKeysType.cases.map({ $0.name })\n            let definedKeys = Set(allCodingKeys)\n            let storedVariablesKeys = type.storedVariables.filter({ $0.defaultValue == nil }).map({ $0.name })\n            let computedVariablesKeys = type.computedVariables.filter({ customEncodingMethod(for: $0, of: type) != nil }).map({ $0.name })\n\n            if (storedVariablesKeys.count + computedVariablesKeys.count) > definedKeys.count {\n                for key in storedVariablesKeys where !definedKeys.contains(key) {\n                    generatedKeys.append(key)\n                    allCodingKeys.append(key)\n                }\n                for key in computedVariablesKeys where !definedKeys.contains(key) {\n                    generatedKeys.append(key)\n                    allCodingKeys.append(key)\n                }\n            }\n        } else {\n            for variable in type.storedVariables {\n                generatedKeys.append(variable.name)\n                allCodingKeys.append(variable.name)\n            }\n            for variable in type.computedVariables {\n                guard customEncodingMethod(for: variable, of: type) != nil else { continue }\n                generatedKeys.append(variable.name)\n                allCodingKeys.append(variable.name)\n            }\n        }\n    } else if let enumType = type as? Enum {\n        var casesKeys: [String] = enumType.cases.map({ $0.name })\n        if enumType.hasAssociatedValues {\n            enumType.cases\n                .flatMap({ $0.associatedValues })\n                .compactMap({ $0.localName })\n                .forEach({\n                    if !casesKeys.contains($0) {\n                        casesKeys.append($0)\n                    }\n                })\n        }\n        if let codingKeysType = type.containedType[\"CodingKeys\"] as? Enum {\n            allCodingKeys = codingKeysType.cases.map({ $0.name })\n            let definedKeys = Set(allCodingKeys)\n            if casesKeys.count > definedKeys.count {\n                for key in casesKeys where !definedKeys.contains(key) {\n                    generatedKeys.append(key)\n                    allCodingKeys.append(key)\n                }\n            }\n        } else {\n            allCodingKeys = casesKeys\n            generatedKeys = allCodingKeys\n        }\n    }\n    return (generated: generatedKeys, all: allCodingKeys)\n}\n-%>\n<%_ for type in types.all\n                where (type is Struct || type is Enum)\n                && (type.implements[\"AutoDecodable\"] != nil || type.implements[\"AutoEncodable\"] != nil) { -%>\n    <%_ let codingKeys = codingKeysFor(type) -%>\n    <%_ if let codingKeysType = type.containedType[\"CodingKeys\"] as? Enum, codingKeys.generated.count > 0 { -%>\n// sourcery:inline:auto:<%= codingKeysType.name %>.AutoCodable\n        <%_ for key in codingKeys.generated { -%>\n        case <%= key %>\n        <%_ } -%>\n// sourcery:end\n<%_ } -%>\n\n    <%_ let typeNeedsDecodableImplementation = needsDecodableImplementation(for: type, codingKeys: codingKeys) -%>\n    <%_ let typeNeedsEncodableImplementation = needsEncodableImplementation(for: type, codingKeys: codingKeys) -%>\n    <%_ guard typeNeedsDecodableImplementation || typeNeedsEncodableImplementation else { continue } -%>\nextension <%= type.name %> {\n    <%_ if type.containedType[\"CodingKeys\"] as? Enum == nil { -%>\n\n    enum CodingKeys: String, CodingKey {\n        <%_ for key in codingKeys.generated { -%>\n        case <%= key %>\n        <%_ } -%>\n    }\n    <%_ }-%>\n\n    <%_ if typeNeedsDecodableImplementation { -%>\n    <%= type.accessLevel %> init(from decoder: Decoder) throws {\n        <%_ if let containerMethod = decodingContainerMethod(for: type) { -%>\n        let container = <% if containerMethod.throws { %>try <% } -%>\n        <%_ if containerMethod.callName == \"singleValueContainer\" { %>decoder<% } else { -%><%= type.name %><% } -%>\n        <%_ %>.<%= containerMethod.callName %>(<% if !containerMethod.parameters.isEmpty { %>decoder<% } %>)\n        <%_ } else { -%>\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        <%_ } -%>\n\n        <%_ if let enumType = type as? Enum { -%>\n        <%_ if enumType.hasAssociatedValues { -%>\n        <%_ if codingKeys.all.contains(\"enumCaseKey\") { -%>\n        let enumCase = try container.decode(String.self, forKey: .enumCaseKey)\n        switch enumCase {\n        <%_ for enumCase in enumType.cases { -%>\n        case CodingKeys.<%= enumCase.name %>.rawValue:\n            <%_ if enumCase.associatedValues.isEmpty { -%>\n            self = .<%= enumCase.name %>\n            <%_ } else if enumCase.associatedValues.filter({ $0.localName == nil }).count == enumCase.associatedValues.count { -%>\n            // Enum cases with unnamed associated values can't be decoded\n            throw DecodingError.dataCorruptedError(forKey: .enumCaseKey, in: container, debugDescription: \"Can't decode '\\(enumCase)'\")\n            <%_ } else if enumCase.associatedValues.filter({ $0.localName != nil }).count == enumCase.associatedValues.count { -%>\n            <%_ for associatedValue in enumCase.associatedValues { -%>\n            let <%= associatedValue.localName! %> = try container.decode(<%= associatedValue.typeName %>.self, forKey: .<%= associatedValue.localName! %>)\n            <%_ } -%>\n            self = .<%= enumCase.name %>(<% -%>\n                <%_ %><%= enumCase.associatedValues.map({ \"\\($0.localName!): \\($0.localName!)\" }).joined(separator: \", \") %>)\n            <%_ } else { -%>\n            // Enum cases with mixed named and unnamed associated values can't be decoded\n            throw DecodingError.dataCorruptedError(forKey: .enumCaseKey, in: container, debugDescription: \"Can't decode '\\(enumCase)'\")\n            <%_ } -%>\n        <%_ } -%>\n        default:\n            throw DecodingError.dataCorruptedError(forKey: .enumCaseKey, in: container, debugDescription: \"Unknown enum case '\\(enumCase)'\")\n        }\n        <%_ } else { -%>\n        <%_ for enumCase in enumType.cases { -%>\n        if container.allKeys.contains(.<%= enumCase.name %>), try container.decodeNil(forKey: .<%= enumCase.name %>) == false {\n            <%_ if enumCase.associatedValues.isEmpty { -%>\n            self = .<%= enumCase.name %>\n            return\n            <%_ } else if enumCase.associatedValues.filter({ $0.localName == nil }).count == enumCase.associatedValues.count { -%>\n            var associatedValues = try container.nestedUnkeyedContainer(forKey: .<%= enumCase.name %>)\n            <%_ for (index, associatedValue) in enumCase.associatedValues.enumerated() { -%>\n            let associatedValue<%= index %> = try associatedValues.decode(<%= associatedValue.typeName %>.self)\n            <%_ } -%>\n            self = .<%= enumCase.name %>(<% -%>\n            <%_ %><%= enumCase.associatedValues.indices.map({ \"associatedValue\\($0)\" }).joined(separator: \", \") %>)\n            return\n            <%_ } else if enumCase.associatedValues.filter({ $0.localName != nil }).count == enumCase.associatedValues.count { -%>\n            let associatedValues = try container.nestedContainer(keyedBy: CodingKeys.self, forKey: .<%= enumCase.name %>)\n            <%_ for associatedValue in enumCase.associatedValues { -%>\n            let <%= associatedValue.localName! %> = try associatedValues.decode(<%= associatedValue.typeName %>.self, forKey: .<%= associatedValue.localName! %>)\n            <%_ } -%>\n            self = .<%= enumCase.name %>(<% -%>\n            <%_ %><%= enumCase.associatedValues.map({ \"\\($0.localName!): \\($0.localName!)\" }).joined(separator: \", \") %>)\n            return\n            <%_ } else { -%>\n            // Enum cases with mixed named and unnamed associated values can't be decoded\n            throw DecodingError.dataCorruptedError(forKey: .<%= enumCase.name %>, in: container, debugDescription: \"Can't decode `.<%= enumCase.name %>`\")\n            <%_ } -%>\n        }\n        <%_ } -%>\n        throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: \"Unknown enum case\"))\n        <%_ } -%>\n        <%_ } else { -%>\n        let enumCase = try container.decode(String.self)\n        switch enumCase {\n        <%_ for enumCase in enumType.cases { -%>\n        case CodingKeys.<%= enumCase.name %>.rawValue: self = .<%= enumCase.name %>\n        <%_ } -%>\n        default: throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: \"Unknown enum case '\\(enumCase)'\"))\n        }\n        <%_ } -%>\n        <%_ } else { -%>\n        <%_ for key in codingKeys.all { -%>\n        <%_ guard let variable = type.instanceVariables.first(where: { $0.name == key && !$0.isComputed }) else { continue } -%>\n        <%_ let defaultValue = defaultDecodingValue(for: variable, of: type) -%>\n        <%_ let customMethod = customDecodingMethod(for: variable, of: type) -%>\n        <%_ let shouldTry = customMethod?.throws == true || customMethod == nil -%>\n        <%_ let shouldWrapTry = shouldTry && defaultValue != nil -%>\n        <%= variable.name %> = <% if shouldWrapTry { %>(try? <% } else if shouldTry { %>try <% } -%>\n        <%_ if let customMethod = customMethod { -%>\n        <%_ %><%= type.name %>.<%= customMethod.callName %>(from: <% if customMethod.parameters.first?.name == \"decoder\" { %>decoder<% } else { %>container<% } %>)<% -%>\n        <%_ } else { -%>\n        <%_ %>container.decode<% if variable.isOptional { %>IfPresent<% } %>(<%= variable.unwrappedTypeName %>.self, forKey: .<%= variable.name %>)<% -%>\n        <%_ } -%>\n        <%_ %><% if shouldWrapTry { %>)<% } -%>\n        <%_ if let defaultValue = defaultValue { %> ?? <%= type.name %>.<%= defaultValue.name -%><%_ } %>\n        <%_ } -%>\n        <%_ } -%>\n    }\n\n    <%_ } -%>\n    <%_ if typeNeedsEncodableImplementation { -%>\n    <%= type.accessLevel %> func encode(to encoder: Encoder) throws {\n        <%_ if let containerMethod = encodingContainerMethod(for: type) { -%>\n        var container = <% if containerMethod.callName == \"singleValueContainer\" { %>encoder.<% } %><%= containerMethod.callName %>(<% if !containerMethod.parameters.isEmpty { %>encoder<% } %>)\n        <%_ } else { -%>\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        <%_ } -%>\n\n        <%_ if let enumType = type as? Enum { -%>\n        <%_ if enumType.hasAssociatedValues { -%>\n        <%_ if codingKeys.all.contains(\"enumCaseKey\") { -%>\n        switch self {\n        <%_ for enumCase in enumType.cases { -%>\n        <%_ if enumCase.associatedValues.isEmpty { -%>\n        case .<%= enumCase.name %>:\n            try container.encode(CodingKeys.<%= enumCase.name %>.rawValue, forKey: .enumCaseKey)\n        <%_ } else if enumCase.associatedValues.filter({ $0.localName == nil }).count == enumCase.associatedValues.count { -%>\n        case .<%= enumCase.name %>:\n            // Enum cases with unnamed associated values can't be encoded\n            throw EncodingError.invalidValue(self, .init(codingPath: encoder.codingPath, debugDescription: \"Can't encode '\\(self)'\"))\n        <%_ } else if enumCase.associatedValues.filter({ $0.localName != nil }).count == enumCase.associatedValues.count { -%>\n        case let .<%= enumCase.name %>(<%= enumCase.associatedValues.map({ \"\\($0.localName!)\" }).joined(separator: \", \") %>):\n            try container.encode(CodingKeys.<%= enumCase.name %>.rawValue, forKey: .enumCaseKey)\n            <%_ for accociatedValue in enumCase.associatedValues { -%>\n            try container.encode(<%= accociatedValue.localName! %>, forKey: .<%= accociatedValue.localName! %>)\n            <%_ } -%>\n        <%_ } else { -%>\n        case .<%= enumCase.name %>:\n            // Enum cases with mixed named and unnamed associated values can't be encoded\n            throw EncodingError.invalidValue(self, .init(codingPath: encoder.codingPath, debugDescription: \"Can't encode '\\(self)'\"))\n        <%_ } -%>\n        <%_ } -%>\n        }\n        <%_ } else { -%>\n        switch self {\n        <%_ for enumCase in enumType.cases { -%>\n        <%_ if enumCase.associatedValues.isEmpty { -%>\n        case .<%= enumCase.name %>:\n            _ = container.nestedContainer(keyedBy: CodingKeys.self, forKey: .<%= enumCase.name %>)\n        <%_ } else if enumCase.associatedValues.filter({ $0.localName == nil }).count == enumCase.associatedValues.count { -%>\n        case let .<%= enumCase.name %>(<%= enumCase.associatedValues.indices.map({ \"associatedValue\\($0)\" }).joined(separator: \", \") %>):\n            var associatedValues = container.nestedUnkeyedContainer(forKey: .<%= enumCase.name %>)\n            <%_ for (index, associatedValue) in enumCase.associatedValues.enumerated() { -%>\n            try associatedValues.encode(associatedValue<%= index %>)\n        <%_ } -%>\n        <%_ } else if enumCase.associatedValues.filter({ $0.localName != nil }).count == enumCase.associatedValues.count { -%>\n        case let .<%= enumCase.name %>(<%= enumCase.associatedValues.map({ \"\\($0.localName!)\" }).joined(separator: \", \") %>):\n            var associatedValues = container.nestedContainer(keyedBy: CodingKeys.self, forKey: .<%= enumCase.name %>)\n            <%_ for accociatedValue in enumCase.associatedValues { -%>\n            try associatedValues.encode(<%= accociatedValue.localName! %>, forKey: .<%= accociatedValue.localName! %>)\n        <%_ } -%>\n        <%_ } else { -%>\n        case .<%= enumCase.name %>:\n            // Enum cases with mixed named and unnamed associated values can't be encoded\n            throw EncodingError.invalidValue(self, .init(codingPath: encoder.codingPath, debugDescription: \"Can't encode '\\(self)'\"))\n        <%_ } -%>\n        <%_ } -%>\n        }\n        <%_ } -%>\n        <%_ } else { -%>\n        switch self {\n        <%_ for enumCase in enumType.cases { -%>\n        case .<%= enumCase.name %>: try container.encode(CodingKeys.<%= enumCase.name %>.rawValue)\n        <%_ } -%>\n        }\n        <%_ } -%>\n        <%_ } else { -%>\n        <%_ let skipKeys = type.containedType[\"SkipEncodingKeys\"] as? Enum -%>\n        <%_ for key in codingKeys.all { -%>\n        <%_ if let skipKeys = skipKeys, skipKeys.cases.contains(where: { $0.name == key }) { continue } -%>\n        <%_ guard let variable = type.instanceVariables.first(where: { $0.name == key }) ?? type.computedVariables.first(where: { $0.name == key }) else { continue } -%>\n        <%_ let customMethod = customEncodingMethod(for: variable, of: type) -%>\n        <%_ if let customMethod = customMethod { -%>\n        <% if customMethod.throws { %>try <% } %><%= customMethod.callName %>(to: <% if customMethod.parameters.first?.name == \"encoder\" { %>encoder<% } else { %>&container<% } %>)\n        <%_ } else { -%>\n        try container.encode<% if variable.isOptional { %>IfPresent<% } %>(<%= variable.name %>, forKey: .<%= variable.name %>)\n        <%_ } -%>\n        <%_ } -%>\n        <%_ if let encodeAdditional = encodeAdditionalVariablesMethod(for: type) { -%>\n        <% if encodeAdditional.throws { %>try <% } %><%= encodeAdditional.callName %>(to: <% if encodeAdditional.parameters.first?.name == \"encoder\" { %>encoder<% } else { %>&container<% } %>)\n        <%_ } -%>\n        <%_ } -%>\n    }\n\n    <%_ } -%>\n}\n<% } -%>\n"
  },
  {
    "path": "Templates/Templates/AutoEquatable.stencil",
    "content": "// swiftlint:disable file_length\nfileprivate func compareOptionals<T>(lhs: T?, rhs: T?, compare: (_ lhs: T, _ rhs: T) -> Bool) -> Bool {\n    switch (lhs, rhs) {\n    case let (lValue?, rValue?):\n        return compare(lValue, rValue)\n    case (nil, nil):\n        return true\n    default:\n        return false\n    }\n}\n\nfileprivate func compareArrays<T>(lhs: [T], rhs: [T], compare: (_ lhs: T, _ rhs: T) -> Bool) -> Bool {\n    guard lhs.count == rhs.count else { return false }\n    for (idx, lhsItem) in lhs.enumerated() {\n        guard compare(lhsItem, rhs[idx]) else { return false }\n    }\n\n    return true\n}\n\n{% macro compareVariables variables %}\n    {% for variable in variables where variable.readAccess != \"private\" and variable.readAccess != \"fileprivate\" %}{% if not variable.annotations.skipEquality %}guard {% if not variable.isOptional %}{% if not variable.annotations.arrayEquality %}lhs.{{ variable.name }} == rhs.{{ variable.name }}{% else %}compareArrays(lhs: lhs.{{ variable.name }}, rhs: rhs.{{ variable.name }}, compare: ==){% endif %}{% else %}compareOptionals(lhs: lhs.{{ variable.name }}, rhs: rhs.{{ variable.name }}, compare: ==){% endif %} else { return false }{% endif %}\n    {% endfor %}\n{% endmacro %}\n\n// MARK: - AutoEquatable for classes, protocols, structs\n{% for type in types.types|!enum where type.implements.AutoEquatable or type|annotated:\"AutoEquatable\" %}\n// MARK: - {{ type.name }} AutoEquatable\n{% if not type.kind == \"protocol\" and not type.based.NSObject %}extension {{ type.name }}: Equatable {}{% endif %}\n{% if type.supertype.based.Equatable or type.supertype.implements.AutoEquatable or type.supertype|annotated:\"AutoEquatable\" %}THIS WONT COMPILE, WE DONT SUPPORT INHERITANCE for AutoEquatable{% endif %}\n{{ type.accessLevel }} func == (lhs:{% if type.kind == \"protocol\" %} any{% endif %} {{ type.name }}, rhs:{% if type.kind == \"protocol\" %} any{% endif %} {{ type.name }}) -> Bool {\n    {% if not type.kind == \"protocol\" %}\n    {% call compareVariables type.storedVariables %}\n    {% else %}\n    {% call compareVariables type.allVariables %}\n    {% endif %}\n    return true\n}\n{% endfor %}\n\n// MARK: - AutoEquatable for Enums\n{% for type in types.enums where type.implements.AutoEquatable or type|annotated:\"AutoEquatable\" %}\n// MARK: - {{ type.name }} AutoEquatable\nextension {{ type.name }}: Equatable {}\n{{ type.accessLevel }} func == (lhs: {{ type.name }}, rhs: {{ type.name }}) -> Bool {\n    switch (lhs, rhs) {\n    {% for case in type.cases %}\n    {% if case.hasAssociatedValue %}\n    {% if case.associatedValues.count == 1 %}\n    case let (.{{ case.name }}(lhs), .{{ case.name }}(rhs)):\n    {% else %}\n    {% map case.associatedValues into lhsValues using associated %}lhs{{ associated.externalName|upperFirstLetter }}{% endmap %}\n    {% map case.associatedValues into rhsValues using associated %}rhs{{ associated.externalName|upperFirstLetter }}{% endmap %}\n    case let (.{{ case.name }}({{ lhsValues|join: \", \" }}), .{{ case.name }}({{ rhsValues|join: \", \" }})):\n    {% endif %}\n    {% else %}\n    case (.{{ case.name }}, .{{ case.name }}):\n    {% endif %}\n        {% if not case.hasAssociatedValue %}return true{% else %}\n        {% if case.associatedValues.count == 1 %}\n        return lhs == rhs\n        {% else %}\n        {% for associated in case.associatedValues %}if lhs{{ associated.externalName|upperFirstLetter }} != rhs{{ associated.externalName|upperFirstLetter }} { return false }\n        {% endfor %}return true\n        {% endif %}\n        {% endif %}\n    {% endfor %}\n    {{ 'default: return false' if type.cases.count > 1 }}\n    }\n}\n{% endfor %}\n"
  },
  {
    "path": "Templates/Templates/AutoHashable.stencil",
    "content": "// swiftlint:disable all\n\n{% macro combineVariableHashes variables %}\n{% for variable in variables where variable.readAccess != \"private\" and variable.readAccess != \"fileprivate\" %}\n{% if not variable.annotations.skipHashing %}\n        {% if variable.isStatic %}type(of: self).{% endif %}{{ variable.name }}.hash(into: &hasher)\n{% endif %}\n{% endfor %}\n{% endmacro %}\n\n// MARK: - AutoHashable for classes, protocols, structs\n{% for type in types.types|!enum where type.implements.AutoHashable or type|annotated:\"AutoHashable\" %}\n// MARK: - {{ type.name }} AutoHashable\nextension {{ type.name }}{% if not type.kind == \"protocol\" and not type.based.NSObject %}: Hashable{% endif %} {\n    {{ type.accessLevel }}{% if type.based.NSObject or type.supertype.implements.AutoHashable or type.supertype|annotated:\"AutoHashable\" or type.supertype.based.Hashable %} override{% endif %} func hash(into hasher: inout Hasher) {\n        {% if type.based.NSObject or type.supertype.implements.AutoHashable or type.supertype|annotated:\"AutoHashable\" or type.supertype.based.Hashable %}\n        super.hash(into: hasher)\n        {% endif %}\n        {% if not type.kind == \"protocol\" %}\n        {% call combineVariableHashes type.storedVariables %}\n        {% else %}\n        {% call combineVariableHashes type.allVariables %}\n        {% endif %}\n    }\n}\n{% endfor %}\n\n// MARK: - AutoHashable for Enums\n{% for type in types.enums where type.implements.AutoHashable or type|annotated:\"AutoHashable\" %}\n\n// MARK: - {{ type.name }} AutoHashable\nextension {{ type.name }}: Hashable {\n    {{ type.accessLevel }} func hash(into hasher: inout Hasher) {\n        switch self {\n        {% for case in type.cases %}\n        {% if case.hasAssociatedValue %}\n        {% if case.associatedValues.count == 1 %}\n        case let .{{ case.name }}(data):\n        {% else %}\n        {% map case.associatedValues into associatedValues using associated %}{{ associated.externalName }}{% endmap %}\n        case let .{{ case.name }}({{ associatedValues|join: \", \" }}):\n        {% endif %}\n        {% else %}\n        case .{{ case.name }}:\n        {% endif %}\n            {{ forloop.counter }}.hash(into: &hasher)\n            {% if type.computedVariables.count > 0 %}\n            {% for variable in type.computedVariables %}\n            {% if not variable.annotations.skipHashing %}{{ variable.name }}.hash(into: &hasher)\n            {% endif %}\n            {% endfor %}\n            {% endif %}\n            {% if case.hasAssociatedValue %}\n            {% if case.associatedValues.count == 1 %}\n            data.hash(into: &hasher)\n            {% else %}\n            {% for associated in case.associatedValues %}{{ associated.externalName }}.hash(into: &hasher)\n            {% endfor %}\n            {% endif %}\n            {% endif %}\n            {% endfor %}\n        }\n    }\n}\n{% endfor %}\n"
  },
  {
    "path": "Templates/Templates/AutoLenses.stencil",
    "content": "// swiftlint:disable variable_name\ninfix operator *~: MultiplicationPrecedence\ninfix operator |>: AdditionPrecedence\n\nstruct Lens<Whole, Part> {\n    let get: (Whole) -> Part\n    let set: (Part, Whole) -> Whole\n}\n\nfunc * <A, B, C> (lhs: Lens<A, B>, rhs: Lens<B, C>) -> Lens<A, C> {\n    return Lens<A, C>(\n        get: { a in rhs.get(lhs.get(a)) },\n        set: { (c, a) in lhs.set(rhs.set(c, lhs.get(a)), a) }\n    )\n}\n\nfunc *~ <A, B> (lhs: Lens<A, B>, rhs: B) -> (A) -> A {\n    return { a in lhs.set(rhs, a) }\n}\n\nfunc |> <A, B> (x: A, f: (A) -> B) -> B {\n    return f(x)\n}\n\nfunc |> <A, B, C> (f: @escaping (A) -> B, g: @escaping (B) -> C) -> (A) -> C {\n    return { g(f($0)) }\n}\n\n{% for type in types.implementing.AutoLenses|struct %}\nextension {{ type.name }} {\n{% for variable in type.storedVariables %}\n  static let {{ variable.name }}Lens = Lens<{{type.name}}, {{variable.typeName}}>(\n    get: { $0.{{variable.name}} },\n    set: { {{variable.name}}, {{type.name|lowercase}} in\n       {{type.name}}({% for argument in type.storedVariables %}{{argument.name}}: {% if variable.name == argument.name %}{{variable.name}}{% else %}{{type.name|lowercase}}.{{argument.name}}{% endif %}{{ ', ' if not forloop.last }}{% endfor %})\n    }\n  ){% endfor %}\n}\n{% endfor %}\n"
  },
  {
    "path": "Templates/Templates/AutoMockable.stencil",
    "content": "// swiftlint:disable line_length\n// swiftlint:disable variable_name\n\nimport Foundation\n#if os(iOS) || os(tvOS) || os(watchOS)\nimport UIKit\n#elseif os(OSX)\nimport AppKit\n#endif\n\n{% for import in argument.autoMockableImports %}\nimport {{ import }}\n{% endfor %}\n\n{% for import in argument.autoMockableTestableImports %}\n@testable import {{ import }}\n{% endfor %}\n\n{% macro cleanString string %}{{ string | replace:\"(\",\"_\" | replace:\")\",\"\" | replace:\":\",\"_\" | replace:\"`\",\"\" | replace:\" \",\"_\" | replace:\"?\",\"_\" | replace:\"!\",\"_\" | replace:\",\",\"_\" | replace:\"->\",\"_\" | replace:\"@\",\"_\" | replace:\".\",\"_\" | replace:\"[\",\"\" | replace:\"]\",\"\" | replace:\"<\",\"\" | replace:\">\",\"\" | replace:\"&\",\"\" | snakeToCamelCase }}{% endmacro %}\n{%- macro swiftifyMethodName method -%}\n    {%- set cleanMethodName %}{% call cleanString method.name %}{% endset %}\n    {%- set cleanMethodReturnTypeName %}{% call cleanString method.actualReturnTypeName.name %}{% endset -%}\n    {{ cleanMethodName | lowerFirstLetter }}{{ cleanMethodReturnTypeName | upperFirstLetter }}\n{%- endmacro -%}\n\n{% macro accessLevel level %}{% if level != 'internal' %}{{ level }} {% endif %}{% endmacro %}\n\n{% macro staticSpecifier method %}{% if method.isStatic and not method.isInitializer %}static {% endif %}{% endmacro %}\n\n{% macro methodThrowableErrorDeclaration method %}\n    {% call accessLevel method.accessLevel %}{% call staticSpecifier method %}var {% call swiftifyMethodName method %}ThrowableError: {% if method.throwsTypeName %}({% call getTypeName method.throwsTypeName %})?{% else %}(any Error)?{% endif %}\n{% endmacro %}\n\n{% macro methodThrowableErrorUsage method %}\n        if let error = {% call swiftifyMethodName method %}ThrowableError {\n            throw error\n        }\n{% endmacro %}\n\n{% macro methodReceivedParameters method %}\n    {% set hasNonEscapingClosures %}\n        {%- for param in method.parameters where param.isClosure and not param.typeAttributes.escaping and not param.isOptional %}\n            {{ true }}\n        {% endfor -%}\n    {% endset %}\n    {% if method.parameters.count == 1 and not hasNonEscapingClosures %}\n        {% call swiftifyMethodName method %}Received{% for param in method.parameters %}{{ param.name|upperFirstLetter }} = {% if not param.name == \"\" %}{{ param.name }}{% else %}arg{{ param.index }}{% endif %}{% endfor %}\n        {% call swiftifyMethodName method %}ReceivedInvocations.append({% for param in method.parameters %}{% if not param.name == \"\" %}{{ param.name }}{% else %}arg{{ param.index }}{% endif %}){% endfor %}\n    {% else %}\n    {% if not method.parameters.count == 0 and not hasNonEscapingClosures %}\n        {% call swiftifyMethodName method %}ReceivedArguments = ({% for param in method.parameters %}{{ param.name }}: {{ param.name }}{% if not forloop.last%}, {% endif %}{% endfor %})\n        {% call swiftifyMethodName method %}ReceivedInvocations.append(({% for param in method.parameters %}{{ param.name }}: {{ param.name }}{% if not forloop.last%}, {% endif %}{% endfor %}))\n    {% endif %}\n    {% endif %}\n{% endmacro %}\n\n{% macro methodClosureName method %}{% call swiftifyMethodName method %}Closure{% endmacro %}\n\n{% macro closureReturnTypeName method %}{% if method.isOptionalReturnType %}{{ method.unwrappedReturnTypeName }}?{% else %}{{ method.returnTypeName }}{% endif %}{% endmacro %}\n\n{% macro getTypeName type %}{% if type.actualTypeName %}{{ type.actualTypeName }}{% else %}{{ type.name }}{% endif %}{% endmacro -%}\n\n{% macro throwsSpecifier throwable %}{% if throwable.throws %}throws{% if throwable.throwsTypeName %}({% call getTypeName throwable.throwsTypeName %}){% endif %}{% endif %}{% endmacro -%}\n\n{% macro methodClosureDeclaration method %}\n    {% call accessLevel method.accessLevel %}{% call staticSpecifier method %}var {% call methodClosureName method %}: (({% for param in method.parameters %}{% call existentialClosureVariableTypeName param.typeName param.isVariadic true %}{% if not forloop.last %}, {% elif param.typeName.isClosure and param.typeName.closure.returnTypeName.name|contains:\"any \" %}{% endif %}{% endfor %}) {% if method.isAsync %}async {% endif %}{% call throwsSpecifier method %}{{ ' ' if method.throws }}-> {% if method.isInitializer %}Void{% else %}{% call existentialVariableTypeName method.returnTypeName true %}{% endif %})?\n{% endmacro %}\n\n{% macro methodClosureCallParameters method %}{% for param in method.parameters %}{{ '&' if param.typeName.name | hasPrefix:\"inout \" }}{% if not param.name == \"\" %}{{ param.name }}{% else %}arg{{ param.index }}{% endif %}{% if not forloop.last %}, {% endif %}{% endfor %}{% endmacro %}\n\n{% macro mockMethod method %}\n    //MARK: - {{ method.shortName }}\n\n    {% if not method.isThrowsTypeGeneric %}\n    {% if method.throws %}\n        {% call methodThrowableErrorDeclaration method %}\n    {% endif %}\n    {% if not method.isInitializer %}\n    {% call accessLevel method.accessLevel %}{% call staticSpecifier method %}var {% call swiftifyMethodName method %}CallsCount = 0\n    {% call accessLevel method.accessLevel %}{% call staticSpecifier method %}var {% call swiftifyMethodName method %}Called: Bool {\n        return {% call swiftifyMethodName method %}CallsCount > 0\n    }\n    {% endif %}\n    {% set hasNonEscapingClosures %}\n        {%- for param in method.parameters where param.isClosure and not param.typeAttributes.escaping and not param.isOptional %}\n            {{ true }}\n        {% endfor -%}\n    {% endset %}\n    {% if method.parameters.count == 1 and not hasNonEscapingClosures %}\n    {% call accessLevel method.accessLevel %}{% call staticSpecifier method %}var {% call swiftifyMethodName method %}Received{% for param in method.parameters %}{{ param.name|upperFirstLetter }}: {{ '(' if param.isClosure }}({% call existentialClosureVariableTypeName param.typeName.unwrappedTypeName param.isVariadic false %}{{ ')' if param.isClosure }})?{% endfor %}\n    {% call accessLevel method.accessLevel %}{% call staticSpecifier method %}var {% call swiftifyMethodName method %}ReceivedInvocations{% for param in method.parameters %}: [{{ '(' if param.isClosure }}({% call existentialClosureVariableTypeName param.typeName.unwrappedTypeName param.isVariadic false %}){{ ')' if param.isClosure }}{%if param.typeName.isOptional%}?{%endif%}]{% endfor %} = []\n    {% elif not method.parameters.count == 0 and not hasNonEscapingClosures %}\n    {% call accessLevel method.accessLevel %}{% call staticSpecifier method %}var {% call swiftifyMethodName method %}ReceivedArguments: ({% for param in method.parameters %}{{ param.name }}: {% if param.typeAttributes.escaping %}{% call existentialClosureTupleVariableTypeName param.typeName.unwrappedTypeName param.isVariadic false %}{% else %}{% call existentialClosureTupleVariableTypeName param.typeName param.isVariadic false %}{% endif %}{{ ', ' if not forloop.last }}{% endfor %})?\n    {% call accessLevel method.accessLevel %}{% call staticSpecifier method %}var {% call swiftifyMethodName method %}ReceivedInvocations: [({% for param in method.parameters %}{{ param.name }}: {% if param.typeAttributes.escaping %}{% call existentialClosureTupleVariableTypeName param.typeName.unwrappedTypeName param.isVariadic false %}{% else %}{% call existentialClosureTupleVariableTypeName param.typeName param.isVariadic false %}{% endif %}{{ ', ' if not forloop.last }}{% endfor %})] = []\n    {% endif %}\n    {% if not method.returnTypeName.isVoid and not method.isInitializer %}\n    {% call accessLevel method.accessLevel %}{% call staticSpecifier method %}var {% call swiftifyMethodName method %}ReturnValue: {{ '(' if method.returnTypeName.isClosure and not method.isOptionalReturnType or method.returnTypeName|contains:\"any \"}}{% call existentialVariableTypeName method.returnTypeName false %}{{ ')' if method.returnTypeName.isClosure and not method.isOptionalReturnType or method.returnTypeName|contains:\"any \" }}{{ '!' if not method.isOptionalReturnType }}\n    {% endif %}\n    {% call methodClosureDeclaration method %}\n    {% endif %}\n\n{% if method.isInitializer %}\n    {% call accessLevel method.accessLevel %}required {{ method.name }} {\n        {% if method.isThrowsTypeGeneric %}\n        fatalError(\"Generic typed throws in inits are not fully supported yet\")\n        {% else %}\n        {% call methodReceivedParameters method %}\n        {% call methodClosureName method %}?({% call methodClosureCallParameters method %})\n        {% endif %}\n    }\n{% else %}\n    {% for name, attribute in method.attributes %}\n    {% for value in attribute %}\n    {{ value }}\n    {% endfor %}\n    {% endfor %}\n    {% call accessLevel method.accessLevel %}{% call staticSpecifier method %}{% call methodName method %}{{ ' async' if method.isAsync }}{{ ' ' if method.throws }}{% call throwsSpecifier method %}{% if not method.returnTypeName.isVoid %} -> {% call existentialVariableTypeName method.returnTypeName false %}{% endif %} {\n        {% if method.isThrowsTypeGeneric %}\n        fatalError(\"Generic typed throws are not fully supported yet\")\n        {% else %}\n        {% call swiftifyMethodName method %}CallsCount += 1\n        {% call methodReceivedParameters method %}\n        {% if method.throws %}\n        {% call methodThrowableErrorUsage method %}\n        {% endif %}\n        {% if method.returnTypeName.isVoid %}\n        {% if method.throws %}try {% endif %}{% if method.isAsync %}await {% endif %}{% call methodClosureName method %}?({% call methodClosureCallParameters method %})\n        {% else %}\n        if let {% call methodClosureName method %} = {% call methodClosureName method %} {\n            return {{ 'try ' if method.throws }}{{ 'await ' if method.isAsync }}{% call methodClosureName method %}({% call methodClosureCallParameters method %})\n        } else {\n            return {% call swiftifyMethodName method %}ReturnValue\n        }\n        {% endif %}\n        {% endif %}\n    }\n\n{% endif %}\n{% endmacro %}\n\n{% macro mockSubscript subscript index %}\n    //MARK: - Subscript #{{ index }}\n    {% call accessLevel subscript.readAccess %}subscript{% if subscript.isGeneric %}<{% for genericParameter in subscript.genericParameters %}{{ genericParameter.name }}{% if genericParameter.inheritedTypeName %}: {{ genericParameter.inheritedTypeName.name }}{% endif %}{{ ', ' if not forloop.last }}{% endfor %}>{% endif %}({% for parameter in subscript.parameters %}{{ parameter.asSource }}{{ ', ' if not forloop.last }}{% endfor %}) -> {{ subscript.returnTypeName.name }}{% if subscript.genericRequirements|count != 0 %} where {% for requirement in subscript.genericRequirements %}{{ requirement.leftType.name }} {{ requirement.relationshipSyntax }} {{ requirement.rightType.typeName.name }}{{ ', ' if not forloop.last }}{% endfor %}{% endif %} {\n        {% if subscript.readAccess %}get{% if subscript.isAsync %} async{% endif %}{% if subscript.throws %} {% call throwsSpecifier subscript %}{% endif %} { fatalError(\"Subscripts are not fully supported yet\") }{% endif %}\n        {% if subscript.writeAccess %}set { fatalError(\"Subscripts are not fully supported yet\") }{% endif %}\n    }\n{% endmacro %}\n\n{% macro resetMethod method %}\n        {# for type method which are mocked, a way to reset the invocation, argument, etc #}\n        {% if method.isStatic and not method.isInitializer %} //MARK: - {{ method.shortName }}\n        {% if not method.isInitializer %}\n        {% call swiftifyMethodName method %}CallsCount = 0\n        {% endif %}\n        {% if method.parameters.count == 1 %}\n        {% call swiftifyMethodName method %}Received{% for param in method.parameters %}{{ param.name|upperFirstLetter }}{% endfor %} = nil\n        {% call swiftifyMethodName method %}ReceivedInvocations = []\n        {% elif not method.parameters.count == 0 %}\n        {% call swiftifyMethodName method %}ReceivedArguments = nil\n        {% call swiftifyMethodName method %}ReceivedInvocations = []\n        {% endif %}\n        {% call methodClosureName method %} = nil\n        {% if method.throws %}\n        {% call swiftifyMethodName method %}ThrowableError = nil\n        {% endif %}\n\n        {% endif %}\n\n{% endmacro %}\n\n{% macro mockOptionalVariable variable %}\n    {% call accessLevel variable.readAccess %}var {% call mockedVariableName variable %}: {% call existentialVariableTypeName variable.typeName false %}\n{% endmacro %}\n\n{% macro mockNonOptionalArrayOrDictionaryVariable variable %}\n    {% call accessLevel variable.readAccess %}var {% call mockedVariableName variable %}: {% call existentialVariableTypeName variable.typeName false %} = {% if variable.isArray %}[]{% elif variable.isDictionary %}[:]{% endif %}\n{% endmacro %}\n\n{% macro mockNonOptionalVariable variable %}\n    {% call accessLevel variable.readAccess %}var {% call mockedVariableName variable %}: {% call existentialVariableTypeName variable.typeName false %} {\n        get { return {% call underlyingMockedVariableName variable %} }\n        set(value) { {% call underlyingMockedVariableName variable %} = value }\n    }\n    {% set wrappedTypeName %}{% if variable.typeName.isProtocolComposition %}({% call existentialVariableTypeName variable.typeName false %}){% else %}{% call existentialVariableTypeName variable.typeName false %}{% endif %}{% endset %}\n    {% call accessLevel variable.readAccess %}var {% call underlyingMockedVariableName variable %}: ({% call existentialVariableTypeName wrappedTypeName false %})!\n{% endmacro %}\n\n{% macro variableThrowableErrorDeclaration variable %}\n    {% call accessLevel variable.readAccess %}var {% call mockedVariableName variable %}ThrowableError: {% if variable.throwsTypeName %}({% call getTypeName variable.throwsTypeName %})?{% else %}Error?{% endif %}\n{% endmacro %}\n\n{% macro variableThrowableErrorUsage variable %}\n            if let error = {% call mockedVariableName variable %}ThrowableError {\n                throw error\n            }\n{% endmacro %}\n\n{% macro variableClosureDeclaration variable %}\n    {% call accessLevel variable.readAccess %}var {% call variableClosureName variable %}: (() {% if variable.isAsync %}async {% endif %}{% if variable.throws %}{% call throwsSpecifier variable %} {% endif %}-> {% call existentialVariableTypeName variable.typeName true %})?\n{% endmacro %}\n\n{% macro variableClosureName variable %}{% call mockedVariableName variable %}Closure{% endmacro %}\n\n{% macro mockAsyncOrThrowingVariable variable %}\n    {% call accessLevel variable.readAccess %}var {% call mockedVariableName variable %}CallsCount = 0\n    {% call accessLevel variable.readAccess %}var {% call mockedVariableName variable %}Called: Bool {\n        return {% call mockedVariableName variable %}CallsCount > 0\n    }\n\n    {% call accessLevel variable.readAccess %}var {% call mockedVariableName variable %}: {% call existentialVariableTypeName variable.typeName false %} {\n        get {% if variable.isAsync %}async {% endif %}{% if variable.throws %}{% call throwsSpecifier variable %} {% endif %}{\n            {% call mockedVariableName variable %}CallsCount += 1\n            {% if variable.throws %}\n            {% call variableThrowableErrorUsage variable %}\n            {% endif %}\n            if let {% call variableClosureName variable %} = {% call variableClosureName variable %} {\n                return {{ 'try ' if variable.throws }}{{ 'await ' if variable.isAsync }}{% call variableClosureName variable %}()\n            } else {\n                return {% call underlyingMockedVariableName variable %}\n            }\n        }\n    }\n    {% call accessLevel variable.readAccess %}var {% call underlyingMockedVariableName variable %}: {% call existentialVariableTypeName variable.typeName false %}{{ '!' if not variable.isOptional }}\n    {% if variable.throws %}\n        {% call variableThrowableErrorDeclaration variable %}\n    {% endif %}\n    {% call variableClosureDeclaration method %}\n{% endmacro %}\n\n{% macro underlyingMockedVariableName variable %}underlying{{ variable.name|upperFirstLetter }}{% endmacro %}\n{% macro mockedVariableName variable %}{{ variable.name }}{% endmacro %}\n{# Swift does not support closures with implicitly unwrapped optional return value type. That is why existentialVariableTypeName.isNotAllowedToBeImplicitlyUnwrappedOptional should be true in such case #}\n{% macro existentialVariableTypeName typeName isNotAllowedToBeImplicitlyUnwrappedOptional -%}\n    {%- if typeName|contains:\"<\" and typeName|contains:\">\" -%}\n        {{ typeName }}\n    {%- elif typeName|contains:\"[\" and typeName|contains:\"]\" -%}\n        {{ typeName }}\n    {%- elif typeName|contains:\"any \" and typeName|contains:\"!\"  -%}\n        {{ typeName | replace:\"any\",\"(any\" | replace:\"!\",\")!\" }}\n    {%- elif typeName|contains:\"any \" and typeName.isOptional and not typeName|contains:\"(\" -%}\n        {{ typeName | replace:\"any\",\"(any\" | replace:\"?\",\")?\" }}\n    {%- elif typeName|contains:\"any \" and typeName.isClosure and typeName|contains:\"?\" -%}\n        ({{ typeName | replace:\"any\",\"(any\" | replace:\"?\",\")?\" }})\n    {%- elif typeName|contains:\"some \" and typeName|contains:\"!\"  -%}\n        {{ typeName | replace:\"some\",\"(some\" | replace:\"!\",\")!\" }}\n    {%- elif typeName|contains:\"some \" and typeName.isOptional  -%}\n        {{ typeName | replace:\"some\",\"(some\" | replace:\"?\",\")?\" }}\n    {%- elif typeName|contains:\"some \" and typeName.isClosure and typeName|contains:\"?\" -%}\n        ({{ typeName | replace:\"some\",\"(some\" | replace:\"?\",\")?\" }})\n    {%- elif typeName.isClosure -%}\n        ({{ typeName }})\n    {%- elif isNotAllowedToBeImplicitlyUnwrappedOptional -%}\n        {{ typeName | replace:\"!\",\"\" }}\n    {%- else -%}\n        {{ typeName }}\n    {%- endif -%}\n{%- endmacro %}\n{# Swift does not support closures with variadic parameters of existential types as arguments. That is why existentialClosureVariableTypeName.isVariadic should be false when typeName is a closure #}\n{% macro existentialClosureVariableTypeName typeName isVariadic keepInout -%}\n    {% set name %}\n        {%- if keepInout -%}\n            {{ typeName }}\n        {%- else -%}\n            {{ typeName | replace:\"inout \",\"\" }}\n        {%- endif -%}\n    {% endset %}\n    {%- if typeName|contains:\"[\" and typeName|contains:\"]\" -%}\n        {{ name }}\n    {%- elif typeName|contains:\"any \" and typeName|contains:\"!\" -%}\n        {{ name | replace:\"any\",\"(any\" | replace:\"!\",\")?\" }}\n    {%- elif typeName|contains:\"any \" and typeName.isOptional and typeName.isClosure -%}\n        ({{ typeName.unwrappedTypeName| replace:\"inout \",\"\" | replace:\"any\",\"(any\" | replace:\"?\",\")?\" }})?\n    {%- elif typeName|contains:\"any \" and typeName.isClosure and typeName|contains:\"?\" and typeName.closure.parameters.count > 1 -%}\n        {{ name | replace:\"any\",\"(any\" | replace:\"?\",\")?\" | replace:\") ->\",\")) ->\" }}\n    {%- elif typeName|contains:\"any \" and typeName.isClosure and typeName|contains:\"?\" and typeName.closure.parameters.count > 1 -%}\n        {{ name | replace:\"any\",\"(any\" | replace:\"?\",\")?\" }}\n    {%- elif typeName|contains:\"any \" and typeName|contains:\"?\" -%}\n        {{ name | replace:\"any\",\"(any\" | replace:\"?\",\")?\" }}\n    {%- elif typeName|contains:\"some \" and typeName|contains:\"!\" -%}\n        {{ name | replace:\"some\",\"(any\" | replace:\"!\",\")?\" }}\n    {%- elif typeName|contains:\"some \" and typeName.isClosure and typeName|contains:\"?\" -%}\n        {{ name | replace:\"some\",\"(any\" | replace:\"?\",\")?\" }}\n    {%- elif typeName|contains:\"some \" and typeName|contains:\"?\" -%}\n        {{ name | replace:\"some\",\"(any\" | replace:\"?\",\")?\" }}\n    {%- elif isVariadic and typeName|contains:\"any \" -%}\n        [({{ name }})]\n    {%- elif isVariadic -%}\n        {{ name }}...\n    {%- else -%}\n        {{ name|replace:\"some \",\"any \" }}\n    {%- endif -%}\n{%- endmacro %}\n{# Swift does not support tuples with variadic parameters. That is why existentialClosureVariableTypeName.isVariadic should be false when typeName is a closure #}\n{% macro existentialClosureTupleVariableTypeName typeName isVariadic keepInout -%}\n    {% set name %}\n        {%- if keepInout -%}\n            {{ typeName }}\n        {%- else -%}\n            {{ typeName | replace:\"inout \",\"\" }}\n        {%- endif -%}\n    {% endset %}\n    {%- if typeName|contains:\"[\" and typeName|contains:\"]\" -%}\n        {{ name }}\n    {%- elif typeName|contains:\"any \" and typeName|contains:\"!\" -%}\n        {{ name | replace:\"any\",\"(any\" | replace:\"!\",\")?\" }}\n    {%- elif typeName|contains:\"any \" and typeName.isOptional and typeName.isClosure -%}\n        ({{ typeName.unwrappedTypeName| replace:\"inout \",\"\" | replace:\"any\",\"(any\" | replace:\"?\",\")?\" }})?\n    {%- elif typeName|contains:\"any \" and typeName.isClosure and typeName|contains:\"?\" -%}\n        {{ name | replace:\"any\",\"(any\" | replace:\"?\",\")?\" }}\n    {%- elif typeName|contains:\"any \" and typeName|contains:\"?\" -%}\n        {{ name | replace:\"any\",\"(any\" | replace:\"?\",\")?\" }}\n    {%- elif typeName|contains:\"some \" and typeName|contains:\"!\" -%}\n        {{ name | replace:\"some\",\"(any\" | replace:\"!\",\")?\" }}\n    {%- elif typeName|contains:\"some \" and typeName.isClosure and typeName|contains:\"?\" -%}\n        {{ name | replace:\"some\",\"(any\" | replace:\"?\",\")?\" }}\n    {%- elif typeName|contains:\"some \" and typeName|contains:\"?\" -%}\n        {{ name | replace:\"some\",\"(any\" | replace:\"?\",\")?\" }}\n    {%- elif isVariadic -%}\n        [{{ name }}]\n    {%- else -%}\n        {{ name|replace:\"some \",\"any \" }}\n    {%- endif -%}\n{%- endmacro %}\n{% macro existentialParameterTypeName typeName isVariadic -%}\n    {%- if typeName|contains:\"[\" and typeName|contains:\"]\" -%}\n        {{ typeName }}\n    {%- elif typeName|contains:\"any \" and typeName|contains:\"?,\" and typeName|contains:\">?\" -%}\n        {{ typeName | replace:\"any\",\"(any\" | replace:\"?,\",\")?,\" }}\n    {%- elif typeName|contains:\"any \" and typeName|contains:\"!\" -%}\n        {{ typeName | replace:\"any\",\"(any\" | replace:\"!\",\")!\" }}\n    {%- elif typeName|contains:\"any \" and typeName.isOptional and typeName.isClosure -%}\n        ({{ typeName.unwrappedTypeName | replace:\"any\",\"(any\" | replace:\"?\",\")?\" }})?\n    {%- elif typeName|contains:\"any \" and typeName.isClosure and typeName.closure.parameters.count > 1 and typeName.closure.returnTypeName.name|contains:\"any \" and typeName|contains:\"?\" -%}\n        {{ typeName | replace:\"any\",\"(any\" | replace:\"?\",\")?\" | replace:\") ->\",\")) ->\" }})\n    {%- elif typeName|contains:\"any \" and typeName.isClosure and typeName.closure.returnTypeName.name|contains:\"any \" and typeName|contains:\"?\" -%}\n        {{ typeName | replace:\"any\",\"(any\" | replace:\"?\",\")?\" }})\n    {%- elif typeName|contains:\"any \" and typeName.isClosure and typeName|contains:\"?\" -%}\n        {{ typeName | replace:\"any\",\"(any\" | replace:\"?\",\")?\" }}\n    {%- elif typeName|contains:\"any \" and typeName.isOptional -%}\n        {{ typeName | replace:\"any\",\"(any\" | replace:\"?\",\")?\" }}\n    {%- elif typeName|contains:\"some \" and typeName|contains:\"!\" -%}\n        {{ typeName | replace:\"some\",\"(some\" | replace:\"!\",\")!\" }}\n    {%- elif typeName|contains:\"some \" and typeName.isClosure and typeName|contains:\"?\" -%}\n        {{ typeName | replace:\"some\",\"(some\" | replace:\"?\",\")?\" }}\n    {%- elif typeName|contains:\"some \" and typeName.isOptional -%}\n        {{ typeName | replace:\"some\",\"(some\" | replace:\"?\",\")?\" }}\n    {%- elif isVariadic -%}\n        {{ typeName }}...\n    {%- else -%}\n        {{ typeName }}\n    {%- endif -%}\n{%- endmacro %}\n{% macro methodName method %}func {{ method.shortName}}({%- for param in method.parameters %}{% if param.argumentLabel == nil %}_ {% if not param.name == \"\" %}{{ param.name }}{% else %}arg{{ param.index }}{% endif %}{%elif param.argumentLabel == param.name%}{{ param.name }}{%else%}{{ param.argumentLabel }} {{ param.name }}{% endif %}: {% if param.typeName.isClosure and param.typeName.closure.parameters.count > 1 %}({% endif %}{% call existentialParameterTypeName param.typeName param.isVariadic %}{% if param.typeName.isClosure and param.typeName.closure.parameters.count > 1 and not (param.typeName|contains:\"any \" and param.typeName.closure.returnTypeName.name|contains:\"any \" and param.typeName|contains:\"?\") %}){% endif %}{% if not forloop.last %}, {% endif %}{% endfor -%}){% endmacro %}\n\n{% macro extractProtocolCompositionFromAssociatedTypes type -%}\n    {%- if type.associatedTypes|sortedValuesByKeys|count > 0 -%}\n    <\n    {%- for associatedType in type.associatedTypes|sortedValuesByKeys -%}\n    {% if associatedType.type.kind != nil and associatedType.type.kind|contains:\"protocol\" %}\n    {{ associatedType.name }}: {{ associatedType.typeName }},\n    {%- endif -%}\n    {%- endfor -%}\n    >\n    {%- endif -%}\n{%- endmacro %}\n\n{%- macro extractProtocolRequirementsFromAssociatedTypes associatedTypes -%}\n    {%- for associatedType in associatedTypes -%}\n        {%- if associatedType.type.kind != nil and associatedType.type.kind|contains:\"protocol\" -%}\n            {%- for requirement in associatedType.type.genericRequirements -%}\n                {%- set requirementString -%}\n                    {{ requirement.leftType.name }} {{ requirement.relationshipSyntax }} {{ requirement.rightType.typeName.name }}\n                {%- endset -%}\n                {{ requirementString }},\n            {%- endfor -%}\n        {%- endif -%}\n    {%- endfor -%}\n{%- endmacro -%}\n\n\n{% macro extractProtocolRequirementsFromType type -%}\n    {%- set requirements -%}\n    {% call extractProtocolRequirementsFromAssociatedTypes type.associatedTypes|sortedValuesByKeys %}\n    {%- endset -%}\n    {% if requirements|isEmpty == false %}\n    where {{ requirements }}{\n    {%- else -%}\n    {\n    {% endif %}\n{%- endmacro %}\n\n{% macro extractRequiredProtocolConformance type -%}\n    {% if type.based.Sendable %}, @unchecked Sendable{% endif %}\n{%- endmacro %}\n\n{% for type in types.protocols where type.based.AutoMockable or type|annotated:\"AutoMockable\" %}{% if type.name != \"AutoMockable\" %}\n{% call accessLevel type.accessLevel %}class {{ type.name }}Mock{% set generics %}{% call extractProtocolCompositionFromAssociatedTypes type %}{% endset %}{{ generics | replace:\",>\",\">\"}}: {{ type.name }}{% call extractRequiredProtocolConformance type %} {%- set requirements -%}{% call extractProtocolRequirementsFromType type %}{%- endset -%} {{ requirements|replace:\",{\",\"{\"|replace:\"{\",\" {\" }}\n{% for associatedType in type.associatedTypes|sortedValuesByKeys %}\n    {% if associatedType.type.kind == nil or not associatedType.type.kind|contains:\"protocol\" %}\n    typealias {{ associatedType.name }} = {% if associatedType.type != nil %}{{ associatedType.type.name }}{% elif associatedType.typeName != nil %}{{ associatedType.typeName.name }}{% else %}Any{% endif %}\n    {% endif %}\n{% endfor %}\n\n    {% if type.accessLevel == \"public\" %}public init() {}{% endif %}\n\n{% for variable in type.allVariables|!definedInExtension %}\n    {% if variable.isAsync or variable.throws %}{% call mockAsyncOrThrowingVariable variable %}{% elif variable.isOptional %}{% call mockOptionalVariable variable %}{% elif variable.isArray or variable.isDictionary %}{% call mockNonOptionalArrayOrDictionaryVariable variable %}{% else %}{% call mockNonOptionalVariable variable %}{% endif %}\n{% endfor %}\n\n{% if type.allMethods|static|count != 0 and type.allMethods|initializer|count != type.allMethods|static|count %}\n    {% call accessLevel type.accessLevel %}static func reset()\n    {\n    {% for method in type.allMethods|static|!definedInExtension %}\n        {% call resetMethod method %}\n    {% endfor %}\n    }\n{% endif %}\n\n{% for method in type.allMethods|!definedInExtension %}\n    {% call mockMethod method %}\n{% endfor %}\n\n{% for subscript in type.allSubscripts|!definedInExtension %}\n    {% call mockSubscript subscript forloop.counter %}\n{% endfor %}\n}\n{% endif %}{% endfor %}\n"
  },
  {
    "path": "Templates/Templates/Decorator.swifttemplate",
    "content": "<%# Constructs full method declaration string -%>\n<%\nfunc methodDeclaration(_ method: SourceryRuntime.Method) -> String {\n    var result = method.name\n    if method.throws {\n        result = result + \" throws\"\n    } else if method.rethrows {\n        result = result + \" rethrows\"\n    }\n    return result + \" -> \\(method.returnTypeName)\"\n}\n-%>\n<%# Constructs method call string passing in parameters with their local names -%>\n<%\nfunc methodCall(_ method: SourceryRuntime.Method) -> String {\n    let params = method.parameters.map({\n        if let label = $0.argumentLabel {\n            return \"\\(label): \\($0.name)\"\n        } else {\n            return $0.name\n        }\n    }).joined(separator: \", \")\n    var result = \"decorated.\\(method.callName)(\\(params))\"\n\n    if method.throws {\n        result = \"try \" + result\n    }\n    if !method.returnTypeName.isVoid {\n        result = \"return \" + result\n    }\n    return result\n}\n-%>\n<% for type in types.all {\n    guard let protocolToDecorate = type.annotations[\"decorate\"] as? String else { continue }\n    if let aProtocol = types.protocols.first(where: { $0.name == protocolToDecorate }) { -%>\n\n    // sourcery:inline:auto:<%= type.name %>.autoDecorated\n    <%= type.accessLevel %> private(set) var decorated: <%= aProtocol.name %>\n\n    <%= type.accessLevel %> init(decorated: <%= aProtocol.name %>) {\n        self.decorated = decorated\n    }\n\n    <%_ for property in aProtocol.variables { -%>\n    <%= type.accessLevel %> var <%= property.name %>: <%= property.typeName %> {\n        <%_ if property.writeAccess != \"\" { -%>\n        get {\n            <% if let decorateGet = type.annotations[\"decorateGet\"] { %><%= decorateGet %>\n            <%_ } -%>\n            return decorated.<%= property.name %>\n        }\n        set {\n            <% if let decorateSet = type.annotations[\"decorateSet\"] { %><%= decorateSet %>\n            <%_ } -%>\n            decorated.<%= property.name %> = newValue\n        }\n        <%_ } else { -%>\n        <% if let decorateGet = type.annotations[\"decorateGet\"] { %><%= decorateGet %>\n        <%_ } -%>\n        return decorated.<%= property.name %>\n        <%_ } -%>\n    }\n\n    <%_ } -%>\n    <%_ -%>\n    <%_ for method in aProtocol.methods {\n            let implements = type.methods.contains(where: { $0.name == method.name && $0.returnTypeName.name == method.returnTypeName.name })\n            guard !implements else { continue } -%>\n    <%= type.accessLevel %> func <%= methodDeclaration(method) %> {\n        <% if let decorateMethod = type.annotations[\"decorateMethod\"] { %><%= decorateMethod %>\n        <%_ } -%>\n        <%= methodCall(method) %>\n    }\n\n<%      } %>\n    // sourcery:end\n\n<%    }\n}\n%>\n"
  },
  {
    "path": "Templates/Templates/LinuxMain.stencil",
    "content": "import XCTest\n\n{{ argument.testimports }}\n{% for type in types.classes|based:\"XCTestCase\" %}\n{% if not type.annotations.disableTests %}extension {{ type.name }} {\n  static var allTests: [(String, ({{ type.name }}) -> () throws -> Void)] = [\n  {% for method in type.methods %}{% if method.parameters.count == 0 and method.shortName|hasPrefix:\"test\" %}  (\"{{ method.shortName }}\", {{ method.shortName }}){{ ',' if not forloop.last }}\n  {% endif %}{% endfor %}]\n}\n{% endif %}{% endfor %}\n\n// swiftlint:disable trailing_comma\nXCTMain([\n{% for type in types.classes|based:\"XCTestCase\" %}{% if not type.annotations.disableTests %}  testCase({{ type.name }}.allTests),\n{% endif %}{% endfor %}])\n// swiftlint:enable trailing_comma\n\n"
  },
  {
    "path": "Templates/Templates.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t328D9E935602E7E23C76D3C3 /* Pods_CodableContextTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 433370DB5CFA428C5E58DD79 /* Pods_CodableContextTests.framework */; };\n\t\t636D78572081781E00160CC4 /* AutoCodable.swifttemplate in Resources */ = {isa = PBXBuildFile; fileRef = 636D78472080251800160CC4 /* AutoCodable.swifttemplate */; };\n\t\t63A4F4D120964FB3000F8CDF /* CodableContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 63A4F4CF20964FB3000F8CDF /* CodableContext.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t63A4F4D520964FBE000F8CDF /* AutoCodable.generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 636D784C208169E100160CC4 /* AutoCodable.generated.swift */; };\n\t\t63A4F4D620964FC5000F8CDF /* AutoCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 636D78492080256500160CC4 /* AutoCodable.swift */; };\n\t\t63A4F4E02096509A000F8CDF /* CodableContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63A4F4DF2096509A000F8CDF /* CodableContextTests.swift */; };\n\t\t63A4F4E22096509A000F8CDF /* CodableContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63A4F4CD20964FB3000F8CDF /* CodableContext.framework */; };\n\t\t63A4F4E820965AD5000F8CDF /* AutoCodable.generated.swift in CopyFiles */ = {isa = PBXBuildFile; fileRef = 636D784C208169E100160CC4 /* AutoCodable.generated.swift */; };\n\t\t6D037EA11EC26E6300FA6C91 /* AutoEquatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D037EA01EC26E6300FA6C91 /* AutoEquatable.swift */; };\n\t\t6D037EA31EC26E6A00FA6C91 /* AutoEquatable.expected in Resources */ = {isa = PBXBuildFile; fileRef = 6D037EA21EC26E6A00FA6C91 /* AutoEquatable.expected */; };\n\t\t6D0AF6BC1EC5EDD100F9A410 /* AutoHashable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D0AF6BB1EC5EDD100F9A410 /* AutoHashable.swift */; };\n\t\t6D130B791ECACCDF00E9642A /* AutoLenses.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D130B781ECACCDF00E9642A /* AutoLenses.swift */; };\n\t\t6D130B7B1ECACD0F00E9642A /* AutoLenses.expected in Resources */ = {isa = PBXBuildFile; fileRef = 6D130B7A1ECACD0F00E9642A /* AutoLenses.expected */; };\n\t\t6D130B7C1ECACEB800E9642A /* AutoLenses.generated.swift in Resources */ = {isa = PBXBuildFile; fileRef = 6D342C9A1EBA3156006EEBEC /* AutoLenses.generated.swift */; };\n\t\t6D342C831EBA13DF006EEBEC /* AutoCases.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 6D342C7C1EBA13DF006EEBEC /* AutoCases.stencil */; };\n\t\t6D342C841EBA13DF006EEBEC /* AutoEquatable.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 6D342C7D1EBA13DF006EEBEC /* AutoEquatable.stencil */; };\n\t\t6D342C851EBA13DF006EEBEC /* AutoHashable.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 6D342C7E1EBA13DF006EEBEC /* AutoHashable.stencil */; };\n\t\t6D342C861EBA13DF006EEBEC /* AutoLenses.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 6D342C7F1EBA13DF006EEBEC /* AutoLenses.stencil */; };\n\t\t6D342C871EBA13DF006EEBEC /* AutoMockable.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 6D342C801EBA13DF006EEBEC /* AutoMockable.stencil */; };\n\t\t6D342C891EBA13DF006EEBEC /* LinuxMain.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 6D342C821EBA13DF006EEBEC /* LinuxMain.stencil */; };\n\t\t6D342C911EBA146F006EEBEC /* TemplatesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D342C8F1EBA146F006EEBEC /* TemplatesTests.swift */; };\n\t\t6D342C941EBA155A006EEBEC /* AutoCases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D342C931EBA155A006EEBEC /* AutoCases.swift */; };\n\t\t6D342CA31EBA5415006EEBEC /* AutoCases.expected in Resources */ = {isa = PBXBuildFile; fileRef = 6D342CA11EBA35E9006EEBEC /* AutoCases.expected */; };\n\t\t6D342CA41EBA54DF006EEBEC /* AutoCases.generated.swift in Resources */ = {isa = PBXBuildFile; fileRef = 6D342C971EBA3156006EEBEC /* AutoCases.generated.swift */; };\n\t\t6D4D84481EC667630005932D /* AutoEquatable.generated.swift in Resources */ = {isa = PBXBuildFile; fileRef = 6D342C981EBA3156006EEBEC /* AutoEquatable.generated.swift */; };\n\t\t6D4D84491EC667650005932D /* AutoHashable.generated.swift in Resources */ = {isa = PBXBuildFile; fileRef = 6D342C991EBA3156006EEBEC /* AutoHashable.generated.swift */; };\n\t\t6D6645C31ECC1824004C1948 /* AutoMockable.expected in Resources */ = {isa = PBXBuildFile; fileRef = 6D6645C21ECC1824004C1948 /* AutoMockable.expected */; };\n\t\t6D6645C51ECC184A004C1948 /* AutoMockable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D6645C41ECC184A004C1948 /* AutoMockable.swift */; };\n\t\t6D6645C61ECC1CAA004C1948 /* AutoMockable.generated.swift in Resources */ = {isa = PBXBuildFile; fileRef = 6D6645C01ECC181A004C1948 /* AutoMockable.generated.swift */; };\n\t\t6D6645C81ECC2187004C1948 /* LinuxMain.expected in Resources */ = {isa = PBXBuildFile; fileRef = 6D6645C71ECC2187004C1948 /* LinuxMain.expected */; };\n\t\t6D6645CA1ECC219C004C1948 /* LinuxMain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D6645C91ECC219C004C1948 /* LinuxMain.swift */; };\n\t\t6D6645CB1ECC22A3004C1948 /* LinuxMain.generated.swift in Resources */ = {isa = PBXBuildFile; fileRef = 6D342C9B1EBA3156006EEBEC /* LinuxMain.generated.swift */; };\n\t\t6D6C19261FC4CE7900CD2A34 /* Decorator.swifttemplate in Resources */ = {isa = PBXBuildFile; fileRef = 6D6C19251FC4CE7900CD2A34 /* Decorator.swifttemplate */; };\n\t\t6DC27BD81EC6592700B73CAF /* AutoHashable.expected in Resources */ = {isa = PBXBuildFile; fileRef = 6DC27BD71EC6592700B73CAF /* AutoHashable.expected */; };\n\t\tB50435DF2157222E00F120DF /* AutoCodable.expected in Resources */ = {isa = PBXBuildFile; fileRef = 636D786B2083B8D700160CC4 /* AutoCodable.expected */; };\n\t\tC03FD2E6F7645376C192094D /* Pods_TemplatesTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26AD1250F60484521E03C14A /* Pods_TemplatesTests.framework */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t63A4F4E32096509A000F8CDF /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6D6A24911EB79E8900C1FB1A /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 63A4F4CC20964FB3000F8CDF;\n\t\t\tremoteInfo = CodableContext;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t63A4F4C420964E7B000F8CDF /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 7;\n\t\t\tfiles = (\n\t\t\t\t63A4F4E820965AD5000F8CDF /* AutoCodable.generated.swift in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t26AD1250F60484521E03C14A /* Pods_TemplatesTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_TemplatesTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t433370DB5CFA428C5E58DD79 /* Pods_CodableContextTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CodableContextTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t636D78472080251800160CC4 /* AutoCodable.swifttemplate */ = {isa = PBXFileReference; explicitFileType = text; path = AutoCodable.swifttemplate; sourceTree = \"<group>\"; };\n\t\t636D78492080256500160CC4 /* AutoCodable.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; path = AutoCodable.swift; sourceTree = \"<group>\"; };\n\t\t636D784C208169E100160CC4 /* AutoCodable.generated.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; path = AutoCodable.generated.swift; sourceTree = \"<group>\"; };\n\t\t636D786B2083B8D700160CC4 /* AutoCodable.expected */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AutoCodable.expected; sourceTree = \"<group>\"; };\n\t\t63A4F4CD20964FB3000F8CDF /* CodableContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CodableContext.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t63A4F4CF20964FB3000F8CDF /* CodableContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CodableContext.h; sourceTree = \"<group>\"; };\n\t\t63A4F4D020964FB3000F8CDF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t63A4F4DD2096509A000F8CDF /* CodableContextTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CodableContextTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t63A4F4DF2096509A000F8CDF /* CodableContextTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodableContextTests.swift; sourceTree = \"<group>\"; };\n\t\t63A4F4E12096509A000F8CDF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t6D037EA01EC26E6300FA6C91 /* AutoEquatable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutoEquatable.swift; sourceTree = \"<group>\"; };\n\t\t6D037EA21EC26E6A00FA6C91 /* AutoEquatable.expected */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AutoEquatable.expected; sourceTree = \"<group>\"; };\n\t\t6D0AF6BB1EC5EDD100F9A410 /* AutoHashable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutoHashable.swift; sourceTree = \"<group>\"; };\n\t\t6D130B781ECACCDF00E9642A /* AutoLenses.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutoLenses.swift; sourceTree = \"<group>\"; };\n\t\t6D130B7A1ECACD0F00E9642A /* AutoLenses.expected */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AutoLenses.expected; sourceTree = \"<group>\"; };\n\t\t6D342C7C1EBA13DF006EEBEC /* AutoCases.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AutoCases.stencil; sourceTree = \"<group>\"; };\n\t\t6D342C7D1EBA13DF006EEBEC /* AutoEquatable.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AutoEquatable.stencil; sourceTree = \"<group>\"; };\n\t\t6D342C7E1EBA13DF006EEBEC /* AutoHashable.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AutoHashable.stencil; sourceTree = \"<group>\"; };\n\t\t6D342C7F1EBA13DF006EEBEC /* AutoLenses.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AutoLenses.stencil; sourceTree = \"<group>\"; };\n\t\t6D342C801EBA13DF006EEBEC /* AutoMockable.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AutoMockable.stencil; sourceTree = \"<group>\"; };\n\t\t6D342C821EBA13DF006EEBEC /* LinuxMain.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LinuxMain.stencil; sourceTree = \"<group>\"; };\n\t\t6D342C8E1EBA146F006EEBEC /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t6D342C8F1EBA146F006EEBEC /* TemplatesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TemplatesTests.swift; sourceTree = \"<group>\"; };\n\t\t6D342C931EBA155A006EEBEC /* AutoCases.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutoCases.swift; sourceTree = \"<group>\"; };\n\t\t6D342C971EBA3156006EEBEC /* AutoCases.generated.swift */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = AutoCases.generated.swift; sourceTree = \"<group>\"; };\n\t\t6D342C981EBA3156006EEBEC /* AutoEquatable.generated.swift */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = AutoEquatable.generated.swift; sourceTree = \"<group>\"; };\n\t\t6D342C991EBA3156006EEBEC /* AutoHashable.generated.swift */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = AutoHashable.generated.swift; sourceTree = \"<group>\"; };\n\t\t6D342C9A1EBA3156006EEBEC /* AutoLenses.generated.swift */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = AutoLenses.generated.swift; sourceTree = \"<group>\"; };\n\t\t6D342C9B1EBA3156006EEBEC /* LinuxMain.generated.swift */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = LinuxMain.generated.swift; sourceTree = \"<group>\"; };\n\t\t6D342CA11EBA35E9006EEBEC /* AutoCases.expected */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AutoCases.expected; sourceTree = \"<group>\"; };\n\t\t6D6645C01ECC181A004C1948 /* AutoMockable.generated.swift */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = AutoMockable.generated.swift; sourceTree = \"<group>\"; };\n\t\t6D6645C21ECC1824004C1948 /* AutoMockable.expected */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AutoMockable.expected; sourceTree = \"<group>\"; };\n\t\t6D6645C41ECC184A004C1948 /* AutoMockable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutoMockable.swift; sourceTree = \"<group>\"; };\n\t\t6D6645C71ECC2187004C1948 /* LinuxMain.expected */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LinuxMain.expected; sourceTree = \"<group>\"; };\n\t\t6D6645C91ECC219C004C1948 /* LinuxMain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LinuxMain.swift; sourceTree = \"<group>\"; };\n\t\t6D6A24AA1EB79E8900C1FB1A /* TemplatesTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TemplatesTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6D6C19251FC4CE7900CD2A34 /* Decorator.swifttemplate */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Decorator.swifttemplate; sourceTree = \"<group>\"; };\n\t\t6DC27BD71EC6592700B73CAF /* AutoHashable.expected */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = AutoHashable.expected; sourceTree = \"<group>\"; };\n\t\t8BC863822106BD763A8B145B /* Pods-TemplatesTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-TemplatesTests.debug.xcconfig\"; path = \"../Pods/Target Support Files/Pods-TemplatesTests/Pods-TemplatesTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tA4E640041AB8FBF997174F87 /* Pods-CodableContextTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-CodableContextTests.debug.xcconfig\"; path = \"../Pods/Target Support Files/Pods-CodableContextTests/Pods-CodableContextTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tAD6C4A9866B1F8FDB6B02DA5 /* Pods-TemplatesTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-TemplatesTests.release.xcconfig\"; path = \"../Pods/Target Support Files/Pods-TemplatesTests/Pods-TemplatesTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tE0F526BDFB067A8F16ACE2F6 /* Pods-CodableContextTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-CodableContextTests.release.xcconfig\"; path = \"../Pods/Target Support Files/Pods-CodableContextTests/Pods-CodableContextTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t63A4F4C920964FB3000F8CDF /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t63A4F4DA2096509A000F8CDF /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t63A4F4E22096509A000F8CDF /* CodableContext.framework in Frameworks */,\n\t\t\t\t328D9E935602E7E23C76D3C3 /* Pods_CodableContextTests.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6D6A24A71EB79E8900C1FB1A /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC03FD2E6F7645376C192094D /* Pods_TemplatesTests.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t63A4F4CE20964FB3000F8CDF /* CodableContext */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t63A4F4CF20964FB3000F8CDF /* CodableContext.h */,\n\t\t\t\t63A4F4D020964FB3000F8CDF /* Info.plist */,\n\t\t\t);\n\t\t\tpath = CodableContext;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t63A4F4DE2096509A000F8CDF /* CodableContextTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t63A4F4DF2096509A000F8CDF /* CodableContextTests.swift */,\n\t\t\t\t63A4F4E12096509A000F8CDF /* Info.plist */,\n\t\t\t);\n\t\t\tpath = CodableContextTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6D342C8C1EBA146F006EEBEC /* Tests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6D342C961EBA18F6006EEBEC /* Generated */,\n\t\t\t\t6D342C921EBA1481006EEBEC /* Expected */,\n\t\t\t\t6D342C8D1EBA146F006EEBEC /* Context */,\n\t\t\t\t6D342C8E1EBA146F006EEBEC /* Info.plist */,\n\t\t\t\t6D342C8F1EBA146F006EEBEC /* TemplatesTests.swift */,\n\t\t\t);\n\t\t\tpath = Tests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6D342C8D1EBA146F006EEBEC /* Context */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6D342C931EBA155A006EEBEC /* AutoCases.swift */,\n\t\t\t\t6D037EA01EC26E6300FA6C91 /* AutoEquatable.swift */,\n\t\t\t\t6D0AF6BB1EC5EDD100F9A410 /* AutoHashable.swift */,\n\t\t\t\t6D130B781ECACCDF00E9642A /* AutoLenses.swift */,\n\t\t\t\t6D6645C41ECC184A004C1948 /* AutoMockable.swift */,\n\t\t\t\t6D6645C91ECC219C004C1948 /* LinuxMain.swift */,\n\t\t\t\t636D78492080256500160CC4 /* AutoCodable.swift */,\n\t\t\t);\n\t\t\tpath = Context;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6D342C921EBA1481006EEBEC /* Expected */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6DC27BD71EC6592700B73CAF /* AutoHashable.expected */,\n\t\t\t\t6D037EA21EC26E6A00FA6C91 /* AutoEquatable.expected */,\n\t\t\t\t6D342CA11EBA35E9006EEBEC /* AutoCases.expected */,\n\t\t\t\t6D130B7A1ECACD0F00E9642A /* AutoLenses.expected */,\n\t\t\t\t6D6645C21ECC1824004C1948 /* AutoMockable.expected */,\n\t\t\t\t6D6645C71ECC2187004C1948 /* LinuxMain.expected */,\n\t\t\t\t636D786B2083B8D700160CC4 /* AutoCodable.expected */,\n\t\t\t);\n\t\t\tpath = Expected;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6D342C961EBA18F6006EEBEC /* Generated */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6D6645C01ECC181A004C1948 /* AutoMockable.generated.swift */,\n\t\t\t\t6D342C971EBA3156006EEBEC /* AutoCases.generated.swift */,\n\t\t\t\t6D342C981EBA3156006EEBEC /* AutoEquatable.generated.swift */,\n\t\t\t\t6D342C991EBA3156006EEBEC /* AutoHashable.generated.swift */,\n\t\t\t\t6D342C9A1EBA3156006EEBEC /* AutoLenses.generated.swift */,\n\t\t\t\t6D342C9B1EBA3156006EEBEC /* LinuxMain.generated.swift */,\n\t\t\t\t636D784C208169E100160CC4 /* AutoCodable.generated.swift */,\n\t\t\t);\n\t\t\tpath = Generated;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6D6A24901EB79E8900C1FB1A = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6D342C8C1EBA146F006EEBEC /* Tests */,\n\t\t\t\t6D6A249B1EB79E8900C1FB1A /* Templates */,\n\t\t\t\t63A4F4CE20964FB3000F8CDF /* CodableContext */,\n\t\t\t\t63A4F4DE2096509A000F8CDF /* CodableContextTests */,\n\t\t\t\t6D6A249A1EB79E8900C1FB1A /* Products */,\n\t\t\t\tCA94A66439D4310F095D40C2 /* Pods */,\n\t\t\t\t72FF6DD085C4C67695145997 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6D6A249A1EB79E8900C1FB1A /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6D6A24AA1EB79E8900C1FB1A /* TemplatesTests.xctest */,\n\t\t\t\t63A4F4CD20964FB3000F8CDF /* CodableContext.framework */,\n\t\t\t\t63A4F4DD2096509A000F8CDF /* CodableContextTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6D6A249B1EB79E8900C1FB1A /* Templates */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6D6C19251FC4CE7900CD2A34 /* Decorator.swifttemplate */,\n\t\t\t\t6D342C7C1EBA13DF006EEBEC /* AutoCases.stencil */,\n\t\t\t\t6D342C7D1EBA13DF006EEBEC /* AutoEquatable.stencil */,\n\t\t\t\t6D342C7E1EBA13DF006EEBEC /* AutoHashable.stencil */,\n\t\t\t\t6D342C7F1EBA13DF006EEBEC /* AutoLenses.stencil */,\n\t\t\t\t6D342C801EBA13DF006EEBEC /* AutoMockable.stencil */,\n\t\t\t\t6D342C821EBA13DF006EEBEC /* LinuxMain.stencil */,\n\t\t\t\t636D78472080251800160CC4 /* AutoCodable.swifttemplate */,\n\t\t\t);\n\t\t\tpath = Templates;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t72FF6DD085C4C67695145997 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t26AD1250F60484521E03C14A /* Pods_TemplatesTests.framework */,\n\t\t\t\t433370DB5CFA428C5E58DD79 /* Pods_CodableContextTests.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tCA94A66439D4310F095D40C2 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8BC863822106BD763A8B145B /* Pods-TemplatesTests.debug.xcconfig */,\n\t\t\t\tAD6C4A9866B1F8FDB6B02DA5 /* Pods-TemplatesTests.release.xcconfig */,\n\t\t\t\tA4E640041AB8FBF997174F87 /* Pods-CodableContextTests.debug.xcconfig */,\n\t\t\t\tE0F526BDFB067A8F16ACE2F6 /* Pods-CodableContextTests.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t63A4F4CA20964FB3000F8CDF /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t63A4F4D120964FB3000F8CDF /* CodableContext.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t63A4F4CC20964FB3000F8CDF /* CodableContext */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 63A4F4D220964FB3000F8CDF /* Build configuration list for PBXNativeTarget \"CodableContext\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t63A4F4C820964FB3000F8CDF /* Sources */,\n\t\t\t\t63A4F4C920964FB3000F8CDF /* Frameworks */,\n\t\t\t\t63A4F4CA20964FB3000F8CDF /* Headers */,\n\t\t\t\t63A4F4CB20964FB3000F8CDF /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = CodableContext;\n\t\t\tproductName = CodableContext;\n\t\t\tproductReference = 63A4F4CD20964FB3000F8CDF /* CodableContext.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t63A4F4DC2096509A000F8CDF /* CodableContextTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 63A4F4E52096509A000F8CDF /* Build configuration list for PBXNativeTarget \"CodableContextTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tFFEF5D0C986086E8F28D9EC4 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t63A4F4D92096509A000F8CDF /* Sources */,\n\t\t\t\t63A4F4DA2096509A000F8CDF /* Frameworks */,\n\t\t\t\t63A4F4DB2096509A000F8CDF /* Resources */,\n\t\t\t\t22DA36BA830521DB8295746C /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t63A4F4E42096509A000F8CDF /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = CodableContextTests;\n\t\t\tproductName = CodableContextTests;\n\t\t\tproductReference = 63A4F4DD2096509A000F8CDF /* CodableContextTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t6D6A24A91EB79E8900C1FB1A /* TemplatesTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 6D6A24B61EB79E8900C1FB1A /* Build configuration list for PBXNativeTarget \"TemplatesTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD775B999DCC76F43E995E441 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t6D342C951EBA1881006EEBEC /* Sourcery */,\n\t\t\t\t6D6A24A61EB79E8900C1FB1A /* Sources */,\n\t\t\t\t6D6A24A71EB79E8900C1FB1A /* Frameworks */,\n\t\t\t\t6D6A24A81EB79E8900C1FB1A /* Resources */,\n\t\t\t\t7139144942C834B5880D5184 /* [CP] Embed Pods Frameworks */,\n\t\t\t\t63A4F4C420964E7B000F8CDF /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = TemplatesTests;\n\t\t\tproductName = TemplatesTests;\n\t\t\tproductReference = 6D6A24AA1EB79E8900C1FB1A /* TemplatesTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t6D6A24911EB79E8900C1FB1A /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0930;\n\t\t\t\tLastUpgradeCheck = 1210;\n\t\t\t\tORGANIZATIONNAME = Pixle;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t63A4F4CC20964FB3000F8CDF = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t63A4F4DC2096509A000F8CDF = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t6D6A24A91EB79E8900C1FB1A = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.3.2;\n\t\t\t\t\t\tLastSwiftMigration = 1000;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 6D6A24941EB79E8900C1FB1A /* Build configuration list for PBXProject \"Templates\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\tEnglish,\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 6D6A24901EB79E8900C1FB1A;\n\t\t\tproductRefGroup = 6D6A249A1EB79E8900C1FB1A /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t6D6A24A91EB79E8900C1FB1A /* TemplatesTests */,\n\t\t\t\t63A4F4CC20964FB3000F8CDF /* CodableContext */,\n\t\t\t\t63A4F4DC2096509A000F8CDF /* CodableContextTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t63A4F4CB20964FB3000F8CDF /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t63A4F4DB2096509A000F8CDF /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6D6A24A81EB79E8900C1FB1A /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6D4D84481EC667630005932D /* AutoEquatable.generated.swift in Resources */,\n\t\t\t\t6D6645C61ECC1CAA004C1948 /* AutoMockable.generated.swift in Resources */,\n\t\t\t\t6D6645C31ECC1824004C1948 /* AutoMockable.expected in Resources */,\n\t\t\t\t6D6645CB1ECC22A3004C1948 /* LinuxMain.generated.swift in Resources */,\n\t\t\t\t6D6645C81ECC2187004C1948 /* LinuxMain.expected in Resources */,\n\t\t\t\t6D130B7B1ECACD0F00E9642A /* AutoLenses.expected in Resources */,\n\t\t\t\t6D342C841EBA13DF006EEBEC /* AutoEquatable.stencil in Resources */,\n\t\t\t\t6D6C19261FC4CE7900CD2A34 /* Decorator.swifttemplate in Resources */,\n\t\t\t\tB50435DF2157222E00F120DF /* AutoCodable.expected in Resources */,\n\t\t\t\t6D342C891EBA13DF006EEBEC /* LinuxMain.stencil in Resources */,\n\t\t\t\t6D130B7C1ECACEB800E9642A /* AutoLenses.generated.swift in Resources */,\n\t\t\t\t6D342C871EBA13DF006EEBEC /* AutoMockable.stencil in Resources */,\n\t\t\t\t6D4D84491EC667650005932D /* AutoHashable.generated.swift in Resources */,\n\t\t\t\t6D342C861EBA13DF006EEBEC /* AutoLenses.stencil in Resources */,\n\t\t\t\t6D342C851EBA13DF006EEBEC /* AutoHashable.stencil in Resources */,\n\t\t\t\t6DC27BD81EC6592700B73CAF /* AutoHashable.expected in Resources */,\n\t\t\t\t6D342C831EBA13DF006EEBEC /* AutoCases.stencil in Resources */,\n\t\t\t\t636D78572081781E00160CC4 /* AutoCodable.swifttemplate in Resources */,\n\t\t\t\t6D342CA31EBA5415006EEBEC /* AutoCases.expected in Resources */,\n\t\t\t\t6D342CA41EBA54DF006EEBEC /* AutoCases.generated.swift in Resources */,\n\t\t\t\t6D037EA31EC26E6A00FA6C91 /* AutoEquatable.expected in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t22DA36BA830521DB8295746C /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-CodableContextTests/Pods-CodableContextTests-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Nimble/Nimble.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Quick/Quick.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Nimble.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Quick.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-CodableContextTests/Pods-CodableContextTests-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t6D342C951EBA1881006EEBEC /* Sourcery */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = Sourcery;\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${BUILD_DIR}/Debug/Sourcery.app/Contents/MacOS/Sourcery\\\" --sources \\\"${SRCROOT}/Tests/Context\\\" --templates \\\"${SRCROOT}/Templates\\\" --output \\\"${SRCROOT}/Tests/Generated\\\" --disableCache --verbose\\n\";\n\t\t};\n\t\t7139144942C834B5880D5184 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-TemplatesTests/Pods-TemplatesTests-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Nimble/Nimble.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Quick/Quick.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Nimble.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Quick.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-TemplatesTests/Pods-TemplatesTests-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tD775B999DCC76F43E995E441 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-TemplatesTests-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tFFEF5D0C986086E8F28D9EC4 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-CodableContextTests-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t63A4F4C820964FB3000F8CDF /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t63A4F4D520964FBE000F8CDF /* AutoCodable.generated.swift in Sources */,\n\t\t\t\t63A4F4D620964FC5000F8CDF /* AutoCodable.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t63A4F4D92096509A000F8CDF /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t63A4F4E02096509A000F8CDF /* CodableContextTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6D6A24A61EB79E8900C1FB1A /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6D037EA11EC26E6300FA6C91 /* AutoEquatable.swift in Sources */,\n\t\t\t\t6D130B791ECACCDF00E9642A /* AutoLenses.swift in Sources */,\n\t\t\t\t6D342C941EBA155A006EEBEC /* AutoCases.swift in Sources */,\n\t\t\t\t6D6645C51ECC184A004C1948 /* AutoMockable.swift in Sources */,\n\t\t\t\t6D0AF6BC1EC5EDD100F9A410 /* AutoHashable.swift in Sources */,\n\t\t\t\t6D342C911EBA146F006EEBEC /* TemplatesTests.swift in Sources */,\n\t\t\t\t6D6645CA1ECC219C004C1948 /* LinuxMain.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t63A4F4E42096509A000F8CDF /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 63A4F4CC20964FB3000F8CDF /* CodableContext */;\n\t\t\ttargetProxy = 63A4F4E32096509A000F8CDF /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t63A4F4D320964FB3000F8CDF /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = CodableContext/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = Pixle.CodableContext;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t63A4F4D420964FB3000F8CDF /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = CodableContext/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = Pixle.CodableContext;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t63A4F4E62096509A000F8CDF /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A4E640041AB8FBF997174F87 /* Pods-CodableContextTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = CodableContextTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.13;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = Pixle.CodableContextTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t63A4F4E72096509A000F8CDF /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E0F526BDFB067A8F16ACE2F6 /* Pods-CodableContextTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = CodableContextTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.13;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = Pixle.CodableContextTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t6D6A24B11EB79E8900C1FB1A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.12;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t6D6A24B21EB79E8900C1FB1A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.12;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t6D6A24B71EB79E8900C1FB1A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 8BC863822106BD763A8B145B /* Pods-TemplatesTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = \"$(inherited)\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = Pixle.Sourcery.TemplatesTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t6D6A24B81EB79E8900C1FB1A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = AD6C4A9866B1F8FDB6B02DA5 /* Pods-TemplatesTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = \"$(inherited)\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = Pixle.Sourcery.TemplatesTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t63A4F4D220964FB3000F8CDF /* Build configuration list for PBXNativeTarget \"CodableContext\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t63A4F4D320964FB3000F8CDF /* Debug */,\n\t\t\t\t63A4F4D420964FB3000F8CDF /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t63A4F4E52096509A000F8CDF /* Build configuration list for PBXNativeTarget \"CodableContextTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t63A4F4E62096509A000F8CDF /* Debug */,\n\t\t\t\t63A4F4E72096509A000F8CDF /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t6D6A24941EB79E8900C1FB1A /* Build configuration list for PBXProject \"Templates\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6D6A24B11EB79E8900C1FB1A /* Debug */,\n\t\t\t\t6D6A24B21EB79E8900C1FB1A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t6D6A24B61EB79E8900C1FB1A /* Build configuration list for PBXNativeTarget \"TemplatesTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6D6A24B71EB79E8900C1FB1A /* Debug */,\n\t\t\t\t6D6A24B81EB79E8900C1FB1A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 6D6A24911EB79E8900C1FB1A /* Project object */;\n}\n"
  },
  {
    "path": "Templates/Templates.xcodeproj/xcshareddata/xcschemes/TemplatesTests.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1210\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"CD754C8A1D853F000082B512\"\n               BuildableName = \"Sourcery.app\"\n               BlueprintName = \"Sourcery\"\n               ReferencedContainer = \"container:../Sourcery.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"6D6A24A91EB79E8900C1FB1A\"\n               BuildableName = \"TemplatesTests.xctest\"\n               BlueprintName = \"TemplatesTests\"\n               ReferencedContainer = \"container:Templates.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"CD754C8A1D853F000082B512\"\n            BuildableName = \"Sourcery.app\"\n            BlueprintName = \"Sourcery\"\n            ReferencedContainer = \"container:../Sourcery.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"6D6A24A91EB79E8900C1FB1A\"\n               BuildableName = \"TemplatesTests.xctest\"\n               BlueprintName = \"TemplatesTests\"\n               ReferencedContainer = \"container:Templates.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"63A4F4DC2096509A000F8CDF\"\n               BuildableName = \"CodableContextTests.xctest\"\n               BlueprintName = \"CodableContextTests\"\n               ReferencedContainer = \"container:Templates.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"CD754C8A1D853F000082B512\"\n            BuildableName = \"Sourcery.app\"\n            BlueprintName = \"Sourcery\"\n            ReferencedContainer = \"container:../Sourcery.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"CD754C8A1D853F000082B512\"\n            BuildableName = \"Sourcery.app\"\n            BlueprintName = \"Sourcery\"\n            ReferencedContainer = \"container:../Sourcery.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Templates/Tests/Context/AutoCases.swift",
    "content": "//\n//  AutoCases.swift\n//  Templates\n//\n//  Created by Anton Domashnev on 03.05.17.\n//  Copyright © 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\nprotocol AutoCases {}\n\nenum AutoCasesEnum: AutoCases {\n    case north\n    case south\n    case east\n    case west\n}\n\nenum AutoCasesOneValueEnum: AutoCases {\n    case one\n}\n\npublic enum AutoCasesHasAssociatedValuesEnum: AutoCases {\n    case foo(test: String)\n    case bar(number: Int)\n}\n"
  },
  {
    "path": "Templates/Tests/Context/AutoCodable.swift",
    "content": "//\n//  AutoCodable.swift\n//  TemplatesTests\n//\n//  Created by Ilya Puchka on 13/04/2018.\n//  Copyright © 2018 Pixle. All rights reserved.\n//\n\n#if canImport(ObjectiveC)\nimport Foundation\n\nprotocol AutoDecodable: Swift.Decodable {}\nprotocol AutoEncodable: Swift.Encodable {}\nprotocol AutoCodable: AutoDecodable, AutoEncodable {}\n\n\npublic struct CustomKeyDecodable: AutoDecodable {\n    let stringValue: String\n    let boolValue: Bool\n    let intValue: Int\n\n    enum CodingKeys: String, CodingKey {\n        case intValue = \"integer\"\n\n// sourcery:inline:auto:CustomKeyDecodable.CodingKeys.AutoCodable\n        case stringValue\n        case boolValue\n// sourcery:end\n    }\n\n}\n\npublic struct CustomMethodsCodable: AutoCodable {\n    let boolValue: Bool\n    let intValue: Int?\n    let optionalString: String?\n    let requiredString: String\n    let requiredStringWithDefault: String\n\n    var computedPropertyToEncode: Int {\n        return 0\n    }\n\n    static let defaultIntValue: Int = 0\n    static let defaultRequiredStringWithDefault: String = \"\"\n\n    static func decodeIntValue(from container: KeyedDecodingContainer<CodingKeys>) -> Int? {\n        return (try? container.decode(String.self, forKey: .intValue)).flatMap(Int.init)\n    }\n\n    static func decodeBoolValue(from decoder: Decoder) throws -> Bool {\n        return try decoder.container(keyedBy: CodingKeys.self).decode(Bool.self, forKey: .boolValue)\n    }\n\n    func encodeIntValue(to container: inout KeyedEncodingContainer<CodingKeys>) {\n        try? container.encode(String(intValue ?? 0), forKey: .intValue)\n    }\n\n    func encodeBoolValue(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        try container.encode(boolValue, forKey: .boolValue)\n    }\n\n    func encodeComputedPropertyToEncode(to container: inout KeyedEncodingContainer<CodingKeys>) {\n        try? container.encode(computedPropertyToEncode, forKey: .computedPropertyToEncode)\n    }\n\n    func encodeAdditionalValues(to encoder: Encoder) throws {\n\n    }\n\n}\n\npublic struct CustomContainerCodable: AutoCodable {\n    let value: Int\n\n    enum CodingKeys: String, CodingKey {\n        case nested\n        case value\n    }\n\n    static func decodingContainer(_ decoder: Decoder) throws -> KeyedDecodingContainer<CodingKeys> {\n        return try decoder.container(keyedBy: CodingKeys.self)\n            .nestedContainer(keyedBy: CodingKeys.self, forKey: .nested)\n    }\n\n    func encodingContainer(_ encoder: Encoder) -> KeyedEncodingContainer<CodingKeys> {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        return container.nestedContainer(keyedBy: CodingKeys.self, forKey: .nested)\n    }\n}\n\nstruct CustomCodingWithNotAllDefinedKeys: AutoCodable {\n    let value: Int\n    var computedValue: Int { return 0 }\n\n    enum CodingKeys: String, CodingKey {\n        case value\n\n// sourcery:inline:auto:CustomCodingWithNotAllDefinedKeys.CodingKeys.AutoCodable\n        case computedValue\n// sourcery:end\n    }\n\n    func encodeComputedValue(to container: inout KeyedEncodingContainer<CodingKeys>) {\n        try? container.encode(computedValue, forKey: .computedValue)\n    }\n\n}\n\nstruct SkipDecodingWithDefaultValueOrComputedProperty: AutoCodable {\n    let value: Int\n    let skipValue: Int = 0\n    var computedValue: Int { return 0 }\n\n    enum CodingKeys: String, CodingKey {\n        case value\n        case computedValue\n    }\n}\n\nstruct SkipEncodingKeys: AutoCodable {\n    let value: Int\n    let skipValue: Int\n\n    enum SkipEncodingKeys {\n        case skipValue\n    }\n}\n\nenum SimpleEnum: AutoCodable {\n    case someCase\n    case anotherCase\n}\n\nenum AssociatedValuesEnum: AutoCodable, Equatable {\n    case someCase(id: Int, name: String)\n    case unnamedCase(Int, String)\n    case mixCase(Int, name: String)\n    case anotherCase\n\n    enum CodingKeys: String, CodingKey {\n        case enumCaseKey = \"type\"\n\n// sourcery:inline:auto:AssociatedValuesEnum.CodingKeys.AutoCodable\n        case someCase\n        case unnamedCase\n        case mixCase\n        case anotherCase\n        case id\n        case name\n// sourcery:end\n    }\n}\n\nenum AssociatedValuesEnumNoCaseKey: AutoCodable, Equatable {\n    case someCase(id: Int, name: String)\n    case unnamedCase(Int, String)\n    case mixCase(Int, name: String)\n    case anotherCase\n}\n#endif\n"
  },
  {
    "path": "Templates/Tests/Context/AutoEquatable.swift",
    "content": "//\n//  AutoCases.swift\n//  Templates\n//\n//  Created by Anton Domashnev on 03.05.17.\n//  Copyright © 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\nprotocol AutoEquatable {}\n\nprotocol Parent {\n    var name: String { get }\n}\n\n/// General protocol\nprotocol AutoEquatableProtocol: AutoEquatable {\n    var width: Double { get }\n    var height: Double { get}\n    static var name: String { get }\n}\n\n/// General enum\nenum AutoEquatableEnum: AutoEquatable {\n    case one\n    case two(first: String, second: String)\n    case three(bar: Int)\n\n    func allValue() -> [AutoEquatableEnum] {\n        return [.one, .two(first: \"a\", second: \"b\"), .three(bar: 42)]\n    }\n}\n\n/// Sourcery should not generate a default case for enum with only one case\nenum AutoEquatableEnumWithOneCase: AutoEquatable {\n    case one\n}\n\n/// Sourcery should generate correct code for struct\nstruct AutoEquatableStruct: AutoEquatable {\n    // Private Constants\n    private let laptopModel: String\n\n    // Fileprivate Constants\n    fileprivate let phoneModel: String\n\n    // Internal Constants\n    let firstName: String\n\n    // Public Constans\n    public let lastName: String\n\n    init(firstName: String, lastName: String, parents: [Parent], laptopModel: String, phoneModel: String) {\n        self.firstName = firstName\n        self.lastName = lastName\n        self.parents = parents\n        self.laptopModel = laptopModel\n        self.phoneModel = phoneModel\n    }\n\n    // Arrays\n    // sourcery: arrayEquality\n    let parents: [Parent]\n\n    // Variable\n    var moneyInThePocket: Double = 0\n\n    // Optional variable\n    var friends: [String]?\n\n    /// Forced unwrapped variable\n    var age: Int!\n\n    // Void method\n    func walk() {\n        print(\"I'm going\")\n    }\n\n    // Method with return value\n    func greeting(for name: String) -> String {\n        return \"Hi \\(name)\"\n    }\n\n    // Method with optional return value\n    func books(sharedWith name: String) -> String? {\n        return nil\n    }\n}\n\n/// It should generate correct code for general class\nclass AutoEquatableClass: AutoEquatable {\n    // Private Constants\n    private let laptopModel: String\n\n    // Fileprivate Constants\n    fileprivate let phoneModel: String\n\n    // Internal Constants\n    let firstName: String\n\n    // Public Constans\n    public let lastName: String\n\n    init(firstName: String, lastName: String, parents: [Parent], laptopModel: String, phoneModel: String) {\n        self.firstName = firstName\n        self.lastName = lastName\n        self.parents = parents\n        self.laptopModel = laptopModel\n        self.phoneModel = phoneModel\n    }\n\n    // Arrays\n    // sourcery: arrayEquality\n    let parents: [Parent]\n\n    /// Forced unwrapped variable\n    var age: Int!\n\n    // Variable\n    var moneyInThePocket: Double = 0\n\n    // Optional variable\n    var friends: [String]?\n\n    // Void method\n    func walk() {\n        print(\"I'm going\")\n    }\n\n    // Method with return value\n    func greeting(for name: String) -> String {\n        return \"Hi \\(name)\"\n    }\n\n    // Method with optional return value\n    func books(sharedWith name: String) -> String? {\n        return nil\n    }\n}\n\n/// Sourcery doesn't support inheritance for AutoEqualtable \nclass AutoEquatableClassInherited: AutoEquatableClass {\n    // Optional constants\n    let middleName: String?\n\n    init(middleName: String?) {\n        self.middleName = middleName\n        super.init(firstName: \"\", lastName: \"\", parents: [], laptopModel: \"\", phoneModel: \"\")\n    }\n}\n\n/// Should not add Equatable conformance\nclass AutoEquatableNSObject: NSObject, AutoEquatable {\n    let firstName: String\n\n    init(firstName: String) {\n        self.firstName = firstName\n    }\n}\n\n/// It should generate correct code for general class\n/// sourcery: AutoEquatable\nclass AutoEquatableAnnotatedClass {\n\n    // Variable\n    var moneyInThePocket: Double = 0\n\n}\n\n// It won't be generated\nclass AutoEquatableAnnotatedClassInherited: AutoEquatableAnnotatedClass {\n\n    // Variable\n    var middleName: String = \"Poor\"\n\n}\n\n// Sourcery doesn't support inheritance for AutoEqualtable so it won't be generated\n/// sourcery: AutoEquatable\nclass AutoEquatableAnnotatedClassAnnotatedInherited: AutoEquatableAnnotatedClass {\n\n    // Variable\n    var middleName: String = \"Poor\"\n\n}\n"
  },
  {
    "path": "Templates/Tests/Context/AutoHashable.swift",
    "content": "import Foundation\n\nprotocol AutoHashable {}\n\n/// General protocol\nprotocol AutoHashableProtocol: AutoHashable {\n    var width: Double { get }\n    var height: Double { get}\n    static var name: String { get }\n}\n\n/// General enum\nenum AutoHashableEnum: AutoHashable {\n    case one\n    case two(first: String, second: String)\n    case three(bar: Int)\n\n    func allValue() -> [AutoHashableEnum] {\n        return [.one, .two(first: \"a\", second: \"b\"), .three(bar: 42)]\n    }\n}\n\n/// Sourcery should generate correct code for struct\nstruct AutoHashableStruct: AutoHashable {\n    // Private Constants\n    private let laptopModel: String\n\n    // Fileprivate Constants\n    fileprivate let phoneModel: String\n\n    // Static constant\n    static let structName: String = \"AutoHashableStruct\"\n\n    // Internal Constants\n    let firstName: String\n\n    // Public Constans\n    public let lastName: String\n\n    init(firstName: String, lastName: String, parents: [Parent], laptopModel: String, phoneModel: String) {\n        self.firstName = firstName\n        self.lastName = lastName\n        self.parents = parents\n        self.laptopModel = laptopModel\n        self.phoneModel = phoneModel\n        self.universityGrades = [\"Math\": 5, \"Geometry\": 3]\n    }\n\n    // Arrays\n    let parents: [Parent]\n\n    // Dictionary\n    let universityGrades: [String: Int]\n\n    // Variable\n    var moneyInThePocket: Double = 0\n\n    // Forced unwrapped variable\n    var age: Int!\n\n    // Optional variable\n    var friends: [String]?\n\n    // Void method\n    func walk() {\n        print(\"I'm going\")\n    }\n\n    // Method with return value\n    func greeting(for name: String) -> String {\n        return \"Hi \\(name)\"\n    }\n\n    // Method with optional return value\n    func books(sharedWith name: String) -> String? {\n        return nil\n    }\n}\n\n/// It should generate correct code for general class\nclass AutoHashableClass: AutoHashable {\n    // Private Constants\n    private let laptopModel: String\n\n    // Fileprivate Constants\n    fileprivate let phoneModel: String\n\n    // Static constant\n    static let className: String = \"AutoHashableClass\"\n\n    // Internal Constants\n    let firstName: String\n\n    // Public Constans\n    public let lastName: String\n\n    init(firstName: String, lastName: String, parents: [Parent], laptopModel: String, phoneModel: String) {\n        self.firstName = firstName\n        self.lastName = lastName\n        self.parents = parents\n        self.laptopModel = laptopModel\n        self.phoneModel = phoneModel\n        self.universityGrades = [\"Math\": 5, \"Geometry\": 3]\n    }\n\n    // Arrays\n    let parents: [Parent]\n\n    // Dictionary\n    let universityGrades: [String: Int]\n\n    // Variable\n    var moneyInThePocket: Double = 0\n\n    // Forced unwrapped variable\n    var age: Int!\n\n    // Optional variable\n    var friends: [String]?\n\n    // Void method\n    func walk() {\n        print(\"I'm going\")\n    }\n\n    // Method with return value\n    func greeting(for name: String) -> String {\n        return \"Hi \\(name)\"\n    }\n\n    // Method with optional return value\n    func books(sharedWith name: String) -> String? {\n        return nil\n    }\n}\n\nclass AutoHashableClassInherited: AutoHashableClass {\n    // Optional constants\n    let middleName: String?\n\n    init(middleName: String?) {\n        self.middleName = middleName\n        super.init(firstName: \"\", lastName: \"\", parents: [], laptopModel: \"\", phoneModel: \"\")\n    }\n}\n\nclass AutoHashableClassInheritedInherited: AutoHashableClassInherited {\n    // Optional constants\n    let prefix: String?\n\n    init(prefix: String?) {\n        self.prefix = prefix\n        super.init(middleName: \"\")\n    }\n}\n\nclass NonHashableClass {\n    let firstName: String\n\n    init(firstName: String) {\n        self.firstName = firstName\n    }\n}\n\n// Should not add super call\nclass AutoHashableClassFromNonHashableInherited: NonHashableClass, AutoHashable {\n    let lastName: String?\n\n    init(lastName: String?) {\n        self.lastName = lastName\n        super.init(firstName: \"\")\n    }\n}\n\n// Should add super call\nclass AutoHashableClassFromNonHashableInheritedInherited: AutoHashableClassFromNonHashableInherited {\n    let prefix: String?\n\n    init(prefix: String?) {\n        self.prefix = prefix\n        super.init(lastName: \"\")\n    }\n}\n\nclass HashableClass: Hashable {\n    let firstName: String\n\n    init(firstName: String) {\n        self.firstName = firstName\n    }\n\n    static func == (lhs: HashableClass, rhs: HashableClass) -> Bool {\n        return lhs.firstName == rhs.firstName\n    }\n\n    func hash(into hasher: inout Hasher) {\n        self.firstName.hash(into: &hasher)\n    }\n}\n\n// Should add super\nclass AutoHashableFromHashableInherited: HashableClass, AutoHashable {\n    let lastName: String?\n\n    init(lastName: String?) {\n        self.lastName = lastName\n        super.init(firstName: \"\")\n    }\n}\n\n/// Should not add Hashable conformance\nclass AutoHashableNSObject: NSObject, AutoHashable {\n    let firstName: String\n\n    init(firstName: String) {\n        self.firstName = firstName\n    }\n}\n\n// Should add super call\nclass AutoHashableNSObjectInherited: AutoHashableNSObject {\n    let lastName: String\n\n    init(lastName: String) {\n        self.lastName = lastName\n        super.init(firstName: \"\")\n    }\n}\n"
  },
  {
    "path": "Templates/Tests/Context/AutoLenses.swift",
    "content": "//\n//  AutoLenses.swift\n//  Templates\n//\n//  Created by Anton Domashnev on 16.05.17.\n//  Copyright © 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\nprotocol AutoLenses {}\n\nstruct House: AutoLenses {\n    let rooms: Room\n    let address: String\n    let size: Int\n}\n\nstruct Room: AutoLenses {\n    let people: [Person]\n    let name: String\n}\n\nstruct Person: AutoLenses {\n    let name: String\n}\n\n// swiftlint:disable identifier_name\nstruct Rectangle: AutoLenses {\n    let x: Int\n    let y: Int\n\n    var area: Int {\n        return x*y\n    }\n}\n"
  },
  {
    "path": "Templates/Tests/Context/AutoMockable.swift",
    "content": "//\n//  AutoMockable.swift\n//  Templates\n//\n//  Created by Anton Domashnev on 17.05.17.\n//  Copyright © 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\npublic protocol AutoMockable {}\nprotocol StubProtocol {}\nprotocol StubWithAnyNameProtocol {}\nprotocol StubWithSomeNameProtocol {}\nprotocol PersonProtocol {}\n\nprotocol BasicProtocol: AutoMockable {\n    func loadConfiguration() -> String?\n    /// Asks a Duck to quack\n    ///\n    /// - Parameter times: How many times the Duck will quack\n    func save(configuration: String)\n}\n\nprotocol ImplicitlyUnwrappedOptionalReturnValueProtocol: AutoMockable {\n  func implicitReturn() -> String!\n}\n\nprotocol InitializationProtocol: AutoMockable {\n    init(intParameter: Int, stringParameter: String, optionalParameter: String?)\n    func start()\n    func stop()\n}\n\nprotocol VariablesProtocol: AutoMockable {\n    var company: String? { get set }\n    var name: String { get }\n    var age: Int { get }\n    var kids: [String] { get }\n    var universityMarks: [String: Int] { get }\n}\n\nprotocol SameShortMethodNamesProtocol: AutoMockable {\n    func start(car: String, of model: String)\n    func start(plane: String, of model: String)\n}\n\nprotocol ExtendableProtocol: AutoMockable {\n    var canReport: Bool { get }\n    func report(message: String)\n}\n\nprotocol ReservedWordsProtocol: AutoMockable {\n    func `continue`(with message: String) -> String\n}\n\nprotocol ThrowableProtocol: AutoMockable {\n    func doOrThrow() throws -> String\n    func doOrThrowVoid() throws\n}\n\nprotocol TypedThrowableProtocol: AutoMockable {\n    init() throws(CustomError)\n    init<E>(init2: Void) throws(E) where E: Error\n    var value: Int { get throws(CustomError) }\n    var valueAnyError: Int { get throws(any Error) }\n    var valueThrowsNever: Int { get throws(Never) }\n    func doOrThrow() throws(CustomError) -> String\n//    func doOrThrowVoid() throws(CustomErrorNameSpace.Error)\n    func doOrThrowAnyError() throws(any Error)\n    func doOrThrowNever() throws(Never)\n    func doOrRethrows<E>(_ block: () throws(E) -> Void) throws(E) -> Int where E: Error\n}\n\nstruct CustomError: Error {}\n// Nested types does not work on Linux, but works on macOS so this cannot be used in this test\n//enum CustomErrorNameSpace {\n//    struct Error: Swift.Error {}\n//}\n\nprotocol CurrencyPresenter: AutoMockable {\n    func showSourceCurrency(_ currency: String)\n}\n\nextension ExtendableProtocol {\n    var canReport: Bool { return true }\n\n    func report(message: String = \"Test\") {\n        print(message)\n    }\n}\n\nprotocol ClosureProtocol: AutoMockable {\n    func setClosure(_ closure: @escaping () -> Void)\n}\n\nprotocol NullableClosureProtocol: AutoMockable {\n    func setClosure(_ closure: (() -> Void)?)\n}\n\nprotocol MultiClosureProtocol: AutoMockable {\n    func setClosure(name: String, _ closure: @escaping () -> Void)\n}\n\nprotocol MultiNullableClosureProtocol: AutoMockable {\n    func setClosure(name: String, _ closure: (() -> Void)?)\n}\n\nprotocol NonEscapingClosureProtocol: AutoMockable {\n    func executeClosure(_ closure: () -> Void)\n}\n\nprotocol MultiNonEscapingClosureProtocol: AutoMockable {\n    func executeClosure(name: String, _ closure: () -> Void)\n}\n\nprotocol MultiExistentialArgumentsClosureProtocol: AutoMockable {\n    func execute(completion: ((any StubWithSomeNameProtocol)?, any StubWithSomeNameProtocol) -> (any StubWithSomeNameProtocol)?)\n}\n\nprotocol ClosureWithTwoParametersProtocol: AutoMockable {\n    func setClosure(closure: @escaping (String, Int) -> Void)\n}\n\n/// sourcery: AutoMockable\nprotocol AnnotatedProtocol {\n    func sayHelloWith(name: String)\n}\n\nprotocol SingleOptionalParameterFunction: AutoMockable {\n    func send(message: String?)\n}\n\nprotocol FunctionWithClosureReturnType: AutoMockable {\n    func get() -> () -> Void\n    func getOptional() -> (() -> Void)?\n}\n\nprotocol FunctionWithMultilineDeclaration: AutoMockable {\n    func start(car: String,\n               of model: String)\n}\n\nprotocol ThrowingVariablesProtocol: AutoMockable {\n    var title: String? { get throws }\n    var firstName: String { get throws }\n}\n\nprotocol AsyncVariablesProtocol: AutoMockable {\n    var title: String? { get async }\n    var firstName: String { get async }\n}\n\nprotocol AsyncThrowingVariablesProtocol: AutoMockable {\n    var title: String? { get async throws }\n    var firstName: String { get async throws }\n}\n\nprotocol AsyncProtocol: AutoMockable {\n    @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)\n    func callAsync(parameter: Int) async -> String\n    func callAsyncAndThrow(parameter: Int) async throws -> String\n    func callAsyncVoid(parameter: Int) async -> Void\n    func callAsyncAndThrowVoid(parameter: Int) async throws -> Void\n}\n\nprotocol FunctionWithAttributes: AutoMockable {\n    @discardableResult\n    func callOneAttribute() -> String\n    \n    @discardableResult\n    @available(macOS 10.15, *)\n    func callTwoAttributes() -> Int\n    \n    @discardableResult\n    @available(iOS 13.0, *)\n    @available(macOS 10.15, *)\n    func callRepeatedAttributes() -> Bool\n}\n\npublic protocol AccessLevelProtocol: AutoMockable {\n    var company: String? { get set }\n    var name: String { get }\n    \n    func loadConfiguration() -> String?\n}\n\nprotocol StaticMethodProtocol: AutoMockable {\n    static func staticFunction(_: String) -> String\n}\n\nprotocol AnyProtocol: AutoMockable {\n    var a: any StubProtocol { get }\n    var b: (any StubProtocol)? { get }\n    var c: (any StubProtocol)! { get }\n    var d: (((any StubProtocol)?) -> Void) { get }\n    var e: [(any StubProtocol)?] { get }\n    func f(_ x: (any StubProtocol)?, y: (any StubProtocol)!, z: any StubProtocol)\n    var g: any StubProtocol { get }\n    var h: (any StubProtocol)? { get }\n    var i: (any StubProtocol)! { get }\n    func j(x: (any StubProtocol)?, y: (any StubProtocol)!, z: any StubProtocol) async -> String\n    func k(x: ((any StubProtocol)?) -> Void, y: (any StubProtocol) -> Void)\n    func l(x: (((any StubProtocol)?) -> Void), y: ((any StubProtocol) -> Void))\n    var anyConfusingPropertyName: any StubProtocol { get }\n    func m(anyConfusingArgumentName: any StubProtocol)\n    func n(x: @escaping ((any StubProtocol)?) -> Void)\n    var o: any StubWithAnyNameProtocol { get }\n    func p(_ x: (any StubWithAnyNameProtocol)?)\n    func q() -> any StubProtocol\n    func r() -> (any StubProtocol)?\n    func s() -> () -> any StubProtocol\n    func t() -> () -> (any StubProtocol)?\n    func u() -> (Int, () -> (any StubProtocol)?)\n    func v() -> (Int, (() -> any StubProtocol)?)\n    func w() -> [(any StubProtocol)?]\n    func x() -> [String: (any StubProtocol)?]\n    func y() -> (any StubProtocol, (any StubProtocol)?)\n    func z() -> any StubProtocol & CustomStringConvertible\n}\n\nprotocol AnyProtocolWithOptionals: AutoMockable {\n    var a: [any StubProtocol]? { get }\n    var b: [Result<Void, any Error>] { get }\n    var c: (Int, [(any StubProtocol)?])? { get }\n    var d: (Int, (any StubProtocol)?) { get }\n    var e: (Int, (any StubProtocol)?)? { get }\n    var f: (Int, [any StubProtocol]?)? { get }\n    func g(_ g: String, handler: @escaping ([any StubProtocol]?) -> Void) -> Bool\n    func h(_ h: String, handler: @escaping ([StubProtocol]) -> Void) -> Bool\n    func i(_ i: String, handler: @escaping ([(any StubProtocol)?]) -> Void) -> Bool\n    var j: (anyInteger: Int, anyArray: [any StubProtocol]?)? { get }\n}\n\nprotocol SomeProtocol: AutoMockable {\n    func a(_ x: (some StubProtocol)?, y: (some StubProtocol)!, z: some StubProtocol)\n    func b(x: (some StubProtocol)?, y: (some StubProtocol)!, z: some StubProtocol) async -> String\n    func someConfusingFuncName(x: some StubProtocol)\n    func c(someConfusingArgumentName: some StubProtocol)\n    func d(_ x: (some StubWithSomeNameProtocol)?)\n}\n\nclass GenericType<A, B, C>{}\n\nprotocol HouseProtocol: AutoMockable {\n    var aPublisher: AnyPublisher<any PersonProtocol, Never>? { get }\n    var bPublisher: AnyPublisher<(any PersonProtocol)?, Never>? { get }\n    var cPublisher: CurrentValueSubject<(any PersonProtocol)?, Never>? { get }\n    var dPublisher: PassthroughSubject<(any PersonProtocol)?, Never>? { get }\n    var e1Publisher: GenericType<(any PersonProtocol)?, Never, Never>? { get }\n    var e2Publisher: GenericType<Never, (any PersonProtocol)?, Never>? { get }\n    var e3Publisher: GenericType<Never, Never, (any PersonProtocol)?>? { get }\n    var e4Publisher: GenericType<(any PersonProtocol)?, (any PersonProtocol)?, (any PersonProtocol)?>? { get }\n    var f1Publisher: GenericType<any PersonProtocol, Never, Never>? { get }\n    var f2Publisher: GenericType<Never, any PersonProtocol, Never>? { get }\n    var f3Publisher: GenericType<Never, Never, any PersonProtocol>? { get }\n    var f4Publisher: GenericType<any PersonProtocol, any PersonProtocol, any PersonProtocol>? { get }\n}\n\nprotocol FunctionWithNullableCompletionThatHasNullableAnyParameterProtocol: AutoMockable {\n    func add(\n        _ request: Int,\n         withCompletionHandler completionHandler: (((any Error)?) -> Void)?\n    )\n}\n\n// sourcery: AutoMockable\nprotocol ExampleVararg {\n    func string(key: String, args: CVarArg...) -> String\n}\n\n// sourcery: AutoMockable\nprotocol ExampleVarargTwo {\n  func toto(args: any StubWithSomeNameProtocol...)\n}\n\n// sourcery: AutoMockable\nprotocol ExampleVarargThree {\n    func toto(arg: ((String, any Collection...) -> any Collection))\n}\n\n// sourcery: AutoMockable\nprotocol ExampleVarargFour {\n    func toto(arg: ((String, any Collection...) -> Void))\n}\n\n// sourcery: AutoMockable\npublic protocol ProtocolWithOverrides {\n    func doSomething(_ data: Int) -> [String]\n    func doSomething(_ data: String) -> [String]\n    func doSomething(_ data: String) -> [Int]\n    func doSomething(_ data: String) -> ([Int], [String])\n    func doSomething(_ data: String) throws -> ([Int], [Any])\n    func doSomething(_ data: String) -> (([Int], [String]) -> Void)\n    func doSomething(_ data: String) throws -> (([Int], [Any]) -> Void)\n}\n\n// sourcery: AutoMockable\nprotocol SubscriptProtocol {\n    subscript(arg: Int) -> String { get set }\n    subscript<T>(arg: T) -> Int { get }\n    subscript<T>(arg: T) -> String { get async }\n    subscript<T: Hashable>(arg: T) -> T? { get set }\n    subscript<T>(arg: String) -> T? where T: Cancellable { get throws }\n    subscript<T>(arg2: String) -> T { get throws(CustomError) }\n}\n\n// sourcery: AutoMockable\npublic protocol ProtocolWithMethodWithGenericParameters {\n    func execute(param: Result<Int, Error>) -> Result<String, Error>\n}\n\n// sourcery: AutoMockable\npublic protocol ProtocolWithMethodWithInoutParameter {\n    func execute(param: inout String)\n    func execute(param: inout String, bar: Int)\n}\n//sourcery:AutoMockable\nprotocol TestProtocol {\n    associatedtype Value: Sequence where Value.Element: Collection, Value.Element: Hashable, Value.Element: Comparable\n\n    func getValue() -> Value\n\n    associatedtype Value2 = Int\n\n    func getValue2() -> Value2\n\n    associatedtype Value3: Collection where Value3.Element == String\n\n    func getValue3() -> Value3\n\n    associatedtype Value5: Sequence where Value5.Element == Int\n\n    func getValue5() -> Value5\n\n    associatedtype Value6: Sequence where Value6.Element == Int, Value6.Element: Hashable, Value6.Element: Comparable\n\n    func getValue6() -> Value6\n}\n\n// sourcery: AutoMockable\nprotocol SendableProtocol: Sendable {\n  var value: Any { get }\n}\n\nprotocol NotMockedSendableProtocol: Sendable {}\n\n// sourcery: AutoMockable\nprotocol SendableSendableProtocol: NotMockedSendableProtocol {\n  var value: Any { get }\n}\n"
  },
  {
    "path": "Templates/Tests/Context/LinuxMain.swift",
    "content": "//\n//  LinuxMain.swift\n//  Templates\n//\n//  Created by Anton Domashnev on 17.05.17.\n//  Copyright © 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\nimport XCTest\n\nclass AutoInjectionTests: XCTestCase {\n    func testThatItResolvesAutoInjectedDependencies() {\n        XCTAssertTrue(true)\n    }\n\n    func testThatItDoesntResolveAutoInjectedDependencies() {\n        XCTAssertTrue(true)\n    }\n}\n\nclass AutoWiringTests: XCTestCase {\n    func testThatItCanResolveWithAutoWiring() {\n        XCTAssertTrue(true)\n    }\n\n    func testThatItCanNotResolveWithAutoWiring() {\n        XCTAssertTrue(true)\n    }\n}\n\n// sourcery: disableTests\nclass DisabledTests: XCTestCase {\n    func testThatItResolvesDisabledTestsAnnotation() {\n        XCTAssertTrue(true)\n    }\n}\n"
  },
  {
    "path": "Templates/Tests/Context_Linux/AutoCases.swift",
    "content": "//\n//  AutoCases.swift\n//  Templates\n//\n//  Created by Anton Domashnev on 03.05.17.\n//  Copyright © 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\nprotocol AutoCases {}\n\nenum AutoCasesEnum: AutoCases {\n    case north\n    case south\n    case east\n    case west\n}\n\nenum AutoCasesOneValueEnum: AutoCases {\n    case one\n}\n\npublic enum AutoCasesHasAssociatedValuesEnum: AutoCases {\n    case foo(test: String)\n    case bar(number: Int)\n}\n"
  },
  {
    "path": "Templates/Tests/Context_Linux/AutoEquatable.swift",
    "content": "//\n//  AutoCases.swift\n//  Templates\n//\n//  Created by Anton Domashnev on 03.05.17.\n//  Copyright © 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\nprotocol AutoEquatable {}\n\nprotocol Parent {\n    var name: String { get }\n}\n\n/// General protocol\nprotocol AutoEquatableProtocol: AutoEquatable {\n    var width: Double { get }\n    var height: Double { get}\n    static var name: String { get }\n}\n\n/// General enum\nenum AutoEquatableEnum: AutoEquatable {\n    case one\n    case two(first: String, second: String)\n    case three(bar: Int)\n\n    func allValue() -> [AutoEquatableEnum] {\n        return [.one, .two(first: \"a\", second: \"b\"), .three(bar: 42)]\n    }\n}\n\n/// Sourcery should not generate a default case for enum with only one case\nenum AutoEquatableEnumWithOneCase: AutoEquatable {\n    case one\n}\n\n/// Sourcery should generate correct code for struct\nstruct AutoEquatableStruct: AutoEquatable {\n    // Private Constants\n    private let laptopModel: String\n\n    // Fileprivate Constants\n    fileprivate let phoneModel: String\n\n    // Internal Constants\n    let firstName: String\n\n    // Public Constans\n    public let lastName: String\n\n    init(firstName: String, lastName: String, parents: [Parent], laptopModel: String, phoneModel: String) {\n        self.firstName = firstName\n        self.lastName = lastName\n        self.parents = parents\n        self.laptopModel = laptopModel\n        self.phoneModel = phoneModel\n    }\n\n    // Arrays\n    // sourcery: arrayEquality\n    let parents: [Parent]\n\n    // Variable\n    var moneyInThePocket: Double = 0\n\n    // Optional variable\n    var friends: [String]?\n\n    /// Forced unwrapped variable\n    var age: Int!\n\n    // Void method\n    func walk() {\n        print(\"I'm going\")\n    }\n\n    // Method with return value\n    func greeting(for name: String) -> String {\n        return \"Hi \\(name)\"\n    }\n\n    // Method with optional return value\n    func books(sharedWith name: String) -> String? {\n        return nil\n    }\n}\n\n/// It should generate correct code for general class\nclass AutoEquatableClass: AutoEquatable {\n    // Private Constants\n    private let laptopModel: String\n\n    // Fileprivate Constants\n    fileprivate let phoneModel: String\n\n    // Internal Constants\n    let firstName: String\n\n    // Public Constans\n    public let lastName: String\n\n    init(firstName: String, lastName: String, parents: [Parent], laptopModel: String, phoneModel: String) {\n        self.firstName = firstName\n        self.lastName = lastName\n        self.parents = parents\n        self.laptopModel = laptopModel\n        self.phoneModel = phoneModel\n    }\n\n    // Arrays\n    // sourcery: arrayEquality\n    let parents: [Parent]\n\n    /// Forced unwrapped variable\n    var age: Int!\n\n    // Variable\n    var moneyInThePocket: Double = 0\n\n    // Optional variable\n    var friends: [String]?\n\n    // Void method\n    func walk() {\n        print(\"I'm going\")\n    }\n\n    // Method with return value\n    func greeting(for name: String) -> String {\n        return \"Hi \\(name)\"\n    }\n\n    // Method with optional return value\n    func books(sharedWith name: String) -> String? {\n        return nil\n    }\n}\n\n/// Sourcery doesn't support inheritance for AutoEqualtable \nclass AutoEquatableClassInherited: AutoEquatableClass {\n    // Optional constants\n    let middleName: String?\n\n    init(middleName: String?) {\n        self.middleName = middleName\n        super.init(firstName: \"\", lastName: \"\", parents: [], laptopModel: \"\", phoneModel: \"\")\n    }\n}\n\n/// Should not add Equatable conformance\nclass AutoEquatableNSObject: NSObject, AutoEquatable {\n    let firstName: String\n\n    init(firstName: String) {\n        self.firstName = firstName\n    }\n}\n\n/// It should generate correct code for general class\n/// sourcery: AutoEquatable\nclass AutoEquatableAnnotatedClass {\n\n    // Variable\n    var moneyInThePocket: Double = 0\n\n}\n\n// It won't be generated\nclass AutoEquatableAnnotatedClassInherited: AutoEquatableAnnotatedClass {\n\n    // Variable\n    var middleName: String = \"Poor\"\n\n}\n\n// Sourcery doesn't support inheritance for AutoEqualtable so it won't be generated\n/// sourcery: AutoEquatable\nclass AutoEquatableAnnotatedClassAnnotatedInherited: AutoEquatableAnnotatedClass {\n\n    // Variable\n    var middleName: String = \"Poor\"\n\n}\n"
  },
  {
    "path": "Templates/Tests/Context_Linux/AutoHashable.swift",
    "content": "import Foundation\n\nprotocol AutoHashable {}\n\n/// General protocol\nprotocol AutoHashableProtocol: AutoHashable {\n    var width: Double { get }\n    var height: Double { get}\n    static var name: String { get }\n}\n\n/// General enum\nenum AutoHashableEnum: AutoHashable {\n    case one\n    case two(first: String, second: String)\n    case three(bar: Int)\n\n    func allValue() -> [AutoHashableEnum] {\n        return [.one, .two(first: \"a\", second: \"b\"), .three(bar: 42)]\n    }\n}\n\n/// Sourcery should generate correct code for struct\nstruct AutoHashableStruct: AutoHashable {\n    // Private Constants\n    private let laptopModel: String\n\n    // Fileprivate Constants\n    fileprivate let phoneModel: String\n\n    // Static constant\n    static let structName: String = \"AutoHashableStruct\"\n\n    // Internal Constants\n    let firstName: String\n\n    // Public Constans\n    public let lastName: String\n\n    init(firstName: String, lastName: String, parents: [Parent], laptopModel: String, phoneModel: String) {\n        self.firstName = firstName\n        self.lastName = lastName\n        self.parents = parents\n        self.laptopModel = laptopModel\n        self.phoneModel = phoneModel\n        self.universityGrades = [\"Math\": 5, \"Geometry\": 3]\n    }\n\n    // Arrays\n    let parents: [Parent]\n\n    // Dictionary\n    let universityGrades: [String: Int]\n\n    // Variable\n    var moneyInThePocket: Double = 0\n\n    // Forced unwrapped variable\n    var age: Int!\n\n    // Optional variable\n    var friends: [String]?\n\n    // Void method\n    func walk() {\n        print(\"I'm going\")\n    }\n\n    // Method with return value\n    func greeting(for name: String) -> String {\n        return \"Hi \\(name)\"\n    }\n\n    // Method with optional return value\n    func books(sharedWith name: String) -> String? {\n        return nil\n    }\n}\n\n/// It should generate correct code for general class\nclass AutoHashableClass: AutoHashable {\n    // Private Constants\n    private let laptopModel: String\n\n    // Fileprivate Constants\n    fileprivate let phoneModel: String\n\n    // Static constant\n    static let className: String = \"AutoHashableClass\"\n\n    // Internal Constants\n    let firstName: String\n\n    // Public Constans\n    public let lastName: String\n\n    init(firstName: String, lastName: String, parents: [Parent], laptopModel: String, phoneModel: String) {\n        self.firstName = firstName\n        self.lastName = lastName\n        self.parents = parents\n        self.laptopModel = laptopModel\n        self.phoneModel = phoneModel\n        self.universityGrades = [\"Math\": 5, \"Geometry\": 3]\n    }\n\n    // Arrays\n    let parents: [Parent]\n\n    // Dictionary\n    let universityGrades: [String: Int]\n\n    // Variable\n    var moneyInThePocket: Double = 0\n\n    // Forced unwrapped variable\n    var age: Int!\n\n    // Optional variable\n    var friends: [String]?\n\n    // Void method\n    func walk() {\n        print(\"I'm going\")\n    }\n\n    // Method with return value\n    func greeting(for name: String) -> String {\n        return \"Hi \\(name)\"\n    }\n\n    // Method with optional return value\n    func books(sharedWith name: String) -> String? {\n        return nil\n    }\n}\n\nclass AutoHashableClassInherited: AutoHashableClass {\n    // Optional constants\n    let middleName: String?\n\n    init(middleName: String?) {\n        self.middleName = middleName\n        super.init(firstName: \"\", lastName: \"\", parents: [], laptopModel: \"\", phoneModel: \"\")\n    }\n}\n\nclass AutoHashableClassInheritedInherited: AutoHashableClassInherited {\n    // Optional constants\n    let prefix: String?\n\n    init(prefix: String?) {\n        self.prefix = prefix\n        super.init(middleName: \"\")\n    }\n}\n\nclass NonHashableClass {\n    let firstName: String\n\n    init(firstName: String) {\n        self.firstName = firstName\n    }\n}\n\n// Should not add super call\nclass AutoHashableClassFromNonHashableInherited: NonHashableClass, AutoHashable {\n    let lastName: String?\n\n    init(lastName: String?) {\n        self.lastName = lastName\n        super.init(firstName: \"\")\n    }\n}\n\n// Should add super call\nclass AutoHashableClassFromNonHashableInheritedInherited: AutoHashableClassFromNonHashableInherited {\n    let prefix: String?\n\n    init(prefix: String?) {\n        self.prefix = prefix\n        super.init(lastName: \"\")\n    }\n}\n\nclass HashableClass: Hashable {\n    let firstName: String\n\n    init(firstName: String) {\n        self.firstName = firstName\n    }\n\n    static func == (lhs: HashableClass, rhs: HashableClass) -> Bool {\n        return lhs.firstName == rhs.firstName\n    }\n\n    func hash(into hasher: inout Hasher) {\n        self.firstName.hash(into: &hasher)\n    }\n}\n\n// Should add super\nclass AutoHashableFromHashableInherited: HashableClass, AutoHashable {\n    let lastName: String?\n\n    init(lastName: String?) {\n        self.lastName = lastName\n        super.init(firstName: \"\")\n    }\n}\n\n/// Should not add Hashable conformance\nclass AutoHashableNSObject: NSObject, AutoHashable {\n    let firstName: String\n\n    init(firstName: String) {\n        self.firstName = firstName\n    }\n}\n\n// Should add super call\nclass AutoHashableNSObjectInherited: AutoHashableNSObject {\n    let lastName: String\n\n    init(lastName: String) {\n        self.lastName = lastName\n        super.init(firstName: \"\")\n    }\n}\n"
  },
  {
    "path": "Templates/Tests/Context_Linux/AutoLenses.swift",
    "content": "//\n//  AutoLenses.swift\n//  Templates\n//\n//  Created by Anton Domashnev on 16.05.17.\n//  Copyright © 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\nprotocol AutoLenses {}\n\nstruct House: AutoLenses {\n    let rooms: Room\n    let address: String\n    let size: Int\n}\n\nstruct Room: AutoLenses {\n    let people: [Person]\n    let name: String\n}\n\nstruct Person: AutoLenses {\n    let name: String\n}\n\n// swiftlint:disable identifier_name\nstruct Rectangle: AutoLenses {\n    let x: Int\n    let y: Int\n\n    var area: Int {\n        return x*y\n    }\n}\n"
  },
  {
    "path": "Templates/Tests/Context_Linux/AutoMockable.swift",
    "content": "//\n//  AutoMockable.swift\n//  Templates\n//\n//  Created by Anton Domashnev on 17.05.17.\n//  Copyright © 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\n\npublic protocol AutoMockable {}\nprotocol StubProtocol {}\nprotocol StubWithAnyNameProtocol {}\nprotocol StubWithSomeNameProtocol {}\nprotocol PersonProtocol {}\n\nprotocol BasicProtocol: AutoMockable {\n    func loadConfiguration() -> String?\n    /// Asks a Duck to quack\n    ///\n    /// - Parameter times: How many times the Duck will quack\n    func save(configuration: String)\n}\n\nprotocol ImplicitlyUnwrappedOptionalReturnValueProtocol: AutoMockable {\n  func implicitReturn() -> String!\n}\n\nprotocol InitializationProtocol: AutoMockable {\n    init(intParameter: Int, stringParameter: String, optionalParameter: String?)\n    func start()\n    func stop()\n}\n\nprotocol VariablesProtocol: AutoMockable {\n    var company: String? { get set }\n    var name: String { get }\n    var age: Int { get }\n    var kids: [String] { get }\n    var universityMarks: [String: Int] { get }\n}\n\nprotocol SameShortMethodNamesProtocol: AutoMockable {\n    func start(car: String, of model: String)\n    func start(plane: String, of model: String)\n}\n\nprotocol ExtendableProtocol: AutoMockable {\n    var canReport: Bool { get }\n    func report(message: String)\n}\n\nprotocol ReservedWordsProtocol: AutoMockable {\n    func `continue`(with message: String) -> String\n}\n\nprotocol ThrowableProtocol: AutoMockable {\n    func doOrThrow() throws -> String\n    func doOrThrowVoid() throws\n}\n\nprotocol TypedThrowableProtocol: AutoMockable {\n    init() throws(CustomError)\n    init<E>(init2: Void) throws(E) where E: Error\n    var value: Int { get throws(CustomError) }\n    var valueAnyError: Int { get throws(any Error) }\n    var valueThrowsNever: Int { get throws(Never) }\n    func doOrThrow() throws(CustomError) -> String\n    // func doOrThrowVoid() throws(CustomErrorNameSpace.Error)\n    func doOrThrowAnyError() throws(any Error)\n    func doOrThrowNever() throws(Never)\n    func doOrRethrows<E>(_ block: () throws(E) -> Void) throws(E) -> Int where E: Error\n}\n\nstruct CustomError: Error {}\n// This seems to not be supported on linux, as it cause a crash when running Sourcery\n// because of the cycle in Type (with Type and Typealias), causing a crash during NSArchive decoding\n// enum CustomErrorNameSpace {\n//     struct Error: Swift.Error {}\n// }\n\nprotocol CurrencyPresenter: AutoMockable {\n    func showSourceCurrency(_ currency: String)\n}\n\nextension ExtendableProtocol {\n    var canReport: Bool { return true }\n\n    func report(message: String = \"Test\") {\n        print(message)\n    }\n}\n\nprotocol ClosureProtocol: AutoMockable {\n    func setClosure(_ closure: @escaping () -> Void)\n}\n\nprotocol NullableClosureProtocol: AutoMockable {\n    func setClosure(_ closure: (() -> Void)?)\n}\n\nprotocol MultiClosureProtocol: AutoMockable {\n    func setClosure(name: String, _ closure: @escaping () -> Void)\n}\n\nprotocol MultiNullableClosureProtocol: AutoMockable {\n    func setClosure(name: String, _ closure: (() -> Void)?)\n}\n\nprotocol NonEscapingClosureProtocol: AutoMockable {\n    func executeClosure(_ closure: () -> Void)\n}\n\nprotocol MultiNonEscapingClosureProtocol: AutoMockable {\n    func executeClosure(name: String, _ closure: () -> Void)\n}\n\nprotocol MultiExistentialArgumentsClosureProtocol: AutoMockable {\n    func execute(completion: ((any StubWithSomeNameProtocol)?, any StubWithSomeNameProtocol) -> (any StubWithSomeNameProtocol)?)\n}\n\nprotocol ClosureWithTwoParametersProtocol: AutoMockable {\n    func setClosure(closure: @escaping (String, Int) -> Void)\n}\n\n/// sourcery: AutoMockable\nprotocol AnnotatedProtocol {\n    func sayHelloWith(name: String)\n}\n\nprotocol SingleOptionalParameterFunction: AutoMockable {\n    func send(message: String?)\n}\n\nprotocol FunctionWithClosureReturnType: AutoMockable {\n    func get() -> () -> Void\n    func getOptional() -> (() -> Void)?\n}\n\nprotocol FunctionWithMultilineDeclaration: AutoMockable {\n    func start(car: String,\n               of model: String)\n}\n\nprotocol ThrowingVariablesProtocol: AutoMockable {\n    var title: String? { get throws }\n    var firstName: String { get throws }\n}\n\nprotocol AsyncVariablesProtocol: AutoMockable {\n    var title: String? { get async }\n    var firstName: String { get async }\n}\n\nprotocol AsyncThrowingVariablesProtocol: AutoMockable {\n    var title: String? { get async throws }\n    var firstName: String { get async throws }\n}\n\nprotocol AsyncProtocol: AutoMockable {\n    @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)\n    func callAsync(parameter: Int) async -> String\n    func callAsyncAndThrow(parameter: Int) async throws -> String\n    func callAsyncVoid(parameter: Int) async -> Void\n    func callAsyncAndThrowVoid(parameter: Int) async throws -> Void\n}\n\nprotocol FunctionWithAttributes: AutoMockable {\n    @discardableResult\n    func callOneAttribute() -> String\n    \n    @discardableResult\n    @available(macOS 10.15, *)\n    func callTwoAttributes() -> Int\n    \n    @discardableResult\n    @available(iOS 13.0, *)\n    @available(macOS 10.15, *)\n    func callRepeatedAttributes() -> Bool\n}\n\npublic protocol AccessLevelProtocol: AutoMockable {\n    var company: String? { get set }\n    var name: String { get }\n    \n    func loadConfiguration() -> String?\n}\n\nprotocol StaticMethodProtocol: AutoMockable {\n    static func staticFunction(_: String) -> String\n}\n\nprotocol AnyProtocol: AutoMockable {\n    var a: any StubProtocol { get }\n    var b: (any StubProtocol)? { get }\n    var c: (any StubProtocol)! { get }\n    var d: (((any StubProtocol)?) -> Void) { get }\n    var e: [(any StubProtocol)?] { get }\n    func f(_ x: (any StubProtocol)?, y: (any StubProtocol)!, z: any StubProtocol)\n    var g: any StubProtocol { get }\n    var h: (any StubProtocol)? { get }\n    var i: (any StubProtocol)! { get }\n    func j(x: (any StubProtocol)?, y: (any StubProtocol)!, z: any StubProtocol) async -> String\n    func k(x: ((any StubProtocol)?) -> Void, y: (any StubProtocol) -> Void)\n    func l(x: (((any StubProtocol)?) -> Void), y: ((any StubProtocol) -> Void))\n    var anyConfusingPropertyName: any StubProtocol { get }\n    func m(anyConfusingArgumentName: any StubProtocol)\n    func n(x: @escaping ((any StubProtocol)?) -> Void)\n    var o: any StubWithAnyNameProtocol { get }\n    func p(_ x: (any StubWithAnyNameProtocol)?)\n    func q() -> any StubProtocol\n    func r() -> (any StubProtocol)?\n    func s() -> () -> any StubProtocol\n    func t() -> () -> (any StubProtocol)?\n    func u() -> (Int, () -> (any StubProtocol)?)\n    func v() -> (Int, (() -> any StubProtocol)?)\n    func w() -> [(any StubProtocol)?]\n    func x() -> [String: (any StubProtocol)?]\n    func y() -> (any StubProtocol, (any StubProtocol)?)\n    func z() -> any StubProtocol & CustomStringConvertible\n}\n\nprotocol AnyProtocolWithOptionals: AutoMockable {\n    var a: [any StubProtocol]? { get }\n    var b: [Result<Void, any Error>] { get }\n    var c: (Int, [(any StubProtocol)?])? { get }\n    var d: (Int, (any StubProtocol)?) { get }\n    var e: (Int, (any StubProtocol)?)? { get }\n    var f: (Int, [any StubProtocol]?)? { get }\n    func g(_ g: String, handler: @escaping ([any StubProtocol]?) -> Void) -> Bool\n    func h(_ h: String, handler: @escaping ([StubProtocol]) -> Void) -> Bool\n    func i(_ i: String, handler: @escaping ([(any StubProtocol)?]) -> Void) -> Bool\n    var j: (anyInteger: Int, anyArray: [any StubProtocol]?)? { get }\n}\n\nprotocol SomeProtocol: AutoMockable {\n    func a(_ x: (some StubProtocol)?, y: (some StubProtocol)!, z: some StubProtocol)\n    func b(x: (some StubProtocol)?, y: (some StubProtocol)!, z: some StubProtocol) async -> String\n    func someConfusingFuncName(x: some StubProtocol)\n    func c(someConfusingArgumentName: some StubProtocol)\n    func d(_ x: (some StubWithSomeNameProtocol)?)\n}\n\nclass GenericType<A, B, C>{}\n\nprotocol HouseProtocol: AutoMockable {\n    var aPublisher: AnyPublisher<any PersonProtocol, Never>? { get }\n    var bPublisher: AnyPublisher<(any PersonProtocol)?, Never>? { get }\n    var cPublisher: CurrentValueSubject<(any PersonProtocol)?, Never>? { get }\n    var dPublisher: PassthroughSubject<(any PersonProtocol)?, Never>? { get }\n    var e1Publisher: GenericType<(any PersonProtocol)?, Never, Never>? { get }\n    var e2Publisher: GenericType<Never, (any PersonProtocol)?, Never>? { get }\n    var e3Publisher: GenericType<Never, Never, (any PersonProtocol)?>? { get }\n    var e4Publisher: GenericType<(any PersonProtocol)?, (any PersonProtocol)?, (any PersonProtocol)?>? { get }\n    var f1Publisher: GenericType<any PersonProtocol, Never, Never>? { get }\n    var f2Publisher: GenericType<Never, any PersonProtocol, Never>? { get }\n    var f3Publisher: GenericType<Never, Never, any PersonProtocol>? { get }\n    var f4Publisher: GenericType<any PersonProtocol, any PersonProtocol, any PersonProtocol>? { get }\n}\n\nprotocol FunctionWithNullableCompletionThatHasNullableAnyParameterProtocol: AutoMockable {\n    func add(\n        _ request: Int,\n         withCompletionHandler completionHandler: (((any Error)?) -> Void)?\n    )\n}\n\n// sourcery: AutoMockable\nprotocol ExampleVararg {\n    func string(key: String, args: CVarArg...) -> String\n}\n\n// sourcery: AutoMockable\nprotocol ExampleVarargTwo {\n  func toto(args: any StubWithSomeNameProtocol...)\n}\n\n// sourcery: AutoMockable\nprotocol ExampleVarargThree {\n    func toto(arg: ((String, any Collection...) -> any Collection))\n}\n\n// sourcery: AutoMockable\nprotocol ExampleVarargFour {\n    func toto(arg: ((String, any Collection...) -> Void))\n}\n\n// sourcery: AutoMockable\npublic protocol ProtocolWithOverrides {\n    func doSomething(_ data: Int) -> [String]\n    func doSomething(_ data: String) -> [String]\n    func doSomething(_ data: String) -> [Int]\n    func doSomething(_ data: String) -> ([Int], [String])\n    func doSomething(_ data: String) throws -> ([Int], [Any])\n    func doSomething(_ data: String) -> (([Int], [String]) -> Void)\n    func doSomething(_ data: String) throws -> (([Int], [Any]) -> Void)\n}\n\n// sourcery: AutoMockable\nprotocol SubscriptProtocol {\n    subscript(arg: Int) -> String { get set }\n    subscript<T>(arg: T) -> Int { get }\n    subscript<T>(arg: T) -> String { get async }\n    subscript<T: Hashable>(arg: T) -> T? { get set }\n    subscript<T>(arg: String) -> T? where T: Cancellable { get throws }\n    subscript<T>(arg2: String) -> T { get throws(CustomError) }\n}\n\n// sourcery: AutoMockable\npublic protocol ProtocolWithMethodWithGenericParameters {\n    func execute(param: Result<Int, Error>) -> Result<String, Error>\n}\n\n// sourcery: AutoMockable\npublic protocol ProtocolWithMethodWithInoutParameter {\n    func execute(param: inout String)\n    func execute(param: inout String, bar: Int)\n}\n//sourcery:AutoMockable\nprotocol TestProtocol {\n    associatedtype Value: Sequence where Value.Element: Collection, Value.Element: Hashable, Value.Element: Comparable\n\n    func getValue() -> Value\n\n    associatedtype Value2 = Int\n\n    func getValue2() -> Value2\n\n    associatedtype Value3: Collection where Value3.Element == String\n\n    func getValue3() -> Value3\n\n    associatedtype Value5: Sequence where Value5.Element == Int\n\n    func getValue5() -> Value5\n\n    associatedtype Value6: Sequence where Value6.Element == Int, Value6.Element: Hashable, Value6.Element: Comparable\n\n    func getValue6() -> Value6\n}\n\n// sourcery: AutoMockable\nprotocol SendableProtocol: Sendable {\n  var value: Any { get }\n}\n\nprotocol NotMockedSendableProtocol: Sendable {}\n\n// sourcery: AutoMockable\nprotocol SendableSendableProtocol: NotMockedSendableProtocol {\n  var value: Any { get }\n}\n"
  },
  {
    "path": "Templates/Tests/Context_Linux/LinuxMain.swift",
    "content": "//\n//  LinuxMain.swift\n//  Templates\n//\n//  Created by Anton Domashnev on 17.05.17.\n//  Copyright © 2017 Pixle. All rights reserved.\n//\n\nimport Foundation\nimport XCTest\n\nclass AutoInjectionTests: XCTestCase {\n    func testThatItResolvesAutoInjectedDependencies() {\n        XCTAssertTrue(true)\n    }\n\n    func testThatItDoesntResolveAutoInjectedDependencies() {\n        XCTAssertTrue(true)\n    }\n}\n\nclass AutoWiringTests: XCTestCase {\n    func testThatItCanResolveWithAutoWiring() {\n        XCTAssertTrue(true)\n    }\n\n    func testThatItCanNotResolveWithAutoWiring() {\n        XCTAssertTrue(true)\n    }\n}\n\n// sourcery: disableTests\nclass DisabledTests: XCTestCase {\n    func testThatItResolvesDisabledTestsAnnotation() {\n        XCTAssertTrue(true)\n    }\n}\n"
  },
  {
    "path": "Templates/Tests/Expected/AutoCases.expected",
    "content": "internal extension AutoCasesEnum {\n  static let count: Int = 4\n  static let allCases: [AutoCasesEnum] = [\n    .north,\n    .south,\n    .east,\n    .west\n  ]\n}\npublic extension AutoCasesHasAssociatedValuesEnum {\n  static let count: Int = 2\n}\ninternal extension AutoCasesOneValueEnum {\n  static let count: Int = 1\n  static let allCases: [AutoCasesOneValueEnum] = [\n    .one\n  ]\n}\n\n"
  },
  {
    "path": "Templates/Tests/Expected/AutoCodable.expected",
    "content": "// Generated using Sourcery 0.12.0 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n\n\n\nextension AssociatedValuesEnum {\n\n    internal init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n\n        let enumCase = try container.decode(String.self, forKey: .enumCaseKey)\n        switch enumCase {\n        case CodingKeys.someCase.rawValue:\n            let id = try container.decode(Int.self, forKey: .id)\n            let name = try container.decode(String.self, forKey: .name)\n            self = .someCase(id: id, name: name)\n        case CodingKeys.unnamedCase.rawValue:\n            // Enum cases with unnamed associated values can't be decoded\n            throw DecodingError.dataCorruptedError(forKey: .enumCaseKey, in: container, debugDescription: \"Can't decode '\\(enumCase)'\")\n        case CodingKeys.mixCase.rawValue:\n            // Enum cases with mixed named and unnamed associated values can't be decoded\n            throw DecodingError.dataCorruptedError(forKey: .enumCaseKey, in: container, debugDescription: \"Can't decode '\\(enumCase)'\")\n        case CodingKeys.anotherCase.rawValue:\n            self = .anotherCase\n        default:\n            throw DecodingError.dataCorruptedError(forKey: .enumCaseKey, in: container, debugDescription: \"Unknown enum case '\\(enumCase)'\")\n        }\n    }\n\n    internal func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n\n        switch self {\n        case let .someCase(id, name):\n            try container.encode(CodingKeys.someCase.rawValue, forKey: .enumCaseKey)\n            try container.encode(id, forKey: .id)\n            try container.encode(name, forKey: .name)\n        case .unnamedCase:\n            // Enum cases with unnamed associated values can't be encoded\n            throw EncodingError.invalidValue(self, .init(codingPath: encoder.codingPath, debugDescription: \"Can't encode '\\(self)'\"))\n        case .mixCase:\n            // Enum cases with mixed named and unnamed associated values can't be encoded\n            throw EncodingError.invalidValue(self, .init(codingPath: encoder.codingPath, debugDescription: \"Can't encode '\\(self)'\"))\n        case .anotherCase:\n            try container.encode(CodingKeys.anotherCase.rawValue, forKey: .enumCaseKey)\n        }\n    }\n\n}\n\nextension AssociatedValuesEnumNoCaseKey {\n\n    enum CodingKeys: String, CodingKey {\n        case someCase\n        case unnamedCase\n        case mixCase\n        case anotherCase\n        case id\n        case name\n    }\n\n    internal init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n\n        if container.allKeys.contains(.someCase), try container.decodeNil(forKey: .someCase) == false {\n            let associatedValues = try container.nestedContainer(keyedBy: CodingKeys.self, forKey: .someCase)\n            let id = try associatedValues.decode(Int.self, forKey: .id)\n            let name = try associatedValues.decode(String.self, forKey: .name)\n            self = .someCase(id: id, name: name)\n            return\n        }\n        if container.allKeys.contains(.unnamedCase), try container.decodeNil(forKey: .unnamedCase) == false {\n            var associatedValues = try container.nestedUnkeyedContainer(forKey: .unnamedCase)\n            let associatedValue0 = try associatedValues.decode(Int.self)\n            let associatedValue1 = try associatedValues.decode(String.self)\n            self = .unnamedCase(associatedValue0, associatedValue1)\n            return\n        }\n        if container.allKeys.contains(.mixCase), try container.decodeNil(forKey: .mixCase) == false {\n            // Enum cases with mixed named and unnamed associated values can't be decoded\n            throw DecodingError.dataCorruptedError(forKey: .mixCase, in: container, debugDescription: \"Can't decode `.mixCase`\")\n        }\n        if container.allKeys.contains(.anotherCase), try container.decodeNil(forKey: .anotherCase) == false {\n            self = .anotherCase\n            return\n        }\n        throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: \"Unknown enum case\"))\n    }\n\n    internal func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n\n        switch self {\n        case let .someCase(id, name):\n            var associatedValues = container.nestedContainer(keyedBy: CodingKeys.self, forKey: .someCase)\n            try associatedValues.encode(id, forKey: .id)\n            try associatedValues.encode(name, forKey: .name)\n        case let .unnamedCase(associatedValue0, associatedValue1):\n            var associatedValues = container.nestedUnkeyedContainer(forKey: .unnamedCase)\n            try associatedValues.encode(associatedValue0)\n            try associatedValues.encode(associatedValue1)\n        case .mixCase:\n            // Enum cases with mixed named and unnamed associated values can't be encoded\n            throw EncodingError.invalidValue(self, .init(codingPath: encoder.codingPath, debugDescription: \"Can't encode '\\(self)'\"))\n        case .anotherCase:\n            _ = container.nestedContainer(keyedBy: CodingKeys.self, forKey: .anotherCase)\n        }\n    }\n\n}\n\n\nextension CustomCodingWithNotAllDefinedKeys {\n\n    internal init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n\n        value = try container.decode(Int.self, forKey: .value)\n    }\n\n    internal func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n\n        try container.encode(value, forKey: .value)\n        encodeComputedValue(to: &container)\n    }\n\n}\n\nextension CustomContainerCodable {\n\n    public init(from decoder: Decoder) throws {\n        let container = try CustomContainerCodable.decodingContainer(decoder)\n\n        value = try container.decode(Int.self, forKey: .value)\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encodingContainer(encoder)\n\n        try container.encode(value, forKey: .value)\n    }\n\n}\n\n\n\nextension CustomMethodsCodable {\n\n    enum CodingKeys: String, CodingKey {\n        case boolValue\n        case intValue\n        case optionalString\n        case requiredString\n        case requiredStringWithDefault\n        case computedPropertyToEncode\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n\n        boolValue = try CustomMethodsCodable.decodeBoolValue(from: decoder)\n        intValue = CustomMethodsCodable.decodeIntValue(from: container) ?? CustomMethodsCodable.defaultIntValue\n        optionalString = try container.decodeIfPresent(String.self, forKey: .optionalString)\n        requiredString = try container.decode(String.self, forKey: .requiredString)\n        requiredStringWithDefault = (try? container.decode(String.self, forKey: .requiredStringWithDefault)) ?? CustomMethodsCodable.defaultRequiredStringWithDefault\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n\n        try encodeBoolValue(to: encoder)\n        encodeIntValue(to: &container)\n        try container.encodeIfPresent(optionalString, forKey: .optionalString)\n        try container.encode(requiredString, forKey: .requiredString)\n        try container.encode(requiredStringWithDefault, forKey: .requiredStringWithDefault)\n        encodeComputedPropertyToEncode(to: &container)\n        try encodeAdditionalValues(to: encoder)\n    }\n\n}\n\nextension SimpleEnum {\n\n    enum CodingKeys: String, CodingKey {\n        case someCase\n        case anotherCase\n    }\n\n    internal init(from decoder: Decoder) throws {\n        let container = try decoder.singleValueContainer()\n\n        let enumCase = try container.decode(String.self)\n        switch enumCase {\n        case CodingKeys.someCase.rawValue: self = .someCase\n        case CodingKeys.anotherCase.rawValue: self = .anotherCase\n        default: throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: \"Unknown enum case '\\(enumCase)'\"))\n        }\n    }\n\n    internal func encode(to encoder: Encoder) throws {\n        var container = encoder.singleValueContainer()\n\n        switch self {\n        case .someCase: try container.encode(CodingKeys.someCase.rawValue)\n        case .anotherCase: try container.encode(CodingKeys.anotherCase.rawValue)\n        }\n    }\n\n}\n\nextension SkipDecodingWithDefaultValueOrComputedProperty {\n\n    internal init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n\n        value = try container.decode(Int.self, forKey: .value)\n    }\n\n    internal func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n\n        try container.encode(value, forKey: .value)\n        try container.encode(computedValue, forKey: .computedValue)\n    }\n\n}\n\nextension SkipEncodingKeys {\n\n    enum CodingKeys: String, CodingKey {\n        case value\n        case skipValue\n    }\n\n    internal func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n\n        try container.encode(value, forKey: .value)\n    }\n\n}\n"
  },
  {
    "path": "Templates/Tests/Expected/AutoEquatable.expected",
    "content": "// swiftlint:disable file_length\nfileprivate func compareOptionals<T>(lhs: T?, rhs: T?, compare: (_ lhs: T, _ rhs: T) -> Bool) -> Bool {\n    switch (lhs, rhs) {\n    case let (lValue?, rValue?):\n        return compare(lValue, rValue)\n    case (nil, nil):\n        return true\n    default:\n        return false\n    }\n}\n\nfileprivate func compareArrays<T>(lhs: [T], rhs: [T], compare: (_ lhs: T, _ rhs: T) -> Bool) -> Bool {\n    guard lhs.count == rhs.count else { return false }\n    for (idx, lhsItem) in lhs.enumerated() {\n        guard compare(lhsItem, rhs[idx]) else { return false }\n    }\n\n    return true\n}\n\n\n// MARK: - AutoEquatable for classes, protocols, structs\n// MARK: - AutoEquatableAnnotatedClass AutoEquatable\nextension AutoEquatableAnnotatedClass: Equatable {}\ninternal func == (lhs: AutoEquatableAnnotatedClass, rhs: AutoEquatableAnnotatedClass) -> Bool {\n    guard lhs.moneyInThePocket == rhs.moneyInThePocket else { return false }\n    return true\n}\n// MARK: - AutoEquatableAnnotatedClassAnnotatedInherited AutoEquatable\nextension AutoEquatableAnnotatedClassAnnotatedInherited: Equatable {}\nTHIS WONT COMPILE, WE DONT SUPPORT INHERITANCE for AutoEquatable\ninternal func == (lhs: AutoEquatableAnnotatedClassAnnotatedInherited, rhs: AutoEquatableAnnotatedClassAnnotatedInherited) -> Bool {\n    guard lhs.middleName == rhs.middleName else { return false }\n    return true\n}\n// MARK: - AutoEquatableClass AutoEquatable\nextension AutoEquatableClass: Equatable {}\ninternal func == (lhs: AutoEquatableClass, rhs: AutoEquatableClass) -> Bool {\n    guard lhs.firstName == rhs.firstName else { return false }\n    guard lhs.lastName == rhs.lastName else { return false }\n    guard compareArrays(lhs: lhs.parents, rhs: rhs.parents, compare: ==) else { return false }\n    guard compareOptionals(lhs: lhs.age, rhs: rhs.age, compare: ==) else { return false }\n    guard lhs.moneyInThePocket == rhs.moneyInThePocket else { return false }\n    guard compareOptionals(lhs: lhs.friends, rhs: rhs.friends, compare: ==) else { return false }\n    return true\n}\n// MARK: - AutoEquatableClassInherited AutoEquatable\nextension AutoEquatableClassInherited: Equatable {}\nTHIS WONT COMPILE, WE DONT SUPPORT INHERITANCE for AutoEquatable\ninternal func == (lhs: AutoEquatableClassInherited, rhs: AutoEquatableClassInherited) -> Bool {\n    guard compareOptionals(lhs: lhs.middleName, rhs: rhs.middleName, compare: ==) else { return false }\n    return true\n}\n// MARK: - AutoEquatableNSObject AutoEquatable\ninternal func == (lhs: AutoEquatableNSObject, rhs: AutoEquatableNSObject) -> Bool {\n    guard lhs.firstName == rhs.firstName else { return false }\n    return true\n}\n// MARK: - AutoEquatableProtocol AutoEquatable\ninternal func == (lhs: any AutoEquatableProtocol, rhs: any AutoEquatableProtocol) -> Bool {\n    guard lhs.width == rhs.width else { return false }\n    guard lhs.height == rhs.height else { return false }\n    guard lhs.name == rhs.name else { return false }\n    return true\n}\n// MARK: - AutoEquatableStruct AutoEquatable\nextension AutoEquatableStruct: Equatable {}\ninternal func == (lhs: AutoEquatableStruct, rhs: AutoEquatableStruct) -> Bool {\n    guard lhs.firstName == rhs.firstName else { return false }\n    guard lhs.lastName == rhs.lastName else { return false }\n    guard compareArrays(lhs: lhs.parents, rhs: rhs.parents, compare: ==) else { return false }\n    guard lhs.moneyInThePocket == rhs.moneyInThePocket else { return false }\n    guard compareOptionals(lhs: lhs.friends, rhs: rhs.friends, compare: ==) else { return false }\n    guard compareOptionals(lhs: lhs.age, rhs: rhs.age, compare: ==) else { return false }\n    return true\n}\n\n// MARK: - AutoEquatable for Enums\n// MARK: - AutoEquatableEnum AutoEquatable\nextension AutoEquatableEnum: Equatable {}\ninternal func == (lhs: AutoEquatableEnum, rhs: AutoEquatableEnum) -> Bool {\n    switch (lhs, rhs) {\n    case (.one, .one):\n        return true\n    case let (.two(lhsFirst, lhsSecond), .two(rhsFirst, rhsSecond)):\n        if lhsFirst != rhsFirst { return false }\n        if lhsSecond != rhsSecond { return false }\n        return true\n    case let (.three(lhs), .three(rhs)):\n        return lhs == rhs\n    default: return false\n    }\n}\n// MARK: - AutoEquatableEnumWithOneCase AutoEquatable\nextension AutoEquatableEnumWithOneCase: Equatable {}\ninternal func == (lhs: AutoEquatableEnumWithOneCase, rhs: AutoEquatableEnumWithOneCase) -> Bool {\n    switch (lhs, rhs) {\n    case (.one, .one):\n        return true\n    }\n}\n"
  },
  {
    "path": "Templates/Tests/Expected/AutoHashable.expected",
    "content": "\n// swiftlint:disable all\n\n// MARK: - AutoHashable for classes, protocols, structs\n// MARK: - AutoHashableClass AutoHashable\nextension AutoHashableClass: Hashable {\n    internal func hash(into hasher: inout Hasher) {\n        firstName.hash(into: &hasher)\n        lastName.hash(into: &hasher)\n        parents.hash(into: &hasher)\n        universityGrades.hash(into: &hasher)\n        moneyInThePocket.hash(into: &hasher)\n        age.hash(into: &hasher)\n        friends.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableClassFromNonHashableInherited AutoHashable\nextension AutoHashableClassFromNonHashableInherited: Hashable {\n    internal func hash(into hasher: inout Hasher) {\n        lastName.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableClassFromNonHashableInheritedInherited AutoHashable\nextension AutoHashableClassFromNonHashableInheritedInherited: Hashable {\n    internal override func hash(into hasher: inout Hasher) {\n        super.hash(into: hasher)\n        prefix.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableClassInherited AutoHashable\nextension AutoHashableClassInherited: Hashable {\n    internal override func hash(into hasher: inout Hasher) {\n        super.hash(into: hasher)\n        middleName.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableClassInheritedInherited AutoHashable\nextension AutoHashableClassInheritedInherited: Hashable {\n    internal override func hash(into hasher: inout Hasher) {\n        super.hash(into: hasher)\n        prefix.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableFromHashableInherited AutoHashable\nextension AutoHashableFromHashableInherited: Hashable {\n    internal override func hash(into hasher: inout Hasher) {\n        super.hash(into: hasher)\n        lastName.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableNSObject AutoHashable\nextension AutoHashableNSObject {\n    internal override func hash(into hasher: inout Hasher) {\n        super.hash(into: hasher)\n        firstName.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableNSObjectInherited AutoHashable\nextension AutoHashableNSObjectInherited {\n    internal override func hash(into hasher: inout Hasher) {\n        super.hash(into: hasher)\n        lastName.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableProtocol AutoHashable\nextension AutoHashableProtocol {\n    internal func hash(into hasher: inout Hasher) {\n        width.hash(into: &hasher)\n        height.hash(into: &hasher)\n        type(of: self).name.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableStruct AutoHashable\nextension AutoHashableStruct: Hashable {\n    internal func hash(into hasher: inout Hasher) {\n        firstName.hash(into: &hasher)\n        lastName.hash(into: &hasher)\n        parents.hash(into: &hasher)\n        universityGrades.hash(into: &hasher)\n        moneyInThePocket.hash(into: &hasher)\n        age.hash(into: &hasher)\n        friends.hash(into: &hasher)\n    }\n}\n\n// MARK: - AutoHashable for Enums\n\n// MARK: - AutoHashableEnum AutoHashable\nextension AutoHashableEnum: Hashable {\n    internal func hash(into hasher: inout Hasher) {\n        switch self {\n        case .one:\n            1.hash(into: &hasher)\n        case let .two(first, second):\n            2.hash(into: &hasher)\n            first.hash(into: &hasher)\n            second.hash(into: &hasher)\n        case let .three(data):\n            3.hash(into: &hasher)\n            data.hash(into: &hasher)\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/Tests/Expected/AutoLenses.expected",
    "content": "// swiftlint:disable variable_name\ninfix operator *~: MultiplicationPrecedence\ninfix operator |>: AdditionPrecedence\n\nstruct Lens<Whole, Part> {\n    let get: (Whole) -> Part\n    let set: (Part, Whole) -> Whole\n}\n\nfunc * <A, B, C> (lhs: Lens<A, B>, rhs: Lens<B, C>) -> Lens<A, C> {\n    return Lens<A, C>(\n        get: { a in rhs.get(lhs.get(a)) },\n        set: { (c, a) in lhs.set(rhs.set(c, lhs.get(a)), a) }\n    )\n}\n\nfunc *~ <A, B> (lhs: Lens<A, B>, rhs: B) -> (A) -> A {\n    return { a in lhs.set(rhs, a) }\n}\n\nfunc |> <A, B> (x: A, f: (A) -> B) -> B {\n    return f(x)\n}\n\nfunc |> <A, B, C> (f: @escaping (A) -> B, g: @escaping (B) -> C) -> (A) -> C {\n    return { g(f($0)) }\n}\n\nextension House {\n  static let roomsLens = Lens<House, Room>(\n    get: { $0.rooms },\n    set: { rooms, house in\n       House(rooms: rooms, address: house.address, size: house.size)\n    }\n  )\n  static let addressLens = Lens<House, String>(\n    get: { $0.address },\n    set: { address, house in\n       House(rooms: house.rooms, address: address, size: house.size)\n    }\n  )\n  static let sizeLens = Lens<House, Int>(\n    get: { $0.size },\n    set: { size, house in\n       House(rooms: house.rooms, address: house.address, size: size)\n    }\n  )\n}\nextension Person {\n  static let nameLens = Lens<Person, String>(\n    get: { $0.name },\n    set: { name, person in\n       Person(name: name)\n    }\n  )\n}\nextension Rectangle {\n  static let xLens = Lens<Rectangle, Int>(\n    get: { $0.x },\n    set: { x, rectangle in\n       Rectangle(x: x, y: rectangle.y)\n    }\n  )\n  static let yLens = Lens<Rectangle, Int>(\n    get: { $0.y },\n    set: { y, rectangle in\n       Rectangle(x: rectangle.x, y: y)\n    }\n  )\n}\nextension Room {\n  static let peopleLens = Lens<Room, [Person]>(\n    get: { $0.people },\n    set: { people, room in\n       Room(people: people, name: room.name)\n    }\n  )\n  static let nameLens = Lens<Room, String>(\n    get: { $0.name },\n    set: { name, room in\n       Room(people: room.people, name: name)\n    }\n  )\n}\n"
  },
  {
    "path": "Templates/Tests/Expected/AutoMockable.expected",
    "content": "// Generated using Sourcery 2.2.7 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable line_length\n// swiftlint:disable variable_name\n\nimport Foundation\n#if os(iOS) || os(tvOS) || os(watchOS)\nimport UIKit\n#elseif os(OSX)\nimport AppKit\n#endif\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\npublic class AccessLevelProtocolMock: AccessLevelProtocol {\n\n    public init() {}\n\n    public var company: String?\n    public var name: String {\n        get { return underlyingName }\n        set(value) { underlyingName = value }\n    }\n    public var underlyingName: (String)!\n\n\n    //MARK: - loadConfiguration\n\n    public var loadConfigurationStringCallsCount = 0\n    public var loadConfigurationStringCalled: Bool {\n        return loadConfigurationStringCallsCount > 0\n    }\n    public var loadConfigurationStringReturnValue: String?\n    public var loadConfigurationStringClosure: (() -> String?)?\n\n    public func loadConfiguration() -> String? {\n        loadConfigurationStringCallsCount += 1\n        if let loadConfigurationStringClosure = loadConfigurationStringClosure {\n            return loadConfigurationStringClosure()\n        } else {\n            return loadConfigurationStringReturnValue\n        }\n    }\n\n\n}\nclass AnnotatedProtocolMock: AnnotatedProtocol {\n\n\n\n\n    //MARK: - sayHelloWith\n\n    var sayHelloWithNameStringVoidCallsCount = 0\n    var sayHelloWithNameStringVoidCalled: Bool {\n        return sayHelloWithNameStringVoidCallsCount > 0\n    }\n    var sayHelloWithNameStringVoidReceivedName: (String)?\n    var sayHelloWithNameStringVoidReceivedInvocations: [(String)] = []\n    var sayHelloWithNameStringVoidClosure: ((String) -> Void)?\n\n    func sayHelloWith(name: String) {\n        sayHelloWithNameStringVoidCallsCount += 1\n        sayHelloWithNameStringVoidReceivedName = name\n        sayHelloWithNameStringVoidReceivedInvocations.append(name)\n        sayHelloWithNameStringVoidClosure?(name)\n    }\n\n\n}\nclass AnyProtocolMock: AnyProtocol {\n\n\n    var a: any StubProtocol {\n        get { return underlyingA }\n        set(value) { underlyingA = value }\n    }\n    var underlyingA: (any StubProtocol)!\n    var b: (any StubProtocol)?\n    var c: (any StubProtocol)!\n    var d: (((any StubProtocol)?) -> Void) {\n        get { return underlyingD }\n        set(value) { underlyingD = value }\n    }\n    var underlyingD: ((((any StubProtocol)?) -> Void))!\n    var e: [(any StubProtocol)?] = []\n    var g: any StubProtocol {\n        get { return underlyingG }\n        set(value) { underlyingG = value }\n    }\n    var underlyingG: (any StubProtocol)!\n    var h: (any StubProtocol)?\n    var i: (any StubProtocol)!\n    var anyConfusingPropertyName: any StubProtocol {\n        get { return underlyingAnyConfusingPropertyName }\n        set(value) { underlyingAnyConfusingPropertyName = value }\n    }\n    var underlyingAnyConfusingPropertyName: (any StubProtocol)!\n    var o: any StubWithAnyNameProtocol {\n        get { return underlyingO }\n        set(value) { underlyingO = value }\n    }\n    var underlyingO: (any StubWithAnyNameProtocol)!\n\n\n    //MARK: - f\n\n    var fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidCallsCount = 0\n    var fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidCalled: Bool {\n        return fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidCallsCount > 0\n    }\n    var fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidReceivedArguments: (x: (any StubProtocol)?, y: (any StubProtocol)?, z: any StubProtocol)?\n    var fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidReceivedInvocations: [(x: (any StubProtocol)?, y: (any StubProtocol)?, z: any StubProtocol)] = []\n    var fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidClosure: (((any StubProtocol)?, (any StubProtocol)?, any StubProtocol) -> Void)?\n\n    func f(_ x: (any StubProtocol)?, y: (any StubProtocol)!, z: any StubProtocol) {\n        fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidCallsCount += 1\n        fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidReceivedArguments = (x: x, y: y, z: z)\n        fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidReceivedInvocations.append((x: x, y: y, z: z))\n        fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidClosure?(x, y, z)\n    }\n\n    //MARK: - j\n\n    var jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringCallsCount = 0\n    var jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringCalled: Bool {\n        return jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringCallsCount > 0\n    }\n    var jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringReceivedArguments: (x: (any StubProtocol)?, y: (any StubProtocol)?, z: any StubProtocol)?\n    var jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringReceivedInvocations: [(x: (any StubProtocol)?, y: (any StubProtocol)?, z: any StubProtocol)] = []\n    var jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringReturnValue: String!\n    var jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringClosure: (((any StubProtocol)?, (any StubProtocol)?, any StubProtocol) async -> String)?\n\n    func j(x: (any StubProtocol)?, y: (any StubProtocol)!, z: any StubProtocol) async -> String {\n        jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringCallsCount += 1\n        jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringReceivedArguments = (x: x, y: y, z: z)\n        jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringReceivedInvocations.append((x: x, y: y, z: z))\n        if let jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringClosure = jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringClosure {\n            return await jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringClosure(x, y, z)\n        } else {\n            return jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringReturnValue\n        }\n    }\n\n    //MARK: - k\n\n    var kXAnyStubProtocolVoidYAnyStubProtocolVoidVoidCallsCount = 0\n    var kXAnyStubProtocolVoidYAnyStubProtocolVoidVoidCalled: Bool {\n        return kXAnyStubProtocolVoidYAnyStubProtocolVoidVoidCallsCount > 0\n    }\n    var kXAnyStubProtocolVoidYAnyStubProtocolVoidVoidClosure: ((((any StubProtocol)?) -> Void, (any StubProtocol) -> Void) -> Void)?\n\n    func k(x: ((any StubProtocol)?) -> Void, y: (any StubProtocol) -> Void) {\n        kXAnyStubProtocolVoidYAnyStubProtocolVoidVoidCallsCount += 1\n        kXAnyStubProtocolVoidYAnyStubProtocolVoidVoidClosure?(x, y)\n    }\n\n    //MARK: - l\n\n    var lXAnyStubProtocolVoidYAnyStubProtocolVoidVoidCallsCount = 0\n    var lXAnyStubProtocolVoidYAnyStubProtocolVoidVoidCalled: Bool {\n        return lXAnyStubProtocolVoidYAnyStubProtocolVoidVoidCallsCount > 0\n    }\n    var lXAnyStubProtocolVoidYAnyStubProtocolVoidVoidClosure: ((((any StubProtocol)?) -> Void, (any StubProtocol) -> Void) -> Void)?\n\n    func l(x: ((any StubProtocol)?) -> Void, y: (any StubProtocol) -> Void) {\n        lXAnyStubProtocolVoidYAnyStubProtocolVoidVoidCallsCount += 1\n        lXAnyStubProtocolVoidYAnyStubProtocolVoidVoidClosure?(x, y)\n    }\n\n    //MARK: - m\n\n    var mAnyConfusingArgumentNameAnyStubProtocolVoidCallsCount = 0\n    var mAnyConfusingArgumentNameAnyStubProtocolVoidCalled: Bool {\n        return mAnyConfusingArgumentNameAnyStubProtocolVoidCallsCount > 0\n    }\n    var mAnyConfusingArgumentNameAnyStubProtocolVoidReceivedAnyConfusingArgumentName: (any StubProtocol)?\n    var mAnyConfusingArgumentNameAnyStubProtocolVoidReceivedInvocations: [(any StubProtocol)] = []\n    var mAnyConfusingArgumentNameAnyStubProtocolVoidClosure: ((any StubProtocol) -> Void)?\n\n    func m(anyConfusingArgumentName: any StubProtocol) {\n        mAnyConfusingArgumentNameAnyStubProtocolVoidCallsCount += 1\n        mAnyConfusingArgumentNameAnyStubProtocolVoidReceivedAnyConfusingArgumentName = anyConfusingArgumentName\n        mAnyConfusingArgumentNameAnyStubProtocolVoidReceivedInvocations.append(anyConfusingArgumentName)\n        mAnyConfusingArgumentNameAnyStubProtocolVoidClosure?(anyConfusingArgumentName)\n    }\n\n    //MARK: - n\n\n    var nXEscapingAnyStubProtocolVoidVoidCallsCount = 0\n    var nXEscapingAnyStubProtocolVoidVoidCalled: Bool {\n        return nXEscapingAnyStubProtocolVoidVoidCallsCount > 0\n    }\n    var nXEscapingAnyStubProtocolVoidVoidReceivedX: ((((any StubProtocol)?) -> Void))?\n    var nXEscapingAnyStubProtocolVoidVoidReceivedInvocations: [((((any StubProtocol)?) -> Void))] = []\n    var nXEscapingAnyStubProtocolVoidVoidClosure: ((@escaping ((any StubProtocol)?) -> Void) -> Void)?\n\n    func n(x: @escaping ((any StubProtocol)?) -> Void) {\n        nXEscapingAnyStubProtocolVoidVoidCallsCount += 1\n        nXEscapingAnyStubProtocolVoidVoidReceivedX = x\n        nXEscapingAnyStubProtocolVoidVoidReceivedInvocations.append(x)\n        nXEscapingAnyStubProtocolVoidVoidClosure?(x)\n    }\n\n    //MARK: - p\n\n    var pXAnyStubWithAnyNameProtocolVoidCallsCount = 0\n    var pXAnyStubWithAnyNameProtocolVoidCalled: Bool {\n        return pXAnyStubWithAnyNameProtocolVoidCallsCount > 0\n    }\n    var pXAnyStubWithAnyNameProtocolVoidReceivedX: (any StubWithAnyNameProtocol)?\n    var pXAnyStubWithAnyNameProtocolVoidReceivedInvocations: [(any StubWithAnyNameProtocol)?] = []\n    var pXAnyStubWithAnyNameProtocolVoidClosure: (((any StubWithAnyNameProtocol)?) -> Void)?\n\n    func p(_ x: (any StubWithAnyNameProtocol)?) {\n        pXAnyStubWithAnyNameProtocolVoidCallsCount += 1\n        pXAnyStubWithAnyNameProtocolVoidReceivedX = x\n        pXAnyStubWithAnyNameProtocolVoidReceivedInvocations.append(x)\n        pXAnyStubWithAnyNameProtocolVoidClosure?(x)\n    }\n\n    //MARK: - q\n\n    var qAnyStubProtocolCallsCount = 0\n    var qAnyStubProtocolCalled: Bool {\n        return qAnyStubProtocolCallsCount > 0\n    }\n    var qAnyStubProtocolReturnValue: (any StubProtocol)!\n    var qAnyStubProtocolClosure: (() -> any StubProtocol)?\n\n    func q() -> any StubProtocol {\n        qAnyStubProtocolCallsCount += 1\n        if let qAnyStubProtocolClosure = qAnyStubProtocolClosure {\n            return qAnyStubProtocolClosure()\n        } else {\n            return qAnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - r\n\n    var rAnyStubProtocolCallsCount = 0\n    var rAnyStubProtocolCalled: Bool {\n        return rAnyStubProtocolCallsCount > 0\n    }\n    var rAnyStubProtocolReturnValue: ((any StubProtocol)?)\n    var rAnyStubProtocolClosure: (() -> (any StubProtocol)?)?\n\n    func r() -> (any StubProtocol)? {\n        rAnyStubProtocolCallsCount += 1\n        if let rAnyStubProtocolClosure = rAnyStubProtocolClosure {\n            return rAnyStubProtocolClosure()\n        } else {\n            return rAnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - s\n\n    var s____AnyStubProtocolCallsCount = 0\n    var s____AnyStubProtocolCalled: Bool {\n        return s____AnyStubProtocolCallsCount > 0\n    }\n    var s____AnyStubProtocolReturnValue: ((() -> any StubProtocol))!\n    var s____AnyStubProtocolClosure: (() -> (() -> any StubProtocol))?\n\n    func s() -> (() -> any StubProtocol) {\n        s____AnyStubProtocolCallsCount += 1\n        if let s____AnyStubProtocolClosure = s____AnyStubProtocolClosure {\n            return s____AnyStubProtocolClosure()\n        } else {\n            return s____AnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - t\n\n    var t____AnyStubProtocolCallsCount = 0\n    var t____AnyStubProtocolCalled: Bool {\n        return t____AnyStubProtocolCallsCount > 0\n    }\n    var t____AnyStubProtocolReturnValue: ((() -> (any StubProtocol)?))!\n    var t____AnyStubProtocolClosure: (() -> (() -> (any StubProtocol)?))?\n\n    func t() -> (() -> (any StubProtocol)?) {\n        t____AnyStubProtocolCallsCount += 1\n        if let t____AnyStubProtocolClosure = t____AnyStubProtocolClosure {\n            return t____AnyStubProtocolClosure()\n        } else {\n            return t____AnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - u\n\n    var u_IntAnyStubProtocolCallsCount = 0\n    var u_IntAnyStubProtocolCalled: Bool {\n        return u_IntAnyStubProtocolCallsCount > 0\n    }\n    var u_IntAnyStubProtocolReturnValue: ((Int, () -> (any StubProtocol)?))!\n    var u_IntAnyStubProtocolClosure: (() -> (Int, () -> (any StubProtocol)?))?\n\n    func u() -> (Int, () -> (any StubProtocol)?) {\n        u_IntAnyStubProtocolCallsCount += 1\n        if let u_IntAnyStubProtocolClosure = u_IntAnyStubProtocolClosure {\n            return u_IntAnyStubProtocolClosure()\n        } else {\n            return u_IntAnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - v\n\n    var v_IntAnyStubProtocolCallsCount = 0\n    var v_IntAnyStubProtocolCalled: Bool {\n        return v_IntAnyStubProtocolCallsCount > 0\n    }\n    var v_IntAnyStubProtocolReturnValue: ((Int, (() -> any StubProtocol)?))!\n    var v_IntAnyStubProtocolClosure: (() -> (Int, (() -> any StubProtocol)?))?\n\n    func v() -> (Int, (() -> any StubProtocol)?) {\n        v_IntAnyStubProtocolCallsCount += 1\n        if let v_IntAnyStubProtocolClosure = v_IntAnyStubProtocolClosure {\n            return v_IntAnyStubProtocolClosure()\n        } else {\n            return v_IntAnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - w\n\n    var w_AnyStubProtocolCallsCount = 0\n    var w_AnyStubProtocolCalled: Bool {\n        return w_AnyStubProtocolCallsCount > 0\n    }\n    var w_AnyStubProtocolReturnValue: ([(any StubProtocol)?])!\n    var w_AnyStubProtocolClosure: (() -> [(any StubProtocol)?])?\n\n    func w() -> [(any StubProtocol)?] {\n        w_AnyStubProtocolCallsCount += 1\n        if let w_AnyStubProtocolClosure = w_AnyStubProtocolClosure {\n            return w_AnyStubProtocolClosure()\n        } else {\n            return w_AnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - x\n\n    var xStringAnyStubProtocolCallsCount = 0\n    var xStringAnyStubProtocolCalled: Bool {\n        return xStringAnyStubProtocolCallsCount > 0\n    }\n    var xStringAnyStubProtocolReturnValue: ([String: (any StubProtocol)?])!\n    var xStringAnyStubProtocolClosure: (() -> [String: (any StubProtocol)?])?\n\n    func x() -> [String: (any StubProtocol)?] {\n        xStringAnyStubProtocolCallsCount += 1\n        if let xStringAnyStubProtocolClosure = xStringAnyStubProtocolClosure {\n            return xStringAnyStubProtocolClosure()\n        } else {\n            return xStringAnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - y\n\n    var y_AnyStubProtocolAnyStubProtocolCallsCount = 0\n    var y_AnyStubProtocolAnyStubProtocolCalled: Bool {\n        return y_AnyStubProtocolAnyStubProtocolCallsCount > 0\n    }\n    var y_AnyStubProtocolAnyStubProtocolReturnValue: ((any StubProtocol, (any StubProtocol)?))!\n    var y_AnyStubProtocolAnyStubProtocolClosure: (() -> (any StubProtocol, (any StubProtocol)?))?\n\n    func y() -> (any StubProtocol, (any StubProtocol)?) {\n        y_AnyStubProtocolAnyStubProtocolCallsCount += 1\n        if let y_AnyStubProtocolAnyStubProtocolClosure = y_AnyStubProtocolAnyStubProtocolClosure {\n            return y_AnyStubProtocolAnyStubProtocolClosure()\n        } else {\n            return y_AnyStubProtocolAnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - z\n\n    var zAnyStubProtocolCustomStringConvertibleCallsCount = 0\n    var zAnyStubProtocolCustomStringConvertibleCalled: Bool {\n        return zAnyStubProtocolCustomStringConvertibleCallsCount > 0\n    }\n    var zAnyStubProtocolCustomStringConvertibleReturnValue: (any StubProtocol & CustomStringConvertible)!\n    var zAnyStubProtocolCustomStringConvertibleClosure: (() -> any StubProtocol & CustomStringConvertible)?\n\n    func z() -> any StubProtocol & CustomStringConvertible {\n        zAnyStubProtocolCustomStringConvertibleCallsCount += 1\n        if let zAnyStubProtocolCustomStringConvertibleClosure = zAnyStubProtocolCustomStringConvertibleClosure {\n            return zAnyStubProtocolCustomStringConvertibleClosure()\n        } else {\n            return zAnyStubProtocolCustomStringConvertibleReturnValue\n        }\n    }\n\n\n}\nclass AnyProtocolWithOptionalsMock: AnyProtocolWithOptionals {\n\n\n    var a: [any StubProtocol]?\n    var b: [Result<Void, any Error>] = []\n    var c: (Int, [(any StubProtocol)?])?\n    var d: (Int, (any StubProtocol)?) {\n        get { return underlyingD }\n        set(value) { underlyingD = value }\n    }\n    var underlyingD: ((Int, (any StubProtocol)?))!\n    var e: (Int, (any StubProtocol)?)?\n    var f: (Int, [any StubProtocol]?)?\n    var j: (anyInteger: Int, anyArray: [any StubProtocol]?)?\n\n\n    //MARK: - g\n\n    var gGStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount = 0\n    var gGStringHandlerEscapingAnyStubProtocolVoidBoolCalled: Bool {\n        return gGStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount > 0\n    }\n    var gGStringHandlerEscapingAnyStubProtocolVoidBoolReceivedArguments: (g: String, handler: ([any StubProtocol]?) -> Void)?\n    var gGStringHandlerEscapingAnyStubProtocolVoidBoolReceivedInvocations: [(g: String, handler: ([any StubProtocol]?) -> Void)] = []\n    var gGStringHandlerEscapingAnyStubProtocolVoidBoolReturnValue: Bool!\n    var gGStringHandlerEscapingAnyStubProtocolVoidBoolClosure: ((String, @escaping ([any StubProtocol]?) -> Void) -> Bool)?\n\n    func g(_ g: String, handler: @escaping ([any StubProtocol]?) -> Void) -> Bool {\n        gGStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount += 1\n        gGStringHandlerEscapingAnyStubProtocolVoidBoolReceivedArguments = (g: g, handler: handler)\n        gGStringHandlerEscapingAnyStubProtocolVoidBoolReceivedInvocations.append((g: g, handler: handler))\n        if let gGStringHandlerEscapingAnyStubProtocolVoidBoolClosure = gGStringHandlerEscapingAnyStubProtocolVoidBoolClosure {\n            return gGStringHandlerEscapingAnyStubProtocolVoidBoolClosure(g, handler)\n        } else {\n            return gGStringHandlerEscapingAnyStubProtocolVoidBoolReturnValue\n        }\n    }\n\n    //MARK: - h\n\n    var hHStringHandlerEscapingStubProtocolVoidBoolCallsCount = 0\n    var hHStringHandlerEscapingStubProtocolVoidBoolCalled: Bool {\n        return hHStringHandlerEscapingStubProtocolVoidBoolCallsCount > 0\n    }\n    var hHStringHandlerEscapingStubProtocolVoidBoolReceivedArguments: (h: String, handler: ([StubProtocol]) -> Void)?\n    var hHStringHandlerEscapingStubProtocolVoidBoolReceivedInvocations: [(h: String, handler: ([StubProtocol]) -> Void)] = []\n    var hHStringHandlerEscapingStubProtocolVoidBoolReturnValue: Bool!\n    var hHStringHandlerEscapingStubProtocolVoidBoolClosure: ((String, @escaping ([StubProtocol]) -> Void) -> Bool)?\n\n    func h(_ h: String, handler: @escaping ([StubProtocol]) -> Void) -> Bool {\n        hHStringHandlerEscapingStubProtocolVoidBoolCallsCount += 1\n        hHStringHandlerEscapingStubProtocolVoidBoolReceivedArguments = (h: h, handler: handler)\n        hHStringHandlerEscapingStubProtocolVoidBoolReceivedInvocations.append((h: h, handler: handler))\n        if let hHStringHandlerEscapingStubProtocolVoidBoolClosure = hHStringHandlerEscapingStubProtocolVoidBoolClosure {\n            return hHStringHandlerEscapingStubProtocolVoidBoolClosure(h, handler)\n        } else {\n            return hHStringHandlerEscapingStubProtocolVoidBoolReturnValue\n        }\n    }\n\n    //MARK: - i\n\n    var iIStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount = 0\n    var iIStringHandlerEscapingAnyStubProtocolVoidBoolCalled: Bool {\n        return iIStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount > 0\n    }\n    var iIStringHandlerEscapingAnyStubProtocolVoidBoolReceivedArguments: (i: String, handler: ([(any StubProtocol)?]) -> Void)?\n    var iIStringHandlerEscapingAnyStubProtocolVoidBoolReceivedInvocations: [(i: String, handler: ([(any StubProtocol)?]) -> Void)] = []\n    var iIStringHandlerEscapingAnyStubProtocolVoidBoolReturnValue: Bool!\n    var iIStringHandlerEscapingAnyStubProtocolVoidBoolClosure: ((String, @escaping ([(any StubProtocol)?]) -> Void) -> Bool)?\n\n    func i(_ i: String, handler: @escaping ([(any StubProtocol)?]) -> Void) -> Bool {\n        iIStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount += 1\n        iIStringHandlerEscapingAnyStubProtocolVoidBoolReceivedArguments = (i: i, handler: handler)\n        iIStringHandlerEscapingAnyStubProtocolVoidBoolReceivedInvocations.append((i: i, handler: handler))\n        if let iIStringHandlerEscapingAnyStubProtocolVoidBoolClosure = iIStringHandlerEscapingAnyStubProtocolVoidBoolClosure {\n            return iIStringHandlerEscapingAnyStubProtocolVoidBoolClosure(i, handler)\n        } else {\n            return iIStringHandlerEscapingAnyStubProtocolVoidBoolReturnValue\n        }\n    }\n\n\n}\nclass AsyncProtocolMock: AsyncProtocol {\n\n\n\n\n    //MARK: - callAsync\n\n    var callAsyncParameterIntStringCallsCount = 0\n    var callAsyncParameterIntStringCalled: Bool {\n        return callAsyncParameterIntStringCallsCount > 0\n    }\n    var callAsyncParameterIntStringReceivedParameter: (Int)?\n    var callAsyncParameterIntStringReceivedInvocations: [(Int)] = []\n    var callAsyncParameterIntStringReturnValue: String!\n    var callAsyncParameterIntStringClosure: ((Int) async -> String)?\n\n    @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)\n    func callAsync(parameter: Int) async -> String {\n        callAsyncParameterIntStringCallsCount += 1\n        callAsyncParameterIntStringReceivedParameter = parameter\n        callAsyncParameterIntStringReceivedInvocations.append(parameter)\n        if let callAsyncParameterIntStringClosure = callAsyncParameterIntStringClosure {\n            return await callAsyncParameterIntStringClosure(parameter)\n        } else {\n            return callAsyncParameterIntStringReturnValue\n        }\n    }\n\n    //MARK: - callAsyncAndThrow\n\n    var callAsyncAndThrowParameterIntStringThrowableError: (any Error)?\n    var callAsyncAndThrowParameterIntStringCallsCount = 0\n    var callAsyncAndThrowParameterIntStringCalled: Bool {\n        return callAsyncAndThrowParameterIntStringCallsCount > 0\n    }\n    var callAsyncAndThrowParameterIntStringReceivedParameter: (Int)?\n    var callAsyncAndThrowParameterIntStringReceivedInvocations: [(Int)] = []\n    var callAsyncAndThrowParameterIntStringReturnValue: String!\n    var callAsyncAndThrowParameterIntStringClosure: ((Int) async throws -> String)?\n\n    func callAsyncAndThrow(parameter: Int) async throws -> String {\n        callAsyncAndThrowParameterIntStringCallsCount += 1\n        callAsyncAndThrowParameterIntStringReceivedParameter = parameter\n        callAsyncAndThrowParameterIntStringReceivedInvocations.append(parameter)\n        if let error = callAsyncAndThrowParameterIntStringThrowableError {\n            throw error\n        }\n        if let callAsyncAndThrowParameterIntStringClosure = callAsyncAndThrowParameterIntStringClosure {\n            return try await callAsyncAndThrowParameterIntStringClosure(parameter)\n        } else {\n            return callAsyncAndThrowParameterIntStringReturnValue\n        }\n    }\n\n    //MARK: - callAsyncVoid\n\n    var callAsyncVoidParameterIntVoidCallsCount = 0\n    var callAsyncVoidParameterIntVoidCalled: Bool {\n        return callAsyncVoidParameterIntVoidCallsCount > 0\n    }\n    var callAsyncVoidParameterIntVoidReceivedParameter: (Int)?\n    var callAsyncVoidParameterIntVoidReceivedInvocations: [(Int)] = []\n    var callAsyncVoidParameterIntVoidClosure: ((Int) async -> Void)?\n\n    func callAsyncVoid(parameter: Int) async {\n        callAsyncVoidParameterIntVoidCallsCount += 1\n        callAsyncVoidParameterIntVoidReceivedParameter = parameter\n        callAsyncVoidParameterIntVoidReceivedInvocations.append(parameter)\n        await callAsyncVoidParameterIntVoidClosure?(parameter)\n    }\n\n    //MARK: - callAsyncAndThrowVoid\n\n    var callAsyncAndThrowVoidParameterIntVoidThrowableError: (any Error)?\n    var callAsyncAndThrowVoidParameterIntVoidCallsCount = 0\n    var callAsyncAndThrowVoidParameterIntVoidCalled: Bool {\n        return callAsyncAndThrowVoidParameterIntVoidCallsCount > 0\n    }\n    var callAsyncAndThrowVoidParameterIntVoidReceivedParameter: (Int)?\n    var callAsyncAndThrowVoidParameterIntVoidReceivedInvocations: [(Int)] = []\n    var callAsyncAndThrowVoidParameterIntVoidClosure: ((Int) async throws -> Void)?\n\n    func callAsyncAndThrowVoid(parameter: Int) async throws {\n        callAsyncAndThrowVoidParameterIntVoidCallsCount += 1\n        callAsyncAndThrowVoidParameterIntVoidReceivedParameter = parameter\n        callAsyncAndThrowVoidParameterIntVoidReceivedInvocations.append(parameter)\n        if let error = callAsyncAndThrowVoidParameterIntVoidThrowableError {\n            throw error\n        }\n        try await callAsyncAndThrowVoidParameterIntVoidClosure?(parameter)\n    }\n\n\n}\nclass AsyncThrowingVariablesProtocolMock: AsyncThrowingVariablesProtocol {\n\n\n    var titleCallsCount = 0\n    var titleCalled: Bool {\n        return titleCallsCount > 0\n    }\n\n    var title: String? {\n        get async throws {\n            titleCallsCount += 1\n            if let error = titleThrowableError {\n                throw error\n            }\n            if let titleClosure = titleClosure {\n                return try await titleClosure()\n            } else {\n                return underlyingTitle\n            }\n        }\n    }\n    var underlyingTitle: String?\n    var titleThrowableError: Error?\n    var titleClosure: (() async throws -> String?)?\n    var firstNameCallsCount = 0\n    var firstNameCalled: Bool {\n        return firstNameCallsCount > 0\n    }\n\n    var firstName: String {\n        get async throws {\n            firstNameCallsCount += 1\n            if let error = firstNameThrowableError {\n                throw error\n            }\n            if let firstNameClosure = firstNameClosure {\n                return try await firstNameClosure()\n            } else {\n                return underlyingFirstName\n            }\n        }\n    }\n    var underlyingFirstName: String!\n    var firstNameThrowableError: Error?\n    var firstNameClosure: (() async throws -> String)?\n\n\n\n}\nclass AsyncVariablesProtocolMock: AsyncVariablesProtocol {\n\n\n    var titleCallsCount = 0\n    var titleCalled: Bool {\n        return titleCallsCount > 0\n    }\n\n    var title: String? {\n        get async {\n            titleCallsCount += 1\n            if let titleClosure = titleClosure {\n                return await titleClosure()\n            } else {\n                return underlyingTitle\n            }\n        }\n    }\n    var underlyingTitle: String?\n    var titleClosure: (() async -> String?)?\n    var firstNameCallsCount = 0\n    var firstNameCalled: Bool {\n        return firstNameCallsCount > 0\n    }\n\n    var firstName: String {\n        get async {\n            firstNameCallsCount += 1\n            if let firstNameClosure = firstNameClosure {\n                return await firstNameClosure()\n            } else {\n                return underlyingFirstName\n            }\n        }\n    }\n    var underlyingFirstName: String!\n    var firstNameClosure: (() async -> String)?\n\n\n\n}\nclass BasicProtocolMock: BasicProtocol {\n\n\n\n\n    //MARK: - loadConfiguration\n\n    var loadConfigurationStringCallsCount = 0\n    var loadConfigurationStringCalled: Bool {\n        return loadConfigurationStringCallsCount > 0\n    }\n    var loadConfigurationStringReturnValue: String?\n    var loadConfigurationStringClosure: (() -> String?)?\n\n    func loadConfiguration() -> String? {\n        loadConfigurationStringCallsCount += 1\n        if let loadConfigurationStringClosure = loadConfigurationStringClosure {\n            return loadConfigurationStringClosure()\n        } else {\n            return loadConfigurationStringReturnValue\n        }\n    }\n\n    //MARK: - save\n\n    var saveConfigurationStringVoidCallsCount = 0\n    var saveConfigurationStringVoidCalled: Bool {\n        return saveConfigurationStringVoidCallsCount > 0\n    }\n    var saveConfigurationStringVoidReceivedConfiguration: (String)?\n    var saveConfigurationStringVoidReceivedInvocations: [(String)] = []\n    var saveConfigurationStringVoidClosure: ((String) -> Void)?\n\n    func save(configuration: String) {\n        saveConfigurationStringVoidCallsCount += 1\n        saveConfigurationStringVoidReceivedConfiguration = configuration\n        saveConfigurationStringVoidReceivedInvocations.append(configuration)\n        saveConfigurationStringVoidClosure?(configuration)\n    }\n\n\n}\nclass ClosureProtocolMock: ClosureProtocol {\n\n\n\n\n    //MARK: - setClosure\n\n    var setClosureClosureEscapingVoidVoidCallsCount = 0\n    var setClosureClosureEscapingVoidVoidCalled: Bool {\n        return setClosureClosureEscapingVoidVoidCallsCount > 0\n    }\n    var setClosureClosureEscapingVoidVoidReceivedClosure: ((() -> Void))?\n    var setClosureClosureEscapingVoidVoidReceivedInvocations: [((() -> Void))] = []\n    var setClosureClosureEscapingVoidVoidClosure: ((@escaping () -> Void) -> Void)?\n\n    func setClosure(_ closure: @escaping () -> Void) {\n        setClosureClosureEscapingVoidVoidCallsCount += 1\n        setClosureClosureEscapingVoidVoidReceivedClosure = closure\n        setClosureClosureEscapingVoidVoidReceivedInvocations.append(closure)\n        setClosureClosureEscapingVoidVoidClosure?(closure)\n    }\n\n\n}\nclass ClosureWithTwoParametersProtocolMock: ClosureWithTwoParametersProtocol {\n\n\n\n\n    //MARK: - setClosure\n\n    var setClosureClosureEscapingStringIntVoidVoidCallsCount = 0\n    var setClosureClosureEscapingStringIntVoidVoidCalled: Bool {\n        return setClosureClosureEscapingStringIntVoidVoidCallsCount > 0\n    }\n    var setClosureClosureEscapingStringIntVoidVoidReceivedClosure: (((String, Int) -> Void))?\n    var setClosureClosureEscapingStringIntVoidVoidReceivedInvocations: [(((String, Int) -> Void))] = []\n    var setClosureClosureEscapingStringIntVoidVoidClosure: ((@escaping (String, Int) -> Void) -> Void)?\n\n    func setClosure(closure: (@escaping (String, Int) -> Void)) {\n        setClosureClosureEscapingStringIntVoidVoidCallsCount += 1\n        setClosureClosureEscapingStringIntVoidVoidReceivedClosure = closure\n        setClosureClosureEscapingStringIntVoidVoidReceivedInvocations.append(closure)\n        setClosureClosureEscapingStringIntVoidVoidClosure?(closure)\n    }\n\n\n}\nclass CurrencyPresenterMock: CurrencyPresenter {\n\n\n\n\n    //MARK: - showSourceCurrency\n\n    var showSourceCurrencyCurrencyStringVoidCallsCount = 0\n    var showSourceCurrencyCurrencyStringVoidCalled: Bool {\n        return showSourceCurrencyCurrencyStringVoidCallsCount > 0\n    }\n    var showSourceCurrencyCurrencyStringVoidReceivedCurrency: (String)?\n    var showSourceCurrencyCurrencyStringVoidReceivedInvocations: [(String)] = []\n    var showSourceCurrencyCurrencyStringVoidClosure: ((String) -> Void)?\n\n    func showSourceCurrency(_ currency: String) {\n        showSourceCurrencyCurrencyStringVoidCallsCount += 1\n        showSourceCurrencyCurrencyStringVoidReceivedCurrency = currency\n        showSourceCurrencyCurrencyStringVoidReceivedInvocations.append(currency)\n        showSourceCurrencyCurrencyStringVoidClosure?(currency)\n    }\n\n\n}\nclass ExampleVarargMock: ExampleVararg {\n\n\n\n\n    //MARK: - string\n\n    var stringKeyStringArgsCVarArgStringCallsCount = 0\n    var stringKeyStringArgsCVarArgStringCalled: Bool {\n        return stringKeyStringArgsCVarArgStringCallsCount > 0\n    }\n    var stringKeyStringArgsCVarArgStringReceivedArguments: (key: String, args: [CVarArg])?\n    var stringKeyStringArgsCVarArgStringReceivedInvocations: [(key: String, args: [CVarArg])] = []\n    var stringKeyStringArgsCVarArgStringReturnValue: String!\n    var stringKeyStringArgsCVarArgStringClosure: ((String, CVarArg...) -> String)?\n\n    func string(key: String, args: CVarArg...) -> String {\n        stringKeyStringArgsCVarArgStringCallsCount += 1\n        stringKeyStringArgsCVarArgStringReceivedArguments = (key: key, args: args)\n        stringKeyStringArgsCVarArgStringReceivedInvocations.append((key: key, args: args))\n        if let stringKeyStringArgsCVarArgStringClosure = stringKeyStringArgsCVarArgStringClosure {\n            return stringKeyStringArgsCVarArgStringClosure(key, args)\n        } else {\n            return stringKeyStringArgsCVarArgStringReturnValue\n        }\n    }\n\n\n}\nclass ExampleVarargFourMock: ExampleVarargFour {\n\n\n\n\n    //MARK: - toto\n\n    var totoArgStringAnyCollectionVoidVoidCallsCount = 0\n    var totoArgStringAnyCollectionVoidVoidCalled: Bool {\n        return totoArgStringAnyCollectionVoidVoidCallsCount > 0\n    }\n    var totoArgStringAnyCollectionVoidVoidClosure: (((String, any Collection...) -> Void) -> Void)?\n\n    func toto(arg: ((String, any Collection...) -> Void)) {\n        totoArgStringAnyCollectionVoidVoidCallsCount += 1\n        totoArgStringAnyCollectionVoidVoidClosure?(arg)\n    }\n\n\n}\nclass ExampleVarargThreeMock: ExampleVarargThree {\n\n\n\n\n    //MARK: - toto\n\n    var totoArgStringAnyCollectionAnyCollectionVoidCallsCount = 0\n    var totoArgStringAnyCollectionAnyCollectionVoidCalled: Bool {\n        return totoArgStringAnyCollectionAnyCollectionVoidCallsCount > 0\n    }\n    var totoArgStringAnyCollectionAnyCollectionVoidClosure: (((String, any Collection...) -> any Collection) -> Void)?\n\n    func toto(arg: ((String, any Collection...) -> any Collection)) {\n        totoArgStringAnyCollectionAnyCollectionVoidCallsCount += 1\n        totoArgStringAnyCollectionAnyCollectionVoidClosure?(arg)\n    }\n\n\n}\nclass ExampleVarargTwoMock: ExampleVarargTwo {\n\n\n\n\n    //MARK: - toto\n\n    var totoArgsAnyStubWithSomeNameProtocolVoidCallsCount = 0\n    var totoArgsAnyStubWithSomeNameProtocolVoidCalled: Bool {\n        return totoArgsAnyStubWithSomeNameProtocolVoidCallsCount > 0\n    }\n    var totoArgsAnyStubWithSomeNameProtocolVoidReceivedArgs: ([(any StubWithSomeNameProtocol)])?\n    var totoArgsAnyStubWithSomeNameProtocolVoidReceivedInvocations: [([(any StubWithSomeNameProtocol)])] = []\n    var totoArgsAnyStubWithSomeNameProtocolVoidClosure: (([(any StubWithSomeNameProtocol)]) -> Void)?\n\n    func toto(args: any StubWithSomeNameProtocol...) {\n        totoArgsAnyStubWithSomeNameProtocolVoidCallsCount += 1\n        totoArgsAnyStubWithSomeNameProtocolVoidReceivedArgs = args\n        totoArgsAnyStubWithSomeNameProtocolVoidReceivedInvocations.append(args)\n        totoArgsAnyStubWithSomeNameProtocolVoidClosure?(args)\n    }\n\n\n}\nclass ExtendableProtocolMock: ExtendableProtocol {\n\n\n    var canReport: Bool {\n        get { return underlyingCanReport }\n        set(value) { underlyingCanReport = value }\n    }\n    var underlyingCanReport: (Bool)!\n\n\n    //MARK: - report\n\n    var reportMessageStringVoidCallsCount = 0\n    var reportMessageStringVoidCalled: Bool {\n        return reportMessageStringVoidCallsCount > 0\n    }\n    var reportMessageStringVoidReceivedMessage: (String)?\n    var reportMessageStringVoidReceivedInvocations: [(String)] = []\n    var reportMessageStringVoidClosure: ((String) -> Void)?\n\n    func report(message: String) {\n        reportMessageStringVoidCallsCount += 1\n        reportMessageStringVoidReceivedMessage = message\n        reportMessageStringVoidReceivedInvocations.append(message)\n        reportMessageStringVoidClosure?(message)\n    }\n\n\n}\nclass FunctionWithAttributesMock: FunctionWithAttributes {\n\n\n\n\n    //MARK: - callOneAttribute\n\n    var callOneAttributeStringCallsCount = 0\n    var callOneAttributeStringCalled: Bool {\n        return callOneAttributeStringCallsCount > 0\n    }\n    var callOneAttributeStringReturnValue: String!\n    var callOneAttributeStringClosure: (() -> String)?\n\n    @discardableResult\n    func callOneAttribute() -> String {\n        callOneAttributeStringCallsCount += 1\n        if let callOneAttributeStringClosure = callOneAttributeStringClosure {\n            return callOneAttributeStringClosure()\n        } else {\n            return callOneAttributeStringReturnValue\n        }\n    }\n\n    //MARK: - callTwoAttributes\n\n    var callTwoAttributesIntCallsCount = 0\n    var callTwoAttributesIntCalled: Bool {\n        return callTwoAttributesIntCallsCount > 0\n    }\n    var callTwoAttributesIntReturnValue: Int!\n    var callTwoAttributesIntClosure: (() -> Int)?\n\n    @available(macOS 10.15, *)\n    @discardableResult\n    func callTwoAttributes() -> Int {\n        callTwoAttributesIntCallsCount += 1\n        if let callTwoAttributesIntClosure = callTwoAttributesIntClosure {\n            return callTwoAttributesIntClosure()\n        } else {\n            return callTwoAttributesIntReturnValue\n        }\n    }\n\n    //MARK: - callRepeatedAttributes\n\n    var callRepeatedAttributesBoolCallsCount = 0\n    var callRepeatedAttributesBoolCalled: Bool {\n        return callRepeatedAttributesBoolCallsCount > 0\n    }\n    var callRepeatedAttributesBoolReturnValue: Bool!\n    var callRepeatedAttributesBoolClosure: (() -> Bool)?\n\n    @available(iOS 13.0, *)\n    @available(macOS 10.15, *)\n    @discardableResult\n    func callRepeatedAttributes() -> Bool {\n        callRepeatedAttributesBoolCallsCount += 1\n        if let callRepeatedAttributesBoolClosure = callRepeatedAttributesBoolClosure {\n            return callRepeatedAttributesBoolClosure()\n        } else {\n            return callRepeatedAttributesBoolReturnValue\n        }\n    }\n\n\n}\nclass FunctionWithClosureReturnTypeMock: FunctionWithClosureReturnType {\n\n\n\n\n    //MARK: - get\n\n    var get____VoidCallsCount = 0\n    var get____VoidCalled: Bool {\n        return get____VoidCallsCount > 0\n    }\n    var get____VoidReturnValue: ((() -> Void))!\n    var get____VoidClosure: (() -> (() -> Void))?\n\n    func get() -> (() -> Void) {\n        get____VoidCallsCount += 1\n        if let get____VoidClosure = get____VoidClosure {\n            return get____VoidClosure()\n        } else {\n            return get____VoidReturnValue\n        }\n    }\n\n    //MARK: - getOptional\n\n    var getOptional_____VoidCallsCount = 0\n    var getOptional_____VoidCalled: Bool {\n        return getOptional_____VoidCallsCount > 0\n    }\n    var getOptional_____VoidReturnValue: ((() -> Void)?)\n    var getOptional_____VoidClosure: (() -> ((() -> Void)?))?\n\n    func getOptional() -> ((() -> Void)?) {\n        getOptional_____VoidCallsCount += 1\n        if let getOptional_____VoidClosure = getOptional_____VoidClosure {\n            return getOptional_____VoidClosure()\n        } else {\n            return getOptional_____VoidReturnValue\n        }\n    }\n\n\n}\nclass FunctionWithMultilineDeclarationMock: FunctionWithMultilineDeclaration {\n\n\n\n\n    //MARK: - start\n\n    var startCarStringOfModelStringVoidCallsCount = 0\n    var startCarStringOfModelStringVoidCalled: Bool {\n        return startCarStringOfModelStringVoidCallsCount > 0\n    }\n    var startCarStringOfModelStringVoidReceivedArguments: (car: String, model: String)?\n    var startCarStringOfModelStringVoidReceivedInvocations: [(car: String, model: String)] = []\n    var startCarStringOfModelStringVoidClosure: ((String, String) -> Void)?\n\n    func start(car: String, of model: String) {\n        startCarStringOfModelStringVoidCallsCount += 1\n        startCarStringOfModelStringVoidReceivedArguments = (car: car, model: model)\n        startCarStringOfModelStringVoidReceivedInvocations.append((car: car, model: model))\n        startCarStringOfModelStringVoidClosure?(car, model)\n    }\n\n\n}\nclass FunctionWithNullableCompletionThatHasNullableAnyParameterProtocolMock: FunctionWithNullableCompletionThatHasNullableAnyParameterProtocol {\n\n\n\n\n    //MARK: - add\n\n    var addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidCallsCount = 0\n    var addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidCalled: Bool {\n        return addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidCallsCount > 0\n    }\n    var addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidReceivedArguments: (request: Int, completionHandler: ((((any Error)?) -> Void))?)?\n    var addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidReceivedInvocations: [(request: Int, completionHandler: ((((any Error)?) -> Void))?)] = []\n    var addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidClosure: ((Int, ((((any Error)?) -> Void))?) -> Void)?\n\n    func add(_ request: Int, withCompletionHandler completionHandler: ((((any Error)?) -> Void))?) {\n        addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidCallsCount += 1\n        addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidReceivedArguments = (request: request, completionHandler: completionHandler)\n        addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidReceivedInvocations.append((request: request, completionHandler: completionHandler))\n        addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidClosure?(request, completionHandler)\n    }\n\n\n}\nclass HouseProtocolMock: HouseProtocol {\n\n\n    var aPublisher: AnyPublisher<any PersonProtocol, Never>?\n    var bPublisher: AnyPublisher<(any PersonProtocol)?, Never>?\n    var cPublisher: CurrentValueSubject<(any PersonProtocol)?, Never>?\n    var dPublisher: PassthroughSubject<(any PersonProtocol)?, Never>?\n    var e1Publisher: GenericType<(any PersonProtocol)?, Never, Never>?\n    var e2Publisher: GenericType<Never, (any PersonProtocol)?, Never>?\n    var e3Publisher: GenericType<Never, Never, (any PersonProtocol)?>?\n    var e4Publisher: GenericType<(any PersonProtocol)?, (any PersonProtocol)?, (any PersonProtocol)?>?\n    var f1Publisher: GenericType<any PersonProtocol, Never, Never>?\n    var f2Publisher: GenericType<Never, any PersonProtocol, Never>?\n    var f3Publisher: GenericType<Never, Never, any PersonProtocol>?\n    var f4Publisher: GenericType<any PersonProtocol, any PersonProtocol, any PersonProtocol>?\n\n\n\n}\nclass ImplicitlyUnwrappedOptionalReturnValueProtocolMock: ImplicitlyUnwrappedOptionalReturnValueProtocol {\n\n\n\n\n    //MARK: - implicitReturn\n\n    var implicitReturnStringCallsCount = 0\n    var implicitReturnStringCalled: Bool {\n        return implicitReturnStringCallsCount > 0\n    }\n    var implicitReturnStringReturnValue: String!\n    var implicitReturnStringClosure: (() -> String)?\n\n    func implicitReturn() -> String! {\n        implicitReturnStringCallsCount += 1\n        if let implicitReturnStringClosure = implicitReturnStringClosure {\n            return implicitReturnStringClosure()\n        } else {\n            return implicitReturnStringReturnValue\n        }\n    }\n\n\n}\nclass InitializationProtocolMock: InitializationProtocol {\n\n\n\n\n    //MARK: - init\n\n    var initIntParameterIntStringParameterStringOptionalParameterStringInitializationProtocolReceivedArguments: (intParameter: Int, stringParameter: String, optionalParameter: String?)?\n    var initIntParameterIntStringParameterStringOptionalParameterStringInitializationProtocolReceivedInvocations: [(intParameter: Int, stringParameter: String, optionalParameter: String?)] = []\n    var initIntParameterIntStringParameterStringOptionalParameterStringInitializationProtocolClosure: ((Int, String, String?) -> Void)?\n\n    required init(intParameter: Int, stringParameter: String, optionalParameter: String?) {\n        initIntParameterIntStringParameterStringOptionalParameterStringInitializationProtocolReceivedArguments = (intParameter: intParameter, stringParameter: stringParameter, optionalParameter: optionalParameter)\n        initIntParameterIntStringParameterStringOptionalParameterStringInitializationProtocolReceivedInvocations.append((intParameter: intParameter, stringParameter: stringParameter, optionalParameter: optionalParameter))\n        initIntParameterIntStringParameterStringOptionalParameterStringInitializationProtocolClosure?(intParameter, stringParameter, optionalParameter)\n    }\n    //MARK: - start\n\n    var startVoidCallsCount = 0\n    var startVoidCalled: Bool {\n        return startVoidCallsCount > 0\n    }\n    var startVoidClosure: (() -> Void)?\n\n    func start() {\n        startVoidCallsCount += 1\n        startVoidClosure?()\n    }\n\n    //MARK: - stop\n\n    var stopVoidCallsCount = 0\n    var stopVoidCalled: Bool {\n        return stopVoidCallsCount > 0\n    }\n    var stopVoidClosure: (() -> Void)?\n\n    func stop() {\n        stopVoidCallsCount += 1\n        stopVoidClosure?()\n    }\n\n\n}\nclass MultiClosureProtocolMock: MultiClosureProtocol {\n\n\n\n\n    //MARK: - setClosure\n\n    var setClosureNameStringClosureEscapingVoidVoidCallsCount = 0\n    var setClosureNameStringClosureEscapingVoidVoidCalled: Bool {\n        return setClosureNameStringClosureEscapingVoidVoidCallsCount > 0\n    }\n    var setClosureNameStringClosureEscapingVoidVoidReceivedArguments: (name: String, closure: () -> Void)?\n    var setClosureNameStringClosureEscapingVoidVoidReceivedInvocations: [(name: String, closure: () -> Void)] = []\n    var setClosureNameStringClosureEscapingVoidVoidClosure: ((String, @escaping () -> Void) -> Void)?\n\n    func setClosure(name: String, _ closure: @escaping () -> Void) {\n        setClosureNameStringClosureEscapingVoidVoidCallsCount += 1\n        setClosureNameStringClosureEscapingVoidVoidReceivedArguments = (name: name, closure: closure)\n        setClosureNameStringClosureEscapingVoidVoidReceivedInvocations.append((name: name, closure: closure))\n        setClosureNameStringClosureEscapingVoidVoidClosure?(name, closure)\n    }\n\n\n}\nclass MultiExistentialArgumentsClosureProtocolMock: MultiExistentialArgumentsClosureProtocol {\n\n\n\n\n    //MARK: - execute\n\n    var executeCompletionAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolVoidCallsCount = 0\n    var executeCompletionAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolVoidCalled: Bool {\n        return executeCompletionAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolVoidCallsCount > 0\n    }\n    var executeCompletionAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolVoidClosure: ((((any StubWithSomeNameProtocol)?, (any StubWithSomeNameProtocol)) -> (any StubWithSomeNameProtocol)?) -> Void)?\n\n    func execute(completion: (((any StubWithSomeNameProtocol)?, (any StubWithSomeNameProtocol)) -> (any StubWithSomeNameProtocol)?)) {\n        executeCompletionAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolVoidCallsCount += 1\n        executeCompletionAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolVoidClosure?(completion)\n    }\n\n\n}\nclass MultiNonEscapingClosureProtocolMock: MultiNonEscapingClosureProtocol {\n\n\n\n\n    //MARK: - executeClosure\n\n    var executeClosureNameStringClosureVoidVoidCallsCount = 0\n    var executeClosureNameStringClosureVoidVoidCalled: Bool {\n        return executeClosureNameStringClosureVoidVoidCallsCount > 0\n    }\n    var executeClosureNameStringClosureVoidVoidClosure: ((String, () -> Void) -> Void)?\n\n    func executeClosure(name: String, _ closure: () -> Void) {\n        executeClosureNameStringClosureVoidVoidCallsCount += 1\n        executeClosureNameStringClosureVoidVoidClosure?(name, closure)\n    }\n\n\n}\nclass MultiNullableClosureProtocolMock: MultiNullableClosureProtocol {\n\n\n\n\n    //MARK: - setClosure\n\n    var setClosureNameStringClosureVoidVoidCallsCount = 0\n    var setClosureNameStringClosureVoidVoidCalled: Bool {\n        return setClosureNameStringClosureVoidVoidCallsCount > 0\n    }\n    var setClosureNameStringClosureVoidVoidReceivedArguments: (name: String, closure: (() -> Void)?)?\n    var setClosureNameStringClosureVoidVoidReceivedInvocations: [(name: String, closure: (() -> Void)?)] = []\n    var setClosureNameStringClosureVoidVoidClosure: ((String, (() -> Void)?) -> Void)?\n\n    func setClosure(name: String, _ closure: (() -> Void)?) {\n        setClosureNameStringClosureVoidVoidCallsCount += 1\n        setClosureNameStringClosureVoidVoidReceivedArguments = (name: name, closure: closure)\n        setClosureNameStringClosureVoidVoidReceivedInvocations.append((name: name, closure: closure))\n        setClosureNameStringClosureVoidVoidClosure?(name, closure)\n    }\n\n\n}\nclass NonEscapingClosureProtocolMock: NonEscapingClosureProtocol {\n\n\n\n\n    //MARK: - executeClosure\n\n    var executeClosureClosureVoidVoidCallsCount = 0\n    var executeClosureClosureVoidVoidCalled: Bool {\n        return executeClosureClosureVoidVoidCallsCount > 0\n    }\n    var executeClosureClosureVoidVoidClosure: ((() -> Void) -> Void)?\n\n    func executeClosure(_ closure: () -> Void) {\n        executeClosureClosureVoidVoidCallsCount += 1\n        executeClosureClosureVoidVoidClosure?(closure)\n    }\n\n\n}\nclass NullableClosureProtocolMock: NullableClosureProtocol {\n\n\n\n\n    //MARK: - setClosure\n\n    var setClosureClosureVoidVoidCallsCount = 0\n    var setClosureClosureVoidVoidCalled: Bool {\n        return setClosureClosureVoidVoidCallsCount > 0\n    }\n    var setClosureClosureVoidVoidReceivedClosure: (((() -> Void)))?\n    var setClosureClosureVoidVoidReceivedInvocations: [(((() -> Void)))?] = []\n    var setClosureClosureVoidVoidClosure: (((() -> Void)?) -> Void)?\n\n    func setClosure(_ closure: (() -> Void)?) {\n        setClosureClosureVoidVoidCallsCount += 1\n        setClosureClosureVoidVoidReceivedClosure = closure\n        setClosureClosureVoidVoidReceivedInvocations.append(closure)\n        setClosureClosureVoidVoidClosure?(closure)\n    }\n\n\n}\npublic class ProtocolWithMethodWithGenericParametersMock: ProtocolWithMethodWithGenericParameters {\n\n    public init() {}\n\n\n\n    //MARK: - execute\n\n    public var executeParamResultIntErrorResultStringErrorCallsCount = 0\n    public var executeParamResultIntErrorResultStringErrorCalled: Bool {\n        return executeParamResultIntErrorResultStringErrorCallsCount > 0\n    }\n    public var executeParamResultIntErrorResultStringErrorReceivedParam: (Result<Int, Error>)?\n    public var executeParamResultIntErrorResultStringErrorReceivedInvocations: [(Result<Int, Error>)] = []\n    public var executeParamResultIntErrorResultStringErrorReturnValue: Result<String, Error>!\n    public var executeParamResultIntErrorResultStringErrorClosure: ((Result<Int, Error>) -> Result<String, Error>)?\n\n    public func execute(param: Result<Int, Error>) -> Result<String, Error> {\n        executeParamResultIntErrorResultStringErrorCallsCount += 1\n        executeParamResultIntErrorResultStringErrorReceivedParam = param\n        executeParamResultIntErrorResultStringErrorReceivedInvocations.append(param)\n        if let executeParamResultIntErrorResultStringErrorClosure = executeParamResultIntErrorResultStringErrorClosure {\n            return executeParamResultIntErrorResultStringErrorClosure(param)\n        } else {\n            return executeParamResultIntErrorResultStringErrorReturnValue\n        }\n    }\n\n\n}\npublic class ProtocolWithMethodWithInoutParameterMock: ProtocolWithMethodWithInoutParameter {\n\n    public init() {}\n\n\n\n    //MARK: - execute\n\n    public var executeParamInoutStringVoidCallsCount = 0\n    public var executeParamInoutStringVoidCalled: Bool {\n        return executeParamInoutStringVoidCallsCount > 0\n    }\n    public var executeParamInoutStringVoidReceivedParam: (String)?\n    public var executeParamInoutStringVoidReceivedInvocations: [(String)] = []\n    public var executeParamInoutStringVoidClosure: ((inout String) -> Void)?\n\n    public func execute(param: inout String) {\n        executeParamInoutStringVoidCallsCount += 1\n        executeParamInoutStringVoidReceivedParam = param\n        executeParamInoutStringVoidReceivedInvocations.append(param)\n        executeParamInoutStringVoidClosure?(&param)\n    }\n\n    //MARK: - execute\n\n    public var executeParamInoutStringBarIntVoidCallsCount = 0\n    public var executeParamInoutStringBarIntVoidCalled: Bool {\n        return executeParamInoutStringBarIntVoidCallsCount > 0\n    }\n    public var executeParamInoutStringBarIntVoidReceivedArguments: (param: String, bar: Int)?\n    public var executeParamInoutStringBarIntVoidReceivedInvocations: [(param: String, bar: Int)] = []\n    public var executeParamInoutStringBarIntVoidClosure: ((inout String, Int) -> Void)?\n\n    public func execute(param: inout String, bar: Int) {\n        executeParamInoutStringBarIntVoidCallsCount += 1\n        executeParamInoutStringBarIntVoidReceivedArguments = (param: param, bar: bar)\n        executeParamInoutStringBarIntVoidReceivedInvocations.append((param: param, bar: bar))\n        executeParamInoutStringBarIntVoidClosure?(&param, bar)\n    }\n\n\n}\npublic class ProtocolWithOverridesMock: ProtocolWithOverrides {\n\n    public init() {}\n\n\n\n    //MARK: - doSomething\n\n    public var doSomethingDataIntStringCallsCount = 0\n    public var doSomethingDataIntStringCalled: Bool {\n        return doSomethingDataIntStringCallsCount > 0\n    }\n    public var doSomethingDataIntStringReceivedData: (Int)?\n    public var doSomethingDataIntStringReceivedInvocations: [(Int)] = []\n    public var doSomethingDataIntStringReturnValue: [String]!\n    public var doSomethingDataIntStringClosure: ((Int) -> [String])?\n\n    public func doSomething(_ data: Int) -> [String] {\n        doSomethingDataIntStringCallsCount += 1\n        doSomethingDataIntStringReceivedData = data\n        doSomethingDataIntStringReceivedInvocations.append(data)\n        if let doSomethingDataIntStringClosure = doSomethingDataIntStringClosure {\n            return doSomethingDataIntStringClosure(data)\n        } else {\n            return doSomethingDataIntStringReturnValue\n        }\n    }\n\n    //MARK: - doSomething\n\n    public var doSomethingDataStringStringCallsCount = 0\n    public var doSomethingDataStringStringCalled: Bool {\n        return doSomethingDataStringStringCallsCount > 0\n    }\n    public var doSomethingDataStringStringReceivedData: (String)?\n    public var doSomethingDataStringStringReceivedInvocations: [(String)] = []\n    public var doSomethingDataStringStringReturnValue: [String]!\n    public var doSomethingDataStringStringClosure: ((String) -> [String])?\n\n    public func doSomething(_ data: String) -> [String] {\n        doSomethingDataStringStringCallsCount += 1\n        doSomethingDataStringStringReceivedData = data\n        doSomethingDataStringStringReceivedInvocations.append(data)\n        if let doSomethingDataStringStringClosure = doSomethingDataStringStringClosure {\n            return doSomethingDataStringStringClosure(data)\n        } else {\n            return doSomethingDataStringStringReturnValue\n        }\n    }\n\n    //MARK: - doSomething\n\n    public var doSomethingDataStringIntCallsCount = 0\n    public var doSomethingDataStringIntCalled: Bool {\n        return doSomethingDataStringIntCallsCount > 0\n    }\n    public var doSomethingDataStringIntReceivedData: (String)?\n    public var doSomethingDataStringIntReceivedInvocations: [(String)] = []\n    public var doSomethingDataStringIntReturnValue: [Int]!\n    public var doSomethingDataStringIntClosure: ((String) -> [Int])?\n\n    public func doSomething(_ data: String) -> [Int] {\n        doSomethingDataStringIntCallsCount += 1\n        doSomethingDataStringIntReceivedData = data\n        doSomethingDataStringIntReceivedInvocations.append(data)\n        if let doSomethingDataStringIntClosure = doSomethingDataStringIntClosure {\n            return doSomethingDataStringIntClosure(data)\n        } else {\n            return doSomethingDataStringIntReturnValue\n        }\n    }\n\n    //MARK: - doSomething\n\n    public var doSomethingDataString_IntStringCallsCount = 0\n    public var doSomethingDataString_IntStringCalled: Bool {\n        return doSomethingDataString_IntStringCallsCount > 0\n    }\n    public var doSomethingDataString_IntStringReceivedData: (String)?\n    public var doSomethingDataString_IntStringReceivedInvocations: [(String)] = []\n    public var doSomethingDataString_IntStringReturnValue: ([Int], [String])!\n    public var doSomethingDataString_IntStringClosure: ((String) -> ([Int], [String]))?\n\n    public func doSomething(_ data: String) -> ([Int], [String]) {\n        doSomethingDataString_IntStringCallsCount += 1\n        doSomethingDataString_IntStringReceivedData = data\n        doSomethingDataString_IntStringReceivedInvocations.append(data)\n        if let doSomethingDataString_IntStringClosure = doSomethingDataString_IntStringClosure {\n            return doSomethingDataString_IntStringClosure(data)\n        } else {\n            return doSomethingDataString_IntStringReturnValue\n        }\n    }\n\n    //MARK: - doSomething\n\n    public var doSomethingDataString_IntAnyThrowableError: (any Error)?\n    public var doSomethingDataString_IntAnyCallsCount = 0\n    public var doSomethingDataString_IntAnyCalled: Bool {\n        return doSomethingDataString_IntAnyCallsCount > 0\n    }\n    public var doSomethingDataString_IntAnyReceivedData: (String)?\n    public var doSomethingDataString_IntAnyReceivedInvocations: [(String)] = []\n    public var doSomethingDataString_IntAnyReturnValue: ([Int], [Any])!\n    public var doSomethingDataString_IntAnyClosure: ((String) throws -> ([Int], [Any]))?\n\n    public func doSomething(_ data: String) throws -> ([Int], [Any]) {\n        doSomethingDataString_IntAnyCallsCount += 1\n        doSomethingDataString_IntAnyReceivedData = data\n        doSomethingDataString_IntAnyReceivedInvocations.append(data)\n        if let error = doSomethingDataString_IntAnyThrowableError {\n            throw error\n        }\n        if let doSomethingDataString_IntAnyClosure = doSomethingDataString_IntAnyClosure {\n            return try doSomethingDataString_IntAnyClosure(data)\n        } else {\n            return doSomethingDataString_IntAnyReturnValue\n        }\n    }\n\n    //MARK: - doSomething\n\n    public var doSomethingDataString_IntStringVoidCallsCount = 0\n    public var doSomethingDataString_IntStringVoidCalled: Bool {\n        return doSomethingDataString_IntStringVoidCallsCount > 0\n    }\n    public var doSomethingDataString_IntStringVoidReceivedData: (String)?\n    public var doSomethingDataString_IntStringVoidReceivedInvocations: [(String)] = []\n    public var doSomethingDataString_IntStringVoidReturnValue: (([Int], [String]) -> Void)!\n    public var doSomethingDataString_IntStringVoidClosure: ((String) -> ([Int], [String]) -> Void)?\n\n    public func doSomething(_ data: String) -> ([Int], [String]) -> Void {\n        doSomethingDataString_IntStringVoidCallsCount += 1\n        doSomethingDataString_IntStringVoidReceivedData = data\n        doSomethingDataString_IntStringVoidReceivedInvocations.append(data)\n        if let doSomethingDataString_IntStringVoidClosure = doSomethingDataString_IntStringVoidClosure {\n            return doSomethingDataString_IntStringVoidClosure(data)\n        } else {\n            return doSomethingDataString_IntStringVoidReturnValue\n        }\n    }\n\n    //MARK: - doSomething\n\n    public var doSomethingDataString_IntAnyVoidThrowableError: (any Error)?\n    public var doSomethingDataString_IntAnyVoidCallsCount = 0\n    public var doSomethingDataString_IntAnyVoidCalled: Bool {\n        return doSomethingDataString_IntAnyVoidCallsCount > 0\n    }\n    public var doSomethingDataString_IntAnyVoidReceivedData: (String)?\n    public var doSomethingDataString_IntAnyVoidReceivedInvocations: [(String)] = []\n    public var doSomethingDataString_IntAnyVoidReturnValue: (([Int], [Any]) -> Void)!\n    public var doSomethingDataString_IntAnyVoidClosure: ((String) throws -> ([Int], [Any]) -> Void)?\n\n    public func doSomething(_ data: String) throws -> ([Int], [Any]) -> Void {\n        doSomethingDataString_IntAnyVoidCallsCount += 1\n        doSomethingDataString_IntAnyVoidReceivedData = data\n        doSomethingDataString_IntAnyVoidReceivedInvocations.append(data)\n        if let error = doSomethingDataString_IntAnyVoidThrowableError {\n            throw error\n        }\n        if let doSomethingDataString_IntAnyVoidClosure = doSomethingDataString_IntAnyVoidClosure {\n            return try doSomethingDataString_IntAnyVoidClosure(data)\n        } else {\n            return doSomethingDataString_IntAnyVoidReturnValue\n        }\n    }\n\n\n}\nclass ReservedWordsProtocolMock: ReservedWordsProtocol {\n\n\n\n\n    //MARK: - `continue`\n\n    var continueWithMessageStringStringCallsCount = 0\n    var continueWithMessageStringStringCalled: Bool {\n        return continueWithMessageStringStringCallsCount > 0\n    }\n    var continueWithMessageStringStringReceivedMessage: (String)?\n    var continueWithMessageStringStringReceivedInvocations: [(String)] = []\n    var continueWithMessageStringStringReturnValue: String!\n    var continueWithMessageStringStringClosure: ((String) -> String)?\n\n    func `continue`(with message: String) -> String {\n        continueWithMessageStringStringCallsCount += 1\n        continueWithMessageStringStringReceivedMessage = message\n        continueWithMessageStringStringReceivedInvocations.append(message)\n        if let continueWithMessageStringStringClosure = continueWithMessageStringStringClosure {\n            return continueWithMessageStringStringClosure(message)\n        } else {\n            return continueWithMessageStringStringReturnValue\n        }\n    }\n\n\n}\nclass SameShortMethodNamesProtocolMock: SameShortMethodNamesProtocol {\n\n\n\n\n    //MARK: - start\n\n    var startCarStringOfModelStringVoidCallsCount = 0\n    var startCarStringOfModelStringVoidCalled: Bool {\n        return startCarStringOfModelStringVoidCallsCount > 0\n    }\n    var startCarStringOfModelStringVoidReceivedArguments: (car: String, model: String)?\n    var startCarStringOfModelStringVoidReceivedInvocations: [(car: String, model: String)] = []\n    var startCarStringOfModelStringVoidClosure: ((String, String) -> Void)?\n\n    func start(car: String, of model: String) {\n        startCarStringOfModelStringVoidCallsCount += 1\n        startCarStringOfModelStringVoidReceivedArguments = (car: car, model: model)\n        startCarStringOfModelStringVoidReceivedInvocations.append((car: car, model: model))\n        startCarStringOfModelStringVoidClosure?(car, model)\n    }\n\n    //MARK: - start\n\n    var startPlaneStringOfModelStringVoidCallsCount = 0\n    var startPlaneStringOfModelStringVoidCalled: Bool {\n        return startPlaneStringOfModelStringVoidCallsCount > 0\n    }\n    var startPlaneStringOfModelStringVoidReceivedArguments: (plane: String, model: String)?\n    var startPlaneStringOfModelStringVoidReceivedInvocations: [(plane: String, model: String)] = []\n    var startPlaneStringOfModelStringVoidClosure: ((String, String) -> Void)?\n\n    func start(plane: String, of model: String) {\n        startPlaneStringOfModelStringVoidCallsCount += 1\n        startPlaneStringOfModelStringVoidReceivedArguments = (plane: plane, model: model)\n        startPlaneStringOfModelStringVoidReceivedInvocations.append((plane: plane, model: model))\n        startPlaneStringOfModelStringVoidClosure?(plane, model)\n    }\n\n\n}\nclass SendableProtocolMock: SendableProtocol, @unchecked Sendable {\n\n\n    var value: Any {\n        get { return underlyingValue }\n        set(value) { underlyingValue = value }\n    }\n    var underlyingValue: (Any)!\n\n\n\n}\nclass SendableSendableProtocolMock: SendableSendableProtocol, @unchecked Sendable {\n\n\n    var value: Any {\n        get { return underlyingValue }\n        set(value) { underlyingValue = value }\n    }\n    var underlyingValue: (Any)!\n\n\n\n}\nclass SingleOptionalParameterFunctionMock: SingleOptionalParameterFunction {\n\n\n\n\n    //MARK: - send\n\n    var sendMessageStringVoidCallsCount = 0\n    var sendMessageStringVoidCalled: Bool {\n        return sendMessageStringVoidCallsCount > 0\n    }\n    var sendMessageStringVoidReceivedMessage: (String)?\n    var sendMessageStringVoidReceivedInvocations: [(String)?] = []\n    var sendMessageStringVoidClosure: ((String?) -> Void)?\n\n    func send(message: String?) {\n        sendMessageStringVoidCallsCount += 1\n        sendMessageStringVoidReceivedMessage = message\n        sendMessageStringVoidReceivedInvocations.append(message)\n        sendMessageStringVoidClosure?(message)\n    }\n\n\n}\nclass SomeProtocolMock: SomeProtocol {\n\n\n\n\n    //MARK: - a\n\n    var aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidCallsCount = 0\n    var aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidCalled: Bool {\n        return aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidCallsCount > 0\n    }\n    var aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidReceivedArguments: (x: (any StubProtocol)?, y: (any StubProtocol)?, z: any StubProtocol)?\n    var aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidReceivedInvocations: [(x: (any StubProtocol)?, y: (any StubProtocol)?, z: any StubProtocol)] = []\n    var aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidClosure: (((any StubProtocol)?, (any StubProtocol)?, any StubProtocol) -> Void)?\n\n    func a(_ x: (some StubProtocol)?, y: (some StubProtocol)!, z: some StubProtocol) {\n        aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidCallsCount += 1\n        aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidReceivedArguments = (x: x, y: y, z: z)\n        aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidReceivedInvocations.append((x: x, y: y, z: z))\n        aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidClosure?(x, y, z)\n    }\n\n    //MARK: - b\n\n    var bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringCallsCount = 0\n    var bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringCalled: Bool {\n        return bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringCallsCount > 0\n    }\n    var bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringReceivedArguments: (x: (any StubProtocol)?, y: (any StubProtocol)?, z: any StubProtocol)?\n    var bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringReceivedInvocations: [(x: (any StubProtocol)?, y: (any StubProtocol)?, z: any StubProtocol)] = []\n    var bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringReturnValue: String!\n    var bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringClosure: (((any StubProtocol)?, (any StubProtocol)?, any StubProtocol) async -> String)?\n\n    func b(x: (some StubProtocol)?, y: (some StubProtocol)!, z: some StubProtocol) async -> String {\n        bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringCallsCount += 1\n        bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringReceivedArguments = (x: x, y: y, z: z)\n        bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringReceivedInvocations.append((x: x, y: y, z: z))\n        if let bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringClosure = bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringClosure {\n            return await bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringClosure(x, y, z)\n        } else {\n            return bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringReturnValue\n        }\n    }\n\n    //MARK: - someConfusingFuncName\n\n    var someConfusingFuncNameXSomeStubProtocolVoidCallsCount = 0\n    var someConfusingFuncNameXSomeStubProtocolVoidCalled: Bool {\n        return someConfusingFuncNameXSomeStubProtocolVoidCallsCount > 0\n    }\n    var someConfusingFuncNameXSomeStubProtocolVoidReceivedX: (any StubProtocol)?\n    var someConfusingFuncNameXSomeStubProtocolVoidReceivedInvocations: [(any StubProtocol)] = []\n    var someConfusingFuncNameXSomeStubProtocolVoidClosure: ((any StubProtocol) -> Void)?\n\n    func someConfusingFuncName(x: some StubProtocol) {\n        someConfusingFuncNameXSomeStubProtocolVoidCallsCount += 1\n        someConfusingFuncNameXSomeStubProtocolVoidReceivedX = x\n        someConfusingFuncNameXSomeStubProtocolVoidReceivedInvocations.append(x)\n        someConfusingFuncNameXSomeStubProtocolVoidClosure?(x)\n    }\n\n    //MARK: - c\n\n    var cSomeConfusingArgumentNameSomeStubProtocolVoidCallsCount = 0\n    var cSomeConfusingArgumentNameSomeStubProtocolVoidCalled: Bool {\n        return cSomeConfusingArgumentNameSomeStubProtocolVoidCallsCount > 0\n    }\n    var cSomeConfusingArgumentNameSomeStubProtocolVoidReceivedSomeConfusingArgumentName: (any StubProtocol)?\n    var cSomeConfusingArgumentNameSomeStubProtocolVoidReceivedInvocations: [(any StubProtocol)] = []\n    var cSomeConfusingArgumentNameSomeStubProtocolVoidClosure: ((any StubProtocol) -> Void)?\n\n    func c(someConfusingArgumentName: some StubProtocol) {\n        cSomeConfusingArgumentNameSomeStubProtocolVoidCallsCount += 1\n        cSomeConfusingArgumentNameSomeStubProtocolVoidReceivedSomeConfusingArgumentName = someConfusingArgumentName\n        cSomeConfusingArgumentNameSomeStubProtocolVoidReceivedInvocations.append(someConfusingArgumentName)\n        cSomeConfusingArgumentNameSomeStubProtocolVoidClosure?(someConfusingArgumentName)\n    }\n\n    //MARK: - d\n\n    var dXSomeStubWithSomeNameProtocolVoidCallsCount = 0\n    var dXSomeStubWithSomeNameProtocolVoidCalled: Bool {\n        return dXSomeStubWithSomeNameProtocolVoidCallsCount > 0\n    }\n    var dXSomeStubWithSomeNameProtocolVoidReceivedX: (any StubWithSomeNameProtocol)?\n    var dXSomeStubWithSomeNameProtocolVoidReceivedInvocations: [(any StubWithSomeNameProtocol)?] = []\n    var dXSomeStubWithSomeNameProtocolVoidClosure: (((any StubWithSomeNameProtocol)?) -> Void)?\n\n    func d(_ x: (some StubWithSomeNameProtocol)?) {\n        dXSomeStubWithSomeNameProtocolVoidCallsCount += 1\n        dXSomeStubWithSomeNameProtocolVoidReceivedX = x\n        dXSomeStubWithSomeNameProtocolVoidReceivedInvocations.append(x)\n        dXSomeStubWithSomeNameProtocolVoidClosure?(x)\n    }\n\n\n}\nclass StaticMethodProtocolMock: StaticMethodProtocol {\n\n\n\n    static func reset()\n    {\n         //MARK: - staticFunction\n        staticFunctionStringStringCallsCount = 0\n        staticFunctionStringStringReceived = nil\n        staticFunctionStringStringReceivedInvocations = []\n        staticFunctionStringStringClosure = nil\n\n\n    }\n\n    //MARK: - staticFunction\n\n    static var staticFunctionStringStringCallsCount = 0\n    static var staticFunctionStringStringCalled: Bool {\n        return staticFunctionStringStringCallsCount > 0\n    }\n    static var staticFunctionStringStringReceived: (String)?\n    static var staticFunctionStringStringReceivedInvocations: [(String)] = []\n    static var staticFunctionStringStringReturnValue: String!\n    static var staticFunctionStringStringClosure: ((String) -> String)?\n\n    static func staticFunction(_ arg0: String) -> String {\n        staticFunctionStringStringCallsCount += 1\n        staticFunctionStringStringReceived = arg0\n        staticFunctionStringStringReceivedInvocations.append(arg0)\n        if let staticFunctionStringStringClosure = staticFunctionStringStringClosure {\n            return staticFunctionStringStringClosure(arg0)\n        } else {\n            return staticFunctionStringStringReturnValue\n        }\n    }\n\n\n}\nclass SubscriptProtocolMock: SubscriptProtocol {\n\n\n\n\n\n    //MARK: - Subscript #1\n    subscript(arg: Int) -> String {\n        get { fatalError(\"Subscripts are not fully supported yet\") }\n        set { fatalError(\"Subscripts are not fully supported yet\") }\n    }\n    //MARK: - Subscript #2\n    subscript<T>(arg: T) -> Int {\n        get { fatalError(\"Subscripts are not fully supported yet\") }\n    }\n    //MARK: - Subscript #3\n    subscript<T>(arg: T) -> String {\n        get async { fatalError(\"Subscripts are not fully supported yet\") }\n    }\n    //MARK: - Subscript #4\n    subscript<T: Hashable>(arg: T) -> T? {\n        get { fatalError(\"Subscripts are not fully supported yet\") }\n        set { fatalError(\"Subscripts are not fully supported yet\") }\n    }\n    //MARK: - Subscript #5\n    subscript<T>(arg: String) -> T? where T : Cancellable {\n        get throws { fatalError(\"Subscripts are not fully supported yet\") }\n    }\n    //MARK: - Subscript #6\n    subscript<T>(arg2: String) -> T {\n        get throws(CustomError) { fatalError(\"Subscripts are not fully supported yet\") }\n    }\n}\nclass TestProtocolMock<\n    Value: Sequence,\n    Value3: Collection,\n    Value5: Sequence,\n    Value6: Sequence>: TestProtocol\n    where Value.Element : Collection,Value.Element : Hashable,Value.Element : Comparable,Value3.Element == String,Value5.Element == Int,Value6.Element == Int,Value6.Element : Hashable,Value6.Element : Comparable {\n    typealias Value2 = Int\n\n\n\n\n    //MARK: - getValue\n\n    var getValueSequenceCallsCount = 0\n    var getValueSequenceCalled: Bool {\n        return getValueSequenceCallsCount > 0\n    }\n    var getValueSequenceReturnValue: Value!\n    var getValueSequenceClosure: (() -> Value)?\n\n    func getValue() -> Value {\n        getValueSequenceCallsCount += 1\n        if let getValueSequenceClosure = getValueSequenceClosure {\n            return getValueSequenceClosure()\n        } else {\n            return getValueSequenceReturnValue\n        }\n    }\n\n    //MARK: - getValue2\n\n    var getValue2Value2CallsCount = 0\n    var getValue2Value2Called: Bool {\n        return getValue2Value2CallsCount > 0\n    }\n    var getValue2Value2ReturnValue: Value2!\n    var getValue2Value2Closure: (() -> Value2)?\n\n    func getValue2() -> Value2 {\n        getValue2Value2CallsCount += 1\n        if let getValue2Value2Closure = getValue2Value2Closure {\n            return getValue2Value2Closure()\n        } else {\n            return getValue2Value2ReturnValue\n        }\n    }\n\n    //MARK: - getValue3\n\n    var getValue3CollectionCallsCount = 0\n    var getValue3CollectionCalled: Bool {\n        return getValue3CollectionCallsCount > 0\n    }\n    var getValue3CollectionReturnValue: Value3!\n    var getValue3CollectionClosure: (() -> Value3)?\n\n    func getValue3() -> Value3 {\n        getValue3CollectionCallsCount += 1\n        if let getValue3CollectionClosure = getValue3CollectionClosure {\n            return getValue3CollectionClosure()\n        } else {\n            return getValue3CollectionReturnValue\n        }\n    }\n\n    //MARK: - getValue5\n\n    var getValue5SequenceCallsCount = 0\n    var getValue5SequenceCalled: Bool {\n        return getValue5SequenceCallsCount > 0\n    }\n    var getValue5SequenceReturnValue: Value5!\n    var getValue5SequenceClosure: (() -> Value5)?\n\n    func getValue5() -> Value5 {\n        getValue5SequenceCallsCount += 1\n        if let getValue5SequenceClosure = getValue5SequenceClosure {\n            return getValue5SequenceClosure()\n        } else {\n            return getValue5SequenceReturnValue\n        }\n    }\n\n    //MARK: - getValue6\n\n    var getValue6SequenceCallsCount = 0\n    var getValue6SequenceCalled: Bool {\n        return getValue6SequenceCallsCount > 0\n    }\n    var getValue6SequenceReturnValue: Value6!\n    var getValue6SequenceClosure: (() -> Value6)?\n\n    func getValue6() -> Value6 {\n        getValue6SequenceCallsCount += 1\n        if let getValue6SequenceClosure = getValue6SequenceClosure {\n            return getValue6SequenceClosure()\n        } else {\n            return getValue6SequenceReturnValue\n        }\n    }\n\n\n}\nclass ThrowableProtocolMock: ThrowableProtocol {\n\n\n\n\n    //MARK: - doOrThrow\n\n    var doOrThrowStringThrowableError: (any Error)?\n    var doOrThrowStringCallsCount = 0\n    var doOrThrowStringCalled: Bool {\n        return doOrThrowStringCallsCount > 0\n    }\n    var doOrThrowStringReturnValue: String!\n    var doOrThrowStringClosure: (() throws -> String)?\n\n    func doOrThrow() throws -> String {\n        doOrThrowStringCallsCount += 1\n        if let error = doOrThrowStringThrowableError {\n            throw error\n        }\n        if let doOrThrowStringClosure = doOrThrowStringClosure {\n            return try doOrThrowStringClosure()\n        } else {\n            return doOrThrowStringReturnValue\n        }\n    }\n\n    //MARK: - doOrThrowVoid\n\n    var doOrThrowVoidVoidThrowableError: (any Error)?\n    var doOrThrowVoidVoidCallsCount = 0\n    var doOrThrowVoidVoidCalled: Bool {\n        return doOrThrowVoidVoidCallsCount > 0\n    }\n    var doOrThrowVoidVoidClosure: (() throws -> Void)?\n\n    func doOrThrowVoid() throws {\n        doOrThrowVoidVoidCallsCount += 1\n        if let error = doOrThrowVoidVoidThrowableError {\n            throw error\n        }\n        try doOrThrowVoidVoidClosure?()\n    }\n\n\n}\nclass ThrowingVariablesProtocolMock: ThrowingVariablesProtocol {\n\n\n    var titleCallsCount = 0\n    var titleCalled: Bool {\n        return titleCallsCount > 0\n    }\n\n    var title: String? {\n        get throws {\n            titleCallsCount += 1\n            if let error = titleThrowableError {\n                throw error\n            }\n            if let titleClosure = titleClosure {\n                return try titleClosure()\n            } else {\n                return underlyingTitle\n            }\n        }\n    }\n    var underlyingTitle: String?\n    var titleThrowableError: Error?\n    var titleClosure: (() throws -> String?)?\n    var firstNameCallsCount = 0\n    var firstNameCalled: Bool {\n        return firstNameCallsCount > 0\n    }\n\n    var firstName: String {\n        get throws {\n            firstNameCallsCount += 1\n            if let error = firstNameThrowableError {\n                throw error\n            }\n            if let firstNameClosure = firstNameClosure {\n                return try firstNameClosure()\n            } else {\n                return underlyingFirstName\n            }\n        }\n    }\n    var underlyingFirstName: String!\n    var firstNameThrowableError: Error?\n    var firstNameClosure: (() throws -> String)?\n\n\n\n}\nclass TypedThrowableProtocolMock: TypedThrowableProtocol {\n\n\n    var valueCallsCount = 0\n    var valueCalled: Bool {\n        return valueCallsCount > 0\n    }\n\n    var value: Int {\n        get throws(CustomError) {\n            valueCallsCount += 1\n            if let error = valueThrowableError {\n                throw error\n            }\n            if let valueClosure = valueClosure {\n                return try valueClosure()\n            } else {\n                return underlyingValue\n            }\n        }\n    }\n    var underlyingValue: Int!\n    var valueThrowableError: (CustomError)?\n    var valueClosure: (() throws(CustomError) -> Int)?\n    var valueAnyErrorCallsCount = 0\n    var valueAnyErrorCalled: Bool {\n        return valueAnyErrorCallsCount > 0\n    }\n\n    var valueAnyError: Int {\n        get throws(any Error) {\n            valueAnyErrorCallsCount += 1\n            if let error = valueAnyErrorThrowableError {\n                throw error\n            }\n            if let valueAnyErrorClosure = valueAnyErrorClosure {\n                return try valueAnyErrorClosure()\n            } else {\n                return underlyingValueAnyError\n            }\n        }\n    }\n    var underlyingValueAnyError: Int!\n    var valueAnyErrorThrowableError: (any Error)?\n    var valueAnyErrorClosure: (() throws(any Error) -> Int)?\n    var valueThrowsNever: Int {\n        get { return underlyingValueThrowsNever }\n        set(value) { underlyingValueThrowsNever = value }\n    }\n    var underlyingValueThrowsNever: (Int)!\n\n\n    //MARK: - init\n\n    var initTypedThrowableProtocolThrowableError: (CustomError)?\n    var initTypedThrowableProtocolClosure: (() throws(CustomError) -> Void)?\n\n    required init() {\n        initTypedThrowableProtocolClosure?()\n    }\n    //MARK: - init<E>\n\n\n    required init<E>(init2: Void) {\n        fatalError(\"Generic typed throws in inits are not fully supported yet\")\n    }\n    //MARK: - doOrThrow\n\n    var doOrThrowStringThrowableError: (CustomError)?\n    var doOrThrowStringCallsCount = 0\n    var doOrThrowStringCalled: Bool {\n        return doOrThrowStringCallsCount > 0\n    }\n    var doOrThrowStringReturnValue: String!\n    var doOrThrowStringClosure: (() throws(CustomError) -> String)?\n\n    func doOrThrow() throws(CustomError) -> String {\n        doOrThrowStringCallsCount += 1\n        if let error = doOrThrowStringThrowableError {\n            throw error\n        }\n        if let doOrThrowStringClosure = doOrThrowStringClosure {\n            return try doOrThrowStringClosure()\n        } else {\n            return doOrThrowStringReturnValue\n        }\n    }\n\n    //MARK: - doOrThrowAnyError\n\n    var doOrThrowAnyErrorVoidThrowableError: (any Error)?\n    var doOrThrowAnyErrorVoidCallsCount = 0\n    var doOrThrowAnyErrorVoidCalled: Bool {\n        return doOrThrowAnyErrorVoidCallsCount > 0\n    }\n    var doOrThrowAnyErrorVoidClosure: (() throws(any Error) -> Void)?\n\n    func doOrThrowAnyError() throws(any Error) {\n        doOrThrowAnyErrorVoidCallsCount += 1\n        if let error = doOrThrowAnyErrorVoidThrowableError {\n            throw error\n        }\n        try doOrThrowAnyErrorVoidClosure?()\n    }\n\n    //MARK: - doOrThrowNever\n\n    var doOrThrowNeverVoidCallsCount = 0\n    var doOrThrowNeverVoidCalled: Bool {\n        return doOrThrowNeverVoidCallsCount > 0\n    }\n    var doOrThrowNeverVoidClosure: (() -> Void)?\n\n    func doOrThrowNever() {\n        doOrThrowNeverVoidCallsCount += 1\n        doOrThrowNeverVoidClosure?()\n    }\n\n    //MARK: - doOrRethrows<E>\n\n\n    func doOrRethrows<E>(_ block: () throws(E) -> Void) throws(E) -> Int where E: Error {\n        fatalError(\"Generic typed throws are not fully supported yet\")\n    }\n\n\n}\nclass VariablesProtocolMock: VariablesProtocol {\n\n\n    var company: String?\n    var name: String {\n        get { return underlyingName }\n        set(value) { underlyingName = value }\n    }\n    var underlyingName: (String)!\n    var age: Int {\n        get { return underlyingAge }\n        set(value) { underlyingAge = value }\n    }\n    var underlyingAge: (Int)!\n    var kids: [String] = []\n    var universityMarks: [String: Int] = [:]\n\n\n\n}\n"
  },
  {
    "path": "Templates/Tests/Expected/LinuxMain.expected",
    "content": "import XCTest\n\nextension AutoInjectionTests {\n  static var allTests: [(String, (AutoInjectionTests) -> () throws -> Void)] = [\n    (\"testThatItResolvesAutoInjectedDependencies\", testThatItResolvesAutoInjectedDependencies),\n    (\"testThatItDoesntResolveAutoInjectedDependencies\", testThatItDoesntResolveAutoInjectedDependencies)\n  ]\n}\nextension AutoWiringTests {\n  static var allTests: [(String, (AutoWiringTests) -> () throws -> Void)] = [\n    (\"testThatItCanResolveWithAutoWiring\", testThatItCanResolveWithAutoWiring),\n    (\"testThatItCanNotResolveWithAutoWiring\", testThatItCanNotResolveWithAutoWiring)\n  ]\n}\n\n// swiftlint:disable trailing_comma\nXCTMain([\n  testCase(AutoInjectionTests.allTests),\n  testCase(AutoWiringTests.allTests),\n])\n// swiftlint:enable trailing_comma\n"
  },
  {
    "path": "Templates/Tests/Generated/AutoCases.generated.swift",
    "content": "// Generated using Sourcery 1.3.0 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n\ninternal extension AutoCasesEnum {\n  static let count: Int = 4\n  static let allCases: [AutoCasesEnum] = [\n    .north,\n    .south,\n    .east,\n    .west\n  ]\n}\npublic extension AutoCasesHasAssociatedValuesEnum {\n  static let count: Int = 2\n}\ninternal extension AutoCasesOneValueEnum {\n  static let count: Int = 1\n  static let allCases: [AutoCasesOneValueEnum] = [\n    .one\n  ]\n}\n"
  },
  {
    "path": "Templates/Tests/Generated/AutoCodable.generated.swift",
    "content": "// Generated using Sourcery 1.3.0 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n\n#if canImport(ObjectiveC)\nextension AssociatedValuesEnum {\n\n    internal init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n\n        let enumCase = try container.decode(String.self, forKey: .enumCaseKey)\n        switch enumCase {\n        case CodingKeys.someCase.rawValue:\n            let id = try container.decode(Int.self, forKey: .id)\n            let name = try container.decode(String.self, forKey: .name)\n            self = .someCase(id: id, name: name)\n        case CodingKeys.unnamedCase.rawValue:\n            // Enum cases with unnamed associated values can't be decoded\n            throw DecodingError.dataCorruptedError(forKey: .enumCaseKey, in: container, debugDescription: \"Can't decode '\\(enumCase)'\")\n        case CodingKeys.mixCase.rawValue:\n            // Enum cases with mixed named and unnamed associated values can't be decoded\n            throw DecodingError.dataCorruptedError(forKey: .enumCaseKey, in: container, debugDescription: \"Can't decode '\\(enumCase)'\")\n        case CodingKeys.anotherCase.rawValue:\n            self = .anotherCase\n        default:\n            throw DecodingError.dataCorruptedError(forKey: .enumCaseKey, in: container, debugDescription: \"Unknown enum case '\\(enumCase)'\")\n        }\n    }\n\n    internal func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n\n        switch self {\n        case let .someCase(id, name):\n            try container.encode(CodingKeys.someCase.rawValue, forKey: .enumCaseKey)\n            try container.encode(id, forKey: .id)\n            try container.encode(name, forKey: .name)\n        case .unnamedCase:\n            // Enum cases with unnamed associated values can't be encoded\n            throw EncodingError.invalidValue(self, .init(codingPath: encoder.codingPath, debugDescription: \"Can't encode '\\(self)'\"))\n        case .mixCase:\n            // Enum cases with mixed named and unnamed associated values can't be encoded\n            throw EncodingError.invalidValue(self, .init(codingPath: encoder.codingPath, debugDescription: \"Can't encode '\\(self)'\"))\n        case .anotherCase:\n            try container.encode(CodingKeys.anotherCase.rawValue, forKey: .enumCaseKey)\n        }\n    }\n\n}\n\nextension AssociatedValuesEnumNoCaseKey {\n\n    enum CodingKeys: String, CodingKey {\n        case someCase\n        case unnamedCase\n        case mixCase\n        case anotherCase\n        case id\n        case name\n    }\n\n    internal init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n\n        if container.allKeys.contains(.someCase), try container.decodeNil(forKey: .someCase) == false {\n            let associatedValues = try container.nestedContainer(keyedBy: CodingKeys.self, forKey: .someCase)\n            let id = try associatedValues.decode(Int.self, forKey: .id)\n            let name = try associatedValues.decode(String.self, forKey: .name)\n            self = .someCase(id: id, name: name)\n            return\n        }\n        if container.allKeys.contains(.unnamedCase), try container.decodeNil(forKey: .unnamedCase) == false {\n            var associatedValues = try container.nestedUnkeyedContainer(forKey: .unnamedCase)\n            let associatedValue0 = try associatedValues.decode(Int.self)\n            let associatedValue1 = try associatedValues.decode(String.self)\n            self = .unnamedCase(associatedValue0, associatedValue1)\n            return\n        }\n        if container.allKeys.contains(.mixCase), try container.decodeNil(forKey: .mixCase) == false {\n            // Enum cases with mixed named and unnamed associated values can't be decoded\n            throw DecodingError.dataCorruptedError(forKey: .mixCase, in: container, debugDescription: \"Can't decode `.mixCase`\")\n        }\n        if container.allKeys.contains(.anotherCase), try container.decodeNil(forKey: .anotherCase) == false {\n            self = .anotherCase\n            return\n        }\n        throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: \"Unknown enum case\"))\n    }\n\n    internal func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n\n        switch self {\n        case let .someCase(id, name):\n            var associatedValues = container.nestedContainer(keyedBy: CodingKeys.self, forKey: .someCase)\n            try associatedValues.encode(id, forKey: .id)\n            try associatedValues.encode(name, forKey: .name)\n        case let .unnamedCase(associatedValue0, associatedValue1):\n            var associatedValues = container.nestedUnkeyedContainer(forKey: .unnamedCase)\n            try associatedValues.encode(associatedValue0)\n            try associatedValues.encode(associatedValue1)\n        case .mixCase:\n            // Enum cases with mixed named and unnamed associated values can't be encoded\n            throw EncodingError.invalidValue(self, .init(codingPath: encoder.codingPath, debugDescription: \"Can't encode '\\(self)'\"))\n        case .anotherCase:\n            _ = container.nestedContainer(keyedBy: CodingKeys.self, forKey: .anotherCase)\n        }\n    }\n\n}\n\nextension CustomCodingWithNotAllDefinedKeys {\n\n    internal init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n\n        value = try container.decode(Int.self, forKey: .value)\n    }\n\n    internal func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n\n        try container.encode(value, forKey: .value)\n        encodeComputedValue(to: &container)\n    }\n\n}\n\nextension CustomContainerCodable {\n\n    public init(from decoder: Decoder) throws {\n        let container = try CustomContainerCodable.decodingContainer(decoder)\n\n        value = try container.decode(Int.self, forKey: .value)\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encodingContainer(encoder)\n\n        try container.encode(value, forKey: .value)\n    }\n\n}\n\n\nextension CustomMethodsCodable {\n\n    enum CodingKeys: String, CodingKey {\n        case boolValue\n        case intValue\n        case optionalString\n        case requiredString\n        case requiredStringWithDefault\n        case computedPropertyToEncode\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n\n        boolValue = try CustomMethodsCodable.decodeBoolValue(from: decoder)\n        intValue = CustomMethodsCodable.decodeIntValue(from: container) ?? CustomMethodsCodable.defaultIntValue\n        optionalString = try container.decodeIfPresent(String.self, forKey: .optionalString)\n        requiredString = try container.decode(String.self, forKey: .requiredString)\n        requiredStringWithDefault = (try? container.decode(String.self, forKey: .requiredStringWithDefault)) ?? CustomMethodsCodable.defaultRequiredStringWithDefault\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n\n        try encodeBoolValue(to: encoder)\n        encodeIntValue(to: &container)\n        try container.encodeIfPresent(optionalString, forKey: .optionalString)\n        try container.encode(requiredString, forKey: .requiredString)\n        try container.encode(requiredStringWithDefault, forKey: .requiredStringWithDefault)\n        encodeComputedPropertyToEncode(to: &container)\n        try encodeAdditionalValues(to: encoder)\n    }\n\n}\n\nextension SimpleEnum {\n\n    enum CodingKeys: String, CodingKey {\n        case someCase\n        case anotherCase\n    }\n\n    internal init(from decoder: Decoder) throws {\n        let container = try decoder.singleValueContainer()\n\n        let enumCase = try container.decode(String.self)\n        switch enumCase {\n        case CodingKeys.someCase.rawValue: self = .someCase\n        case CodingKeys.anotherCase.rawValue: self = .anotherCase\n        default: throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: \"Unknown enum case '\\(enumCase)'\"))\n        }\n    }\n\n    internal func encode(to encoder: Encoder) throws {\n        var container = encoder.singleValueContainer()\n\n        switch self {\n        case .someCase: try container.encode(CodingKeys.someCase.rawValue)\n        case .anotherCase: try container.encode(CodingKeys.anotherCase.rawValue)\n        }\n    }\n\n}\n\nextension SkipDecodingWithDefaultValueOrComputedProperty {\n\n    internal init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n\n        value = try container.decode(Int.self, forKey: .value)\n    }\n\n    internal func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n\n        try container.encode(value, forKey: .value)\n        try container.encode(computedValue, forKey: .computedValue)\n    }\n\n}\n\nextension SkipEncodingKeys {\n\n    enum CodingKeys: String, CodingKey {\n        case value\n        case skipValue\n    }\n\n    internal func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n\n        try container.encode(value, forKey: .value)\n    }\n\n}\n#endif\n"
  },
  {
    "path": "Templates/Tests/Generated/AutoEquatable.generated.swift",
    "content": "// Generated using Sourcery 1.3.0 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable file_length\nfileprivate func compareOptionals<T>(lhs: T?, rhs: T?, compare: (_ lhs: T, _ rhs: T) -> Bool) -> Bool {\n    switch (lhs, rhs) {\n    case let (lValue?, rValue?):\n        return compare(lValue, rValue)\n    case (nil, nil):\n        return true\n    default:\n        return false\n    }\n}\n\nfileprivate func compareArrays<T>(lhs: [T], rhs: [T], compare: (_ lhs: T, _ rhs: T) -> Bool) -> Bool {\n    guard lhs.count == rhs.count else { return false }\n    for (idx, lhsItem) in lhs.enumerated() {\n        guard compare(lhsItem, rhs[idx]) else { return false }\n    }\n\n    return true\n}\n\n\n// MARK: - AutoEquatable for classes, protocols, structs\n// MARK: - AutoEquatableAnnotatedClass AutoEquatable\nextension AutoEquatableAnnotatedClass: Equatable {}\ninternal func == (lhs: AutoEquatableAnnotatedClass, rhs: AutoEquatableAnnotatedClass) -> Bool {\n    guard lhs.moneyInThePocket == rhs.moneyInThePocket else { return false }\n    return true\n}\n// MARK: - AutoEquatableAnnotatedClassAnnotatedInherited AutoEquatable\nextension AutoEquatableAnnotatedClassAnnotatedInherited: Equatable {}\nTHIS WONT COMPILE, WE DONT SUPPORT INHERITANCE for AutoEquatable\ninternal func == (lhs: AutoEquatableAnnotatedClassAnnotatedInherited, rhs: AutoEquatableAnnotatedClassAnnotatedInherited) -> Bool {\n    guard lhs.middleName == rhs.middleName else { return false }\n    return true\n}\n// MARK: - AutoEquatableClass AutoEquatable\nextension AutoEquatableClass: Equatable {}\ninternal func == (lhs: AutoEquatableClass, rhs: AutoEquatableClass) -> Bool {\n    guard lhs.firstName == rhs.firstName else { return false }\n    guard lhs.lastName == rhs.lastName else { return false }\n    guard compareArrays(lhs: lhs.parents, rhs: rhs.parents, compare: ==) else { return false }\n    guard compareOptionals(lhs: lhs.age, rhs: rhs.age, compare: ==) else { return false }\n    guard lhs.moneyInThePocket == rhs.moneyInThePocket else { return false }\n    guard compareOptionals(lhs: lhs.friends, rhs: rhs.friends, compare: ==) else { return false }\n    return true\n}\n// MARK: - AutoEquatableClassInherited AutoEquatable\nextension AutoEquatableClassInherited: Equatable {}\nTHIS WONT COMPILE, WE DONT SUPPORT INHERITANCE for AutoEquatable\ninternal func == (lhs: AutoEquatableClassInherited, rhs: AutoEquatableClassInherited) -> Bool {\n    guard compareOptionals(lhs: lhs.middleName, rhs: rhs.middleName, compare: ==) else { return false }\n    return true\n}\n// MARK: - AutoEquatableNSObject AutoEquatable\ninternal func == (lhs: AutoEquatableNSObject, rhs: AutoEquatableNSObject) -> Bool {\n    guard lhs.firstName == rhs.firstName else { return false }\n    return true\n}\n// MARK: - AutoEquatableProtocol AutoEquatable\ninternal func == (lhs: AutoEquatableProtocol, rhs: AutoEquatableProtocol) -> Bool {\n    guard lhs.width == rhs.width else { return false }\n    guard lhs.height == rhs.height else { return false }\n    guard lhs.name == rhs.name else { return false }\n    return true\n}\n// MARK: - AutoEquatableStruct AutoEquatable\nextension AutoEquatableStruct: Equatable {}\ninternal func == (lhs: AutoEquatableStruct, rhs: AutoEquatableStruct) -> Bool {\n    guard lhs.firstName == rhs.firstName else { return false }\n    guard lhs.lastName == rhs.lastName else { return false }\n    guard compareArrays(lhs: lhs.parents, rhs: rhs.parents, compare: ==) else { return false }\n    guard lhs.moneyInThePocket == rhs.moneyInThePocket else { return false }\n    guard compareOptionals(lhs: lhs.friends, rhs: rhs.friends, compare: ==) else { return false }\n    guard compareOptionals(lhs: lhs.age, rhs: rhs.age, compare: ==) else { return false }\n    return true\n}\n\n// MARK: - AutoEquatable for Enums\n// MARK: - AutoEquatableEnum AutoEquatable\nextension AutoEquatableEnum: Equatable {}\ninternal func == (lhs: AutoEquatableEnum, rhs: AutoEquatableEnum) -> Bool {\n    switch (lhs, rhs) {\n    case (.one, .one):\n        return true\n    case let (.two(lhsFirst, lhsSecond), .two(rhsFirst, rhsSecond)):\n        if lhsFirst != rhsFirst { return false }\n        if lhsSecond != rhsSecond { return false }\n        return true\n    case let (.three(lhs), .three(rhs)):\n        return lhs == rhs\n    default: return false\n    }\n}\n// MARK: - AutoEquatableEnumWithOneCase AutoEquatable\nextension AutoEquatableEnumWithOneCase: Equatable {}\ninternal func == (lhs: AutoEquatableEnumWithOneCase, rhs: AutoEquatableEnumWithOneCase) -> Bool {\n    switch (lhs, rhs) {\n    case (.one, .one):\n        return true\n    }\n}\n"
  },
  {
    "path": "Templates/Tests/Generated/AutoHashable.generated.swift",
    "content": "// Generated using Sourcery 1.3.0 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable all\n\n\n// MARK: - AutoHashable for classes, protocols, structs\n// MARK: - AutoHashableClass AutoHashable\nextension AutoHashableClass: Hashable {\n    internal func hash(into hasher: inout Hasher) {\n        firstName.hash(into: &hasher)\n        lastName.hash(into: &hasher)\n        parents.hash(into: &hasher)\n        universityGrades.hash(into: &hasher)\n        moneyInThePocket.hash(into: &hasher)\n        age.hash(into: &hasher)\n        friends.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableClassFromNonHashableInherited AutoHashable\nextension AutoHashableClassFromNonHashableInherited: Hashable {\n    internal func hash(into hasher: inout Hasher) {\n        lastName.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableClassFromNonHashableInheritedInherited AutoHashable\nextension AutoHashableClassFromNonHashableInheritedInherited: Hashable {\n    internal override func hash(into hasher: inout Hasher) {\n        super.hash(into: hasher)\n        prefix.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableClassInherited AutoHashable\nextension AutoHashableClassInherited: Hashable {\n    internal override func hash(into hasher: inout Hasher) {\n        super.hash(into: hasher)\n        middleName.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableClassInheritedInherited AutoHashable\nextension AutoHashableClassInheritedInherited: Hashable {\n    internal override func hash(into hasher: inout Hasher) {\n        super.hash(into: hasher)\n        prefix.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableFromHashableInherited AutoHashable\nextension AutoHashableFromHashableInherited: Hashable {\n    internal override func hash(into hasher: inout Hasher) {\n        super.hash(into: hasher)\n        lastName.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableNSObject AutoHashable\nextension AutoHashableNSObject {\n    internal override func hash(into hasher: inout Hasher) {\n        super.hash(into: hasher)\n        firstName.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableNSObjectInherited AutoHashable\nextension AutoHashableNSObjectInherited {\n    internal override func hash(into hasher: inout Hasher) {\n        super.hash(into: hasher)\n        lastName.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableProtocol AutoHashable\nextension AutoHashableProtocol {\n    internal func hash(into hasher: inout Hasher) {\n        width.hash(into: &hasher)\n        height.hash(into: &hasher)\n        type(of: self).name.hash(into: &hasher)\n    }\n}\n// MARK: - AutoHashableStruct AutoHashable\nextension AutoHashableStruct: Hashable {\n    internal func hash(into hasher: inout Hasher) {\n        firstName.hash(into: &hasher)\n        lastName.hash(into: &hasher)\n        parents.hash(into: &hasher)\n        universityGrades.hash(into: &hasher)\n        moneyInThePocket.hash(into: &hasher)\n        age.hash(into: &hasher)\n        friends.hash(into: &hasher)\n    }\n}\n\n// MARK: - AutoHashable for Enums\n\n// MARK: - AutoHashableEnum AutoHashable\nextension AutoHashableEnum: Hashable {\n    internal func hash(into hasher: inout Hasher) {\n        switch self {\n        case .one:\n            1.hash(into: &hasher)\n        case let .two(first, second):\n            2.hash(into: &hasher)\n            first.hash(into: &hasher)\n            second.hash(into: &hasher)\n        case let .three(data):\n            3.hash(into: &hasher)\n            data.hash(into: &hasher)\n        }\n    }\n}\n"
  },
  {
    "path": "Templates/Tests/Generated/AutoLenses.generated.swift",
    "content": "// Generated using Sourcery 1.3.0 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable variable_name\ninfix operator *~: MultiplicationPrecedence\ninfix operator |>: AdditionPrecedence\n\nstruct Lens<Whole, Part> {\n    let get: (Whole) -> Part\n    let set: (Part, Whole) -> Whole\n}\n\nfunc * <A, B, C> (lhs: Lens<A, B>, rhs: Lens<B, C>) -> Lens<A, C> {\n    return Lens<A, C>(\n        get: { a in rhs.get(lhs.get(a)) },\n        set: { (c, a) in lhs.set(rhs.set(c, lhs.get(a)), a) }\n    )\n}\n\nfunc *~ <A, B> (lhs: Lens<A, B>, rhs: B) -> (A) -> A {\n    return { a in lhs.set(rhs, a) }\n}\n\nfunc |> <A, B> (x: A, f: (A) -> B) -> B {\n    return f(x)\n}\n\nfunc |> <A, B, C> (f: @escaping (A) -> B, g: @escaping (B) -> C) -> (A) -> C {\n    return { g(f($0)) }\n}\n\nextension House {\n  static let roomsLens = Lens<House, Room>(\n    get: { $0.rooms },\n    set: { rooms, house in\n       House(rooms: rooms, address: house.address, size: house.size)\n    }\n  )\n  static let addressLens = Lens<House, String>(\n    get: { $0.address },\n    set: { address, house in\n       House(rooms: house.rooms, address: address, size: house.size)\n    }\n  )\n  static let sizeLens = Lens<House, Int>(\n    get: { $0.size },\n    set: { size, house in\n       House(rooms: house.rooms, address: house.address, size: size)\n    }\n  )\n}\nextension Person {\n  static let nameLens = Lens<Person, String>(\n    get: { $0.name },\n    set: { name, person in\n       Person(name: name)\n    }\n  )\n}\nextension Rectangle {\n  static let xLens = Lens<Rectangle, Int>(\n    get: { $0.x },\n    set: { x, rectangle in\n       Rectangle(x: x, y: rectangle.y)\n    }\n  )\n  static let yLens = Lens<Rectangle, Int>(\n    get: { $0.y },\n    set: { y, rectangle in\n       Rectangle(x: rectangle.x, y: y)\n    }\n  )\n}\nextension Room {\n  static let peopleLens = Lens<Room, [Person]>(\n    get: { $0.people },\n    set: { people, room in\n       Room(people: people, name: room.name)\n    }\n  )\n  static let nameLens = Lens<Room, String>(\n    get: { $0.name },\n    set: { name, room in\n       Room(people: room.people, name: name)\n    }\n  )\n}\n"
  },
  {
    "path": "Templates/Tests/Generated/AutoMockable.generated.swift",
    "content": "// Generated using Sourcery 2.2.7 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n// swiftlint:disable line_length\n// swiftlint:disable variable_name\n\nimport Foundation\n#if os(iOS) || os(tvOS) || os(watchOS)\nimport UIKit\n#elseif os(OSX)\nimport AppKit\n#endif\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\npublic class AccessLevelProtocolMock: AccessLevelProtocol {\n\n    public init() {}\n\n    public var company: String?\n    public var name: String {\n        get { return underlyingName }\n        set(value) { underlyingName = value }\n    }\n    public var underlyingName: (String)!\n\n\n    //MARK: - loadConfiguration\n\n    public var loadConfigurationStringCallsCount = 0\n    public var loadConfigurationStringCalled: Bool {\n        return loadConfigurationStringCallsCount > 0\n    }\n    public var loadConfigurationStringReturnValue: String?\n    public var loadConfigurationStringClosure: (() -> String?)?\n\n    public func loadConfiguration() -> String? {\n        loadConfigurationStringCallsCount += 1\n        if let loadConfigurationStringClosure = loadConfigurationStringClosure {\n            return loadConfigurationStringClosure()\n        } else {\n            return loadConfigurationStringReturnValue\n        }\n    }\n\n\n}\nclass AnnotatedProtocolMock: AnnotatedProtocol {\n\n\n\n\n    //MARK: - sayHelloWith\n\n    var sayHelloWithNameStringVoidCallsCount = 0\n    var sayHelloWithNameStringVoidCalled: Bool {\n        return sayHelloWithNameStringVoidCallsCount > 0\n    }\n    var sayHelloWithNameStringVoidReceivedName: (String)?\n    var sayHelloWithNameStringVoidReceivedInvocations: [(String)] = []\n    var sayHelloWithNameStringVoidClosure: ((String) -> Void)?\n\n    func sayHelloWith(name: String) {\n        sayHelloWithNameStringVoidCallsCount += 1\n        sayHelloWithNameStringVoidReceivedName = name\n        sayHelloWithNameStringVoidReceivedInvocations.append(name)\n        sayHelloWithNameStringVoidClosure?(name)\n    }\n\n\n}\nclass AnyProtocolMock: AnyProtocol {\n\n\n    var a: any StubProtocol {\n        get { return underlyingA }\n        set(value) { underlyingA = value }\n    }\n    var underlyingA: (any StubProtocol)!\n    var b: (any StubProtocol)?\n    var c: (any StubProtocol)!\n    var d: (((any StubProtocol)?) -> Void) {\n        get { return underlyingD }\n        set(value) { underlyingD = value }\n    }\n    var underlyingD: ((((any StubProtocol)?) -> Void))!\n    var e: [(any StubProtocol)?] = []\n    var g: any StubProtocol {\n        get { return underlyingG }\n        set(value) { underlyingG = value }\n    }\n    var underlyingG: (any StubProtocol)!\n    var h: (any StubProtocol)?\n    var i: (any StubProtocol)!\n    var anyConfusingPropertyName: any StubProtocol {\n        get { return underlyingAnyConfusingPropertyName }\n        set(value) { underlyingAnyConfusingPropertyName = value }\n    }\n    var underlyingAnyConfusingPropertyName: (any StubProtocol)!\n    var o: any StubWithAnyNameProtocol {\n        get { return underlyingO }\n        set(value) { underlyingO = value }\n    }\n    var underlyingO: (any StubWithAnyNameProtocol)!\n\n\n    //MARK: - f\n\n    var fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidCallsCount = 0\n    var fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidCalled: Bool {\n        return fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidCallsCount > 0\n    }\n    var fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidReceivedArguments: (x: (any StubProtocol)?, y: (any StubProtocol)?, z: any StubProtocol)?\n    var fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidReceivedInvocations: [(x: (any StubProtocol)?, y: (any StubProtocol)?, z: any StubProtocol)] = []\n    var fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidClosure: (((any StubProtocol)?, (any StubProtocol)?, any StubProtocol) -> Void)?\n\n    func f(_ x: (any StubProtocol)?, y: (any StubProtocol)!, z: any StubProtocol) {\n        fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidCallsCount += 1\n        fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidReceivedArguments = (x: x, y: y, z: z)\n        fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidReceivedInvocations.append((x: x, y: y, z: z))\n        fXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolVoidClosure?(x, y, z)\n    }\n\n    //MARK: - j\n\n    var jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringCallsCount = 0\n    var jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringCalled: Bool {\n        return jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringCallsCount > 0\n    }\n    var jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringReceivedArguments: (x: (any StubProtocol)?, y: (any StubProtocol)?, z: any StubProtocol)?\n    var jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringReceivedInvocations: [(x: (any StubProtocol)?, y: (any StubProtocol)?, z: any StubProtocol)] = []\n    var jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringReturnValue: String!\n    var jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringClosure: (((any StubProtocol)?, (any StubProtocol)?, any StubProtocol) async -> String)?\n\n    func j(x: (any StubProtocol)?, y: (any StubProtocol)!, z: any StubProtocol) async -> String {\n        jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringCallsCount += 1\n        jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringReceivedArguments = (x: x, y: y, z: z)\n        jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringReceivedInvocations.append((x: x, y: y, z: z))\n        if let jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringClosure = jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringClosure {\n            return await jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringClosure(x, y, z)\n        } else {\n            return jXAnyStubProtocolYAnyStubProtocolZAnyStubProtocolStringReturnValue\n        }\n    }\n\n    //MARK: - k\n\n    var kXAnyStubProtocolVoidYAnyStubProtocolVoidVoidCallsCount = 0\n    var kXAnyStubProtocolVoidYAnyStubProtocolVoidVoidCalled: Bool {\n        return kXAnyStubProtocolVoidYAnyStubProtocolVoidVoidCallsCount > 0\n    }\n    var kXAnyStubProtocolVoidYAnyStubProtocolVoidVoidClosure: ((((any StubProtocol)?) -> Void, (any StubProtocol) -> Void) -> Void)?\n\n    func k(x: ((any StubProtocol)?) -> Void, y: (any StubProtocol) -> Void) {\n        kXAnyStubProtocolVoidYAnyStubProtocolVoidVoidCallsCount += 1\n        kXAnyStubProtocolVoidYAnyStubProtocolVoidVoidClosure?(x, y)\n    }\n\n    //MARK: - l\n\n    var lXAnyStubProtocolVoidYAnyStubProtocolVoidVoidCallsCount = 0\n    var lXAnyStubProtocolVoidYAnyStubProtocolVoidVoidCalled: Bool {\n        return lXAnyStubProtocolVoidYAnyStubProtocolVoidVoidCallsCount > 0\n    }\n    var lXAnyStubProtocolVoidYAnyStubProtocolVoidVoidClosure: ((((any StubProtocol)?) -> Void, (any StubProtocol) -> Void) -> Void)?\n\n    func l(x: ((any StubProtocol)?) -> Void, y: (any StubProtocol) -> Void) {\n        lXAnyStubProtocolVoidYAnyStubProtocolVoidVoidCallsCount += 1\n        lXAnyStubProtocolVoidYAnyStubProtocolVoidVoidClosure?(x, y)\n    }\n\n    //MARK: - m\n\n    var mAnyConfusingArgumentNameAnyStubProtocolVoidCallsCount = 0\n    var mAnyConfusingArgumentNameAnyStubProtocolVoidCalled: Bool {\n        return mAnyConfusingArgumentNameAnyStubProtocolVoidCallsCount > 0\n    }\n    var mAnyConfusingArgumentNameAnyStubProtocolVoidReceivedAnyConfusingArgumentName: (any StubProtocol)?\n    var mAnyConfusingArgumentNameAnyStubProtocolVoidReceivedInvocations: [(any StubProtocol)] = []\n    var mAnyConfusingArgumentNameAnyStubProtocolVoidClosure: ((any StubProtocol) -> Void)?\n\n    func m(anyConfusingArgumentName: any StubProtocol) {\n        mAnyConfusingArgumentNameAnyStubProtocolVoidCallsCount += 1\n        mAnyConfusingArgumentNameAnyStubProtocolVoidReceivedAnyConfusingArgumentName = anyConfusingArgumentName\n        mAnyConfusingArgumentNameAnyStubProtocolVoidReceivedInvocations.append(anyConfusingArgumentName)\n        mAnyConfusingArgumentNameAnyStubProtocolVoidClosure?(anyConfusingArgumentName)\n    }\n\n    //MARK: - n\n\n    var nXEscapingAnyStubProtocolVoidVoidCallsCount = 0\n    var nXEscapingAnyStubProtocolVoidVoidCalled: Bool {\n        return nXEscapingAnyStubProtocolVoidVoidCallsCount > 0\n    }\n    var nXEscapingAnyStubProtocolVoidVoidReceivedX: ((((any StubProtocol)?) -> Void))?\n    var nXEscapingAnyStubProtocolVoidVoidReceivedInvocations: [((((any StubProtocol)?) -> Void))] = []\n    var nXEscapingAnyStubProtocolVoidVoidClosure: ((@escaping ((any StubProtocol)?) -> Void) -> Void)?\n\n    func n(x: @escaping ((any StubProtocol)?) -> Void) {\n        nXEscapingAnyStubProtocolVoidVoidCallsCount += 1\n        nXEscapingAnyStubProtocolVoidVoidReceivedX = x\n        nXEscapingAnyStubProtocolVoidVoidReceivedInvocations.append(x)\n        nXEscapingAnyStubProtocolVoidVoidClosure?(x)\n    }\n\n    //MARK: - p\n\n    var pXAnyStubWithAnyNameProtocolVoidCallsCount = 0\n    var pXAnyStubWithAnyNameProtocolVoidCalled: Bool {\n        return pXAnyStubWithAnyNameProtocolVoidCallsCount > 0\n    }\n    var pXAnyStubWithAnyNameProtocolVoidReceivedX: (any StubWithAnyNameProtocol)?\n    var pXAnyStubWithAnyNameProtocolVoidReceivedInvocations: [(any StubWithAnyNameProtocol)?] = []\n    var pXAnyStubWithAnyNameProtocolVoidClosure: (((any StubWithAnyNameProtocol)?) -> Void)?\n\n    func p(_ x: (any StubWithAnyNameProtocol)?) {\n        pXAnyStubWithAnyNameProtocolVoidCallsCount += 1\n        pXAnyStubWithAnyNameProtocolVoidReceivedX = x\n        pXAnyStubWithAnyNameProtocolVoidReceivedInvocations.append(x)\n        pXAnyStubWithAnyNameProtocolVoidClosure?(x)\n    }\n\n    //MARK: - q\n\n    var qAnyStubProtocolCallsCount = 0\n    var qAnyStubProtocolCalled: Bool {\n        return qAnyStubProtocolCallsCount > 0\n    }\n    var qAnyStubProtocolReturnValue: (any StubProtocol)!\n    var qAnyStubProtocolClosure: (() -> any StubProtocol)?\n\n    func q() -> any StubProtocol {\n        qAnyStubProtocolCallsCount += 1\n        if let qAnyStubProtocolClosure = qAnyStubProtocolClosure {\n            return qAnyStubProtocolClosure()\n        } else {\n            return qAnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - r\n\n    var rAnyStubProtocolCallsCount = 0\n    var rAnyStubProtocolCalled: Bool {\n        return rAnyStubProtocolCallsCount > 0\n    }\n    var rAnyStubProtocolReturnValue: ((any StubProtocol)?)\n    var rAnyStubProtocolClosure: (() -> (any StubProtocol)?)?\n\n    func r() -> (any StubProtocol)? {\n        rAnyStubProtocolCallsCount += 1\n        if let rAnyStubProtocolClosure = rAnyStubProtocolClosure {\n            return rAnyStubProtocolClosure()\n        } else {\n            return rAnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - s\n\n    var s____AnyStubProtocolCallsCount = 0\n    var s____AnyStubProtocolCalled: Bool {\n        return s____AnyStubProtocolCallsCount > 0\n    }\n    var s____AnyStubProtocolReturnValue: ((() -> any StubProtocol))!\n    var s____AnyStubProtocolClosure: (() -> (() -> any StubProtocol))?\n\n    func s() -> (() -> any StubProtocol) {\n        s____AnyStubProtocolCallsCount += 1\n        if let s____AnyStubProtocolClosure = s____AnyStubProtocolClosure {\n            return s____AnyStubProtocolClosure()\n        } else {\n            return s____AnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - t\n\n    var t____AnyStubProtocolCallsCount = 0\n    var t____AnyStubProtocolCalled: Bool {\n        return t____AnyStubProtocolCallsCount > 0\n    }\n    var t____AnyStubProtocolReturnValue: ((() -> (any StubProtocol)?))!\n    var t____AnyStubProtocolClosure: (() -> (() -> (any StubProtocol)?))?\n\n    func t() -> (() -> (any StubProtocol)?) {\n        t____AnyStubProtocolCallsCount += 1\n        if let t____AnyStubProtocolClosure = t____AnyStubProtocolClosure {\n            return t____AnyStubProtocolClosure()\n        } else {\n            return t____AnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - u\n\n    var u_IntAnyStubProtocolCallsCount = 0\n    var u_IntAnyStubProtocolCalled: Bool {\n        return u_IntAnyStubProtocolCallsCount > 0\n    }\n    var u_IntAnyStubProtocolReturnValue: ((Int, () -> (any StubProtocol)?))!\n    var u_IntAnyStubProtocolClosure: (() -> (Int, () -> (any StubProtocol)?))?\n\n    func u() -> (Int, () -> (any StubProtocol)?) {\n        u_IntAnyStubProtocolCallsCount += 1\n        if let u_IntAnyStubProtocolClosure = u_IntAnyStubProtocolClosure {\n            return u_IntAnyStubProtocolClosure()\n        } else {\n            return u_IntAnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - v\n\n    var v_IntAnyStubProtocolCallsCount = 0\n    var v_IntAnyStubProtocolCalled: Bool {\n        return v_IntAnyStubProtocolCallsCount > 0\n    }\n    var v_IntAnyStubProtocolReturnValue: ((Int, (() -> any StubProtocol)?))!\n    var v_IntAnyStubProtocolClosure: (() -> (Int, (() -> any StubProtocol)?))?\n\n    func v() -> (Int, (() -> any StubProtocol)?) {\n        v_IntAnyStubProtocolCallsCount += 1\n        if let v_IntAnyStubProtocolClosure = v_IntAnyStubProtocolClosure {\n            return v_IntAnyStubProtocolClosure()\n        } else {\n            return v_IntAnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - w\n\n    var w_AnyStubProtocolCallsCount = 0\n    var w_AnyStubProtocolCalled: Bool {\n        return w_AnyStubProtocolCallsCount > 0\n    }\n    var w_AnyStubProtocolReturnValue: ([(any StubProtocol)?])!\n    var w_AnyStubProtocolClosure: (() -> [(any StubProtocol)?])?\n\n    func w() -> [(any StubProtocol)?] {\n        w_AnyStubProtocolCallsCount += 1\n        if let w_AnyStubProtocolClosure = w_AnyStubProtocolClosure {\n            return w_AnyStubProtocolClosure()\n        } else {\n            return w_AnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - x\n\n    var xStringAnyStubProtocolCallsCount = 0\n    var xStringAnyStubProtocolCalled: Bool {\n        return xStringAnyStubProtocolCallsCount > 0\n    }\n    var xStringAnyStubProtocolReturnValue: ([String: (any StubProtocol)?])!\n    var xStringAnyStubProtocolClosure: (() -> [String: (any StubProtocol)?])?\n\n    func x() -> [String: (any StubProtocol)?] {\n        xStringAnyStubProtocolCallsCount += 1\n        if let xStringAnyStubProtocolClosure = xStringAnyStubProtocolClosure {\n            return xStringAnyStubProtocolClosure()\n        } else {\n            return xStringAnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - y\n\n    var y_AnyStubProtocolAnyStubProtocolCallsCount = 0\n    var y_AnyStubProtocolAnyStubProtocolCalled: Bool {\n        return y_AnyStubProtocolAnyStubProtocolCallsCount > 0\n    }\n    var y_AnyStubProtocolAnyStubProtocolReturnValue: ((any StubProtocol, (any StubProtocol)?))!\n    var y_AnyStubProtocolAnyStubProtocolClosure: (() -> (any StubProtocol, (any StubProtocol)?))?\n\n    func y() -> (any StubProtocol, (any StubProtocol)?) {\n        y_AnyStubProtocolAnyStubProtocolCallsCount += 1\n        if let y_AnyStubProtocolAnyStubProtocolClosure = y_AnyStubProtocolAnyStubProtocolClosure {\n            return y_AnyStubProtocolAnyStubProtocolClosure()\n        } else {\n            return y_AnyStubProtocolAnyStubProtocolReturnValue\n        }\n    }\n\n    //MARK: - z\n\n    var zAnyStubProtocolCustomStringConvertibleCallsCount = 0\n    var zAnyStubProtocolCustomStringConvertibleCalled: Bool {\n        return zAnyStubProtocolCustomStringConvertibleCallsCount > 0\n    }\n    var zAnyStubProtocolCustomStringConvertibleReturnValue: (any StubProtocol & CustomStringConvertible)!\n    var zAnyStubProtocolCustomStringConvertibleClosure: (() -> any StubProtocol & CustomStringConvertible)?\n\n    func z() -> any StubProtocol & CustomStringConvertible {\n        zAnyStubProtocolCustomStringConvertibleCallsCount += 1\n        if let zAnyStubProtocolCustomStringConvertibleClosure = zAnyStubProtocolCustomStringConvertibleClosure {\n            return zAnyStubProtocolCustomStringConvertibleClosure()\n        } else {\n            return zAnyStubProtocolCustomStringConvertibleReturnValue\n        }\n    }\n\n\n}\nclass AnyProtocolWithOptionalsMock: AnyProtocolWithOptionals {\n\n\n    var a: [any StubProtocol]?\n    var b: [Result<Void, any Error>] = []\n    var c: (Int, [(any StubProtocol)?])?\n    var d: (Int, (any StubProtocol)?) {\n        get { return underlyingD }\n        set(value) { underlyingD = value }\n    }\n    var underlyingD: ((Int, (any StubProtocol)?))!\n    var e: (Int, (any StubProtocol)?)?\n    var f: (Int, [any StubProtocol]?)?\n    var j: (anyInteger: Int, anyArray: [any StubProtocol]?)?\n\n\n    //MARK: - g\n\n    var gGStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount = 0\n    var gGStringHandlerEscapingAnyStubProtocolVoidBoolCalled: Bool {\n        return gGStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount > 0\n    }\n    var gGStringHandlerEscapingAnyStubProtocolVoidBoolReceivedArguments: (g: String, handler: ([any StubProtocol]?) -> Void)?\n    var gGStringHandlerEscapingAnyStubProtocolVoidBoolReceivedInvocations: [(g: String, handler: ([any StubProtocol]?) -> Void)] = []\n    var gGStringHandlerEscapingAnyStubProtocolVoidBoolReturnValue: Bool!\n    var gGStringHandlerEscapingAnyStubProtocolVoidBoolClosure: ((String, @escaping ([any StubProtocol]?) -> Void) -> Bool)?\n\n    func g(_ g: String, handler: @escaping ([any StubProtocol]?) -> Void) -> Bool {\n        gGStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount += 1\n        gGStringHandlerEscapingAnyStubProtocolVoidBoolReceivedArguments = (g: g, handler: handler)\n        gGStringHandlerEscapingAnyStubProtocolVoidBoolReceivedInvocations.append((g: g, handler: handler))\n        if let gGStringHandlerEscapingAnyStubProtocolVoidBoolClosure = gGStringHandlerEscapingAnyStubProtocolVoidBoolClosure {\n            return gGStringHandlerEscapingAnyStubProtocolVoidBoolClosure(g, handler)\n        } else {\n            return gGStringHandlerEscapingAnyStubProtocolVoidBoolReturnValue\n        }\n    }\n\n    //MARK: - h\n\n    var hHStringHandlerEscapingStubProtocolVoidBoolCallsCount = 0\n    var hHStringHandlerEscapingStubProtocolVoidBoolCalled: Bool {\n        return hHStringHandlerEscapingStubProtocolVoidBoolCallsCount > 0\n    }\n    var hHStringHandlerEscapingStubProtocolVoidBoolReceivedArguments: (h: String, handler: ([StubProtocol]) -> Void)?\n    var hHStringHandlerEscapingStubProtocolVoidBoolReceivedInvocations: [(h: String, handler: ([StubProtocol]) -> Void)] = []\n    var hHStringHandlerEscapingStubProtocolVoidBoolReturnValue: Bool!\n    var hHStringHandlerEscapingStubProtocolVoidBoolClosure: ((String, @escaping ([StubProtocol]) -> Void) -> Bool)?\n\n    func h(_ h: String, handler: @escaping ([StubProtocol]) -> Void) -> Bool {\n        hHStringHandlerEscapingStubProtocolVoidBoolCallsCount += 1\n        hHStringHandlerEscapingStubProtocolVoidBoolReceivedArguments = (h: h, handler: handler)\n        hHStringHandlerEscapingStubProtocolVoidBoolReceivedInvocations.append((h: h, handler: handler))\n        if let hHStringHandlerEscapingStubProtocolVoidBoolClosure = hHStringHandlerEscapingStubProtocolVoidBoolClosure {\n            return hHStringHandlerEscapingStubProtocolVoidBoolClosure(h, handler)\n        } else {\n            return hHStringHandlerEscapingStubProtocolVoidBoolReturnValue\n        }\n    }\n\n    //MARK: - i\n\n    var iIStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount = 0\n    var iIStringHandlerEscapingAnyStubProtocolVoidBoolCalled: Bool {\n        return iIStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount > 0\n    }\n    var iIStringHandlerEscapingAnyStubProtocolVoidBoolReceivedArguments: (i: String, handler: ([(any StubProtocol)?]) -> Void)?\n    var iIStringHandlerEscapingAnyStubProtocolVoidBoolReceivedInvocations: [(i: String, handler: ([(any StubProtocol)?]) -> Void)] = []\n    var iIStringHandlerEscapingAnyStubProtocolVoidBoolReturnValue: Bool!\n    var iIStringHandlerEscapingAnyStubProtocolVoidBoolClosure: ((String, @escaping ([(any StubProtocol)?]) -> Void) -> Bool)?\n\n    func i(_ i: String, handler: @escaping ([(any StubProtocol)?]) -> Void) -> Bool {\n        iIStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount += 1\n        iIStringHandlerEscapingAnyStubProtocolVoidBoolReceivedArguments = (i: i, handler: handler)\n        iIStringHandlerEscapingAnyStubProtocolVoidBoolReceivedInvocations.append((i: i, handler: handler))\n        if let iIStringHandlerEscapingAnyStubProtocolVoidBoolClosure = iIStringHandlerEscapingAnyStubProtocolVoidBoolClosure {\n            return iIStringHandlerEscapingAnyStubProtocolVoidBoolClosure(i, handler)\n        } else {\n            return iIStringHandlerEscapingAnyStubProtocolVoidBoolReturnValue\n        }\n    }\n\n\n}\nclass AsyncProtocolMock: AsyncProtocol {\n\n\n\n\n    //MARK: - callAsync\n\n    var callAsyncParameterIntStringCallsCount = 0\n    var callAsyncParameterIntStringCalled: Bool {\n        return callAsyncParameterIntStringCallsCount > 0\n    }\n    var callAsyncParameterIntStringReceivedParameter: (Int)?\n    var callAsyncParameterIntStringReceivedInvocations: [(Int)] = []\n    var callAsyncParameterIntStringReturnValue: String!\n    var callAsyncParameterIntStringClosure: ((Int) async -> String)?\n\n    @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)\n    func callAsync(parameter: Int) async -> String {\n        callAsyncParameterIntStringCallsCount += 1\n        callAsyncParameterIntStringReceivedParameter = parameter\n        callAsyncParameterIntStringReceivedInvocations.append(parameter)\n        if let callAsyncParameterIntStringClosure = callAsyncParameterIntStringClosure {\n            return await callAsyncParameterIntStringClosure(parameter)\n        } else {\n            return callAsyncParameterIntStringReturnValue\n        }\n    }\n\n    //MARK: - callAsyncAndThrow\n\n    var callAsyncAndThrowParameterIntStringThrowableError: (any Error)?\n    var callAsyncAndThrowParameterIntStringCallsCount = 0\n    var callAsyncAndThrowParameterIntStringCalled: Bool {\n        return callAsyncAndThrowParameterIntStringCallsCount > 0\n    }\n    var callAsyncAndThrowParameterIntStringReceivedParameter: (Int)?\n    var callAsyncAndThrowParameterIntStringReceivedInvocations: [(Int)] = []\n    var callAsyncAndThrowParameterIntStringReturnValue: String!\n    var callAsyncAndThrowParameterIntStringClosure: ((Int) async throws -> String)?\n\n    func callAsyncAndThrow(parameter: Int) async throws -> String {\n        callAsyncAndThrowParameterIntStringCallsCount += 1\n        callAsyncAndThrowParameterIntStringReceivedParameter = parameter\n        callAsyncAndThrowParameterIntStringReceivedInvocations.append(parameter)\n        if let error = callAsyncAndThrowParameterIntStringThrowableError {\n            throw error\n        }\n        if let callAsyncAndThrowParameterIntStringClosure = callAsyncAndThrowParameterIntStringClosure {\n            return try await callAsyncAndThrowParameterIntStringClosure(parameter)\n        } else {\n            return callAsyncAndThrowParameterIntStringReturnValue\n        }\n    }\n\n    //MARK: - callAsyncVoid\n\n    var callAsyncVoidParameterIntVoidCallsCount = 0\n    var callAsyncVoidParameterIntVoidCalled: Bool {\n        return callAsyncVoidParameterIntVoidCallsCount > 0\n    }\n    var callAsyncVoidParameterIntVoidReceivedParameter: (Int)?\n    var callAsyncVoidParameterIntVoidReceivedInvocations: [(Int)] = []\n    var callAsyncVoidParameterIntVoidClosure: ((Int) async -> Void)?\n\n    func callAsyncVoid(parameter: Int) async {\n        callAsyncVoidParameterIntVoidCallsCount += 1\n        callAsyncVoidParameterIntVoidReceivedParameter = parameter\n        callAsyncVoidParameterIntVoidReceivedInvocations.append(parameter)\n        await callAsyncVoidParameterIntVoidClosure?(parameter)\n    }\n\n    //MARK: - callAsyncAndThrowVoid\n\n    var callAsyncAndThrowVoidParameterIntVoidThrowableError: (any Error)?\n    var callAsyncAndThrowVoidParameterIntVoidCallsCount = 0\n    var callAsyncAndThrowVoidParameterIntVoidCalled: Bool {\n        return callAsyncAndThrowVoidParameterIntVoidCallsCount > 0\n    }\n    var callAsyncAndThrowVoidParameterIntVoidReceivedParameter: (Int)?\n    var callAsyncAndThrowVoidParameterIntVoidReceivedInvocations: [(Int)] = []\n    var callAsyncAndThrowVoidParameterIntVoidClosure: ((Int) async throws -> Void)?\n\n    func callAsyncAndThrowVoid(parameter: Int) async throws {\n        callAsyncAndThrowVoidParameterIntVoidCallsCount += 1\n        callAsyncAndThrowVoidParameterIntVoidReceivedParameter = parameter\n        callAsyncAndThrowVoidParameterIntVoidReceivedInvocations.append(parameter)\n        if let error = callAsyncAndThrowVoidParameterIntVoidThrowableError {\n            throw error\n        }\n        try await callAsyncAndThrowVoidParameterIntVoidClosure?(parameter)\n    }\n\n\n}\nclass AsyncThrowingVariablesProtocolMock: AsyncThrowingVariablesProtocol {\n\n\n    var titleCallsCount = 0\n    var titleCalled: Bool {\n        return titleCallsCount > 0\n    }\n\n    var title: String? {\n        get async throws {\n            titleCallsCount += 1\n            if let error = titleThrowableError {\n                throw error\n            }\n            if let titleClosure = titleClosure {\n                return try await titleClosure()\n            } else {\n                return underlyingTitle\n            }\n        }\n    }\n    var underlyingTitle: String?\n    var titleThrowableError: Error?\n    var titleClosure: (() async throws -> String?)?\n    var firstNameCallsCount = 0\n    var firstNameCalled: Bool {\n        return firstNameCallsCount > 0\n    }\n\n    var firstName: String {\n        get async throws {\n            firstNameCallsCount += 1\n            if let error = firstNameThrowableError {\n                throw error\n            }\n            if let firstNameClosure = firstNameClosure {\n                return try await firstNameClosure()\n            } else {\n                return underlyingFirstName\n            }\n        }\n    }\n    var underlyingFirstName: String!\n    var firstNameThrowableError: Error?\n    var firstNameClosure: (() async throws -> String)?\n\n\n\n}\nclass AsyncVariablesProtocolMock: AsyncVariablesProtocol {\n\n\n    var titleCallsCount = 0\n    var titleCalled: Bool {\n        return titleCallsCount > 0\n    }\n\n    var title: String? {\n        get async {\n            titleCallsCount += 1\n            if let titleClosure = titleClosure {\n                return await titleClosure()\n            } else {\n                return underlyingTitle\n            }\n        }\n    }\n    var underlyingTitle: String?\n    var titleClosure: (() async -> String?)?\n    var firstNameCallsCount = 0\n    var firstNameCalled: Bool {\n        return firstNameCallsCount > 0\n    }\n\n    var firstName: String {\n        get async {\n            firstNameCallsCount += 1\n            if let firstNameClosure = firstNameClosure {\n                return await firstNameClosure()\n            } else {\n                return underlyingFirstName\n            }\n        }\n    }\n    var underlyingFirstName: String!\n    var firstNameClosure: (() async -> String)?\n\n\n\n}\nclass BasicProtocolMock: BasicProtocol {\n\n\n\n\n    //MARK: - loadConfiguration\n\n    var loadConfigurationStringCallsCount = 0\n    var loadConfigurationStringCalled: Bool {\n        return loadConfigurationStringCallsCount > 0\n    }\n    var loadConfigurationStringReturnValue: String?\n    var loadConfigurationStringClosure: (() -> String?)?\n\n    func loadConfiguration() -> String? {\n        loadConfigurationStringCallsCount += 1\n        if let loadConfigurationStringClosure = loadConfigurationStringClosure {\n            return loadConfigurationStringClosure()\n        } else {\n            return loadConfigurationStringReturnValue\n        }\n    }\n\n    //MARK: - save\n\n    var saveConfigurationStringVoidCallsCount = 0\n    var saveConfigurationStringVoidCalled: Bool {\n        return saveConfigurationStringVoidCallsCount > 0\n    }\n    var saveConfigurationStringVoidReceivedConfiguration: (String)?\n    var saveConfigurationStringVoidReceivedInvocations: [(String)] = []\n    var saveConfigurationStringVoidClosure: ((String) -> Void)?\n\n    func save(configuration: String) {\n        saveConfigurationStringVoidCallsCount += 1\n        saveConfigurationStringVoidReceivedConfiguration = configuration\n        saveConfigurationStringVoidReceivedInvocations.append(configuration)\n        saveConfigurationStringVoidClosure?(configuration)\n    }\n\n\n}\nclass ClosureProtocolMock: ClosureProtocol {\n\n\n\n\n    //MARK: - setClosure\n\n    var setClosureClosureEscapingVoidVoidCallsCount = 0\n    var setClosureClosureEscapingVoidVoidCalled: Bool {\n        return setClosureClosureEscapingVoidVoidCallsCount > 0\n    }\n    var setClosureClosureEscapingVoidVoidReceivedClosure: ((() -> Void))?\n    var setClosureClosureEscapingVoidVoidReceivedInvocations: [((() -> Void))] = []\n    var setClosureClosureEscapingVoidVoidClosure: ((@escaping () -> Void) -> Void)?\n\n    func setClosure(_ closure: @escaping () -> Void) {\n        setClosureClosureEscapingVoidVoidCallsCount += 1\n        setClosureClosureEscapingVoidVoidReceivedClosure = closure\n        setClosureClosureEscapingVoidVoidReceivedInvocations.append(closure)\n        setClosureClosureEscapingVoidVoidClosure?(closure)\n    }\n\n\n}\nclass ClosureWithTwoParametersProtocolMock: ClosureWithTwoParametersProtocol {\n\n\n\n\n    //MARK: - setClosure\n\n    var setClosureClosureEscapingStringIntVoidVoidCallsCount = 0\n    var setClosureClosureEscapingStringIntVoidVoidCalled: Bool {\n        return setClosureClosureEscapingStringIntVoidVoidCallsCount > 0\n    }\n    var setClosureClosureEscapingStringIntVoidVoidReceivedClosure: (((String, Int) -> Void))?\n    var setClosureClosureEscapingStringIntVoidVoidReceivedInvocations: [(((String, Int) -> Void))] = []\n    var setClosureClosureEscapingStringIntVoidVoidClosure: ((@escaping (String, Int) -> Void) -> Void)?\n\n    func setClosure(closure: (@escaping (String, Int) -> Void)) {\n        setClosureClosureEscapingStringIntVoidVoidCallsCount += 1\n        setClosureClosureEscapingStringIntVoidVoidReceivedClosure = closure\n        setClosureClosureEscapingStringIntVoidVoidReceivedInvocations.append(closure)\n        setClosureClosureEscapingStringIntVoidVoidClosure?(closure)\n    }\n\n\n}\nclass CurrencyPresenterMock: CurrencyPresenter {\n\n\n\n\n    //MARK: - showSourceCurrency\n\n    var showSourceCurrencyCurrencyStringVoidCallsCount = 0\n    var showSourceCurrencyCurrencyStringVoidCalled: Bool {\n        return showSourceCurrencyCurrencyStringVoidCallsCount > 0\n    }\n    var showSourceCurrencyCurrencyStringVoidReceivedCurrency: (String)?\n    var showSourceCurrencyCurrencyStringVoidReceivedInvocations: [(String)] = []\n    var showSourceCurrencyCurrencyStringVoidClosure: ((String) -> Void)?\n\n    func showSourceCurrency(_ currency: String) {\n        showSourceCurrencyCurrencyStringVoidCallsCount += 1\n        showSourceCurrencyCurrencyStringVoidReceivedCurrency = currency\n        showSourceCurrencyCurrencyStringVoidReceivedInvocations.append(currency)\n        showSourceCurrencyCurrencyStringVoidClosure?(currency)\n    }\n\n\n}\nclass ExampleVarargMock: ExampleVararg {\n\n\n\n\n    //MARK: - string\n\n    var stringKeyStringArgsCVarArgStringCallsCount = 0\n    var stringKeyStringArgsCVarArgStringCalled: Bool {\n        return stringKeyStringArgsCVarArgStringCallsCount > 0\n    }\n    var stringKeyStringArgsCVarArgStringReceivedArguments: (key: String, args: [CVarArg])?\n    var stringKeyStringArgsCVarArgStringReceivedInvocations: [(key: String, args: [CVarArg])] = []\n    var stringKeyStringArgsCVarArgStringReturnValue: String!\n    var stringKeyStringArgsCVarArgStringClosure: ((String, CVarArg...) -> String)?\n\n    func string(key: String, args: CVarArg...) -> String {\n        stringKeyStringArgsCVarArgStringCallsCount += 1\n        stringKeyStringArgsCVarArgStringReceivedArguments = (key: key, args: args)\n        stringKeyStringArgsCVarArgStringReceivedInvocations.append((key: key, args: args))\n        if let stringKeyStringArgsCVarArgStringClosure = stringKeyStringArgsCVarArgStringClosure {\n            return stringKeyStringArgsCVarArgStringClosure(key, args)\n        } else {\n            return stringKeyStringArgsCVarArgStringReturnValue\n        }\n    }\n\n\n}\nclass ExampleVarargFourMock: ExampleVarargFour {\n\n\n\n\n    //MARK: - toto\n\n    var totoArgStringAnyCollectionVoidVoidCallsCount = 0\n    var totoArgStringAnyCollectionVoidVoidCalled: Bool {\n        return totoArgStringAnyCollectionVoidVoidCallsCount > 0\n    }\n    var totoArgStringAnyCollectionVoidVoidClosure: (((String, any Collection...) -> Void) -> Void)?\n\n    func toto(arg: ((String, any Collection...) -> Void)) {\n        totoArgStringAnyCollectionVoidVoidCallsCount += 1\n        totoArgStringAnyCollectionVoidVoidClosure?(arg)\n    }\n\n\n}\nclass ExampleVarargThreeMock: ExampleVarargThree {\n\n\n\n\n    //MARK: - toto\n\n    var totoArgStringAnyCollectionAnyCollectionVoidCallsCount = 0\n    var totoArgStringAnyCollectionAnyCollectionVoidCalled: Bool {\n        return totoArgStringAnyCollectionAnyCollectionVoidCallsCount > 0\n    }\n    var totoArgStringAnyCollectionAnyCollectionVoidClosure: (((String, any Collection...) -> any Collection) -> Void)?\n\n    func toto(arg: ((String, any Collection...) -> any Collection)) {\n        totoArgStringAnyCollectionAnyCollectionVoidCallsCount += 1\n        totoArgStringAnyCollectionAnyCollectionVoidClosure?(arg)\n    }\n\n\n}\nclass ExampleVarargTwoMock: ExampleVarargTwo {\n\n\n\n\n    //MARK: - toto\n\n    var totoArgsAnyStubWithSomeNameProtocolVoidCallsCount = 0\n    var totoArgsAnyStubWithSomeNameProtocolVoidCalled: Bool {\n        return totoArgsAnyStubWithSomeNameProtocolVoidCallsCount > 0\n    }\n    var totoArgsAnyStubWithSomeNameProtocolVoidReceivedArgs: ([(any StubWithSomeNameProtocol)])?\n    var totoArgsAnyStubWithSomeNameProtocolVoidReceivedInvocations: [([(any StubWithSomeNameProtocol)])] = []\n    var totoArgsAnyStubWithSomeNameProtocolVoidClosure: (([(any StubWithSomeNameProtocol)]) -> Void)?\n\n    func toto(args: any StubWithSomeNameProtocol...) {\n        totoArgsAnyStubWithSomeNameProtocolVoidCallsCount += 1\n        totoArgsAnyStubWithSomeNameProtocolVoidReceivedArgs = args\n        totoArgsAnyStubWithSomeNameProtocolVoidReceivedInvocations.append(args)\n        totoArgsAnyStubWithSomeNameProtocolVoidClosure?(args)\n    }\n\n\n}\nclass ExtendableProtocolMock: ExtendableProtocol {\n\n\n    var canReport: Bool {\n        get { return underlyingCanReport }\n        set(value) { underlyingCanReport = value }\n    }\n    var underlyingCanReport: (Bool)!\n\n\n    //MARK: - report\n\n    var reportMessageStringVoidCallsCount = 0\n    var reportMessageStringVoidCalled: Bool {\n        return reportMessageStringVoidCallsCount > 0\n    }\n    var reportMessageStringVoidReceivedMessage: (String)?\n    var reportMessageStringVoidReceivedInvocations: [(String)] = []\n    var reportMessageStringVoidClosure: ((String) -> Void)?\n\n    func report(message: String) {\n        reportMessageStringVoidCallsCount += 1\n        reportMessageStringVoidReceivedMessage = message\n        reportMessageStringVoidReceivedInvocations.append(message)\n        reportMessageStringVoidClosure?(message)\n    }\n\n\n}\nclass FunctionWithAttributesMock: FunctionWithAttributes {\n\n\n\n\n    //MARK: - callOneAttribute\n\n    var callOneAttributeStringCallsCount = 0\n    var callOneAttributeStringCalled: Bool {\n        return callOneAttributeStringCallsCount > 0\n    }\n    var callOneAttributeStringReturnValue: String!\n    var callOneAttributeStringClosure: (() -> String)?\n\n    @discardableResult\n    func callOneAttribute() -> String {\n        callOneAttributeStringCallsCount += 1\n        if let callOneAttributeStringClosure = callOneAttributeStringClosure {\n            return callOneAttributeStringClosure()\n        } else {\n            return callOneAttributeStringReturnValue\n        }\n    }\n\n    //MARK: - callTwoAttributes\n\n    var callTwoAttributesIntCallsCount = 0\n    var callTwoAttributesIntCalled: Bool {\n        return callTwoAttributesIntCallsCount > 0\n    }\n    var callTwoAttributesIntReturnValue: Int!\n    var callTwoAttributesIntClosure: (() -> Int)?\n\n    @available(macOS 10.15, *)\n    @discardableResult\n    func callTwoAttributes() -> Int {\n        callTwoAttributesIntCallsCount += 1\n        if let callTwoAttributesIntClosure = callTwoAttributesIntClosure {\n            return callTwoAttributesIntClosure()\n        } else {\n            return callTwoAttributesIntReturnValue\n        }\n    }\n\n    //MARK: - callRepeatedAttributes\n\n    var callRepeatedAttributesBoolCallsCount = 0\n    var callRepeatedAttributesBoolCalled: Bool {\n        return callRepeatedAttributesBoolCallsCount > 0\n    }\n    var callRepeatedAttributesBoolReturnValue: Bool!\n    var callRepeatedAttributesBoolClosure: (() -> Bool)?\n\n    @available(iOS 13.0, *)\n    @available(macOS 10.15, *)\n    @discardableResult\n    func callRepeatedAttributes() -> Bool {\n        callRepeatedAttributesBoolCallsCount += 1\n        if let callRepeatedAttributesBoolClosure = callRepeatedAttributesBoolClosure {\n            return callRepeatedAttributesBoolClosure()\n        } else {\n            return callRepeatedAttributesBoolReturnValue\n        }\n    }\n\n\n}\nclass FunctionWithClosureReturnTypeMock: FunctionWithClosureReturnType {\n\n\n\n\n    //MARK: - get\n\n    var get____VoidCallsCount = 0\n    var get____VoidCalled: Bool {\n        return get____VoidCallsCount > 0\n    }\n    var get____VoidReturnValue: ((() -> Void))!\n    var get____VoidClosure: (() -> (() -> Void))?\n\n    func get() -> (() -> Void) {\n        get____VoidCallsCount += 1\n        if let get____VoidClosure = get____VoidClosure {\n            return get____VoidClosure()\n        } else {\n            return get____VoidReturnValue\n        }\n    }\n\n    //MARK: - getOptional\n\n    var getOptional_____VoidCallsCount = 0\n    var getOptional_____VoidCalled: Bool {\n        return getOptional_____VoidCallsCount > 0\n    }\n    var getOptional_____VoidReturnValue: ((() -> Void)?)\n    var getOptional_____VoidClosure: (() -> ((() -> Void)?))?\n\n    func getOptional() -> ((() -> Void)?) {\n        getOptional_____VoidCallsCount += 1\n        if let getOptional_____VoidClosure = getOptional_____VoidClosure {\n            return getOptional_____VoidClosure()\n        } else {\n            return getOptional_____VoidReturnValue\n        }\n    }\n\n\n}\nclass FunctionWithMultilineDeclarationMock: FunctionWithMultilineDeclaration {\n\n\n\n\n    //MARK: - start\n\n    var startCarStringOfModelStringVoidCallsCount = 0\n    var startCarStringOfModelStringVoidCalled: Bool {\n        return startCarStringOfModelStringVoidCallsCount > 0\n    }\n    var startCarStringOfModelStringVoidReceivedArguments: (car: String, model: String)?\n    var startCarStringOfModelStringVoidReceivedInvocations: [(car: String, model: String)] = []\n    var startCarStringOfModelStringVoidClosure: ((String, String) -> Void)?\n\n    func start(car: String, of model: String) {\n        startCarStringOfModelStringVoidCallsCount += 1\n        startCarStringOfModelStringVoidReceivedArguments = (car: car, model: model)\n        startCarStringOfModelStringVoidReceivedInvocations.append((car: car, model: model))\n        startCarStringOfModelStringVoidClosure?(car, model)\n    }\n\n\n}\nclass FunctionWithNullableCompletionThatHasNullableAnyParameterProtocolMock: FunctionWithNullableCompletionThatHasNullableAnyParameterProtocol {\n\n\n\n\n    //MARK: - add\n\n    var addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidCallsCount = 0\n    var addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidCalled: Bool {\n        return addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidCallsCount > 0\n    }\n    var addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidReceivedArguments: (request: Int, completionHandler: ((((any Error)?) -> Void))?)?\n    var addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidReceivedInvocations: [(request: Int, completionHandler: ((((any Error)?) -> Void))?)] = []\n    var addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidClosure: ((Int, ((((any Error)?) -> Void))?) -> Void)?\n\n    func add(_ request: Int, withCompletionHandler completionHandler: ((((any Error)?) -> Void))?) {\n        addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidCallsCount += 1\n        addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidReceivedArguments = (request: request, completionHandler: completionHandler)\n        addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidReceivedInvocations.append((request: request, completionHandler: completionHandler))\n        addRequestIntWithCompletionHandlerCompletionHandlerAnyErrorVoidVoidClosure?(request, completionHandler)\n    }\n\n\n}\nclass HouseProtocolMock: HouseProtocol {\n\n\n    var aPublisher: AnyPublisher<any PersonProtocol, Never>?\n    var bPublisher: AnyPublisher<(any PersonProtocol)?, Never>?\n    var cPublisher: CurrentValueSubject<(any PersonProtocol)?, Never>?\n    var dPublisher: PassthroughSubject<(any PersonProtocol)?, Never>?\n    var e1Publisher: GenericType<(any PersonProtocol)?, Never, Never>?\n    var e2Publisher: GenericType<Never, (any PersonProtocol)?, Never>?\n    var e3Publisher: GenericType<Never, Never, (any PersonProtocol)?>?\n    var e4Publisher: GenericType<(any PersonProtocol)?, (any PersonProtocol)?, (any PersonProtocol)?>?\n    var f1Publisher: GenericType<any PersonProtocol, Never, Never>?\n    var f2Publisher: GenericType<Never, any PersonProtocol, Never>?\n    var f3Publisher: GenericType<Never, Never, any PersonProtocol>?\n    var f4Publisher: GenericType<any PersonProtocol, any PersonProtocol, any PersonProtocol>?\n\n\n\n}\nclass ImplicitlyUnwrappedOptionalReturnValueProtocolMock: ImplicitlyUnwrappedOptionalReturnValueProtocol {\n\n\n\n\n    //MARK: - implicitReturn\n\n    var implicitReturnStringCallsCount = 0\n    var implicitReturnStringCalled: Bool {\n        return implicitReturnStringCallsCount > 0\n    }\n    var implicitReturnStringReturnValue: String!\n    var implicitReturnStringClosure: (() -> String)?\n\n    func implicitReturn() -> String! {\n        implicitReturnStringCallsCount += 1\n        if let implicitReturnStringClosure = implicitReturnStringClosure {\n            return implicitReturnStringClosure()\n        } else {\n            return implicitReturnStringReturnValue\n        }\n    }\n\n\n}\nclass InitializationProtocolMock: InitializationProtocol {\n\n\n\n\n    //MARK: - init\n\n    var initIntParameterIntStringParameterStringOptionalParameterStringInitializationProtocolReceivedArguments: (intParameter: Int, stringParameter: String, optionalParameter: String?)?\n    var initIntParameterIntStringParameterStringOptionalParameterStringInitializationProtocolReceivedInvocations: [(intParameter: Int, stringParameter: String, optionalParameter: String?)] = []\n    var initIntParameterIntStringParameterStringOptionalParameterStringInitializationProtocolClosure: ((Int, String, String?) -> Void)?\n\n    required init(intParameter: Int, stringParameter: String, optionalParameter: String?) {\n        initIntParameterIntStringParameterStringOptionalParameterStringInitializationProtocolReceivedArguments = (intParameter: intParameter, stringParameter: stringParameter, optionalParameter: optionalParameter)\n        initIntParameterIntStringParameterStringOptionalParameterStringInitializationProtocolReceivedInvocations.append((intParameter: intParameter, stringParameter: stringParameter, optionalParameter: optionalParameter))\n        initIntParameterIntStringParameterStringOptionalParameterStringInitializationProtocolClosure?(intParameter, stringParameter, optionalParameter)\n    }\n    //MARK: - start\n\n    var startVoidCallsCount = 0\n    var startVoidCalled: Bool {\n        return startVoidCallsCount > 0\n    }\n    var startVoidClosure: (() -> Void)?\n\n    func start() {\n        startVoidCallsCount += 1\n        startVoidClosure?()\n    }\n\n    //MARK: - stop\n\n    var stopVoidCallsCount = 0\n    var stopVoidCalled: Bool {\n        return stopVoidCallsCount > 0\n    }\n    var stopVoidClosure: (() -> Void)?\n\n    func stop() {\n        stopVoidCallsCount += 1\n        stopVoidClosure?()\n    }\n\n\n}\nclass MultiClosureProtocolMock: MultiClosureProtocol {\n\n\n\n\n    //MARK: - setClosure\n\n    var setClosureNameStringClosureEscapingVoidVoidCallsCount = 0\n    var setClosureNameStringClosureEscapingVoidVoidCalled: Bool {\n        return setClosureNameStringClosureEscapingVoidVoidCallsCount > 0\n    }\n    var setClosureNameStringClosureEscapingVoidVoidReceivedArguments: (name: String, closure: () -> Void)?\n    var setClosureNameStringClosureEscapingVoidVoidReceivedInvocations: [(name: String, closure: () -> Void)] = []\n    var setClosureNameStringClosureEscapingVoidVoidClosure: ((String, @escaping () -> Void) -> Void)?\n\n    func setClosure(name: String, _ closure: @escaping () -> Void) {\n        setClosureNameStringClosureEscapingVoidVoidCallsCount += 1\n        setClosureNameStringClosureEscapingVoidVoidReceivedArguments = (name: name, closure: closure)\n        setClosureNameStringClosureEscapingVoidVoidReceivedInvocations.append((name: name, closure: closure))\n        setClosureNameStringClosureEscapingVoidVoidClosure?(name, closure)\n    }\n\n\n}\nclass MultiExistentialArgumentsClosureProtocolMock: MultiExistentialArgumentsClosureProtocol {\n\n\n\n\n    //MARK: - execute\n\n    var executeCompletionAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolVoidCallsCount = 0\n    var executeCompletionAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolVoidCalled: Bool {\n        return executeCompletionAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolVoidCallsCount > 0\n    }\n    var executeCompletionAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolVoidClosure: ((((any StubWithSomeNameProtocol)?, (any StubWithSomeNameProtocol)) -> (any StubWithSomeNameProtocol)?) -> Void)?\n\n    func execute(completion: (((any StubWithSomeNameProtocol)?, (any StubWithSomeNameProtocol)) -> (any StubWithSomeNameProtocol)?)) {\n        executeCompletionAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolVoidCallsCount += 1\n        executeCompletionAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolAnyStubWithSomeNameProtocolVoidClosure?(completion)\n    }\n\n\n}\nclass MultiNonEscapingClosureProtocolMock: MultiNonEscapingClosureProtocol {\n\n\n\n\n    //MARK: - executeClosure\n\n    var executeClosureNameStringClosureVoidVoidCallsCount = 0\n    var executeClosureNameStringClosureVoidVoidCalled: Bool {\n        return executeClosureNameStringClosureVoidVoidCallsCount > 0\n    }\n    var executeClosureNameStringClosureVoidVoidClosure: ((String, () -> Void) -> Void)?\n\n    func executeClosure(name: String, _ closure: () -> Void) {\n        executeClosureNameStringClosureVoidVoidCallsCount += 1\n        executeClosureNameStringClosureVoidVoidClosure?(name, closure)\n    }\n\n\n}\nclass MultiNullableClosureProtocolMock: MultiNullableClosureProtocol {\n\n\n\n\n    //MARK: - setClosure\n\n    var setClosureNameStringClosureVoidVoidCallsCount = 0\n    var setClosureNameStringClosureVoidVoidCalled: Bool {\n        return setClosureNameStringClosureVoidVoidCallsCount > 0\n    }\n    var setClosureNameStringClosureVoidVoidReceivedArguments: (name: String, closure: (() -> Void)?)?\n    var setClosureNameStringClosureVoidVoidReceivedInvocations: [(name: String, closure: (() -> Void)?)] = []\n    var setClosureNameStringClosureVoidVoidClosure: ((String, (() -> Void)?) -> Void)?\n\n    func setClosure(name: String, _ closure: (() -> Void)?) {\n        setClosureNameStringClosureVoidVoidCallsCount += 1\n        setClosureNameStringClosureVoidVoidReceivedArguments = (name: name, closure: closure)\n        setClosureNameStringClosureVoidVoidReceivedInvocations.append((name: name, closure: closure))\n        setClosureNameStringClosureVoidVoidClosure?(name, closure)\n    }\n\n\n}\nclass NonEscapingClosureProtocolMock: NonEscapingClosureProtocol {\n\n\n\n\n    //MARK: - executeClosure\n\n    var executeClosureClosureVoidVoidCallsCount = 0\n    var executeClosureClosureVoidVoidCalled: Bool {\n        return executeClosureClosureVoidVoidCallsCount > 0\n    }\n    var executeClosureClosureVoidVoidClosure: ((() -> Void) -> Void)?\n\n    func executeClosure(_ closure: () -> Void) {\n        executeClosureClosureVoidVoidCallsCount += 1\n        executeClosureClosureVoidVoidClosure?(closure)\n    }\n\n\n}\nclass NullableClosureProtocolMock: NullableClosureProtocol {\n\n\n\n\n    //MARK: - setClosure\n\n    var setClosureClosureVoidVoidCallsCount = 0\n    var setClosureClosureVoidVoidCalled: Bool {\n        return setClosureClosureVoidVoidCallsCount > 0\n    }\n    var setClosureClosureVoidVoidReceivedClosure: (((() -> Void)))?\n    var setClosureClosureVoidVoidReceivedInvocations: [(((() -> Void)))?] = []\n    var setClosureClosureVoidVoidClosure: (((() -> Void)?) -> Void)?\n\n    func setClosure(_ closure: (() -> Void)?) {\n        setClosureClosureVoidVoidCallsCount += 1\n        setClosureClosureVoidVoidReceivedClosure = closure\n        setClosureClosureVoidVoidReceivedInvocations.append(closure)\n        setClosureClosureVoidVoidClosure?(closure)\n    }\n\n\n}\npublic class ProtocolWithMethodWithGenericParametersMock: ProtocolWithMethodWithGenericParameters {\n\n    public init() {}\n\n\n\n    //MARK: - execute\n\n    public var executeParamResultIntErrorResultStringErrorCallsCount = 0\n    public var executeParamResultIntErrorResultStringErrorCalled: Bool {\n        return executeParamResultIntErrorResultStringErrorCallsCount > 0\n    }\n    public var executeParamResultIntErrorResultStringErrorReceivedParam: (Result<Int, Error>)?\n    public var executeParamResultIntErrorResultStringErrorReceivedInvocations: [(Result<Int, Error>)] = []\n    public var executeParamResultIntErrorResultStringErrorReturnValue: Result<String, Error>!\n    public var executeParamResultIntErrorResultStringErrorClosure: ((Result<Int, Error>) -> Result<String, Error>)?\n\n    public func execute(param: Result<Int, Error>) -> Result<String, Error> {\n        executeParamResultIntErrorResultStringErrorCallsCount += 1\n        executeParamResultIntErrorResultStringErrorReceivedParam = param\n        executeParamResultIntErrorResultStringErrorReceivedInvocations.append(param)\n        if let executeParamResultIntErrorResultStringErrorClosure = executeParamResultIntErrorResultStringErrorClosure {\n            return executeParamResultIntErrorResultStringErrorClosure(param)\n        } else {\n            return executeParamResultIntErrorResultStringErrorReturnValue\n        }\n    }\n\n\n}\npublic class ProtocolWithMethodWithInoutParameterMock: ProtocolWithMethodWithInoutParameter {\n\n    public init() {}\n\n\n\n    //MARK: - execute\n\n    public var executeParamInoutStringVoidCallsCount = 0\n    public var executeParamInoutStringVoidCalled: Bool {\n        return executeParamInoutStringVoidCallsCount > 0\n    }\n    public var executeParamInoutStringVoidReceivedParam: (String)?\n    public var executeParamInoutStringVoidReceivedInvocations: [(String)] = []\n    public var executeParamInoutStringVoidClosure: ((inout String) -> Void)?\n\n    public func execute(param: inout String) {\n        executeParamInoutStringVoidCallsCount += 1\n        executeParamInoutStringVoidReceivedParam = param\n        executeParamInoutStringVoidReceivedInvocations.append(param)\n        executeParamInoutStringVoidClosure?(&param)\n    }\n\n    //MARK: - execute\n\n    public var executeParamInoutStringBarIntVoidCallsCount = 0\n    public var executeParamInoutStringBarIntVoidCalled: Bool {\n        return executeParamInoutStringBarIntVoidCallsCount > 0\n    }\n    public var executeParamInoutStringBarIntVoidReceivedArguments: (param: String, bar: Int)?\n    public var executeParamInoutStringBarIntVoidReceivedInvocations: [(param: String, bar: Int)] = []\n    public var executeParamInoutStringBarIntVoidClosure: ((inout String, Int) -> Void)?\n\n    public func execute(param: inout String, bar: Int) {\n        executeParamInoutStringBarIntVoidCallsCount += 1\n        executeParamInoutStringBarIntVoidReceivedArguments = (param: param, bar: bar)\n        executeParamInoutStringBarIntVoidReceivedInvocations.append((param: param, bar: bar))\n        executeParamInoutStringBarIntVoidClosure?(&param, bar)\n    }\n\n\n}\npublic class ProtocolWithOverridesMock: ProtocolWithOverrides {\n\n    public init() {}\n\n\n\n    //MARK: - doSomething\n\n    public var doSomethingDataIntStringCallsCount = 0\n    public var doSomethingDataIntStringCalled: Bool {\n        return doSomethingDataIntStringCallsCount > 0\n    }\n    public var doSomethingDataIntStringReceivedData: (Int)?\n    public var doSomethingDataIntStringReceivedInvocations: [(Int)] = []\n    public var doSomethingDataIntStringReturnValue: [String]!\n    public var doSomethingDataIntStringClosure: ((Int) -> [String])?\n\n    public func doSomething(_ data: Int) -> [String] {\n        doSomethingDataIntStringCallsCount += 1\n        doSomethingDataIntStringReceivedData = data\n        doSomethingDataIntStringReceivedInvocations.append(data)\n        if let doSomethingDataIntStringClosure = doSomethingDataIntStringClosure {\n            return doSomethingDataIntStringClosure(data)\n        } else {\n            return doSomethingDataIntStringReturnValue\n        }\n    }\n\n    //MARK: - doSomething\n\n    public var doSomethingDataStringStringCallsCount = 0\n    public var doSomethingDataStringStringCalled: Bool {\n        return doSomethingDataStringStringCallsCount > 0\n    }\n    public var doSomethingDataStringStringReceivedData: (String)?\n    public var doSomethingDataStringStringReceivedInvocations: [(String)] = []\n    public var doSomethingDataStringStringReturnValue: [String]!\n    public var doSomethingDataStringStringClosure: ((String) -> [String])?\n\n    public func doSomething(_ data: String) -> [String] {\n        doSomethingDataStringStringCallsCount += 1\n        doSomethingDataStringStringReceivedData = data\n        doSomethingDataStringStringReceivedInvocations.append(data)\n        if let doSomethingDataStringStringClosure = doSomethingDataStringStringClosure {\n            return doSomethingDataStringStringClosure(data)\n        } else {\n            return doSomethingDataStringStringReturnValue\n        }\n    }\n\n    //MARK: - doSomething\n\n    public var doSomethingDataStringIntCallsCount = 0\n    public var doSomethingDataStringIntCalled: Bool {\n        return doSomethingDataStringIntCallsCount > 0\n    }\n    public var doSomethingDataStringIntReceivedData: (String)?\n    public var doSomethingDataStringIntReceivedInvocations: [(String)] = []\n    public var doSomethingDataStringIntReturnValue: [Int]!\n    public var doSomethingDataStringIntClosure: ((String) -> [Int])?\n\n    public func doSomething(_ data: String) -> [Int] {\n        doSomethingDataStringIntCallsCount += 1\n        doSomethingDataStringIntReceivedData = data\n        doSomethingDataStringIntReceivedInvocations.append(data)\n        if let doSomethingDataStringIntClosure = doSomethingDataStringIntClosure {\n            return doSomethingDataStringIntClosure(data)\n        } else {\n            return doSomethingDataStringIntReturnValue\n        }\n    }\n\n    //MARK: - doSomething\n\n    public var doSomethingDataString_IntStringCallsCount = 0\n    public var doSomethingDataString_IntStringCalled: Bool {\n        return doSomethingDataString_IntStringCallsCount > 0\n    }\n    public var doSomethingDataString_IntStringReceivedData: (String)?\n    public var doSomethingDataString_IntStringReceivedInvocations: [(String)] = []\n    public var doSomethingDataString_IntStringReturnValue: ([Int], [String])!\n    public var doSomethingDataString_IntStringClosure: ((String) -> ([Int], [String]))?\n\n    public func doSomething(_ data: String) -> ([Int], [String]) {\n        doSomethingDataString_IntStringCallsCount += 1\n        doSomethingDataString_IntStringReceivedData = data\n        doSomethingDataString_IntStringReceivedInvocations.append(data)\n        if let doSomethingDataString_IntStringClosure = doSomethingDataString_IntStringClosure {\n            return doSomethingDataString_IntStringClosure(data)\n        } else {\n            return doSomethingDataString_IntStringReturnValue\n        }\n    }\n\n    //MARK: - doSomething\n\n    public var doSomethingDataString_IntAnyThrowableError: (any Error)?\n    public var doSomethingDataString_IntAnyCallsCount = 0\n    public var doSomethingDataString_IntAnyCalled: Bool {\n        return doSomethingDataString_IntAnyCallsCount > 0\n    }\n    public var doSomethingDataString_IntAnyReceivedData: (String)?\n    public var doSomethingDataString_IntAnyReceivedInvocations: [(String)] = []\n    public var doSomethingDataString_IntAnyReturnValue: ([Int], [Any])!\n    public var doSomethingDataString_IntAnyClosure: ((String) throws -> ([Int], [Any]))?\n\n    public func doSomething(_ data: String) throws -> ([Int], [Any]) {\n        doSomethingDataString_IntAnyCallsCount += 1\n        doSomethingDataString_IntAnyReceivedData = data\n        doSomethingDataString_IntAnyReceivedInvocations.append(data)\n        if let error = doSomethingDataString_IntAnyThrowableError {\n            throw error\n        }\n        if let doSomethingDataString_IntAnyClosure = doSomethingDataString_IntAnyClosure {\n            return try doSomethingDataString_IntAnyClosure(data)\n        } else {\n            return doSomethingDataString_IntAnyReturnValue\n        }\n    }\n\n    //MARK: - doSomething\n\n    public var doSomethingDataString_IntStringVoidCallsCount = 0\n    public var doSomethingDataString_IntStringVoidCalled: Bool {\n        return doSomethingDataString_IntStringVoidCallsCount > 0\n    }\n    public var doSomethingDataString_IntStringVoidReceivedData: (String)?\n    public var doSomethingDataString_IntStringVoidReceivedInvocations: [(String)] = []\n    public var doSomethingDataString_IntStringVoidReturnValue: (([Int], [String]) -> Void)!\n    public var doSomethingDataString_IntStringVoidClosure: ((String) -> ([Int], [String]) -> Void)?\n\n    public func doSomething(_ data: String) -> ([Int], [String]) -> Void {\n        doSomethingDataString_IntStringVoidCallsCount += 1\n        doSomethingDataString_IntStringVoidReceivedData = data\n        doSomethingDataString_IntStringVoidReceivedInvocations.append(data)\n        if let doSomethingDataString_IntStringVoidClosure = doSomethingDataString_IntStringVoidClosure {\n            return doSomethingDataString_IntStringVoidClosure(data)\n        } else {\n            return doSomethingDataString_IntStringVoidReturnValue\n        }\n    }\n\n    //MARK: - doSomething\n\n    public var doSomethingDataString_IntAnyVoidThrowableError: (any Error)?\n    public var doSomethingDataString_IntAnyVoidCallsCount = 0\n    public var doSomethingDataString_IntAnyVoidCalled: Bool {\n        return doSomethingDataString_IntAnyVoidCallsCount > 0\n    }\n    public var doSomethingDataString_IntAnyVoidReceivedData: (String)?\n    public var doSomethingDataString_IntAnyVoidReceivedInvocations: [(String)] = []\n    public var doSomethingDataString_IntAnyVoidReturnValue: (([Int], [Any]) -> Void)!\n    public var doSomethingDataString_IntAnyVoidClosure: ((String) throws -> ([Int], [Any]) -> Void)?\n\n    public func doSomething(_ data: String) throws -> ([Int], [Any]) -> Void {\n        doSomethingDataString_IntAnyVoidCallsCount += 1\n        doSomethingDataString_IntAnyVoidReceivedData = data\n        doSomethingDataString_IntAnyVoidReceivedInvocations.append(data)\n        if let error = doSomethingDataString_IntAnyVoidThrowableError {\n            throw error\n        }\n        if let doSomethingDataString_IntAnyVoidClosure = doSomethingDataString_IntAnyVoidClosure {\n            return try doSomethingDataString_IntAnyVoidClosure(data)\n        } else {\n            return doSomethingDataString_IntAnyVoidReturnValue\n        }\n    }\n\n\n}\nclass ReservedWordsProtocolMock: ReservedWordsProtocol {\n\n\n\n\n    //MARK: - `continue`\n\n    var continueWithMessageStringStringCallsCount = 0\n    var continueWithMessageStringStringCalled: Bool {\n        return continueWithMessageStringStringCallsCount > 0\n    }\n    var continueWithMessageStringStringReceivedMessage: (String)?\n    var continueWithMessageStringStringReceivedInvocations: [(String)] = []\n    var continueWithMessageStringStringReturnValue: String!\n    var continueWithMessageStringStringClosure: ((String) -> String)?\n\n    func `continue`(with message: String) -> String {\n        continueWithMessageStringStringCallsCount += 1\n        continueWithMessageStringStringReceivedMessage = message\n        continueWithMessageStringStringReceivedInvocations.append(message)\n        if let continueWithMessageStringStringClosure = continueWithMessageStringStringClosure {\n            return continueWithMessageStringStringClosure(message)\n        } else {\n            return continueWithMessageStringStringReturnValue\n        }\n    }\n\n\n}\nclass SameShortMethodNamesProtocolMock: SameShortMethodNamesProtocol {\n\n\n\n\n    //MARK: - start\n\n    var startCarStringOfModelStringVoidCallsCount = 0\n    var startCarStringOfModelStringVoidCalled: Bool {\n        return startCarStringOfModelStringVoidCallsCount > 0\n    }\n    var startCarStringOfModelStringVoidReceivedArguments: (car: String, model: String)?\n    var startCarStringOfModelStringVoidReceivedInvocations: [(car: String, model: String)] = []\n    var startCarStringOfModelStringVoidClosure: ((String, String) -> Void)?\n\n    func start(car: String, of model: String) {\n        startCarStringOfModelStringVoidCallsCount += 1\n        startCarStringOfModelStringVoidReceivedArguments = (car: car, model: model)\n        startCarStringOfModelStringVoidReceivedInvocations.append((car: car, model: model))\n        startCarStringOfModelStringVoidClosure?(car, model)\n    }\n\n    //MARK: - start\n\n    var startPlaneStringOfModelStringVoidCallsCount = 0\n    var startPlaneStringOfModelStringVoidCalled: Bool {\n        return startPlaneStringOfModelStringVoidCallsCount > 0\n    }\n    var startPlaneStringOfModelStringVoidReceivedArguments: (plane: String, model: String)?\n    var startPlaneStringOfModelStringVoidReceivedInvocations: [(plane: String, model: String)] = []\n    var startPlaneStringOfModelStringVoidClosure: ((String, String) -> Void)?\n\n    func start(plane: String, of model: String) {\n        startPlaneStringOfModelStringVoidCallsCount += 1\n        startPlaneStringOfModelStringVoidReceivedArguments = (plane: plane, model: model)\n        startPlaneStringOfModelStringVoidReceivedInvocations.append((plane: plane, model: model))\n        startPlaneStringOfModelStringVoidClosure?(plane, model)\n    }\n\n\n}\nclass SendableProtocolMock: SendableProtocol, @unchecked Sendable {\n\n\n    var value: Any {\n        get { return underlyingValue }\n        set(value) { underlyingValue = value }\n    }\n    var underlyingValue: (Any)!\n\n\n\n}\nclass SendableSendableProtocolMock: SendableSendableProtocol, @unchecked Sendable {\n\n\n    var value: Any {\n        get { return underlyingValue }\n        set(value) { underlyingValue = value }\n    }\n    var underlyingValue: (Any)!\n\n\n\n}\nclass SingleOptionalParameterFunctionMock: SingleOptionalParameterFunction {\n\n\n\n\n    //MARK: - send\n\n    var sendMessageStringVoidCallsCount = 0\n    var sendMessageStringVoidCalled: Bool {\n        return sendMessageStringVoidCallsCount > 0\n    }\n    var sendMessageStringVoidReceivedMessage: (String)?\n    var sendMessageStringVoidReceivedInvocations: [(String)?] = []\n    var sendMessageStringVoidClosure: ((String?) -> Void)?\n\n    func send(message: String?) {\n        sendMessageStringVoidCallsCount += 1\n        sendMessageStringVoidReceivedMessage = message\n        sendMessageStringVoidReceivedInvocations.append(message)\n        sendMessageStringVoidClosure?(message)\n    }\n\n\n}\nclass SomeProtocolMock: SomeProtocol {\n\n\n\n\n    //MARK: - a\n\n    var aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidCallsCount = 0\n    var aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidCalled: Bool {\n        return aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidCallsCount > 0\n    }\n    var aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidReceivedArguments: (x: (any StubProtocol)?, y: (any StubProtocol)?, z: any StubProtocol)?\n    var aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidReceivedInvocations: [(x: (any StubProtocol)?, y: (any StubProtocol)?, z: any StubProtocol)] = []\n    var aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidClosure: (((any StubProtocol)?, (any StubProtocol)?, any StubProtocol) -> Void)?\n\n    func a(_ x: (some StubProtocol)?, y: (some StubProtocol)!, z: some StubProtocol) {\n        aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidCallsCount += 1\n        aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidReceivedArguments = (x: x, y: y, z: z)\n        aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidReceivedInvocations.append((x: x, y: y, z: z))\n        aXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolVoidClosure?(x, y, z)\n    }\n\n    //MARK: - b\n\n    var bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringCallsCount = 0\n    var bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringCalled: Bool {\n        return bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringCallsCount > 0\n    }\n    var bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringReceivedArguments: (x: (any StubProtocol)?, y: (any StubProtocol)?, z: any StubProtocol)?\n    var bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringReceivedInvocations: [(x: (any StubProtocol)?, y: (any StubProtocol)?, z: any StubProtocol)] = []\n    var bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringReturnValue: String!\n    var bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringClosure: (((any StubProtocol)?, (any StubProtocol)?, any StubProtocol) async -> String)?\n\n    func b(x: (some StubProtocol)?, y: (some StubProtocol)!, z: some StubProtocol) async -> String {\n        bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringCallsCount += 1\n        bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringReceivedArguments = (x: x, y: y, z: z)\n        bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringReceivedInvocations.append((x: x, y: y, z: z))\n        if let bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringClosure = bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringClosure {\n            return await bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringClosure(x, y, z)\n        } else {\n            return bXSomeStubProtocolYSomeStubProtocolZSomeStubProtocolStringReturnValue\n        }\n    }\n\n    //MARK: - someConfusingFuncName\n\n    var someConfusingFuncNameXSomeStubProtocolVoidCallsCount = 0\n    var someConfusingFuncNameXSomeStubProtocolVoidCalled: Bool {\n        return someConfusingFuncNameXSomeStubProtocolVoidCallsCount > 0\n    }\n    var someConfusingFuncNameXSomeStubProtocolVoidReceivedX: (any StubProtocol)?\n    var someConfusingFuncNameXSomeStubProtocolVoidReceivedInvocations: [(any StubProtocol)] = []\n    var someConfusingFuncNameXSomeStubProtocolVoidClosure: ((any StubProtocol) -> Void)?\n\n    func someConfusingFuncName(x: some StubProtocol) {\n        someConfusingFuncNameXSomeStubProtocolVoidCallsCount += 1\n        someConfusingFuncNameXSomeStubProtocolVoidReceivedX = x\n        someConfusingFuncNameXSomeStubProtocolVoidReceivedInvocations.append(x)\n        someConfusingFuncNameXSomeStubProtocolVoidClosure?(x)\n    }\n\n    //MARK: - c\n\n    var cSomeConfusingArgumentNameSomeStubProtocolVoidCallsCount = 0\n    var cSomeConfusingArgumentNameSomeStubProtocolVoidCalled: Bool {\n        return cSomeConfusingArgumentNameSomeStubProtocolVoidCallsCount > 0\n    }\n    var cSomeConfusingArgumentNameSomeStubProtocolVoidReceivedSomeConfusingArgumentName: (any StubProtocol)?\n    var cSomeConfusingArgumentNameSomeStubProtocolVoidReceivedInvocations: [(any StubProtocol)] = []\n    var cSomeConfusingArgumentNameSomeStubProtocolVoidClosure: ((any StubProtocol) -> Void)?\n\n    func c(someConfusingArgumentName: some StubProtocol) {\n        cSomeConfusingArgumentNameSomeStubProtocolVoidCallsCount += 1\n        cSomeConfusingArgumentNameSomeStubProtocolVoidReceivedSomeConfusingArgumentName = someConfusingArgumentName\n        cSomeConfusingArgumentNameSomeStubProtocolVoidReceivedInvocations.append(someConfusingArgumentName)\n        cSomeConfusingArgumentNameSomeStubProtocolVoidClosure?(someConfusingArgumentName)\n    }\n\n    //MARK: - d\n\n    var dXSomeStubWithSomeNameProtocolVoidCallsCount = 0\n    var dXSomeStubWithSomeNameProtocolVoidCalled: Bool {\n        return dXSomeStubWithSomeNameProtocolVoidCallsCount > 0\n    }\n    var dXSomeStubWithSomeNameProtocolVoidReceivedX: (any StubWithSomeNameProtocol)?\n    var dXSomeStubWithSomeNameProtocolVoidReceivedInvocations: [(any StubWithSomeNameProtocol)?] = []\n    var dXSomeStubWithSomeNameProtocolVoidClosure: (((any StubWithSomeNameProtocol)?) -> Void)?\n\n    func d(_ x: (some StubWithSomeNameProtocol)?) {\n        dXSomeStubWithSomeNameProtocolVoidCallsCount += 1\n        dXSomeStubWithSomeNameProtocolVoidReceivedX = x\n        dXSomeStubWithSomeNameProtocolVoidReceivedInvocations.append(x)\n        dXSomeStubWithSomeNameProtocolVoidClosure?(x)\n    }\n\n\n}\nclass StaticMethodProtocolMock: StaticMethodProtocol {\n\n\n\n    static func reset()\n    {\n         //MARK: - staticFunction\n        staticFunctionStringStringCallsCount = 0\n        staticFunctionStringStringReceived = nil\n        staticFunctionStringStringReceivedInvocations = []\n        staticFunctionStringStringClosure = nil\n\n\n    }\n\n    //MARK: - staticFunction\n\n    static var staticFunctionStringStringCallsCount = 0\n    static var staticFunctionStringStringCalled: Bool {\n        return staticFunctionStringStringCallsCount > 0\n    }\n    static var staticFunctionStringStringReceived: (String)?\n    static var staticFunctionStringStringReceivedInvocations: [(String)] = []\n    static var staticFunctionStringStringReturnValue: String!\n    static var staticFunctionStringStringClosure: ((String) -> String)?\n\n    static func staticFunction(_ arg0: String) -> String {\n        staticFunctionStringStringCallsCount += 1\n        staticFunctionStringStringReceived = arg0\n        staticFunctionStringStringReceivedInvocations.append(arg0)\n        if let staticFunctionStringStringClosure = staticFunctionStringStringClosure {\n            return staticFunctionStringStringClosure(arg0)\n        } else {\n            return staticFunctionStringStringReturnValue\n        }\n    }\n\n\n}\nclass SubscriptProtocolMock: SubscriptProtocol {\n\n\n\n\n\n    //MARK: - Subscript #1\n    subscript(arg: Int) -> String {\n        get { fatalError(\"Subscripts are not fully supported yet\") }\n        set { fatalError(\"Subscripts are not fully supported yet\") }\n    }\n    //MARK: - Subscript #2\n    subscript<T>(arg: T) -> Int {\n        get { fatalError(\"Subscripts are not fully supported yet\") }\n    }\n    //MARK: - Subscript #3\n    subscript<T>(arg: T) -> String {\n        get async { fatalError(\"Subscripts are not fully supported yet\") }\n    }\n    //MARK: - Subscript #4\n    subscript<T: Hashable>(arg: T) -> T? {\n        get { fatalError(\"Subscripts are not fully supported yet\") }\n        set { fatalError(\"Subscripts are not fully supported yet\") }\n    }\n    //MARK: - Subscript #5\n    subscript<T>(arg: String) -> T? where T : Cancellable {\n        get throws { fatalError(\"Subscripts are not fully supported yet\") }\n    }\n    //MARK: - Subscript #6\n    subscript<T>(arg2: String) -> T {\n        get throws(CustomError) { fatalError(\"Subscripts are not fully supported yet\") }\n    }\n}\nclass TestProtocolMock<\n    Value: Sequence,\n    Value3: Collection,\n    Value5: Sequence,\n    Value6: Sequence>: TestProtocol\n    where Value.Element : Collection,Value.Element : Hashable,Value.Element : Comparable,Value3.Element == String,Value5.Element == Int,Value6.Element == Int,Value6.Element : Hashable,Value6.Element : Comparable {\n    typealias Value2 = Int\n\n\n\n\n    //MARK: - getValue\n\n    var getValueSequenceCallsCount = 0\n    var getValueSequenceCalled: Bool {\n        return getValueSequenceCallsCount > 0\n    }\n    var getValueSequenceReturnValue: Value!\n    var getValueSequenceClosure: (() -> Value)?\n\n    func getValue() -> Value {\n        getValueSequenceCallsCount += 1\n        if let getValueSequenceClosure = getValueSequenceClosure {\n            return getValueSequenceClosure()\n        } else {\n            return getValueSequenceReturnValue\n        }\n    }\n\n    //MARK: - getValue2\n\n    var getValue2Value2CallsCount = 0\n    var getValue2Value2Called: Bool {\n        return getValue2Value2CallsCount > 0\n    }\n    var getValue2Value2ReturnValue: Value2!\n    var getValue2Value2Closure: (() -> Value2)?\n\n    func getValue2() -> Value2 {\n        getValue2Value2CallsCount += 1\n        if let getValue2Value2Closure = getValue2Value2Closure {\n            return getValue2Value2Closure()\n        } else {\n            return getValue2Value2ReturnValue\n        }\n    }\n\n    //MARK: - getValue3\n\n    var getValue3CollectionCallsCount = 0\n    var getValue3CollectionCalled: Bool {\n        return getValue3CollectionCallsCount > 0\n    }\n    var getValue3CollectionReturnValue: Value3!\n    var getValue3CollectionClosure: (() -> Value3)?\n\n    func getValue3() -> Value3 {\n        getValue3CollectionCallsCount += 1\n        if let getValue3CollectionClosure = getValue3CollectionClosure {\n            return getValue3CollectionClosure()\n        } else {\n            return getValue3CollectionReturnValue\n        }\n    }\n\n    //MARK: - getValue5\n\n    var getValue5SequenceCallsCount = 0\n    var getValue5SequenceCalled: Bool {\n        return getValue5SequenceCallsCount > 0\n    }\n    var getValue5SequenceReturnValue: Value5!\n    var getValue5SequenceClosure: (() -> Value5)?\n\n    func getValue5() -> Value5 {\n        getValue5SequenceCallsCount += 1\n        if let getValue5SequenceClosure = getValue5SequenceClosure {\n            return getValue5SequenceClosure()\n        } else {\n            return getValue5SequenceReturnValue\n        }\n    }\n\n    //MARK: - getValue6\n\n    var getValue6SequenceCallsCount = 0\n    var getValue6SequenceCalled: Bool {\n        return getValue6SequenceCallsCount > 0\n    }\n    var getValue6SequenceReturnValue: Value6!\n    var getValue6SequenceClosure: (() -> Value6)?\n\n    func getValue6() -> Value6 {\n        getValue6SequenceCallsCount += 1\n        if let getValue6SequenceClosure = getValue6SequenceClosure {\n            return getValue6SequenceClosure()\n        } else {\n            return getValue6SequenceReturnValue\n        }\n    }\n\n\n}\nclass ThrowableProtocolMock: ThrowableProtocol {\n\n\n\n\n    //MARK: - doOrThrow\n\n    var doOrThrowStringThrowableError: (any Error)?\n    var doOrThrowStringCallsCount = 0\n    var doOrThrowStringCalled: Bool {\n        return doOrThrowStringCallsCount > 0\n    }\n    var doOrThrowStringReturnValue: String!\n    var doOrThrowStringClosure: (() throws -> String)?\n\n    func doOrThrow() throws -> String {\n        doOrThrowStringCallsCount += 1\n        if let error = doOrThrowStringThrowableError {\n            throw error\n        }\n        if let doOrThrowStringClosure = doOrThrowStringClosure {\n            return try doOrThrowStringClosure()\n        } else {\n            return doOrThrowStringReturnValue\n        }\n    }\n\n    //MARK: - doOrThrowVoid\n\n    var doOrThrowVoidVoidThrowableError: (any Error)?\n    var doOrThrowVoidVoidCallsCount = 0\n    var doOrThrowVoidVoidCalled: Bool {\n        return doOrThrowVoidVoidCallsCount > 0\n    }\n    var doOrThrowVoidVoidClosure: (() throws -> Void)?\n\n    func doOrThrowVoid() throws {\n        doOrThrowVoidVoidCallsCount += 1\n        if let error = doOrThrowVoidVoidThrowableError {\n            throw error\n        }\n        try doOrThrowVoidVoidClosure?()\n    }\n\n\n}\nclass ThrowingVariablesProtocolMock: ThrowingVariablesProtocol {\n\n\n    var titleCallsCount = 0\n    var titleCalled: Bool {\n        return titleCallsCount > 0\n    }\n\n    var title: String? {\n        get throws {\n            titleCallsCount += 1\n            if let error = titleThrowableError {\n                throw error\n            }\n            if let titleClosure = titleClosure {\n                return try titleClosure()\n            } else {\n                return underlyingTitle\n            }\n        }\n    }\n    var underlyingTitle: String?\n    var titleThrowableError: Error?\n    var titleClosure: (() throws -> String?)?\n    var firstNameCallsCount = 0\n    var firstNameCalled: Bool {\n        return firstNameCallsCount > 0\n    }\n\n    var firstName: String {\n        get throws {\n            firstNameCallsCount += 1\n            if let error = firstNameThrowableError {\n                throw error\n            }\n            if let firstNameClosure = firstNameClosure {\n                return try firstNameClosure()\n            } else {\n                return underlyingFirstName\n            }\n        }\n    }\n    var underlyingFirstName: String!\n    var firstNameThrowableError: Error?\n    var firstNameClosure: (() throws -> String)?\n\n\n\n}\nclass TypedThrowableProtocolMock: TypedThrowableProtocol {\n\n\n    var valueCallsCount = 0\n    var valueCalled: Bool {\n        return valueCallsCount > 0\n    }\n\n    var value: Int {\n        get throws(CustomError) {\n            valueCallsCount += 1\n            if let error = valueThrowableError {\n                throw error\n            }\n            if let valueClosure = valueClosure {\n                return try valueClosure()\n            } else {\n                return underlyingValue\n            }\n        }\n    }\n    var underlyingValue: Int!\n    var valueThrowableError: (CustomError)?\n    var valueClosure: (() throws(CustomError) -> Int)?\n    var valueAnyErrorCallsCount = 0\n    var valueAnyErrorCalled: Bool {\n        return valueAnyErrorCallsCount > 0\n    }\n\n    var valueAnyError: Int {\n        get throws(any Error) {\n            valueAnyErrorCallsCount += 1\n            if let error = valueAnyErrorThrowableError {\n                throw error\n            }\n            if let valueAnyErrorClosure = valueAnyErrorClosure {\n                return try valueAnyErrorClosure()\n            } else {\n                return underlyingValueAnyError\n            }\n        }\n    }\n    var underlyingValueAnyError: Int!\n    var valueAnyErrorThrowableError: (any Error)?\n    var valueAnyErrorClosure: (() throws(any Error) -> Int)?\n    var valueThrowsNever: Int {\n        get { return underlyingValueThrowsNever }\n        set(value) { underlyingValueThrowsNever = value }\n    }\n    var underlyingValueThrowsNever: (Int)!\n\n\n    //MARK: - init\n\n    var initTypedThrowableProtocolThrowableError: (CustomError)?\n    var initTypedThrowableProtocolClosure: (() throws(CustomError) -> Void)?\n\n    required init() {\n        initTypedThrowableProtocolClosure?()\n    }\n    //MARK: - init<E>\n\n\n    required init<E>(init2: Void) {\n        fatalError(\"Generic typed throws in inits are not fully supported yet\")\n    }\n    //MARK: - doOrThrow\n\n    var doOrThrowStringThrowableError: (CustomError)?\n    var doOrThrowStringCallsCount = 0\n    var doOrThrowStringCalled: Bool {\n        return doOrThrowStringCallsCount > 0\n    }\n    var doOrThrowStringReturnValue: String!\n    var doOrThrowStringClosure: (() throws(CustomError) -> String)?\n\n    func doOrThrow() throws(CustomError) -> String {\n        doOrThrowStringCallsCount += 1\n        if let error = doOrThrowStringThrowableError {\n            throw error\n        }\n        if let doOrThrowStringClosure = doOrThrowStringClosure {\n            return try doOrThrowStringClosure()\n        } else {\n            return doOrThrowStringReturnValue\n        }\n    }\n\n    //MARK: - doOrThrowAnyError\n\n    var doOrThrowAnyErrorVoidThrowableError: (any Error)?\n    var doOrThrowAnyErrorVoidCallsCount = 0\n    var doOrThrowAnyErrorVoidCalled: Bool {\n        return doOrThrowAnyErrorVoidCallsCount > 0\n    }\n    var doOrThrowAnyErrorVoidClosure: (() throws(any Error) -> Void)?\n\n    func doOrThrowAnyError() throws(any Error) {\n        doOrThrowAnyErrorVoidCallsCount += 1\n        if let error = doOrThrowAnyErrorVoidThrowableError {\n            throw error\n        }\n        try doOrThrowAnyErrorVoidClosure?()\n    }\n\n    //MARK: - doOrThrowNever\n\n    var doOrThrowNeverVoidCallsCount = 0\n    var doOrThrowNeverVoidCalled: Bool {\n        return doOrThrowNeverVoidCallsCount > 0\n    }\n    var doOrThrowNeverVoidClosure: (() -> Void)?\n\n    func doOrThrowNever() {\n        doOrThrowNeverVoidCallsCount += 1\n        doOrThrowNeverVoidClosure?()\n    }\n\n    //MARK: - doOrRethrows<E>\n\n\n    func doOrRethrows<E>(_ block: () throws(E) -> Void) throws(E) -> Int where E: Error {\n        fatalError(\"Generic typed throws are not fully supported yet\")\n    }\n\n\n}\nclass VariablesProtocolMock: VariablesProtocol {\n\n\n    var company: String?\n    var name: String {\n        get { return underlyingName }\n        set(value) { underlyingName = value }\n    }\n    var underlyingName: (String)!\n    var age: Int {\n        get { return underlyingAge }\n        set(value) { underlyingAge = value }\n    }\n    var underlyingAge: (Int)!\n    var kids: [String] = []\n    var universityMarks: [String: Int] = [:]\n\n\n\n}\n"
  },
  {
    "path": "Templates/Tests/Generated/LinuxMain.generated.swift",
    "content": "// Generated using Sourcery 1.3.0 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\nimport XCTest\n\nextension AutoInjectionTests {\n  static var allTests: [(String, (AutoInjectionTests) -> () throws -> Void)] = [\n    (\"testThatItResolvesAutoInjectedDependencies\", testThatItResolvesAutoInjectedDependencies),\n    (\"testThatItDoesntResolveAutoInjectedDependencies\", testThatItDoesntResolveAutoInjectedDependencies)\n  ]\n}\nextension AutoWiringTests {\n  static var allTests: [(String, (AutoWiringTests) -> () throws -> Void)] = [\n    (\"testThatItCanResolveWithAutoWiring\", testThatItCanResolveWithAutoWiring),\n    (\"testThatItCanNotResolveWithAutoWiring\", testThatItCanNotResolveWithAutoWiring)\n  ]\n}\n\n// swiftlint:disable trailing_comma\nXCTMain([\n  testCase(AutoInjectionTests.allTests),\n  testCase(AutoWiringTests.allTests),\n])\n// swiftlint:enable trailing_comma\n\n"
  },
  {
    "path": "Templates/Tests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Templates/Tests/TemplatesTests.swift",
    "content": "import Foundation\nimport Quick\nimport Nimble\n#if SWIFT_PACKAGE\nimport PathKit\n#endif\n\nclass TemplatesTests: QuickSpec {\n    #if SWIFT_PACKAGE || os(Linux)\n    override class func setUp() {\n        super.setUp()\n\n        generateFiles()\n    }\n    #endif\n\n    private static func generateFiles() {\n        print(\"Generating sources...\", terminator: \" \")\n\n        let buildDir: Path\n        // Xcode + SPM\n        if let xcTestBundlePath = ProcessInfo.processInfo.environment[\"XCTestBundlePath\"] {\n            buildDir = Path(xcTestBundlePath).parent()\n        } else {\n            // SPM only\n            buildDir = Path(Bundle.module.bundlePath).parent()\n        }\n        let sourcery = buildDir + \"sourcery\"\n\n        let resources = Bundle.module.resourcePath!\n\n        let outputDirectory = Path(resources) + \"Generated\"\n        if outputDirectory.exists {\n            do {\n                try outputDirectory.delete()\n            } catch {\n                print(error)\n            }\n        }\n        #if canImport(ObjectiveC)\n        let contextSources = \"\\(resources)/Context\"\n        #else\n        let contextSources = \"\\(resources)/Context_Linux\"\n        #endif\n        var output: String?\n        buildDir.chdir {\n            output = launch(\n                sourceryPath: sourcery,\n                args: [\n                    \"--sources\",\n                    contextSources,\n                    \"--templates\",\n                    \"\\(resources)/Templates\",\n                    \"--output\",\n                    \"\\(resources)/Generated\",\n                    \"--disableCache\",\n                    \"--verbose\"\n                ]\n            )\n        }\n\n        if let output = output {\n            print(output)\n        } else {\n            print(\"Done!\")\n        }\n    }\n\n    override func spec() {\n        func check(template name: String) {\n            guard let generatedFilePath = path(forResource: \"\\(name).generated\", ofType: \"swift\", in: \"Generated\") else {\n                fatalError(\"Template \\(name) can not be checked as the generated file is not presented in the bundle\")\n            }\n            guard let expectedFilePath = path(forResource: name, ofType: \"expected\", in: \"Expected\") else {\n                fatalError(\"Template \\(name) can not be checked as the expected file is not presented in the bundle\")\n            }\n            guard let generatedFileString = try? String(contentsOfFile: generatedFilePath) else {\n                fatalError(\"Template \\(name) can not be checked as the generated file can not be read\")\n            }\n            guard let expectedFileString = try? String(contentsOfFile: expectedFilePath) else {\n                fatalError(\"Template \\(name) can not be checked as the expected file can not be read\")\n            }\n\n            let generatedFileLines = generatedFileString.components(separatedBy: .newlines)\n            let expectedFileLines = expectedFileString.components(separatedBy: .newlines)\n\n            /// String normalization.\n            ///  Transformations:\n            ///  * Trim all whitespaces, tabs and new lines.\n            ///  * If this line is comment (starts with `//`) treat is as an empty line.\n            let normalizeString: (String) -> String = {\n              let string = $0.trimmingCharacters(in: .whitespacesAndNewlines)\n              if string.hasPrefix(\"//\") {\n                return \"\"\n              }\n              return string\n            }\n\n            // Allow test to produce all failures. So the diff is clearly visible.\n            self.continueAfterFailure = true\n\n            // Get the full diff.\n            let diff: CollectionDifference<String> = generatedFileLines.difference(from: expectedFileLines) {\n                normalizeString($0) == normalizeString($1)\n            }\n\n          let expectedFileName = (expectedFilePath as NSString).lastPathComponent\n            for diffLine in diff {\n                switch diffLine {\n                case let .insert(offset: offset, element: element, associatedWith: _) where !normalizeString(element).isEmpty:\n                    fail(\"Missing line in \\(expectedFileName):\\(offset):\\n\\(element)\")\n                case let .remove(offset: offset, element: element, associatedWith: _) where !normalizeString(element).isEmpty:\n                    fail(\"Unexpected line in \\(expectedFileName):\\(offset):\\n\\(element)\")\n                default:\n                  continue\n                }\n            }\n        }\n\n#if !canImport(ObjectiveC)\n        beforeSuite {\n            TemplatesTests.generateFiles()\n        }\n#endif\n\n        describe(\"AutoCases template\") {\n            it(\"generates expected code\") {\n                check(template: \"AutoCases\")\n            }\n        }\n\n        describe(\"AutoEquatable template\") {\n            it(\"generates expected code\") {\n                check(template: \"AutoEquatable\")\n            }\n        }\n\n        describe(\"AutoHashable template\") {\n            it(\"generates expected code\") {\n                check(template: \"AutoHashable\")\n            }\n        }\n\n        describe(\"AutoLenses template\") {\n            it(\"generates expected code\") {\n                check(template: \"AutoLenses\")\n            }\n        }\n\n        describe(\"AutoMockable template\") {\n            it(\"generates expected code\") {\n                check(template: \"AutoMockable\")\n            }\n        }\n\n        describe(\"LinuxMain template\") {\n            it(\"generates expected code\") {\n                check(template: \"LinuxMain\")\n            }\n        }\n#if canImport(ObjectiveC)\n        describe(\"AutoCodable template\") {\n            it(\"generates expected code\") {\n                check(template: \"AutoCodable\")\n            }\n        }\n#endif\n    }\n\n    private func path(forResource name: String, ofType ext: String, in dirName: String) -> String? {\n        #if SWIFT_PACKAGE\n        if let resources = Bundle.module.resourcePath {\n            return resources + \"/\\(dirName)/\\(name).\\(ext)\"\n        }\n        return nil\n        #else\n        let bundle = Bundle.init(for: type(of: self))\n        return bundle.path(forResource: name, ofType: ext)\n        #endif\n    }\n\n    #if SWIFT_PACKAGE\n    private static func launch(sourceryPath: Path, args: [String]) -> String? {\n        let process = Process()\n        let output = Pipe()\n\n        process.launchPath = sourceryPath.string\n        process.arguments = args\n        process.standardOutput = output\n        do {\n            try process.run()\n            process.waitUntilExit()\n\n            if process.terminationStatus == 0 {\n                return nil\n            }\n\n            return String(data: output.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8)\n        } catch {\n            return \"error: can't run Sourcery from the \\(sourceryPath.parent().string)\"\n        }\n    }\n    #endif\n}\n"
  },
  {
    "path": "Templates/artifactbundle.info.json.template",
    "content": "{\n    \"schemaVersion\": \"1.0\",\n    \"artifacts\": {\n        \"sourcery\": {\n            \"type\": \"executable\",\n            \"version\": \"VERSION\",\n            \"variants\": [\n                {\n                    \"path\": \"sourcery/bin/sourcery\",\n                    \"supportedTriples\": [\"x86_64-apple-macosx\", \"arm64-apple-macosx\"]\n                },\n            ]\n        }\n    }\n}\n"
  },
  {
    "path": "TryCatch/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2019 Pixle. All rights reserved.</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "TryCatch/TryCatch.m",
    "content": "//\n//  SwiftTryCatch.h\n//\n//  Created by William Falcon on 10/10/14.\n//  Copyright (c) 2014 William Falcon. All rights reserved.\n//\n/*\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\n\n\n#import \"TryCatch.h\"\n\n@implementation SwiftTryCatch\n\n/**\n Provides try catch functionality for swift by wrapping around Objective-C\n */\n+ (void)tryBlock:(void(^)(void))tryBlock catchBlock:(void(^)(NSException*exception))catchBlock finallyBlock:(void(^)(void))finallyBlock {\n    @try {\n        tryBlock ? tryBlock() : nil;\n    }\n    \n    @catch (NSException *exception) {\n        catchBlock ? catchBlock(exception) : nil;\n    }\n    @finally {\n        finallyBlock ? finallyBlock() : nil;\n    }\n}\n\n+ (void)throwString:(NSString*)s\n{\n\t@throw [NSException exceptionWithName:s reason:s userInfo:nil];\n}\n\n+ (void)throwException:(NSException*)e\n{\n\t@throw e;\n}\n\n@end\n"
  },
  {
    "path": "TryCatch/include/TryCatch.h",
    "content": "//\n//  SwiftTryCatch.h\n//\n//  Created by William Falcon on 10/10/14.\n//  Copyright (c) 2014 William Falcon. All rights reserved.\n//\n/*\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\n\n#import <Foundation/Foundation.h>\n\n@interface SwiftTryCatch : NSObject\n\n/**\n Provides try catch functionality for swift by wrapping around Objective-C\n */\n+ (void)tryBlock:(void(^)(void))tryBlock catchBlock:(void(^)(NSException*exception))catchBlock finallyBlock:(void(^)(void))finallyBlock;\n+ (void)throwString:(NSString*)s;\n+ (void)throwException:(NSException*)e;\n@end\n"
  },
  {
    "path": "docs/Classes/Actor.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Actor Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/Actor\" class=\"dashAnchor\"></a>\n    <a title=\"Actor Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Actor Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Actor</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objc</span><span class=\"p\">(</span><span class=\"kt\">SwiftActor</span><span class=\"p\">)</span>\n<span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Actor</span> <span class=\"p\">:</span> <span class=\"k\">Type</span></code></pre>\n\n                </div>\n              </div>\n            <p>Descibes Swift actor</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftActor(cpy)kind\"></a>\n                    <a name=\"//apple_ref/swift/Variable/kind\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftActor(cpy)kind\">kind</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"k\">var</span> <span class=\"nv\">kind</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftActor(py)kind\"></a>\n                    <a name=\"//apple_ref/swift/Property/kind\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftActor(py)kind\">kind</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Returns &ldquo;actor&rdquo;</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">override</span> <span class=\"k\">var</span> <span class=\"nv\">kind</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftActor(py)isFinal\"></a>\n                    <a name=\"//apple_ref/swift/Property/isFinal\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftActor(py)isFinal\">isFinal</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is final</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isFinal</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftActor(py)isDistributed\"></a>\n                    <a name=\"//apple_ref/swift/Property/isDistributed\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftActor(py)isDistributed\">isDistributed</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is distributed method</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isDistributed</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftActor(im)diffAgainst:\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftActor(im)diffAgainst:\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">override</span> <span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/ArrayType.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>ArrayType Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/ArrayType\" class=\"dashAnchor\"></a>\n    <a title=\"ArrayType Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        ArrayType Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>ArrayType</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">ArrayType</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">ArrayType</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes array type</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ArrayType(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ArrayType(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name used in declaration</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ArrayType(py)elementTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/elementTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ArrayType(py)elementTypeName\">elementTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Array element type name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">elementTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ArrayType(py)elementType\"></a>\n                    <a name=\"//apple_ref/swift/Property/elementType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ArrayType(py)elementType\">elementType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Array element type, if known</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">elementType</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ArrayType(py)asGeneric\"></a>\n                    <a name=\"//apple_ref/swift/Property/asGeneric\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ArrayType(py)asGeneric\">asGeneric</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Returns array as generic type</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asGeneric</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/GenericType.html\">GenericType</a></span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ArrayType(py)asSource\"></a>\n                    <a name=\"//apple_ref/swift/Property/asSource\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ArrayType(py)asSource\">asSource</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asSource</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/AssociatedType.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>AssociatedType Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/AssociatedType\" class=\"dashAnchor\"></a>\n    <a title=\"AssociatedType Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        AssociatedType Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>AssociatedType</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">AssociatedType</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">AssociatedType</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes Swift AssociatedType</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)AssociatedType(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)AssociatedType(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Associated type name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)AssociatedType(py)typeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/typeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)AssociatedType(py)typeName\">typeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Associated type type constraint name, if specified</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">typeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)AssociatedType(py)type\"></a>\n                    <a name=\"//apple_ref/swift/Property/type\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)AssociatedType(py)type\">type</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Associated type constrained type, if known, i.e. if the type is declared in the scanned sources.</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">type</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)AssociatedType(im)diffAgainst:\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)AssociatedType(im)diffAgainst:\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/AssociatedValue.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>AssociatedValue Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/AssociatedValue\" class=\"dashAnchor\"></a>\n    <a title=\"AssociatedValue Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        AssociatedValue Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>AssociatedValue</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">AssociatedValue</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\">AutoDescription</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Typed.html\">Typed</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Annotated.html\">Annotated</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">AssociatedValue</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Defines enum case associated value</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)localName\"></a>\n                    <a name=\"//apple_ref/swift/Property/localName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)localName\">localName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Associated value local name.\nThis is a name to be used to construct enum case value</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">localName</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)externalName\"></a>\n                    <a name=\"//apple_ref/swift/Property/externalName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)externalName\">externalName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Associated value external name.\nThis is a name to be used to access value in value-bindig</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">externalName</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)typeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/typeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)typeName\">typeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Associated value type name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">typeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)type\"></a>\n                    <a name=\"//apple_ref/swift/Property/type\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)type\">type</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Associated value type, if known</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">type</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)defaultValue\"></a>\n                    <a name=\"//apple_ref/swift/Property/defaultValue\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)defaultValue\">defaultValue</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Associated value default value</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">defaultValue</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)annotations\"></a>\n                    <a name=\"//apple_ref/swift/Property/annotations\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)annotations\">annotations</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Annotations, that were created with // sourcery: annotation1, other = &ldquo;annotation value&rdquo;, alterantive = 2</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">annotations</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isOptional\"></a>\n                    <a name=\"//apple_ref/swift/Property/isOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isOptional\">isOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is optional. Shorthand for <code>typeName.isOptional</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isImplicitlyUnwrappedOptional\"></a>\n                    <a name=\"//apple_ref/swift/Property/isImplicitlyUnwrappedOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isImplicitlyUnwrappedOptional\">isImplicitlyUnwrappedOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is implicitly unwrapped optional. Shorthand for <code>typeName.isImplicitlyUnwrappedOptional</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isImplicitlyUnwrappedOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)unwrappedTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/unwrappedTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)unwrappedTypeName\">unwrappedTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name without attributes and optional type information. Shorthand for <code>typeName.unwrappedTypeName</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">unwrappedTypeName</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)actualTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/actualTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)actualTypeName\">actualTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Actual type name if declaration uses typealias, otherwise just a <code><a href=\"../Classes/AssociatedValue.html#/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)typeName\">typeName</a></code>. Shorthand for <code>typeName.actualTypeName</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">actualTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isTuple\"></a>\n                    <a name=\"//apple_ref/swift/Property/isTuple\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isTuple\">isTuple</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a tuple. Shorthand for <code>typeName.isTuple</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isTuple</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isClosure\"></a>\n                    <a name=\"//apple_ref/swift/Property/isClosure\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isClosure\">isClosure</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a closure. Shorthand for <code>typeName.isClosure</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isClosure</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isArray\"></a>\n                    <a name=\"//apple_ref/swift/Property/isArray\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isArray\">isArray</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is an array. Shorthand for <code>typeName.isArray</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isArray</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isSet\"></a>\n                    <a name=\"//apple_ref/swift/Property/isSet\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isSet\">isSet</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a set. Shorthand for <code>typeName.isSet</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isSet</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isDictionary\"></a>\n                    <a name=\"//apple_ref/swift/Property/isDictionary\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isDictionary\">isDictionary</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a dictionary. Shorthand for <code>typeName.isDictionary</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isDictionary</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/Attribute.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Attribute Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/Attribute\" class=\"dashAnchor\"></a>\n    <a title=\"Attribute Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Attribute Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Attribute</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"kt\">Attribute</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">AutoCoding</span><span class=\"p\">,</span> <span class=\"kt\">AutoEquatable</span><span class=\"p\">,</span> <span class=\"kt\">AutoDiffable</span><span class=\"p\">,</span> <span class=\"kt\">AutoJSExport</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Attribute</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes Swift attribute</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Attribute(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Attribute(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Attribute name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Attribute(py)arguments\"></a>\n                    <a name=\"//apple_ref/swift/Property/arguments\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Attribute(py)arguments\">arguments</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Attribute arguments</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">arguments</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\">String</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Attribute(py)asSource\"></a>\n                    <a name=\"//apple_ref/swift/Property/asSource\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Attribute(py)asSource\">asSource</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>TODO: unify <code>asSource</code> / <code><a href=\"../Classes/Attribute.html#/c:@M@SourceryRuntime@objc(cs)Attribute(py)description\">description</a></code>?</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asSource</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Attribute(py)description\"></a>\n                    <a name=\"//apple_ref/swift/Property/description\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Attribute(py)description\">description</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Attribute description that can be used in a template.</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">override</span> <span class=\"k\">var</span> <span class=\"nv\">description</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/Class.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Class Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/Class\" class=\"dashAnchor\"></a>\n    <a title=\"Class Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Class Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Class</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objc</span><span class=\"p\">(</span><span class=\"kt\">SwiftClass</span><span class=\"p\">)</span>\n<span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Class</span> <span class=\"p\">:</span> <span class=\"k\">Type</span></code></pre>\n\n                </div>\n              </div>\n            <p>Descibes Swift class</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftClass(cpy)kind\"></a>\n                    <a name=\"//apple_ref/swift/Variable/kind\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftClass(cpy)kind\">kind</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"k\">var</span> <span class=\"nv\">kind</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftClass(py)kind\"></a>\n                    <a name=\"//apple_ref/swift/Property/kind\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftClass(py)kind\">kind</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Returns &ldquo;class&rdquo;</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">override</span> <span class=\"k\">var</span> <span class=\"nv\">kind</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftClass(py)isFinal\"></a>\n                    <a name=\"//apple_ref/swift/Property/isFinal\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftClass(py)isFinal\">isFinal</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is final</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isFinal</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftClass(im)diffAgainst:\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftClass(im)diffAgainst:\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">override</span> <span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/ClosureParameter.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>ClosureParameter Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/ClosureParameter\" class=\"dashAnchor\"></a>\n    <a title=\"ClosureParameter Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        ClosureParameter Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>ClosureParameter</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">ClosureParameter</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Typed.html\">Typed</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Annotated.html\">Annotated</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">ClosureParameter</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            \n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)argumentLabel\"></a>\n                    <a name=\"//apple_ref/swift/Property/argumentLabel\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)argumentLabel\">argumentLabel</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Parameter external name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">argumentLabel</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Parameter internal name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)typeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/typeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)typeName\">typeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Parameter type name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">typeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)inout\"></a>\n                    <a name=\"//apple_ref/swift/Property/inout\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)inout\">inout</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Parameter flag whether it&rsquo;s inout or not</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">let</span> <span class=\"p\">`</span><span class=\"nv\">inout</span><span class=\"p\">`:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)type\"></a>\n                    <a name=\"//apple_ref/swift/Property/type\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)type\">type</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Parameter type, if known</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">type</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)isVariadic\"></a>\n                    <a name=\"//apple_ref/swift/Property/isVariadic\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)isVariadic\">isVariadic</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Parameter if the argument has a variadic type or not</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">isVariadic</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)typeAttributes\"></a>\n                    <a name=\"//apple_ref/swift/Property/typeAttributes\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)typeAttributes\">typeAttributes</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Parameter type attributes, i.e. <code>@escaping</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">typeAttributes</span><span class=\"p\">:</span> <span class=\"kt\">AttributeList</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)defaultValue\"></a>\n                    <a name=\"//apple_ref/swift/Property/defaultValue\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)defaultValue\">defaultValue</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Method parameter default value expression</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">defaultValue</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)annotations\"></a>\n                    <a name=\"//apple_ref/swift/Property/annotations\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)annotations\">annotations</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Annotations, that were created with // sourcery: annotation1, other = &ldquo;annotation value&rdquo;, alterantive = 2</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">annotations</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)asSource\"></a>\n                    <a name=\"//apple_ref/swift/Property/asSource\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)asSource\">asSource</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asSource</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isOptional\"></a>\n                    <a name=\"//apple_ref/swift/Property/isOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isOptional\">isOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is optional. Shorthand for <code>typeName.isOptional</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isImplicitlyUnwrappedOptional\"></a>\n                    <a name=\"//apple_ref/swift/Property/isImplicitlyUnwrappedOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isImplicitlyUnwrappedOptional\">isImplicitlyUnwrappedOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is implicitly unwrapped optional. Shorthand for <code>typeName.isImplicitlyUnwrappedOptional</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isImplicitlyUnwrappedOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)unwrappedTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/unwrappedTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)unwrappedTypeName\">unwrappedTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name without attributes and optional type information. Shorthand for <code>typeName.unwrappedTypeName</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">unwrappedTypeName</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)actualTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/actualTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)actualTypeName\">actualTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Actual type name if declaration uses typealias, otherwise just a <code><a href=\"../Classes/ClosureParameter.html#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)typeName\">typeName</a></code>. Shorthand for <code>typeName.actualTypeName</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">actualTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isTuple\"></a>\n                    <a name=\"//apple_ref/swift/Property/isTuple\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isTuple\">isTuple</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a tuple. Shorthand for <code>typeName.isTuple</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isTuple</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isClosure\"></a>\n                    <a name=\"//apple_ref/swift/Property/isClosure\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isClosure\">isClosure</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a closure. Shorthand for <code>typeName.isClosure</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isClosure</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isArray\"></a>\n                    <a name=\"//apple_ref/swift/Property/isArray\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isArray\">isArray</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is an array. Shorthand for <code>typeName.isArray</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isArray</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isSet\"></a>\n                    <a name=\"//apple_ref/swift/Property/isSet\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isSet\">isSet</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a set. Shorthand for <code>typeName.isSet</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isSet</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isDictionary\"></a>\n                    <a name=\"//apple_ref/swift/Property/isDictionary\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isDictionary\">isDictionary</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a dictionary. Shorthand for <code>typeName.isDictionary</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isDictionary</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/ClosureType.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>ClosureType Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/ClosureType\" class=\"dashAnchor\"></a>\n    <a title=\"ClosureType Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        ClosureType Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>ClosureType</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">ClosureType</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">ClosureType</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes closure type</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureType(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name used in declaration with stripped whitespaces and new lines</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureType(py)parameters\"></a>\n                    <a name=\"//apple_ref/swift/Property/parameters\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)parameters\">parameters</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>List of closure parameters</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">parameters</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureType(py)returnTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/returnTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)returnTypeName\">returnTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Return value type name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">returnTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureType(py)actualReturnTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/actualReturnTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)actualReturnTypeName\">actualReturnTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Actual return value type name if declaration uses typealias, otherwise just a <code><a href=\"../Classes/ClosureType.html#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)returnTypeName\">returnTypeName</a></code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">actualReturnTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureType(py)returnType\"></a>\n                    <a name=\"//apple_ref/swift/Property/returnType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)returnType\">returnType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Actual return value type, if known</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">returnType</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureType(py)isOptionalReturnType\"></a>\n                    <a name=\"//apple_ref/swift/Property/isOptionalReturnType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)isOptionalReturnType\">isOptionalReturnType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether return value type is optional</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isOptionalReturnType</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureType(py)isImplicitlyUnwrappedOptionalReturnType\"></a>\n                    <a name=\"//apple_ref/swift/Property/isImplicitlyUnwrappedOptionalReturnType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)isImplicitlyUnwrappedOptionalReturnType\">isImplicitlyUnwrappedOptionalReturnType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether return value type is implicitly unwrapped optional</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isImplicitlyUnwrappedOptionalReturnType</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureType(py)unwrappedReturnTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/unwrappedReturnTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)unwrappedReturnTypeName\">unwrappedReturnTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Return value type name without attributes and optional type information</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">unwrappedReturnTypeName</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureType(py)isAsync\"></a>\n                    <a name=\"//apple_ref/swift/Property/isAsync\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)isAsync\">isAsync</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is async method</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">isAsync</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureType(py)asyncKeyword\"></a>\n                    <a name=\"//apple_ref/swift/Property/asyncKeyword\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)asyncKeyword\">asyncKeyword</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>async keyword</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">asyncKeyword</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureType(py)throws\"></a>\n                    <a name=\"//apple_ref/swift/Property/throws\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)throws\">throws</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether closure throws</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">let</span> <span class=\"p\">`</span><span class=\"nv\">throws</span><span class=\"p\">`:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureType(py)throwsOrRethrowsKeyword\"></a>\n                    <a name=\"//apple_ref/swift/Property/throwsOrRethrowsKeyword\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)throwsOrRethrowsKeyword\">throwsOrRethrowsKeyword</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>throws or rethrows keyword</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">throwsOrRethrowsKeyword</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureType(py)throwsTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/throwsTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)throwsTypeName\">throwsTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type of thrown error if specified</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">throwsTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureType(py)asSource\"></a>\n                    <a name=\"//apple_ref/swift/Property/asSource\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)asSource\">asSource</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asSource</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/DictionaryType.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>DictionaryType Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/DictionaryType\" class=\"dashAnchor\"></a>\n    <a title=\"DictionaryType Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        DictionaryType Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>DictionaryType</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">DictionaryType</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">DictionaryType</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes dictionary type</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name used in declaration</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)valueTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/valueTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)valueTypeName\">valueTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Dictionary value type name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">valueTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)valueType\"></a>\n                    <a name=\"//apple_ref/swift/Property/valueType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)valueType\">valueType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Dictionary value type, if known</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">valueType</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)keyTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/keyTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)keyTypeName\">keyTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Dictionary key type name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">keyTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)keyType\"></a>\n                    <a name=\"//apple_ref/swift/Property/keyType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)keyType\">keyType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Dictionary key type, if known</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">keyType</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)asGeneric\"></a>\n                    <a name=\"//apple_ref/swift/Property/asGeneric\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)asGeneric\">asGeneric</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Returns dictionary as generic type</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asGeneric</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/GenericType.html\">GenericType</a></span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)asSource\"></a>\n                    <a name=\"//apple_ref/swift/Property/asSource\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)asSource\">asSource</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asSource</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/DiffableResult.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>DiffableResult Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/DiffableResult\" class=\"dashAnchor\"></a>\n    <a title=\"DiffableResult Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        DiffableResult Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>DiffableResult</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"kt\">DiffableResult</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">AutoEquatable</span></code></pre>\n\n                </div>\n              </div>\n            \n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)DiffableResult(py)description\"></a>\n                    <a name=\"//apple_ref/swift/Property/description\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)DiffableResult(py)description\">description</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">override</span> <span class=\"k\">var</span> <span class=\"nv\">description</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/Enum.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Enum Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/Enum\" class=\"dashAnchor\"></a>\n    <a title=\"Enum Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Enum Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Enum</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Enum</span> <span class=\"p\">:</span> <span class=\"k\">Type</span></code></pre>\n\n                </div>\n              </div>\n            <p>Defines Swift enum</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Enum(cpy)kind\"></a>\n                    <a name=\"//apple_ref/swift/Variable/kind\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Enum(cpy)kind\">kind</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"k\">var</span> <span class=\"nv\">kind</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Enum(py)kind\"></a>\n                    <a name=\"//apple_ref/swift/Property/kind\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Enum(py)kind\">kind</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Returns &ldquo;enum&rdquo;</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">override</span> <span class=\"k\">var</span> <span class=\"nv\">kind</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Enum(py)cases\"></a>\n                    <a name=\"//apple_ref/swift/Property/cases\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Enum(py)cases\">cases</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Enum cases</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">cases</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/EnumCase.html\">EnumCase</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Enum(py)rawTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/rawTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Enum(py)rawTypeName\">rawTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Enum raw value type name, if any. This type is removed from enum&rsquo;s <code><a href=\"../Classes/Enum.html#/c:@M@SourceryRuntime@objc(cs)Enum(py)based\">based</a></code> and <code>inherited</code> types collections.</p>\n<div class=\"aside aside-important\">\n    <p class=\"aside-title\">Important</p>\n    Unless raw type is specified explicitly via type alias RawValue it will be set to the first type in the inheritance chain.\nSo if your enum does not have raw value but implements protocols you&rsquo;ll have to specify conformance to these protocols via extension to get enum with nil raw value type and all based and inherited types.\n\n</div>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">rawTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Enum(py)rawType\"></a>\n                    <a name=\"//apple_ref/swift/Property/rawType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Enum(py)rawType\">rawType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Enum raw value type, if known</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">rawType</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Enum(py)based\"></a>\n                    <a name=\"//apple_ref/swift/Property/based\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Enum(py)based\">based</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Names of types or protocols this type inherits from, including unknown (not scanned) types</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">override</span> <span class=\"k\">var</span> <span class=\"nv\">based</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\">String</span> <span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Enum(py)hasAssociatedValues\"></a>\n                    <a name=\"//apple_ref/swift/Property/hasAssociatedValues\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Enum(py)hasAssociatedValues\">hasAssociatedValues</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether enum contains any associated values</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">hasAssociatedValues</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Enum(im)diffAgainst:\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Enum(im)diffAgainst:\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">override</span> <span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/EnumCase.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>EnumCase Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/EnumCase\" class=\"dashAnchor\"></a>\n    <a title=\"EnumCase Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        EnumCase Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>EnumCase</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">EnumCase</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\">AutoDescription</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Annotated.html\">Annotated</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Documented.html\">Documented</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">EnumCase</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Defines enum case</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)EnumCase(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)EnumCase(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Enum case name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)EnumCase(py)rawValue\"></a>\n                    <a name=\"//apple_ref/swift/Property/rawValue\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)EnumCase(py)rawValue\">rawValue</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Enum case raw value, if any</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">rawValue</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)EnumCase(py)associatedValues\"></a>\n                    <a name=\"//apple_ref/swift/Property/associatedValues\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)EnumCase(py)associatedValues\">associatedValues</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Enum case associated values</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">associatedValues</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)EnumCase(py)annotations\"></a>\n                    <a name=\"//apple_ref/swift/Property/annotations\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)EnumCase(py)annotations\">annotations</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Enum case annotations</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">annotations</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)EnumCase(py)documentation\"></a>\n                    <a name=\"//apple_ref/swift/Property/documentation\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)EnumCase(py)documentation\">documentation</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">documentation</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)EnumCase(py)indirect\"></a>\n                    <a name=\"//apple_ref/swift/Property/indirect\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)EnumCase(py)indirect\">indirect</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether enum case is indirect</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">indirect</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)EnumCase(py)hasAssociatedValue\"></a>\n                    <a name=\"//apple_ref/swift/Property/hasAssociatedValue\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)EnumCase(py)hasAssociatedValue\">hasAssociatedValue</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether enum case has associated value</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">hasAssociatedValue</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/GenericParameter.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>GenericParameter Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/GenericParameter\" class=\"dashAnchor\"></a>\n    <a title=\"GenericParameter Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        GenericParameter Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>GenericParameter</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">GenericParameter</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">GenericParameter</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Descibes Swift generic parameter</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)GenericParameter(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)GenericParameter(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Generic parameter name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)GenericParameter(py)inheritedTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/inheritedTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)GenericParameter(py)inheritedTypeName\">inheritedTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Generic parameter inherited type</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">inheritedTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/GenericRequirement/Relationship.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Relationship Enumeration Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../../js/jquery.min.js\" defer></script>\n    <script src=\"../../js/jazzy.js\" defer></script>\n    \n    <script src=\"../../js/lunr.min.js\" defer></script>\n    <script src=\"../../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Enum/Relationship\" class=\"dashAnchor\"></a>\n    <a title=\"Relationship Enumeration Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../../img/carat.png\" />\n        Relationship Enumeration Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Relationship</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">enum</span> <span class=\"kt\">Relationship</span> <span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                </div>\n              </div>\n            \n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime18GenericRequirementC12RelationshipO6equalsyA2EmF\"></a>\n                    <a name=\"//apple_ref/swift/Element/equals\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime18GenericRequirementC12RelationshipO6equalsyA2EmF\">equals</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">case</span> <span class=\"n\">equals</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime18GenericRequirementC12RelationshipO10conformsToyA2EmF\"></a>\n                    <a name=\"//apple_ref/swift/Element/conformsTo\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime18GenericRequirementC12RelationshipO10conformsToyA2EmF\">conformsTo</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">case</span> <span class=\"n\">conformsTo</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/GenericRequirement.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>GenericRequirement Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/GenericRequirement\" class=\"dashAnchor\"></a>\n    <a title=\"GenericRequirement Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        GenericRequirement Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>GenericRequirement</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"kt\">GenericRequirement</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">GenericRequirement</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Descibes Swift generic requirement</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime18GenericRequirementC12RelationshipO\"></a>\n                    <a name=\"//apple_ref/swift/Enum/Relationship\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime18GenericRequirementC12RelationshipO\">Relationship</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                        <a href=\"../Classes/GenericRequirement/Relationship.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">enum</span> <span class=\"kt\">Relationship</span> <span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)GenericRequirement(py)leftType\"></a>\n                    <a name=\"//apple_ref/swift/Property/leftType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)GenericRequirement(py)leftType\">leftType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">leftType</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/AssociatedType.html\">AssociatedType</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)GenericRequirement(py)rightType\"></a>\n                    <a name=\"//apple_ref/swift/Property/rightType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)GenericRequirement(py)rightType\">rightType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">rightType</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)GenericRequirement(py)relationship\"></a>\n                    <a name=\"//apple_ref/swift/Property/relationship\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)GenericRequirement(py)relationship\">relationship</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>relationship name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">relationship</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)GenericRequirement(py)relationshipSyntax\"></a>\n                    <a name=\"//apple_ref/swift/Property/relationshipSyntax\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)GenericRequirement(py)relationshipSyntax\">relationshipSyntax</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Syntax e.g. <code>==</code> or <code>:</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">relationshipSyntax</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime18GenericRequirementC8leftType05rightF012relationshipAcA010AssociatedF0C_AA0cF9ParameterCAC12RelationshipOtcfc\"></a>\n                    <a name=\"//apple_ref/swift/Method/init(leftType:rightType:relationship:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime18GenericRequirementC8leftType05rightF012relationshipAcA010AssociatedF0C_AA0cF9ParameterCAC12RelationshipOtcfc\">init(leftType:<wbr>rightType:<wbr>relationship:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"nf\">init</span><span class=\"p\">(</span><span class=\"nv\">leftType</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/AssociatedType.html\">AssociatedType</a></span><span class=\"p\">,</span> <span class=\"nv\">rightType</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a></span><span class=\"p\">,</span> <span class=\"nv\">relationship</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/GenericRequirement/Relationship.html\">Relationship</a></span><span class=\"p\">)</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/GenericType.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>GenericType Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/GenericType\" class=\"dashAnchor\"></a>\n    <a title=\"GenericType Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        GenericType Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>GenericType</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">GenericType</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModelWithoutDescription</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">GenericType</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Descibes Swift generic type</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)GenericType(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)GenericType(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>The name of the base type, i.e. <code>Array</code> for <code>Array&lt;Int&gt;</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)GenericType(py)typeParameters\"></a>\n                    <a name=\"//apple_ref/swift/Property/typeParameters\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)GenericType(py)typeParameters\">typeParameters</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>This generic type parameters</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">typeParameters</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)GenericType(py)asSource\"></a>\n                    <a name=\"//apple_ref/swift/Property/asSource\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)GenericType(py)asSource\">asSource</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asSource</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)GenericType(py)description\"></a>\n                    <a name=\"//apple_ref/swift/Property/description\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)GenericType(py)description\">description</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">override</span> <span class=\"k\">var</span> <span class=\"nv\">description</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/GenericTypeParameter.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>GenericTypeParameter Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/GenericTypeParameter\" class=\"dashAnchor\"></a>\n    <a title=\"GenericTypeParameter Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        GenericTypeParameter Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>GenericTypeParameter</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">GenericTypeParameter</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">GenericTypeParameter</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Descibes Swift generic type parameter</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)GenericTypeParameter(py)typeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/typeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)GenericTypeParameter(py)typeName\">typeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Generic parameter type name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">typeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)GenericTypeParameter(py)type\"></a>\n                    <a name=\"//apple_ref/swift/Property/type\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)GenericTypeParameter(py)type\">type</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Generic parameter type, if known</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">type</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/Import.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Import Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/Import\" class=\"dashAnchor\"></a>\n    <a title=\"Import Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Import Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Import</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"kt\">Import</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModelWithoutDescription</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Import</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Defines import type</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Import(py)kind\"></a>\n                    <a name=\"//apple_ref/swift/Property/kind\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Import(py)kind\">kind</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Import kind, e.g. class, struct in <code>import class Module.ClassName</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">kind</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Import(py)path\"></a>\n                    <a name=\"//apple_ref/swift/Property/path\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Import(py)path\">path</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Import path</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">path</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Import(py)description\"></a>\n                    <a name=\"//apple_ref/swift/Property/description\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Import(py)description\">description</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Full import value e.g. <code>import struct Module.StructName</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">override</span> <span class=\"k\">var</span> <span class=\"nv\">description</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Import(py)moduleName\"></a>\n                    <a name=\"//apple_ref/swift/Property/moduleName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Import(py)moduleName\">moduleName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Returns module name from a import, e.g. if you had <code>import struct Module.Submodule.Struct</code> it will return <code>Module.Submodule</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">moduleName</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/Method.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Method Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/Method\" class=\"dashAnchor\"></a>\n    <a title=\"Method Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Method Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Method</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objc</span><span class=\"p\">(</span><span class=\"kt\">SwiftMethod</span><span class=\"p\">)</span>\n<span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Method</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Annotated.html\">Annotated</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Documented.html\">Documented</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Definition.html\">Definition</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Method</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes method</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Full method name, including generic constraints, i.e. <code>foo&lt;T&gt;(bar: T)</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)selectorName\"></a>\n                    <a name=\"//apple_ref/swift/Property/selectorName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)selectorName\">selectorName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Method name including arguments names, i.e. <code>foo(bar:)</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">selectorName</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)shortName\"></a>\n                    <a name=\"//apple_ref/swift/Property/shortName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)shortName\">shortName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Method name without arguments names and parentheses, i.e. <code>foo&lt;T&gt;</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">shortName</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)callName\"></a>\n                    <a name=\"//apple_ref/swift/Property/callName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)callName\">callName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Method name without arguments names, parentheses and generic types, i.e. <code>foo</code> (can be used to generate code for method call)</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">callName</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)parameters\"></a>\n                    <a name=\"//apple_ref/swift/Property/parameters\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)parameters\">parameters</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Method parameters</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">parameters</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/MethodParameter.html\">MethodParameter</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)returnTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/returnTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)returnTypeName\">returnTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Return value type name used in declaration, including generic constraints, i.e. <code>where T: Equatable</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">returnTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)actualReturnTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/actualReturnTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)actualReturnTypeName\">actualReturnTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Actual return value type name if declaration uses typealias, otherwise just a <code><a href=\"../Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)returnTypeName\">returnTypeName</a></code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">actualReturnTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)returnType\"></a>\n                    <a name=\"//apple_ref/swift/Property/returnType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)returnType\">returnType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Actual return value type, if known</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">returnType</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isOptionalReturnType\"></a>\n                    <a name=\"//apple_ref/swift/Property/isOptionalReturnType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isOptionalReturnType\">isOptionalReturnType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether return value type is optional</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isOptionalReturnType</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isImplicitlyUnwrappedOptionalReturnType\"></a>\n                    <a name=\"//apple_ref/swift/Property/isImplicitlyUnwrappedOptionalReturnType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isImplicitlyUnwrappedOptionalReturnType\">isImplicitlyUnwrappedOptionalReturnType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether return value type is implicitly unwrapped optional</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isImplicitlyUnwrappedOptionalReturnType</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)unwrappedReturnTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/unwrappedReturnTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)unwrappedReturnTypeName\">unwrappedReturnTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Return value type name without attributes and optional type information</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">unwrappedReturnTypeName</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isAsync\"></a>\n                    <a name=\"//apple_ref/swift/Property/isAsync\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isAsync\">isAsync</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is async method</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">isAsync</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isDistributed\"></a>\n                    <a name=\"//apple_ref/swift/Property/isDistributed\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isDistributed\">isDistributed</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is distributed</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isDistributed</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)throws\"></a>\n                    <a name=\"//apple_ref/swift/Property/throws\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)throws\">throws</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method throws</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">let</span> <span class=\"p\">`</span><span class=\"nv\">throws</span><span class=\"p\">`:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)throwsTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/throwsTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)throwsTypeName\">throwsTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type of thrown error if specified</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">throwsTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isThrowsTypeGeneric\"></a>\n                    <a name=\"//apple_ref/swift/Property/isThrowsTypeGeneric\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isThrowsTypeGeneric\">isThrowsTypeGeneric</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Return if the throwsType is generic</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isThrowsTypeGeneric</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)rethrows\"></a>\n                    <a name=\"//apple_ref/swift/Property/rethrows\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)rethrows\">rethrows</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method rethrows</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">let</span> <span class=\"p\">`</span><span class=\"nv\">rethrows</span><span class=\"p\">`:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)accessLevel\"></a>\n                    <a name=\"//apple_ref/swift/Property/accessLevel\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)accessLevel\">accessLevel</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Method access level, i.e. <code>internal</code>, <code>private</code>, <code>fileprivate</code>, <code>public</code>, <code>open</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">accessLevel</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isStatic\"></a>\n                    <a name=\"//apple_ref/swift/Property/isStatic\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isStatic\">isStatic</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is a static method</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">isStatic</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isClass\"></a>\n                    <a name=\"//apple_ref/swift/Property/isClass\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isClass\">isClass</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is a class method</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">isClass</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isInitializer\"></a>\n                    <a name=\"//apple_ref/swift/Property/isInitializer\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isInitializer\">isInitializer</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is an initializer</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isInitializer</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isDeinitializer\"></a>\n                    <a name=\"//apple_ref/swift/Property/isDeinitializer\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isDeinitializer\">isDeinitializer</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is an deinitializer</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isDeinitializer</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isFailableInitializer\"></a>\n                    <a name=\"//apple_ref/swift/Property/isFailableInitializer\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isFailableInitializer\">isFailableInitializer</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is a failable initializer</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">isFailableInitializer</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isConvenienceInitializer\"></a>\n                    <a name=\"//apple_ref/swift/Property/isConvenienceInitializer\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isConvenienceInitializer\">isConvenienceInitializer</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is a convenience initializer</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isConvenienceInitializer</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isRequired\"></a>\n                    <a name=\"//apple_ref/swift/Property/isRequired\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isRequired\">isRequired</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is required</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isRequired</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isFinal\"></a>\n                    <a name=\"//apple_ref/swift/Property/isFinal\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isFinal\">isFinal</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is final</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isFinal</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isMutating\"></a>\n                    <a name=\"//apple_ref/swift/Property/isMutating\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isMutating\">isMutating</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is mutating</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isMutating</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isGeneric\"></a>\n                    <a name=\"//apple_ref/swift/Property/isGeneric\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isGeneric\">isGeneric</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is generic</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isGeneric</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isOptional\"></a>\n                    <a name=\"//apple_ref/swift/Property/isOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isOptional\">isOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is optional (in an Objective-C protocol)</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isNonisolated\"></a>\n                    <a name=\"//apple_ref/swift/Property/isNonisolated\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isNonisolated\">isNonisolated</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is nonisolated (this modifier only applies to actor methods)</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isNonisolated</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isDynamic\"></a>\n                    <a name=\"//apple_ref/swift/Property/isDynamic\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isDynamic\">isDynamic</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is dynamic</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isDynamic</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)annotations\"></a>\n                    <a name=\"//apple_ref/swift/Property/annotations\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)annotations\">annotations</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Annotations, that were created with // sourcery: annotation1, other = &ldquo;annotation value&rdquo;, alterantive = 2</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">annotations</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)documentation\"></a>\n                    <a name=\"//apple_ref/swift/Property/documentation\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)documentation\">documentation</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">documentation</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)definedInTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/definedInTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)definedInTypeName\">definedInTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Reference to type name where the method is defined,\nnil if defined outside of any <code>enum</code>, <code>struct</code>, <code>class</code> etc</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">definedInTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)actualDefinedInTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/actualDefinedInTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)actualDefinedInTypeName\">actualDefinedInTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a <code><a href=\"../Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)definedInTypeName\">definedInTypeName</a></code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">actualDefinedInTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)definedInType\"></a>\n                    <a name=\"//apple_ref/swift/Property/definedInType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)definedInType\">definedInType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Reference to actual type where the object is defined,\nnil if defined outside of any <code>enum</code>, <code>struct</code>, <code>class</code> etc or type is unknown</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">definedInType</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)attributes\"></a>\n                    <a name=\"//apple_ref/swift/Property/attributes\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)attributes\">attributes</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Method attributes, i.e. <code>@discardableResult</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">attributes</span><span class=\"p\">:</span> <span class=\"kt\">AttributeList</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)modifiers\"></a>\n                    <a name=\"//apple_ref/swift/Property/modifiers\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)modifiers\">modifiers</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Method modifiers, i.e. <code>private</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">modifiers</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)genericRequirements\"></a>\n                    <a name=\"//apple_ref/swift/Property/genericRequirements\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)genericRequirements\">genericRequirements</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>list of generic requirements</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">genericRequirements</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)genericParameters\"></a>\n                    <a name=\"//apple_ref/swift/Property/genericParameters\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)genericParameters\">genericParameters</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>List of generic parameters</p>\n\n<ul>\n<li>Example:</li>\n</ul>\n<pre class=\"highlight swift\"><code>  <span class=\"kd\">func</span> <span class=\"n\">method</span><span class=\"o\">&lt;</span><span class=\"kt\">GenericParameter</span><span class=\"o\">&gt;</span><span class=\"p\">(</span><span class=\"nv\">foo</span><span class=\"p\">:</span> <span class=\"kt\">GenericParameter</span><span class=\"p\">)</span>\n                   <span class=\"o\">^</span> <span class=\"o\">~</span> <span class=\"n\">a</span> <span class=\"n\">generic</span> <span class=\"n\">parameter</span>\n</code></pre>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">genericParameters</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/GenericParameter.html\">GenericParameter</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/MethodParameter.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>MethodParameter Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/MethodParameter\" class=\"dashAnchor\"></a>\n    <a title=\"MethodParameter Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        MethodParameter Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>MethodParameter</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"kt\">MethodParameter</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Typed.html\">Typed</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Annotated.html\">Annotated</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">MethodParameter</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes method parameter</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)argumentLabel\"></a>\n                    <a name=\"//apple_ref/swift/Property/argumentLabel\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)argumentLabel\">argumentLabel</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Parameter external name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">argumentLabel</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Parameter internal name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)typeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/typeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)typeName\">typeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Parameter type name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">typeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)inout\"></a>\n                    <a name=\"//apple_ref/swift/Property/inout\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)inout\">inout</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Parameter flag whether it&rsquo;s inout or not</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">let</span> <span class=\"p\">`</span><span class=\"nv\">inout</span><span class=\"p\">`:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)isVariadic\"></a>\n                    <a name=\"//apple_ref/swift/Property/isVariadic\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)isVariadic\">isVariadic</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Is this variadic parameter?</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">isVariadic</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)type\"></a>\n                    <a name=\"//apple_ref/swift/Property/type\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)type\">type</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Parameter type, if known</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">type</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)typeAttributes\"></a>\n                    <a name=\"//apple_ref/swift/Property/typeAttributes\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)typeAttributes\">typeAttributes</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Parameter type attributes, i.e. <code>@escaping</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">typeAttributes</span><span class=\"p\">:</span> <span class=\"kt\">AttributeList</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)defaultValue\"></a>\n                    <a name=\"//apple_ref/swift/Property/defaultValue\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)defaultValue\">defaultValue</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Method parameter default value expression</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">defaultValue</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)annotations\"></a>\n                    <a name=\"//apple_ref/swift/Property/annotations\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)annotations\">annotations</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Annotations, that were created with // sourcery: annotation1, other = &ldquo;annotation value&rdquo;, alterantive = 2</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">annotations</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)index\"></a>\n                    <a name=\"//apple_ref/swift/Property/index\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)index\">index</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Method parameter index in the argument list</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">index</span><span class=\"p\">:</span> <span class=\"kt\">Int</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)asSource\"></a>\n                    <a name=\"//apple_ref/swift/Property/asSource\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)asSource\">asSource</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asSource</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isOptional\"></a>\n                    <a name=\"//apple_ref/swift/Property/isOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isOptional\">isOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is optional. Shorthand for <code>typeName.isOptional</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isImplicitlyUnwrappedOptional\"></a>\n                    <a name=\"//apple_ref/swift/Property/isImplicitlyUnwrappedOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isImplicitlyUnwrappedOptional\">isImplicitlyUnwrappedOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is implicitly unwrapped optional. Shorthand for <code>typeName.isImplicitlyUnwrappedOptional</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isImplicitlyUnwrappedOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)unwrappedTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/unwrappedTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)unwrappedTypeName\">unwrappedTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name without attributes and optional type information. Shorthand for <code>typeName.unwrappedTypeName</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">unwrappedTypeName</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)actualTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/actualTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)actualTypeName\">actualTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Actual type name if declaration uses typealias, otherwise just a <code><a href=\"../Classes/MethodParameter.html#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)typeName\">typeName</a></code>. Shorthand for <code>typeName.actualTypeName</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">actualTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isTuple\"></a>\n                    <a name=\"//apple_ref/swift/Property/isTuple\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isTuple\">isTuple</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a tuple. Shorthand for <code>typeName.isTuple</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isTuple</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isClosure\"></a>\n                    <a name=\"//apple_ref/swift/Property/isClosure\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isClosure\">isClosure</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a closure. Shorthand for <code>typeName.isClosure</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isClosure</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isArray\"></a>\n                    <a name=\"//apple_ref/swift/Property/isArray\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isArray\">isArray</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is an array. Shorthand for <code>typeName.isArray</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isArray</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isSet\"></a>\n                    <a name=\"//apple_ref/swift/Property/isSet\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isSet\">isSet</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a set. Shorthand for <code>typeName.isSet</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isSet</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isDictionary\"></a>\n                    <a name=\"//apple_ref/swift/Property/isDictionary\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isDictionary\">isDictionary</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a dictionary. Shorthand for <code>typeName.isDictionary</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isDictionary</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/Modifier.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Modifier Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/Modifier\" class=\"dashAnchor\"></a>\n    <a title=\"Modifier Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Modifier Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Modifier</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"kt\">Modifier</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">AutoCoding</span><span class=\"p\">,</span> <span class=\"kt\">AutoEquatable</span><span class=\"p\">,</span> <span class=\"kt\">AutoDiffable</span><span class=\"p\">,</span> <span class=\"kt\">AutoJSExport</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Modifier</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>modifier can be thing like <code>private</code>, <code>class</code>, <code>nonmutating</code>\nif a declaration has modifier like <code>private(set)</code> it&rsquo;s name will be <code>private</code> and detail will be <code>set</code></p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Modifier(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Modifier(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>The declaration modifier name.</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Modifier(py)detail\"></a>\n                    <a name=\"//apple_ref/swift/Property/detail\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Modifier(py)detail\">detail</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>The modifier detail, if any.</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">detail</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Modifier(im)initWithName:detail:\"></a>\n                    <a name=\"//apple_ref/swift/Method/init(name:detail:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Modifier(im)initWithName:detail:\">init(name:<wbr>detail:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"nf\">init</span><span class=\"p\">(</span><span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">,</span> <span class=\"nv\">detail</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span> <span class=\"o\">=</span> <span class=\"kc\">nil</span><span class=\"p\">)</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Modifier(py)asSource\"></a>\n                    <a name=\"//apple_ref/swift/Property/asSource\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Modifier(py)asSource\">asSource</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asSource</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/Protocol.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Protocol Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/Protocol\" class=\"dashAnchor\"></a>\n    <a title=\"Protocol Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Protocol Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Protocol</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Protocol</span> <span class=\"p\">:</span> <span class=\"k\">Type</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes Swift protocol</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Protocol(cpy)kind\"></a>\n                    <a name=\"//apple_ref/swift/Variable/kind\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Protocol(cpy)kind\">kind</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"k\">var</span> <span class=\"nv\">kind</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Protocol(py)kind\"></a>\n                    <a name=\"//apple_ref/swift/Property/kind\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Protocol(py)kind\">kind</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Returns &ldquo;protocol&rdquo;</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">override</span> <span class=\"k\">var</span> <span class=\"nv\">kind</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Protocol(py)associatedTypes\"></a>\n                    <a name=\"//apple_ref/swift/Property/associatedTypes\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Protocol(py)associatedTypes\">associatedTypes</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>list of all declared associated types with their names as keys</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">associatedTypes</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\">String</span> <span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/AssociatedType.html\">AssociatedType</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Protocol(py)genericRequirements\"></a>\n                    <a name=\"//apple_ref/swift/Property/genericRequirements\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Protocol(py)genericRequirements\">genericRequirements</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>list of generic requirements</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">override</span> <span class=\"k\">var</span> <span class=\"nv\">genericRequirements</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Protocol(im)diffAgainst:\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Protocol(im)diffAgainst:\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">override</span> <span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/ProtocolComposition.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>ProtocolComposition Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/ProtocolComposition\" class=\"dashAnchor\"></a>\n    <a title=\"ProtocolComposition Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        ProtocolComposition Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>ProtocolComposition</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">ProtocolComposition</span> <span class=\"p\">:</span> <span class=\"k\">Type</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes a Swift <a href=\"https://docs.swift.org/swift-book/ReferenceManual/Types.html#ID454\">protocol composition</a>.</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ProtocolComposition(cpy)kind\"></a>\n                    <a name=\"//apple_ref/swift/Variable/kind\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ProtocolComposition(cpy)kind\">kind</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"k\">var</span> <span class=\"nv\">kind</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ProtocolComposition(py)kind\"></a>\n                    <a name=\"//apple_ref/swift/Property/kind\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ProtocolComposition(py)kind\">kind</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Returns &ldquo;protocolComposition&rdquo;</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">override</span> <span class=\"k\">var</span> <span class=\"nv\">kind</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ProtocolComposition(py)composedTypeNames\"></a>\n                    <a name=\"//apple_ref/swift/Property/composedTypeNames\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ProtocolComposition(py)composedTypeNames\">composedTypeNames</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>The names of the types composed to form this composition</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">composedTypeNames</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ProtocolComposition(py)composedTypes\"></a>\n                    <a name=\"//apple_ref/swift/Property/composedTypes\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ProtocolComposition(py)composedTypes\">composedTypes</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>The types composed to form this composition, if known</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">composedTypes</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"k\">Type</span><span class=\"p\">]?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ProtocolComposition(im)diffAgainst:\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ProtocolComposition(im)diffAgainst:\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">override</span> <span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/SetType.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>SetType Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/SetType\" class=\"dashAnchor\"></a>\n    <a title=\"SetType Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        SetType Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>SetType</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">SetType</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">SetType</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes set type</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SetType(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SetType(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name used in declaration</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SetType(py)elementTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/elementTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SetType(py)elementTypeName\">elementTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Array element type name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">elementTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SetType(py)elementType\"></a>\n                    <a name=\"//apple_ref/swift/Property/elementType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SetType(py)elementType\">elementType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Array element type, if known</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">elementType</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SetType(py)asGeneric\"></a>\n                    <a name=\"//apple_ref/swift/Property/asGeneric\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SetType(py)asGeneric\">asGeneric</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Returns array as generic type</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asGeneric</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/GenericType.html\">GenericType</a></span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SetType(py)asSource\"></a>\n                    <a name=\"//apple_ref/swift/Property/asSource\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SetType(py)asSource\">asSource</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asSource</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/Struct.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Struct Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/Struct\" class=\"dashAnchor\"></a>\n    <a title=\"Struct Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Struct Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Struct</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Struct</span> <span class=\"p\">:</span> <span class=\"k\">Type</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes Swift struct</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Struct(cpy)kind\"></a>\n                    <a name=\"//apple_ref/swift/Variable/kind\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Struct(cpy)kind\">kind</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"k\">var</span> <span class=\"nv\">kind</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Struct(py)kind\"></a>\n                    <a name=\"//apple_ref/swift/Property/kind\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Struct(py)kind\">kind</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Returns &ldquo;struct&rdquo;</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">override</span> <span class=\"k\">var</span> <span class=\"nv\">kind</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Struct(im)diffAgainst:\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Struct(im)diffAgainst:\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">override</span> <span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/Subscript.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Subscript Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/Subscript\" class=\"dashAnchor\"></a>\n    <a title=\"Subscript Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Subscript Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Subscript</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Subscript</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Annotated.html\">Annotated</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Documented.html\">Documented</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Definition.html\">Definition</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Subscript</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes subscript</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)parameters\"></a>\n                    <a name=\"//apple_ref/swift/Property/parameters\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)parameters\">parameters</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Method parameters</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">parameters</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/MethodParameter.html\">MethodParameter</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)returnTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/returnTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)returnTypeName\">returnTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Return value type name used in declaration, including generic constraints, i.e. <code>where T: Equatable</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">returnTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)actualReturnTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/actualReturnTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)actualReturnTypeName\">actualReturnTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Actual return value type name if declaration uses typealias, otherwise just a <code><a href=\"../Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)returnTypeName\">returnTypeName</a></code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">actualReturnTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)returnType\"></a>\n                    <a name=\"//apple_ref/swift/Property/returnType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)returnType\">returnType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Actual return value type, if known</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">returnType</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)isOptionalReturnType\"></a>\n                    <a name=\"//apple_ref/swift/Property/isOptionalReturnType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)isOptionalReturnType\">isOptionalReturnType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether return value type is optional</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isOptionalReturnType</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)isImplicitlyUnwrappedOptionalReturnType\"></a>\n                    <a name=\"//apple_ref/swift/Property/isImplicitlyUnwrappedOptionalReturnType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)isImplicitlyUnwrappedOptionalReturnType\">isImplicitlyUnwrappedOptionalReturnType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether return value type is implicitly unwrapped optional</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isImplicitlyUnwrappedOptionalReturnType</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)unwrappedReturnTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/unwrappedReturnTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)unwrappedReturnTypeName\">unwrappedReturnTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Return value type name without attributes and optional type information</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">unwrappedReturnTypeName</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)isFinal\"></a>\n                    <a name=\"//apple_ref/swift/Property/isFinal\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)isFinal\">isFinal</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether method is final</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isFinal</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)readAccess\"></a>\n                    <a name=\"//apple_ref/swift/Property/readAccess\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)readAccess\">readAccess</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Variable read access level, i.e. <code>internal</code>, <code>private</code>, <code>fileprivate</code>, <code>public</code>, <code>open</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">readAccess</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)writeAccess\"></a>\n                    <a name=\"//apple_ref/swift/Property/writeAccess\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)writeAccess\">writeAccess</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Variable write access, i.e. <code>internal</code>, <code>private</code>, <code>fileprivate</code>, <code>public</code>, <code>open</code>.\nFor immutable variables this value is empty string</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">writeAccess</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)isAsync\"></a>\n                    <a name=\"//apple_ref/swift/Property/isAsync\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)isAsync\">isAsync</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether subscript is async</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">isAsync</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)throws\"></a>\n                    <a name=\"//apple_ref/swift/Property/throws\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)throws\">throws</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether subscript throws</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">let</span> <span class=\"p\">`</span><span class=\"nv\">throws</span><span class=\"p\">`:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)throwsTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/throwsTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)throwsTypeName\">throwsTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type of thrown error if specified</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">throwsTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)isMutable\"></a>\n                    <a name=\"//apple_ref/swift/Property/isMutable\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)isMutable\">isMutable</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether variable is mutable or not</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isMutable</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)annotations\"></a>\n                    <a name=\"//apple_ref/swift/Property/annotations\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)annotations\">annotations</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Annotations, that were created with // sourcery: annotation1, other = &ldquo;annotation value&rdquo;, alterantive = 2</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">annotations</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)documentation\"></a>\n                    <a name=\"//apple_ref/swift/Property/documentation\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)documentation\">documentation</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">documentation</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)definedInTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/definedInTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)definedInTypeName\">definedInTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Reference to type name where the method is defined,\nnil if defined outside of any <code>enum</code>, <code>struct</code>, <code>class</code> etc</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">definedInTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)actualDefinedInTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/actualDefinedInTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)actualDefinedInTypeName\">actualDefinedInTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a <code><a href=\"../Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)definedInTypeName\">definedInTypeName</a></code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">actualDefinedInTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)definedInType\"></a>\n                    <a name=\"//apple_ref/swift/Property/definedInType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)definedInType\">definedInType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Reference to actual type where the object is defined,\nnil if defined outside of any <code>enum</code>, <code>struct</code>, <code>class</code> etc or type is unknown</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">definedInType</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)attributes\"></a>\n                    <a name=\"//apple_ref/swift/Property/attributes\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)attributes\">attributes</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Method attributes, i.e. <code>@discardableResult</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">attributes</span><span class=\"p\">:</span> <span class=\"kt\">AttributeList</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)modifiers\"></a>\n                    <a name=\"//apple_ref/swift/Property/modifiers\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)modifiers\">modifiers</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Method modifiers, i.e. <code>private</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">modifiers</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)genericParameters\"></a>\n                    <a name=\"//apple_ref/swift/Property/genericParameters\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)genericParameters\">genericParameters</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>list of generic parameters</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">genericParameters</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/GenericParameter.html\">GenericParameter</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)genericRequirements\"></a>\n                    <a name=\"//apple_ref/swift/Property/genericRequirements\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)genericRequirements\">genericRequirements</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>list of generic requirements</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">genericRequirements</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript(py)isGeneric\"></a>\n                    <a name=\"//apple_ref/swift/Property/isGeneric\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript(py)isGeneric\">isGeneric</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether subscript is generic or not</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isGeneric</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime9SubscriptC10parameters14returnTypeName11accessLevel7isAsync6throws0lfG017genericParameters0M12Requirements10attributes9modifiers11annotations13documentation09definedInfG0ACSayAA15MethodParameterCG_AA0fG0CAA06AccessI0O4read_AW5writetS2bAUSgSayAA07GenericW0CGSayAA18GenericRequirementCGSDySSSayAA9AttributeCGGSayAA8ModifierCGSDySSSo8NSObjectCGSaySSGAZtcfc\"></a>\n                    <a name=\"//apple_ref/swift/Method/init(parameters:returnTypeName:accessLevel:isAsync:throws:throwsTypeName:genericParameters:genericRequirements:attributes:modifiers:annotations:documentation:definedInTypeName:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime9SubscriptC10parameters14returnTypeName11accessLevel7isAsync6throws0lfG017genericParameters0M12Requirements10attributes9modifiers11annotations13documentation09definedInfG0ACSayAA15MethodParameterCG_AA0fG0CAA06AccessI0O4read_AW5writetS2bAUSgSayAA07GenericW0CGSayAA18GenericRequirementCGSDySSSayAA9AttributeCGGSayAA8ModifierCGSDySSSo8NSObjectCGSaySSGAZtcfc\">init(parameters:<wbr>returnTypeName:<wbr>accessLevel:<wbr>isAsync:<wbr>throws:<wbr>throwsTypeName:<wbr>genericParameters:<wbr>genericRequirements:<wbr>attributes:<wbr>modifiers:<wbr>annotations:<wbr>documentation:<wbr>definedInTypeName:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"nf\">init</span><span class=\"p\">(</span><span class=\"nv\">parameters</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/MethodParameter.html\">MethodParameter</a></span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[],</span>\n            <span class=\"nv\">returnTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">,</span>\n            <span class=\"nv\">accessLevel</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"nv\">read</span><span class=\"p\">:</span> <span class=\"kt\">AccessLevel</span><span class=\"p\">,</span> <span class=\"nv\">write</span><span class=\"p\">:</span> <span class=\"kt\">AccessLevel</span><span class=\"p\">)</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"o\">.</span><span class=\"kd\">internal</span><span class=\"p\">,</span> <span class=\"o\">.</span><span class=\"kd\">internal</span><span class=\"p\">),</span>\n            <span class=\"nv\">isAsync</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"o\">=</span> <span class=\"kc\">false</span><span class=\"p\">,</span>\n            <span class=\"p\">`</span><span class=\"nv\">throws</span><span class=\"p\">`:</span> <span class=\"kt\">Bool</span> <span class=\"o\">=</span> <span class=\"kc\">false</span><span class=\"p\">,</span>\n            <span class=\"nv\">throwsTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span> <span class=\"o\">=</span> <span class=\"kc\">nil</span><span class=\"p\">,</span>\n            <span class=\"nv\">genericParameters</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/GenericParameter.html\">GenericParameter</a></span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[],</span>\n            <span class=\"nv\">genericRequirements</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a></span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[],</span>\n            <span class=\"nv\">attributes</span><span class=\"p\">:</span> <span class=\"kt\">AttributeList</span> <span class=\"o\">=</span> <span class=\"p\">[:],</span>\n            <span class=\"nv\">modifiers</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a></span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[],</span>\n            <span class=\"nv\">annotations</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\">String</span><span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[:],</span>\n            <span class=\"nv\">documentation</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\">String</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[],</span>\n            <span class=\"nv\">definedInTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span> <span class=\"o\">=</span> <span class=\"kc\">nil</span><span class=\"p\">)</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/TupleElement.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>TupleElement Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/TupleElement\" class=\"dashAnchor\"></a>\n    <a title=\"TupleElement Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        TupleElement Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>TupleElement</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">TupleElement</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Typed.html\">Typed</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">TupleElement</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes tuple type element</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TupleElement(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TupleElement(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Tuple element name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TupleElement(py)typeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/typeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TupleElement(py)typeName\">typeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Tuple element type name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">typeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TupleElement(py)type\"></a>\n                    <a name=\"//apple_ref/swift/Property/type\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TupleElement(py)type\">type</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Tuple element type, if known</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">type</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TupleElement(py)asSource\"></a>\n                    <a name=\"//apple_ref/swift/Property/asSource\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TupleElement(py)asSource\">asSource</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asSource</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isOptional\"></a>\n                    <a name=\"//apple_ref/swift/Property/isOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isOptional\">isOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is optional. Shorthand for <code>typeName.isOptional</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isImplicitlyUnwrappedOptional\"></a>\n                    <a name=\"//apple_ref/swift/Property/isImplicitlyUnwrappedOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isImplicitlyUnwrappedOptional\">isImplicitlyUnwrappedOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is implicitly unwrapped optional. Shorthand for <code>typeName.isImplicitlyUnwrappedOptional</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isImplicitlyUnwrappedOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)unwrappedTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/unwrappedTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)unwrappedTypeName\">unwrappedTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name without attributes and optional type information. Shorthand for <code>typeName.unwrappedTypeName</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">unwrappedTypeName</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)actualTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/actualTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)actualTypeName\">actualTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Actual type name if declaration uses typealias, otherwise just a <code><a href=\"../Classes/TupleElement.html#/c:@M@SourceryRuntime@objc(cs)TupleElement(py)typeName\">typeName</a></code>. Shorthand for <code>typeName.actualTypeName</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">actualTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isTuple\"></a>\n                    <a name=\"//apple_ref/swift/Property/isTuple\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isTuple\">isTuple</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a tuple. Shorthand for <code>typeName.isTuple</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isTuple</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isClosure\"></a>\n                    <a name=\"//apple_ref/swift/Property/isClosure\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isClosure\">isClosure</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a closure. Shorthand for <code>typeName.isClosure</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isClosure</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isArray\"></a>\n                    <a name=\"//apple_ref/swift/Property/isArray\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isArray\">isArray</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is an array. Shorthand for <code>typeName.isArray</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isArray</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isSet\"></a>\n                    <a name=\"//apple_ref/swift/Property/isSet\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isSet\">isSet</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a set. Shorthand for <code>typeName.isSet</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isSet</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isDictionary\"></a>\n                    <a name=\"//apple_ref/swift/Property/isDictionary\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isDictionary\">isDictionary</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a dictionary. Shorthand for <code>typeName.isDictionary</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isDictionary</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/TupleType.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>TupleType Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/TupleType\" class=\"dashAnchor\"></a>\n    <a title=\"TupleType Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        TupleType Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>TupleType</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">TupleType</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">TupleType</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes tuple type</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TupleType(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TupleType(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name used in declaration</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TupleType(py)elements\"></a>\n                    <a name=\"//apple_ref/swift/Property/elements\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TupleType(py)elements\">elements</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Tuple elements</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">elements</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/TupleElement.html\">TupleElement</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/Type.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Type Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/Type\" class=\"dashAnchor\"></a>\n    <a title=\"Type Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Type Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Type</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"k\">Type</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Annotated.html\">Annotated</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Documented.html\">Documented</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"k\">Type</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Defines Swift type</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)imports\"></a>\n                    <a name=\"//apple_ref/swift/Property/imports\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)imports\">imports</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Imports that existed in the file that contained this type declaration</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">imports</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Import.html\">Import</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)allImports\"></a>\n                    <a name=\"//apple_ref/swift/Property/allImports\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)allImports\">allImports</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Imports existed in all files containing this type and all its super classes/protocols</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">allImports</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Import.html\">Import</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)isExtension\"></a>\n                    <a name=\"//apple_ref/swift/Property/isExtension\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)isExtension\">isExtension</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether declaration is an extension of some type</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isExtension</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)kind\"></a>\n                    <a name=\"//apple_ref/swift/Property/kind\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)kind\">kind</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Kind of type declaration, i.e. <code>enum</code>, <code>struct</code>, <code>class</code>, <code>protocol</code> or <code>extension</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">kind</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)accessLevel\"></a>\n                    <a name=\"//apple_ref/swift/Property/accessLevel\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)accessLevel\">accessLevel</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type access level, i.e. <code>internal</code>, <code>private</code>, <code>fileprivate</code>, <code>public</code>, <code>open</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">accessLevel</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name in global scope. For inner types includes the name of its containing type, i.e. <code>Type.Inner</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)isUnknownExtension\"></a>\n                    <a name=\"//apple_ref/swift/Property/isUnknownExtension\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)isUnknownExtension\">isUnknownExtension</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether the type has been resolved as unknown extension</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isUnknownExtension</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)globalName\"></a>\n                    <a name=\"//apple_ref/swift/Property/globalName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)globalName\">globalName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Global type name including module name, unless it&rsquo;s an extension of unknown type</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">globalName</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)isGeneric\"></a>\n                    <a name=\"//apple_ref/swift/Property/isGeneric\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)isGeneric\">isGeneric</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is generic</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isGeneric</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)localName\"></a>\n                    <a name=\"//apple_ref/swift/Property/localName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)localName\">localName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name in its own scope.</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">localName</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)variables\"></a>\n                    <a name=\"//apple_ref/swift/Property/variables\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)variables\">variables</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Variables defined in this type only, inluding variables defined in its extensions,\nbut not including variables inherited from superclasses (for classes only) and protocols</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">variables</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Variable.html\">Variable</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)rawVariables\"></a>\n                    <a name=\"//apple_ref/swift/Property/rawVariables\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)rawVariables\">rawVariables</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Unfiltered (can contain duplications from extensions) variables defined in this type only, inluding variables defined in its extensions,\nbut not including variables inherited from superclasses (for classes only) and protocols</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">rawVariables</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Variable.html\">Variable</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)allVariables\"></a>\n                    <a name=\"//apple_ref/swift/Property/allVariables\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)allVariables\">allVariables</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>All variables defined for this type, including variables defined in extensions,\nin superclasses (for classes only) and protocols</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">allVariables</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Variable.html\">Variable</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)methods\"></a>\n                    <a name=\"//apple_ref/swift/Property/methods\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)methods\">methods</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Methods defined in this type only, inluding methods defined in its extensions,\nbut not including methods inherited from superclasses (for classes only) and protocols</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">methods</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Method.html\">Method</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)rawMethods\"></a>\n                    <a name=\"//apple_ref/swift/Property/rawMethods\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)rawMethods\">rawMethods</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Unfiltered (can contain duplications from extensions) methods defined in this type only, inluding methods defined in its extensions,\nbut not including methods inherited from superclasses (for classes only) and protocols</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">rawMethods</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Method.html\">Method</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)allMethods\"></a>\n                    <a name=\"//apple_ref/swift/Property/allMethods\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)allMethods\">allMethods</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>All methods defined for this type, including methods defined in extensions,\nin superclasses (for classes only) and protocols</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">allMethods</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Method.html\">Method</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)subscripts\"></a>\n                    <a name=\"//apple_ref/swift/Property/subscripts\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)subscripts\">subscripts</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Subscripts defined in this type only, inluding subscripts defined in its extensions,\nbut not including subscripts inherited from superclasses (for classes only) and protocols</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">subscripts</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Subscript.html\">Subscript</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)rawSubscripts\"></a>\n                    <a name=\"//apple_ref/swift/Property/rawSubscripts\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)rawSubscripts\">rawSubscripts</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Unfiltered (can contain duplications from extensions) Subscripts defined in this type only, inluding subscripts defined in its extensions,\nbut not including subscripts inherited from superclasses (for classes only) and protocols</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">rawSubscripts</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Subscript.html\">Subscript</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)allSubscripts\"></a>\n                    <a name=\"//apple_ref/swift/Property/allSubscripts\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)allSubscripts\">allSubscripts</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>All subscripts defined for this type, including subscripts defined in extensions,\nin superclasses (for classes only) and protocols</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">allSubscripts</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Subscript.html\">Subscript</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)bodyBytesRange\"></a>\n                    <a name=\"//apple_ref/swift/Property/bodyBytesRange\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)bodyBytesRange\">bodyBytesRange</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Bytes position of the body of this type in its declaration file if available.</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">bodyBytesRange</span><span class=\"p\">:</span> <span class=\"kt\">BytesRange</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)completeDeclarationRange\"></a>\n                    <a name=\"//apple_ref/swift/Property/completeDeclarationRange\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)completeDeclarationRange\">completeDeclarationRange</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Bytes position of the whole declaration of this type in its declaration file if available.</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">completeDeclarationRange</span><span class=\"p\">:</span> <span class=\"kt\">BytesRange</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)initializers\"></a>\n                    <a name=\"//apple_ref/swift/Property/initializers\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)initializers\">initializers</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>All initializers defined in this type</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">initializers</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Method.html\">Method</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)annotations\"></a>\n                    <a name=\"//apple_ref/swift/Property/annotations\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)annotations\">annotations</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>All annotations for this type</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">annotations</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)documentation\"></a>\n                    <a name=\"//apple_ref/swift/Property/documentation\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)documentation\">documentation</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">documentation</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)staticVariables\"></a>\n                    <a name=\"//apple_ref/swift/Property/staticVariables\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)staticVariables\">staticVariables</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Static variables defined in this type</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">staticVariables</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Variable.html\">Variable</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)staticMethods\"></a>\n                    <a name=\"//apple_ref/swift/Property/staticMethods\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)staticMethods\">staticMethods</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Static methods defined in this type</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">staticMethods</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Method.html\">Method</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)classMethods\"></a>\n                    <a name=\"//apple_ref/swift/Property/classMethods\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)classMethods\">classMethods</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Class methods defined in this type</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">classMethods</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Method.html\">Method</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)instanceVariables\"></a>\n                    <a name=\"//apple_ref/swift/Property/instanceVariables\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)instanceVariables\">instanceVariables</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Instance variables defined in this type</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">instanceVariables</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Variable.html\">Variable</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)instanceMethods\"></a>\n                    <a name=\"//apple_ref/swift/Property/instanceMethods\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)instanceMethods\">instanceMethods</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Instance methods defined in this type</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">instanceMethods</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Method.html\">Method</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)computedVariables\"></a>\n                    <a name=\"//apple_ref/swift/Property/computedVariables\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)computedVariables\">computedVariables</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Computed instance variables defined in this type</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">computedVariables</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Variable.html\">Variable</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)storedVariables\"></a>\n                    <a name=\"//apple_ref/swift/Property/storedVariables\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)storedVariables\">storedVariables</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Stored instance variables defined in this type</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">storedVariables</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Variable.html\">Variable</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)inheritedTypes\"></a>\n                    <a name=\"//apple_ref/swift/Property/inheritedTypes\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)inheritedTypes\">inheritedTypes</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Names of types this type inherits from (for classes only) and protocols it implements, in order of definition</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">inheritedTypes</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\">String</span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)based\"></a>\n                    <a name=\"//apple_ref/swift/Property/based\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)based\">based</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Names of types or protocols this type inherits from, including unknown (not scanned) types</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">based</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\">String</span> <span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)basedTypes\"></a>\n                    <a name=\"//apple_ref/swift/Property/basedTypes\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)basedTypes\">basedTypes</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Types this type inherits from or implements, including unknown (not scanned) types with extensions defined</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">basedTypes</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\">String</span> <span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)inherits\"></a>\n                    <a name=\"//apple_ref/swift/Property/inherits\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)inherits\">inherits</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Types this type inherits from</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">inherits</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\">String</span> <span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)implements\"></a>\n                    <a name=\"//apple_ref/swift/Property/implements\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)implements\">implements</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Protocols this type implements. Does not contain classes in case where composition (<code>&amp;</code>) is used in the declaration</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">implements</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\">String</span> <span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)containedTypes\"></a>\n                    <a name=\"//apple_ref/swift/Property/containedTypes\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)containedTypes\">containedTypes</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Contained types</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">containedTypes</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"k\">Type</span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)containedType\"></a>\n                    <a name=\"//apple_ref/swift/Property/containedType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)containedType\">containedType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Contained types groupd by their names</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">private(set)</span> <span class=\"k\">var</span> <span class=\"nv\">containedType</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\">String</span> <span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)parentName\"></a>\n                    <a name=\"//apple_ref/swift/Property/parentName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)parentName\">parentName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Name of parent type (for contained types only)</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">private(set)</span> <span class=\"k\">var</span> <span class=\"nv\">parentName</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)parent\"></a>\n                    <a name=\"//apple_ref/swift/Property/parent\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)parent\">parent</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Parent type, if known (for contained types only)</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">parent</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)supertype\"></a>\n                    <a name=\"//apple_ref/swift/Property/supertype\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)supertype\">supertype</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Superclass type, if known (only for classes)</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">supertype</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)attributes\"></a>\n                    <a name=\"//apple_ref/swift/Property/attributes\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)attributes\">attributes</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type attributes, i.e. <code>@objc</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">attributes</span><span class=\"p\">:</span> <span class=\"kt\">AttributeList</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)modifiers\"></a>\n                    <a name=\"//apple_ref/swift/Property/modifiers\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)modifiers\">modifiers</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type modifiers, i.e. <code>private</code>, <code>final</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">modifiers</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)path\"></a>\n                    <a name=\"//apple_ref/swift/Property/path\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)path\">path</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Path to file where the type is defined</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">path</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)directory\"></a>\n                    <a name=\"//apple_ref/swift/Property/directory\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)directory\">directory</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Directory to file where the type is defined</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">directory</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)genericRequirements\"></a>\n                    <a name=\"//apple_ref/swift/Property/genericRequirements\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)genericRequirements\">genericRequirements</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>list of generic requirements</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">genericRequirements</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type(py)fileName\"></a>\n                    <a name=\"//apple_ref/swift/Property/fileName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type(py)fileName\">fileName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>File name where the type was defined</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">fileName</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/TypeName.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>TypeName Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/TypeName\" class=\"dashAnchor\"></a>\n    <a title=\"TypeName Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        TypeName Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>TypeName</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">TypeName</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModelWithoutDescription</span><span class=\"p\">,</span> <span class=\"kt\">LosslessStringConvertible</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">TypeName</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes name of the type used in typed declaration (variable, method parameter or return value etc.)</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name used in declaration</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)generic\"></a>\n                    <a name=\"//apple_ref/swift/Property/generic\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)generic\">generic</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>The generics of this TypeName</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">generic</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/GenericType.html\">GenericType</a></span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)isGeneric\"></a>\n                    <a name=\"//apple_ref/swift/Property/isGeneric\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isGeneric\">isGeneric</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether this TypeName is generic</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isGeneric</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)isProtocolComposition\"></a>\n                    <a name=\"//apple_ref/swift/Property/isProtocolComposition\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isProtocolComposition\">isProtocolComposition</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether this TypeName is protocol composition</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isProtocolComposition</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)actualTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/actualTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)actualTypeName\">actualTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Actual type name if given type name is a typealias</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">actualTypeName</span><span class=\"p\">:</span> <span class=\"kt\">TypeName</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)attributes\"></a>\n                    <a name=\"//apple_ref/swift/Property/attributes\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)attributes\">attributes</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name attributes, i.e. <code>@escaping</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">attributes</span><span class=\"p\">:</span> <span class=\"kt\">AttributeList</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)modifiers\"></a>\n                    <a name=\"//apple_ref/swift/Property/modifiers\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)modifiers\">modifiers</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Modifiers, i.e. <code>escaping</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">modifiers</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)isOptional\"></a>\n                    <a name=\"//apple_ref/swift/Property/isOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isOptional\">isOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is optional</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">isOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)isImplicitlyUnwrappedOptional\"></a>\n                    <a name=\"//apple_ref/swift/Property/isImplicitlyUnwrappedOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isImplicitlyUnwrappedOptional\">isImplicitlyUnwrappedOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is implicitly unwrapped optional</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">isImplicitlyUnwrappedOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)unwrappedTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/unwrappedTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)unwrappedTypeName\">unwrappedTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name without attributes and optional type information</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">unwrappedTypeName</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)isVoid\"></a>\n                    <a name=\"//apple_ref/swift/Property/isVoid\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isVoid\">isVoid</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is void (<code>Void</code> or <code>()</code>)</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isVoid</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)isTuple\"></a>\n                    <a name=\"//apple_ref/swift/Property/isTuple\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isTuple\">isTuple</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a tuple</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isTuple</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)tuple\"></a>\n                    <a name=\"//apple_ref/swift/Property/tuple\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)tuple\">tuple</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Tuple type data</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">tuple</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TupleType.html\">TupleType</a></span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)isArray\"></a>\n                    <a name=\"//apple_ref/swift/Property/isArray\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isArray\">isArray</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is an array</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isArray</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)array\"></a>\n                    <a name=\"//apple_ref/swift/Property/array\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)array\">array</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Array type data</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">array</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/ArrayType.html\">ArrayType</a></span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)isDictionary\"></a>\n                    <a name=\"//apple_ref/swift/Property/isDictionary\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isDictionary\">isDictionary</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a dictionary</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isDictionary</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)dictionary\"></a>\n                    <a name=\"//apple_ref/swift/Property/dictionary\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)dictionary\">dictionary</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Dictionary type data</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">dictionary</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/DictionaryType.html\">DictionaryType</a></span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)isClosure\"></a>\n                    <a name=\"//apple_ref/swift/Property/isClosure\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isClosure\">isClosure</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a closure</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isClosure</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)closure\"></a>\n                    <a name=\"//apple_ref/swift/Property/closure\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)closure\">closure</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Closure type data</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">closure</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/ClosureType.html\">ClosureType</a></span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)isSet\"></a>\n                    <a name=\"//apple_ref/swift/Property/isSet\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isSet\">isSet</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a Set</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isSet</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)set\"></a>\n                    <a name=\"//apple_ref/swift/Property/set\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)set\">set</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Set type data</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">set</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/SetType.html\">SetType</a></span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)isNever\"></a>\n                    <a name=\"//apple_ref/swift/Property/isNever\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isNever\">isNever</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is <code>Never</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isNever</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)asSource\"></a>\n                    <a name=\"//apple_ref/swift/Property/asSource\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)asSource\">asSource</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Prints typename as it would appear on definition</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asSource</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)description\"></a>\n                    <a name=\"//apple_ref/swift/Property/description\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)description\">description</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">override</span> <span class=\"k\">var</span> <span class=\"nv\">description</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName(py)hash\"></a>\n                    <a name=\"//apple_ref/swift/Property/hash\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName(py)hash\">hash</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">override</span> <span class=\"k\">var</span> <span class=\"nv\">hash</span><span class=\"p\">:</span> <span class=\"kt\">Int</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:s25LosslessStringConvertiblePyxSgSScfc\"></a>\n                    <a name=\"//apple_ref/swift/Method/init(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:s25LosslessStringConvertiblePyxSgSScfc\">init(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">convenience</span> <span class=\"nf\">init</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">description</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">)</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)TypeName(cm)unknownWithDescription:attributes:\"></a>\n                    <a name=\"//apple_ref/swift/Method/unknown(description:attributes:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)TypeName(cm)unknownWithDescription:attributes:\">unknown(description:<wbr>attributes:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">static</span> <span class=\"kd\">func</span> <span class=\"nf\">unknown</span><span class=\"p\">(</span><span class=\"nv\">description</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?,</span> <span class=\"nv\">attributes</span><span class=\"p\">:</span> <span class=\"kt\">AttributeList</span> <span class=\"o\">=</span> <span class=\"p\">[:])</span> <span class=\"o\">-&gt;</span> <span class=\"kt\">TypeName</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/Types.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Types Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/Types\" class=\"dashAnchor\"></a>\n    <a title=\"Types Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Types Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Types</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Types</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Types</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Collection of scanned types for accessing in templates</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Types(py)typealiases\"></a>\n                    <a name=\"//apple_ref/swift/Property/typealiases\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Types(py)typealiases\">typealiases</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>All known typealiases</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">typealiases</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\">Typealias</span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Types(py)all\"></a>\n                    <a name=\"//apple_ref/swift/Property/all\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Types(py)all\">all</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>All known types, excluding protocols or protocol compositions.</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">lazy</span> <span class=\"kd\">internal(set)</span> <span class=\"k\">var</span> <span class=\"nv\">all</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"k\">Type</span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Types(py)protocols\"></a>\n                    <a name=\"//apple_ref/swift/Property/protocols\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Types(py)protocols\">protocols</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>All known protocols</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">lazy</span> <span class=\"kd\">internal(set)</span> <span class=\"k\">var</span> <span class=\"nv\">protocols</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Protocol.html\">Protocol</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Types(py)protocolCompositions\"></a>\n                    <a name=\"//apple_ref/swift/Property/protocolCompositions\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Types(py)protocolCompositions\">protocolCompositions</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>All known protocol compositions</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">lazy</span> <span class=\"kd\">internal(set)</span> <span class=\"k\">var</span> <span class=\"nv\">protocolCompositions</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Types(py)classes\"></a>\n                    <a name=\"//apple_ref/swift/Property/classes\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Types(py)classes\">classes</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>All known classes</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">lazy</span> <span class=\"kd\">internal(set)</span> <span class=\"k\">var</span> <span class=\"nv\">classes</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Class.html\">Class</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Types(py)structs\"></a>\n                    <a name=\"//apple_ref/swift/Property/structs\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Types(py)structs\">structs</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>All known structs</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">lazy</span> <span class=\"kd\">internal(set)</span> <span class=\"k\">var</span> <span class=\"nv\">structs</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Struct.html\">Struct</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Types(py)enums\"></a>\n                    <a name=\"//apple_ref/swift/Property/enums\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Types(py)enums\">enums</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>All known enums</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">lazy</span> <span class=\"kd\">internal(set)</span> <span class=\"k\">var</span> <span class=\"nv\">enums</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Classes/Enum.html\">Enum</a></span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Types(py)extensions\"></a>\n                    <a name=\"//apple_ref/swift/Property/extensions\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Types(py)extensions\">extensions</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>All known extensions</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">lazy</span> <span class=\"kd\">internal(set)</span> <span class=\"k\">var</span> <span class=\"nv\">extensions</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"k\">Type</span><span class=\"p\">]</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Types(py)based\"></a>\n                    <a name=\"//apple_ref/swift/Property/based\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Types(py)based\">based</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Types based on any other type, grouped by its name, even if they are not known.\n<code>types.based.MyType</code> returns list of types based on <code>MyType</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">lazy</span> <span class=\"kd\">internal(set)</span> <span class=\"k\">var</span> <span class=\"nv\">based</span><span class=\"p\">:</span> <span class=\"kt\">TypesCollection</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Types(py)inheriting\"></a>\n                    <a name=\"//apple_ref/swift/Property/inheriting\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Types(py)inheriting\">inheriting</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Classes inheriting from any known class, grouped by its name.\n<code>types.inheriting.MyClass</code> returns list of types inheriting from <code>MyClass</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">lazy</span> <span class=\"kd\">internal(set)</span> <span class=\"k\">var</span> <span class=\"nv\">inheriting</span><span class=\"p\">:</span> <span class=\"kt\">TypesCollection</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Types(py)implementing\"></a>\n                    <a name=\"//apple_ref/swift/Property/implementing\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Types(py)implementing\">implementing</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Types implementing known protocol, grouped by its name.\n<code>types.implementing.MyProtocol</code> returns list of types implementing <code>MyProtocol</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">lazy</span> <span class=\"kd\">internal(set)</span> <span class=\"k\">var</span> <span class=\"nv\">implementing</span><span class=\"p\">:</span> <span class=\"kt\">TypesCollection</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Classes/Variable.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Variable Class Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Class/Variable\" class=\"dashAnchor\"></a>\n    <a title=\"Variable Class Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Variable Class Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Variable</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Variable</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Typed.html\">Typed</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Annotated.html\">Annotated</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Documented.html\">Documented</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Definition.html\">Definition</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"../Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Variable</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            <p>Defines variable</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)name\"></a>\n                    <a name=\"//apple_ref/swift/Property/name\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)name\">name</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Variable name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)typeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/typeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)typeName\">typeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Variable type name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">typeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)type\"></a>\n                    <a name=\"//apple_ref/swift/Property/type\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)type\">type</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Variable type, if known, i.e. if the type is declared in the scanned sources.\nFor explanation, see <a href=\"https://cdn.rawgit.com/krzysztofzablocki/Sourcery/master/docs/writing-templates.html#what-are-em-known-em-and-em-unknown-em-types\">https://cdn.rawgit.com/krzysztofzablocki/Sourcery/master/docs/writing-templates.html#what-are-em-known-em-and-em-unknown-em-types</a></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">type</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)isComputed\"></a>\n                    <a name=\"//apple_ref/swift/Property/isComputed\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)isComputed\">isComputed</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether variable is computed and not stored</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">isComputed</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)isAsync\"></a>\n                    <a name=\"//apple_ref/swift/Property/isAsync\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)isAsync\">isAsync</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether variable is async</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">isAsync</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)throws\"></a>\n                    <a name=\"//apple_ref/swift/Property/throws\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)throws\">throws</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether variable throws</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">let</span> <span class=\"p\">`</span><span class=\"nv\">throws</span><span class=\"p\">`:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)throwsTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/throwsTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)throwsTypeName\">throwsTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type of thrown error if specified</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">throwsTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)isStatic\"></a>\n                    <a name=\"//apple_ref/swift/Property/isStatic\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)isStatic\">isStatic</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether variable is static</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">isStatic</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)readAccess\"></a>\n                    <a name=\"//apple_ref/swift/Property/readAccess\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)readAccess\">readAccess</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Variable read access level, i.e. <code>internal</code>, <code>private</code>, <code>fileprivate</code>, <code>public</code>, <code>open</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">readAccess</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)writeAccess\"></a>\n                    <a name=\"//apple_ref/swift/Property/writeAccess\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)writeAccess\">writeAccess</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Variable write access, i.e. <code>internal</code>, <code>private</code>, <code>fileprivate</code>, <code>public</code>, <code>open</code>.\nFor immutable variables this value is empty string</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">let</span> <span class=\"nv\">writeAccess</span><span class=\"p\">:</span> <span class=\"kt\">String</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8VariableC11accessLevelAA06AccessE0O4read_AF5writetvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/accessLevel\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8VariableC11accessLevelAA06AccessE0O4read_AF5writetvp\">accessLevel</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>composed access level\nsourcery: skipJSExport</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">accessLevel</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"nv\">read</span><span class=\"p\">:</span> <span class=\"kt\">AccessLevel</span><span class=\"p\">,</span> <span class=\"nv\">write</span><span class=\"p\">:</span> <span class=\"kt\">AccessLevel</span><span class=\"p\">)</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)isMutable\"></a>\n                    <a name=\"//apple_ref/swift/Property/isMutable\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)isMutable\">isMutable</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether variable is mutable or not</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isMutable</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)defaultValue\"></a>\n                    <a name=\"//apple_ref/swift/Property/defaultValue\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)defaultValue\">defaultValue</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Variable default value expression</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">defaultValue</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)annotations\"></a>\n                    <a name=\"//apple_ref/swift/Property/annotations\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)annotations\">annotations</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Annotations, that were created with // sourcery: annotation1, other = &ldquo;annotation value&rdquo;, alterantive = 2</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">annotations</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)documentation\"></a>\n                    <a name=\"//apple_ref/swift/Property/documentation\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)documentation\">documentation</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">documentation</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)attributes\"></a>\n                    <a name=\"//apple_ref/swift/Property/attributes\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)attributes\">attributes</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Variable attributes, i.e. <code>@IBOutlet</code>, <code>@IBInspectable</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">attributes</span><span class=\"p\">:</span> <span class=\"kt\">AttributeList</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)modifiers\"></a>\n                    <a name=\"//apple_ref/swift/Property/modifiers\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)modifiers\">modifiers</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Modifiers, i.e. <code>private</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">modifiers</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a></span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)isFinal\"></a>\n                    <a name=\"//apple_ref/swift/Property/isFinal\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)isFinal\">isFinal</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether variable is final or not</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isFinal</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)isLazy\"></a>\n                    <a name=\"//apple_ref/swift/Property/isLazy\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)isLazy\">isLazy</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether variable is lazy or not</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isLazy</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)isDynamic\"></a>\n                    <a name=\"//apple_ref/swift/Property/isDynamic\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)isDynamic\">isDynamic</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether variable is dynamic or not</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isDynamic</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)definedInTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/definedInTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)definedInTypeName\">definedInTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Reference to type name where the variable is defined,\nnil if defined outside of any <code>enum</code>, <code>struct</code>, <code>class</code> etc</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">internal(set)</span> <span class=\"k\">var</span> <span class=\"nv\">definedInTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)actualDefinedInTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/actualDefinedInTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)actualDefinedInTypeName\">actualDefinedInTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a <code><a href=\"../Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)definedInTypeName\">definedInTypeName</a></code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">actualDefinedInTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable(py)definedInType\"></a>\n                    <a name=\"//apple_ref/swift/Property/definedInType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable(py)definedInType\">definedInType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Reference to actual type where the object is defined,\nnil if defined outside of any <code>enum</code>, <code>struct</code>, <code>class</code> etc or type is unknown</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">definedInType</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Variable(py)isOptional\"></a>\n                    <a name=\"//apple_ref/swift/Property/isOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Variable(py)isOptional\">isOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is optional. Shorthand for <code>typeName.isOptional</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Variable(py)isImplicitlyUnwrappedOptional\"></a>\n                    <a name=\"//apple_ref/swift/Property/isImplicitlyUnwrappedOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Variable(py)isImplicitlyUnwrappedOptional\">isImplicitlyUnwrappedOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is implicitly unwrapped optional. Shorthand for <code>typeName.isImplicitlyUnwrappedOptional</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isImplicitlyUnwrappedOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Variable(py)unwrappedTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/unwrappedTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Variable(py)unwrappedTypeName\">unwrappedTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name without attributes and optional type information. Shorthand for <code>typeName.unwrappedTypeName</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">unwrappedTypeName</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Variable(py)actualTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/actualTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Variable(py)actualTypeName\">actualTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Actual type name if declaration uses typealias, otherwise just a <code><a href=\"../Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)typeName\">typeName</a></code>. Shorthand for <code>typeName.actualTypeName</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">actualTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Variable(py)isTuple\"></a>\n                    <a name=\"//apple_ref/swift/Property/isTuple\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Variable(py)isTuple\">isTuple</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a tuple. Shorthand for <code>typeName.isTuple</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isTuple</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Variable(py)isClosure\"></a>\n                    <a name=\"//apple_ref/swift/Property/isClosure\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Variable(py)isClosure\">isClosure</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a closure. Shorthand for <code>typeName.isClosure</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isClosure</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Variable(py)isArray\"></a>\n                    <a name=\"//apple_ref/swift/Property/isArray\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Variable(py)isArray\">isArray</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is an array. Shorthand for <code>typeName.isArray</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isArray</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Variable(py)isSet\"></a>\n                    <a name=\"//apple_ref/swift/Property/isSet\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Variable(py)isSet\">isSet</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a set. Shorthand for <code>typeName.isSet</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isSet</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Variable(py)isDictionary\"></a>\n                    <a name=\"//apple_ref/swift/Property/isDictionary\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Variable(py)isDictionary\">isDictionary</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a dictionary. Shorthand for <code>typeName.isDictionary</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isDictionary</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Enums/Composer.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Composer Enumeration Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Enum/Composer\" class=\"dashAnchor\"></a>\n    <a title=\"Composer Enumeration Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Composer Enumeration Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Composer</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">enum</span> <span class=\"kt\">Composer</span></code></pre>\n\n                </div>\n              </div>\n            <p>Responsible for composing results of <code>FileParser</code>.</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8ComposerO23uniqueTypesAndFunctions_6serialSayAA4TypeCG5types_SayAA6MethodCG9functionsSayAA9TypealiasCG11typealiasestAA16FileParserResultC_SbtFZ\"></a>\n                    <a name=\"//apple_ref/swift/Method/uniqueTypesAndFunctions(_:serial:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8ComposerO23uniqueTypesAndFunctions_6serialSayAA4TypeCG5types_SayAA6MethodCG9functionsSayAA9TypealiasCG11typealiasestAA16FileParserResultC_SbtFZ\">uniqueTypesAndFunctions(_:<wbr>serial:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Performs final processing of discovered types:</p>\n\n<ul>\n<li>extends types with their corresponding extensions;</li>\n<li>replaces typealiases with actual types</li>\n<li>finds actual types for variables and enums raw values</li>\n<li><p>filters out any private types and extensions</p></li>\n</ul>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">static</span> <span class=\"kd\">func</span> <span class=\"nf\">uniqueTypesAndFunctions</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">parserResult</span><span class=\"p\">:</span> <span class=\"kt\">FileParserResult</span><span class=\"p\">,</span> <span class=\"nv\">serial</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"o\">=</span> <span class=\"kc\">false</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"p\">(</span><span class=\"nv\">types</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"k\">Type</span><span class=\"p\">],</span> <span class=\"nv\">functions</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\">SourceryMethod</span><span class=\"p\">],</span> <span class=\"nv\">typealiases</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\">Typealias</span><span class=\"p\">])</span></code></pre>\n\n                        </div>\n                      </div>\n                      <div>\n                        <h4>Parameters</h4>\n                        <table class=\"graybox\">\n                          <tbody>\n                            <tr>\n                              <td>\n                                <code>\n                                <em>parserResult</em>\n                                </code>\n                              </td>\n                              <td>\n                                <div>\n                                  <p>Result of parsing source code.</p>\n                                </div>\n                              </td>\n                            </tr>\n                            <tr>\n                              <td>\n                                <code>\n                                <em>serial</em>\n                                </code>\n                              </td>\n                              <td>\n                                <div>\n                                  <p>Whether to process results serially instead of concurrently</p>\n                                </div>\n                              </td>\n                            </tr>\n                          </tbody>\n                        </table>\n                      </div>\n                      <div>\n                        <h4>Return Value</h4>\n                        <p>Final types and extensions of unknown types.</p>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Examples.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Examples  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Section/Examples\" class=\"dashAnchor\"></a>\n    <a title=\"Examples  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Examples  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Examples</h1>\n            \n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/documentation.Equatable\"></a>\n                    <a name=\"//apple_ref/swift/Guide/Equatable\" class=\"dashAnchor\"></a>\n                    <a class=\"direct-link\" href=\"equatable.html\">Equatable</a>\n                    </code>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/documentation.Hashable\"></a>\n                    <a name=\"//apple_ref/swift/Guide/Hashable\" class=\"dashAnchor\"></a>\n                    <a class=\"direct-link\" href=\"hashable.html\">Hashable</a>\n                    </code>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/documentation.Enum cases\"></a>\n                    <a name=\"//apple_ref/swift/Guide/Enum cases\" class=\"dashAnchor\"></a>\n                    <a class=\"direct-link\" href=\"enum-cases.html\">Enum cases</a>\n                    </code>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/documentation.Lenses\"></a>\n                    <a name=\"//apple_ref/swift/Guide/Lenses\" class=\"dashAnchor\"></a>\n                    <a class=\"direct-link\" href=\"lenses.html\">Lenses</a>\n                    </code>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/documentation.Mocks\"></a>\n                    <a name=\"//apple_ref/swift/Guide/Mocks\" class=\"dashAnchor\"></a>\n                    <a class=\"direct-link\" href=\"mocks.html\">Mocks</a>\n                    </code>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/documentation.Codable\"></a>\n                    <a name=\"//apple_ref/swift/Guide/Codable\" class=\"dashAnchor\"></a>\n                    <a class=\"direct-link\" href=\"codable.html\">Codable</a>\n                    </code>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP\"></a>\n                    <a name=\"//apple_ref/swift/Protocol/Diffable\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP\">Diffable</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                        <a href=\"Protocols/Diffable.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">protocol</span> <span class=\"kt\">Diffable</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/documentation.Diffable\"></a>\n                    <a name=\"//apple_ref/swift/Guide/Diffable\" class=\"dashAnchor\"></a>\n                    <a class=\"direct-link\" href=\"diffable.html\">Diffable</a>\n                    </code>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/documentation.LinuxMain\"></a>\n                    <a name=\"//apple_ref/swift/Guide/LinuxMain\" class=\"dashAnchor\"></a>\n                    <a class=\"direct-link\" href=\"linuxmain.html\">LinuxMain</a>\n                    </code>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/documentation.Decorator\"></a>\n                    <a name=\"//apple_ref/swift/Guide/Decorator\" class=\"dashAnchor\"></a>\n                    <a class=\"direct-link\" href=\"decorator.html\">Decorator</a>\n                    </code>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Extensions/Array.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Array Extension Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Extension/Array\" class=\"dashAnchor\"></a>\n    <a title=\"Array Extension Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Array Extension Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Array</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">extension</span> <span class=\"kt\">Array</span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Array</span> <span class=\"k\">where</span> <span class=\"kt\">Element</span> <span class=\"o\">==</span> <span class=\"kt\"><a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Array</span> <span class=\"k\">where</span> <span class=\"kt\">Element</span> <span class=\"o\">==</span> <span class=\"kt\"><a href=\"../Classes/MethodParameter.html\">MethodParameter</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Array</span> <span class=\"k\">where</span> <span class=\"kt\">Element</span> <span class=\"o\">==</span> <span class=\"kt\"><a href=\"../Classes/TupleElement.html\">TupleElement</a></span></code></pre>\n\n                </div>\n              </div>\n            \n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:Sa15SourceryRuntimeE15parallelFlatMap9transformSayqd__GADxXE_tlF\"></a>\n                    <a name=\"//apple_ref/swift/Method/parallelFlatMap(transform:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:Sa15SourceryRuntimeE15parallelFlatMap9transformSayqd__GADxXE_tlF\">parallelFlatMap(transform:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">func</span> <span class=\"n\">parallelFlatMap</span><span class=\"o\">&lt;</span><span class=\"kt\">T</span><span class=\"o\">&gt;</span><span class=\"p\">(</span><span class=\"nv\">transform</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"kt\">Element</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"p\">[</span><span class=\"kt\">T</span><span class=\"p\">])</span> <span class=\"o\">-&gt;</span> <span class=\"p\">[</span><span class=\"kt\">T</span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:Sa15SourceryRuntimeE18parallelCompactMap9transformSayqd__Gqd__SgxXE_tlF\"></a>\n                    <a name=\"//apple_ref/swift/Method/parallelCompactMap(transform:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:Sa15SourceryRuntimeE18parallelCompactMap9transformSayqd__Gqd__SgxXE_tlF\">parallelCompactMap(transform:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">func</span> <span class=\"n\">parallelCompactMap</span><span class=\"o\">&lt;</span><span class=\"kt\">T</span><span class=\"o\">&gt;</span><span class=\"p\">(</span><span class=\"nv\">transform</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"kt\">Element</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\">T</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"p\">[</span><span class=\"kt\">T</span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:Sa15SourceryRuntimeE11parallelMap9transformSayqd__Gqd__xXE_tlF\"></a>\n                    <a name=\"//apple_ref/swift/Method/parallelMap(transform:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:Sa15SourceryRuntimeE11parallelMap9transformSayqd__Gqd__xXE_tlF\">parallelMap(transform:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">func</span> <span class=\"n\">parallelMap</span><span class=\"o\">&lt;</span><span class=\"kt\">T</span><span class=\"o\">&gt;</span><span class=\"p\">(</span><span class=\"nv\">transform</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"kt\">Element</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\">T</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"p\">[</span><span class=\"kt\">T</span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:Sa15SourceryRuntimeE15parallelPerformyyyxXEF\"></a>\n                    <a name=\"//apple_ref/swift/Method/parallelPerform(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:Sa15SourceryRuntimeE15parallelPerformyyyxXEF\">parallelPerform(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">func</span> <span class=\"nf\">parallelPerform</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">work</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"kt\">Element</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\">Void</span><span class=\"p\">)</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n            <div class=\"task-group\">\n              <div class=\"task-name-container\">\n                <a name=\"/Available%20where%20%60Element%60%20%3D%3D%20%60ClosureParameter%60\"></a>\n                <a name=\"//apple_ref/swift/Section/Available where `Element` == `ClosureParameter`\" class=\"dashAnchor\"></a>\n                <div class=\"section-name-container\">\n                  <a class=\"section-name-link\" href=\"#/Available%20where%20%60Element%60%20%3D%3D%20%60ClosureParameter%60\"></a>\n                  <h3 class=\"section-name\"><p>Available where <code>Element</code> == <code><a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a></code></p>\n</h3>\n                </div>\n              </div>\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:Sa15SourceryRuntimeAA16ClosureParameterCRszlE8asSourceSSvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/asSource\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:Sa15SourceryRuntimeAA16ClosureParameterCRszlE8asSourceSSvp\">asSource</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asSource</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n            <div class=\"task-group\">\n              <div class=\"task-name-container\">\n                <a name=\"/Available%20where%20%60Element%60%20%3D%3D%20%60MethodParameter%60\"></a>\n                <a name=\"//apple_ref/swift/Section/Available where `Element` == `MethodParameter`\" class=\"dashAnchor\"></a>\n                <div class=\"section-name-container\">\n                  <a class=\"section-name-link\" href=\"#/Available%20where%20%60Element%60%20%3D%3D%20%60MethodParameter%60\"></a>\n                  <h3 class=\"section-name\"><p>Available where <code>Element</code> == <code><a href=\"../Classes/MethodParameter.html\">MethodParameter</a></code></p>\n</h3>\n                </div>\n              </div>\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:Sa15SourceryRuntimeAA15MethodParameterCRszlE8asSourceSSvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/asSource\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:Sa15SourceryRuntimeAA15MethodParameterCRszlE8asSourceSSvp\">asSource</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asSource</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n            <div class=\"task-group\">\n              <div class=\"task-name-container\">\n                <a name=\"/Available%20where%20%60Element%60%20%3D%3D%20%60TupleElement%60\"></a>\n                <a name=\"//apple_ref/swift/Section/Available where `Element` == `TupleElement`\" class=\"dashAnchor\"></a>\n                <div class=\"section-name-container\">\n                  <a class=\"section-name-link\" href=\"#/Available%20where%20%60Element%60%20%3D%3D%20%60TupleElement%60\"></a>\n                  <h3 class=\"section-name\"><p>Available where <code>Element</code> == <code><a href=\"../Classes/TupleElement.html\">TupleElement</a></code></p>\n</h3>\n                </div>\n              </div>\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:Sa15SourceryRuntimeAA12TupleElementCRszlE8asSourceSSvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/asSource\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:Sa15SourceryRuntimeAA12TupleElementCRszlE8asSourceSSvp\">asSource</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asSource</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:Sa15SourceryRuntimeAA12TupleElementCRszlE10asTypeNameSSvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/asTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:Sa15SourceryRuntimeAA12TupleElementCRszlE10asTypeNameSSvp\">asTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">asTypeName</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Extensions/String.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>String Extension Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Extension/String\" class=\"dashAnchor\"></a>\n    <a title=\"String Extension Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        String Extension Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>String</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">extension</span> <span class=\"kt\">String</span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">String</span><span class=\"p\">:</span> <span class=\"kt\">Error</span></code></pre>\n\n                </div>\n              </div>\n            \n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:SS15SourceryRuntimeE10nilIfEmptySSSgvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/nilIfEmpty\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:SS15SourceryRuntimeE10nilIfEmptySSSgvp\">nilIfEmpty</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Returns nil if string is empty</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">var</span> <span class=\"nv\">nilIfEmpty</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:SS15SourceryRuntimeE26nilIfNotValidParameterNameSSSgvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/nilIfNotValidParameterName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:SS15SourceryRuntimeE26nilIfNotValidParameterNameSSSgvp\">nilIfNotValidParameterName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Returns nil if string is empty or contains <code>_</code> character</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">var</span> <span class=\"nv\">nilIfNotValidParameterName</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Extensions/StringProtocol.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>StringProtocol Extension Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Extension/StringProtocol\" class=\"dashAnchor\"></a>\n    <a title=\"StringProtocol Extension Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        StringProtocol Extension Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>StringProtocol</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">extension</span> <span class=\"kt\">StringProtocol</span></code></pre>\n\n                </div>\n              </div>\n            \n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:Sy15SourceryRuntimeE7trimmedSSvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/trimmed\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:Sy15SourceryRuntimeE7trimmedSSvp\">trimmed</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Trimms leading and trailing whitespaces and newlines</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">var</span> <span class=\"nv\">trimmed</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Extensions/Typealias.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Typealias Extension Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Extension/Typealias\" class=\"dashAnchor\"></a>\n    <a title=\"Typealias Extension Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Typealias Extension Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Typealias</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Typealias</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                </div>\n              </div>\n            \n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isOptional\"></a>\n                    <a name=\"//apple_ref/swift/Property/isOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isOptional\">isOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is optional. Shorthand for <code>typeName.isOptional</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isImplicitlyUnwrappedOptional\"></a>\n                    <a name=\"//apple_ref/swift/Property/isImplicitlyUnwrappedOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isImplicitlyUnwrappedOptional\">isImplicitlyUnwrappedOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is implicitly unwrapped optional. Shorthand for <code>typeName.isImplicitlyUnwrappedOptional</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isImplicitlyUnwrappedOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Typealias(py)unwrappedTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/unwrappedTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)unwrappedTypeName\">unwrappedTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name without attributes and optional type information. Shorthand for <code>typeName.unwrappedTypeName</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">unwrappedTypeName</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Typealias(py)actualTypeName\"></a>\n                    <a name=\"//apple_ref/swift/Property/actualTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)actualTypeName\">actualTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Actual type name if declaration uses typealias, otherwise just a <code>typeName</code>. Shorthand for <code>typeName.actualTypeName</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">actualTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isTuple\"></a>\n                    <a name=\"//apple_ref/swift/Property/isTuple\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isTuple\">isTuple</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a tuple. Shorthand for <code>typeName.isTuple</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isTuple</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isClosure\"></a>\n                    <a name=\"//apple_ref/swift/Property/isClosure\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isClosure\">isClosure</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a closure. Shorthand for <code>typeName.isClosure</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isClosure</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isArray\"></a>\n                    <a name=\"//apple_ref/swift/Property/isArray\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isArray\">isArray</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is an array. Shorthand for <code>typeName.isArray</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isArray</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isSet\"></a>\n                    <a name=\"//apple_ref/swift/Property/isSet\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isSet\">isSet</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a set. Shorthand for <code>typeName.isSet</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isSet</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isDictionary\"></a>\n                    <a name=\"//apple_ref/swift/Property/isDictionary\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isDictionary\">isDictionary</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is a dictionary. Shorthand for <code>typeName.isDictionary</code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"k\">var</span> <span class=\"nv\">isDictionary</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Guides.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Guides  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Section/Guides\" class=\"dashAnchor\"></a>\n    <a title=\"Guides  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Guides  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Guides</h1>\n            \n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/documentation.Installing\"></a>\n                    <a name=\"//apple_ref/swift/Guide/Installing\" class=\"dashAnchor\"></a>\n                    <a class=\"direct-link\" href=\"installing.html\">Installing</a>\n                    </code>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/documentation.Usage\"></a>\n                    <a name=\"//apple_ref/swift/Guide/Usage\" class=\"dashAnchor\"></a>\n                    <a class=\"direct-link\" href=\"usage.html\">Usage</a>\n                    </code>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/documentation.Writing templates\"></a>\n                    <a name=\"//apple_ref/swift/Guide/Writing templates\" class=\"dashAnchor\"></a>\n                    <a class=\"direct-link\" href=\"writing-templates.html\">Writing templates</a>\n                    </code>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Other Classes.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Other Classes  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Section/Other Classes\" class=\"dashAnchor\"></a>\n    <a title=\"Other Classes  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Other Classes  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Other Classes</h1>\n            <p>The following classes are available globally.</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftActor\"></a>\n                    <a name=\"//apple_ref/swift/Class/Actor\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftActor\">Actor</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Descibes Swift actor</p>\n\n                        <a href=\"Classes/Actor.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objc</span><span class=\"p\">(</span><span class=\"kt\">SwiftActor</span><span class=\"p\">)</span>\n<span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Actor</span> <span class=\"p\">:</span> <span class=\"k\">Type</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Import\"></a>\n                    <a name=\"//apple_ref/swift/Class/Import\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Import\">Import</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Defines import type</p>\n\n                        <a href=\"Classes/Import.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"kt\">Import</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModelWithoutDescription</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Import</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Modifier\"></a>\n                    <a name=\"//apple_ref/swift/Class/Modifier\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Modifier\">Modifier</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>modifier can be thing like <code>private</code>, <code>class</code>, <code>nonmutating</code>\nif a declaration has modifier like <code>private(set)</code> it&rsquo;s name will be <code>private</code> and detail will be <code>set</code></p>\n\n                        <a href=\"Classes/Modifier.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"kt\">Modifier</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">AutoCoding</span><span class=\"p\">,</span> <span class=\"kt\">AutoEquatable</span><span class=\"p\">,</span> <span class=\"kt\">AutoDiffable</span><span class=\"p\">,</span> <span class=\"kt\">AutoJSExport</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Modifier</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SetType\"></a>\n                    <a name=\"//apple_ref/swift/Class/SetType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SetType\">SetType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes set type</p>\n\n                        <a href=\"Classes/SetType.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">SetType</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">SetType</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)DiffableResult\"></a>\n                    <a name=\"//apple_ref/swift/Class/DiffableResult\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)DiffableResult\">DiffableResult</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                        <a href=\"Classes/DiffableResult.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"kt\">DiffableResult</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">AutoEquatable</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureParameter\"></a>\n                    <a name=\"//apple_ref/swift/Class/ClosureParameter\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureParameter\">ClosureParameter</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                        <a href=\"Classes/ClosureParameter.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">ClosureParameter</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Typed.html\">Typed</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Annotated.html\">Annotated</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">ClosureParameter</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)GenericParameter\"></a>\n                    <a name=\"//apple_ref/swift/Class/GenericParameter\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)GenericParameter\">GenericParameter</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Descibes Swift generic parameter</p>\n\n                        <a href=\"Classes/GenericParameter.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">GenericParameter</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">GenericParameter</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)GenericRequirement\"></a>\n                    <a name=\"//apple_ref/swift/Class/GenericRequirement\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)GenericRequirement\">GenericRequirement</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Descibes Swift generic requirement</p>\n\n                        <a href=\"Classes/GenericRequirement.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"kt\">GenericRequirement</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">GenericRequirement</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Other Enums.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Other Enumerations  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Section/Other Enumerations\" class=\"dashAnchor\"></a>\n    <a title=\"Other Enumerations  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Other Enumerations  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Other Enumerations</h1>\n            <p>The following enumerations are available globally.</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8ComposerO\"></a>\n                    <a name=\"//apple_ref/swift/Enum/Composer\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8ComposerO\">Composer</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Responsible for composing results of <code>FileParser</code>.</p>\n\n                        <a href=\"Enums/Composer.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">enum</span> <span class=\"kt\">Composer</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Other Extensions.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Other Extensions  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Section/Other Extensions\" class=\"dashAnchor\"></a>\n    <a title=\"Other Extensions  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Other Extensions  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Other Extensions</h1>\n            <p>The following extensions are available globally.</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:Sa\"></a>\n                    <a name=\"//apple_ref/swift/Extension/Array\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:Sa\">Array</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                        <a href=\"Extensions/Array.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">extension</span> <span class=\"kt\">Array</span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Array</span> <span class=\"k\">where</span> <span class=\"kt\">Element</span> <span class=\"o\">==</span> <span class=\"kt\"><a href=\"Classes/ClosureParameter.html\">ClosureParameter</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Array</span> <span class=\"k\">where</span> <span class=\"kt\">Element</span> <span class=\"o\">==</span> <span class=\"kt\"><a href=\"Classes/MethodParameter.html\">MethodParameter</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Array</span> <span class=\"k\">where</span> <span class=\"kt\">Element</span> <span class=\"o\">==</span> <span class=\"kt\"><a href=\"Classes/TupleElement.html\">TupleElement</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:Sy\"></a>\n                    <a name=\"//apple_ref/swift/Extension/StringProtocol\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:Sy\">StringProtocol</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                        <a href=\"Extensions/StringProtocol.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">extension</span> <span class=\"kt\">StringProtocol</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:SS\"></a>\n                    <a name=\"//apple_ref/swift/Extension/String\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:SS\">String</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                        <a href=\"Extensions/String.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">extension</span> <span class=\"kt\">String</span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">String</span><span class=\"p\">:</span> <span class=\"kt\">Error</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)BytesRange\"></a>\n                    <a name=\"//apple_ref/swift/Extension/BytesRange\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">BytesRange</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)FileParserResult\"></a>\n                    <a name=\"//apple_ref/swift/Extension/FileParserResult\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">FileParserResult</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Typealias\"></a>\n                    <a name=\"//apple_ref/swift/Extension/Typealias\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Typealias\">Typealias</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                        <a href=\"Extensions/Typealias.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Typealias</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Other Protocols.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Other Protocols  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Section/Other Protocols\" class=\"dashAnchor\"></a>\n    <a title=\"Other Protocols  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Other Protocols  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Other Protocols</h1>\n            <p>The following protocols are available globally.</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime9AnnotatedP\"></a>\n                    <a name=\"//apple_ref/swift/Protocol/Annotated\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime9AnnotatedP\">Annotated</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes annotated declaration, i.e. type, method, variable, enum case</p>\n\n                        <a href=\"Protocols/Annotated.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">protocol</span> <span class=\"kt\">Annotated</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime10DefinitionP\"></a>\n                    <a name=\"//apple_ref/swift/Protocol/Definition\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime10DefinitionP\">Definition</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes that the object is defined in a context of some <code><a href=\"Classes/Type.html\">Type</a></code></p>\n\n                        <a href=\"Protocols/Definition.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">protocol</span> <span class=\"kt\">Definition</span> <span class=\"p\">:</span> <span class=\"kt\">AnyObject</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime10DocumentedP\"></a>\n                    <a name=\"//apple_ref/swift/Protocol/Documented\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime10DocumentedP\">Documented</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes a declaration with documentation, i.e. type, method, variable, enum case</p>\n\n                        <a href=\"Protocols/Documented.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">protocol</span> <span class=\"kt\">Documented</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime5TypedP\"></a>\n                    <a name=\"//apple_ref/swift/Protocol/Typed\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime5TypedP\">Typed</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Descibes typed declaration, i.e. variable, method parameter, tuple element, enum case associated value</p>\n\n                        <a href=\"Protocols/Typed.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">protocol</span> <span class=\"kt\">Typed</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Other Typealiases.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Other Type Aliases  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Section/Other Type Aliases\" class=\"dashAnchor\"></a>\n    <a title=\"Other Type Aliases  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Other Type Aliases  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Other Type Aliases</h1>\n            <p>The following type aliases are available globally.</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime11Annotationsa\"></a>\n                    <a name=\"//apple_ref/swift/Alias/Annotations\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">typealias</span> <span class=\"kt\">Annotations</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"kt\">String</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime13Documentationa\"></a>\n                    <a name=\"//apple_ref/swift/Alias/Documentation\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">typealias</span> <span class=\"kt\">Documentation</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"kt\">String</span><span class=\"p\">]</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime0A8Modifiera\"></a>\n                    <a name=\"//apple_ref/swift/Alias/SourceryModifier\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">typealias</span> <span class=\"kt\">SourceryModifier</span> <span class=\"o\">=</span> <span class=\"kt\"><a href=\"Classes/Modifier.html\">Modifier</a></span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Protocols/Annotated.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Annotated Protocol Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Protocol/Annotated\" class=\"dashAnchor\"></a>\n    <a title=\"Annotated Protocol Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Annotated Protocol Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Annotated</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">protocol</span> <span class=\"kt\">Annotated</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes annotated declaration, i.e. type, method, variable, enum case</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime9AnnotatedP11annotationsSDySSSo8NSObjectCGvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/annotations\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime9AnnotatedP11annotationsSDySSSo8NSObjectCGvp\">annotations</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>All annotations of declaration stored by their name. Value can be <code>bool</code>, <code>String</code>, float <code>NSNumber</code>\nor array of those types if you use several annotations with the same name.</p>\n\n<p><strong>Example:</strong></p>\n<pre class=\"highlight swift\"><code><span class=\"c1\">//sourcery: booleanAnnotation</span>\n<span class=\"c1\">//sourcery: stringAnnotation = \"value\"</span>\n<span class=\"c1\">//sourcery: numericAnnotation = 0.5</span>\n\n<span class=\"p\">[</span>\n <span class=\"s\">\"booleanAnnotation\"</span><span class=\"p\">:</span> <span class=\"kc\">true</span><span class=\"p\">,</span>\n <span class=\"s\">\"stringAnnotation\"</span><span class=\"p\">:</span> <span class=\"s\">\"value\"</span><span class=\"p\">,</span>\n <span class=\"s\">\"numericAnnotation\"</span><span class=\"p\">:</span> <span class=\"mf\">0.5</span>\n<span class=\"p\">]</span>\n</code></pre>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">var</span> <span class=\"nv\">annotations</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a></span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Protocols/Definition.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Definition Protocol Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Protocol/Definition\" class=\"dashAnchor\"></a>\n    <a title=\"Definition Protocol Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Definition Protocol Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Definition</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">protocol</span> <span class=\"kt\">Definition</span> <span class=\"p\">:</span> <span class=\"kt\">AnyObject</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes that the object is defined in a context of some <code><a href=\"../Classes/Type.html\">Type</a></code></p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime10DefinitionP17definedInTypeNameAA0fG0CSgvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/definedInTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime10DefinitionP17definedInTypeNameAA0fG0CSgvp\">definedInTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Reference to type name where the object is defined, \nnil if defined outside of any <code>enum</code>, <code>struct</code>, <code>class</code> etc</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">var</span> <span class=\"nv\">definedInTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime10DefinitionP13definedInTypeAA0F0CSgvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/definedInType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime10DefinitionP13definedInTypeAA0F0CSgvp\">definedInType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Reference to actual type where the object is defined, \nnil if defined outside of any <code>enum</code>, <code>struct</code>, <code>class</code> etc or type is unknown</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">var</span> <span class=\"nv\">definedInType</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime10DefinitionP23actualDefinedInTypeNameAA0gH0CSgvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/actualDefinedInTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime10DefinitionP23actualDefinedInTypeNameAA0gH0CSgvp\">actualDefinedInTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Reference to actual type name where the method is defined if declaration uses typealias, otherwise just a <code><a href=\"../Protocols/Definition.html#/s:15SourceryRuntime10DefinitionP17definedInTypeNameAA0fG0CSgvp\">definedInTypeName</a></code></p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">var</span> <span class=\"nv\">actualDefinedInTypeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Protocols/Diffable.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Diffable Protocol Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Protocol/Diffable\" class=\"dashAnchor\"></a>\n    <a title=\"Diffable Protocol Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Diffable Protocol Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Diffable</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">protocol</span> <span class=\"kt\">Diffable</span></code></pre>\n\n                </div>\n              </div>\n            \n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\"></a>\n                    <a name=\"//apple_ref/swift/Method/diffAgainst(_:)\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\">diffAgainst(_:<wbr>)</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Returns <code><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></code> for the given objects.</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">func</span> <span class=\"nf\">diffAgainst</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">object</span><span class=\"p\">:</span> <span class=\"kt\">Any</span><span class=\"p\">?)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\"><a href=\"../Classes/DiffableResult.html\">DiffableResult</a></span></code></pre>\n\n                        </div>\n                      </div>\n                      <div>\n                        <h4>Parameters</h4>\n                        <table class=\"graybox\">\n                          <tbody>\n                            <tr>\n                              <td>\n                                <code>\n                                <em>object</em>\n                                </code>\n                              </td>\n                              <td>\n                                <div>\n                                  <p>Object to diff against.</p>\n                                </div>\n                              </td>\n                            </tr>\n                          </tbody>\n                        </table>\n                      </div>\n                      <div>\n                        <h4>Return Value</h4>\n                        <p>Diffable results.</p>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Protocols/Documented.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Documented Protocol Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Protocol/Documented\" class=\"dashAnchor\"></a>\n    <a title=\"Documented Protocol Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Documented Protocol Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Documented</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">protocol</span> <span class=\"kt\">Documented</span></code></pre>\n\n                </div>\n              </div>\n            <p>Describes a declaration with documentation, i.e. type, method, variable, enum case</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime10DocumentedP13documentationSaySSGvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/documentation\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime10DocumentedP13documentationSaySSGvp\">documentation</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        \n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">var</span> <span class=\"nv\">documentation</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a></span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Protocols/Typed.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Typed Protocol Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"../js/jquery.min.js\" defer></script>\n    <script src=\"../js/jazzy.js\" defer></script>\n    \n    <script src=\"../js/lunr.min.js\" defer></script>\n    <script src=\"../js/typeahead.jquery.js\" defer></script>\n    <script src=\"../js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Protocol/Typed\" class=\"dashAnchor\"></a>\n    <a title=\"Typed Protocol Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"../index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"../img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"../search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"../index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"../img/carat.png\" />\n        Typed Protocol Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"../Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"../Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"../Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Typed</h1>\n              <div class=\"declaration\">\n                <div class=\"language\">\n                  \n                  <pre class=\"highlight swift\"><code><span class=\"kd\">public</span> <span class=\"kd\">protocol</span> <span class=\"kt\">Typed</span></code></pre>\n\n                </div>\n              </div>\n            <p>Descibes typed declaration, i.e. variable, method parameter, tuple element, enum case associated value</p>\n\n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime5TypedP4typeAA4TypeCSgvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/type\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime5TypedP4typeAA4TypeCSgvp\">type</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type, if known</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">var</span> <span class=\"nv\">type</span><span class=\"p\">:</span> <span class=\"k\">Type</span><span class=\"p\">?</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime5TypedP8typeNameAA04TypeE0Cvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/typeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime5TypedP8typeNameAA04TypeE0Cvp\">typeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">var</span> <span class=\"nv\">typeName</span><span class=\"p\">:</span> <span class=\"kt\"><a href=\"../Classes/TypeName.html\">TypeName</a></span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime5TypedP10isOptionalSbvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/isOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime5TypedP10isOptionalSbvp\">isOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is optional</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">var</span> <span class=\"nv\">isOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime5TypedP29isImplicitlyUnwrappedOptionalSbvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/isImplicitlyUnwrappedOptional\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime5TypedP29isImplicitlyUnwrappedOptionalSbvp\">isImplicitlyUnwrappedOptional</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Whether type is implicitly unwrapped optional</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">var</span> <span class=\"nv\">isImplicitlyUnwrappedOptional</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/s:15SourceryRuntime5TypedP17unwrappedTypeNameSSvp\"></a>\n                    <a name=\"//apple_ref/swift/Property/unwrappedTypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/s:15SourceryRuntime5TypedP17unwrappedTypeNameSSvp\">unwrappedTypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Type name without attributes and optional type information</p>\n\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"k\">var</span> <span class=\"nv\">unwrappedTypeName</span><span class=\"p\">:</span> <span class=\"kt\">String</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/Types.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Types  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a name=\"//apple_ref/swift/Section/Types\" class=\"dashAnchor\"></a>\n    <a title=\"Types  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Types  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            <h1>Types</h1>\n            \n          </section>\n          <section class=\"section task-group-section\">\n            <div class=\"task-group\">\n              <ul>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Types\"></a>\n                    <a name=\"//apple_ref/swift/Class/Types\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Types\">Types</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Collection of scanned types for accessing in templates</p>\n\n                        <a href=\"Classes/Types.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Types</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Types</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Type\"></a>\n                    <a name=\"//apple_ref/swift/Class/Type\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Type\">Type</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Defines Swift type</p>\n\n                        <a href=\"Classes/Type.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"k\">Type</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Annotated.html\">Annotated</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Documented.html\">Documented</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"k\">Type</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Protocol\"></a>\n                    <a name=\"//apple_ref/swift/Class/Protocol\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Protocol\">Protocol</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes Swift protocol</p>\n\n                        <a href=\"Classes/Protocol.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Protocol</span> <span class=\"p\">:</span> <span class=\"k\">Type</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftClass\"></a>\n                    <a name=\"//apple_ref/swift/Class/Class\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftClass\">Class</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Descibes Swift class</p>\n\n                        <a href=\"Classes/Class.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objc</span><span class=\"p\">(</span><span class=\"kt\">SwiftClass</span><span class=\"p\">)</span>\n<span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Class</span> <span class=\"p\">:</span> <span class=\"k\">Type</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Struct\"></a>\n                    <a name=\"//apple_ref/swift/Class/Struct\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Struct\">Struct</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes Swift struct</p>\n\n                        <a href=\"Classes/Struct.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Struct</span> <span class=\"p\">:</span> <span class=\"k\">Type</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Enum\"></a>\n                    <a name=\"//apple_ref/swift/Class/Enum\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Enum\">Enum</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Defines Swift enum</p>\n\n                        <a href=\"Classes/Enum.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Enum</span> <span class=\"p\">:</span> <span class=\"k\">Type</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)EnumCase\"></a>\n                    <a name=\"//apple_ref/swift/Class/EnumCase\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)EnumCase\">EnumCase</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Defines enum case</p>\n\n                        <a href=\"Classes/EnumCase.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">EnumCase</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\">AutoDescription</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Annotated.html\">Annotated</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Documented.html\">Documented</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">EnumCase</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)AssociatedValue\"></a>\n                    <a name=\"//apple_ref/swift/Class/AssociatedValue\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)AssociatedValue\">AssociatedValue</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Defines enum case associated value</p>\n\n                        <a href=\"Classes/AssociatedValue.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">AssociatedValue</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\">AutoDescription</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Typed.html\">Typed</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Annotated.html\">Annotated</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">AssociatedValue</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)AssociatedType\"></a>\n                    <a name=\"//apple_ref/swift/Class/AssociatedType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)AssociatedType\">AssociatedType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes Swift AssociatedType</p>\n\n                        <a href=\"Classes/AssociatedType.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">AssociatedType</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">AssociatedType</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Variable\"></a>\n                    <a name=\"//apple_ref/swift/Class/Variable\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Variable\">Variable</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Defines variable</p>\n\n                        <a href=\"Classes/Variable.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Variable</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Typed.html\">Typed</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Annotated.html\">Annotated</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Documented.html\">Documented</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Definition.html\">Definition</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Variable</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)SwiftMethod\"></a>\n                    <a name=\"//apple_ref/swift/Class/Method\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)SwiftMethod\">Method</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes method</p>\n\n                        <a href=\"Classes/Method.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objc</span><span class=\"p\">(</span><span class=\"kt\">SwiftMethod</span><span class=\"p\">)</span>\n<span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Method</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Annotated.html\">Annotated</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Documented.html\">Documented</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Definition.html\">Definition</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Method</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)MethodParameter\"></a>\n                    <a name=\"//apple_ref/swift/Class/MethodParameter\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)MethodParameter\">MethodParameter</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes method parameter</p>\n\n                        <a href=\"Classes/MethodParameter.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"kt\">MethodParameter</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Typed.html\">Typed</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Annotated.html\">Annotated</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">MethodParameter</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Subscript\"></a>\n                    <a name=\"//apple_ref/swift/Class/Subscript\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Subscript\">Subscript</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes subscript</p>\n\n                        <a href=\"Classes/Subscript.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">Subscript</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Annotated.html\">Annotated</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Documented.html\">Documented</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Definition.html\">Definition</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Subscript</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TypeName\"></a>\n                    <a name=\"//apple_ref/swift/Class/TypeName\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TypeName\">TypeName</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes name of the type used in typed declaration (variable, method parameter or return value etc.)</p>\n\n                        <a href=\"Classes/TypeName.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">TypeName</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModelWithoutDescription</span><span class=\"p\">,</span> <span class=\"kt\">LosslessStringConvertible</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">TypeName</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TupleType\"></a>\n                    <a name=\"//apple_ref/swift/Class/TupleType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TupleType\">TupleType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes tuple type</p>\n\n                        <a href=\"Classes/TupleType.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">TupleType</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">TupleType</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)TupleElement\"></a>\n                    <a name=\"//apple_ref/swift/Class/TupleElement\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)TupleElement\">TupleElement</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes tuple type element</p>\n\n                        <a href=\"Classes/TupleElement.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">TupleElement</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Typed.html\">Typed</a></span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">TupleElement</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ArrayType\"></a>\n                    <a name=\"//apple_ref/swift/Class/ArrayType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ArrayType\">ArrayType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes array type</p>\n\n                        <a href=\"Classes/ArrayType.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">ArrayType</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">ArrayType</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)DictionaryType\"></a>\n                    <a name=\"//apple_ref/swift/Class/DictionaryType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)DictionaryType\">DictionaryType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes dictionary type</p>\n\n                        <a href=\"Classes/DictionaryType.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">DictionaryType</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">DictionaryType</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ClosureType\"></a>\n                    <a name=\"//apple_ref/swift/Class/ClosureType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ClosureType\">ClosureType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes closure type</p>\n\n                        <a href=\"Classes/ClosureType.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">ClosureType</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">ClosureType</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)GenericType\"></a>\n                    <a name=\"//apple_ref/swift/Class/GenericType\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)GenericType\">GenericType</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Descibes Swift generic type</p>\n\n                        <a href=\"Classes/GenericType.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">GenericType</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModelWithoutDescription</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">GenericType</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)GenericTypeParameter\"></a>\n                    <a name=\"//apple_ref/swift/Class/GenericTypeParameter\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)GenericTypeParameter\">GenericTypeParameter</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Descibes Swift generic type parameter</p>\n\n                        <a href=\"Classes/GenericTypeParameter.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">GenericTypeParameter</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">SourceryModel</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">GenericTypeParameter</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)Attribute\"></a>\n                    <a name=\"//apple_ref/swift/Class/Attribute\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)Attribute\">Attribute</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes Swift attribute</p>\n\n                        <a href=\"Classes/Attribute.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">class</span> <span class=\"kt\">Attribute</span> <span class=\"p\">:</span> <span class=\"kt\">NSObject</span><span class=\"p\">,</span> <span class=\"kt\">AutoCoding</span><span class=\"p\">,</span> <span class=\"kt\">AutoEquatable</span><span class=\"p\">,</span> <span class=\"kt\">AutoDiffable</span><span class=\"p\">,</span> <span class=\"kt\">AutoJSExport</span><span class=\"p\">,</span> <span class=\"kt\"><a href=\"Protocols/Diffable.html\">Diffable</a></span></code></pre>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">Attribute</span><span class=\"p\">:</span> <span class=\"kt\">NSCoding</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n                <li class=\"item\">\n                  <div>\n                    <code>\n                    <a name=\"/c:@M@SourceryRuntime@objc(cs)ProtocolComposition\"></a>\n                    <a name=\"//apple_ref/swift/Class/ProtocolComposition\" class=\"dashAnchor\"></a>\n                    <a class=\"token\" href=\"#/c:@M@SourceryRuntime@objc(cs)ProtocolComposition\">ProtocolComposition</a>\n                    </code>\n                  </div>\n                  <div class=\"height-container\">\n                    <div class=\"pointer-container\"></div>\n                    <section class=\"section\">\n                      <div class=\"pointer\"></div>\n                      <div class=\"abstract\">\n                        <p>Describes a Swift <a href=\"https://docs.swift.org/swift-book/ReferenceManual/Types.html#ID454\">protocol composition</a>.</p>\n\n                        <a href=\"Classes/ProtocolComposition.html\" class=\"slightly-smaller\">See more</a>\n                      </div>\n                      <div class=\"declaration\">\n                        <h4>Declaration</h4>\n                        <div class=\"language\">\n                          <p class=\"aside-title\">Swift</p>\n                          <pre class=\"highlight swift\"><code><span class=\"kd\">@objcMembers</span>\n<span class=\"kd\">public</span> <span class=\"kd\">final</span> <span class=\"kd\">class</span> <span class=\"kt\">ProtocolComposition</span> <span class=\"p\">:</span> <span class=\"k\">Type</span></code></pre>\n\n                        </div>\n                      </div>\n                    </section>\n                  </div>\n                </li>\n              </ul>\n            </div>\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/codable.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Codable  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a title=\"Codable  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Codable  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            \n            <h2 id='i-want-to-generate-code-codable-code-implementation' class='heading'>I want to generate <code>Codable</code> implementation</h2>\n\n<p>This template generates <code>Codable</code> implementation for structs that implement  <code>AutoCodable</code>, <code>AutoDecodable</code> or  <code>AutoEncodable</code> protocols. You should define these protocols as follows:</p>\n<pre class=\"highlight swift\"><code><span class=\"kd\">protocol</span> <span class=\"kt\">AutoDecodable</span><span class=\"p\">:</span> <span class=\"kt\">Decodable</span> <span class=\"p\">{}</span>\n<span class=\"kd\">protocol</span> <span class=\"kt\">AutoEncodable</span><span class=\"p\">:</span> <span class=\"kt\">Encodable</span> <span class=\"p\">{}</span>\n<span class=\"kd\">protocol</span> <span class=\"kt\">AutoCodable</span><span class=\"p\">:</span> <span class=\"kt\">AutoDecodable</span><span class=\"p\">,</span> <span class=\"kt\">AutoEncodable</span> <span class=\"p\">{}</span>\n</code></pre>\n<h3 id='a-href-https-github-com-krzysztofzablocki-sourcery-blob-master-templates-templates-autocodable-swifttemplate-swift-template-a' class='heading'><a href=\"https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/AutoCodable.swifttemplate\">Swift template</a></h3>\n<h3 id='generating-coding-keys' class='heading'>Generating coding keys.</h3>\n\n<p>If you have few keys that are not matching default key strategy you have to specify only these keys, all other keys will be generated and inlined by the template:  </p>\n<pre class=\"highlight swift\"><code><span class=\"kd\">struct</span> <span class=\"kt\">Person</span><span class=\"p\">:</span> <span class=\"kt\">AutoDecodable</span> <span class=\"p\">{</span>\n    <span class=\"k\">let</span> <span class=\"nv\">id</span><span class=\"p\">:</span> <span class=\"kt\">String</span>\n    <span class=\"k\">let</span> <span class=\"nv\">firstName</span><span class=\"p\">:</span> <span class=\"kt\">Bool</span>\n    <span class=\"k\">let</span> <span class=\"nv\">surname</span><span class=\"p\">:</span> <span class=\"kt\">String</span>\n\n    <span class=\"kd\">enum</span> <span class=\"kt\">CodingKeys</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">,</span> <span class=\"kt\">CodingKey</span> <span class=\"p\">{</span>\n        <span class=\"c1\">// this is the custom key that you define manually</span>\n        <span class=\"k\">case</span> <span class=\"n\">firstName</span> <span class=\"o\">=</span> <span class=\"s\">\"first_name\"</span>\n\n<span class=\"c1\">// sourcery:inline:auto:Person.CodingKeys.AutoCodable</span>\n        <span class=\"c1\">// the rest is generated by the template</span>\n        <span class=\"k\">case</span> <span class=\"n\">id</span>\n        <span class=\"k\">case</span> <span class=\"n\">surname</span>\n<span class=\"c1\">// sourcery:end</span>\n    <span class=\"p\">}</span>\n\n<span class=\"p\">}</span>\n</code></pre>\n\n<p>Computed properties are not encoded by default, but if you define a coding key for computed property, template will generate code that will encode it.</p>\n\n<p>If you don&rsquo;t define any keys manually the template will generate <code>CodingKeys</code> enum with the keys for all stored properties, but only if custom implementation of <code>init(from:)</code> or <code>encode(to:)</code> is needed.</p>\n<h3 id='generating-code-init-from-code-constructor' class='heading'>Generating <code>init(from:)</code> constructor.</h3>\n\n<p>Template will generate implementation of  <code>init(from:)</code> when needed. You can define additional methods and properties on your type to be used to decode it.</p>\n\n<ul>\n<li>method to get decoding container. This is useful if your type needs to be decoded from a nested key(s):</li>\n</ul>\n<pre class=\"highlight swift\"><code><span class=\"kd\">struct</span> <span class=\"kt\">MyStruct</span><span class=\"p\">:</span> <span class=\"kt\">AutoDecodable</span> <span class=\"p\">{</span>\n    <span class=\"k\">let</span> <span class=\"nv\">value</span><span class=\"p\">:</span> <span class=\"kt\">Int</span>\n\n    <span class=\"kd\">enum</span> <span class=\"kt\">CodingKeys</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">,</span> <span class=\"kt\">CodingKey</span> <span class=\"p\">{</span>\n        <span class=\"k\">case</span> <span class=\"n\">nested</span>\n        <span class=\"k\">case</span> <span class=\"n\">value</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"kd\">static</span> <span class=\"kd\">func</span> <span class=\"nf\">decodingContainer</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">decoder</span><span class=\"p\">:</span> <span class=\"kt\">Decoder</span><span class=\"p\">)</span> <span class=\"k\">throws</span> <span class=\"o\">-&gt;</span> <span class=\"kt\">KeyedDecodingContainer</span><span class=\"o\">&lt;</span><span class=\"kt\">CodingKeys</span><span class=\"o\">&gt;</span> <span class=\"p\">{</span>\n        <span class=\"k\">return</span> <span class=\"k\">try</span> <span class=\"n\">decoder</span><span class=\"o\">.</span><span class=\"nf\">container</span><span class=\"p\">(</span><span class=\"nv\">keyedBy</span><span class=\"p\">:</span> <span class=\"kt\">CodingKeys</span><span class=\"o\">.</span><span class=\"k\">self</span><span class=\"p\">)</span>\n            <span class=\"o\">.</span><span class=\"nf\">nestedContainer</span><span class=\"p\">(</span><span class=\"nv\">keyedBy</span><span class=\"p\">:</span> <span class=\"kt\">CodingKeys</span><span class=\"o\">.</span><span class=\"k\">self</span><span class=\"p\">,</span> <span class=\"nv\">forKey</span><span class=\"p\">:</span> <span class=\"o\">.</span><span class=\"n\">nested</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre>\n\n<ul>\n<li>method to decode a property. This is useful if you need to decode some property manually:</li>\n</ul>\n<pre class=\"highlight swift\"><code><span class=\"kd\">struct</span> <span class=\"kt\">MyStruct</span><span class=\"p\">:</span> <span class=\"kt\">AutoDecodable</span> <span class=\"p\">{</span>\n    <span class=\"k\">let</span> <span class=\"nv\">myProperty</span><span class=\"p\">:</span> <span class=\"kt\">Int</span>\n\n    <span class=\"kd\">static</span> <span class=\"kd\">func</span> <span class=\"nf\">decodeMyProperty</span><span class=\"p\">(</span><span class=\"n\">from</span> <span class=\"nv\">container</span><span class=\"p\">:</span> <span class=\"kt\">KeyedDecodingContainer</span><span class=\"o\">&lt;</span><span class=\"kt\">CodingKeys</span><span class=\"o\">&gt;</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\">Int</span><span class=\"p\">?</span> <span class=\"p\">{</span>\n        <span class=\"nf\">return</span> <span class=\"p\">(</span><span class=\"k\">try</span><span class=\"p\">?</span> <span class=\"n\">container</span><span class=\"o\">.</span><span class=\"nf\">decode</span><span class=\"p\">(</span><span class=\"kt\">String</span><span class=\"o\">.</span><span class=\"k\">self</span><span class=\"p\">,</span> <span class=\"nv\">forKey</span><span class=\"p\">:</span> <span class=\"o\">.</span><span class=\"n\">myProperty</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"nf\">flatMap</span><span class=\"p\">(</span><span class=\"kt\">Int</span><span class=\"o\">.</span><span class=\"kd\">init</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n    <span class=\"c1\">//or</span>\n    <span class=\"kd\">static</span> <span class=\"kd\">func</span> <span class=\"nf\">decodeMyProperty</span><span class=\"p\">(</span><span class=\"n\">from</span> <span class=\"nv\">decoder</span><span class=\"p\">:</span> <span class=\"kt\">Decoder</span><span class=\"p\">)</span> <span class=\"k\">throws</span> <span class=\"o\">-&gt;</span> <span class=\"kt\">Int</span> <span class=\"p\">{</span>\n        <span class=\"k\">return</span> <span class=\"k\">try</span> <span class=\"n\">decoder</span><span class=\"o\">.</span><span class=\"nf\">container</span><span class=\"p\">(</span><span class=\"nv\">keyedBy</span><span class=\"p\">:</span> <span class=\"kt\">CodingKeys</span><span class=\"o\">.</span><span class=\"k\">self</span><span class=\"p\">)</span>\n            <span class=\"o\">.</span><span class=\"nf\">decode</span><span class=\"p\">(</span><span class=\"kt\">Int</span><span class=\"o\">.</span><span class=\"k\">self</span><span class=\"p\">,</span> <span class=\"nv\">forKey</span><span class=\"p\">:</span> <span class=\"o\">.</span><span class=\"n\">myProperty</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre>\n\n<p>These methods can throw or not and can return optional or non-optional result.</p>\n\n<ul>\n<li>default property value. You can define a static variable that will be used as a default value of a property if decoding results in <code>nil</code> value:</li>\n</ul>\n<pre class=\"highlight swift\"><code><span class=\"kd\">struct</span> <span class=\"kt\">MyStruct</span><span class=\"p\">:</span> <span class=\"kt\">AutoDecodable</span> <span class=\"p\">{</span>\n    <span class=\"k\">let</span> <span class=\"nv\">myProperty</span><span class=\"p\">:</span> <span class=\"kt\">Int</span>\n\n    <span class=\"kd\">static</span> <span class=\"k\">let</span> <span class=\"nv\">defaultMyProperty</span><span class=\"p\">:</span> <span class=\"kt\">Int</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n<span class=\"p\">}</span>\n</code></pre>\n<h3 id='generating-code-encode-to-code-method' class='heading'>Generating <code>encode(to:)</code> method.</h3>\n\n<p>Template will generate implementation of <code>encode(to:)</code> method when needed. You can define additional methods to be used to encode it.</p>\n\n<ul>\n<li>method to get encoding container. This is useful if your type needs to be encoded into a nested key(s):</li>\n</ul>\n<pre class=\"highlight swift\"><code><span class=\"kd\">struct</span> <span class=\"kt\">MyStruct</span><span class=\"p\">:</span> <span class=\"kt\">AutoDecodable</span> <span class=\"p\">{</span>\n    <span class=\"k\">let</span> <span class=\"nv\">value</span><span class=\"p\">:</span> <span class=\"kt\">Int</span>\n\n    <span class=\"kd\">enum</span> <span class=\"kt\">CodingKeys</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">,</span> <span class=\"kt\">CodingKey</span> <span class=\"p\">{</span>\n        <span class=\"k\">case</span> <span class=\"n\">nested</span>\n        <span class=\"k\">case</span> <span class=\"n\">value</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"kd\">func</span> <span class=\"nf\">encodingContainer</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">encoder</span><span class=\"p\">:</span> <span class=\"kt\">Encoder</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\">KeyedEncodingContainer</span><span class=\"o\">&lt;</span><span class=\"kt\">CodingKeys</span><span class=\"o\">&gt;</span> <span class=\"p\">{</span>\n        <span class=\"k\">var</span> <span class=\"nv\">container</span> <span class=\"o\">=</span> <span class=\"n\">encoder</span><span class=\"o\">.</span><span class=\"nf\">container</span><span class=\"p\">(</span><span class=\"nv\">keyedBy</span><span class=\"p\">:</span> <span class=\"kt\">CodingKeys</span><span class=\"o\">.</span><span class=\"k\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">container</span><span class=\"o\">.</span><span class=\"nf\">nestedContainer</span><span class=\"p\">(</span><span class=\"nv\">keyedBy</span><span class=\"p\">:</span> <span class=\"kt\">CodingKeys</span><span class=\"o\">.</span><span class=\"k\">self</span><span class=\"p\">,</span> <span class=\"nv\">forKey</span><span class=\"p\">:</span> <span class=\"o\">.</span><span class=\"n\">nested</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre>\n\n<ul>\n<li>method to encode a property. This is useful when you need to manually encode a property:</li>\n</ul>\n<pre class=\"highlight swift\"><code><span class=\"kd\">struct</span> <span class=\"kt\">MyStruct</span><span class=\"p\">:</span> <span class=\"kt\">AutoDecodable</span> <span class=\"p\">{</span>\n    <span class=\"k\">let</span> <span class=\"nv\">myProperty</span><span class=\"p\">:</span> <span class=\"kt\">Int</span>\n\n    <span class=\"kd\">func</span> <span class=\"nf\">encodeMyProperty</span><span class=\"p\">(</span><span class=\"n\">to</span> <span class=\"nv\">container</span><span class=\"p\">:</span> <span class=\"k\">inout</span> <span class=\"kt\">KeyedEncodingContainer</span><span class=\"o\">&lt;</span><span class=\"kt\">CodingKeys</span><span class=\"o\">&gt;</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n        <span class=\"k\">try</span><span class=\"p\">?</span> <span class=\"n\">container</span><span class=\"o\">.</span><span class=\"nf\">decode</span><span class=\"p\">(</span><span class=\"kt\">String</span><span class=\"p\">(</span><span class=\"n\">myProperty</span><span class=\"p\">),</span> <span class=\"nv\">forKey</span><span class=\"p\">:</span> <span class=\"o\">.</span><span class=\"n\">myProperty</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n    <span class=\"c1\">//or</span>\n    <span class=\"kd\">func</span> <span class=\"nf\">encodeMyProperty</span><span class=\"p\">(</span><span class=\"n\">to</span> <span class=\"nv\">encoder</span><span class=\"p\">:</span> <span class=\"kt\">Encoder</span><span class=\"p\">)</span> <span class=\"k\">throws</span> <span class=\"p\">{</span>\n        <span class=\"k\">var</span> <span class=\"nv\">container</span> <span class=\"o\">=</span> <span class=\"n\">encoder</span><span class=\"o\">.</span><span class=\"nf\">container</span><span class=\"p\">(</span><span class=\"nv\">keyedBy</span><span class=\"p\">:</span> <span class=\"kt\">CodingKeys</span><span class=\"o\">.</span><span class=\"k\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">try</span> <span class=\"n\">container</span><span class=\"o\">.</span><span class=\"nf\">encode</span><span class=\"p\">(</span><span class=\"kt\">String</span><span class=\"p\">(</span><span class=\"n\">myProperty</span><span class=\"p\">),</span> <span class=\"nv\">forKey</span><span class=\"p\">:</span> <span class=\"o\">.</span><span class=\"n\">myProperty</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre>\n\n<p>These methods may throw or not. </p>\n\n<p>If you need to manually encode computed property and you have defined custom encoding method for it, template will generate a coding key for it too, so you don&rsquo;t have to define it manually (though you may still need to define it if it needs custom raw value).</p>\n\n<ul>\n<li>method to encode any additional values. This is useful when you need to encode computed properties or constant values:</li>\n</ul>\n<pre class=\"highlight swift\"><code><span class=\"kd\">struct</span> <span class=\"kt\">MyStruct</span><span class=\"p\">:</span> <span class=\"kt\">AutoDecodable</span> <span class=\"p\">{</span>\n\n    <span class=\"kd\">func</span> <span class=\"nf\">encodeAdditionalValues</span><span class=\"p\">(</span><span class=\"n\">to</span> <span class=\"nv\">container</span><span class=\"p\">:</span> <span class=\"k\">inout</span> <span class=\"kt\">KeyedEncodingContainer</span><span class=\"o\">&lt;</span><span class=\"kt\">CodingKeys</span><span class=\"o\">&gt;</span><span class=\"p\">)</span> <span class=\"k\">throws</span> <span class=\"p\">{</span>\n        <span class=\"o\">...</span>\n    <span class=\"p\">}</span>\n    <span class=\"c1\">// or</span>\n    <span class=\"kd\">func</span> <span class=\"nf\">encodeAdditionalValues</span><span class=\"p\">(</span><span class=\"n\">to</span> <span class=\"nv\">encoder</span><span class=\"p\">:</span> <span class=\"kt\">Encoder</span><span class=\"p\">)</span> <span class=\"k\">throws</span> <span class=\"p\">{</span>\n        <span class=\"o\">...</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre>\n\n<p>This method will be called in the end of generated encoding method.</p>\n\n<ul>\n<li>enum <code>SkipEncodingKeys</code> for keys to be skipped during encoding. This is useful when you have stored properties that you don&rsquo;t want to encode, i.e. constants:</li>\n</ul>\n<pre class=\"highlight swift\"><code>  <span class=\"kd\">struct</span> <span class=\"kt\">MyStruct</span><span class=\"p\">:</span> <span class=\"kt\">AutoCodable</span> <span class=\"p\">{</span>\n      <span class=\"k\">let</span> <span class=\"nv\">value</span><span class=\"p\">:</span> <span class=\"kt\">Int</span>\n      <span class=\"k\">let</span> <span class=\"nv\">skipValue</span><span class=\"p\">:</span> <span class=\"kt\">Int</span>\n\n      <span class=\"kd\">enum</span> <span class=\"kt\">SkipEncodingKeys</span> <span class=\"p\">{</span>\n          <span class=\"k\">case</span> <span class=\"n\">skipValue</span>\n      <span class=\"p\">}</span>\n  <span class=\"p\">}</span>\n</code></pre>\n<h3 id='codable-enums' class='heading'>Codable enums</h3>\n\n<p>Enums with numeric or string raw values are <code>Codable</code> by default. For enums with no raw value or with associated values template will generate <code>Codable</code> implementation.</p>\n<h4 id='enums-with-no-raw-values-and-no-associated-values' class='heading'>Enums with no raw values and no associated values</h4>\n\n<p>For such enums template will generate decoding/encoding code that will expect values in JSON to be exactly the same as cases&rsquo; names.</p>\n<pre class=\"highlight swift\"><code><span class=\"kd\">enum</span> <span class=\"kt\">SimpleEnum</span><span class=\"p\">:</span> <span class=\"kt\">AutoDecodable</span> <span class=\"p\">{</span>\n  <span class=\"k\">case</span> <span class=\"n\">someCase</span>\n  <span class=\"k\">case</span> <span class=\"n\">anotherCase</span>\n<span class=\"p\">}</span>\n</code></pre>\n\n<p>For such enum template will generate code that will successfully decode from/encode to JSON of following form:</p>\n<pre class=\"highlight json\"><code><span class=\"p\">{</span><span class=\"w\">\n  </span><span class=\"nl\">\"value\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"someCase\"</span><span class=\"w\">\n  </span><span class=\"nl\">\"anotherValue\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"anotherCase\"</span><span class=\"w\">\n</span><span class=\"p\">}</span><span class=\"w\">\n</span></code></pre>\n\n<p>You can define coding keys to change the values:</p>\n<pre class=\"highlight swift\"><code><span class=\"kd\">enum</span> <span class=\"kt\">SimpleEnum</span><span class=\"p\">:</span> <span class=\"kt\">AutoDecodable</span> <span class=\"p\">{</span>\n  <span class=\"k\">case</span> <span class=\"n\">someCase</span>\n  <span class=\"k\">case</span> <span class=\"n\">anotherCase</span>\n\n  <span class=\"kd\">enum</span> <span class=\"kt\">CodingKeys</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">,</span> <span class=\"kt\">CodingKey</span> <span class=\"p\">{</span>\n    <span class=\"k\">case</span> <span class=\"n\">someCase</span> <span class=\"o\">=</span> <span class=\"s\">\"some_case\"</span>\n    <span class=\"k\">case</span> <span class=\"n\">anotherCase</span> <span class=\"o\">=</span> <span class=\"s\">\"another_case\"</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre>\n<h4 id='enums-with-assoicated-values' class='heading'>Enums with assoicated values</h4>\n\n<p>Template supports two different representations of such enums in JSON format.</p>\n<pre class=\"highlight swift\"><code><span class=\"kd\">enum</span> <span class=\"kt\">SimpleEnum</span><span class=\"p\">:</span> <span class=\"kt\">AutoDecodable</span> <span class=\"p\">{</span>\n  <span class=\"k\">case</span> <span class=\"nf\">someCase</span><span class=\"p\">(</span><span class=\"nv\">id</span><span class=\"p\">:</span> <span class=\"kt\">Int</span><span class=\"p\">,</span> <span class=\"nv\">name</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">)</span>\n  <span class=\"k\">case</span> <span class=\"n\">anotherCase</span>\n<span class=\"p\">}</span>\n</code></pre>\n\n<p>If you define a coding key named <code>enumCaseKey</code> then the template will generate code that will encode/decode enum in/from following format:</p>\n<pre class=\"highlight json\"><code><span class=\"p\">{</span><span class=\"w\">\n  </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"someCase\"</span><span class=\"w\"> </span><span class=\"err\">//</span><span class=\"w\"> </span><span class=\"err\">enum</span><span class=\"w\"> </span><span class=\"err\">case</span><span class=\"w\"> </span><span class=\"err\">is</span><span class=\"w\"> </span><span class=\"err\">encoded</span><span class=\"w\"> </span><span class=\"err\">in</span><span class=\"w\"> </span><span class=\"err\">a</span><span class=\"w\"> </span><span class=\"err\">special</span><span class=\"w\"> </span><span class=\"err\">key</span><span class=\"w\">\n  </span><span class=\"nl\">\"id\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"w\">\n  </span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"John\"</span><span class=\"w\">\n</span><span class=\"p\">}</span><span class=\"w\">\n</span></code></pre>\n\n<p>All enum cases associated values must be named.</p>\n\n<p>If you don&rsquo;t define <code>enumCaseKey</code> then the template will generate code that will encode/decode enum in/from following format:</p>\n<pre class=\"highlight json\"><code><span class=\"p\">{</span><span class=\"w\">\n  </span><span class=\"nl\">\"someCase\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">\n    </span><span class=\"nl\">\"id\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"John\"</span><span class=\"w\">\n  </span><span class=\"p\">}</span><span class=\"w\">\n</span><span class=\"p\">}</span><span class=\"w\">\n</span></code></pre>\n\n<p>Associated values of each enum case must be either all named or all unnamed.\nFor cases with unnamed associated values JSON format will use array instead of dictionary for associated values, in the same order in which they are defined:</p>\n<pre class=\"highlight json\"><code><span class=\"p\">{</span><span class=\"w\">\n  </span><span class=\"nl\">\"someCase\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"w\">\n    </span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"s2\">\"Jhon\"</span><span class=\"w\">\n  </span><span class=\"p\">]</span><span class=\"w\">\n</span><span class=\"p\">}</span><span class=\"w\">\n</span></code></pre>\n\n<p>You can use all other customisation methods described for structs to decode/encode enum case associated values individually. </p>\n\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/css/highlight.css",
    "content": "/*! Jazzy - https://github.com/realm/jazzy\n *  Copyright Realm Inc.\n *  SPDX-License-Identifier: MIT\n */\n/* Credit to https://gist.github.com/wataru420/2048287 */\n.highlight .c {\n  color: #999988;\n  font-style: italic; }\n\n.highlight .err {\n  color: #a61717;\n  background-color: #e3d2d2; }\n\n.highlight .k {\n  color: #000000;\n  font-weight: bold; }\n\n.highlight .o {\n  color: #000000;\n  font-weight: bold; }\n\n.highlight .cm {\n  color: #999988;\n  font-style: italic; }\n\n.highlight .cp {\n  color: #999999;\n  font-weight: bold; }\n\n.highlight .c1 {\n  color: #999988;\n  font-style: italic; }\n\n.highlight .cs {\n  color: #999999;\n  font-weight: bold;\n  font-style: italic; }\n\n.highlight .gd {\n  color: #000000;\n  background-color: #ffdddd; }\n\n.highlight .gd .x {\n  color: #000000;\n  background-color: #ffaaaa; }\n\n.highlight .ge {\n  color: #000000;\n  font-style: italic; }\n\n.highlight .gr {\n  color: #aa0000; }\n\n.highlight .gh {\n  color: #999999; }\n\n.highlight .gi {\n  color: #000000;\n  background-color: #ddffdd; }\n\n.highlight .gi .x {\n  color: #000000;\n  background-color: #aaffaa; }\n\n.highlight .go {\n  color: #888888; }\n\n.highlight .gp {\n  color: #555555; }\n\n.highlight .gs {\n  font-weight: bold; }\n\n.highlight .gu {\n  color: #aaaaaa; }\n\n.highlight .gt {\n  color: #aa0000; }\n\n.highlight .kc {\n  color: #000000;\n  font-weight: bold; }\n\n.highlight .kd {\n  color: #000000;\n  font-weight: bold; }\n\n.highlight .kp {\n  color: #000000;\n  font-weight: bold; }\n\n.highlight .kr {\n  color: #000000;\n  font-weight: bold; }\n\n.highlight .kt {\n  color: #445588; }\n\n.highlight .m {\n  color: #009999; }\n\n.highlight .s {\n  color: #d14; }\n\n.highlight .na {\n  color: #008080; }\n\n.highlight .nb {\n  color: #0086B3; }\n\n.highlight .nc {\n  color: #445588;\n  font-weight: bold; }\n\n.highlight .no {\n  color: #008080; }\n\n.highlight .ni {\n  color: #800080; }\n\n.highlight .ne {\n  color: #990000;\n  font-weight: bold; }\n\n.highlight .nf {\n  color: #990000; }\n\n.highlight .nn {\n  color: #555555; }\n\n.highlight .nt {\n  color: #000080; }\n\n.highlight .nv {\n  color: #008080; }\n\n.highlight .ow {\n  color: #000000;\n  font-weight: bold; }\n\n.highlight .w {\n  color: #bbbbbb; }\n\n.highlight .mf {\n  color: #009999; }\n\n.highlight .mh {\n  color: #009999; }\n\n.highlight .mi {\n  color: #009999; }\n\n.highlight .mo {\n  color: #009999; }\n\n.highlight .sb {\n  color: #d14; }\n\n.highlight .sc {\n  color: #d14; }\n\n.highlight .sd {\n  color: #d14; }\n\n.highlight .s2 {\n  color: #d14; }\n\n.highlight .se {\n  color: #d14; }\n\n.highlight .sh {\n  color: #d14; }\n\n.highlight .si {\n  color: #d14; }\n\n.highlight .sx {\n  color: #d14; }\n\n.highlight .sr {\n  color: #009926; }\n\n.highlight .s1 {\n  color: #d14; }\n\n.highlight .ss {\n  color: #990073; }\n\n.highlight .bp {\n  color: #999999; }\n\n.highlight .vc {\n  color: #008080; }\n\n.highlight .vg {\n  color: #008080; }\n\n.highlight .vi {\n  color: #008080; }\n\n.highlight .il {\n  color: #009999; }\n"
  },
  {
    "path": "docs/css/jazzy.css",
    "content": "/*! Jazzy - https://github.com/realm/jazzy\n *  Copyright Realm Inc.\n *  SPDX-License-Identifier: MIT\n */\nhtml, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td {\n  background: transparent;\n  border: 0;\n  margin: 0;\n  outline: 0;\n  padding: 0;\n  vertical-align: baseline; }\n\nbody {\n  background-color: #f2f2f2;\n  font-family: Helvetica, freesans, Arial, sans-serif;\n  font-size: 14px;\n  -webkit-font-smoothing: subpixel-antialiased;\n  word-wrap: break-word; }\n\nh1, h2, h3 {\n  margin-top: 0.8em;\n  margin-bottom: 0.3em;\n  font-weight: 100;\n  color: black; }\n\nh1 {\n  font-size: 2.5em; }\n\nh2 {\n  font-size: 2em;\n  border-bottom: 1px solid #e2e2e2; }\n\nh4 {\n  font-size: 13px;\n  line-height: 1.5;\n  margin-top: 21px; }\n\nh5 {\n  font-size: 1.1em; }\n\nh6 {\n  font-size: 1.1em;\n  color: #777; }\n\n.section-name {\n  color: gray;\n  display: block;\n  font-family: Helvetica;\n  font-size: 22px;\n  font-weight: 100;\n  margin-bottom: 15px; }\n\npre, code {\n  font: 0.95em Menlo, monospace;\n  color: #777;\n  word-wrap: normal; }\n\np code, li code {\n  background-color: #eee;\n  padding: 2px 4px;\n  border-radius: 4px; }\n\npre > code {\n  padding: 0; }\n\na {\n  color: #0088cc;\n  text-decoration: none; }\n  a code {\n    color: inherit; }\n\nul {\n  padding-left: 15px; }\n\nli {\n  line-height: 1.8em; }\n\nimg {\n  max-width: 100%; }\n\nblockquote {\n  margin-left: 0;\n  padding: 0 10px;\n  border-left: 4px solid #ccc; }\n\nhr {\n  height: 1px;\n  border: none;\n  background-color: #e2e2e2; }\n\n.footnote-ref {\n  display: inline-block;\n  scroll-margin-top: 70px; }\n\n.footnote-def {\n  scroll-margin-top: 70px; }\n\n.content-wrapper {\n  margin: 0 auto;\n  width: 980px; }\n\nheader {\n  font-size: 0.85em;\n  line-height: 32px;\n  background-color: #414141;\n  position: fixed;\n  width: 100%;\n  z-index: 3; }\n  header img {\n    padding-right: 6px;\n    vertical-align: -3px;\n    height: 16px; }\n  header a {\n    color: #fff; }\n  header p {\n    float: left;\n    color: #999; }\n  header .header-right {\n    float: right;\n    margin-left: 16px; }\n\n#breadcrumbs {\n  background-color: #f2f2f2;\n  height: 21px;\n  padding-top: 17px;\n  position: fixed;\n  width: 100%;\n  z-index: 2;\n  margin-top: 32px; }\n  #breadcrumbs #carat {\n    height: 10px;\n    margin: 0 5px; }\n\n.sidebar {\n  background-color: #f9f9f9;\n  border: 1px solid #e2e2e2;\n  overflow-y: auto;\n  overflow-x: hidden;\n  position: fixed;\n  top: 70px;\n  bottom: 0;\n  width: 230px;\n  word-wrap: normal; }\n\n.nav-groups {\n  list-style-type: none;\n  background: #fff;\n  padding-left: 0; }\n\n.nav-group-name {\n  border-bottom: 1px solid #e2e2e2;\n  font-size: 1.1em;\n  font-weight: 100;\n  padding: 15px 0 15px 20px; }\n  .nav-group-name > a {\n    color: #333; }\n\n.nav-group-tasks {\n  margin-top: 5px; }\n\n.nav-group-task {\n  font-size: 0.9em;\n  list-style-type: none;\n  white-space: nowrap; }\n  .nav-group-task a {\n    color: #888; }\n\n.main-content {\n  background-color: #fff;\n  border: 1px solid #e2e2e2;\n  margin-left: 246px;\n  position: absolute;\n  overflow: hidden;\n  padding-bottom: 20px;\n  top: 70px;\n  width: 734px; }\n  .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote {\n    margin-bottom: 1em; }\n  .main-content p {\n    line-height: 1.8em; }\n  .main-content section .section:first-child {\n    margin-top: 0;\n    padding-top: 0; }\n  .main-content section .task-group-section .task-group:first-of-type {\n    padding-top: 10px; }\n    .main-content section .task-group-section .task-group:first-of-type .section-name {\n      padding-top: 15px; }\n  .main-content section .heading:before {\n    content: \"\";\n    display: block;\n    padding-top: 70px;\n    margin: -70px 0 0; }\n  .main-content .section-name p {\n    margin-bottom: inherit;\n    line-height: inherit; }\n  .main-content .section-name code {\n    background-color: inherit;\n    padding: inherit;\n    color: inherit; }\n\n.section {\n  padding: 0 25px; }\n\n.highlight {\n  background-color: #eee;\n  padding: 10px 12px;\n  border: 1px solid #e2e2e2;\n  border-radius: 4px;\n  overflow-x: auto; }\n\n.declaration .highlight {\n  overflow-x: initial;\n  padding: 0 40px 40px 0;\n  margin-bottom: -25px;\n  background-color: transparent;\n  border: none; }\n\n.section-name {\n  margin: 0;\n  margin-left: 18px; }\n\n.task-group-section {\n  margin-top: 10px;\n  padding-left: 6px;\n  border-top: 1px solid #e2e2e2; }\n\n.task-group {\n  padding-top: 0px; }\n\n.task-name-container a[name]:before {\n  content: \"\";\n  display: block;\n  padding-top: 70px;\n  margin: -70px 0 0; }\n\n.section-name-container {\n  position: relative;\n  display: inline-block; }\n  .section-name-container .section-name-link {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    margin-bottom: 0; }\n  .section-name-container .section-name {\n    position: relative;\n    pointer-events: none;\n    z-index: 1; }\n    .section-name-container .section-name a {\n      pointer-events: auto; }\n\n.item {\n  padding-top: 8px;\n  width: 100%;\n  list-style-type: none; }\n  .item a[name]:before {\n    content: \"\";\n    display: block;\n    padding-top: 70px;\n    margin: -70px 0 0; }\n  .item code {\n    background-color: transparent;\n    padding: 0; }\n  .item .token, .item .direct-link {\n    display: inline-block;\n    text-indent: -20px;\n    padding-left: 3px;\n    margin-left: 35px;\n    font-size: 11.9px;\n    transition: all 300ms; }\n  .item .token-open {\n    margin-left: 20px; }\n  .item .discouraged {\n    text-decoration: line-through; }\n  .item .declaration-note {\n    font-size: .85em;\n    color: gray;\n    font-style: italic; }\n\n.pointer-container {\n  border-bottom: 1px solid #e2e2e2;\n  left: -23px;\n  padding-bottom: 13px;\n  position: relative;\n  width: 110%; }\n\n.pointer {\n  background: #f9f9f9;\n  border-left: 1px solid #e2e2e2;\n  border-top: 1px solid #e2e2e2;\n  height: 12px;\n  left: 21px;\n  top: -7px;\n  -webkit-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n  position: absolute;\n  width: 12px; }\n\n.height-container {\n  display: none;\n  left: -25px;\n  padding: 0 25px;\n  position: relative;\n  width: 100%;\n  overflow: hidden; }\n  .height-container .section {\n    background: #f9f9f9;\n    border-bottom: 1px solid #e2e2e2;\n    left: -25px;\n    position: relative;\n    width: 100%;\n    padding-top: 10px;\n    padding-bottom: 5px; }\n\n.aside, .language {\n  padding: 6px 12px;\n  margin: 12px 0;\n  border-left: 5px solid #dddddd;\n  overflow-y: hidden; }\n  .aside .aside-title, .language .aside-title {\n    font-size: 9px;\n    letter-spacing: 2px;\n    text-transform: uppercase;\n    padding-bottom: 0;\n    margin: 0;\n    color: #aaa;\n    -webkit-user-select: none; }\n  .aside p:last-child, .language p:last-child {\n    margin-bottom: 0; }\n\n.language {\n  border-left: 5px solid #cde9f4; }\n  .language .aside-title {\n    color: #4b8afb; }\n\n.aside-warning, .aside-deprecated, .aside-unavailable {\n  border-left: 5px solid #ff6666; }\n  .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title {\n    color: #ff0000; }\n\n.graybox {\n  border-collapse: collapse;\n  width: 100%; }\n  .graybox p {\n    margin: 0;\n    word-break: break-word;\n    min-width: 50px; }\n  .graybox td {\n    border: 1px solid #e2e2e2;\n    padding: 5px 25px 5px 10px;\n    vertical-align: middle; }\n  .graybox tr td:first-of-type {\n    text-align: right;\n    padding: 7px;\n    vertical-align: top;\n    word-break: normal;\n    width: 40px; }\n\n.slightly-smaller {\n  font-size: 0.9em; }\n\n#footer {\n  position: relative;\n  top: 10px;\n  bottom: 0px;\n  margin-left: 25px; }\n  #footer p {\n    margin: 0;\n    color: #aaa;\n    font-size: 0.8em; }\n\nhtml.dash header, html.dash #breadcrumbs, html.dash .sidebar {\n  display: none; }\n\nhtml.dash .main-content {\n  width: 980px;\n  margin-left: 0;\n  border: none;\n  width: 100%;\n  top: 0;\n  padding-bottom: 0; }\n\nhtml.dash .height-container {\n  display: block; }\n\nhtml.dash .item .token {\n  margin-left: 0; }\n\nhtml.dash .content-wrapper {\n  width: auto; }\n\nhtml.dash #footer {\n  position: static; }\n\nform[role=search] {\n  float: right; }\n  form[role=search] input {\n    font: Helvetica, freesans, Arial, sans-serif;\n    margin-top: 6px;\n    font-size: 13px;\n    line-height: 20px;\n    padding: 0px 10px;\n    border: none;\n    border-radius: 1em; }\n    .loading form[role=search] input {\n      background: white url(../img/spinner.gif) center right 4px no-repeat; }\n  form[role=search] .tt-menu {\n    margin: 0;\n    min-width: 300px;\n    background: #fff;\n    color: #333;\n    border: 1px solid #e2e2e2;\n    z-index: 4; }\n  form[role=search] .tt-highlight {\n    font-weight: bold; }\n  form[role=search] .tt-suggestion {\n    font: Helvetica, freesans, Arial, sans-serif;\n    font-size: 14px;\n    padding: 0 8px; }\n    form[role=search] .tt-suggestion span {\n      display: table-cell;\n      white-space: nowrap; }\n    form[role=search] .tt-suggestion .doc-parent-name {\n      width: 100%;\n      text-align: right;\n      font-weight: normal;\n      font-size: 0.9em;\n      padding-left: 16px; }\n  form[role=search] .tt-suggestion:hover,\n  form[role=search] .tt-suggestion.tt-cursor {\n    cursor: pointer;\n    background-color: #4183c4;\n    color: #fff; }\n  form[role=search] .tt-suggestion:hover .doc-parent-name,\n  form[role=search] .tt-suggestion.tt-cursor .doc-parent-name {\n    color: #fff; }\n"
  },
  {
    "path": "docs/decorator.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Decorator  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a title=\"Decorator  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Decorator  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            \n            <h2 id='i-want-to-generate-simple-decorator-for-my-type' class='heading'>I want to generate simple decorator for my type</h2>\n\n<p>In Swift it can be cumbersome to write a simple decorator that decorates all the calls to decorated type methods, you basically have to do it manually for each single method. With this template you can generate simple decorator that generate all the methods and property calls automatically, skipping methods and properties already implemented manually.</p>\n\n<p>You can use this template as a starting point for more sophisticated implementations. This template also shows you some powers of swift templates, like using helper methods and whitespace control tags.</p>\n<h3 id='a-href-https-github-com-krzysztofzablocki-sourcery-blob-master-templates-templates-decorator-swifttemplate-swift-template-a' class='heading'><a href=\"https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/Decorator.swifttemplate\">Swift template</a></h3>\n<h4 id='available-annotations' class='heading'>Available annotations</h4>\n\n<ul>\n<li><code>decorate</code> - what type to decorate</li>\n<li><code>decorateMethod</code> - code to decorate each method call with</li>\n<li><code>decorateGet</code> - code to decorate each property getter</li>\n<li><code>decorateSet</code> - code to decorate each property setter</li>\n</ul>\n\n<p><strong>Example input:</strong></p>\n<pre class=\"highlight swift\"><code><span class=\"kd\">protocol</span> <span class=\"kt\">Service</span> <span class=\"p\">{</span>\n    <span class=\"k\">var</span> <span class=\"nv\">prop1</span><span class=\"p\">:</span> <span class=\"kt\">Int</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"p\">}</span>\n    <span class=\"k\">var</span> <span class=\"nv\">prop2</span><span class=\"p\">:</span> <span class=\"kt\">Int</span> <span class=\"p\">{</span> <span class=\"k\">get</span> <span class=\"k\">set</span> <span class=\"p\">}</span>\n    <span class=\"kd\">func</span> <span class=\"nf\">foo</span><span class=\"p\">(</span><span class=\"nv\">f</span><span class=\"p\">:</span> <span class=\"kt\">Int</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"nv\">a</span><span class=\"p\">:</span> <span class=\"kt\">Int</span><span class=\"p\">)</span> <span class=\"k\">throws</span> <span class=\"o\">-&gt;</span> <span class=\"kt\">Int</span>\n    <span class=\"kd\">func</span> <span class=\"nf\">bar</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">b</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">)</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// sourcery: decorate = \"Service\"</span>\n<span class=\"c1\">// sourcery: decorateMethod = \"print(#function)\"</span>\n<span class=\"c1\">// sourcery: decorateGet = \"print(\"get: \\(#function)\")\"</span>\n<span class=\"c1\">// sourcery: decorateSet = \"print(\"set: \\(#function)\")\"</span>\n<span class=\"kd\">struct</span> <span class=\"kt\">ServiceDecorator</span><span class=\"p\">:</span> <span class=\"kt\">Service</span> <span class=\"p\">{</span>\n    <span class=\"c1\">// generated code will go here</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">extension</span> <span class=\"kt\">ServiceDecorator</span> <span class=\"p\">{</span>\n     <span class=\"c1\">// manually implemented method</span>\n    <span class=\"kd\">internal</span> <span class=\"kd\">func</span> <span class=\"nf\">bar</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">b</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n        <span class=\"n\">decorated</span><span class=\"o\">.</span><span class=\"nf\">bar</span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n\n<span class=\"p\">}</span>\n\n</code></pre>\n\n<p><strong>Example output:</strong></p>\n<pre class=\"highlight swift\"><code><span class=\"o\">...</span>\n\n<span class=\"c1\">// sourcery: decorate = Service</span>\n<span class=\"c1\">// sourcery: decorateMethod = print(#function)</span>\n<span class=\"c1\">// sourcery: decorateGet = \"print(\"get: \\(#function)\")\"</span>\n<span class=\"c1\">// sourcery: decorateSet = \"print(\"set: \\(#function)\")\"</span>\n<span class=\"kd\">struct</span> <span class=\"kt\">ServiceDecorator</span><span class=\"p\">:</span> <span class=\"kt\">Service</span> <span class=\"p\">{</span>\n\n<span class=\"c1\">// sourcery:inline:auto:ServiceDecorator.autoDecorated</span>\n    <span class=\"kd\">internal</span> <span class=\"kd\">private(set)</span> <span class=\"k\">var</span> <span class=\"nv\">decorated</span><span class=\"p\">:</span> <span class=\"kt\">Service</span>\n\n    <span class=\"kd\">internal</span> <span class=\"nf\">init</span><span class=\"p\">(</span><span class=\"nv\">decorated</span><span class=\"p\">:</span> <span class=\"kt\">Service</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n        <span class=\"k\">self</span><span class=\"o\">.</span><span class=\"n\">decorated</span> <span class=\"o\">=</span> <span class=\"n\">decorated</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"kd\">internal</span> <span class=\"k\">var</span> <span class=\"nv\">prop1</span><span class=\"p\">:</span> <span class=\"kt\">Int</span> <span class=\"p\">{</span>\n        <span class=\"nf\">print</span><span class=\"p\">(</span><span class=\"s\">\"get: </span><span class=\"se\">\\(</span><span class=\"kd\">#function</span><span class=\"se\">)</span><span class=\"s\">\"</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">decorated</span><span class=\"o\">.</span><span class=\"n\">prop1</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"kd\">internal</span> <span class=\"k\">var</span> <span class=\"nv\">prop2</span><span class=\"p\">:</span> <span class=\"kt\">Int</span> <span class=\"p\">{</span>\n        <span class=\"k\">get</span> <span class=\"p\">{</span>\n            <span class=\"nf\">print</span><span class=\"p\">(</span><span class=\"s\">\"get: </span><span class=\"se\">\\(</span><span class=\"kd\">#function</span><span class=\"se\">)</span><span class=\"s\">\"</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">decorated</span><span class=\"o\">.</span><span class=\"n\">prop2</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">set</span> <span class=\"p\">{</span>\n            <span class=\"nf\">print</span><span class=\"p\">(</span><span class=\"s\">\"set: </span><span class=\"se\">\\(</span><span class=\"kd\">#function</span><span class=\"se\">)</span><span class=\"s\">\"</span><span class=\"p\">)</span>\n            <span class=\"n\">decorated</span><span class=\"o\">.</span><span class=\"n\">prop2</span> <span class=\"o\">=</span> <span class=\"n\">newValue</span>\n        <span class=\"p\">}</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"kd\">internal</span> <span class=\"kd\">func</span> <span class=\"nf\">foo</span><span class=\"p\">(</span><span class=\"nv\">f</span><span class=\"p\">:</span> <span class=\"kt\">Int</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"nv\">a</span><span class=\"p\">:</span> <span class=\"kt\">Int</span><span class=\"p\">)</span> <span class=\"k\">throws</span> <span class=\"o\">-&gt;</span> <span class=\"kt\">Int</span> <span class=\"p\">{</span>\n        <span class=\"nf\">print</span><span class=\"p\">(</span><span class=\"kd\">#function</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"k\">try</span> <span class=\"n\">decorated</span><span class=\"o\">.</span><span class=\"nf\">foo</span><span class=\"p\">(</span><span class=\"nv\">f</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"p\">,</span> <span class=\"n\">a</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n<span class=\"c1\">// sourcery:end</span>\n<span class=\"p\">}</span>\n<span class=\"o\">...</span>\n</code></pre>\n\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/diffable.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Diffable  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a title=\"Diffable  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Diffable  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            \n            <h2 id='i-want-to-have-diffing-in-tests' class='heading'>I want to have diffing in tests</h2>\n\n<p>Template used to generate much better output when using equality in tests, instead of having to read wall of text it&rsquo;s used to generate precise property level differences. This template uses <a href=\"../SourceryRuntime/Sources/Diffable.swift\">Sourcery Diffable implementation</a></p>\n\n<p>from this:\n<img width=\"600\" alt=\"before\" src=\"https://cloud.githubusercontent.com/assets/1468993/21425370/0e3dd990-c849-11e6-877a-6dc80ae8f039.png\"></p>\n\n<p>to this:\n<img width=\"373\" alt=\"after\" src=\"https://cloud.githubusercontent.com/assets/1468993/21425376/11e9ad94-c849-11e6-882a-e7927a3b2b08.png\"></p>\n<h3 id='a-href-https-github-com-krzysztofzablocki-sourcery-blob-master-sourcery-templates-diffable-stencil-stencil-template-a' class='heading'><a href=\"https://github.com/krzysztofzablocki/Sourcery/blob/master/Sourcery/Templates/Diffable.stencil\">Stencil Template</a></h3>\n<h4 id='available-annotations' class='heading'>Available annotations:</h4>\n\n<ul>\n<li><code>skipEquality</code> allows you to skip variable from being compared.</li>\n</ul>\n\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/enum-cases.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Enum cases  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a title=\"Enum cases  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Enum cases  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            \n            <h2 id='i-want-to-list-all-cases-in-an-enum' class='heading'>I want to list all cases in an enum</h2>\n\n<p>Generate <code>count</code> and <code>allCases</code> for any enumeration that is marked with <code>AutoCases</code> phantom protocol.</p>\n<h3 id='a-href-https-github-com-krzysztofzablocki-sourcery-blob-master-templates-templates-autocases-stencil-stencil-template-a' class='heading'><a href=\"https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/AutoCases.stencil\">Stencil Template</a></h3>\n<h4 id='example-output' class='heading'>Example output:</h4>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">BetaSettingsGroup</span> <span class=\"p\">{</span>\n  <span class=\"kd\">static</span> <span class=\"k\">let</span> <span class=\"nv\">count</span><span class=\"p\">:</span> <span class=\"kt\">Int</span> <span class=\"o\">=</span> <span class=\"k\">return</span> <span class=\"mi\">8</span>\n\n  <span class=\"kd\">static</span> <span class=\"k\">let</span> <span class=\"nv\">allCases</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"kt\">BetaSettingsGroup</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n      <span class=\"o\">.</span><span class=\"n\">featuresInDevelopment</span><span class=\"p\">,</span>\n      <span class=\"o\">.</span><span class=\"n\">advertising</span><span class=\"p\">,</span>\n      <span class=\"o\">.</span><span class=\"n\">analytics</span><span class=\"p\">,</span>\n      <span class=\"o\">.</span><span class=\"n\">marketing</span><span class=\"p\">,</span>\n      <span class=\"o\">.</span><span class=\"n\">news</span><span class=\"p\">,</span>\n      <span class=\"o\">.</span><span class=\"n\">notifications</span><span class=\"p\">,</span>\n      <span class=\"o\">.</span><span class=\"n\">tech</span><span class=\"p\">,</span>\n      <span class=\"o\">.</span><span class=\"n\">appInformation</span>\n    <span class=\"p\">]</span>\n<span class=\"p\">}</span>\n</code></pre>\n\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/equatable.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Equatable  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a title=\"Equatable  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Equatable  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            \n            <h2 id='i-want-to-generate-code-equatable-code-implementation' class='heading'>I want to generate <code>Equatable</code> implementation</h2>\n\n<p>Template used to generate equality for all types that either conform to the <code>AutoEquatable</code> protocol or are <a href=\"Writing%20templates.md#using-source-annotations\">annotated</a> with <code>AutoEquatable</code> annotation, allowing us to avoid writing boilerplate code.</p>\n\n<p>It adds <code>:Equatable</code> conformance to all types, except protocols (because it would require turning them into PAT&rsquo;s).\nFor protocols it&rsquo;s just generating <code>func ==</code>.</p>\n<h3 id='a-href-https-github-com-krzysztofzablocki-sourcery-blob-master-templates-templates-autoequatable-stencil-stencil-template-a' class='heading'><a href=\"https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/AutoEquatable.stencil\">Stencil template</a></h3>\n<h4 id='available-variable-annotations' class='heading'>Available variable annotations:</h4>\n\n<ul>\n<li><code>skipEquality</code> allows you to skip variable from being compared.</li>\n<li><code>arrayEquality</code> mark this to use array comparsion for variables that have array of items that don&rsquo;t implement <code>Equatable</code> but have <code>==</code> operator e.g. Protocols</li>\n</ul>\n<h4 id='example-output' class='heading'>Example output:</h4>\n<pre class=\"highlight swift\"><code><span class=\"c1\">// MARK: - AdNodeViewModel AutoEquatable</span>\n<span class=\"kd\">extension</span> <span class=\"kt\">AdNodeViewModel</span><span class=\"p\">:</span> <span class=\"kt\">Equatable</span> <span class=\"p\">{}</span>\n\n<span class=\"kd\">internal</span> <span class=\"kd\">func</span> <span class=\"o\">==</span> <span class=\"p\">(</span><span class=\"nv\">lhs</span><span class=\"p\">:</span> <span class=\"kt\">AdNodeViewModel</span><span class=\"p\">,</span> <span class=\"nv\">rhs</span><span class=\"p\">:</span> <span class=\"kt\">AdNodeViewModel</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"kt\">Bool</span> <span class=\"p\">{</span>\n    <span class=\"k\">guard</span> <span class=\"n\">lhs</span><span class=\"o\">.</span><span class=\"n\">remoteAdView</span> <span class=\"o\">==</span> <span class=\"n\">rhs</span><span class=\"o\">.</span><span class=\"n\">remoteAdView</span> <span class=\"k\">else</span> <span class=\"p\">{</span> <span class=\"k\">return</span> <span class=\"kc\">false</span> <span class=\"p\">}</span>\n    <span class=\"k\">guard</span> <span class=\"n\">lhs</span><span class=\"o\">.</span><span class=\"n\">hidesDisclaimer</span> <span class=\"o\">==</span> <span class=\"n\">rhs</span><span class=\"o\">.</span><span class=\"n\">hidesDisclaimer</span> <span class=\"k\">else</span> <span class=\"p\">{</span> <span class=\"k\">return</span> <span class=\"kc\">false</span> <span class=\"p\">}</span>\n    <span class=\"k\">guard</span> <span class=\"n\">lhs</span><span class=\"o\">.</span><span class=\"n\">type</span> <span class=\"o\">==</span> <span class=\"n\">rhs</span><span class=\"o\">.</span><span class=\"n\">type</span> <span class=\"k\">else</span> <span class=\"p\">{</span> <span class=\"k\">return</span> <span class=\"kc\">false</span> <span class=\"p\">}</span>\n    <span class=\"k\">guard</span> <span class=\"n\">lhs</span><span class=\"o\">.</span><span class=\"n\">height</span> <span class=\"o\">==</span> <span class=\"n\">rhs</span><span class=\"o\">.</span><span class=\"n\">height</span> <span class=\"k\">else</span> <span class=\"p\">{</span> <span class=\"k\">return</span> <span class=\"kc\">false</span> <span class=\"p\">}</span>\n\n    <span class=\"k\">guard</span> <span class=\"n\">lhs</span><span class=\"o\">.</span><span class=\"n\">attributedDisclaimer</span> <span class=\"o\">==</span> <span class=\"n\">rhs</span><span class=\"o\">.</span><span class=\"n\">attributedDisclaimer</span> <span class=\"k\">else</span> <span class=\"p\">{</span> <span class=\"k\">return</span> <span class=\"kc\">false</span> <span class=\"p\">}</span>\n\n    <span class=\"k\">return</span> <span class=\"kc\">true</span>\n<span class=\"p\">}</span>\n</code></pre>\n\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/hashable.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Hashable  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a title=\"Hashable  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Hashable  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            \n            <h2 id='i-want-to-generate-code-hashable-code-implementation' class='heading'>I want to generate <code>Hashable</code> implementation</h2>\n\n<p>Template used to generate hashing for all types that conform to <code>:AutoHashable</code>, allowing us to avoid writing boilerplate code.</p>\n\n<p>It adds <code>:Hashable</code> conformance to all types, except protocols (because it would require turning them into PAT&rsquo;s).\nFor protocols it&rsquo;s just generating <code>var hashValue</code> comparator.</p>\n<h3 id='a-href-https-github-com-krzysztofzablocki-sourcery-blob-master-templates-templates-autohashable-stencil-stencil-template-a' class='heading'><a href=\"https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/AutoHashable.stencil\">Stencil template</a></h3>\n<h4 id='available-variable-annotations' class='heading'>Available variable annotations:</h4>\n\n<ul>\n<li><code>skipHashing</code> allows you to skip variable from being compared.</li>\n<li><code>includeInHashing</code> is only applied on enums and allows us to add some computed variable into hashing logic</li>\n</ul>\n<h4 id='example-output' class='heading'>Example output:</h4>\n<pre class=\"highlight swift\"><code><span class=\"c1\">// MARK: - AdNodeViewModel AutoHashable</span>\n<span class=\"kd\">extension</span> <span class=\"kt\">AdNodeViewModel</span><span class=\"p\">:</span> <span class=\"kt\">Hashable</span> <span class=\"p\">{</span>\n\n    <span class=\"kd\">internal</span> <span class=\"k\">var</span> <span class=\"nv\">hashValue</span><span class=\"p\">:</span> <span class=\"kt\">Int</span> <span class=\"p\">{</span>\n        <span class=\"k\">return</span> <span class=\"nf\">combineHashes</span><span class=\"p\">(</span><span class=\"n\">remoteAdView</span><span class=\"o\">.</span><span class=\"n\">hashValue</span><span class=\"p\">,</span> <span class=\"n\">hidesDisclaimer</span><span class=\"o\">.</span><span class=\"n\">hashValue</span><span class=\"p\">,</span> <span class=\"n\">type</span><span class=\"o\">.</span><span class=\"n\">hashValue</span><span class=\"p\">,</span> <span class=\"n\">height</span><span class=\"o\">.</span><span class=\"n\">hashValue</span><span class=\"p\">,</span> <span class=\"n\">attributedDisclaimer</span><span class=\"o\">.</span><span class=\"n\">hashValue</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre>\n\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Sourcery  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a title=\"Sourcery  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Sourcery  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            \n            <h2 id='what-is-sourcery' class='heading'>What is Sourcery?</h2>\n\n<p><em><strong>Sourcery</strong> scans your source code, applies your personal templates and generates Swift code for you, allowing you to use meta-programming techniques to save time and decrease potential mistakes.</em></p>\n\n<p>Using it offers many benefits:</p>\n\n<ul>\n<li>Write less repetitive code and make it easy to adhere to <a href=\"https://en.wikipedia.org/wiki/Don&#x27;t_repeat_yourself\">DRY principle</a>.</li>\n<li>It allows you to create better code, one that would be hard to maintain without it, e.g. <a href=\"https://github.com/krzysztofzablocki/Sourcery/blob/master/Sourcery/Templates/Diffable.stencil\">performing automatic property level difference in tests</a></li>\n<li>Limits the risk of introducing human error when refactoring.</li>\n<li>Sourcery <strong>doesn&rsquo;t use runtime tricks</strong>, in fact, it allows you to leverage compiler, even more, creating more safety.</li>\n<li><strong>Immediate feedback:</strong> Sourcery features built-in daemon support, enabling you to write your templates in real-time side-by-side with generated code.</li>\n</ul>\n\n<p><strong>Sourcery is so meta that it is used to code-generate its boilerplate code</strong></p>\n<h2 id='why' class='heading'>Why?</h2>\n\n<p>Swift features very limited runtime and no meta-programming features. Which leads our projects to contain boilerplate code.</p>\n\n<p>Sourcery exists to allow Swift developers to stop doing the same thing over and over again while still maintaining strong typing, preventing bugs and leveraging compiler.</p>\n\n<p>Have you ever?</p>\n\n<ul>\n<li>Had to write equatable/hashable?</li>\n<li>Had to write NSCoding support?</li>\n<li>Had to implement JSON serialization?</li>\n<li>Wanted to use Lenses?</li>\n</ul>\n\n<p>If you did then you probably found yourself writing repetitive code to deal with those scenarios, does this feel right?</p>\n\n<p>Even worse, if you ever add a new property to a type all of those implementations have to be updated, or you will end up with bugs.\nIn those scenarios usually <strong>compiler will not generate the error for you</strong>, which leads to error prone code.</p>\n\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/installing.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Installing  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a title=\"Installing  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Installing  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            \n            <h2 id='installing' class='heading'>Installing</h2>\n\n<ul>\n<li><p><em>Binary form</em></p>\n\n<p>Download latest release with prebuilt binary from <a href=\"https://github.com/krzysztofzablocki/Sourcery/releases/latest\">release tab</a>. Unzip the archive into desired destination and run <code>bin/sourcery</code></p></li>\n<li><p><em>CocoaPods</em></p>\n\n<p>Add pod &lsquo;Sourcery&rsquo; to your Podfile and run <code>pod update Sourcery</code>. This will download latest release binary and will put it to your project&rsquo;s CocoaPods path so you will run it with <code>$PODS_ROOT/Sourcery/bin/sourcery</code></p></li>\n<li><p><em>Building from source</em></p>\n\n<p>Download latest release source code from <a href=\"https://github.com/krzysztofzablocki/Sourcery/releases/latest\">release tab</a> or clone the repository an build Sourcery manually.</p>\n\n<ul>\n<li><p><em>Building with Swift Package Manager</em></p>\n\n<p>Run <code>swift build -c release</code> in the root folder. This will create a <code>.build/release</code> folder and will put binary there. Move the <strong>whole <code>.build/release</code> folder</strong> to your desired destination and run with <code>path_to_release_folder/sourcery</code></p>\n<div class=\"aside aside-note\">\n    <p class=\"aside-title\">Note</p>\n    <p>JS templates are not supported when building with SPM yet.</p>\n\n</div></li>\n<li><p><em>Building with Xcode</em></p>\n\n<p>Open <code>Sourcery.xcworkspace</code> and build with <code>Sourcery-Release</code> scheme. This will create <code>Sourcery.app</code> in the Derived Data folder. You can copy it to your desired destination and run with <code>path_to_sourcery_app/Sourcery.app/Contents/MacOS/Sourcery</code></p></li>\n</ul></li>\n</ul>\n\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/js/jazzy.js",
    "content": "// Jazzy - https://github.com/realm/jazzy\n// Copyright Realm Inc.\n// SPDX-License-Identifier: MIT\n\nwindow.jazzy = {'docset': false}\nif (typeof window.dash != 'undefined') {\n  document.documentElement.className += ' dash'\n  window.jazzy.docset = true\n}\nif (navigator.userAgent.match(/xcode/i)) {\n  document.documentElement.className += ' xcode'\n  window.jazzy.docset = true\n}\n\nfunction toggleItem($link, $content) {\n  var animationDuration = 300;\n  $link.toggleClass('token-open');\n  $content.slideToggle(animationDuration);\n}\n\nfunction itemLinkToContent($link) {\n  return $link.parent().parent().next();\n}\n\n// On doc load + hash-change, open any targetted item\nfunction openCurrentItemIfClosed() {\n  if (window.jazzy.docset) {\n    return;\n  }\n  var $link = $(`a[name=\"${location.hash.substring(1)}\"]`).nextAll('.token');\n  $content = itemLinkToContent($link);\n  if ($content.is(':hidden')) {\n    toggleItem($link, $content);\n  }\n}\n\n$(openCurrentItemIfClosed);\n$(window).on('hashchange', openCurrentItemIfClosed);\n\n// On item link ('token') click, toggle its discussion\n$('.token').on('click', function(event) {\n  if (window.jazzy.docset) {\n    return;\n  }\n  var $link = $(this);\n  toggleItem($link, itemLinkToContent($link));\n\n  // Keeps the document from jumping to the hash.\n  var href = $link.attr('href');\n  if (history.pushState) {\n    history.pushState({}, '', href);\n  } else {\n    location.hash = href;\n  }\n  event.preventDefault();\n});\n\n// Clicks on links to the current, closed, item need to open the item\n$(\"a:not('.token')\").on('click', function() {\n  if (location == this.href) {\n    openCurrentItemIfClosed();\n  }\n});\n\n// KaTeX rendering\nif (\"katex\" in window) {\n  $($('.math').each( (_, element) => {\n    katex.render(element.textContent, element, {\n      displayMode: $(element).hasClass('m-block'),\n      throwOnError: false,\n      trust: true\n    });\n  }))\n}\n"
  },
  {
    "path": "docs/js/jazzy.search.js",
    "content": "// Jazzy - https://github.com/realm/jazzy\n// Copyright Realm Inc.\n// SPDX-License-Identifier: MIT\n\n$(function(){\n  var $typeahead = $('[data-typeahead]');\n  var $form = $typeahead.parents('form');\n  var searchURL = $form.attr('action');\n\n  function displayTemplate(result) {\n    return result.name;\n  }\n\n  function suggestionTemplate(result) {\n    var t = '<div class=\"list-group-item clearfix\">';\n    t += '<span class=\"doc-name\">' + result.name + '</span>';\n    if (result.parent_name) {\n     t += '<span class=\"doc-parent-name label\">' + result.parent_name + '</span>';\n    }\n    t += '</div>';\n    return t;\n  }\n\n  $typeahead.one('focus', function() {\n    $form.addClass('loading');\n\n    $.getJSON(searchURL).then(function(searchData) {\n      const searchIndex = lunr(function() {\n        this.ref('url');\n        this.field('name');\n        this.field('abstract');\n        for (const [url, doc] of Object.entries(searchData)) {\n          this.add({url: url, name: doc.name, abstract: doc.abstract});\n        }\n      });\n\n      $typeahead.typeahead(\n        {\n          highlight: true,\n          minLength: 3,\n          autoselect: true\n        },\n        {\n          limit: 10,\n          display: displayTemplate,\n          templates: { suggestion: suggestionTemplate },\n          source: function(query, sync) {\n            const lcSearch = query.toLowerCase();\n            const results = searchIndex.query(function(q) {\n                q.term(lcSearch, { boost: 100 });\n                q.term(lcSearch, {\n                  boost: 10,\n                  wildcard: lunr.Query.wildcard.TRAILING\n                });\n            }).map(function(result) {\n              var doc = searchData[result.ref];\n              doc.url = result.ref;\n              return doc;\n            });\n            sync(results);\n          }\n        }\n      );\n      $form.removeClass('loading');\n      $typeahead.trigger('focus');\n    });\n  });\n\n  var baseURL = searchURL.slice(0, -\"search.json\".length);\n\n  $typeahead.on('typeahead:select', function(e, result) {\n    window.location = baseURL + result.url;\n  });\n});\n"
  },
  {
    "path": "docs/js/typeahead.jquery.js",
    "content": "/*!\n * typeahead.js 1.3.1\n * https://github.com/corejavascript/typeahead.js\n * Copyright 2013-2020 Twitter, Inc. and other contributors; Licensed MIT\n */\n\n\n(function(root, factory) {\n    if (typeof define === \"function\" && define.amd) {\n        define([ \"jquery\" ], function(a0) {\n            return factory(a0);\n        });\n    } else if (typeof module === \"object\" && module.exports) {\n        module.exports = factory(require(\"jquery\"));\n    } else {\n        factory(root[\"jQuery\"]);\n    }\n})(this, function($) {\n    var _ = function() {\n        \"use strict\";\n        return {\n            isMsie: function() {\n                return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\\d+(.\\d+)?)/i)[2] : false;\n            },\n            isBlankString: function(str) {\n                return !str || /^\\s*$/.test(str);\n            },\n            escapeRegExChars: function(str) {\n                return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n            },\n            isString: function(obj) {\n                return typeof obj === \"string\";\n            },\n            isNumber: function(obj) {\n                return typeof obj === \"number\";\n            },\n            isArray: $.isArray,\n            isFunction: $.isFunction,\n            isObject: $.isPlainObject,\n            isUndefined: function(obj) {\n                return typeof obj === \"undefined\";\n            },\n            isElement: function(obj) {\n                return !!(obj && obj.nodeType === 1);\n            },\n            isJQuery: function(obj) {\n                return obj instanceof $;\n            },\n            toStr: function toStr(s) {\n                return _.isUndefined(s) || s === null ? \"\" : s + \"\";\n            },\n            bind: $.proxy,\n            each: function(collection, cb) {\n                $.each(collection, reverseArgs);\n                function reverseArgs(index, value) {\n                    return cb(value, index);\n                }\n            },\n            map: $.map,\n            filter: $.grep,\n            every: function(obj, test) {\n                var result = true;\n                if (!obj) {\n                    return result;\n                }\n                $.each(obj, function(key, val) {\n                    if (!(result = test.call(null, val, key, obj))) {\n                        return false;\n                    }\n                });\n                return !!result;\n            },\n            some: function(obj, test) {\n                var result = false;\n                if (!obj) {\n                    return result;\n                }\n                $.each(obj, function(key, val) {\n                    if (result = test.call(null, val, key, obj)) {\n                        return false;\n                    }\n                });\n                return !!result;\n            },\n            mixin: $.extend,\n            identity: function(x) {\n                return x;\n            },\n            clone: function(obj) {\n                return $.extend(true, {}, obj);\n            },\n            getIdGenerator: function() {\n                var counter = 0;\n                return function() {\n                    return counter++;\n                };\n            },\n            templatify: function templatify(obj) {\n                return $.isFunction(obj) ? obj : template;\n                function template() {\n                    return String(obj);\n                }\n            },\n            defer: function(fn) {\n                setTimeout(fn, 0);\n            },\n            debounce: function(func, wait, immediate) {\n                var timeout, result;\n                return function() {\n                    var context = this, args = arguments, later, callNow;\n                    later = function() {\n                        timeout = null;\n                        if (!immediate) {\n                            result = func.apply(context, args);\n                        }\n                    };\n                    callNow = immediate && !timeout;\n                    clearTimeout(timeout);\n                    timeout = setTimeout(later, wait);\n                    if (callNow) {\n                        result = func.apply(context, args);\n                    }\n                    return result;\n                };\n            },\n            throttle: function(func, wait) {\n                var context, args, timeout, result, previous, later;\n                previous = 0;\n                later = function() {\n                    previous = new Date();\n                    timeout = null;\n                    result = func.apply(context, args);\n                };\n                return function() {\n                    var now = new Date(), remaining = wait - (now - previous);\n                    context = this;\n                    args = arguments;\n                    if (remaining <= 0) {\n                        clearTimeout(timeout);\n                        timeout = null;\n                        previous = now;\n                        result = func.apply(context, args);\n                    } else if (!timeout) {\n                        timeout = setTimeout(later, remaining);\n                    }\n                    return result;\n                };\n            },\n            stringify: function(val) {\n                return _.isString(val) ? val : JSON.stringify(val);\n            },\n            guid: function() {\n                function _p8(s) {\n                    var p = (Math.random().toString(16) + \"000000000\").substr(2, 8);\n                    return s ? \"-\" + p.substr(0, 4) + \"-\" + p.substr(4, 4) : p;\n                }\n                return \"tt-\" + _p8() + _p8(true) + _p8(true) + _p8();\n            },\n            noop: function() {}\n        };\n    }();\n    var WWW = function() {\n        \"use strict\";\n        var defaultClassNames = {\n            wrapper: \"twitter-typeahead\",\n            input: \"tt-input\",\n            hint: \"tt-hint\",\n            menu: \"tt-menu\",\n            dataset: \"tt-dataset\",\n            suggestion: \"tt-suggestion\",\n            selectable: \"tt-selectable\",\n            empty: \"tt-empty\",\n            open: \"tt-open\",\n            cursor: \"tt-cursor\",\n            highlight: \"tt-highlight\"\n        };\n        return build;\n        function build(o) {\n            var www, classes;\n            classes = _.mixin({}, defaultClassNames, o);\n            www = {\n                css: buildCss(),\n                classes: classes,\n                html: buildHtml(classes),\n                selectors: buildSelectors(classes)\n            };\n            return {\n                css: www.css,\n                html: www.html,\n                classes: www.classes,\n                selectors: www.selectors,\n                mixin: function(o) {\n                    _.mixin(o, www);\n                }\n            };\n        }\n        function buildHtml(c) {\n            return {\n                wrapper: '<span class=\"' + c.wrapper + '\"></span>',\n                menu: '<div role=\"listbox\" class=\"' + c.menu + '\"></div>'\n            };\n        }\n        function buildSelectors(classes) {\n            var selectors = {};\n            _.each(classes, function(v, k) {\n                selectors[k] = \".\" + v;\n            });\n            return selectors;\n        }\n        function buildCss() {\n            var css = {\n                wrapper: {\n                    position: \"relative\",\n                    display: \"inline-block\"\n                },\n                hint: {\n                    position: \"absolute\",\n                    top: \"0\",\n                    left: \"0\",\n                    borderColor: \"transparent\",\n                    boxShadow: \"none\",\n                    opacity: \"1\"\n                },\n                input: {\n                    position: \"relative\",\n                    verticalAlign: \"top\",\n                    backgroundColor: \"transparent\"\n                },\n                inputWithNoHint: {\n                    position: \"relative\",\n                    verticalAlign: \"top\"\n                },\n                menu: {\n                    position: \"absolute\",\n                    top: \"100%\",\n                    left: \"0\",\n                    zIndex: \"100\",\n                    display: \"none\"\n                },\n                ltr: {\n                    left: \"0\",\n                    right: \"auto\"\n                },\n                rtl: {\n                    left: \"auto\",\n                    right: \" 0\"\n                }\n            };\n            if (_.isMsie()) {\n                _.mixin(css.input, {\n                    backgroundImage: \"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)\"\n                });\n            }\n            return css;\n        }\n    }();\n    var EventBus = function() {\n        \"use strict\";\n        var namespace, deprecationMap;\n        namespace = \"typeahead:\";\n        deprecationMap = {\n            render: \"rendered\",\n            cursorchange: \"cursorchanged\",\n            select: \"selected\",\n            autocomplete: \"autocompleted\"\n        };\n        function EventBus(o) {\n            if (!o || !o.el) {\n                $.error(\"EventBus initialized without el\");\n            }\n            this.$el = $(o.el);\n        }\n        _.mixin(EventBus.prototype, {\n            _trigger: function(type, args) {\n                var $e = $.Event(namespace + type);\n                this.$el.trigger.call(this.$el, $e, args || []);\n                return $e;\n            },\n            before: function(type) {\n                var args, $e;\n                args = [].slice.call(arguments, 1);\n                $e = this._trigger(\"before\" + type, args);\n                return $e.isDefaultPrevented();\n            },\n            trigger: function(type) {\n                var deprecatedType;\n                this._trigger(type, [].slice.call(arguments, 1));\n                if (deprecatedType = deprecationMap[type]) {\n                    this._trigger(deprecatedType, [].slice.call(arguments, 1));\n                }\n            }\n        });\n        return EventBus;\n    }();\n    var EventEmitter = function() {\n        \"use strict\";\n        var splitter = /\\s+/, nextTick = getNextTick();\n        return {\n            onSync: onSync,\n            onAsync: onAsync,\n            off: off,\n            trigger: trigger\n        };\n        function on(method, types, cb, context) {\n            var type;\n            if (!cb) {\n                return this;\n            }\n            types = types.split(splitter);\n            cb = context ? bindContext(cb, context) : cb;\n            this._callbacks = this._callbacks || {};\n            while (type = types.shift()) {\n                this._callbacks[type] = this._callbacks[type] || {\n                    sync: [],\n                    async: []\n                };\n                this._callbacks[type][method].push(cb);\n            }\n            return this;\n        }\n        function onAsync(types, cb, context) {\n            return on.call(this, \"async\", types, cb, context);\n        }\n        function onSync(types, cb, context) {\n            return on.call(this, \"sync\", types, cb, context);\n        }\n        function off(types) {\n            var type;\n            if (!this._callbacks) {\n                return this;\n            }\n            types = types.split(splitter);\n            while (type = types.shift()) {\n                delete this._callbacks[type];\n            }\n            return this;\n        }\n        function trigger(types) {\n            var type, callbacks, args, syncFlush, asyncFlush;\n            if (!this._callbacks) {\n                return this;\n            }\n            types = types.split(splitter);\n            args = [].slice.call(arguments, 1);\n            while ((type = types.shift()) && (callbacks = this._callbacks[type])) {\n                syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args));\n                asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args));\n                syncFlush() && nextTick(asyncFlush);\n            }\n            return this;\n        }\n        function getFlush(callbacks, context, args) {\n            return flush;\n            function flush() {\n                var cancelled;\n                for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {\n                    cancelled = callbacks[i].apply(context, args) === false;\n                }\n                return !cancelled;\n            }\n        }\n        function getNextTick() {\n            var nextTickFn;\n            if (window.setImmediate) {\n                nextTickFn = function nextTickSetImmediate(fn) {\n                    setImmediate(function() {\n                        fn();\n                    });\n                };\n            } else {\n                nextTickFn = function nextTickSetTimeout(fn) {\n                    setTimeout(function() {\n                        fn();\n                    }, 0);\n                };\n            }\n            return nextTickFn;\n        }\n        function bindContext(fn, context) {\n            return fn.bind ? fn.bind(context) : function() {\n                fn.apply(context, [].slice.call(arguments, 0));\n            };\n        }\n    }();\n    var highlight = function(doc) {\n        \"use strict\";\n        var defaults = {\n            node: null,\n            pattern: null,\n            tagName: \"strong\",\n            className: null,\n            wordsOnly: false,\n            caseSensitive: false,\n            diacriticInsensitive: false\n        };\n        var accented = {\n            A: \"[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Ａａ]\",\n            B: \"[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Ｂｂ]\",\n            C: \"[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Ｃｃ]\",\n            D: \"[DdĎďǄ-ǆǱ-ǳᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Ｄｄ]\",\n            E: \"[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ｅｅ]\",\n            F: \"[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ﬀ-ﬄＦｆ]\",\n            G: \"[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Ｇｇ]\",\n            H: \"[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Ｈｈ]\",\n            I: \"[IiÌ-Ïì-ïĨ-İĲĳǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕ﬁﬃＩｉ]\",\n            J: \"[JjĲ-ĵǇ-ǌǰʲᴶⅉ⒥ⒿⓙⱼＪｊ]\",\n            K: \"[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Ｋｋ]\",\n            L: \"[LlĹ-ŀǇ-ǉˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿ﬂﬄＬｌ]\",\n            M: \"[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Ｍｍ]\",\n            N: \"[NnÑñŃ-ŉǊ-ǌǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Ｎｎ]\",\n            O: \"[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Ｏｏ]\",\n            P: \"[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Ｐｐ]\",\n            Q: \"[Qqℚ⒬Ⓠⓠ㏃Ｑｑ]\",\n            R: \"[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Ｒｒ]\",\n            S: \"[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜ﬆＳｓ]\",\n            T: \"[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ﬅﬆＴｔ]\",\n            U: \"[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Ｕｕ]\",\n            V: \"[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Ｖｖ]\",\n            W: \"[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ｗｗ]\",\n            X: \"[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Ｘｘ]\",\n            Y: \"[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Ｙｙ]\",\n            Z: \"[ZzŹ-žǱ-ǳᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Ｚｚ]\"\n        };\n        return function hightlight(o) {\n            var regex;\n            o = _.mixin({}, defaults, o);\n            if (!o.node || !o.pattern) {\n                return;\n            }\n            o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ];\n            regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive);\n            traverse(o.node, hightlightTextNode);\n            function hightlightTextNode(textNode) {\n                var match, patternNode, wrapperNode;\n                if (match = regex.exec(textNode.data)) {\n                    wrapperNode = doc.createElement(o.tagName);\n                    o.className && (wrapperNode.className = o.className);\n                    patternNode = textNode.splitText(match.index);\n                    patternNode.splitText(match[0].length);\n                    wrapperNode.appendChild(patternNode.cloneNode(true));\n                    textNode.parentNode.replaceChild(wrapperNode, patternNode);\n                }\n                return !!match;\n            }\n            function traverse(el, hightlightTextNode) {\n                var childNode, TEXT_NODE_TYPE = 3;\n                for (var i = 0; i < el.childNodes.length; i++) {\n                    childNode = el.childNodes[i];\n                    if (childNode.nodeType === TEXT_NODE_TYPE) {\n                        i += hightlightTextNode(childNode) ? 1 : 0;\n                    } else {\n                        traverse(childNode, hightlightTextNode);\n                    }\n                }\n            }\n        };\n        function accent_replacer(chr) {\n            return accented[chr.toUpperCase()] || chr;\n        }\n        function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) {\n            var escapedPatterns = [], regexStr;\n            for (var i = 0, len = patterns.length; i < len; i++) {\n                var escapedWord = _.escapeRegExChars(patterns[i]);\n                if (diacriticInsensitive) {\n                    escapedWord = escapedWord.replace(/\\S/g, accent_replacer);\n                }\n                escapedPatterns.push(escapedWord);\n            }\n            regexStr = wordsOnly ? \"\\\\b(\" + escapedPatterns.join(\"|\") + \")\\\\b\" : \"(\" + escapedPatterns.join(\"|\") + \")\";\n            return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, \"i\");\n        }\n    }(window.document);\n    var Input = function() {\n        \"use strict\";\n        var specialKeyCodeMap;\n        specialKeyCodeMap = {\n            9: \"tab\",\n            27: \"esc\",\n            37: \"left\",\n            39: \"right\",\n            13: \"enter\",\n            38: \"up\",\n            40: \"down\"\n        };\n        function Input(o, www) {\n            var id;\n            o = o || {};\n            if (!o.input) {\n                $.error(\"input is missing\");\n            }\n            www.mixin(this);\n            this.$hint = $(o.hint);\n            this.$input = $(o.input);\n            this.$menu = $(o.menu);\n            id = this.$input.attr(\"id\") || _.guid();\n            this.$menu.attr(\"id\", id + \"_listbox\");\n            this.$hint.attr({\n                \"aria-hidden\": true\n            });\n            this.$input.attr({\n                \"aria-owns\": id + \"_listbox\",\n                role: \"combobox\",\n                \"aria-autocomplete\": \"list\",\n                \"aria-expanded\": false\n            });\n            this.query = this.$input.val();\n            this.queryWhenFocused = this.hasFocus() ? this.query : null;\n            this.$overflowHelper = buildOverflowHelper(this.$input);\n            this._checkLanguageDirection();\n            if (this.$hint.length === 0) {\n                this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;\n            }\n            this.onSync(\"cursorchange\", this._updateDescendent);\n        }\n        Input.normalizeQuery = function(str) {\n            return _.toStr(str).replace(/^\\s*/g, \"\").replace(/\\s{2,}/g, \" \");\n        };\n        _.mixin(Input.prototype, EventEmitter, {\n            _onBlur: function onBlur() {\n                this.resetInputValue();\n                this.trigger(\"blurred\");\n            },\n            _onFocus: function onFocus() {\n                this.queryWhenFocused = this.query;\n                this.trigger(\"focused\");\n            },\n            _onKeydown: function onKeydown($e) {\n                var keyName = specialKeyCodeMap[$e.which || $e.keyCode];\n                this._managePreventDefault(keyName, $e);\n                if (keyName && this._shouldTrigger(keyName, $e)) {\n                    this.trigger(keyName + \"Keyed\", $e);\n                }\n            },\n            _onInput: function onInput() {\n                this._setQuery(this.getInputValue());\n                this.clearHintIfInvalid();\n                this._checkLanguageDirection();\n            },\n            _managePreventDefault: function managePreventDefault(keyName, $e) {\n                var preventDefault;\n                switch (keyName) {\n                  case \"up\":\n                  case \"down\":\n                    preventDefault = !withModifier($e);\n                    break;\n\n                  default:\n                    preventDefault = false;\n                }\n                preventDefault && $e.preventDefault();\n            },\n            _shouldTrigger: function shouldTrigger(keyName, $e) {\n                var trigger;\n                switch (keyName) {\n                  case \"tab\":\n                    trigger = !withModifier($e);\n                    break;\n\n                  default:\n                    trigger = true;\n                }\n                return trigger;\n            },\n            _checkLanguageDirection: function checkLanguageDirection() {\n                var dir = (this.$input.css(\"direction\") || \"ltr\").toLowerCase();\n                if (this.dir !== dir) {\n                    this.dir = dir;\n                    this.$hint.attr(\"dir\", dir);\n                    this.trigger(\"langDirChanged\", dir);\n                }\n            },\n            _setQuery: function setQuery(val, silent) {\n                var areEquivalent, hasDifferentWhitespace;\n                areEquivalent = areQueriesEquivalent(val, this.query);\n                hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false;\n                this.query = val;\n                if (!silent && !areEquivalent) {\n                    this.trigger(\"queryChanged\", this.query);\n                } else if (!silent && hasDifferentWhitespace) {\n                    this.trigger(\"whitespaceChanged\", this.query);\n                }\n            },\n            _updateDescendent: function updateDescendent(event, id) {\n                this.$input.attr(\"aria-activedescendant\", id);\n            },\n            bind: function() {\n                var that = this, onBlur, onFocus, onKeydown, onInput;\n                onBlur = _.bind(this._onBlur, this);\n                onFocus = _.bind(this._onFocus, this);\n                onKeydown = _.bind(this._onKeydown, this);\n                onInput = _.bind(this._onInput, this);\n                this.$input.on(\"blur.tt\", onBlur).on(\"focus.tt\", onFocus).on(\"keydown.tt\", onKeydown);\n                if (!_.isMsie() || _.isMsie() > 9) {\n                    this.$input.on(\"input.tt\", onInput);\n                } else {\n                    this.$input.on(\"keydown.tt keypress.tt cut.tt paste.tt\", function($e) {\n                        if (specialKeyCodeMap[$e.which || $e.keyCode]) {\n                            return;\n                        }\n                        _.defer(_.bind(that._onInput, that, $e));\n                    });\n                }\n                return this;\n            },\n            focus: function focus() {\n                this.$input.focus();\n            },\n            blur: function blur() {\n                this.$input.blur();\n            },\n            getLangDir: function getLangDir() {\n                return this.dir;\n            },\n            getQuery: function getQuery() {\n                return this.query || \"\";\n            },\n            setQuery: function setQuery(val, silent) {\n                this.setInputValue(val);\n                this._setQuery(val, silent);\n            },\n            hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() {\n                return this.query !== this.queryWhenFocused;\n            },\n            getInputValue: function getInputValue() {\n                return this.$input.val();\n            },\n            setInputValue: function setInputValue(value) {\n                this.$input.val(value);\n                this.clearHintIfInvalid();\n                this._checkLanguageDirection();\n            },\n            resetInputValue: function resetInputValue() {\n                this.setInputValue(this.query);\n            },\n            getHint: function getHint() {\n                return this.$hint.val();\n            },\n            setHint: function setHint(value) {\n                this.$hint.val(value);\n            },\n            clearHint: function clearHint() {\n                this.setHint(\"\");\n            },\n            clearHintIfInvalid: function clearHintIfInvalid() {\n                var val, hint, valIsPrefixOfHint, isValid;\n                val = this.getInputValue();\n                hint = this.getHint();\n                valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;\n                isValid = val !== \"\" && valIsPrefixOfHint && !this.hasOverflow();\n                !isValid && this.clearHint();\n            },\n            hasFocus: function hasFocus() {\n                return this.$input.is(\":focus\");\n            },\n            hasOverflow: function hasOverflow() {\n                var constraint = this.$input.width() - 2;\n                this.$overflowHelper.text(this.getInputValue());\n                return this.$overflowHelper.width() >= constraint;\n            },\n            isCursorAtEnd: function() {\n                var valueLength, selectionStart, range;\n                valueLength = this.$input.val().length;\n                selectionStart = this.$input[0].selectionStart;\n                if (_.isNumber(selectionStart)) {\n                    return selectionStart === valueLength;\n                } else if (document.selection) {\n                    range = document.selection.createRange();\n                    range.moveStart(\"character\", -valueLength);\n                    return valueLength === range.text.length;\n                }\n                return true;\n            },\n            destroy: function destroy() {\n                this.$hint.off(\".tt\");\n                this.$input.off(\".tt\");\n                this.$overflowHelper.remove();\n                this.$hint = this.$input = this.$overflowHelper = $(\"<div>\");\n            },\n            setAriaExpanded: function setAriaExpanded(value) {\n                this.$input.attr(\"aria-expanded\", value);\n            }\n        });\n        return Input;\n        function buildOverflowHelper($input) {\n            return $('<pre aria-hidden=\"true\"></pre>').css({\n                position: \"absolute\",\n                visibility: \"hidden\",\n                whiteSpace: \"pre\",\n                fontFamily: $input.css(\"font-family\"),\n                fontSize: $input.css(\"font-size\"),\n                fontStyle: $input.css(\"font-style\"),\n                fontVariant: $input.css(\"font-variant\"),\n                fontWeight: $input.css(\"font-weight\"),\n                wordSpacing: $input.css(\"word-spacing\"),\n                letterSpacing: $input.css(\"letter-spacing\"),\n                textIndent: $input.css(\"text-indent\"),\n                textRendering: $input.css(\"text-rendering\"),\n                textTransform: $input.css(\"text-transform\")\n            }).insertAfter($input);\n        }\n        function areQueriesEquivalent(a, b) {\n            return Input.normalizeQuery(a) === Input.normalizeQuery(b);\n        }\n        function withModifier($e) {\n            return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;\n        }\n    }();\n    var Dataset = function() {\n        \"use strict\";\n        var keys, nameGenerator;\n        keys = {\n            dataset: \"tt-selectable-dataset\",\n            val: \"tt-selectable-display\",\n            obj: \"tt-selectable-object\"\n        };\n        nameGenerator = _.getIdGenerator();\n        function Dataset(o, www) {\n            o = o || {};\n            o.templates = o.templates || {};\n            o.templates.notFound = o.templates.notFound || o.templates.empty;\n            if (!o.source) {\n                $.error(\"missing source\");\n            }\n            if (!o.node) {\n                $.error(\"missing node\");\n            }\n            if (o.name && !isValidName(o.name)) {\n                $.error(\"invalid dataset name: \" + o.name);\n            }\n            www.mixin(this);\n            this.highlight = !!o.highlight;\n            this.name = _.toStr(o.name || nameGenerator());\n            this.limit = o.limit || 5;\n            this.displayFn = getDisplayFn(o.display || o.displayKey);\n            this.templates = getTemplates(o.templates, this.displayFn);\n            this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source;\n            this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async;\n            this._resetLastSuggestion();\n            this.$el = $(o.node).attr(\"role\", \"presentation\").addClass(this.classes.dataset).addClass(this.classes.dataset + \"-\" + this.name);\n        }\n        Dataset.extractData = function extractData(el) {\n            var $el = $(el);\n            if ($el.data(keys.obj)) {\n                return {\n                    dataset: $el.data(keys.dataset) || \"\",\n                    val: $el.data(keys.val) || \"\",\n                    obj: $el.data(keys.obj) || null\n                };\n            }\n            return null;\n        };\n        _.mixin(Dataset.prototype, EventEmitter, {\n            _overwrite: function overwrite(query, suggestions) {\n                suggestions = suggestions || [];\n                if (suggestions.length) {\n                    this._renderSuggestions(query, suggestions);\n                } else if (this.async && this.templates.pending) {\n                    this._renderPending(query);\n                } else if (!this.async && this.templates.notFound) {\n                    this._renderNotFound(query);\n                } else {\n                    this._empty();\n                }\n                this.trigger(\"rendered\", suggestions, false, this.name);\n            },\n            _append: function append(query, suggestions) {\n                suggestions = suggestions || [];\n                if (suggestions.length && this.$lastSuggestion.length) {\n                    this._appendSuggestions(query, suggestions);\n                } else if (suggestions.length) {\n                    this._renderSuggestions(query, suggestions);\n                } else if (!this.$lastSuggestion.length && this.templates.notFound) {\n                    this._renderNotFound(query);\n                }\n                this.trigger(\"rendered\", suggestions, true, this.name);\n            },\n            _renderSuggestions: function renderSuggestions(query, suggestions) {\n                var $fragment;\n                $fragment = this._getSuggestionsFragment(query, suggestions);\n                this.$lastSuggestion = $fragment.children().last();\n                this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions));\n            },\n            _appendSuggestions: function appendSuggestions(query, suggestions) {\n                var $fragment, $lastSuggestion;\n                $fragment = this._getSuggestionsFragment(query, suggestions);\n                $lastSuggestion = $fragment.children().last();\n                this.$lastSuggestion.after($fragment);\n                this.$lastSuggestion = $lastSuggestion;\n            },\n            _renderPending: function renderPending(query) {\n                var template = this.templates.pending;\n                this._resetLastSuggestion();\n                template && this.$el.html(template({\n                    query: query,\n                    dataset: this.name\n                }));\n            },\n            _renderNotFound: function renderNotFound(query) {\n                var template = this.templates.notFound;\n                this._resetLastSuggestion();\n                template && this.$el.html(template({\n                    query: query,\n                    dataset: this.name\n                }));\n            },\n            _empty: function empty() {\n                this.$el.empty();\n                this._resetLastSuggestion();\n            },\n            _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) {\n                var that = this, fragment;\n                fragment = document.createDocumentFragment();\n                _.each(suggestions, function getSuggestionNode(suggestion) {\n                    var $el, context;\n                    context = that._injectQuery(query, suggestion);\n                    $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + \" \" + that.classes.selectable);\n                    fragment.appendChild($el[0]);\n                });\n                this.highlight && highlight({\n                    className: this.classes.highlight,\n                    node: fragment,\n                    pattern: query\n                });\n                return $(fragment);\n            },\n            _getFooter: function getFooter(query, suggestions) {\n                return this.templates.footer ? this.templates.footer({\n                    query: query,\n                    suggestions: suggestions,\n                    dataset: this.name\n                }) : null;\n            },\n            _getHeader: function getHeader(query, suggestions) {\n                return this.templates.header ? this.templates.header({\n                    query: query,\n                    suggestions: suggestions,\n                    dataset: this.name\n                }) : null;\n            },\n            _resetLastSuggestion: function resetLastSuggestion() {\n                this.$lastSuggestion = $();\n            },\n            _injectQuery: function injectQuery(query, obj) {\n                return _.isObject(obj) ? _.mixin({\n                    _query: query\n                }, obj) : obj;\n            },\n            update: function update(query) {\n                var that = this, canceled = false, syncCalled = false, rendered = 0;\n                this.cancel();\n                this.cancel = function cancel() {\n                    canceled = true;\n                    that.cancel = $.noop;\n                    that.async && that.trigger(\"asyncCanceled\", query, that.name);\n                };\n                this.source(query, sync, async);\n                !syncCalled && sync([]);\n                function sync(suggestions) {\n                    if (syncCalled) {\n                        return;\n                    }\n                    syncCalled = true;\n                    suggestions = (suggestions || []).slice(0, that.limit);\n                    rendered = suggestions.length;\n                    that._overwrite(query, suggestions);\n                    if (rendered < that.limit && that.async) {\n                        that.trigger(\"asyncRequested\", query, that.name);\n                    }\n                }\n                function async(suggestions) {\n                    suggestions = suggestions || [];\n                    if (!canceled && rendered < that.limit) {\n                        that.cancel = $.noop;\n                        var idx = Math.abs(rendered - that.limit);\n                        rendered += idx;\n                        that._append(query, suggestions.slice(0, idx));\n                        that.async && that.trigger(\"asyncReceived\", query, that.name);\n                    }\n                }\n            },\n            cancel: $.noop,\n            clear: function clear() {\n                this._empty();\n                this.cancel();\n                this.trigger(\"cleared\");\n            },\n            isEmpty: function isEmpty() {\n                return this.$el.is(\":empty\");\n            },\n            destroy: function destroy() {\n                this.$el = $(\"<div>\");\n            }\n        });\n        return Dataset;\n        function getDisplayFn(display) {\n            display = display || _.stringify;\n            return _.isFunction(display) ? display : displayFn;\n            function displayFn(obj) {\n                return obj[display];\n            }\n        }\n        function getTemplates(templates, displayFn) {\n            return {\n                notFound: templates.notFound && _.templatify(templates.notFound),\n                pending: templates.pending && _.templatify(templates.pending),\n                header: templates.header && _.templatify(templates.header),\n                footer: templates.footer && _.templatify(templates.footer),\n                suggestion: templates.suggestion ? userSuggestionTemplate : suggestionTemplate\n            };\n            function userSuggestionTemplate(context) {\n                var template = templates.suggestion;\n                return $(template(context)).attr(\"id\", _.guid());\n            }\n            function suggestionTemplate(context) {\n                return $('<div role=\"option\">').attr(\"id\", _.guid()).text(displayFn(context));\n            }\n        }\n        function isValidName(str) {\n            return /^[_a-zA-Z0-9-]+$/.test(str);\n        }\n    }();\n    var Menu = function() {\n        \"use strict\";\n        function Menu(o, www) {\n            var that = this;\n            o = o || {};\n            if (!o.node) {\n                $.error(\"node is required\");\n            }\n            www.mixin(this);\n            this.$node = $(o.node);\n            this.query = null;\n            this.datasets = _.map(o.datasets, initializeDataset);\n            function initializeDataset(oDataset) {\n                var node = that.$node.find(oDataset.node).first();\n                oDataset.node = node.length ? node : $(\"<div>\").appendTo(that.$node);\n                return new Dataset(oDataset, www);\n            }\n        }\n        _.mixin(Menu.prototype, EventEmitter, {\n            _onSelectableClick: function onSelectableClick($e) {\n                this.trigger(\"selectableClicked\", $($e.currentTarget));\n            },\n            _onRendered: function onRendered(type, dataset, suggestions, async) {\n                this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());\n                this.trigger(\"datasetRendered\", dataset, suggestions, async);\n            },\n            _onCleared: function onCleared() {\n                this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());\n                this.trigger(\"datasetCleared\");\n            },\n            _propagate: function propagate() {\n                this.trigger.apply(this, arguments);\n            },\n            _allDatasetsEmpty: function allDatasetsEmpty() {\n                return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) {\n                    var isEmpty = dataset.isEmpty();\n                    this.$node.attr(\"aria-expanded\", !isEmpty);\n                    return isEmpty;\n                }, this));\n            },\n            _getSelectables: function getSelectables() {\n                return this.$node.find(this.selectors.selectable);\n            },\n            _removeCursor: function _removeCursor() {\n                var $selectable = this.getActiveSelectable();\n                $selectable && $selectable.removeClass(this.classes.cursor);\n            },\n            _ensureVisible: function ensureVisible($el) {\n                var elTop, elBottom, nodeScrollTop, nodeHeight;\n                elTop = $el.position().top;\n                elBottom = elTop + $el.outerHeight(true);\n                nodeScrollTop = this.$node.scrollTop();\n                nodeHeight = this.$node.height() + parseInt(this.$node.css(\"paddingTop\"), 10) + parseInt(this.$node.css(\"paddingBottom\"), 10);\n                if (elTop < 0) {\n                    this.$node.scrollTop(nodeScrollTop + elTop);\n                } else if (nodeHeight < elBottom) {\n                    this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight));\n                }\n            },\n            bind: function() {\n                var that = this, onSelectableClick;\n                onSelectableClick = _.bind(this._onSelectableClick, this);\n                this.$node.on(\"click.tt\", this.selectors.selectable, onSelectableClick);\n                this.$node.on(\"mouseover\", this.selectors.selectable, function() {\n                    that.setCursor($(this));\n                });\n                this.$node.on(\"mouseleave\", function() {\n                    that._removeCursor();\n                });\n                _.each(this.datasets, function(dataset) {\n                    dataset.onSync(\"asyncRequested\", that._propagate, that).onSync(\"asyncCanceled\", that._propagate, that).onSync(\"asyncReceived\", that._propagate, that).onSync(\"rendered\", that._onRendered, that).onSync(\"cleared\", that._onCleared, that);\n                });\n                return this;\n            },\n            isOpen: function isOpen() {\n                return this.$node.hasClass(this.classes.open);\n            },\n            open: function open() {\n                this.$node.scrollTop(0);\n                this.$node.addClass(this.classes.open);\n            },\n            close: function close() {\n                this.$node.attr(\"aria-expanded\", false);\n                this.$node.removeClass(this.classes.open);\n                this._removeCursor();\n            },\n            setLanguageDirection: function setLanguageDirection(dir) {\n                this.$node.attr(\"dir\", dir);\n            },\n            selectableRelativeToCursor: function selectableRelativeToCursor(delta) {\n                var $selectables, $oldCursor, oldIndex, newIndex;\n                $oldCursor = this.getActiveSelectable();\n                $selectables = this._getSelectables();\n                oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1;\n                newIndex = oldIndex + delta;\n                newIndex = (newIndex + 1) % ($selectables.length + 1) - 1;\n                newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex;\n                return newIndex === -1 ? null : $selectables.eq(newIndex);\n            },\n            setCursor: function setCursor($selectable) {\n                this._removeCursor();\n                if ($selectable = $selectable && $selectable.first()) {\n                    $selectable.addClass(this.classes.cursor);\n                    this._ensureVisible($selectable);\n                }\n            },\n            getSelectableData: function getSelectableData($el) {\n                return $el && $el.length ? Dataset.extractData($el) : null;\n            },\n            getActiveSelectable: function getActiveSelectable() {\n                var $selectable = this._getSelectables().filter(this.selectors.cursor).first();\n                return $selectable.length ? $selectable : null;\n            },\n            getTopSelectable: function getTopSelectable() {\n                var $selectable = this._getSelectables().first();\n                return $selectable.length ? $selectable : null;\n            },\n            update: function update(query) {\n                var isValidUpdate = query !== this.query;\n                if (isValidUpdate) {\n                    this.query = query;\n                    _.each(this.datasets, updateDataset);\n                }\n                return isValidUpdate;\n                function updateDataset(dataset) {\n                    dataset.update(query);\n                }\n            },\n            empty: function empty() {\n                _.each(this.datasets, clearDataset);\n                this.query = null;\n                this.$node.addClass(this.classes.empty);\n                function clearDataset(dataset) {\n                    dataset.clear();\n                }\n            },\n            destroy: function destroy() {\n                this.$node.off(\".tt\");\n                this.$node = $(\"<div>\");\n                _.each(this.datasets, destroyDataset);\n                function destroyDataset(dataset) {\n                    dataset.destroy();\n                }\n            }\n        });\n        return Menu;\n    }();\n    var Status = function() {\n        \"use strict\";\n        function Status(options) {\n            this.$el = $(\"<span></span>\", {\n                role: \"status\",\n                \"aria-live\": \"polite\"\n            }).css({\n                position: \"absolute\",\n                padding: \"0\",\n                border: \"0\",\n                height: \"1px\",\n                width: \"1px\",\n                \"margin-bottom\": \"-1px\",\n                \"margin-right\": \"-1px\",\n                overflow: \"hidden\",\n                clip: \"rect(0 0 0 0)\",\n                \"white-space\": \"nowrap\"\n            });\n            options.$input.after(this.$el);\n            _.each(options.menu.datasets, _.bind(function(dataset) {\n                if (dataset.onSync) {\n                    dataset.onSync(\"rendered\", _.bind(this.update, this));\n                    dataset.onSync(\"cleared\", _.bind(this.cleared, this));\n                }\n            }, this));\n        }\n        _.mixin(Status.prototype, {\n            update: function update(event, suggestions) {\n                var length = suggestions.length;\n                var words;\n                if (length === 1) {\n                    words = {\n                        result: \"result\",\n                        is: \"is\"\n                    };\n                } else {\n                    words = {\n                        result: \"results\",\n                        is: \"are\"\n                    };\n                }\n                this.$el.text(length + \" \" + words.result + \" \" + words.is + \" available, use up and down arrow keys to navigate.\");\n            },\n            cleared: function() {\n                this.$el.text(\"\");\n            }\n        });\n        return Status;\n    }();\n    var DefaultMenu = function() {\n        \"use strict\";\n        var s = Menu.prototype;\n        function DefaultMenu() {\n            Menu.apply(this, [].slice.call(arguments, 0));\n        }\n        _.mixin(DefaultMenu.prototype, Menu.prototype, {\n            open: function open() {\n                !this._allDatasetsEmpty() && this._show();\n                return s.open.apply(this, [].slice.call(arguments, 0));\n            },\n            close: function close() {\n                this._hide();\n                return s.close.apply(this, [].slice.call(arguments, 0));\n            },\n            _onRendered: function onRendered() {\n                if (this._allDatasetsEmpty()) {\n                    this._hide();\n                } else {\n                    this.isOpen() && this._show();\n                }\n                return s._onRendered.apply(this, [].slice.call(arguments, 0));\n            },\n            _onCleared: function onCleared() {\n                if (this._allDatasetsEmpty()) {\n                    this._hide();\n                } else {\n                    this.isOpen() && this._show();\n                }\n                return s._onCleared.apply(this, [].slice.call(arguments, 0));\n            },\n            setLanguageDirection: function setLanguageDirection(dir) {\n                this.$node.css(dir === \"ltr\" ? this.css.ltr : this.css.rtl);\n                return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0));\n            },\n            _hide: function hide() {\n                this.$node.hide();\n            },\n            _show: function show() {\n                this.$node.css(\"display\", \"block\");\n            }\n        });\n        return DefaultMenu;\n    }();\n    var Typeahead = function() {\n        \"use strict\";\n        function Typeahead(o, www) {\n            var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged;\n            o = o || {};\n            if (!o.input) {\n                $.error(\"missing input\");\n            }\n            if (!o.menu) {\n                $.error(\"missing menu\");\n            }\n            if (!o.eventBus) {\n                $.error(\"missing event bus\");\n            }\n            www.mixin(this);\n            this.eventBus = o.eventBus;\n            this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;\n            this.input = o.input;\n            this.menu = o.menu;\n            this.enabled = true;\n            this.autoselect = !!o.autoselect;\n            this.active = false;\n            this.input.hasFocus() && this.activate();\n            this.dir = this.input.getLangDir();\n            this._hacks();\n            this.menu.bind().onSync(\"selectableClicked\", this._onSelectableClicked, this).onSync(\"asyncRequested\", this._onAsyncRequested, this).onSync(\"asyncCanceled\", this._onAsyncCanceled, this).onSync(\"asyncReceived\", this._onAsyncReceived, this).onSync(\"datasetRendered\", this._onDatasetRendered, this).onSync(\"datasetCleared\", this._onDatasetCleared, this);\n            onFocused = c(this, \"activate\", \"open\", \"_onFocused\");\n            onBlurred = c(this, \"deactivate\", \"_onBlurred\");\n            onEnterKeyed = c(this, \"isActive\", \"isOpen\", \"_onEnterKeyed\");\n            onTabKeyed = c(this, \"isActive\", \"isOpen\", \"_onTabKeyed\");\n            onEscKeyed = c(this, \"isActive\", \"_onEscKeyed\");\n            onUpKeyed = c(this, \"isActive\", \"open\", \"_onUpKeyed\");\n            onDownKeyed = c(this, \"isActive\", \"open\", \"_onDownKeyed\");\n            onLeftKeyed = c(this, \"isActive\", \"isOpen\", \"_onLeftKeyed\");\n            onRightKeyed = c(this, \"isActive\", \"isOpen\", \"_onRightKeyed\");\n            onQueryChanged = c(this, \"_openIfActive\", \"_onQueryChanged\");\n            onWhitespaceChanged = c(this, \"_openIfActive\", \"_onWhitespaceChanged\");\n            this.input.bind().onSync(\"focused\", onFocused, this).onSync(\"blurred\", onBlurred, this).onSync(\"enterKeyed\", onEnterKeyed, this).onSync(\"tabKeyed\", onTabKeyed, this).onSync(\"escKeyed\", onEscKeyed, this).onSync(\"upKeyed\", onUpKeyed, this).onSync(\"downKeyed\", onDownKeyed, this).onSync(\"leftKeyed\", onLeftKeyed, this).onSync(\"rightKeyed\", onRightKeyed, this).onSync(\"queryChanged\", onQueryChanged, this).onSync(\"whitespaceChanged\", onWhitespaceChanged, this).onSync(\"langDirChanged\", this._onLangDirChanged, this);\n        }\n        _.mixin(Typeahead.prototype, {\n            _hacks: function hacks() {\n                var $input, $menu;\n                $input = this.input.$input || $(\"<div>\");\n                $menu = this.menu.$node || $(\"<div>\");\n                $input.on(\"blur.tt\", function($e) {\n                    var active, isActive, hasActive;\n                    active = document.activeElement;\n                    isActive = $menu.is(active);\n                    hasActive = $menu.has(active).length > 0;\n                    if (_.isMsie() && (isActive || hasActive)) {\n                        $e.preventDefault();\n                        $e.stopImmediatePropagation();\n                        _.defer(function() {\n                            $input.focus();\n                        });\n                    }\n                });\n                $menu.on(\"mousedown.tt\", function($e) {\n                    $e.preventDefault();\n                });\n            },\n            _onSelectableClicked: function onSelectableClicked(type, $el) {\n                this.select($el);\n            },\n            _onDatasetCleared: function onDatasetCleared() {\n                this._updateHint();\n            },\n            _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) {\n                this._updateHint();\n                if (this.autoselect) {\n                    var cursorClass = this.selectors.cursor.substr(1);\n                    this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass);\n                }\n                this.eventBus.trigger(\"render\", suggestions, async, dataset);\n            },\n            _onAsyncRequested: function onAsyncRequested(type, dataset, query) {\n                this.eventBus.trigger(\"asyncrequest\", query, dataset);\n            },\n            _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {\n                this.eventBus.trigger(\"asynccancel\", query, dataset);\n            },\n            _onAsyncReceived: function onAsyncReceived(type, dataset, query) {\n                this.eventBus.trigger(\"asyncreceive\", query, dataset);\n            },\n            _onFocused: function onFocused() {\n                this._minLengthMet() && this.menu.update(this.input.getQuery());\n            },\n            _onBlurred: function onBlurred() {\n                if (this.input.hasQueryChangedSinceLastFocus()) {\n                    this.eventBus.trigger(\"change\", this.input.getQuery());\n                }\n            },\n            _onEnterKeyed: function onEnterKeyed(type, $e) {\n                var $selectable;\n                if ($selectable = this.menu.getActiveSelectable()) {\n                    if (this.select($selectable)) {\n                        $e.preventDefault();\n                        $e.stopPropagation();\n                    }\n                } else if (this.autoselect) {\n                    if (this.select(this.menu.getTopSelectable())) {\n                        $e.preventDefault();\n                        $e.stopPropagation();\n                    }\n                }\n            },\n            _onTabKeyed: function onTabKeyed(type, $e) {\n                var $selectable;\n                if ($selectable = this.menu.getActiveSelectable()) {\n                    this.select($selectable) && $e.preventDefault();\n                } else if (this.autoselect) {\n                    if ($selectable = this.menu.getTopSelectable()) {\n                        this.autocomplete($selectable) && $e.preventDefault();\n                    }\n                }\n            },\n            _onEscKeyed: function onEscKeyed() {\n                this.close();\n            },\n            _onUpKeyed: function onUpKeyed() {\n                this.moveCursor(-1);\n            },\n            _onDownKeyed: function onDownKeyed() {\n                this.moveCursor(+1);\n            },\n            _onLeftKeyed: function onLeftKeyed() {\n                if (this.dir === \"rtl\" && this.input.isCursorAtEnd()) {\n                    this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable());\n                }\n            },\n            _onRightKeyed: function onRightKeyed() {\n                if (this.dir === \"ltr\" && this.input.isCursorAtEnd()) {\n                    this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable());\n                }\n            },\n            _onQueryChanged: function onQueryChanged(e, query) {\n                this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();\n            },\n            _onWhitespaceChanged: function onWhitespaceChanged() {\n                this._updateHint();\n            },\n            _onLangDirChanged: function onLangDirChanged(e, dir) {\n                if (this.dir !== dir) {\n                    this.dir = dir;\n                    this.menu.setLanguageDirection(dir);\n                }\n            },\n            _openIfActive: function openIfActive() {\n                this.isActive() && this.open();\n            },\n            _minLengthMet: function minLengthMet(query) {\n                query = _.isString(query) ? query : this.input.getQuery() || \"\";\n                return query.length >= this.minLength;\n            },\n            _updateHint: function updateHint() {\n                var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;\n                $selectable = this.menu.getTopSelectable();\n                data = this.menu.getSelectableData($selectable);\n                val = this.input.getInputValue();\n                if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {\n                    query = Input.normalizeQuery(val);\n                    escapedQuery = _.escapeRegExChars(query);\n                    frontMatchRegEx = new RegExp(\"^(?:\" + escapedQuery + \")(.+$)\", \"i\");\n                    match = frontMatchRegEx.exec(data.val);\n                    match && this.input.setHint(val + match[1]);\n                } else {\n                    this.input.clearHint();\n                }\n            },\n            isEnabled: function isEnabled() {\n                return this.enabled;\n            },\n            enable: function enable() {\n                this.enabled = true;\n            },\n            disable: function disable() {\n                this.enabled = false;\n            },\n            isActive: function isActive() {\n                return this.active;\n            },\n            activate: function activate() {\n                if (this.isActive()) {\n                    return true;\n                } else if (!this.isEnabled() || this.eventBus.before(\"active\")) {\n                    return false;\n                } else {\n                    this.active = true;\n                    this.eventBus.trigger(\"active\");\n                    return true;\n                }\n            },\n            deactivate: function deactivate() {\n                if (!this.isActive()) {\n                    return true;\n                } else if (this.eventBus.before(\"idle\")) {\n                    return false;\n                } else {\n                    this.active = false;\n                    this.close();\n                    this.eventBus.trigger(\"idle\");\n                    return true;\n                }\n            },\n            isOpen: function isOpen() {\n                return this.menu.isOpen();\n            },\n            open: function open() {\n                if (!this.isOpen() && !this.eventBus.before(\"open\")) {\n                    this.input.setAriaExpanded(true);\n                    this.menu.open();\n                    this._updateHint();\n                    this.eventBus.trigger(\"open\");\n                }\n                return this.isOpen();\n            },\n            close: function close() {\n                if (this.isOpen() && !this.eventBus.before(\"close\")) {\n                    this.input.setAriaExpanded(false);\n                    this.menu.close();\n                    this.input.clearHint();\n                    this.input.resetInputValue();\n                    this.eventBus.trigger(\"close\");\n                }\n                return !this.isOpen();\n            },\n            setVal: function setVal(val) {\n                this.input.setQuery(_.toStr(val));\n            },\n            getVal: function getVal() {\n                return this.input.getQuery();\n            },\n            select: function select($selectable) {\n                var data = this.menu.getSelectableData($selectable);\n                if (data && !this.eventBus.before(\"select\", data.obj, data.dataset)) {\n                    this.input.setQuery(data.val, true);\n                    this.eventBus.trigger(\"select\", data.obj, data.dataset);\n                    this.close();\n                    return true;\n                }\n                return false;\n            },\n            autocomplete: function autocomplete($selectable) {\n                var query, data, isValid;\n                query = this.input.getQuery();\n                data = this.menu.getSelectableData($selectable);\n                isValid = data && query !== data.val;\n                if (isValid && !this.eventBus.before(\"autocomplete\", data.obj, data.dataset)) {\n                    this.input.setQuery(data.val);\n                    this.eventBus.trigger(\"autocomplete\", data.obj, data.dataset);\n                    return true;\n                }\n                return false;\n            },\n            moveCursor: function moveCursor(delta) {\n                var query, $candidate, data, suggestion, datasetName, cancelMove, id;\n                query = this.input.getQuery();\n                $candidate = this.menu.selectableRelativeToCursor(delta);\n                data = this.menu.getSelectableData($candidate);\n                suggestion = data ? data.obj : null;\n                datasetName = data ? data.dataset : null;\n                id = $candidate ? $candidate.attr(\"id\") : null;\n                this.input.trigger(\"cursorchange\", id);\n                cancelMove = this._minLengthMet() && this.menu.update(query);\n                if (!cancelMove && !this.eventBus.before(\"cursorchange\", suggestion, datasetName)) {\n                    this.menu.setCursor($candidate);\n                    if (data) {\n                        if (typeof data.val === \"string\") {\n                            this.input.setInputValue(data.val);\n                        }\n                    } else {\n                        this.input.resetInputValue();\n                        this._updateHint();\n                    }\n                    this.eventBus.trigger(\"cursorchange\", suggestion, datasetName);\n                    return true;\n                }\n                return false;\n            },\n            destroy: function destroy() {\n                this.input.destroy();\n                this.menu.destroy();\n            }\n        });\n        return Typeahead;\n        function c(ctx) {\n            var methods = [].slice.call(arguments, 1);\n            return function() {\n                var args = [].slice.call(arguments);\n                _.each(methods, function(method) {\n                    return ctx[method].apply(ctx, args);\n                });\n            };\n        }\n    }();\n    (function() {\n        \"use strict\";\n        var old, keys, methods;\n        old = $.fn.typeahead;\n        keys = {\n            www: \"tt-www\",\n            attrs: \"tt-attrs\",\n            typeahead: \"tt-typeahead\"\n        };\n        methods = {\n            initialize: function initialize(o, datasets) {\n                var www;\n                datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);\n                o = o || {};\n                www = WWW(o.classNames);\n                return this.each(attach);\n                function attach() {\n                    var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor;\n                    _.each(datasets, function(d) {\n                        d.highlight = !!o.highlight;\n                    });\n                    $input = $(this);\n                    $wrapper = $(www.html.wrapper);\n                    $hint = $elOrNull(o.hint);\n                    $menu = $elOrNull(o.menu);\n                    defaultHint = o.hint !== false && !$hint;\n                    defaultMenu = o.menu !== false && !$menu;\n                    defaultHint && ($hint = buildHintFromInput($input, www));\n                    defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));\n                    $hint && $hint.val(\"\");\n                    $input = prepInput($input, www);\n                    if (defaultHint || defaultMenu) {\n                        $wrapper.css(www.css.wrapper);\n                        $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint);\n                        $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);\n                    }\n                    MenuConstructor = defaultMenu ? DefaultMenu : Menu;\n                    eventBus = new EventBus({\n                        el: $input\n                    });\n                    input = new Input({\n                        hint: $hint,\n                        input: $input,\n                        menu: $menu\n                    }, www);\n                    menu = new MenuConstructor({\n                        node: $menu,\n                        datasets: datasets\n                    }, www);\n                    status = new Status({\n                        $input: $input,\n                        menu: menu\n                    });\n                    typeahead = new Typeahead({\n                        input: input,\n                        menu: menu,\n                        eventBus: eventBus,\n                        minLength: o.minLength,\n                        autoselect: o.autoselect\n                    }, www);\n                    $input.data(keys.www, www);\n                    $input.data(keys.typeahead, typeahead);\n                }\n            },\n            isEnabled: function isEnabled() {\n                var enabled;\n                ttEach(this.first(), function(t) {\n                    enabled = t.isEnabled();\n                });\n                return enabled;\n            },\n            enable: function enable() {\n                ttEach(this, function(t) {\n                    t.enable();\n                });\n                return this;\n            },\n            disable: function disable() {\n                ttEach(this, function(t) {\n                    t.disable();\n                });\n                return this;\n            },\n            isActive: function isActive() {\n                var active;\n                ttEach(this.first(), function(t) {\n                    active = t.isActive();\n                });\n                return active;\n            },\n            activate: function activate() {\n                ttEach(this, function(t) {\n                    t.activate();\n                });\n                return this;\n            },\n            deactivate: function deactivate() {\n                ttEach(this, function(t) {\n                    t.deactivate();\n                });\n                return this;\n            },\n            isOpen: function isOpen() {\n                var open;\n                ttEach(this.first(), function(t) {\n                    open = t.isOpen();\n                });\n                return open;\n            },\n            open: function open() {\n                ttEach(this, function(t) {\n                    t.open();\n                });\n                return this;\n            },\n            close: function close() {\n                ttEach(this, function(t) {\n                    t.close();\n                });\n                return this;\n            },\n            select: function select(el) {\n                var success = false, $el = $(el);\n                ttEach(this.first(), function(t) {\n                    success = t.select($el);\n                });\n                return success;\n            },\n            autocomplete: function autocomplete(el) {\n                var success = false, $el = $(el);\n                ttEach(this.first(), function(t) {\n                    success = t.autocomplete($el);\n                });\n                return success;\n            },\n            moveCursor: function moveCursoe(delta) {\n                var success = false;\n                ttEach(this.first(), function(t) {\n                    success = t.moveCursor(delta);\n                });\n                return success;\n            },\n            val: function val(newVal) {\n                var query;\n                if (!arguments.length) {\n                    ttEach(this.first(), function(t) {\n                        query = t.getVal();\n                    });\n                    return query;\n                } else {\n                    ttEach(this, function(t) {\n                        t.setVal(_.toStr(newVal));\n                    });\n                    return this;\n                }\n            },\n            destroy: function destroy() {\n                ttEach(this, function(typeahead, $input) {\n                    revert($input);\n                    typeahead.destroy();\n                });\n                return this;\n            }\n        };\n        $.fn.typeahead = function(method) {\n            if (methods[method]) {\n                return methods[method].apply(this, [].slice.call(arguments, 1));\n            } else {\n                return methods.initialize.apply(this, arguments);\n            }\n        };\n        $.fn.typeahead.noConflict = function noConflict() {\n            $.fn.typeahead = old;\n            return this;\n        };\n        function ttEach($els, fn) {\n            $els.each(function() {\n                var $input = $(this), typeahead;\n                (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);\n            });\n        }\n        function buildHintFromInput($input, www) {\n            return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({\n                readonly: true,\n                required: false\n            }).removeAttr(\"id name placeholder\").removeClass(\"required\").attr({\n                spellcheck: \"false\",\n                tabindex: -1\n            });\n        }\n        function prepInput($input, www) {\n            $input.data(keys.attrs, {\n                dir: $input.attr(\"dir\"),\n                autocomplete: $input.attr(\"autocomplete\"),\n                spellcheck: $input.attr(\"spellcheck\"),\n                style: $input.attr(\"style\")\n            });\n            $input.addClass(www.classes.input).attr({\n                spellcheck: false\n            });\n            try {\n                !$input.attr(\"dir\") && $input.attr(\"dir\", \"auto\");\n            } catch (e) {}\n            return $input;\n        }\n        function getBackgroundStyles($el) {\n            return {\n                backgroundAttachment: $el.css(\"background-attachment\"),\n                backgroundClip: $el.css(\"background-clip\"),\n                backgroundColor: $el.css(\"background-color\"),\n                backgroundImage: $el.css(\"background-image\"),\n                backgroundOrigin: $el.css(\"background-origin\"),\n                backgroundPosition: $el.css(\"background-position\"),\n                backgroundRepeat: $el.css(\"background-repeat\"),\n                backgroundSize: $el.css(\"background-size\")\n            };\n        }\n        function revert($input) {\n            var www, $wrapper;\n            www = $input.data(keys.www);\n            $wrapper = $input.parent().filter(www.selectors.wrapper);\n            _.each($input.data(keys.attrs), function(val, key) {\n                _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);\n            });\n            $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);\n            if ($wrapper.length) {\n                $input.detach().insertAfter($wrapper);\n                $wrapper.remove();\n            }\n        }\n        function $elOrNull(obj) {\n            var isValid, $el;\n            isValid = _.isJQuery(obj) || _.isElement(obj);\n            $el = isValid ? $(obj).first() : [];\n            return $el.length ? $el : null;\n        }\n    })();\n});"
  },
  {
    "path": "docs/lenses.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Lenses  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a title=\"Lenses  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Lenses  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            \n            <h2 id='i-want-to-generate-lenses-for-all-structs' class='heading'>I want to generate Lenses for all structs</h2>\n\n<p><em>Contributed by <a href=\"http://twitter.com/filip_zawada\">@filip_zawada</a></em></p>\n\n<p>What are Lenses? Great explanation by @mbrandonw</p>\n\n<p>This script assumes you follow swift naming convention, e.g. structs start with an upper letter.</p>\n<h3 id='a-href-https-github-com-krzysztofzablocki-sourcery-blob-master-templates-templates-autolenses-stencil-stencil-template-a' class='heading'><a href=\"https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/AutoLenses.stencil\">Stencil template</a></h3>\n<h4 id='example-output' class='heading'>Example output:</h4>\n<pre class=\"highlight swift\"><code><span class=\"kd\">extension</span> <span class=\"kt\">House</span> <span class=\"p\">{</span>\n\n  <span class=\"kd\">static</span> <span class=\"k\">let</span> <span class=\"nv\">roomsLens</span> <span class=\"o\">=</span> <span class=\"kt\">Lens</span><span class=\"o\">&lt;</span><span class=\"kt\">House</span><span class=\"p\">,</span> <span class=\"kt\">Room</span><span class=\"o\">&gt;</span><span class=\"p\">(</span>\n    <span class=\"nv\">get</span><span class=\"p\">:</span> <span class=\"p\">{</span> <span class=\"nv\">$0</span><span class=\"o\">.</span><span class=\"n\">rooms</span> <span class=\"p\">},</span>\n    <span class=\"nv\">set</span><span class=\"p\">:</span> <span class=\"p\">{</span> <span class=\"n\">rooms</span><span class=\"p\">,</span> <span class=\"n\">house</span> <span class=\"k\">in</span>\n       <span class=\"kt\">House</span><span class=\"p\">(</span><span class=\"nv\">rooms</span><span class=\"p\">:</span> <span class=\"n\">rooms</span><span class=\"p\">,</span> <span class=\"nv\">address</span><span class=\"p\">:</span> <span class=\"n\">house</span><span class=\"o\">.</span><span class=\"n\">address</span><span class=\"p\">,</span> <span class=\"nv\">size</span><span class=\"p\">:</span> <span class=\"n\">house</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n  <span class=\"p\">)</span>\n  <span class=\"kd\">static</span> <span class=\"k\">let</span> <span class=\"nv\">addressLens</span> <span class=\"o\">=</span> <span class=\"kt\">Lens</span><span class=\"o\">&lt;</span><span class=\"kt\">House</span><span class=\"p\">,</span> <span class=\"kt\">String</span><span class=\"o\">&gt;</span><span class=\"p\">(</span>\n  <span class=\"nv\">get</span><span class=\"p\">:</span> <span class=\"p\">{</span> <span class=\"nv\">$0</span><span class=\"o\">.</span><span class=\"n\">address</span> <span class=\"p\">},</span>\n  <span class=\"nv\">set</span><span class=\"p\">:</span> <span class=\"p\">{</span> <span class=\"n\">address</span><span class=\"p\">,</span> <span class=\"n\">house</span> <span class=\"k\">in</span>\n     <span class=\"kt\">House</span><span class=\"p\">(</span><span class=\"nv\">rooms</span><span class=\"p\">:</span> <span class=\"n\">house</span><span class=\"o\">.</span><span class=\"n\">rooms</span><span class=\"p\">,</span> <span class=\"nv\">address</span><span class=\"p\">:</span> <span class=\"n\">address</span><span class=\"p\">,</span> <span class=\"nv\">size</span><span class=\"p\">:</span> <span class=\"n\">house</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n  <span class=\"p\">)</span>\n  <span class=\"o\">...</span>\n</code></pre>\n\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/linuxmain.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>LinuxMain  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a title=\"LinuxMain  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        LinuxMain  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            \n            <h2 id='i-want-to-generate-code-linuxmain-swift-code-for-all-my-tests' class='heading'>I want to generate <code>LinuxMain.swift</code> for all my tests</h2>\n\n<p>For all test cases generates <code>allTests</code> static variable and passes all of them as <code>XCTestCaseEntry</code> to <code>XCTMain</code>. Run with <code>--args testimports=&#39;import MyTests&#39;</code> parameter to import test modules.</p>\n<h3 id='a-href-https-github-com-krzysztofzablocki-sourcery-blob-master-templates-templates-linuxmain-stencil-stencil-template-a' class='heading'><a href=\"https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/LinuxMain.stencil\">Stencil template</a></h3>\n<h4 id='available-annotations' class='heading'>Available annotations:</h4>\n\n<ul>\n<li><code>disableTests</code> allows you to disable the whole test case.</li>\n</ul>\n<h4 id='example-output' class='heading'>Example output:</h4>\n<pre class=\"highlight swift\"><code><span class=\"kd\">import</span> <span class=\"kt\">XCTest</span>\n<span class=\"c1\">//testimports</span>\n\n<span class=\"kd\">extension</span> <span class=\"kt\">AutoInjectionTests</span> <span class=\"p\">{</span>\n  <span class=\"kd\">static</span> <span class=\"k\">var</span> <span class=\"nv\">allTests</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">(</span><span class=\"s\">\"testThatItResolvesAutoInjectedDependencies\"</span><span class=\"p\">,</span> <span class=\"n\">testThatItResolvesAutoInjectedDependencies</span><span class=\"p\">),</span>\n    <span class=\"o\">...</span>\n  <span class=\"p\">]</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">extension</span> <span class=\"kt\">AutoWiringTests</span> <span class=\"p\">{</span>\n  <span class=\"kd\">static</span> <span class=\"k\">var</span> <span class=\"nv\">allTests</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">(</span><span class=\"s\">\"testThatItCanResolveWithAutoWiring\"</span><span class=\"p\">,</span> <span class=\"n\">testThatItCanResolveWithAutoWiring</span><span class=\"p\">),</span>\n    <span class=\"o\">...</span>\n  <span class=\"p\">]</span>\n<span class=\"p\">}</span>\n\n<span class=\"o\">...</span>\n\n<span class=\"kt\">XCTMain</span><span class=\"p\">([</span>\n  <span class=\"nf\">testCase</span><span class=\"p\">(</span><span class=\"kt\">AutoInjectionTests</span><span class=\"o\">.</span><span class=\"n\">allTests</span><span class=\"p\">),</span>\n  <span class=\"nf\">testCase</span><span class=\"p\">(</span><span class=\"kt\">AutoWiringTests</span><span class=\"o\">.</span><span class=\"n\">allTests</span><span class=\"p\">),</span>\n  <span class=\"o\">...</span>\n<span class=\"p\">])</span>\n\n</code></pre>\n\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/mocks.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Mocks  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a title=\"Mocks  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Mocks  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            \n            <h2 id='i-want-to-generate-test-mocks-for-protocols' class='heading'>I want to generate test mocks for protocols</h2>\n\n<p><em>Contributed by <a href=\"http://twitter.com/marinbenc\">@marinbenc</a></em></p>\n<h4 id='for-each-protocol-implementing-code-automockable-code-protocol-or-a-href-writing-20templates-md-using-source-annotations-annotated-a-with-code-automockable-code-annotation-it-will' class='heading'>For each protocol implementing <code>AutoMockable</code> protocol or <a href=\"Writing%20templates.md#using-source-annotations\">annotated</a> with <code>AutoMockable</code> annotation it will&hellip;</h4>\n\n<p>Create a class called <code>ProtocolNameMock</code> in which it will&hellip;</p>\n\n<p><strong>For each function:</strong></p>\n\n<ul>\n<li>Implement the function</li>\n<li>Add a <code>functionCalled</code> boolean to check if the function was called</li>\n<li>Add a <code>functionReceivedArguments</code> tuple to check the arguments that were passed to the function</li>\n<li>Add a <code>functionReturnValue</code> variable and return it when the function is called.</li>\n</ul>\n\n<p><strong>For each variable:</strong></p>\n\n<ul>\n<li>Add a gettable and settable variable with the same name and type</li>\n</ul>\n<h4 id='issues-and-limitations' class='heading'>Issues and limitations:</h4>\n\n<ul>\n<li>Overloaded methods will produce compiler errors since the variables above the functions have the same name. Workaround: delete the variables on top of one of the functions, or rename them.</li>\n<li>Handling success/failure cases (for callbacks) is tricky to do automatically, so you have to do that yourself.</li>\n<li>This is <strong>not</strong> a full replacement for hand-written mocks, but it will get you 90% of the way there. Any more complex logic than changing return types, you will have to implement yourself. This only removes the most boring boilerplate you have to write.</li>\n</ul>\n<h3 id='a-href-https-github-com-krzysztofzablocki-sourcery-blob-master-templates-templates-automockable-stencil-stencil-template-a' class='heading'><a href=\"https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/AutoMockable.stencil\">Stencil template</a></h3>\n<h4 id='example-output' class='heading'>Example output:</h4>\n<pre class=\"highlight swift\"><code><span class=\"kd\">class</span> <span class=\"kt\">MockableServiceMock</span><span class=\"p\">:</span> <span class=\"kt\">MockableService</span> <span class=\"p\">{</span>\n    <span class=\"c1\">//MARK: - functionWithArguments</span>\n    <span class=\"k\">var</span> <span class=\"nv\">functionWithArgumentsCalled</span> <span class=\"o\">=</span> <span class=\"kc\">false</span>\n    <span class=\"k\">var</span> <span class=\"nv\">functionWithArgumentsReceivedArguments</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"nv\">firstArgument</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">,</span> <span class=\"nv\">onComplete</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"kt\">String</span><span class=\"p\">)</span><span class=\"o\">-&gt;</span> <span class=\"kt\">Void</span><span class=\"p\">)?</span>\n\n    <span class=\"c1\">//MARK: - functionWithCallback</span>\n    <span class=\"k\">var</span> <span class=\"nv\">functionWithCallbackCalled</span> <span class=\"o\">=</span> <span class=\"kc\">false</span>\n    <span class=\"k\">var</span> <span class=\"nv\">functionWithCallbackReceivedArguments</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"nv\">firstArgument</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">,</span> <span class=\"nv\">onComplete</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"kt\">String</span><span class=\"p\">)</span><span class=\"o\">-&gt;</span> <span class=\"kt\">Void</span><span class=\"p\">)?</span>\n\n    <span class=\"kd\">func</span> <span class=\"nf\">functionWithCallback</span><span class=\"p\">(</span><span class=\"n\">_</span> <span class=\"nv\">firstArgument</span><span class=\"p\">:</span> <span class=\"kt\">String</span><span class=\"p\">,</span> <span class=\"nv\">onComplete</span><span class=\"p\">:</span> <span class=\"kd\">@escaping</span> <span class=\"p\">(</span><span class=\"kt\">String</span><span class=\"p\">)</span><span class=\"o\">-&gt;</span> <span class=\"kt\">Void</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n        <span class=\"n\">functionWithCallbackCalled</span> <span class=\"o\">=</span> <span class=\"kc\">true</span>\n        <span class=\"n\">functionWithCallbackReceivedArguments</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"nv\">firstArgument</span><span class=\"p\">:</span> <span class=\"n\">firstArgument</span><span class=\"p\">,</span> <span class=\"nv\">onComplete</span><span class=\"p\">:</span> <span class=\"n\">onComplete</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n  <span class=\"o\">...</span>\n</code></pre>\n\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/search.json",
    "content": "{\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\":{\"name\":\"Annotations\"},\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\":{\"name\":\"Documentation\"},\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\":{\"name\":\"SourceryModifier\"},\"Protocols/Typed.html#/s:15SourceryRuntime5TypedP4typeAA4TypeCSgvp\":{\"name\":\"type\",\"abstract\":\"\\u003cp\\u003eType, if known\\u003c/p\\u003e\",\"parent_name\":\"Typed\"},\"Protocols/Typed.html#/s:15SourceryRuntime5TypedP8typeNameAA04TypeE0Cvp\":{\"name\":\"typeName\",\"abstract\":\"\\u003cp\\u003eType name\\u003c/p\\u003e\",\"parent_name\":\"Typed\"},\"Protocols/Typed.html#/s:15SourceryRuntime5TypedP10isOptionalSbvp\":{\"name\":\"isOptional\",\"abstract\":\"\\u003cp\\u003eWhether type is optional\\u003c/p\\u003e\",\"parent_name\":\"Typed\"},\"Protocols/Typed.html#/s:15SourceryRuntime5TypedP29isImplicitlyUnwrappedOptionalSbvp\":{\"name\":\"isImplicitlyUnwrappedOptional\",\"abstract\":\"\\u003cp\\u003eWhether type is implicitly unwrapped optional\\u003c/p\\u003e\",\"parent_name\":\"Typed\"},\"Protocols/Typed.html#/s:15SourceryRuntime5TypedP17unwrappedTypeNameSSvp\":{\"name\":\"unwrappedTypeName\",\"abstract\":\"\\u003cp\\u003eType name without attributes and optional type information\\u003c/p\\u003e\",\"parent_name\":\"Typed\"},\"Protocols/Documented.html#/s:15SourceryRuntime10DocumentedP13documentationSaySSGvp\":{\"name\":\"documentation\",\"parent_name\":\"Documented\"},\"Protocols/Definition.html#/s:15SourceryRuntime10DefinitionP17definedInTypeNameAA0fG0CSgvp\":{\"name\":\"definedInTypeName\",\"abstract\":\"\\u003cp\\u003eReference to type name where the object is defined,\",\"parent_name\":\"Definition\"},\"Protocols/Definition.html#/s:15SourceryRuntime10DefinitionP13definedInTypeAA0F0CSgvp\":{\"name\":\"definedInType\",\"abstract\":\"\\u003cp\\u003eReference to actual type where the object is defined,\",\"parent_name\":\"Definition\"},\"Protocols/Definition.html#/s:15SourceryRuntime10DefinitionP23actualDefinedInTypeNameAA0gH0CSgvp\":{\"name\":\"actualDefinedInTypeName\",\"abstract\":\"\\u003cp\\u003eReference to actual type name where the method is defined if declaration uses typealias, otherwise just a \\u003ccode\\u003e\\u003ca href=\\\"36f8f5912051ae747ef441d6511ca4cbProtocols/Definition.html#/s:15SourceryRuntime10DefinitionP17definedInTypeNameAA0fG0CSgvp\\\"\\u003edefinedInTypeName\\u003c/a\\u003e\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Definition\"},\"Protocols/Annotated.html#/s:15SourceryRuntime9AnnotatedP11annotationsSDySSSo8NSObjectCGvp\":{\"name\":\"annotations\",\"abstract\":\"\\u003cp\\u003eAll annotations of declaration stored by their name. Value can be \\u003ccode\\u003ebool\\u003c/code\\u003e, \\u003ccode\\u003eString\\u003c/code\\u003e, float \\u003ccode\\u003eNSNumber\\u003c/code\\u003e\",\"parent_name\":\"Annotated\"},\"Protocols/Annotated.html\":{\"name\":\"Annotated\",\"abstract\":\"\\u003cp\\u003eDescribes annotated declaration, i.e. type, method, variable, enum case\\u003c/p\\u003e\"},\"Protocols/Definition.html\":{\"name\":\"Definition\",\"abstract\":\"\\u003cp\\u003eDescribes that the object is defined in a context of some \\u003ccode\\u003e\\u003ca href=\\\"36f8f5912051ae747ef441d6511ca4cbClasses/Type.html\\\"\\u003eType\\u003c/a\\u003e\\u003c/code\\u003e\\u003c/p\\u003e\"},\"Protocols/Documented.html\":{\"name\":\"Documented\",\"abstract\":\"\\u003cp\\u003eDescribes a declaration with documentation, i.e. type, method, variable, enum case\\u003c/p\\u003e\"},\"Protocols/Typed.html\":{\"name\":\"Typed\",\"abstract\":\"\\u003cp\\u003eDescibes typed declaration, i.e. variable, method parameter, tuple element, enum case associated value\\u003c/p\\u003e\"},\"Extensions/Typealias.html#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isOptional\":{\"name\":\"isOptional\",\"abstract\":\"\\u003cp\\u003eWhether type is optional. Shorthand for \\u003ccode\\u003etypeName.isOptional\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Typealias\"},\"Extensions/Typealias.html#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isImplicitlyUnwrappedOptional\":{\"name\":\"isImplicitlyUnwrappedOptional\",\"abstract\":\"\\u003cp\\u003eWhether type is implicitly unwrapped optional. Shorthand for \\u003ccode\\u003etypeName.isImplicitlyUnwrappedOptional\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Typealias\"},\"Extensions/Typealias.html#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)unwrappedTypeName\":{\"name\":\"unwrappedTypeName\",\"abstract\":\"\\u003cp\\u003eType name without attributes and optional type information. Shorthand for \\u003ccode\\u003etypeName.unwrappedTypeName\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Typealias\"},\"Extensions/Typealias.html#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)actualTypeName\":{\"name\":\"actualTypeName\",\"abstract\":\"\\u003cp\\u003eActual type name if declaration uses typealias, otherwise just a \\u003ccode\\u003etypeName\\u003c/code\\u003e. Shorthand for \\u003ccode\\u003etypeName.actualTypeName\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Typealias\"},\"Extensions/Typealias.html#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isTuple\":{\"name\":\"isTuple\",\"abstract\":\"\\u003cp\\u003eWhether type is a tuple. Shorthand for \\u003ccode\\u003etypeName.isTuple\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Typealias\"},\"Extensions/Typealias.html#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isClosure\":{\"name\":\"isClosure\",\"abstract\":\"\\u003cp\\u003eWhether type is a closure. Shorthand for \\u003ccode\\u003etypeName.isClosure\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Typealias\"},\"Extensions/Typealias.html#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isArray\":{\"name\":\"isArray\",\"abstract\":\"\\u003cp\\u003eWhether type is an array. Shorthand for \\u003ccode\\u003etypeName.isArray\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Typealias\"},\"Extensions/Typealias.html#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isSet\":{\"name\":\"isSet\",\"abstract\":\"\\u003cp\\u003eWhether type is a set. Shorthand for \\u003ccode\\u003etypeName.isSet\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Typealias\"},\"Extensions/Typealias.html#/c:@CM@SourceryRuntime@objc(cs)Typealias(py)isDictionary\":{\"name\":\"isDictionary\",\"abstract\":\"\\u003cp\\u003eWhether type is a dictionary. Shorthand for \\u003ccode\\u003etypeName.isDictionary\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Typealias\"},\"Extensions/String.html#/s:SS15SourceryRuntimeE10nilIfEmptySSSgvp\":{\"name\":\"nilIfEmpty\",\"abstract\":\"\\u003cp\\u003eReturns nil if string is empty\\u003c/p\\u003e\",\"parent_name\":\"String\"},\"Extensions/String.html#/s:SS15SourceryRuntimeE26nilIfNotValidParameterNameSSSgvp\":{\"name\":\"nilIfNotValidParameterName\",\"abstract\":\"\\u003cp\\u003eReturns nil if string is empty or contains \\u003ccode\\u003e_\\u003c/code\\u003e character\\u003c/p\\u003e\",\"parent_name\":\"String\"},\"Extensions/StringProtocol.html#/s:Sy15SourceryRuntimeE7trimmedSSvp\":{\"name\":\"trimmed\",\"abstract\":\"\\u003cp\\u003eTrimms leading and trailing whitespaces and newlines\\u003c/p\\u003e\",\"parent_name\":\"StringProtocol\"},\"Extensions/Array.html#/s:Sa15SourceryRuntimeE15parallelFlatMap9transformSayqd__GADxXE_tlF\":{\"name\":\"parallelFlatMap(transform:)\",\"parent_name\":\"Array\"},\"Extensions/Array.html#/s:Sa15SourceryRuntimeE18parallelCompactMap9transformSayqd__Gqd__SgxXE_tlF\":{\"name\":\"parallelCompactMap(transform:)\",\"parent_name\":\"Array\"},\"Extensions/Array.html#/s:Sa15SourceryRuntimeE11parallelMap9transformSayqd__Gqd__xXE_tlF\":{\"name\":\"parallelMap(transform:)\",\"parent_name\":\"Array\"},\"Extensions/Array.html#/s:Sa15SourceryRuntimeE15parallelPerformyyyxXEF\":{\"name\":\"parallelPerform(_:)\",\"parent_name\":\"Array\"},\"Extensions/Array.html#/s:Sa15SourceryRuntimeAA16ClosureParameterCRszlE8asSourceSSvp\":{\"name\":\"asSource\",\"parent_name\":\"Array\"},\"Extensions/Array.html#/s:Sa15SourceryRuntimeAA15MethodParameterCRszlE8asSourceSSvp\":{\"name\":\"asSource\",\"parent_name\":\"Array\"},\"Extensions/Array.html#/s:Sa15SourceryRuntimeAA12TupleElementCRszlE8asSourceSSvp\":{\"name\":\"asSource\",\"parent_name\":\"Array\"},\"Extensions/Array.html#/s:Sa15SourceryRuntimeAA12TupleElementCRszlE10asTypeNameSSvp\":{\"name\":\"asTypeName\",\"parent_name\":\"Array\"},\"Extensions/Array.html\":{\"name\":\"Array\"},\"Extensions/StringProtocol.html\":{\"name\":\"StringProtocol\"},\"Extensions/String.html\":{\"name\":\"String\"},\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\":{\"name\":\"BytesRange\"},\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\":{\"name\":\"FileParserResult\"},\"Extensions/Typealias.html\":{\"name\":\"Typealias\"},\"Enums/Composer.html#/s:15SourceryRuntime8ComposerO23uniqueTypesAndFunctions_6serialSayAA4TypeCG5types_SayAA6MethodCG9functionsSayAA9TypealiasCG11typealiasestAA16FileParserResultC_SbtFZ\":{\"name\":\"uniqueTypesAndFunctions(_:serial:)\",\"abstract\":\"\\u003cp\\u003ePerforms final processing of discovered types:\\u003c/p\\u003e\",\"parent_name\":\"Composer\"},\"Enums/Composer.html\":{\"name\":\"Composer\",\"abstract\":\"\\u003cp\\u003eResponsible for composing results of \\u003ccode\\u003eFileParser\\u003c/code\\u003e.\\u003c/p\\u003e\"},\"Classes/GenericRequirement/Relationship.html#/s:15SourceryRuntime18GenericRequirementC12RelationshipO6equalsyA2EmF\":{\"name\":\"equals\",\"parent_name\":\"Relationship\"},\"Classes/GenericRequirement/Relationship.html#/s:15SourceryRuntime18GenericRequirementC12RelationshipO10conformsToyA2EmF\":{\"name\":\"conformsTo\",\"parent_name\":\"Relationship\"},\"Classes/GenericRequirement/Relationship.html\":{\"name\":\"Relationship\",\"parent_name\":\"GenericRequirement\"},\"Classes/GenericRequirement.html#/c:@M@SourceryRuntime@objc(cs)GenericRequirement(py)leftType\":{\"name\":\"leftType\",\"parent_name\":\"GenericRequirement\"},\"Classes/GenericRequirement.html#/c:@M@SourceryRuntime@objc(cs)GenericRequirement(py)rightType\":{\"name\":\"rightType\",\"parent_name\":\"GenericRequirement\"},\"Classes/GenericRequirement.html#/c:@M@SourceryRuntime@objc(cs)GenericRequirement(py)relationship\":{\"name\":\"relationship\",\"abstract\":\"\\u003cp\\u003erelationship name\\u003c/p\\u003e\",\"parent_name\":\"GenericRequirement\"},\"Classes/GenericRequirement.html#/c:@M@SourceryRuntime@objc(cs)GenericRequirement(py)relationshipSyntax\":{\"name\":\"relationshipSyntax\",\"abstract\":\"\\u003cp\\u003eSyntax e.g. \\u003ccode\\u003e==\\u003c/code\\u003e or \\u003ccode\\u003e:\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"GenericRequirement\"},\"Classes/GenericRequirement.html#/s:15SourceryRuntime18GenericRequirementC8leftType05rightF012relationshipAcA010AssociatedF0C_AA0cF9ParameterCAC12RelationshipOtcfc\":{\"name\":\"init(leftType:rightType:relationship:)\",\"parent_name\":\"GenericRequirement\"},\"Classes/GenericRequirement.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"GenericRequirement\"},\"Classes/GenericParameter.html#/c:@M@SourceryRuntime@objc(cs)GenericParameter(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eGeneric parameter name\\u003c/p\\u003e\",\"parent_name\":\"GenericParameter\"},\"Classes/GenericParameter.html#/c:@M@SourceryRuntime@objc(cs)GenericParameter(py)inheritedTypeName\":{\"name\":\"inheritedTypeName\",\"abstract\":\"\\u003cp\\u003eGeneric parameter inherited type\\u003c/p\\u003e\",\"parent_name\":\"GenericParameter\"},\"Classes/GenericParameter.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"GenericParameter\"},\"Classes/ClosureParameter.html#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)argumentLabel\":{\"name\":\"argumentLabel\",\"abstract\":\"\\u003cp\\u003eParameter external name\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eParameter internal name\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)typeName\":{\"name\":\"typeName\",\"abstract\":\"\\u003cp\\u003eParameter type name\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)inout\":{\"name\":\"inout\",\"abstract\":\"\\u003cp\\u003eParameter flag whether it\\u0026rsquo;s inout or not\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)type\":{\"name\":\"type\",\"abstract\":\"\\u003cp\\u003eParameter type, if known\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)isVariadic\":{\"name\":\"isVariadic\",\"abstract\":\"\\u003cp\\u003eParameter if the argument has a variadic type or not\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)typeAttributes\":{\"name\":\"typeAttributes\",\"abstract\":\"\\u003cp\\u003eParameter type attributes, i.e. \\u003ccode\\u003e@escaping\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)defaultValue\":{\"name\":\"defaultValue\",\"abstract\":\"\\u003cp\\u003eMethod parameter default value expression\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)annotations\":{\"name\":\"annotations\",\"abstract\":\"\\u003cp\\u003eAnnotations, that were created with // sourcery: annotation1, other = \\u0026ldquo;annotation value\\u0026rdquo;, alterantive = 2\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)asSource\":{\"name\":\"asSource\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isOptional\":{\"name\":\"isOptional\",\"abstract\":\"\\u003cp\\u003eWhether type is optional. Shorthand for \\u003ccode\\u003etypeName.isOptional\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isImplicitlyUnwrappedOptional\":{\"name\":\"isImplicitlyUnwrappedOptional\",\"abstract\":\"\\u003cp\\u003eWhether type is implicitly unwrapped optional. Shorthand for \\u003ccode\\u003etypeName.isImplicitlyUnwrappedOptional\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)unwrappedTypeName\":{\"name\":\"unwrappedTypeName\",\"abstract\":\"\\u003cp\\u003eType name without attributes and optional type information. Shorthand for \\u003ccode\\u003etypeName.unwrappedTypeName\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)actualTypeName\":{\"name\":\"actualTypeName\",\"abstract\":\"\\u003cp\\u003eActual type name if declaration uses typealias, otherwise just a \\u003ccode\\u003e\\u003ca href=\\\"36f8f5912051ae747ef441d6511ca4cbClasses/ClosureParameter.html#/c:@M@SourceryRuntime@objc(cs)ClosureParameter(py)typeName\\\"\\u003etypeName\\u003c/a\\u003e\\u003c/code\\u003e. Shorthand for \\u003ccode\\u003etypeName.actualTypeName\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isTuple\":{\"name\":\"isTuple\",\"abstract\":\"\\u003cp\\u003eWhether type is a tuple. Shorthand for \\u003ccode\\u003etypeName.isTuple\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isClosure\":{\"name\":\"isClosure\",\"abstract\":\"\\u003cp\\u003eWhether type is a closure. Shorthand for \\u003ccode\\u003etypeName.isClosure\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isArray\":{\"name\":\"isArray\",\"abstract\":\"\\u003cp\\u003eWhether type is an array. Shorthand for \\u003ccode\\u003etypeName.isArray\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isSet\":{\"name\":\"isSet\",\"abstract\":\"\\u003cp\\u003eWhether type is a set. Shorthand for \\u003ccode\\u003etypeName.isSet\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/ClosureParameter.html#/c:@CM@SourceryRuntime@objc(cs)ClosureParameter(py)isDictionary\":{\"name\":\"isDictionary\",\"abstract\":\"\\u003cp\\u003eWhether type is a dictionary. Shorthand for \\u003ccode\\u003etypeName.isDictionary\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"ClosureParameter\"},\"Classes/DiffableResult.html#/c:@M@SourceryRuntime@objc(cs)DiffableResult(py)description\":{\"name\":\"description\",\"parent_name\":\"DiffableResult\"},\"Classes/SetType.html#/c:@M@SourceryRuntime@objc(cs)SetType(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eType name used in declaration\\u003c/p\\u003e\",\"parent_name\":\"SetType\"},\"Classes/SetType.html#/c:@M@SourceryRuntime@objc(cs)SetType(py)elementTypeName\":{\"name\":\"elementTypeName\",\"abstract\":\"\\u003cp\\u003eArray element type name\\u003c/p\\u003e\",\"parent_name\":\"SetType\"},\"Classes/SetType.html#/c:@M@SourceryRuntime@objc(cs)SetType(py)elementType\":{\"name\":\"elementType\",\"abstract\":\"\\u003cp\\u003eArray element type, if known\\u003c/p\\u003e\",\"parent_name\":\"SetType\"},\"Classes/SetType.html#/c:@M@SourceryRuntime@objc(cs)SetType(py)asGeneric\":{\"name\":\"asGeneric\",\"abstract\":\"\\u003cp\\u003eReturns array as generic type\\u003c/p\\u003e\",\"parent_name\":\"SetType\"},\"Classes/SetType.html#/c:@M@SourceryRuntime@objc(cs)SetType(py)asSource\":{\"name\":\"asSource\",\"parent_name\":\"SetType\"},\"Classes/SetType.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"SetType\"},\"Classes/Modifier.html#/c:@M@SourceryRuntime@objc(cs)Modifier(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eThe declaration modifier name.\\u003c/p\\u003e\",\"parent_name\":\"Modifier\"},\"Classes/Modifier.html#/c:@M@SourceryRuntime@objc(cs)Modifier(py)detail\":{\"name\":\"detail\",\"abstract\":\"\\u003cp\\u003eThe modifier detail, if any.\\u003c/p\\u003e\",\"parent_name\":\"Modifier\"},\"Classes/Modifier.html#/c:@M@SourceryRuntime@objc(cs)Modifier(im)initWithName:detail:\":{\"name\":\"init(name:detail:)\",\"parent_name\":\"Modifier\"},\"Classes/Modifier.html#/c:@M@SourceryRuntime@objc(cs)Modifier(py)asSource\":{\"name\":\"asSource\",\"parent_name\":\"Modifier\"},\"Classes/Modifier.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"Modifier\"},\"Classes/Import.html#/c:@M@SourceryRuntime@objc(cs)Import(py)kind\":{\"name\":\"kind\",\"abstract\":\"\\u003cp\\u003eImport kind, e.g. class, struct in \\u003ccode\\u003eimport class Module.ClassName\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Import\"},\"Classes/Import.html#/c:@M@SourceryRuntime@objc(cs)Import(py)path\":{\"name\":\"path\",\"abstract\":\"\\u003cp\\u003eImport path\\u003c/p\\u003e\",\"parent_name\":\"Import\"},\"Classes/Import.html#/c:@M@SourceryRuntime@objc(cs)Import(py)description\":{\"name\":\"description\",\"abstract\":\"\\u003cp\\u003eFull import value e.g. \\u003ccode\\u003eimport struct Module.StructName\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Import\"},\"Classes/Import.html#/c:@M@SourceryRuntime@objc(cs)Import(py)moduleName\":{\"name\":\"moduleName\",\"abstract\":\"\\u003cp\\u003eReturns module name from a import, e.g. if you had \\u003ccode\\u003eimport struct Module.Submodule.Struct\\u003c/code\\u003e it will return \\u003ccode\\u003eModule.Submodule\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Import\"},\"Classes/Import.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"Import\"},\"Classes/Actor.html#/c:@M@SourceryRuntime@objc(cs)SwiftActor(cpy)kind\":{\"name\":\"kind\",\"parent_name\":\"Actor\"},\"Classes/Actor.html#/c:@M@SourceryRuntime@objc(cs)SwiftActor(py)kind\":{\"name\":\"kind\",\"abstract\":\"\\u003cp\\u003eReturns \\u0026ldquo;actor\\u0026rdquo;\\u003c/p\\u003e\",\"parent_name\":\"Actor\"},\"Classes/Actor.html#/c:@M@SourceryRuntime@objc(cs)SwiftActor(py)isFinal\":{\"name\":\"isFinal\",\"abstract\":\"\\u003cp\\u003eWhether type is final\\u003c/p\\u003e\",\"parent_name\":\"Actor\"},\"Classes/Actor.html#/c:@M@SourceryRuntime@objc(cs)SwiftActor(py)isDistributed\":{\"name\":\"isDistributed\",\"abstract\":\"\\u003cp\\u003eWhether method is distributed method\\u003c/p\\u003e\",\"parent_name\":\"Actor\"},\"Classes/Actor.html#/c:@M@SourceryRuntime@objc(cs)SwiftActor(im)diffAgainst:\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"Actor\"},\"Classes/Actor.html\":{\"name\":\"Actor\",\"abstract\":\"\\u003cp\\u003eDescibes Swift actor\\u003c/p\\u003e\"},\"Classes/Import.html\":{\"name\":\"Import\",\"abstract\":\"\\u003cp\\u003eDefines import type\\u003c/p\\u003e\"},\"Classes/Modifier.html\":{\"name\":\"Modifier\",\"abstract\":\"\\u003cp\\u003emodifier can be thing like \\u003ccode\\u003eprivate\\u003c/code\\u003e, \\u003ccode\\u003eclass\\u003c/code\\u003e, \\u003ccode\\u003enonmutating\\u003c/code\\u003e\"},\"Classes/SetType.html\":{\"name\":\"SetType\",\"abstract\":\"\\u003cp\\u003eDescribes set type\\u003c/p\\u003e\"},\"Classes/DiffableResult.html\":{\"name\":\"DiffableResult\"},\"Classes/ClosureParameter.html\":{\"name\":\"ClosureParameter\"},\"Classes/GenericParameter.html\":{\"name\":\"GenericParameter\",\"abstract\":\"\\u003cp\\u003eDescibes Swift generic parameter\\u003c/p\\u003e\"},\"Classes/GenericRequirement.html\":{\"name\":\"GenericRequirement\",\"abstract\":\"\\u003cp\\u003eDescibes Swift generic requirement\\u003c/p\\u003e\"},\"Classes/ProtocolComposition.html#/c:@M@SourceryRuntime@objc(cs)ProtocolComposition(cpy)kind\":{\"name\":\"kind\",\"parent_name\":\"ProtocolComposition\"},\"Classes/ProtocolComposition.html#/c:@M@SourceryRuntime@objc(cs)ProtocolComposition(py)kind\":{\"name\":\"kind\",\"abstract\":\"\\u003cp\\u003eReturns \\u0026ldquo;protocolComposition\\u0026rdquo;\\u003c/p\\u003e\",\"parent_name\":\"ProtocolComposition\"},\"Classes/ProtocolComposition.html#/c:@M@SourceryRuntime@objc(cs)ProtocolComposition(py)composedTypeNames\":{\"name\":\"composedTypeNames\",\"abstract\":\"\\u003cp\\u003eThe names of the types composed to form this composition\\u003c/p\\u003e\",\"parent_name\":\"ProtocolComposition\"},\"Classes/ProtocolComposition.html#/c:@M@SourceryRuntime@objc(cs)ProtocolComposition(py)composedTypes\":{\"name\":\"composedTypes\",\"abstract\":\"\\u003cp\\u003eThe types composed to form this composition, if known\\u003c/p\\u003e\",\"parent_name\":\"ProtocolComposition\"},\"Classes/ProtocolComposition.html#/c:@M@SourceryRuntime@objc(cs)ProtocolComposition(im)diffAgainst:\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"ProtocolComposition\"},\"Classes/Attribute.html#/c:@M@SourceryRuntime@objc(cs)Attribute(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eAttribute name\\u003c/p\\u003e\",\"parent_name\":\"Attribute\"},\"Classes/Attribute.html#/c:@M@SourceryRuntime@objc(cs)Attribute(py)arguments\":{\"name\":\"arguments\",\"abstract\":\"\\u003cp\\u003eAttribute arguments\\u003c/p\\u003e\",\"parent_name\":\"Attribute\"},\"Classes/Attribute.html#/c:@M@SourceryRuntime@objc(cs)Attribute(py)asSource\":{\"name\":\"asSource\",\"abstract\":\"\\u003cp\\u003eTODO: unify \\u003ccode\\u003easSource\\u003c/code\\u003e / \\u003ccode\\u003e\\u003ca href=\\\"36f8f5912051ae747ef441d6511ca4cbClasses/Attribute.html#/c:@M@SourceryRuntime@objc(cs)Attribute(py)description\\\"\\u003edescription\\u003c/a\\u003e\\u003c/code\\u003e?\\u003c/p\\u003e\",\"parent_name\":\"Attribute\"},\"Classes/Attribute.html#/c:@M@SourceryRuntime@objc(cs)Attribute(py)description\":{\"name\":\"description\",\"abstract\":\"\\u003cp\\u003eAttribute description that can be used in a template.\\u003c/p\\u003e\",\"parent_name\":\"Attribute\"},\"Classes/Attribute.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"Attribute\"},\"Classes/GenericTypeParameter.html#/c:@M@SourceryRuntime@objc(cs)GenericTypeParameter(py)typeName\":{\"name\":\"typeName\",\"abstract\":\"\\u003cp\\u003eGeneric parameter type name\\u003c/p\\u003e\",\"parent_name\":\"GenericTypeParameter\"},\"Classes/GenericTypeParameter.html#/c:@M@SourceryRuntime@objc(cs)GenericTypeParameter(py)type\":{\"name\":\"type\",\"abstract\":\"\\u003cp\\u003eGeneric parameter type, if known\\u003c/p\\u003e\",\"parent_name\":\"GenericTypeParameter\"},\"Classes/GenericTypeParameter.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"GenericTypeParameter\"},\"Classes/GenericType.html#/c:@M@SourceryRuntime@objc(cs)GenericType(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eThe name of the base type, i.e. \\u003ccode\\u003eArray\\u003c/code\\u003e for \\u003ccode\\u003eArray\\u0026lt;Int\\u0026gt;\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"GenericType\"},\"Classes/GenericType.html#/c:@M@SourceryRuntime@objc(cs)GenericType(py)typeParameters\":{\"name\":\"typeParameters\",\"abstract\":\"\\u003cp\\u003eThis generic type parameters\\u003c/p\\u003e\",\"parent_name\":\"GenericType\"},\"Classes/GenericType.html#/c:@M@SourceryRuntime@objc(cs)GenericType(py)asSource\":{\"name\":\"asSource\",\"parent_name\":\"GenericType\"},\"Classes/GenericType.html#/c:@M@SourceryRuntime@objc(cs)GenericType(py)description\":{\"name\":\"description\",\"parent_name\":\"GenericType\"},\"Classes/GenericType.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"GenericType\"},\"Classes/ClosureType.html#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eType name used in declaration with stripped whitespaces and new lines\\u003c/p\\u003e\",\"parent_name\":\"ClosureType\"},\"Classes/ClosureType.html#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)parameters\":{\"name\":\"parameters\",\"abstract\":\"\\u003cp\\u003eList of closure parameters\\u003c/p\\u003e\",\"parent_name\":\"ClosureType\"},\"Classes/ClosureType.html#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)returnTypeName\":{\"name\":\"returnTypeName\",\"abstract\":\"\\u003cp\\u003eReturn value type name\\u003c/p\\u003e\",\"parent_name\":\"ClosureType\"},\"Classes/ClosureType.html#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)actualReturnTypeName\":{\"name\":\"actualReturnTypeName\",\"abstract\":\"\\u003cp\\u003eActual return value type name if declaration uses typealias, otherwise just a \\u003ccode\\u003e\\u003ca href=\\\"36f8f5912051ae747ef441d6511ca4cbClasses/ClosureType.html#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)returnTypeName\\\"\\u003ereturnTypeName\\u003c/a\\u003e\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"ClosureType\"},\"Classes/ClosureType.html#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)returnType\":{\"name\":\"returnType\",\"abstract\":\"\\u003cp\\u003eActual return value type, if known\\u003c/p\\u003e\",\"parent_name\":\"ClosureType\"},\"Classes/ClosureType.html#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)isOptionalReturnType\":{\"name\":\"isOptionalReturnType\",\"abstract\":\"\\u003cp\\u003eWhether return value type is optional\\u003c/p\\u003e\",\"parent_name\":\"ClosureType\"},\"Classes/ClosureType.html#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)isImplicitlyUnwrappedOptionalReturnType\":{\"name\":\"isImplicitlyUnwrappedOptionalReturnType\",\"abstract\":\"\\u003cp\\u003eWhether return value type is implicitly unwrapped optional\\u003c/p\\u003e\",\"parent_name\":\"ClosureType\"},\"Classes/ClosureType.html#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)unwrappedReturnTypeName\":{\"name\":\"unwrappedReturnTypeName\",\"abstract\":\"\\u003cp\\u003eReturn value type name without attributes and optional type information\\u003c/p\\u003e\",\"parent_name\":\"ClosureType\"},\"Classes/ClosureType.html#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)isAsync\":{\"name\":\"isAsync\",\"abstract\":\"\\u003cp\\u003eWhether method is async method\\u003c/p\\u003e\",\"parent_name\":\"ClosureType\"},\"Classes/ClosureType.html#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)asyncKeyword\":{\"name\":\"asyncKeyword\",\"abstract\":\"\\u003cp\\u003easync keyword\\u003c/p\\u003e\",\"parent_name\":\"ClosureType\"},\"Classes/ClosureType.html#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)throws\":{\"name\":\"throws\",\"abstract\":\"\\u003cp\\u003eWhether closure throws\\u003c/p\\u003e\",\"parent_name\":\"ClosureType\"},\"Classes/ClosureType.html#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)throwsOrRethrowsKeyword\":{\"name\":\"throwsOrRethrowsKeyword\",\"abstract\":\"\\u003cp\\u003ethrows or rethrows keyword\\u003c/p\\u003e\",\"parent_name\":\"ClosureType\"},\"Classes/ClosureType.html#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)throwsTypeName\":{\"name\":\"throwsTypeName\",\"abstract\":\"\\u003cp\\u003eType of thrown error if specified\\u003c/p\\u003e\",\"parent_name\":\"ClosureType\"},\"Classes/ClosureType.html#/c:@M@SourceryRuntime@objc(cs)ClosureType(py)asSource\":{\"name\":\"asSource\",\"parent_name\":\"ClosureType\"},\"Classes/ClosureType.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"ClosureType\"},\"Classes/DictionaryType.html#/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eType name used in declaration\\u003c/p\\u003e\",\"parent_name\":\"DictionaryType\"},\"Classes/DictionaryType.html#/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)valueTypeName\":{\"name\":\"valueTypeName\",\"abstract\":\"\\u003cp\\u003eDictionary value type name\\u003c/p\\u003e\",\"parent_name\":\"DictionaryType\"},\"Classes/DictionaryType.html#/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)valueType\":{\"name\":\"valueType\",\"abstract\":\"\\u003cp\\u003eDictionary value type, if known\\u003c/p\\u003e\",\"parent_name\":\"DictionaryType\"},\"Classes/DictionaryType.html#/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)keyTypeName\":{\"name\":\"keyTypeName\",\"abstract\":\"\\u003cp\\u003eDictionary key type name\\u003c/p\\u003e\",\"parent_name\":\"DictionaryType\"},\"Classes/DictionaryType.html#/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)keyType\":{\"name\":\"keyType\",\"abstract\":\"\\u003cp\\u003eDictionary key type, if known\\u003c/p\\u003e\",\"parent_name\":\"DictionaryType\"},\"Classes/DictionaryType.html#/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)asGeneric\":{\"name\":\"asGeneric\",\"abstract\":\"\\u003cp\\u003eReturns dictionary as generic type\\u003c/p\\u003e\",\"parent_name\":\"DictionaryType\"},\"Classes/DictionaryType.html#/c:@M@SourceryRuntime@objc(cs)DictionaryType(py)asSource\":{\"name\":\"asSource\",\"parent_name\":\"DictionaryType\"},\"Classes/DictionaryType.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"DictionaryType\"},\"Classes/ArrayType.html#/c:@M@SourceryRuntime@objc(cs)ArrayType(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eType name used in declaration\\u003c/p\\u003e\",\"parent_name\":\"ArrayType\"},\"Classes/ArrayType.html#/c:@M@SourceryRuntime@objc(cs)ArrayType(py)elementTypeName\":{\"name\":\"elementTypeName\",\"abstract\":\"\\u003cp\\u003eArray element type name\\u003c/p\\u003e\",\"parent_name\":\"ArrayType\"},\"Classes/ArrayType.html#/c:@M@SourceryRuntime@objc(cs)ArrayType(py)elementType\":{\"name\":\"elementType\",\"abstract\":\"\\u003cp\\u003eArray element type, if known\\u003c/p\\u003e\",\"parent_name\":\"ArrayType\"},\"Classes/ArrayType.html#/c:@M@SourceryRuntime@objc(cs)ArrayType(py)asGeneric\":{\"name\":\"asGeneric\",\"abstract\":\"\\u003cp\\u003eReturns array as generic type\\u003c/p\\u003e\",\"parent_name\":\"ArrayType\"},\"Classes/ArrayType.html#/c:@M@SourceryRuntime@objc(cs)ArrayType(py)asSource\":{\"name\":\"asSource\",\"parent_name\":\"ArrayType\"},\"Classes/ArrayType.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"ArrayType\"},\"Classes/TupleElement.html#/c:@M@SourceryRuntime@objc(cs)TupleElement(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eTuple element name\\u003c/p\\u003e\",\"parent_name\":\"TupleElement\"},\"Classes/TupleElement.html#/c:@M@SourceryRuntime@objc(cs)TupleElement(py)typeName\":{\"name\":\"typeName\",\"abstract\":\"\\u003cp\\u003eTuple element type name\\u003c/p\\u003e\",\"parent_name\":\"TupleElement\"},\"Classes/TupleElement.html#/c:@M@SourceryRuntime@objc(cs)TupleElement(py)type\":{\"name\":\"type\",\"abstract\":\"\\u003cp\\u003eTuple element type, if known\\u003c/p\\u003e\",\"parent_name\":\"TupleElement\"},\"Classes/TupleElement.html#/c:@M@SourceryRuntime@objc(cs)TupleElement(py)asSource\":{\"name\":\"asSource\",\"parent_name\":\"TupleElement\"},\"Classes/TupleElement.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"TupleElement\"},\"Classes/TupleElement.html#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isOptional\":{\"name\":\"isOptional\",\"abstract\":\"\\u003cp\\u003eWhether type is optional. Shorthand for \\u003ccode\\u003etypeName.isOptional\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"TupleElement\"},\"Classes/TupleElement.html#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isImplicitlyUnwrappedOptional\":{\"name\":\"isImplicitlyUnwrappedOptional\",\"abstract\":\"\\u003cp\\u003eWhether type is implicitly unwrapped optional. Shorthand for \\u003ccode\\u003etypeName.isImplicitlyUnwrappedOptional\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"TupleElement\"},\"Classes/TupleElement.html#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)unwrappedTypeName\":{\"name\":\"unwrappedTypeName\",\"abstract\":\"\\u003cp\\u003eType name without attributes and optional type information. Shorthand for \\u003ccode\\u003etypeName.unwrappedTypeName\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"TupleElement\"},\"Classes/TupleElement.html#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)actualTypeName\":{\"name\":\"actualTypeName\",\"abstract\":\"\\u003cp\\u003eActual type name if declaration uses typealias, otherwise just a \\u003ccode\\u003e\\u003ca href=\\\"36f8f5912051ae747ef441d6511ca4cbClasses/TupleElement.html#/c:@M@SourceryRuntime@objc(cs)TupleElement(py)typeName\\\"\\u003etypeName\\u003c/a\\u003e\\u003c/code\\u003e. Shorthand for \\u003ccode\\u003etypeName.actualTypeName\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"TupleElement\"},\"Classes/TupleElement.html#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isTuple\":{\"name\":\"isTuple\",\"abstract\":\"\\u003cp\\u003eWhether type is a tuple. Shorthand for \\u003ccode\\u003etypeName.isTuple\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"TupleElement\"},\"Classes/TupleElement.html#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isClosure\":{\"name\":\"isClosure\",\"abstract\":\"\\u003cp\\u003eWhether type is a closure. Shorthand for \\u003ccode\\u003etypeName.isClosure\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"TupleElement\"},\"Classes/TupleElement.html#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isArray\":{\"name\":\"isArray\",\"abstract\":\"\\u003cp\\u003eWhether type is an array. Shorthand for \\u003ccode\\u003etypeName.isArray\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"TupleElement\"},\"Classes/TupleElement.html#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isSet\":{\"name\":\"isSet\",\"abstract\":\"\\u003cp\\u003eWhether type is a set. Shorthand for \\u003ccode\\u003etypeName.isSet\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"TupleElement\"},\"Classes/TupleElement.html#/c:@CM@SourceryRuntime@objc(cs)TupleElement(py)isDictionary\":{\"name\":\"isDictionary\",\"abstract\":\"\\u003cp\\u003eWhether type is a dictionary. Shorthand for \\u003ccode\\u003etypeName.isDictionary\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"TupleElement\"},\"Classes/TupleType.html#/c:@M@SourceryRuntime@objc(cs)TupleType(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eType name used in declaration\\u003c/p\\u003e\",\"parent_name\":\"TupleType\"},\"Classes/TupleType.html#/c:@M@SourceryRuntime@objc(cs)TupleType(py)elements\":{\"name\":\"elements\",\"abstract\":\"\\u003cp\\u003eTuple elements\\u003c/p\\u003e\",\"parent_name\":\"TupleType\"},\"Classes/TupleType.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"TupleType\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eType name used in declaration\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)generic\":{\"name\":\"generic\",\"abstract\":\"\\u003cp\\u003eThe generics of this TypeName\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isGeneric\":{\"name\":\"isGeneric\",\"abstract\":\"\\u003cp\\u003eWhether this TypeName is generic\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isProtocolComposition\":{\"name\":\"isProtocolComposition\",\"abstract\":\"\\u003cp\\u003eWhether this TypeName is protocol composition\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)actualTypeName\":{\"name\":\"actualTypeName\",\"abstract\":\"\\u003cp\\u003eActual type name if given type name is a typealias\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)attributes\":{\"name\":\"attributes\",\"abstract\":\"\\u003cp\\u003eType name attributes, i.e. \\u003ccode\\u003e@escaping\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)modifiers\":{\"name\":\"modifiers\",\"abstract\":\"\\u003cp\\u003eModifiers, i.e. \\u003ccode\\u003eescaping\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isOptional\":{\"name\":\"isOptional\",\"abstract\":\"\\u003cp\\u003eWhether type is optional\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isImplicitlyUnwrappedOptional\":{\"name\":\"isImplicitlyUnwrappedOptional\",\"abstract\":\"\\u003cp\\u003eWhether type is implicitly unwrapped optional\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)unwrappedTypeName\":{\"name\":\"unwrappedTypeName\",\"abstract\":\"\\u003cp\\u003eType name without attributes and optional type information\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isVoid\":{\"name\":\"isVoid\",\"abstract\":\"\\u003cp\\u003eWhether type is void (\\u003ccode\\u003eVoid\\u003c/code\\u003e or \\u003ccode\\u003e()\\u003c/code\\u003e)\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isTuple\":{\"name\":\"isTuple\",\"abstract\":\"\\u003cp\\u003eWhether type is a tuple\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)tuple\":{\"name\":\"tuple\",\"abstract\":\"\\u003cp\\u003eTuple type data\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isArray\":{\"name\":\"isArray\",\"abstract\":\"\\u003cp\\u003eWhether type is an array\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)array\":{\"name\":\"array\",\"abstract\":\"\\u003cp\\u003eArray type data\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isDictionary\":{\"name\":\"isDictionary\",\"abstract\":\"\\u003cp\\u003eWhether type is a dictionary\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)dictionary\":{\"name\":\"dictionary\",\"abstract\":\"\\u003cp\\u003eDictionary type data\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isClosure\":{\"name\":\"isClosure\",\"abstract\":\"\\u003cp\\u003eWhether type is a closure\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)closure\":{\"name\":\"closure\",\"abstract\":\"\\u003cp\\u003eClosure type data\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isSet\":{\"name\":\"isSet\",\"abstract\":\"\\u003cp\\u003eWhether type is a Set\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)set\":{\"name\":\"set\",\"abstract\":\"\\u003cp\\u003eSet type data\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)isNever\":{\"name\":\"isNever\",\"abstract\":\"\\u003cp\\u003eWhether type is \\u003ccode\\u003eNever\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)asSource\":{\"name\":\"asSource\",\"abstract\":\"\\u003cp\\u003ePrints typename as it would appear on definition\\u003c/p\\u003e\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)description\":{\"name\":\"description\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@M@SourceryRuntime@objc(cs)TypeName(py)hash\":{\"name\":\"hash\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/s:s25LosslessStringConvertiblePyxSgSScfc\":{\"name\":\"init(_:)\",\"parent_name\":\"TypeName\"},\"Classes/TypeName.html#/c:@CM@SourceryRuntime@objc(cs)TypeName(cm)unknownWithDescription:attributes:\":{\"name\":\"unknown(description:attributes:)\",\"parent_name\":\"TypeName\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)parameters\":{\"name\":\"parameters\",\"abstract\":\"\\u003cp\\u003eMethod parameters\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)returnTypeName\":{\"name\":\"returnTypeName\",\"abstract\":\"\\u003cp\\u003eReturn value type name used in declaration, including generic constraints, i.e. \\u003ccode\\u003ewhere T: Equatable\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)actualReturnTypeName\":{\"name\":\"actualReturnTypeName\",\"abstract\":\"\\u003cp\\u003eActual return value type name if declaration uses typealias, otherwise just a \\u003ccode\\u003e\\u003ca href=\\\"36f8f5912051ae747ef441d6511ca4cbClasses/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)returnTypeName\\\"\\u003ereturnTypeName\\u003c/a\\u003e\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)returnType\":{\"name\":\"returnType\",\"abstract\":\"\\u003cp\\u003eActual return value type, if known\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)isOptionalReturnType\":{\"name\":\"isOptionalReturnType\",\"abstract\":\"\\u003cp\\u003eWhether return value type is optional\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)isImplicitlyUnwrappedOptionalReturnType\":{\"name\":\"isImplicitlyUnwrappedOptionalReturnType\",\"abstract\":\"\\u003cp\\u003eWhether return value type is implicitly unwrapped optional\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)unwrappedReturnTypeName\":{\"name\":\"unwrappedReturnTypeName\",\"abstract\":\"\\u003cp\\u003eReturn value type name without attributes and optional type information\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)isFinal\":{\"name\":\"isFinal\",\"abstract\":\"\\u003cp\\u003eWhether method is final\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)readAccess\":{\"name\":\"readAccess\",\"abstract\":\"\\u003cp\\u003eVariable read access level, i.e. \\u003ccode\\u003einternal\\u003c/code\\u003e, \\u003ccode\\u003eprivate\\u003c/code\\u003e, \\u003ccode\\u003efileprivate\\u003c/code\\u003e, \\u003ccode\\u003epublic\\u003c/code\\u003e, \\u003ccode\\u003eopen\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)writeAccess\":{\"name\":\"writeAccess\",\"abstract\":\"\\u003cp\\u003eVariable write access, i.e. \\u003ccode\\u003einternal\\u003c/code\\u003e, \\u003ccode\\u003eprivate\\u003c/code\\u003e, \\u003ccode\\u003efileprivate\\u003c/code\\u003e, \\u003ccode\\u003epublic\\u003c/code\\u003e, \\u003ccode\\u003eopen\\u003c/code\\u003e.\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)isAsync\":{\"name\":\"isAsync\",\"abstract\":\"\\u003cp\\u003eWhether subscript is async\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)throws\":{\"name\":\"throws\",\"abstract\":\"\\u003cp\\u003eWhether subscript throws\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)throwsTypeName\":{\"name\":\"throwsTypeName\",\"abstract\":\"\\u003cp\\u003eType of thrown error if specified\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)isMutable\":{\"name\":\"isMutable\",\"abstract\":\"\\u003cp\\u003eWhether variable is mutable or not\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)annotations\":{\"name\":\"annotations\",\"abstract\":\"\\u003cp\\u003eAnnotations, that were created with // sourcery: annotation1, other = \\u0026ldquo;annotation value\\u0026rdquo;, alterantive = 2\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)documentation\":{\"name\":\"documentation\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)definedInTypeName\":{\"name\":\"definedInTypeName\",\"abstract\":\"\\u003cp\\u003eReference to type name where the method is defined,\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)actualDefinedInTypeName\":{\"name\":\"actualDefinedInTypeName\",\"abstract\":\"\\u003cp\\u003eReference to actual type name where the method is defined if declaration uses typealias, otherwise just a \\u003ccode\\u003e\\u003ca href=\\\"36f8f5912051ae747ef441d6511ca4cbClasses/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)definedInTypeName\\\"\\u003edefinedInTypeName\\u003c/a\\u003e\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)definedInType\":{\"name\":\"definedInType\",\"abstract\":\"\\u003cp\\u003eReference to actual type where the object is defined,\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)attributes\":{\"name\":\"attributes\",\"abstract\":\"\\u003cp\\u003eMethod attributes, i.e. \\u003ccode\\u003e@discardableResult\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)modifiers\":{\"name\":\"modifiers\",\"abstract\":\"\\u003cp\\u003eMethod modifiers, i.e. \\u003ccode\\u003eprivate\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)genericParameters\":{\"name\":\"genericParameters\",\"abstract\":\"\\u003cp\\u003elist of generic parameters\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)genericRequirements\":{\"name\":\"genericRequirements\",\"abstract\":\"\\u003cp\\u003elist of generic requirements\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/c:@M@SourceryRuntime@objc(cs)Subscript(py)isGeneric\":{\"name\":\"isGeneric\",\"abstract\":\"\\u003cp\\u003eWhether subscript is generic or not\\u003c/p\\u003e\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/s:15SourceryRuntime9SubscriptC10parameters14returnTypeName11accessLevel7isAsync6throws0lfG017genericParameters0M12Requirements10attributes9modifiers11annotations13documentation09definedInfG0ACSayAA15MethodParameterCG_AA0fG0CAA06AccessI0O4read_AW5writetS2bAUSgSayAA07GenericW0CGSayAA18GenericRequirementCGSDySSSayAA9AttributeCGGSayAA8ModifierCGSDySSSo8NSObjectCGSaySSGAZtcfc\":{\"name\":\"init(parameters:returnTypeName:accessLevel:isAsync:throws:throwsTypeName:genericParameters:genericRequirements:attributes:modifiers:annotations:documentation:definedInTypeName:)\",\"parent_name\":\"Subscript\"},\"Classes/Subscript.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"Subscript\"},\"Classes/MethodParameter.html#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)argumentLabel\":{\"name\":\"argumentLabel\",\"abstract\":\"\\u003cp\\u003eParameter external name\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eParameter internal name\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)typeName\":{\"name\":\"typeName\",\"abstract\":\"\\u003cp\\u003eParameter type name\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)inout\":{\"name\":\"inout\",\"abstract\":\"\\u003cp\\u003eParameter flag whether it\\u0026rsquo;s inout or not\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)isVariadic\":{\"name\":\"isVariadic\",\"abstract\":\"\\u003cp\\u003eIs this variadic parameter?\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)type\":{\"name\":\"type\",\"abstract\":\"\\u003cp\\u003eParameter type, if known\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)typeAttributes\":{\"name\":\"typeAttributes\",\"abstract\":\"\\u003cp\\u003eParameter type attributes, i.e. \\u003ccode\\u003e@escaping\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)defaultValue\":{\"name\":\"defaultValue\",\"abstract\":\"\\u003cp\\u003eMethod parameter default value expression\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)annotations\":{\"name\":\"annotations\",\"abstract\":\"\\u003cp\\u003eAnnotations, that were created with // sourcery: annotation1, other = \\u0026ldquo;annotation value\\u0026rdquo;, alterantive = 2\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)asSource\":{\"name\":\"asSource\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isOptional\":{\"name\":\"isOptional\",\"abstract\":\"\\u003cp\\u003eWhether type is optional. Shorthand for \\u003ccode\\u003etypeName.isOptional\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isImplicitlyUnwrappedOptional\":{\"name\":\"isImplicitlyUnwrappedOptional\",\"abstract\":\"\\u003cp\\u003eWhether type is implicitly unwrapped optional. Shorthand for \\u003ccode\\u003etypeName.isImplicitlyUnwrappedOptional\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)unwrappedTypeName\":{\"name\":\"unwrappedTypeName\",\"abstract\":\"\\u003cp\\u003eType name without attributes and optional type information. Shorthand for \\u003ccode\\u003etypeName.unwrappedTypeName\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)actualTypeName\":{\"name\":\"actualTypeName\",\"abstract\":\"\\u003cp\\u003eActual type name if declaration uses typealias, otherwise just a \\u003ccode\\u003e\\u003ca href=\\\"36f8f5912051ae747ef441d6511ca4cbClasses/MethodParameter.html#/c:@M@SourceryRuntime@objc(cs)MethodParameter(py)typeName\\\"\\u003etypeName\\u003c/a\\u003e\\u003c/code\\u003e. Shorthand for \\u003ccode\\u003etypeName.actualTypeName\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isTuple\":{\"name\":\"isTuple\",\"abstract\":\"\\u003cp\\u003eWhether type is a tuple. Shorthand for \\u003ccode\\u003etypeName.isTuple\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isClosure\":{\"name\":\"isClosure\",\"abstract\":\"\\u003cp\\u003eWhether type is a closure. Shorthand for \\u003ccode\\u003etypeName.isClosure\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isArray\":{\"name\":\"isArray\",\"abstract\":\"\\u003cp\\u003eWhether type is an array. Shorthand for \\u003ccode\\u003etypeName.isArray\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isSet\":{\"name\":\"isSet\",\"abstract\":\"\\u003cp\\u003eWhether type is a set. Shorthand for \\u003ccode\\u003etypeName.isSet\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/MethodParameter.html#/c:@CM@SourceryRuntime@objc(cs)MethodParameter(py)isDictionary\":{\"name\":\"isDictionary\",\"abstract\":\"\\u003cp\\u003eWhether type is a dictionary. Shorthand for \\u003ccode\\u003etypeName.isDictionary\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"MethodParameter\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eFull method name, including generic constraints, i.e. \\u003ccode\\u003efoo\\u0026lt;T\\u0026gt;(bar: T)\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)selectorName\":{\"name\":\"selectorName\",\"abstract\":\"\\u003cp\\u003eMethod name including arguments names, i.e. \\u003ccode\\u003efoo(bar:)\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)shortName\":{\"name\":\"shortName\",\"abstract\":\"\\u003cp\\u003eMethod name without arguments names and parentheses, i.e. \\u003ccode\\u003efoo\\u0026lt;T\\u0026gt;\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)callName\":{\"name\":\"callName\",\"abstract\":\"\\u003cp\\u003eMethod name without arguments names, parentheses and generic types, i.e. \\u003ccode\\u003efoo\\u003c/code\\u003e (can be used to generate code for method call)\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)parameters\":{\"name\":\"parameters\",\"abstract\":\"\\u003cp\\u003eMethod parameters\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)returnTypeName\":{\"name\":\"returnTypeName\",\"abstract\":\"\\u003cp\\u003eReturn value type name used in declaration, including generic constraints, i.e. \\u003ccode\\u003ewhere T: Equatable\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)actualReturnTypeName\":{\"name\":\"actualReturnTypeName\",\"abstract\":\"\\u003cp\\u003eActual return value type name if declaration uses typealias, otherwise just a \\u003ccode\\u003e\\u003ca href=\\\"36f8f5912051ae747ef441d6511ca4cbClasses/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)returnTypeName\\\"\\u003ereturnTypeName\\u003c/a\\u003e\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)returnType\":{\"name\":\"returnType\",\"abstract\":\"\\u003cp\\u003eActual return value type, if known\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isOptionalReturnType\":{\"name\":\"isOptionalReturnType\",\"abstract\":\"\\u003cp\\u003eWhether return value type is optional\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isImplicitlyUnwrappedOptionalReturnType\":{\"name\":\"isImplicitlyUnwrappedOptionalReturnType\",\"abstract\":\"\\u003cp\\u003eWhether return value type is implicitly unwrapped optional\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)unwrappedReturnTypeName\":{\"name\":\"unwrappedReturnTypeName\",\"abstract\":\"\\u003cp\\u003eReturn value type name without attributes and optional type information\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isAsync\":{\"name\":\"isAsync\",\"abstract\":\"\\u003cp\\u003eWhether method is async method\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isDistributed\":{\"name\":\"isDistributed\",\"abstract\":\"\\u003cp\\u003eWhether method is distributed\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)throws\":{\"name\":\"throws\",\"abstract\":\"\\u003cp\\u003eWhether method throws\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)throwsTypeName\":{\"name\":\"throwsTypeName\",\"abstract\":\"\\u003cp\\u003eType of thrown error if specified\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isThrowsTypeGeneric\":{\"name\":\"isThrowsTypeGeneric\",\"abstract\":\"\\u003cp\\u003eReturn if the throwsType is generic\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)rethrows\":{\"name\":\"rethrows\",\"abstract\":\"\\u003cp\\u003eWhether method rethrows\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)accessLevel\":{\"name\":\"accessLevel\",\"abstract\":\"\\u003cp\\u003eMethod access level, i.e. \\u003ccode\\u003einternal\\u003c/code\\u003e, \\u003ccode\\u003eprivate\\u003c/code\\u003e, \\u003ccode\\u003efileprivate\\u003c/code\\u003e, \\u003ccode\\u003epublic\\u003c/code\\u003e, \\u003ccode\\u003eopen\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isStatic\":{\"name\":\"isStatic\",\"abstract\":\"\\u003cp\\u003eWhether method is a static method\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isClass\":{\"name\":\"isClass\",\"abstract\":\"\\u003cp\\u003eWhether method is a class method\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isInitializer\":{\"name\":\"isInitializer\",\"abstract\":\"\\u003cp\\u003eWhether method is an initializer\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isDeinitializer\":{\"name\":\"isDeinitializer\",\"abstract\":\"\\u003cp\\u003eWhether method is an deinitializer\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isFailableInitializer\":{\"name\":\"isFailableInitializer\",\"abstract\":\"\\u003cp\\u003eWhether method is a failable initializer\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isConvenienceInitializer\":{\"name\":\"isConvenienceInitializer\",\"abstract\":\"\\u003cp\\u003eWhether method is a convenience initializer\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isRequired\":{\"name\":\"isRequired\",\"abstract\":\"\\u003cp\\u003eWhether method is required\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isFinal\":{\"name\":\"isFinal\",\"abstract\":\"\\u003cp\\u003eWhether method is final\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isMutating\":{\"name\":\"isMutating\",\"abstract\":\"\\u003cp\\u003eWhether method is mutating\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isGeneric\":{\"name\":\"isGeneric\",\"abstract\":\"\\u003cp\\u003eWhether method is generic\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isOptional\":{\"name\":\"isOptional\",\"abstract\":\"\\u003cp\\u003eWhether method is optional (in an Objective-C protocol)\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isNonisolated\":{\"name\":\"isNonisolated\",\"abstract\":\"\\u003cp\\u003eWhether method is nonisolated (this modifier only applies to actor methods)\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)isDynamic\":{\"name\":\"isDynamic\",\"abstract\":\"\\u003cp\\u003eWhether method is dynamic\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)annotations\":{\"name\":\"annotations\",\"abstract\":\"\\u003cp\\u003eAnnotations, that were created with // sourcery: annotation1, other = \\u0026ldquo;annotation value\\u0026rdquo;, alterantive = 2\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)documentation\":{\"name\":\"documentation\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)definedInTypeName\":{\"name\":\"definedInTypeName\",\"abstract\":\"\\u003cp\\u003eReference to type name where the method is defined,\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)actualDefinedInTypeName\":{\"name\":\"actualDefinedInTypeName\",\"abstract\":\"\\u003cp\\u003eReference to actual type name where the method is defined if declaration uses typealias, otherwise just a \\u003ccode\\u003e\\u003ca href=\\\"36f8f5912051ae747ef441d6511ca4cbClasses/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)definedInTypeName\\\"\\u003edefinedInTypeName\\u003c/a\\u003e\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)definedInType\":{\"name\":\"definedInType\",\"abstract\":\"\\u003cp\\u003eReference to actual type where the object is defined,\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)attributes\":{\"name\":\"attributes\",\"abstract\":\"\\u003cp\\u003eMethod attributes, i.e. \\u003ccode\\u003e@discardableResult\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)modifiers\":{\"name\":\"modifiers\",\"abstract\":\"\\u003cp\\u003eMethod modifiers, i.e. \\u003ccode\\u003eprivate\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)genericRequirements\":{\"name\":\"genericRequirements\",\"abstract\":\"\\u003cp\\u003elist of generic requirements\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/c:@M@SourceryRuntime@objc(cs)SwiftMethod(py)genericParameters\":{\"name\":\"genericParameters\",\"abstract\":\"\\u003cp\\u003eList of generic parameters\\u003c/p\\u003e\",\"parent_name\":\"Method\"},\"Classes/Method.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"Method\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eVariable name\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)typeName\":{\"name\":\"typeName\",\"abstract\":\"\\u003cp\\u003eVariable type name\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)type\":{\"name\":\"type\",\"abstract\":\"\\u003cp\\u003eVariable type, if known, i.e. if the type is declared in the scanned sources.\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)isComputed\":{\"name\":\"isComputed\",\"abstract\":\"\\u003cp\\u003eWhether variable is computed and not stored\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)isAsync\":{\"name\":\"isAsync\",\"abstract\":\"\\u003cp\\u003eWhether variable is async\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)throws\":{\"name\":\"throws\",\"abstract\":\"\\u003cp\\u003eWhether variable throws\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)throwsTypeName\":{\"name\":\"throwsTypeName\",\"abstract\":\"\\u003cp\\u003eType of thrown error if specified\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)isStatic\":{\"name\":\"isStatic\",\"abstract\":\"\\u003cp\\u003eWhether variable is static\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)readAccess\":{\"name\":\"readAccess\",\"abstract\":\"\\u003cp\\u003eVariable read access level, i.e. \\u003ccode\\u003einternal\\u003c/code\\u003e, \\u003ccode\\u003eprivate\\u003c/code\\u003e, \\u003ccode\\u003efileprivate\\u003c/code\\u003e, \\u003ccode\\u003epublic\\u003c/code\\u003e, \\u003ccode\\u003eopen\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)writeAccess\":{\"name\":\"writeAccess\",\"abstract\":\"\\u003cp\\u003eVariable write access, i.e. \\u003ccode\\u003einternal\\u003c/code\\u003e, \\u003ccode\\u003eprivate\\u003c/code\\u003e, \\u003ccode\\u003efileprivate\\u003c/code\\u003e, \\u003ccode\\u003epublic\\u003c/code\\u003e, \\u003ccode\\u003eopen\\u003c/code\\u003e.\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/s:15SourceryRuntime8VariableC11accessLevelAA06AccessE0O4read_AF5writetvp\":{\"name\":\"accessLevel\",\"abstract\":\"\\u003cp\\u003ecomposed access level\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)isMutable\":{\"name\":\"isMutable\",\"abstract\":\"\\u003cp\\u003eWhether variable is mutable or not\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)defaultValue\":{\"name\":\"defaultValue\",\"abstract\":\"\\u003cp\\u003eVariable default value expression\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)annotations\":{\"name\":\"annotations\",\"abstract\":\"\\u003cp\\u003eAnnotations, that were created with // sourcery: annotation1, other = \\u0026ldquo;annotation value\\u0026rdquo;, alterantive = 2\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)documentation\":{\"name\":\"documentation\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)attributes\":{\"name\":\"attributes\",\"abstract\":\"\\u003cp\\u003eVariable attributes, i.e. \\u003ccode\\u003e@IBOutlet\\u003c/code\\u003e, \\u003ccode\\u003e@IBInspectable\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)modifiers\":{\"name\":\"modifiers\",\"abstract\":\"\\u003cp\\u003eModifiers, i.e. \\u003ccode\\u003eprivate\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)isFinal\":{\"name\":\"isFinal\",\"abstract\":\"\\u003cp\\u003eWhether variable is final or not\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)isLazy\":{\"name\":\"isLazy\",\"abstract\":\"\\u003cp\\u003eWhether variable is lazy or not\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)isDynamic\":{\"name\":\"isDynamic\",\"abstract\":\"\\u003cp\\u003eWhether variable is dynamic or not\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)definedInTypeName\":{\"name\":\"definedInTypeName\",\"abstract\":\"\\u003cp\\u003eReference to type name where the variable is defined,\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)actualDefinedInTypeName\":{\"name\":\"actualDefinedInTypeName\",\"abstract\":\"\\u003cp\\u003eReference to actual type name where the method is defined if declaration uses typealias, otherwise just a \\u003ccode\\u003e\\u003ca href=\\\"36f8f5912051ae747ef441d6511ca4cbClasses/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)definedInTypeName\\\"\\u003edefinedInTypeName\\u003c/a\\u003e\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)definedInType\":{\"name\":\"definedInType\",\"abstract\":\"\\u003cp\\u003eReference to actual type where the object is defined,\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@CM@SourceryRuntime@objc(cs)Variable(py)isOptional\":{\"name\":\"isOptional\",\"abstract\":\"\\u003cp\\u003eWhether type is optional. Shorthand for \\u003ccode\\u003etypeName.isOptional\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@CM@SourceryRuntime@objc(cs)Variable(py)isImplicitlyUnwrappedOptional\":{\"name\":\"isImplicitlyUnwrappedOptional\",\"abstract\":\"\\u003cp\\u003eWhether type is implicitly unwrapped optional. Shorthand for \\u003ccode\\u003etypeName.isImplicitlyUnwrappedOptional\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@CM@SourceryRuntime@objc(cs)Variable(py)unwrappedTypeName\":{\"name\":\"unwrappedTypeName\",\"abstract\":\"\\u003cp\\u003eType name without attributes and optional type information. Shorthand for \\u003ccode\\u003etypeName.unwrappedTypeName\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@CM@SourceryRuntime@objc(cs)Variable(py)actualTypeName\":{\"name\":\"actualTypeName\",\"abstract\":\"\\u003cp\\u003eActual type name if declaration uses typealias, otherwise just a \\u003ccode\\u003e\\u003ca href=\\\"36f8f5912051ae747ef441d6511ca4cbClasses/Variable.html#/c:@M@SourceryRuntime@objc(cs)Variable(py)typeName\\\"\\u003etypeName\\u003c/a\\u003e\\u003c/code\\u003e. Shorthand for \\u003ccode\\u003etypeName.actualTypeName\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@CM@SourceryRuntime@objc(cs)Variable(py)isTuple\":{\"name\":\"isTuple\",\"abstract\":\"\\u003cp\\u003eWhether type is a tuple. Shorthand for \\u003ccode\\u003etypeName.isTuple\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@CM@SourceryRuntime@objc(cs)Variable(py)isClosure\":{\"name\":\"isClosure\",\"abstract\":\"\\u003cp\\u003eWhether type is a closure. Shorthand for \\u003ccode\\u003etypeName.isClosure\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@CM@SourceryRuntime@objc(cs)Variable(py)isArray\":{\"name\":\"isArray\",\"abstract\":\"\\u003cp\\u003eWhether type is an array. Shorthand for \\u003ccode\\u003etypeName.isArray\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@CM@SourceryRuntime@objc(cs)Variable(py)isSet\":{\"name\":\"isSet\",\"abstract\":\"\\u003cp\\u003eWhether type is a set. Shorthand for \\u003ccode\\u003etypeName.isSet\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/Variable.html#/c:@CM@SourceryRuntime@objc(cs)Variable(py)isDictionary\":{\"name\":\"isDictionary\",\"abstract\":\"\\u003cp\\u003eWhether type is a dictionary. Shorthand for \\u003ccode\\u003etypeName.isDictionary\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Variable\"},\"Classes/AssociatedType.html#/c:@M@SourceryRuntime@objc(cs)AssociatedType(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eAssociated type name\\u003c/p\\u003e\",\"parent_name\":\"AssociatedType\"},\"Classes/AssociatedType.html#/c:@M@SourceryRuntime@objc(cs)AssociatedType(py)typeName\":{\"name\":\"typeName\",\"abstract\":\"\\u003cp\\u003eAssociated type type constraint name, if specified\\u003c/p\\u003e\",\"parent_name\":\"AssociatedType\"},\"Classes/AssociatedType.html#/c:@M@SourceryRuntime@objc(cs)AssociatedType(py)type\":{\"name\":\"type\",\"abstract\":\"\\u003cp\\u003eAssociated type constrained type, if known, i.e. if the type is declared in the scanned sources.\\u003c/p\\u003e\",\"parent_name\":\"AssociatedType\"},\"Classes/AssociatedType.html#/c:@M@SourceryRuntime@objc(cs)AssociatedType(im)diffAgainst:\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"AssociatedType\"},\"Classes/AssociatedValue.html#/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)localName\":{\"name\":\"localName\",\"abstract\":\"\\u003cp\\u003eAssociated value local name.\",\"parent_name\":\"AssociatedValue\"},\"Classes/AssociatedValue.html#/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)externalName\":{\"name\":\"externalName\",\"abstract\":\"\\u003cp\\u003eAssociated value external name.\",\"parent_name\":\"AssociatedValue\"},\"Classes/AssociatedValue.html#/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)typeName\":{\"name\":\"typeName\",\"abstract\":\"\\u003cp\\u003eAssociated value type name\\u003c/p\\u003e\",\"parent_name\":\"AssociatedValue\"},\"Classes/AssociatedValue.html#/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)type\":{\"name\":\"type\",\"abstract\":\"\\u003cp\\u003eAssociated value type, if known\\u003c/p\\u003e\",\"parent_name\":\"AssociatedValue\"},\"Classes/AssociatedValue.html#/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)defaultValue\":{\"name\":\"defaultValue\",\"abstract\":\"\\u003cp\\u003eAssociated value default value\\u003c/p\\u003e\",\"parent_name\":\"AssociatedValue\"},\"Classes/AssociatedValue.html#/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)annotations\":{\"name\":\"annotations\",\"abstract\":\"\\u003cp\\u003eAnnotations, that were created with // sourcery: annotation1, other = \\u0026ldquo;annotation value\\u0026rdquo;, alterantive = 2\\u003c/p\\u003e\",\"parent_name\":\"AssociatedValue\"},\"Classes/AssociatedValue.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"AssociatedValue\"},\"Classes/AssociatedValue.html#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isOptional\":{\"name\":\"isOptional\",\"abstract\":\"\\u003cp\\u003eWhether type is optional. Shorthand for \\u003ccode\\u003etypeName.isOptional\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"AssociatedValue\"},\"Classes/AssociatedValue.html#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isImplicitlyUnwrappedOptional\":{\"name\":\"isImplicitlyUnwrappedOptional\",\"abstract\":\"\\u003cp\\u003eWhether type is implicitly unwrapped optional. Shorthand for \\u003ccode\\u003etypeName.isImplicitlyUnwrappedOptional\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"AssociatedValue\"},\"Classes/AssociatedValue.html#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)unwrappedTypeName\":{\"name\":\"unwrappedTypeName\",\"abstract\":\"\\u003cp\\u003eType name without attributes and optional type information. Shorthand for \\u003ccode\\u003etypeName.unwrappedTypeName\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"AssociatedValue\"},\"Classes/AssociatedValue.html#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)actualTypeName\":{\"name\":\"actualTypeName\",\"abstract\":\"\\u003cp\\u003eActual type name if declaration uses typealias, otherwise just a \\u003ccode\\u003e\\u003ca href=\\\"36f8f5912051ae747ef441d6511ca4cbClasses/AssociatedValue.html#/c:@M@SourceryRuntime@objc(cs)AssociatedValue(py)typeName\\\"\\u003etypeName\\u003c/a\\u003e\\u003c/code\\u003e. Shorthand for \\u003ccode\\u003etypeName.actualTypeName\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"AssociatedValue\"},\"Classes/AssociatedValue.html#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isTuple\":{\"name\":\"isTuple\",\"abstract\":\"\\u003cp\\u003eWhether type is a tuple. Shorthand for \\u003ccode\\u003etypeName.isTuple\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"AssociatedValue\"},\"Classes/AssociatedValue.html#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isClosure\":{\"name\":\"isClosure\",\"abstract\":\"\\u003cp\\u003eWhether type is a closure. Shorthand for \\u003ccode\\u003etypeName.isClosure\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"AssociatedValue\"},\"Classes/AssociatedValue.html#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isArray\":{\"name\":\"isArray\",\"abstract\":\"\\u003cp\\u003eWhether type is an array. Shorthand for \\u003ccode\\u003etypeName.isArray\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"AssociatedValue\"},\"Classes/AssociatedValue.html#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isSet\":{\"name\":\"isSet\",\"abstract\":\"\\u003cp\\u003eWhether type is a set. Shorthand for \\u003ccode\\u003etypeName.isSet\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"AssociatedValue\"},\"Classes/AssociatedValue.html#/c:@CM@SourceryRuntime@objc(cs)AssociatedValue(py)isDictionary\":{\"name\":\"isDictionary\",\"abstract\":\"\\u003cp\\u003eWhether type is a dictionary. Shorthand for \\u003ccode\\u003etypeName.isDictionary\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"AssociatedValue\"},\"Classes/EnumCase.html#/c:@M@SourceryRuntime@objc(cs)EnumCase(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eEnum case name\\u003c/p\\u003e\",\"parent_name\":\"EnumCase\"},\"Classes/EnumCase.html#/c:@M@SourceryRuntime@objc(cs)EnumCase(py)rawValue\":{\"name\":\"rawValue\",\"abstract\":\"\\u003cp\\u003eEnum case raw value, if any\\u003c/p\\u003e\",\"parent_name\":\"EnumCase\"},\"Classes/EnumCase.html#/c:@M@SourceryRuntime@objc(cs)EnumCase(py)associatedValues\":{\"name\":\"associatedValues\",\"abstract\":\"\\u003cp\\u003eEnum case associated values\\u003c/p\\u003e\",\"parent_name\":\"EnumCase\"},\"Classes/EnumCase.html#/c:@M@SourceryRuntime@objc(cs)EnumCase(py)annotations\":{\"name\":\"annotations\",\"abstract\":\"\\u003cp\\u003eEnum case annotations\\u003c/p\\u003e\",\"parent_name\":\"EnumCase\"},\"Classes/EnumCase.html#/c:@M@SourceryRuntime@objc(cs)EnumCase(py)documentation\":{\"name\":\"documentation\",\"parent_name\":\"EnumCase\"},\"Classes/EnumCase.html#/c:@M@SourceryRuntime@objc(cs)EnumCase(py)indirect\":{\"name\":\"indirect\",\"abstract\":\"\\u003cp\\u003eWhether enum case is indirect\\u003c/p\\u003e\",\"parent_name\":\"EnumCase\"},\"Classes/EnumCase.html#/c:@M@SourceryRuntime@objc(cs)EnumCase(py)hasAssociatedValue\":{\"name\":\"hasAssociatedValue\",\"abstract\":\"\\u003cp\\u003eWhether enum case has associated value\\u003c/p\\u003e\",\"parent_name\":\"EnumCase\"},\"Classes/EnumCase.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"EnumCase\"},\"Classes/Enum.html#/c:@M@SourceryRuntime@objc(cs)Enum(cpy)kind\":{\"name\":\"kind\",\"parent_name\":\"Enum\"},\"Classes/Enum.html#/c:@M@SourceryRuntime@objc(cs)Enum(py)kind\":{\"name\":\"kind\",\"abstract\":\"\\u003cp\\u003eReturns \\u0026ldquo;enum\\u0026rdquo;\\u003c/p\\u003e\",\"parent_name\":\"Enum\"},\"Classes/Enum.html#/c:@M@SourceryRuntime@objc(cs)Enum(py)cases\":{\"name\":\"cases\",\"abstract\":\"\\u003cp\\u003eEnum cases\\u003c/p\\u003e\",\"parent_name\":\"Enum\"},\"Classes/Enum.html#/c:@M@SourceryRuntime@objc(cs)Enum(py)rawTypeName\":{\"name\":\"rawTypeName\",\"abstract\":\"\\u003cp\\u003eEnum raw value type name, if any. This type is removed from enum\\u0026rsquo;s \\u003ccode\\u003e\\u003ca href=\\\"36f8f5912051ae747ef441d6511ca4cbClasses/Enum.html#/c:@M@SourceryRuntime@objc(cs)Enum(py)based\\\"\\u003ebased\\u003c/a\\u003e\\u003c/code\\u003e and \\u003ccode\\u003einherited\\u003c/code\\u003e types collections.\\u003c/p\\u003e\",\"parent_name\":\"Enum\"},\"Classes/Enum.html#/c:@M@SourceryRuntime@objc(cs)Enum(py)rawType\":{\"name\":\"rawType\",\"abstract\":\"\\u003cp\\u003eEnum raw value type, if known\\u003c/p\\u003e\",\"parent_name\":\"Enum\"},\"Classes/Enum.html#/c:@M@SourceryRuntime@objc(cs)Enum(py)based\":{\"name\":\"based\",\"abstract\":\"\\u003cp\\u003eNames of types or protocols this type inherits from, including unknown (not scanned) types\\u003c/p\\u003e\",\"parent_name\":\"Enum\"},\"Classes/Enum.html#/c:@M@SourceryRuntime@objc(cs)Enum(py)hasAssociatedValues\":{\"name\":\"hasAssociatedValues\",\"abstract\":\"\\u003cp\\u003eWhether enum contains any associated values\\u003c/p\\u003e\",\"parent_name\":\"Enum\"},\"Classes/Enum.html#/c:@M@SourceryRuntime@objc(cs)Enum(im)diffAgainst:\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"Enum\"},\"Classes/Struct.html#/c:@M@SourceryRuntime@objc(cs)Struct(cpy)kind\":{\"name\":\"kind\",\"parent_name\":\"Struct\"},\"Classes/Struct.html#/c:@M@SourceryRuntime@objc(cs)Struct(py)kind\":{\"name\":\"kind\",\"abstract\":\"\\u003cp\\u003eReturns \\u0026ldquo;struct\\u0026rdquo;\\u003c/p\\u003e\",\"parent_name\":\"Struct\"},\"Classes/Struct.html#/c:@M@SourceryRuntime@objc(cs)Struct(im)diffAgainst:\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"Struct\"},\"Classes/Class.html#/c:@M@SourceryRuntime@objc(cs)SwiftClass(cpy)kind\":{\"name\":\"kind\",\"parent_name\":\"Class\"},\"Classes/Class.html#/c:@M@SourceryRuntime@objc(cs)SwiftClass(py)kind\":{\"name\":\"kind\",\"abstract\":\"\\u003cp\\u003eReturns \\u0026ldquo;class\\u0026rdquo;\\u003c/p\\u003e\",\"parent_name\":\"Class\"},\"Classes/Class.html#/c:@M@SourceryRuntime@objc(cs)SwiftClass(py)isFinal\":{\"name\":\"isFinal\",\"abstract\":\"\\u003cp\\u003eWhether type is final\\u003c/p\\u003e\",\"parent_name\":\"Class\"},\"Classes/Class.html#/c:@M@SourceryRuntime@objc(cs)SwiftClass(im)diffAgainst:\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"Class\"},\"Classes/Protocol.html#/c:@M@SourceryRuntime@objc(cs)Protocol(cpy)kind\":{\"name\":\"kind\",\"parent_name\":\"Protocol\"},\"Classes/Protocol.html#/c:@M@SourceryRuntime@objc(cs)Protocol(py)kind\":{\"name\":\"kind\",\"abstract\":\"\\u003cp\\u003eReturns \\u0026ldquo;protocol\\u0026rdquo;\\u003c/p\\u003e\",\"parent_name\":\"Protocol\"},\"Classes/Protocol.html#/c:@M@SourceryRuntime@objc(cs)Protocol(py)associatedTypes\":{\"name\":\"associatedTypes\",\"abstract\":\"\\u003cp\\u003elist of all declared associated types with their names as keys\\u003c/p\\u003e\",\"parent_name\":\"Protocol\"},\"Classes/Protocol.html#/c:@M@SourceryRuntime@objc(cs)Protocol(py)genericRequirements\":{\"name\":\"genericRequirements\",\"abstract\":\"\\u003cp\\u003elist of generic requirements\\u003c/p\\u003e\",\"parent_name\":\"Protocol\"},\"Classes/Protocol.html#/c:@M@SourceryRuntime@objc(cs)Protocol(im)diffAgainst:\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"Protocol\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)imports\":{\"name\":\"imports\",\"abstract\":\"\\u003cp\\u003eImports that existed in the file that contained this type declaration\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)allImports\":{\"name\":\"allImports\",\"abstract\":\"\\u003cp\\u003eImports existed in all files containing this type and all its super classes/protocols\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)isExtension\":{\"name\":\"isExtension\",\"abstract\":\"\\u003cp\\u003eWhether declaration is an extension of some type\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)kind\":{\"name\":\"kind\",\"abstract\":\"\\u003cp\\u003eKind of type declaration, i.e. \\u003ccode\\u003eenum\\u003c/code\\u003e, \\u003ccode\\u003estruct\\u003c/code\\u003e, \\u003ccode\\u003eclass\\u003c/code\\u003e, \\u003ccode\\u003eprotocol\\u003c/code\\u003e or \\u003ccode\\u003eextension\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)accessLevel\":{\"name\":\"accessLevel\",\"abstract\":\"\\u003cp\\u003eType access level, i.e. \\u003ccode\\u003einternal\\u003c/code\\u003e, \\u003ccode\\u003eprivate\\u003c/code\\u003e, \\u003ccode\\u003efileprivate\\u003c/code\\u003e, \\u003ccode\\u003epublic\\u003c/code\\u003e, \\u003ccode\\u003eopen\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)name\":{\"name\":\"name\",\"abstract\":\"\\u003cp\\u003eType name in global scope. For inner types includes the name of its containing type, i.e. \\u003ccode\\u003eType.Inner\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)isUnknownExtension\":{\"name\":\"isUnknownExtension\",\"abstract\":\"\\u003cp\\u003eWhether the type has been resolved as unknown extension\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)globalName\":{\"name\":\"globalName\",\"abstract\":\"\\u003cp\\u003eGlobal type name including module name, unless it\\u0026rsquo;s an extension of unknown type\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)isGeneric\":{\"name\":\"isGeneric\",\"abstract\":\"\\u003cp\\u003eWhether type is generic\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)localName\":{\"name\":\"localName\",\"abstract\":\"\\u003cp\\u003eType name in its own scope.\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)variables\":{\"name\":\"variables\",\"abstract\":\"\\u003cp\\u003eVariables defined in this type only, inluding variables defined in its extensions,\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)rawVariables\":{\"name\":\"rawVariables\",\"abstract\":\"\\u003cp\\u003eUnfiltered (can contain duplications from extensions) variables defined in this type only, inluding variables defined in its extensions,\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)allVariables\":{\"name\":\"allVariables\",\"abstract\":\"\\u003cp\\u003eAll variables defined for this type, including variables defined in extensions,\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)methods\":{\"name\":\"methods\",\"abstract\":\"\\u003cp\\u003eMethods defined in this type only, inluding methods defined in its extensions,\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)rawMethods\":{\"name\":\"rawMethods\",\"abstract\":\"\\u003cp\\u003eUnfiltered (can contain duplications from extensions) methods defined in this type only, inluding methods defined in its extensions,\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)allMethods\":{\"name\":\"allMethods\",\"abstract\":\"\\u003cp\\u003eAll methods defined for this type, including methods defined in extensions,\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)subscripts\":{\"name\":\"subscripts\",\"abstract\":\"\\u003cp\\u003eSubscripts defined in this type only, inluding subscripts defined in its extensions,\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)rawSubscripts\":{\"name\":\"rawSubscripts\",\"abstract\":\"\\u003cp\\u003eUnfiltered (can contain duplications from extensions) Subscripts defined in this type only, inluding subscripts defined in its extensions,\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)allSubscripts\":{\"name\":\"allSubscripts\",\"abstract\":\"\\u003cp\\u003eAll subscripts defined for this type, including subscripts defined in extensions,\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)bodyBytesRange\":{\"name\":\"bodyBytesRange\",\"abstract\":\"\\u003cp\\u003eBytes position of the body of this type in its declaration file if available.\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)completeDeclarationRange\":{\"name\":\"completeDeclarationRange\",\"abstract\":\"\\u003cp\\u003eBytes position of the whole declaration of this type in its declaration file if available.\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)initializers\":{\"name\":\"initializers\",\"abstract\":\"\\u003cp\\u003eAll initializers defined in this type\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)annotations\":{\"name\":\"annotations\",\"abstract\":\"\\u003cp\\u003eAll annotations for this type\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)documentation\":{\"name\":\"documentation\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)staticVariables\":{\"name\":\"staticVariables\",\"abstract\":\"\\u003cp\\u003eStatic variables defined in this type\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)staticMethods\":{\"name\":\"staticMethods\",\"abstract\":\"\\u003cp\\u003eStatic methods defined in this type\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)classMethods\":{\"name\":\"classMethods\",\"abstract\":\"\\u003cp\\u003eClass methods defined in this type\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)instanceVariables\":{\"name\":\"instanceVariables\",\"abstract\":\"\\u003cp\\u003eInstance variables defined in this type\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)instanceMethods\":{\"name\":\"instanceMethods\",\"abstract\":\"\\u003cp\\u003eInstance methods defined in this type\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)computedVariables\":{\"name\":\"computedVariables\",\"abstract\":\"\\u003cp\\u003eComputed instance variables defined in this type\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)storedVariables\":{\"name\":\"storedVariables\",\"abstract\":\"\\u003cp\\u003eStored instance variables defined in this type\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)inheritedTypes\":{\"name\":\"inheritedTypes\",\"abstract\":\"\\u003cp\\u003eNames of types this type inherits from (for classes only) and protocols it implements, in order of definition\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)based\":{\"name\":\"based\",\"abstract\":\"\\u003cp\\u003eNames of types or protocols this type inherits from, including unknown (not scanned) types\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)basedTypes\":{\"name\":\"basedTypes\",\"abstract\":\"\\u003cp\\u003eTypes this type inherits from or implements, including unknown (not scanned) types with extensions defined\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)inherits\":{\"name\":\"inherits\",\"abstract\":\"\\u003cp\\u003eTypes this type inherits from\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)implements\":{\"name\":\"implements\",\"abstract\":\"\\u003cp\\u003eProtocols this type implements. Does not contain classes in case where composition (\\u003ccode\\u003e\\u0026amp;\\u003c/code\\u003e) is used in the declaration\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)containedTypes\":{\"name\":\"containedTypes\",\"abstract\":\"\\u003cp\\u003eContained types\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)containedType\":{\"name\":\"containedType\",\"abstract\":\"\\u003cp\\u003eContained types groupd by their names\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)parentName\":{\"name\":\"parentName\",\"abstract\":\"\\u003cp\\u003eName of parent type (for contained types only)\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)parent\":{\"name\":\"parent\",\"abstract\":\"\\u003cp\\u003eParent type, if known (for contained types only)\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)supertype\":{\"name\":\"supertype\",\"abstract\":\"\\u003cp\\u003eSuperclass type, if known (only for classes)\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)attributes\":{\"name\":\"attributes\",\"abstract\":\"\\u003cp\\u003eType attributes, i.e. \\u003ccode\\u003e@objc\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)modifiers\":{\"name\":\"modifiers\",\"abstract\":\"\\u003cp\\u003eType modifiers, i.e. \\u003ccode\\u003eprivate\\u003c/code\\u003e, \\u003ccode\\u003efinal\\u003c/code\\u003e\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)path\":{\"name\":\"path\",\"abstract\":\"\\u003cp\\u003ePath to file where the type is defined\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)directory\":{\"name\":\"directory\",\"abstract\":\"\\u003cp\\u003eDirectory to file where the type is defined\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)genericRequirements\":{\"name\":\"genericRequirements\",\"abstract\":\"\\u003cp\\u003elist of generic requirements\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/c:@M@SourceryRuntime@objc(cs)Type(py)fileName\":{\"name\":\"fileName\",\"abstract\":\"\\u003cp\\u003eFile name where the type was defined\\u003c/p\\u003e\",\"parent_name\":\"Type\"},\"Classes/Type.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"Type\"},\"Classes/Types.html#/c:@M@SourceryRuntime@objc(cs)Types(py)typealiases\":{\"name\":\"typealiases\",\"abstract\":\"\\u003cp\\u003eAll known typealiases\\u003c/p\\u003e\",\"parent_name\":\"Types\"},\"Classes/Types.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"parent_name\":\"Types\"},\"Classes/Types.html#/c:@M@SourceryRuntime@objc(cs)Types(py)all\":{\"name\":\"all\",\"abstract\":\"\\u003cp\\u003eAll known types, excluding protocols or protocol compositions.\\u003c/p\\u003e\",\"parent_name\":\"Types\"},\"Classes/Types.html#/c:@M@SourceryRuntime@objc(cs)Types(py)protocols\":{\"name\":\"protocols\",\"abstract\":\"\\u003cp\\u003eAll known protocols\\u003c/p\\u003e\",\"parent_name\":\"Types\"},\"Classes/Types.html#/c:@M@SourceryRuntime@objc(cs)Types(py)protocolCompositions\":{\"name\":\"protocolCompositions\",\"abstract\":\"\\u003cp\\u003eAll known protocol compositions\\u003c/p\\u003e\",\"parent_name\":\"Types\"},\"Classes/Types.html#/c:@M@SourceryRuntime@objc(cs)Types(py)classes\":{\"name\":\"classes\",\"abstract\":\"\\u003cp\\u003eAll known classes\\u003c/p\\u003e\",\"parent_name\":\"Types\"},\"Classes/Types.html#/c:@M@SourceryRuntime@objc(cs)Types(py)structs\":{\"name\":\"structs\",\"abstract\":\"\\u003cp\\u003eAll known structs\\u003c/p\\u003e\",\"parent_name\":\"Types\"},\"Classes/Types.html#/c:@M@SourceryRuntime@objc(cs)Types(py)enums\":{\"name\":\"enums\",\"abstract\":\"\\u003cp\\u003eAll known enums\\u003c/p\\u003e\",\"parent_name\":\"Types\"},\"Classes/Types.html#/c:@M@SourceryRuntime@objc(cs)Types(py)extensions\":{\"name\":\"extensions\",\"abstract\":\"\\u003cp\\u003eAll known extensions\\u003c/p\\u003e\",\"parent_name\":\"Types\"},\"Classes/Types.html#/c:@M@SourceryRuntime@objc(cs)Types(py)based\":{\"name\":\"based\",\"abstract\":\"\\u003cp\\u003eTypes based on any other type, grouped by its name, even if they are not known.\",\"parent_name\":\"Types\"},\"Classes/Types.html#/c:@M@SourceryRuntime@objc(cs)Types(py)inheriting\":{\"name\":\"inheriting\",\"abstract\":\"\\u003cp\\u003eClasses inheriting from any known class, grouped by its name.\",\"parent_name\":\"Types\"},\"Classes/Types.html#/c:@M@SourceryRuntime@objc(cs)Types(py)implementing\":{\"name\":\"implementing\",\"abstract\":\"\\u003cp\\u003eTypes implementing known protocol, grouped by its name.\",\"parent_name\":\"Types\"},\"Classes/Types.html\":{\"name\":\"Types\",\"abstract\":\"\\u003cp\\u003eCollection of scanned types for accessing in templates\\u003c/p\\u003e\"},\"Classes/Type.html\":{\"name\":\"Type\",\"abstract\":\"\\u003cp\\u003eDefines Swift type\\u003c/p\\u003e\"},\"Classes/Protocol.html\":{\"name\":\"Protocol\",\"abstract\":\"\\u003cp\\u003eDescribes Swift protocol\\u003c/p\\u003e\"},\"Classes/Class.html\":{\"name\":\"Class\",\"abstract\":\"\\u003cp\\u003eDescibes Swift class\\u003c/p\\u003e\"},\"Classes/Struct.html\":{\"name\":\"Struct\",\"abstract\":\"\\u003cp\\u003eDescribes Swift struct\\u003c/p\\u003e\"},\"Classes/Enum.html\":{\"name\":\"Enum\",\"abstract\":\"\\u003cp\\u003eDefines Swift enum\\u003c/p\\u003e\"},\"Classes/EnumCase.html\":{\"name\":\"EnumCase\",\"abstract\":\"\\u003cp\\u003eDefines enum case\\u003c/p\\u003e\"},\"Classes/AssociatedValue.html\":{\"name\":\"AssociatedValue\",\"abstract\":\"\\u003cp\\u003eDefines enum case associated value\\u003c/p\\u003e\"},\"Classes/AssociatedType.html\":{\"name\":\"AssociatedType\",\"abstract\":\"\\u003cp\\u003eDescribes Swift AssociatedType\\u003c/p\\u003e\"},\"Classes/Variable.html\":{\"name\":\"Variable\",\"abstract\":\"\\u003cp\\u003eDefines variable\\u003c/p\\u003e\"},\"Classes/Method.html\":{\"name\":\"Method\",\"abstract\":\"\\u003cp\\u003eDescribes method\\u003c/p\\u003e\"},\"Classes/MethodParameter.html\":{\"name\":\"MethodParameter\",\"abstract\":\"\\u003cp\\u003eDescribes method parameter\\u003c/p\\u003e\"},\"Classes/Subscript.html\":{\"name\":\"Subscript\",\"abstract\":\"\\u003cp\\u003eDescribes subscript\\u003c/p\\u003e\"},\"Classes/TypeName.html\":{\"name\":\"TypeName\",\"abstract\":\"\\u003cp\\u003eDescribes name of the type used in typed declaration (variable, method parameter or return value etc.)\\u003c/p\\u003e\"},\"Classes/TupleType.html\":{\"name\":\"TupleType\",\"abstract\":\"\\u003cp\\u003eDescribes tuple type\\u003c/p\\u003e\"},\"Classes/TupleElement.html\":{\"name\":\"TupleElement\",\"abstract\":\"\\u003cp\\u003eDescribes tuple type element\\u003c/p\\u003e\"},\"Classes/ArrayType.html\":{\"name\":\"ArrayType\",\"abstract\":\"\\u003cp\\u003eDescribes array type\\u003c/p\\u003e\"},\"Classes/DictionaryType.html\":{\"name\":\"DictionaryType\",\"abstract\":\"\\u003cp\\u003eDescribes dictionary type\\u003c/p\\u003e\"},\"Classes/ClosureType.html\":{\"name\":\"ClosureType\",\"abstract\":\"\\u003cp\\u003eDescribes closure type\\u003c/p\\u003e\"},\"Classes/GenericType.html\":{\"name\":\"GenericType\",\"abstract\":\"\\u003cp\\u003eDescibes Swift generic type\\u003c/p\\u003e\"},\"Classes/GenericTypeParameter.html\":{\"name\":\"GenericTypeParameter\",\"abstract\":\"\\u003cp\\u003eDescibes Swift generic type parameter\\u003c/p\\u003e\"},\"Classes/Attribute.html\":{\"name\":\"Attribute\",\"abstract\":\"\\u003cp\\u003eDescribes Swift attribute\\u003c/p\\u003e\"},\"Classes/ProtocolComposition.html\":{\"name\":\"ProtocolComposition\",\"abstract\":\"\\u003cp\\u003eDescribes a Swift \\u003ca href=\\\"https://docs.swift.org/swift-book/ReferenceManual/Types.html#ID454\\\"\\u003eprotocol composition\\u003c/a\\u003e.\\u003c/p\\u003e\"},\"Protocols/Diffable.html#/s:15SourceryRuntime8DiffableP11diffAgainstyAA0C6ResultCypSgF\":{\"name\":\"diffAgainst(_:)\",\"abstract\":\"\\u003cp\\u003eReturns \\u003ccode\\u003e\\u003ca href=\\\"36f8f5912051ae747ef441d6511ca4cbClasses/DiffableResult.html\\\"\\u003eDiffableResult\\u003c/a\\u003e\\u003c/code\\u003e for the given objects.\\u003c/p\\u003e\",\"parent_name\":\"Diffable\"},\"equatable.html\":{\"name\":\"Equatable\"},\"hashable.html\":{\"name\":\"Hashable\"},\"enum-cases.html\":{\"name\":\"Enum cases\"},\"lenses.html\":{\"name\":\"Lenses\"},\"mocks.html\":{\"name\":\"Mocks\"},\"codable.html\":{\"name\":\"Codable\"},\"Protocols/Diffable.html\":{\"name\":\"Diffable\"},\"diffable.html\":{\"name\":\"Diffable\"},\"linuxmain.html\":{\"name\":\"LinuxMain\"},\"decorator.html\":{\"name\":\"Decorator\"},\"installing.html\":{\"name\":\"Installing\"},\"usage.html\":{\"name\":\"Usage\"},\"writing-templates.html\":{\"name\":\"Writing templates\"},\"Guides.html\":{\"name\":\"Guides\"},\"Examples.html\":{\"name\":\"Examples\"},\"Types.html\":{\"name\":\"Types\"},\"Other%20Classes.html\":{\"name\":\"Other Classes\",\"abstract\":\"\\u003cp\\u003eThe following classes are available globally.\\u003c/p\\u003e\"},\"Other%20Enums.html\":{\"name\":\"Other Enumerations\",\"abstract\":\"\\u003cp\\u003eThe following enumerations are available globally.\\u003c/p\\u003e\"},\"Other%20Extensions.html\":{\"name\":\"Other Extensions\",\"abstract\":\"\\u003cp\\u003eThe following extensions are available globally.\\u003c/p\\u003e\"},\"Other%20Protocols.html\":{\"name\":\"Other Protocols\",\"abstract\":\"\\u003cp\\u003eThe following protocols are available globally.\\u003c/p\\u003e\"},\"Other%20Typealiases.html\":{\"name\":\"Other Type Aliases\",\"abstract\":\"\\u003cp\\u003eThe following type aliases are available globally.\\u003c/p\\u003e\"}}"
  },
  {
    "path": "docs/usage.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Usage  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a title=\"Usage  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Usage  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            \n            <h2 id='usage' class='heading'>Usage</h2>\n\n<p>Sourcery is a command line tool, you can either run it manually or in a custom build phase using following command:</p>\n<pre class=\"highlight plaintext\"><code>$ ./sourcery --sources &lt;sources path&gt; --templates &lt;templates path&gt; --output &lt;output path&gt;\n</code></pre>\n<div class=\"aside aside-note\">\n    <p class=\"aside-title\">Note</p>\n    <p>this command may be different depending on the way in which you installed Sourcery (see <a href=\"installing.html\">Installing</a>)</p>\n\n</div>\n<h3 id='command-line-options' class='heading'>Command line options</h3>\n\n<ul>\n<li><code>--sources</code> - Path to a source swift files. You can provide multiple paths using multiple <code>--sources</code> option.</li>\n<li><code>--templates</code> - Path to templates. File or Directory. You can provide multiple paths using multiple <code>--templates</code> options.</li>\n<li><code>--output</code> [default: current path] - Path to output. File or Directory.</li>\n<li><code>--config</code> [default: current path] - Path to config file. File or Directory. See <a href=\"usage.html#configuration-file\">Configuration file</a>.</li>\n<li><code>--args</code> - Additional arguments to pass to templates. Each argument can have explicit value or will have implicit <code>true</code> value. Arguments should be separated with <code>,</code> without spaces (i.e. <code>--args arg1=value,arg2</code>) or should be passed one by one (i.e <code>--args arg1=value --args arg2</code>). Arguments are accessible in templates via <code>argument.name</code>. To pass in string you should use escaped quotes (<code>\\&quot;</code>) .</li>\n<li><code>--watch</code> [default: false] - Watch both code and template folders for changes and regenerate automatically.</li>\n<li><code>--verbose</code> [default: false] - Turn on verbose logging</li>\n<li><code>--quiet</code> [default: false] - Turn off any logging, only emit errors</li>\n<li><code>--disableCache</code> [default: false] - Turn off caching of parsed data</li>\n<li><code>--prune</code> [default: false] - Prune empty generated files</li>\n<li><code>--version</code> - Display the current version of Sourcery</li>\n<li><code>--help</code> - Display help information.</li>\n<li><code>--cacheBasePath</code> - Path to Sourcery internal cache (available only in configuration file)</li>\n<li><code>--parseDocumentation</code>  [default: false] - Include documentation comments for all declarations.</li>\n</ul>\n\n<p>Use <code>--help</code> to see the list of all available options.</p>\n<h3 id='configuration-file' class='heading'>Configuration file</h3>\n\n<p>You can also provide arguments using configuration file. Some of the configuration features (like excluding files) are only \navailable when using configuration file. You provide path to this file using <code>--config</code> command line option.\nIf you provide a path to a directory Sourcery will search for a file <code>.sourcery.yml</code> in this directory. You can also provide\na path to config file itself. By default Sourcery will search for <code>.sourcery.yml</code> in your current path.</p>\n\n<p>Configuration file should be a valid Yaml file, like this:</p>\n<pre class=\"highlight yaml\"><code><span class=\"na\">sources</span><span class=\"pi\">:</span>\n  <span class=\"pi\">-</span> <span class=\"s\">&lt;sources path&gt;</span> <span class=\"c1\"># you can provide either single path or several paths using `-`</span>\n  <span class=\"pi\">-</span> <span class=\"s\">&lt;sources path&gt;</span>\n<span class=\"na\">templates</span><span class=\"pi\">:</span>\n  <span class=\"pi\">-</span> <span class=\"s\">&lt;templates path&gt;</span> <span class=\"c1\"># as well as for templates</span>\n  <span class=\"pi\">-</span> <span class=\"s\">&lt;templates path&gt;</span>\n<span class=\"na\">output</span><span class=\"pi\">:</span>\n  <span class=\"s\">&lt;output path&gt;</span> <span class=\"c1\"># note that there is no `-` here as only single output path is supported</span>\n<span class=\"na\">args</span><span class=\"pi\">:</span>\n  <span class=\"na\">&lt;name&gt;</span><span class=\"pi\">:</span> <span class=\"s\">&lt;value&gt;</span>\n</code></pre>\n<h4 id='multiple-configurations' class='heading'>Multiple configurations</h4>\n\n<p>You can pass multiple paths to configuration files using multiple <code>--config</code> command line options.\nSingle configuration file can contain multiple configurations under root <code>configurations</code> key:</p>\n<pre class=\"highlight yaml\"><code><span class=\"na\">configurations</span><span class=\"pi\">:</span>\n    <span class=\"pi\">-</span> <span class=\"na\">sources</span><span class=\"pi\">:</span>\n        <span class=\"pi\">-</span> <span class=\"s\">&lt;sources path&gt;</span>\n        <span class=\"pi\">-</span> <span class=\"s\">&lt;sources path&gt;</span>\n      <span class=\"na\">templates</span><span class=\"pi\">:</span>\n        <span class=\"pi\">-</span> <span class=\"s\">&lt;templates path&gt;</span>\n      <span class=\"na\">output</span><span class=\"pi\">:</span> <span class=\"s\">&lt;output path&gt;</span>\n      <span class=\"na\">args</span><span class=\"pi\">:</span>\n        <span class=\"na\">&lt;name&gt;</span><span class=\"pi\">:</span> <span class=\"s\">&lt;value&gt;</span>\n        <span class=\"na\">&lt;name&gt;</span><span class=\"pi\">:</span> <span class=\"s\">&lt;value&gt;</span>\n    <span class=\"pi\">-</span> <span class=\"na\">sources</span><span class=\"pi\">:</span>\n        <span class=\"pi\">-</span> <span class=\"s\">&lt;sources path&gt;</span>\n        <span class=\"pi\">-</span> <span class=\"s\">&lt;sources path&gt;</span>\n      <span class=\"na\">templates</span><span class=\"pi\">:</span>\n        <span class=\"pi\">-</span> <span class=\"s\">&lt;templates path&gt;</span>\n      <span class=\"na\">output</span><span class=\"pi\">:</span> <span class=\"s\">&lt;output path&gt;</span>\n      <span class=\"na\">args</span><span class=\"pi\">:</span>\n        <span class=\"na\">&lt;name&gt;</span><span class=\"pi\">:</span> <span class=\"s\">&lt;value&gt;</span>\n        <span class=\"na\">&lt;name&gt;</span><span class=\"pi\">:</span> <span class=\"s\">&lt;value&gt;</span>\n</code></pre>\n\n<p>This will be equivalent to running Sourcery separately for each of the configurations. In watch mode Sourcery will observe changes in the paths from all the configurations.</p>\n<h4 id='child-configurations' class='heading'>Child configurations</h4>\n\n<p>You can specify a child configurations by using the <code>child</code> key:</p>\n<pre class=\"highlight yaml\"><code><span class=\"na\">configurations</span><span class=\"pi\">:</span>\n    <span class=\"pi\">-</span> <span class=\"na\">child</span><span class=\"pi\">:</span> <span class=\"s\">./.child_config.yml</span>\n    <span class=\"pi\">-</span> <span class=\"na\">child</span><span class=\"pi\">:</span> <span class=\"s\">Subdirectory/.another_child_config.yml</span>\n</code></pre>\n\n<p>Sources will be resolved relative to the child config paths.</p>\n<h4 id='sources' class='heading'>Sources</h4>\n\n<p>You can provide sources using paths to directories or specific files.</p>\n<pre class=\"highlight yaml\"><code><span class=\"na\">sources</span><span class=\"pi\">:</span>\n  <span class=\"pi\">-</span> <span class=\"s\">&lt;sources dir path&gt;</span>\n  <span class=\"pi\">-</span> <span class=\"s\">&lt;source file path&gt;</span>\n</code></pre>\n\n<p>Or you can provide project which will be scanned and which source files will be processed. You can use several <code>project</code> or <code>target</code> objects to scan multiple targets from one project or to scan multiple projects. You can provide paths to XCFramework files if your target has any and you want to process their <code>swiftinterface</code> files.</p>\n<pre class=\"highlight yaml\"><code><span class=\"na\">project</span><span class=\"pi\">:</span>\n  <span class=\"na\">file</span><span class=\"pi\">:</span> <span class=\"s\">&lt;path to xcodeproj file&gt;</span>\n  <span class=\"na\">target</span><span class=\"pi\">:</span>\n    <span class=\"na\">name</span><span class=\"pi\">:</span> <span class=\"s\">&lt;target name&gt;</span>\n    <span class=\"na\">module</span><span class=\"pi\">:</span> <span class=\"s\">&lt;module name&gt; //required if different from target name</span>\n    <span class=\"na\">xcframeworks</span><span class=\"pi\">:</span>\n        <span class=\"pi\">-</span> <span class=\"s\">&lt;path to xcframework file&gt;</span>\n        <span class=\"pi\">-</span> <span class=\"s\">&lt;path to xcframework file&gt;</span>\n</code></pre>\n\n<p>You can also provide a Swift Package which will be scanned. Source files will be scanned based on the package&rsquo;s <code>path</code> and <code>exclude</code> options.</p>\n<pre class=\"highlight yaml\"><code><span class=\"na\">package</span><span class=\"pi\">:</span>\n  <span class=\"na\">path</span><span class=\"pi\">:</span> <span class=\"s\">&lt;path to to the Package.swift root directory&gt;</span>\n  <span class=\"na\">target</span><span class=\"pi\">:</span> <span class=\"s\">&lt;target name&gt;</span>\n</code></pre>\n\n<p>Multiple targets:</p>\n<pre class=\"highlight yaml\"><code><span class=\"na\">package</span><span class=\"pi\">:</span>\n  <span class=\"na\">path</span><span class=\"pi\">:</span> <span class=\"s\">&lt;path to to the Package.swift root directory&gt;</span>\n  <span class=\"na\">target</span><span class=\"pi\">:</span>\n    <span class=\"pi\">-</span> <span class=\"s\">&lt;target name&gt;</span>\n    <span class=\"pi\">-</span> <span class=\"s\">&lt;target name&gt;</span>\n</code></pre>\n<h4 id='excluding-sources-or-templates' class='heading'>Excluding sources or templates</h4>\n\n<p>You can specify paths to sources files that should be scanned using <code>include</code> key and paths that should be excluded using <code>exclude</code> key. These can be directory or file paths.</p>\n<pre class=\"highlight yaml\"><code><span class=\"na\">sources</span><span class=\"pi\">:</span>\n  <span class=\"na\">include</span><span class=\"pi\">:</span>\n    <span class=\"pi\">-</span> <span class=\"s\">&lt;sources path to include&gt;</span>\n    <span class=\"pi\">-</span> <span class=\"s\">&lt;sources path to include&gt;</span>\n  <span class=\"na\">exclude</span><span class=\"pi\">:</span>\n    <span class=\"pi\">-</span> <span class=\"s\">&lt;sources path to exclude&gt;</span>\n    <span class=\"pi\">-</span> <span class=\"s\">&lt;sources path to exclude&gt;</span>\n</code></pre>\n\n<p>You can also specify path to include and exclude for templates.\nWhen source is a project you can use <code>exclude</code> key to exclude some of its source files.</p>\n<pre class=\"highlight yaml\"><code><span class=\"na\">project</span><span class=\"pi\">:</span>\n  <span class=\"na\">file</span><span class=\"pi\">:</span> <span class=\"s\">...</span>\n  <span class=\"na\">target</span><span class=\"pi\">:</span> <span class=\"s\">...</span>\n  <span class=\"na\">exclude</span><span class=\"pi\">:</span>\n    <span class=\"pi\">-</span> <span class=\"s\">&lt;sources path&gt;</span>\n    <span class=\"pi\">-</span> <span class=\"s\">&lt;sources path&gt;</span>\n</code></pre>\n<h4 id='output' class='heading'>Output</h4>\n\n<p>You can specify the output file using <code>output</code> key. This can be a directory path or a file path. If it&rsquo;s a file path, all generated content will be written into this file. If it&rsquo;s a directory path, for each template a separate file will be created with <code>TemplateName.generated.swift</code> name.</p>\n<pre class=\"highlight yaml\"><code><span class=\"na\">output</span><span class=\"pi\">:</span>\n  <span class=\"s\">&lt;output path&gt;</span>\n</code></pre>\n\n<p>Alternatively you can use <code>path</code> key to specify output path.</p>\n<pre class=\"highlight yaml\"><code><span class=\"na\">output</span><span class=\"pi\">:</span>\n  <span class=\"na\">path</span><span class=\"pi\">:</span> <span class=\"s\">&lt;output path&gt;</span>\n</code></pre>\n\n<p>You can use optional <code>link</code> key to automatically link generated files to some target.</p>\n<pre class=\"highlight yaml\"><code><span class=\"na\">output</span><span class=\"pi\">:</span>\n  <span class=\"na\">path</span><span class=\"pi\">:</span> <span class=\"s\">&lt;output path&gt;</span>\n  <span class=\"na\">link</span><span class=\"pi\">:</span>\n    <span class=\"na\">project</span><span class=\"pi\">:</span> <span class=\"s\">&lt;path to the xcodeproj to link to&gt;</span>\n    <span class=\"na\">target</span><span class=\"pi\">:</span> <span class=\"na\">&lt;name of the target to link to&gt; // or targets</span><span class=\"pi\">:</span> <span class=\"pi\">[</span><span class=\"nv\">target1</span><span class=\"pi\">,</span> <span class=\"nv\">target2</span><span class=\"pi\">,</span> <span class=\"nv\">...</span><span class=\"pi\">]</span>\n    <span class=\"na\">group</span><span class=\"pi\">:</span> <span class=\"s\">&lt;group in the project to add files to&gt; // by default files are added to project's root group</span>\n</code></pre>\n<div class=\"aside aside-note\">\n    <p class=\"aside-title\">Note</p>\n    <p>Paths in configuration file are by default relative to configuration file path. If you want to specify absolute path start it with <code>/</code>.</p>\n\n</div>\n\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/writing-templates.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Writing templates  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jazzy.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"css/highlight.css\" />\n    <meta charset='utf-8'>\n    <script src=\"js/jquery.min.js\" defer></script>\n    <script src=\"js/jazzy.js\" defer></script>\n    \n    <script src=\"js/lunr.min.js\" defer></script>\n    <script src=\"js/typeahead.jquery.js\" defer></script>\n    <script src=\"js/jazzy.search.js\" defer></script>\n  </head>\n  <body>\n    <a title=\"Writing templates  Reference\"></a>\n    <header>\n      <div class=\"content-wrapper\">\n        <p><a href=\"index.html\">Sourcery 2.3.0 Docs</a> (100% documented)</p>\n        <p class=\"header-right\"><a href=\"https://github.com/krzysztofzablocki/Sourcery\"><img src=\"img/gh.png\"/>View on GitHub</a></p>\n        <p class=\"header-right\">\n          <form role=\"search\" action=\"search.json\">\n            <input type=\"text\" placeholder=\"Search documentation\" data-typeahead>\n          </form>\n        </p>\n      </div>\n    </header>\n    <div class=\"content-wrapper\">\n      <p id=\"breadcrumbs\">\n        <a href=\"index.html\">Sourcery Reference</a>\n        <img id=\"carat\" src=\"img/carat.png\" />\n        Writing templates  Reference\n      </p>\n    </div>\n    <div class=\"content-wrapper\">\n      <nav class=\"sidebar\">\n        <ul class=\"nav-groups\">\n          <li class=\"nav-group-name\">\n            <a href=\"Guides.html\">Guides</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"installing.html\">Installing</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"usage.html\">Usage</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"writing-templates.html\">Writing templates</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Examples.html\">Examples</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"equatable.html\">Equatable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"hashable.html\">Hashable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"enum-cases.html\">Enum cases</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"lenses.html\">Lenses</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"mocks.html\">Mocks</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"codable.html\">Codable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"diffable.html\">Diffable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"linuxmain.html\">LinuxMain</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"decorator.html\">Decorator</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Types.html\">Types</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Types.html\">Types</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Type.html\">Type</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Protocol.html\">Protocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Class.html\">Class</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Struct.html\">Struct</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Enum.html\">Enum</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/EnumCase.html\">EnumCase</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedValue.html\">AssociatedValue</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/AssociatedType.html\">AssociatedType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Variable.html\">Variable</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Method.html\">Method</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/MethodParameter.html\">MethodParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Subscript.html\">Subscript</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TypeName.html\">TypeName</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleType.html\">TupleType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/TupleElement.html\">TupleElement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ArrayType.html\">ArrayType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DictionaryType.html\">DictionaryType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureType.html\">ClosureType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericType.html\">GenericType</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericTypeParameter.html\">GenericTypeParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Attribute.html\">Attribute</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ProtocolComposition.html\">ProtocolComposition</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Classes.html\">Other Classes</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Actor.html\">Actor</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/ClosureParameter.html\">ClosureParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/DiffableResult.html\">DiffableResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericParameter.html\">GenericParameter</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement.html\">GenericRequirement</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/GenericRequirement/Relationship.html\">– Relationship</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Import.html\">Import</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/Modifier.html\">Modifier</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Classes/SetType.html\">SetType</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Enums.html\">Other Enumerations</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Enums/Composer.html\">Composer</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Extensions.html\">Other Extensions</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Array.html\">Array</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange\">BytesRange</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult\">FileParserResult</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/String.html\">String</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/StringProtocol.html\">StringProtocol</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Extensions/Typealias.html\">Typealias</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Protocols.html\">Other Protocols</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Annotated.html\">Annotated</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Definition.html\">Definition</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Documented.html\">Documented</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Protocols/Typed.html\">Typed</a>\n              </li>\n            </ul>\n          </li>\n          <li class=\"nav-group-name\">\n            <a href=\"Other%20Typealiases.html\">Other Type Aliases</a>\n            <ul class=\"nav-group-tasks\">\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa\">Annotations</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa\">Documentation</a>\n              </li>\n              <li class=\"nav-group-task\">\n                <a href=\"Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera\">SourceryModifier</a>\n              </li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n      <article class=\"main-content\">\n        <section>\n          <section class=\"section\">\n            \n            <h2 id='writing-templates' class='heading'>Writing templates</h2>\n\n<p>Sourcery supports templates written in Stencil, Swift and even JavaScript.</p>\n\n<p>Discovered types can be accessed in templates via global context with following properties:</p>\n\n<ul>\n<li><code>types: Types</code> - access collections of types, i.e. <code>types.implementing.AutoCoding</code> (<code>types.implementing[&quot;AutoCoding&quot;]</code> in swift templates). See <a href=\"https://krzysztofzablocki.github.io/Sourcery/Classes/Types.html\">Types</a>.</li>\n<li><code>type: [String: Type]</code> - access types by their names, i.e. <code>type.MyType</code> (<code>type[&quot;MyType&quot;]</code> in swift templates)</li>\n<li><code>arguments: [String: NSObject]</code> - access additional parameters passed with <code>--args</code> command line flag or set in <code>.sourcery.yml</code> file</li>\n</ul>\n<div class=\"aside aside-tip\">\n    <p class=\"aside-title\">Tip</p>\n    <p>Make sure you leverage Sourcery built-in daemon to make writing templates a pleasure:\nyou can open template side-by-side with generated code and see it change live.</p>\n\n</div>\n<h2 id='what-are-em-known-em-and-em-unknown-em-types' class='heading'>What are <em>known</em> and <em>unknown</em> types</h2>\n\n<p>Currently Sourcery only scans files from paths or targets that you tell it to scan. This way it can get full information about types <em>defined</em> in these sources. These types are considered <em>known</em> types. For each of known types Sourcery provides <code><a href=\"Classes/Type.html\">Type</a></code> object. You can get it for example by its name from <code>types</code> collection. <code><a href=\"Classes/Type.html\">Type</a></code> object contains information about whether type that it describes is a struct, enum, class or a protocol, what are its properties and methods, what protocols it implements and so on. This is done recursively, so if you have a class that inherits from another class (or struct that implements a protocol) and they are both known types you will have information about both of them and you will be able to access parent type&rsquo;s <code><a href=\"Classes/Type.html\">Type</a></code> object using <code>type.inherits.TypeName</code> (or <code>type.implements.ProtocolName</code>).</p>\n\n<p>Everything <em>defined</em> outside of scanned sources is considered as <em>unknown</em> types. For such types Sourcery doesn&rsquo;t provide <code><a href=\"Classes/Type.html\">Type</a></code> object. For that reason variables (and other &ldquo;typed&rdquo; types, like method parameters etc.) of such types will only contain <code>typeName</code> property, but their <code>type</code> property will be <code>nil</code>.</p>\n\n<p>If you have an extension of unknown type defined in scanned sources Sourcery will create <code><a href=\"Classes/Type.html\">Type</a></code> for it (it&rsquo;s <code>kind</code> property will be <code>extension</code>). But this object will contain only declarations defined in this extension. Several extensions of unknown type will be merged into one <code><a href=\"Classes/Type.html\">Type</a></code> object the same way as extensions of known types.</p>\n\n<p>See <a href=\"https://github.com/krzysztofzablocki/Sourcery/issues/87\">#87</a> for details.</p>\n<h2 id='stencil-templates' class='heading'>Stencil templates</h2>\n\n<p><a href=\"http://stencil.fuller.li/en/latest/\">Stencil</a> is a simple and powerful template language for Swift. It provides a syntax similar to Django and Mustache.\nSourcery also uses its extension <a href=\"https://github.com/SwiftGen/StencilSwiftKit\">StencilSwiftKit</a> so you have access to additional nodes and filteres defined there.</p>\n\n<p><strong>Example</strong>: <a href=\"https://github.com/krzysztofzablocki/Sourcery/blob/master/Sourcery/Templates/Equality.stencil\">Equality.stencil</a></p>\n<h3 id='custom-stencil-tags-and-filters' class='heading'>Custom Stencil tags and filters</h3>\n\n<ul>\n<li><code>{{ name|upperFirstLetter }}</code> - makes first letter in <code>name</code> uppercase</li>\n<li><code>{{ name|lowerFirstLetter }}</code> - makes first letter in <code>name</code> lowercase</li>\n<li><code>{{ name|replace:&quot;substring&quot;,&quot;replacement&quot; }}</code> - replaces occurrences of <code>substring</code> with <code>replacement</code> in <code>name</code> (case sensitive)</li>\n<li><code>{% if name|contains:&quot;Foo&quot; %}</code> - check if <code>name</code> contains arbitrary substring, can be negated with <code>!</code> prefix.</li>\n<li><code>{% if name|hasPrefix:&quot;Foo&quot; %}</code>- check if <code>name</code> starts with arbitrary substring, can be negated with <code>!</code> prefix.</li>\n<li><code>{% if name|hasSuffix:&quot;Foo&quot; %}</code>- check if <code>name</code> ends with arbitrary substring, can be negated with <code>!</code> prefix.</li>\n<li><code>static</code>, <code>instance</code>, <code>computed</code>, <code>stored</code>, <code>tuple</code> - can be used on Variable[s] as filter e.g. <code>{% for var in variables|instance %}</code>, can be negated with <code>!</code> prefix.</li>\n<li><code>static</code>, <code>instance</code>, <code>class</code>, <code>initializer</code> - can be used on Method[s] as filter e.g. <code>{% for method in allMethods|instance %}</code>, can be negated with <code>!</code> prefix.</li>\n<li><code>enum</code>, <code>class</code>, <code>struct</code>, <code>protocol</code> - can be used for Type[s] as filter, can be negated with <code>!</code> prefix.</li>\n<li><code>based</code>, <code>implements</code>, <code>inherits</code> - can be used for Type[s], Variable[s], Associated value[s], can be negated with <code>!</code> prefix.</li>\n<li><code>count</code> - can be used to get count of filtered array</li>\n<li><code>annotated</code> - can be used on Type[s], Variable[s], Method[s] and Enum Case[s] to filter by annotation, e.g. <code>{% for var in variable|annotated:&quot;skipDescription&quot; %}</code>, can be negated with <code>!</code> prefix.</li>\n<li><code>public</code>, <code>open</code>, <code>internal</code>, <code>private</code>, <code>fileprivate</code> - can be used on Type[s] and Method[s] to filter by access level, can be negated with <code>!</code> prefix.</li>\n<li><code>publicGet</code>, <code>publicSet</code>, .etc - can be used on Variable[s] to filter by getter or setter access level, can be negated with <code>!</code> prefix</li>\n</ul>\n\n<p>You can also use partial templates using <code>include</code> tag. Partial template is loaded from the path of a template that includes it. <code>include</code> tags also supports loading templates from relative path, i.e. <code>{% include &quot;partials/MyPartial.stencil&quot;%}</code> used in the template located in <code>templates</code> directory will load template from <code>templates/partials</code> directory.</p>\n<div class=\"aside aside-note\">\n    <p class=\"aside-title\">Note</p>\n    <p>You can only load partial templates from child directories of the including template directory, so <code>{% include &quot;../MyPartial.stencil&quot;%}</code> is not supported.</p>\n\n</div>\n\n<p>Sourcery treats all the templates as independent and so will generate files based on partial templates too. To avoid that use <code>exclude</code> in <a href=\"usage.html#configuration-file\">configuration file</a>.</p>\n<h2 id='swift-templates' class='heading'>Swift templates</h2>\n\n<p>Swift templates syntax is very similar to EJS:</p>\n\n<ul>\n<li>Control flow with <code>&lt;% %&gt;</code></li>\n<li>Output value with <code>&lt;%= %&gt;</code></li>\n<li>Trim extra new line after control flow tag with <code>-%&gt;</code></li>\n<li>Trim <em>all</em> whitespaces before/after control flow tag with <code>&lt;%_</code> and <code>_%&gt;</code></li>\n<li>Use <code>&lt;%# %&gt;</code> for comments</li>\n<li>Use <code>&lt;%- include(&quot;relative_path_to_template.swifttemplate&quot;) %&gt;</code> to include another template. The <code>swifttemplate</code> extension can be omitted. The path is relative to the including template.</li>\n<li>Use <code>&lt;%- includeFile(&quot;relative_path_to_file.swift&quot;) %&gt;</code> to include another Swift file.  The path is relative to the including template.  Included Swift files <em>may</em> depend upon <code>SourceryRuntime</code> module, as this will be injected during processing.</li>\n</ul>\n\n<p><strong>Example</strong>: <a href=\"https://github.com/krzysztofzablocki/Sourcery/blob/master/SourceryTests/Stub/SwiftTemplates/Equality.swifttemplate\">Equality.swifttemplate</a></p>\n\n<p>Template:</p>\n<pre class=\"highlight swift\"><code><span class=\"o\">&lt;%</span> <span class=\"k\">for</span> <span class=\"n\">type</span> <span class=\"k\">in</span> <span class=\"n\">types</span><span class=\"o\">.</span><span class=\"n\">all</span> <span class=\"p\">{</span> <span class=\"o\">-%&gt;</span>\n  <span class=\"o\">&lt;%</span><span class=\"n\">_</span> <span class=\"o\">%&gt;&lt;%=</span> <span class=\"n\">type</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">%&gt;</span>\n<span class=\"o\">&lt;%</span> <span class=\"p\">}</span> <span class=\"o\">%&gt;</span>\n</code></pre>\n\n<p>Output:</p>\n<pre class=\"highlight swift\"><code><span class=\"kt\">Foo</span>\n<span class=\"kt\">Bar</span>\n</code></pre>\n<h2 id='javascript-templates' class='heading'>JavaScript templates</h2>\n\n<p>JavaScript templates are powered by <a href=\"http://ejs.co\">EJS</a> and support all the features available in this template engine.</p>\n\n<p><strong>Example</strong>: <a href=\"https://github.com/krzysztofzablocki/Sourcery/blob/master/Sourcery/Templates/JSExport.ejs\">JSExport.ejs</a></p>\n<div class=\"aside aside-note\">\n    <p class=\"aside-title\">Note</p>\n    <p>when using JavaScript templates with Sourcery built using Swift Package Manager you must provide path to EJS source code using <code>--ejsPath</code> command line argument. Download EJS source code <a href=\"https://github.com/krzysztofzablocki/Sourcery/blob/master/SourceryJS/Sources/ejs.js\">here</a>, put it in some path and pass it when running Sourcery. Otherwise JavaScript templates will be ignored (you will see a warning in the console output).</p>\n\n</div>\n\n<p>You can also use <code>SourceryJS</code> framework independently of Sourcery. You can add it as a Carthage or SPM dependency.</p>\n<h2 id='using-source-annotations' class='heading'>Using Source Annotations</h2>\n\n<p>Sourcery supports annotating your classes and variables with special annotations, similar to how attributes work in Rust / Java</p>\n<pre class=\"highlight swift\"><code><span class=\"c1\">// sourcery: skipPersistence</span>\n<span class=\"c1\">// sourcery: anotherAnnotation = 232, yetAnotherAnnotation = \"value\"</span>\n<span class=\"c1\">/// Some documentation comment</span>\n<span class=\"k\">var</span> <span class=\"nv\">precomputedHash</span><span class=\"p\">:</span> <span class=\"kt\">Int</span>\n</code></pre>\n\n<p>You can also add attributes to the end of a line of code:</p>\n<pre class=\"highlight swift\"><code><span class=\"k\">var</span> <span class=\"nv\">firstVariable</span><span class=\"p\">:</span> <span class=\"kt\">Int</span> <span class=\"c1\">// default = 1</span>\n<span class=\"k\">var</span> <span class=\"nv\">secondVariable</span><span class=\"p\">:</span> <span class=\"kt\">Int</span> <span class=\"c1\">// default = 2</span>\n</code></pre>\n\n<p>If you want to attribute multiple items with same attributes, you can use section annotations <code>sourcery:begin</code> and <code>sourcery:end</code>:</p>\n<pre class=\"highlight swift\"><code><span class=\"c1\">// sourcery:begin: skipEquality, skipPersistence</span>\n  <span class=\"k\">var</span> <span class=\"nv\">firstVariable</span><span class=\"p\">:</span> <span class=\"kt\">Int</span>\n  <span class=\"k\">var</span> <span class=\"nv\">secondVariable</span><span class=\"p\">:</span> <span class=\"kt\">Int</span>\n<span class=\"c1\">// sourcery:end</span>\n</code></pre>\n\n<p>To attribute any declaration in the file use <code>sourcery:file</code> at the top of the file:</p>\n<pre class=\"highlight swift\"><code><span class=\"c1\">// sourcery:file: skipEquality</span>\n  <span class=\"k\">var</span> <span class=\"nv\">firstVariable</span><span class=\"p\">:</span> <span class=\"kt\">Int</span>\n  <span class=\"k\">var</span> <span class=\"nv\">secondVariable</span><span class=\"p\">:</span> <span class=\"kt\">Int</span>\n</code></pre>\n\n<p>To group annotations of the same domain you can use annotation namespaces:</p>\n<pre class=\"highlight swift\"><code><span class=\"c1\">// sourcery:decoding: key=\"first\", default=0</span>\n  <span class=\"k\">var</span> <span class=\"nv\">firstVariable</span><span class=\"p\">:</span> <span class=\"kt\">Int</span>\n</code></pre>\n\n<p>This will effectively annotate with <code>decoding.key</code> and <code>decoding.default</code> annotations</p>\n<h4 id='rules' class='heading'>Rules:</h4>\n\n<ul>\n<li>Multiple annotations can occur on the same line, separated with <code>,</code></li>\n<li>You can add multiline annotations</li>\n<li>Multiple annotations values with the same key are merged into array</li>\n<li>You can interleave annotations with documentation</li>\n<li>Sourcery scans all <code>sourcery:</code> annotations in the given comment block above the source until first non-comment/doc line</li>\n<li>Annotations at the end of a line will be applied to all declarations on the same line</li>\n<li>Using <code>/*</code> and <code>*/</code> for annotation comment you can put annotations on the same line preceding your declaration. This is useful for annotating methods parameters and enum case associated values. All such annotations should be placed in one comment block. Do not mix inline and regular annotations for the same declaration (using inline and block annotations is fine)!</li>\n</ul>\n<h4 id='format' class='heading'>Format:</h4>\n\n<ul>\n<li>simple entry, e.g. <code>sourcery: skipPersistence</code></li>\n<li>key = number, e.g. <code>sourcery: another = 123</code></li>\n<li>key = string, e.g. <code>sourcery: jsonKey = &quot;json_key&quot;</code></li>\n</ul>\n<h4 id='accessing-in-templates' class='heading'>Accessing in templates:</h4>\n<pre class=\"highlight swift\"><code><span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">if</span> <span class=\"n\">variable</span><span class=\"o\">|!</span><span class=\"nv\">annotated</span><span class=\"p\">:</span><span class=\"s\">\"skipPersistence\"</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n  <span class=\"k\">var</span> <span class=\"nv\">local</span><span class=\"p\">{{</span> <span class=\"n\">variable</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"o\">|</span><span class=\"n\">capitalize</span> <span class=\"p\">}}</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"p\">[</span><span class=\"s\">\"{{ variable.annotations.jsonKey }}\"</span><span class=\"p\">]</span> <span class=\"k\">as?</span> <span class=\"p\">{{</span> <span class=\"n\">variable</span><span class=\"o\">.</span><span class=\"n\">typeName</span> <span class=\"p\">}}</span>\n<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endif</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n</code></pre>\n<h4 id='checking-for-existence-of-at-least-one-annotation' class='heading'>Checking for existence of at least one annotation:</h4>\n\n<p>Sometimes it is desirable to only generate code if there&rsquo;s at least one field annotated.</p>\n<pre class=\"highlight swift\"><code><span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">if</span> <span class=\"n\">type</span><span class=\"o\">.</span><span class=\"n\">variables</span><span class=\"o\">|</span><span class=\"nv\">annotated</span><span class=\"p\">:</span><span class=\"s\">\"jsonKey\"</span> <span class=\"o\">%</span><span class=\"p\">}{</span><span class=\"o\">%</span> <span class=\"k\">for</span> <span class=\"k\">var</span> <span class=\"nv\">in</span> <span class=\"n\">type</span><span class=\"o\">.</span><span class=\"n\">variables</span><span class=\"o\">|</span><span class=\"n\">instance</span><span class=\"o\">|</span><span class=\"nv\">annotated</span><span class=\"p\">:</span><span class=\"s\">\"jsonKey\"</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n  <span class=\"k\">var</span> <span class=\"nv\">local</span><span class=\"p\">{{</span> <span class=\"kd\">var</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"o\">|</span><span class=\"n\">capitalize</span> <span class=\"p\">}}</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"p\">[</span><span class=\"s\">\"{{ var.annotations.jsonKey }}\"</span><span class=\"p\">]</span> <span class=\"k\">as?</span> <span class=\"p\">{{</span> <span class=\"kd\">var</span><span class=\"o\">.</span><span class=\"n\">typeName</span> <span class=\"p\">}}</span>\n<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endfor</span> <span class=\"o\">%</span><span class=\"p\">}{</span><span class=\"o\">%</span> <span class=\"n\">endif</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n</code></pre>\n<h2 id='inline-code-generation' class='heading'>Inline code generation</h2>\n\n<p>Sourcery supports inline code generation, you just need to put same markup in your code and template, e.g.</p>\n<pre class=\"highlight swift\"><code><span class=\"c1\">// in template:</span>\n\n<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">for</span> <span class=\"n\">type</span> <span class=\"k\">in</span> <span class=\"n\">types</span><span class=\"o\">.</span><span class=\"n\">all</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n<span class=\"c1\">// sourcery:inline:{{ type.name }}.TemplateName</span>\n<span class=\"c1\">// sourcery:end</span>\n<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endfor</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n\n<span class=\"c1\">// in source code:</span>\n\n<span class=\"kd\">class</span> <span class=\"kt\">MyType</span> <span class=\"p\">{</span>\n\n<span class=\"c1\">// sourcery:inline:MyType.TemplateName</span>\n<span class=\"c1\">// sourcery:end</span>\n\n<span class=\"p\">}</span>\n</code></pre>\n\n<p>Sourcery will generate the template code and then perform replacement in your source file by matching annotation comments. Inlined generated code is not parsed to avoid chicken-egg problem.</p>\n<h4 id='automatic-inline-code-generation' class='heading'>Automatic inline code generation</h4>\n\n<p>To avoid having to place the markup in your source files, you can use automatic generation e.g. \n<code>inline:auto:{{ type.name }}.TemplateName</code>:</p>\n<pre class=\"highlight swift\"><code><span class=\"c1\">// in template:</span>\n\n<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">for</span> <span class=\"n\">type</span> <span class=\"k\">in</span> <span class=\"n\">types</span><span class=\"o\">.</span><span class=\"n\">all</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n<span class=\"c1\">// sourcery:inline:auto:{{ type.name }}.TemplateName</span>\n<span class=\"c1\">// sourcery:end</span>\n<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endfor</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n\n<span class=\"c1\">// in source code:</span>\n\n<span class=\"kd\">class</span> <span class=\"kt\">MyType</span> <span class=\"p\">{}</span>\n\n<span class=\"c1\">// after running Sourcery:</span>\n\n<span class=\"kd\">class</span> <span class=\"kt\">MyType</span> <span class=\"p\">{</span>\n<span class=\"c1\">// sourcery:inline:auto:MyType.TemplateName</span>\n<span class=\"c1\">// sourcery:end</span>\n<span class=\"p\">}</span>\n</code></pre>\n\n<p>The needed markup will be automatically added at the end of the type declaration body. After first parse Sourcery will work with generated code annotated with <code>inline:auto</code> the same way as annotated with <code>inline</code>, so you can even move these blocks of code anywhere in the same file.</p>\n\n<p>If you want to insert code after the type declaration, use <code>after-auto:</code> instead of <code>auto:</code></p>\n<h2 id='per-file-code-generation' class='heading'>Per file code generation</h2>\n\n<p>Sourcery supports generating code in a separate file per type, you just need to put <code>file</code> annotation in a template, e.g.</p>\n<pre class=\"highlight swift\"><code><span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">for</span> <span class=\"n\">type</span> <span class=\"k\">in</span> <span class=\"n\">types</span><span class=\"o\">.</span><span class=\"n\">all</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n<span class=\"c1\">// sourcery:file:Generated/{{ type.name}}+TemplateName</span>\n<span class=\"c1\">// sourcery:end</span>\n<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endfor</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n</code></pre>\n\n<p>Sourcery will generate the template code and then write its annotated parts to corresponding files. In example above it will create <code>Generated/&lt;type name&gt;+TemplateName.generated.swift</code> file for each of scanned types.</p>\n\n<p>If you add an extension to the file name Sourcery will not append <code>generated.swift</code> extension.</p>\n\n          </section>\n        </section>\n        <section id=\"footer\">\n          <p>Copyright © 2016-2021 Pixle. All rights reserved.</p>\n          <p>Generated by <a class=\"link\" href=\"https://github.com/realm/jazzy\" target=\"_blank\" rel=\"noopener\" rel=\"external\">jazzy ♪♫ v0.14.0</a>, a <a class=\"link\" href=\"https://realm.io\" target=\"_blank\" rel=\"noopener\" rel=\"external\">Realm</a> project.</p>\n        </section>\n      </article>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "guides/Codable.md",
    "content": "## I want to generate `Codable` implementation\n\nThis template generates `Codable` implementation for structs that implement  `AutoCodable`, `AutoDecodable` or  `AutoEncodable` protocols. You should define these protocols as follows:\n\n```swift\nprotocol AutoDecodable: Decodable {}\nprotocol AutoEncodable: Encodable {}\nprotocol AutoCodable: AutoDecodable, AutoEncodable {}\n```\n\n### [Swift template](https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/AutoCodable.swifttemplate)\n\n### Generating coding keys.\n\nIf you have few keys that are not matching default key strategy you have to specify only these keys, all other keys will be generated and inlined by the template:  \n  \n\n```swift\nstruct Person: AutoDecodable {\n    let id: String\n    let firstName: Bool\n    let surname: String\n\n    enum CodingKeys: String, CodingKey {\n        // this is the custom key that you define manually\n        case firstName = \"first_name\"\n\n// sourcery:inline:auto:Person.CodingKeys.AutoCodable\n        // the rest is generated by the template\n        case id\n        case surname\n// sourcery:end\n    }\n\n}\n```\n\nComputed properties are not encoded by default, but if you define a coding key for computed property, template will generate code that will encode it.\n\nIf you don't define any keys manually the template will generate `CodingKeys` enum with the keys for all stored properties, but only if custom implementation of `init(from:)` or `encode(to:)` is needed.\n\n\n### Generating `init(from:)` constructor.\n\nTemplate will generate implementation of  `init(from:)` when needed. You can define additional methods and properties on your type to be used to decode it.\n  \n  - method to get decoding container. This is useful if your type needs to be decoded from a nested key(s):\n  \n```swift\nstruct MyStruct: AutoDecodable {\n    let value: Int\n\n    enum CodingKeys: String, CodingKey {\n        case nested\n        case value\n    }\n\n    static func decodingContainer(_ decoder: Decoder) throws -> KeyedDecodingContainer<CodingKeys> {\n        return try decoder.container(keyedBy: CodingKeys.self)\n            .nestedContainer(keyedBy: CodingKeys.self, forKey: .nested)\n    }\n}\n```\n\n  - method to decode a property. This is useful if you need to decode some property manually:\n  \n```swift\nstruct MyStruct: AutoDecodable {\n    let myProperty: Int\n\n    static func decodeMyProperty(from container: KeyedDecodingContainer<CodingKeys>) -> Int? {\n        return (try? container.decode(String.self, forKey: .myProperty)).flatMap(Int.init)\n    }\n    //or\n    static func decodeMyProperty(from decoder: Decoder) throws -> Int {\n        return try decoder.container(keyedBy: CodingKeys.self)\n            .decode(Int.self, forKey: .myProperty)\n    }\n}\n```\n\nThese methods can throw or not and can return optional or non-optional result.\n\n  - default property value. You can define a static variable that will be used as a default value of a property if decoding results in `nil` value:\n\n```swift\nstruct MyStruct: AutoDecodable {\n    let myProperty: Int\n\n    static let defaultMyProperty: Int = 0\n}\n```\n\n### Generating `encode(to:)` method.\n\nTemplate will generate implementation of `encode(to:)` method when needed. You can define additional methods to be used to encode it.\n\n  - method to get encoding container. This is useful if your type needs to be encoded into a nested key(s):\n  \n```swift\nstruct MyStruct: AutoDecodable {\n    let value: Int\n\n    enum CodingKeys: String, CodingKey {\n        case nested\n        case value\n    }\n\n    func encodingContainer(_ encoder: Encoder) -> KeyedEncodingContainer<CodingKeys> {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        return container.nestedContainer(keyedBy: CodingKeys.self, forKey: .nested)\n    }\n}\n```\n\n  - method to encode a property. This is useful when you need to manually encode a property:\n\n```swift\nstruct MyStruct: AutoDecodable {\n    let myProperty: Int\n\n    func encodeMyProperty(to container: inout KeyedEncodingContainer<CodingKeys>) {\n        try? container.decode(String(myProperty), forKey: .myProperty)\n    }\n    //or\n    func encodeMyProperty(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        try container.encode(String(myProperty), forKey: .myProperty)\n    }\n}\n```\n\nThese methods may throw or not. \n\nIf you need to manually encode computed property and you have defined custom encoding method for it, template will generate a coding key for it too, so you don't have to define it manually (though you may still need to define it if it needs custom raw value).\n\n  - method to encode any additional values. This is useful when you need to encode computed properties or constant values:\n\n```swift\nstruct MyStruct: AutoDecodable {\n\n    func encodeAdditionalValues(to container: inout KeyedEncodingContainer<CodingKeys>) throws {\n        ...\n    }\n    // or\n    func encodeAdditionalValues(to encoder: Encoder) throws {\n        ...\n    }\n}\n```\n  \nThis method will be called in the end of generated encoding method.\n\n  - enum `SkipEncodingKeys` for keys to be skipped during encoding. This is useful when you have stored properties that you don't want to encode, i.e. constants:\n  \n```swift\n  struct MyStruct: AutoCodable {\n      let value: Int\n      let skipValue: Int\n  \n      enum SkipEncodingKeys {\n          case skipValue\n      }\n  }\n```\n\n### Codable enums\n\nEnums with numeric or string raw values are `Codable` by default. For enums with no raw value or with associated values template will generate `Codable` implementation.\n\n#### Enums with no raw values and no associated values\n\nFor such enums template will generate decoding/encoding code that will expect values in JSON to be exactly the same as cases' names.\n\n```swift\nenum SimpleEnum: AutoDecodable {\n  case someCase\n  case anotherCase\n}\n```\n\nFor such enum template will generate code that will successfully decode from/encode to JSON of following form:\n\n```json\n{\n  \"value\": \"someCase\"\n  \"anotherValue\": \"anotherCase\"\n}\n```\n\nYou can define coding keys to change the values:\n\n```swift\nenum SimpleEnum: AutoDecodable {\n  case someCase\n  case anotherCase\n  \n  enum CodingKeys: String, CodingKey {\n    case someCase = \"some_case\"\n    case anotherCase = \"another_case\"\n  }\n}\n```\n\n#### Enums with assoicated values\n\nTemplate supports two different representations of such enums in JSON format.\n\n```swift\nenum SimpleEnum: AutoDecodable {\n  case someCase(id: Int, name: String)\n  case anotherCase\n}\n```\n\nIf you define a coding key named `enumCaseKey` then the template will generate code that will encode/decode enum in/from following format:\n\n```json\n{\n  \"type\": \"someCase\" // enum case is encoded in a special key\n  \"id\": 1,\n  \"name\": \"John\"\n}\n```\nAll enum cases associated values must be named.\n\nIf you don't define `enumCaseKey` then the template will generate code that will encode/decode enum in/from following format:\n\n```json\n{\n  \"someCase\": {\n    \"id\": 1,\n    \"name\": \"John\"\n  }\n}\n```\n\nAssociated values of each enum case must be either all named or all unnamed.\nFor cases with unnamed associated values JSON format will use array instead of dictionary for associated values, in the same order in which they are defined:\n\n```json\n{\n  \"someCase\": [\n    1,\n    \"Jhon\"\n  ]\n}\n```\n\nYou can use all other customisation methods described for structs to decode/encode enum case associated values individually. \n"
  },
  {
    "path": "guides/Decorator.md",
    "content": "## I want to generate simple decorator for my type\n\nIn Swift it can be cumbersome to write a simple decorator that decorates all the calls to decorated type methods, you basically have to do it manually for each single method. With this template you can generate simple decorator that generate all the methods and property calls automatically, skipping methods and properties already implemented manually.\n\nYou can use this template as a starting point for more sophisticated implementations. This template also shows you some powers of swift templates, like using helper methods and whitespace control tags.\n\n### [Swift template](https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/Decorator.swifttemplate)\n\n#### Available annotations\n\n- `decorate` - what type to decorate\n- `decorateMethod` - code to decorate each method call with\n- `decorateGet` - code to decorate each property getter\n- `decorateSet` - code to decorate each property setter\n\n**Example input:**\n\n```swift\nprotocol Service {\n    var prop1: Int { get }\n    var prop2: Int { get set }\n    func foo(f: Int, _ a: Int) throws -> Int\n    func bar(_ b: String)\n}\n\n// sourcery: decorate = \"Service\"\n// sourcery: decorateMethod = \"print(#function)\"\n// sourcery: decorateGet = \"print(\"get: \\(#function)\")\"\n// sourcery: decorateSet = \"print(\"set: \\(#function)\")\"\nstruct ServiceDecorator: Service {\n\t// generated code will go here\n}\n\nextension ServiceDecorator {\n\t // manually implemented method\n    internal func bar(_ b: String) {\n        decorated.bar(b)\n    }\n\n}\n\n```\n\n**Example output:**\n\n```swift\n...\n\n// sourcery: decorate = Service\n// sourcery: decorateMethod = print(#function)\n// sourcery: decorateGet = \"print(\"get: \\(#function)\")\"\n// sourcery: decorateSet = \"print(\"set: \\(#function)\")\"\nstruct ServiceDecorator: Service {\n\n// sourcery:inline:auto:ServiceDecorator.autoDecorated\n    internal private(set) var decorated: Service\n\n    internal init(decorated: Service) {\n        self.decorated = decorated\n    }\n\n    internal var prop1: Int {\n        print(\"get: \\(#function)\")\n        return decorated.prop1\n    }\n\n    internal var prop2: Int {\n        get {\n            print(\"get: \\(#function)\")\n            return decorated.prop2\n        }\n        set {\n            print(\"set: \\(#function)\")\n            decorated.prop2 = newValue\n        }\n    }\n\n    internal func foo(f: Int, _ a: Int) throws -> Int {\n        print(#function)\n        return try decorated.foo(f: f, a)\n    }\n// sourcery:end\n}\n...\n```\n"
  },
  {
    "path": "guides/Diffable.md",
    "content": "## I want to have diffing in tests\n\nTemplate used to generate much better output when using equality in tests, instead of having to read wall of text it's used to generate precise property level differences. This template uses [Sourcery Diffable implementation](../SourceryRuntime/Sources/Diffable.swift)\n\nfrom this:\n<img width=\"600\" alt=\"before\" src=\"https://cloud.githubusercontent.com/assets/1468993/21425370/0e3dd990-c849-11e6-877a-6dc80ae8f039.png\">\n\nto this:\n<img width=\"373\" alt=\"after\" src=\"https://cloud.githubusercontent.com/assets/1468993/21425376/11e9ad94-c849-11e6-882a-e7927a3b2b08.png\">\n\n\n### [Stencil Template](https://github.com/krzysztofzablocki/Sourcery/blob/master/Sourcery/Templates/Diffable.stencil)\n\n#### Available annotations:\n\n- `skipEquality` allows you to skip variable from being compared.\n"
  },
  {
    "path": "guides/Enum cases.md",
    "content": "## I want to list all cases in an enum\n\nGenerate `count` and `allCases` for any enumeration that is marked with `AutoCases` phantom protocol.\n\n### [Stencil Template](https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/AutoCases.stencil)\n\n#### Example output:\n\n```swift\nextension BetaSettingsGroup {\n  static let count: Int = return 8\n\n  static let allCases: [BetaSettingsGroup] = [\n      .featuresInDevelopment,\n      .advertising,\n      .analytics,\n      .marketing,\n      .news,\n      .notifications,\n      .tech,\n      .appInformation\n    ]\n}\n```\n"
  },
  {
    "path": "guides/Equatable.md",
    "content": "## I want to generate `Equatable` implementation\n\n\nTemplate used to generate equality for all types that either conform to the `AutoEquatable` protocol or are [annotated](Writing%20templates.md#using-source-annotations) with `AutoEquatable` annotation, allowing us to avoid writing boilerplate code.\n\nIt adds `:Equatable` conformance to all types, except protocols (because it would require turning them into PAT's).\nFor protocols it's just generating `func ==`.\n\n### [Stencil template](https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/AutoEquatable.stencil)\n\n#### Available variable annotations:\n\n- `skipEquality` allows you to skip variable from being compared.\n- `arrayEquality` mark this to use array comparsion for variables that have array of items that don't implement `Equatable` but have `==` operator e.g. Protocols\n\n#### Example output:\n\n```swift\n// MARK: - AdNodeViewModel AutoEquatable\nextension AdNodeViewModel: Equatable {}\n\ninternal func == (lhs: AdNodeViewModel, rhs: AdNodeViewModel) -> Bool {\n    guard lhs.remoteAdView == rhs.remoteAdView else { return false }\n    guard lhs.hidesDisclaimer == rhs.hidesDisclaimer else { return false }\n    guard lhs.type == rhs.type else { return false }\n    guard lhs.height == rhs.height else { return false }\n\n    guard lhs.attributedDisclaimer == rhs.attributedDisclaimer else { return false }\n\n    return true\n}\n```\n"
  },
  {
    "path": "guides/Hashable.md",
    "content": "## I want to generate `Hashable` implementation\n\nTemplate used to generate hashing for all types that conform to `:AutoHashable`, allowing us to avoid writing boilerplate code.\n\nIt adds `:Hashable` conformance to all types, except protocols (because it would require turning them into PAT's).\nFor protocols it's just generating `var hashValue` comparator.\n\n### [Stencil template](https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/AutoHashable.stencil)\n\n#### Available variable annotations:\n\n- `skipHashing` allows you to skip variable from being compared.\n- `includeInHashing` is only applied on enums and allows us to add some computed variable into hashing logic\n\n#### Example output:\n\n```swift\n// MARK: - AdNodeViewModel AutoHashable\nextension AdNodeViewModel: Hashable {\n\n    internal var hashValue: Int {\n        return combineHashes(remoteAdView.hashValue, hidesDisclaimer.hashValue, type.hashValue, height.hashValue, attributedDisclaimer.hashValue, 0)\n    }\n}\n```"
  },
  {
    "path": "guides/Installing.md",
    "content": "## Installing\n\n- _Binary form_\n\n\tDownload latest release with prebuilt binary from [release tab](https://github.com/krzysztofzablocki/Sourcery/releases/latest). Unzip the archive into desired destination and run `bin/sourcery`\n\n- _CocoaPods_\n\n\tAdd pod 'Sourcery' to your Podfile and run `pod update Sourcery`. This will download latest release binary and will put it to your project's CocoaPods path so you will run it with `$PODS_ROOT/Sourcery/bin/sourcery`\n\n- _Building from source_\n\n\tDownload latest release source code from [release tab](https://github.com/krzysztofzablocki/Sourcery/releases/latest) or clone the repository an build Sourcery manually.\n\n\t- _Building with Swift Package Manager_\n\n\t\tRun `swift build -c release` in the root folder. This will create a `.build/release` folder and will put binary there. Move the **whole `.build/release` folder** to your desired destination and run with `path_to_release_folder/sourcery`\n\n\t\t> Note: JS templates are not supported when building with SPM yet.\n\n\t- _Building with Xcode_\n\n\t\tOpen `Sourcery.xcworkspace` and build with `Sourcery-Release` scheme. This will create `Sourcery.app` in the Derived Data folder. You can copy it to your desired destination and run with `path_to_sourcery_app/Sourcery.app/Contents/MacOS/Sourcery`\n"
  },
  {
    "path": "guides/Lenses.md",
    "content": "## I want to generate Lenses for all structs\n\n_Contributed by [@filip_zawada](http://twitter.com/filip_zawada)_\n\nWhat are Lenses? Great explanation by @mbrandonw\n\nThis script assumes you follow swift naming convention, e.g. structs start with an upper letter.\n\n### [Stencil template](https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/AutoLenses.stencil)\n\n#### Example output:\n\n```swift\nextension House {\n\n  static let roomsLens = Lens<House, Room>(\n    get: { $0.rooms },\n    set: { rooms, house in\n       House(rooms: rooms, address: house.address, size: house.size)\n    }\n  )\n  static let addressLens = Lens<House, String>(\n  get: { $0.address },\n  set: { address, house in\n     House(rooms: house.rooms, address: address, size: house.size)\n    }\n  )\n  ...\n```\n"
  },
  {
    "path": "guides/LinuxMain.md",
    "content": "## I want to generate `LinuxMain.swift` for all my tests\n\nFor all test cases generates `allTests` static variable and passes all of them as `XCTestCaseEntry` to `XCTMain`. Run with `--args testimports='import MyTests'` parameter to import test modules.\n\n### [Stencil template](https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/LinuxMain.stencil)\n\n#### Available annotations:\n\n- `disableTests` allows you to disable the whole test case.\n\n#### Example output:\n\n```swift\nimport XCTest\n//testimports\n\nextension AutoInjectionTests {\n  static var allTests = [\n    (\"testThatItResolvesAutoInjectedDependencies\", testThatItResolvesAutoInjectedDependencies),\n    ...\n  ]\n}\n\nextension AutoWiringTests {\n  static var allTests = [\n    (\"testThatItCanResolveWithAutoWiring\", testThatItCanResolveWithAutoWiring),\n    ...\n  ]\n}\n\n...\n\nXCTMain([\n  testCase(AutoInjectionTests.allTests),\n  testCase(AutoWiringTests.allTests),\n  ...\n])\n\n```\n"
  },
  {
    "path": "guides/Mocks.md",
    "content": "## I want to generate test mocks for protocols\n\n_Contributed by [@marinbenc](http://twitter.com/marinbenc)_\n\n#### For each protocol implementing `AutoMockable` protocol or [annotated](Writing%20templates.md#using-source-annotations) with `AutoMockable` annotation it will...\nCreate a class called `ProtocolNameMock` in which it will...\n\n**For each function:**\n - Implement the function\n - Add a `functionCalled` boolean to check if the function was called\n - Add a `functionReceivedArguments` tuple to check the arguments that were passed to the function\n - Add a `functionReturnValue` variable and return it when the function is called.\n\n**For each variable:**\n - Add a gettable and settable variable with the same name and type\n\n#### Issues and limitations:\n* Overloaded methods will produce compiler errors since the variables above the functions have the same name. Workaround: delete the variables on top of one of the functions, or rename them.\n* Handling success/failure cases (for callbacks) is tricky to do automatically, so you have to do that yourself.\n* This is **not** a full replacement for hand-written mocks, but it will get you 90% of the way there. Any more complex logic than changing return types, you will have to implement yourself. This only removes the most boring boilerplate you have to write.\n\n### [Stencil template](https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/AutoMockable.stencil)\n\n#### Example output:\n\n```swift\nclass MockableServiceMock: MockableService {\n    //MARK: - functionWithArguments\n    var functionWithArgumentsCalled = false\n    var functionWithArgumentsReceivedArguments: (firstArgument: String, onComplete: (String)-> Void)?\n\n    //MARK: - functionWithCallback\n    var functionWithCallbackCalled = false\n    var functionWithCallbackReceivedArguments: (firstArgument: String, onComplete: (String)-> Void)?\n\n    func functionWithCallback(_ firstArgument: String, onComplete: @escaping (String)-> Void) {\n        functionWithCallbackCalled = true\n        functionWithCallbackReceivedArguments = (firstArgument: firstArgument, onComplete: onComplete)\n    }\n  ...\n```\n"
  },
  {
    "path": "guides/Usage.md",
    "content": "## Usage\n\nSourcery is a command line tool, you can either run it manually or in a custom build phase using following command:\n\n```\n$ ./sourcery --sources <sources path> --templates <templates path> --output <output path>\n```\n\n> Note: this command may be different depending on the way in which you installed Sourcery (see [Installing](installing.html))\n\n### Command line options\n\n- `--sources` - Path to a source swift files. You can provide multiple paths using multiple `--sources` option.\n- `--templates` - Path to templates. File or Directory. You can provide multiple paths using multiple `--templates` options.\n- `--output` [default: current path] - Path to output. File or Directory.\n- `--config` [default: current path] - Path to config file. File or Directory. See [Configuration file](usage.html#configuration-file).\n- `--args` - Additional arguments to pass to templates. Each argument can have explicit value or will have implicit `true` value. Arguments should be separated with `,` without spaces (i.e. `--args arg1=value,arg2`) or should be passed one by one (i.e `--args arg1=value --args arg2`). Arguments are accessible in templates via `argument.name`. To pass in string you should use escaped quotes (`\\\"`) .\n- `--watch` [default: false] - Watch both code and template folders for changes and regenerate automatically.\n- `--verbose` [default: false] - Turn on verbose logging\n- `--quiet` [default: false] - Turn off any logging, only emit errors\n- `--disableCache` [default: false] - Turn off caching of parsed data\n- `--prune` [default: false] - Prune empty generated files\n- `--version` - Display the current version of Sourcery\n- `--help` - Display help information.\n- `--cacheBasePath` - Path to Sourcery internal cache (available only in configuration file)\n- `--parseDocumentation`  [default: false] - Include documentation comments for all declarations.\n\nUse `--help` to see the list of all available options.\n\n### Configuration file\n\nYou can also provide arguments using configuration file. Some of the configuration features (like excluding files) are only \navailable when using configuration file. You provide path to this file using `--config` command line option.\nIf you provide a path to a directory Sourcery will search for a file `.sourcery.yml` in this directory. You can also provide\na path to config file itself. By default Sourcery will search for `.sourcery.yml` in your current path.\n\nConfiguration file should be a valid Yaml file, like this:\n\n```yaml\nsources:\n  - <sources path> # you can provide either single path or several paths using `-`\n  - <sources path>\ntemplates:\n  - <templates path> # as well as for templates\n  - <templates path>\noutput:\n  <output path> # note that there is no `-` here as only single output path is supported\nargs:\n  <name>: <value>\n```\n\n#### Multiple configurations\n\nYou can pass multiple paths to configuration files using multiple `--config` command line options.\nSingle configuration file can contain multiple configurations under root `configurations` key:\n\n```yaml\nconfigurations:\n    - sources:\n        - <sources path>\n        - <sources path>\n      templates:\n        - <templates path>\n      output: <output path>\n      args:\n        <name>: <value>\n        <name>: <value>\n    - sources:\n        - <sources path>\n        - <sources path>\n      templates:\n        - <templates path>\n      output: <output path>\n      args:\n        <name>: <value>\n        <name>: <value>\n```\n\nThis will be equivalent to running Sourcery separately for each of the configurations. In watch mode Sourcery will observe changes in the paths from all the configurations.\n\n#### Child configurations\n\nYou can specify a child configurations by using the `child` key:\n```yaml\nconfigurations:\n    - child: ./.child_config.yml\n    - child: Subdirectory/.another_child_config.yml\n```\nSources will be resolved relative to the child config paths.\n\n#### Sources\n\nYou can provide sources using paths to directories or specific files.\n\n```yaml\nsources:\n  - <sources dir path>\n  - <source file path>\n```\n\nOr you can provide project which will be scanned and which source files will be processed. You can use several `project` or `target` objects to scan multiple targets from one project or to scan multiple projects. You can provide paths to XCFramework files if your target has any and you want to process their `swiftinterface` files.\n\n```yaml\nproject:\n  file: <path to xcodeproj file>\n  target:\n    name: <target name>\n    module: <module name> //required if different from target name\n    xcframeworks:\n        - <path to xcframework file>\n        - <path to xcframework file>\n```\n\nYou can also provide a Swift Package which will be scanned. Source files will be scanned based on the package's `path` and `exclude` options.\n\n```yaml\npackage:\n  path: <path to to the Package.swift root directory>\n  target: <target name>\n```\nMultiple targets:\n```yaml\npackage:\n  path: <path to to the Package.swift root directory>\n  target:\n    - <target name>\n    - <target name>\n```\n\n#### Excluding sources or templates\n\nYou can specify paths to sources files that should be scanned using `include` key and paths that should be excluded using `exclude` key. These can be directory or file paths.\n\n```yaml\nsources:\n  include:\n    - <sources path to include>\n    - <sources path to include>\n  exclude:\n    - <sources path to exclude>\n    - <sources path to exclude>\n```\n\nYou can also specify path to include and exclude for templates.\nWhen source is a project you can use `exclude` key to exclude some of its source files.\n\n```yaml\nproject:\n  file: ...\n  target: ...\n  exclude:\n    - <sources path>\n    - <sources path>\n```\n\n#### Output\n\nYou can specify the output file using `output` key. This can be a directory path or a file path. If it's a file path, all generated content will be written into this file. If it's a directory path, for each template a separate file will be created with `TemplateName.generated.swift` name.\n\n```yaml\noutput:\n  <output path>\n```\n\nAlternatively you can use `path` key to specify output path.\n\n```yaml\noutput:\n  path: <output path>\n```\n\nYou can use optional `link` key to automatically link generated files to some target.\n\n```yaml\noutput:\n  path: <output path>\n  link:\n    project: <path to the xcodeproj to link to>\n    target: <name of the target to link to> // or targets: [target1, target2, ...]\n    group: <group in the project to add files to> // by default files are added to project's root group\n```\n\n> Note: Paths in configuration file are by default relative to configuration file path. If you want to specify absolute path start it with `/`.\n"
  },
  {
    "path": "guides/Writing templates.md",
    "content": "## Writing templates\n\nSourcery supports templates written in Stencil, Swift and even JavaScript.\n\nDiscovered types can be accessed in templates via global context with following properties:\n\n - `types: Types` - access collections of types, i.e. `types.implementing.AutoCoding` (`types.implementing[\"AutoCoding\"]` in swift templates). See [Types](https://krzysztofzablocki.github.io/Sourcery/Classes/Types.html).\n - `type: [String: Type]` - access types by their names, i.e. `type.MyType` (`type[\"MyType\"]` in swift templates)\n - `arguments: [String: NSObject]` - access additional parameters passed with `--args` command line flag or set in `.sourcery.yml` file\n\n> Tip: Make sure you leverage Sourcery built-in daemon to make writing templates a pleasure:\nyou can open template side-by-side with generated code and see it change live.\n\n## What are _known_ and _unknown_ types\n\nCurrently Sourcery only scans files from paths or targets that you tell it to scan. This way it can get full information about types _defined_ in these sources. These types are considered _known_ types. For each of known types Sourcery provides `Type` object. You can get it for example by its name from `types` collection. `Type` object contains information about whether type that it describes is a struct, enum, class or a protocol, what are its properties and methods, what protocols it implements and so on. This is done recursively, so if you have a class that inherits from another class (or struct that implements a protocol) and they are both known types you will have information about both of them and you will be able to access parent type's `Type` object using `type.inherits.TypeName` (or `type.implements.ProtocolName`).\n\nEverything _defined_ outside of scanned sources is considered as _unknown_ types. For such types Sourcery doesn't provide `Type` object. For that reason variables (and other \"typed\" types, like method parameters etc.) of such types will only contain `typeName` property, but their `type` property will be `nil`.\n\nIf you have an extension of unknown type defined in scanned sources Sourcery will create `Type` for it (it's `kind` property will be `extension`). But this object will contain only declarations defined in this extension. Several extensions of unknown type will be merged into one `Type` object the same way as extensions of known types.\n\nSee [#87](https://github.com/krzysztofzablocki/Sourcery/issues/87) for details.\n\n## Stencil templates\n\n[Stencil](http://stencil.fuller.li/en/latest/) is a simple and powerful template language for Swift. It provides a syntax similar to Django and Mustache.\nSourcery also uses its extension [StencilSwiftKit](https://github.com/SwiftGen/StencilSwiftKit) so you have access to additional nodes and filteres defined there.\n\n**Example**: [Equality.stencil](https://github.com/krzysztofzablocki/Sourcery/blob/master/Sourcery/Templates/Equality.stencil)\n\n### Custom Stencil tags and filters\n\n- `{{ name|upperFirstLetter }}` - makes first letter in `name` uppercase\n- `{{ name|lowerFirstLetter }}` - makes first letter in `name` lowercase\n- `{{ name|replace:\"substring\",\"replacement\" }}` - replaces occurrences of `substring` with `replacement` in `name` (case sensitive)\n- `{% if name|contains:\"Foo\" %}` - check if `name` contains arbitrary substring, can be negated with `!` prefix.\n- `{% if name|hasPrefix:\"Foo\" %}`- check if `name` starts with arbitrary substring, can be negated with `!` prefix.\n- `{% if name|hasSuffix:\"Foo\" %}`- check if `name` ends with arbitrary substring, can be negated with `!` prefix.\n- `static`, `instance`, `computed`, `stored`, `tuple` - can be used on Variable[s] as filter e.g. `{% for var in variables|instance %}`, can be negated with `!` prefix.\n- `static`, `instance`, `class`, `initializer` - can be used on Method[s] as filter e.g. `{% for method in allMethods|instance %}`, can be negated with `!` prefix.\n- `enum`, `class`, `struct`, `protocol` - can be used for Type[s] as filter, can be negated with `!` prefix.\n- `based`, `implements`, `inherits` - can be used for Type[s], Variable[s], Associated value[s], can be negated with `!` prefix.\n- `count` - can be used to get count of filtered array\n- `annotated` - can be used on Type[s], Variable[s], Method[s] and Enum Case[s] to filter by annotation, e.g. `{% for var in variable|annotated:\"skipDescription\" %}`, can be negated with `!` prefix.\n- `public`, `open`, `internal`, `private`, `fileprivate` - can be used on Type[s] and Method[s] to filter by access level, can be negated with `!` prefix.\n- `publicGet`, `publicSet`, .etc - can be used on Variable[s] to filter by getter or setter access level, can be negated with `!` prefix\n\nYou can also use partial templates using `include` tag. Partial template is loaded from the path of a template that includes it. `include` tags also supports loading templates from relative path, i.e. `{% include \"partials/MyPartial.stencil\"%}` used in the template located in `templates` directory will load template from `templates/partials` directory.\n\n> Note: You can only load partial templates from child directories of the including template directory, so `{% include \"../MyPartial.stencil\"%}` is not supported.\n\nSourcery treats all the templates as independent and so will generate files based on partial templates too. To avoid that use `exclude` in [configuration file](usage.html#configuration-file).\n\n## Swift templates\n\nSwift templates syntax is very similar to EJS:\n\n- Control flow with `<% %>`\n- Output value with `<%= %>`\n- Trim extra new line after control flow tag with `-%>`\n- Trim _all_ whitespaces before/after control flow tag with `<%_` and `_%>`\n- Use `<%# %>` for comments\n- Use `<%- include(\"relative_path_to_template.swifttemplate\") %>` to include another template. The `swifttemplate` extension can be omitted. The path is relative to the including template.\n- Use `<%- includeFile(\"relative_path_to_file.swift\") %>` to include another Swift file.  The path is relative to the including template.  Included Swift files _may_ depend upon `SourceryRuntime` module, as this will be injected during processing.\n\n**Example**: [Equality.swifttemplate](https://github.com/krzysztofzablocki/Sourcery/blob/master/SourceryTests/Stub/SwiftTemplates/Equality.swifttemplate)\n\nTemplate:\n\n```swift\n<% for type in types.all { -%>\n  <%_ %><%= type.name %>\n<% } %>\n```\n\nOutput:\n\n```swift\nFoo\nBar\n```\n\n## JavaScript templates\n\nJavaScript templates are powered by [EJS](http://ejs.co) and support all the features available in this template engine.\n\n**Example**: [JSExport.ejs](https://github.com/krzysztofzablocki/Sourcery/blob/master/Sourcery/Templates/JSExport.ejs)\n\n> Note: when using JavaScript templates with Sourcery built using Swift Package Manager you must provide path to EJS source code using `--ejsPath` command line argument. Download EJS source code [here](https://github.com/krzysztofzablocki/Sourcery/blob/master/SourceryJS/Sources/ejs.js), put it in some path and pass it when running Sourcery. Otherwise JavaScript templates will be ignored (you will see a warning in the console output).\n\nYou can also use `SourceryJS` framework independently of Sourcery. You can add it as a Carthage or SPM dependency.\n\n## Using Source Annotations\n\nSourcery supports annotating your classes and variables with special annotations, similar to how attributes work in Rust / Java\n\n```swift\n// sourcery: skipPersistence\n// sourcery: anotherAnnotation = 232, yetAnotherAnnotation = \"value\"\n/// Some documentation comment\nvar precomputedHash: Int\n```\n\nYou can also add attributes to the end of a line of code:\n\n```swift\nvar firstVariable: Int // default = 1\nvar secondVariable: Int // default = 2\n```\n\nIf you want to attribute multiple items with same attributes, you can use section annotations `sourcery:begin` and `sourcery:end`:\n\n```swift\n// sourcery:begin: skipEquality, skipPersistence\n  var firstVariable: Int\n  var secondVariable: Int\n// sourcery:end\n```\n\nTo attribute any declaration in the file use `sourcery:file` at the top of the file:\n\n```swift\n// sourcery:file: skipEquality\n  var firstVariable: Int\n  var secondVariable: Int\n```\nTo group annotations of the same domain you can use annotation namespaces:\n\n```swift\n// sourcery:decoding: key=\"first\", default=0\n  var firstVariable: Int\n```\nThis will effectively annotate with `decoding.key` and `decoding.default` annotations\n\n#### Rules:\n\n- Multiple annotations can occur on the same line, separated with `,`\n- You can add multiline annotations\n- Multiple annotations values with the same key are merged into array\n- You can interleave annotations with documentation\n- Sourcery scans all `sourcery:` annotations in the given comment block above the source until first non-comment/doc line\n- Annotations at the end of a line will be applied to all declarations on the same line\n- Using `/*` and `*/` for annotation comment you can put annotations on the same line preceding your declaration. This is useful for annotating methods parameters and enum case associated values. All such annotations should be placed in one comment block. Do not mix inline and regular annotations for the same declaration (using inline and block annotations is fine)!\n\n#### Format:\n\n- simple entry, e.g. `sourcery: skipPersistence`\n- key = number, e.g. `sourcery: another = 123`\n- key = string, e.g. `sourcery: jsonKey = \"json_key\"`\n\n#### Accessing in templates:\n\n```swift\n{% if variable|!annotated:\"skipPersistence\" %}\n  var local{{ variable.name|capitalize }} = json[\"{{ variable.annotations.jsonKey }}\"] as? {{ variable.typeName }}\n{% endif %}\n```\n\n#### Checking for existence of at least one annotation:\n\nSometimes it is desirable to only generate code if there's at least one field annotated.\n\n```swift\n{% if type.variables|annotated:\"jsonKey\" %}{% for var in type.variables|instance|annotated:\"jsonKey\" %}\n  var local{{ var.name|capitalize }} = json[\"{{ var.annotations.jsonKey }}\"] as? {{ var.typeName }}\n{% endfor %}{% endif %}\n```\n\n## Inline code generation\n\nSourcery supports inline code generation, you just need to put same markup in your code and template, e.g.\n\n```swift\n// in template:\n\n{% for type in types.all %}\n// sourcery:inline:{{ type.name }}.TemplateName\n// sourcery:end\n{% endfor %}\n\n// in source code:\n\nclass MyType {\n\n// sourcery:inline:MyType.TemplateName\n// sourcery:end\n\n}\n```\n\nSourcery will generate the template code and then perform replacement in your source file by matching annotation comments. Inlined generated code is not parsed to avoid chicken-egg problem.\n\n#### Automatic inline code generation\n\nTo avoid having to place the markup in your source files, you can use automatic generation e.g. \n`inline:auto:{{ type.name }}.TemplateName`:\n\n```swift\n// in template:\n\n{% for type in types.all %}\n// sourcery:inline:auto:{{ type.name }}.TemplateName\n// sourcery:end\n{% endfor %}\n\n// in source code:\n\nclass MyType {}\n\n// after running Sourcery:\n\nclass MyType {\n// sourcery:inline:auto:MyType.TemplateName\n// sourcery:end\n}\n```\n\nThe needed markup will be automatically added at the end of the type declaration body. After first parse Sourcery will work with generated code annotated with `inline:auto` the same way as annotated with `inline`, so you can even move these blocks of code anywhere in the same file.\n\nIf you want to insert code after the type declaration, use `after-auto:` instead of `auto:`\n\n## Per file code generation\n\nSourcery supports generating code in a separate file per type, you just need to put `file` annotation in a template, e.g.\n\n```swift\n{% for type in types.all %}\n// sourcery:file:Generated/{{ type.name}}+TemplateName\n// sourcery:end\n{% endfor %}\n```\n\nSourcery will generate the template code and then write its annotated parts to corresponding files. In example above it will create `Generated/<type name>+TemplateName.generated.swift` file for each of scanned types.\n\nIf you add an extension to the file name Sourcery will not append `generated.swift` extension.\n"
  }
]