From 6a243cb9b1309ad3b6618318d805e9719670ed7b Mon Sep 17 00:00:00 2001 From: David Jennes Date: Sun, 5 Mar 2017 19:05:35 +0100 Subject: [PATCH] Configure CircleCI (#24) --- .gitignore | 14 +- .travis.yml | 17 - CHANGELOG.md | 4 +- Gemfile | 5 + Gemfile.lock | 77 ++++ LICENSE | 2 +- Tests/Podfile => Podfile | 2 +- Podfile.lock | 28 ++ .../Local Podspecs/Stencil.podspec.json | 0 .../StencilSwiftKit.podspec.json | 6 +- Pods/Manifest.lock | 28 ++ {Tests/Pods => Pods}/PathKit/LICENSE | 0 {Tests/Pods => Pods}/PathKit/README.md | 0 .../PathKit/Sources/PathKit.swift | 118 +++++- .../Pods.xcodeproj/project.pbxproj | 382 +++++++++--------- {Tests/Pods => Pods}/Stencil/LICENSE | 0 {Tests/Pods => Pods}/Stencil/README.md | 0 .../Stencil/Sources/Context.swift | 0 .../Stencil/Sources/Environment.swift | 0 .../Stencil/Sources/Errors.swift | 0 .../Stencil/Sources/Expression.swift | 0 .../Stencil/Sources/Extension.swift | 0 .../Stencil/Sources/FilterTag.swift | 0 .../Stencil/Sources/Filters.swift | 0 .../Stencil/Sources/ForTag.swift | 0 .../Pods => Pods}/Stencil/Sources/IfTag.swift | 0 .../Stencil/Sources/Include.swift | 0 .../Stencil/Sources/Inheritence.swift | 0 .../Pods => Pods}/Stencil/Sources/Lexer.swift | 0 .../Stencil/Sources/Loader.swift | 0 .../Pods => Pods}/Stencil/Sources/Node.swift | 0 .../Stencil/Sources/NowTag.swift | 0 .../Stencil/Sources/Parser.swift | 0 .../Stencil/Sources/Template.swift | 0 .../Stencil/Sources/Tokenizer.swift | 0 .../Stencil/Sources/Variable.swift | 0 {Tests/Pods => Pods}/StencilSwiftKit/LICENSE | 0 .../Pods => Pods}/StencilSwiftKit/README.md | 6 +- .../StencilSwiftKit/Sources/CallNode.swift | 0 .../StencilSwiftKit/Sources/Context.swift | 8 +- .../StencilSwiftKit/Sources/Environment.swift | 3 +- .../StencilSwiftKit/Sources/Filters.swift | 10 +- Pods/StencilSwiftKit/Sources/MapNode.swift | 87 ++++ .../StencilSwiftKit/Sources/Parameters.swift | 18 +- .../StencilSwiftKit/Sources/SetNode.swift | 0 .../Sources/StencilSwiftTemplate.swift | 0 .../Sources/SwiftIdentifier.swift | 0 .../Target Support Files/PathKit/Info.plist | 2 +- .../PathKit/PathKit-dummy.m | 0 .../PathKit/PathKit-prefix.pch | 0 .../PathKit/PathKit-umbrella.h | 0 .../PathKit/PathKit.modulemap | 0 .../PathKit/PathKit.xcconfig | 0 .../Pods-Tests/Info.plist | 0 .../Pods-Tests-acknowledgements.markdown | 0 .../Pods-Tests-acknowledgements.plist | 0 .../Pods-Tests/Pods-Tests-dummy.m | 0 .../Pods-Tests/Pods-Tests-frameworks.sh | 0 .../Pods-Tests/Pods-Tests-resources.sh | 0 .../Pods-Tests/Pods-Tests-umbrella.h | 0 .../Pods-Tests/Pods-Tests.debug.xcconfig | 0 .../Pods-Tests/Pods-Tests.modulemap | 0 .../Pods-Tests/Pods-Tests.release.xcconfig | 0 .../Target Support Files/Stencil/Info.plist | 2 +- .../Stencil/Stencil-dummy.m | 0 .../Stencil/Stencil-prefix.pch | 0 .../Stencil/Stencil-umbrella.h | 0 .../Stencil/Stencil.modulemap | 0 .../Stencil/Stencil.xcconfig | 0 .../StencilSwiftKit/Info.plist | 2 +- .../StencilSwiftKit/StencilSwiftKit-dummy.m | 0 .../StencilSwiftKit-prefix.pch | 0 .../StencilSwiftKit-umbrella.h | 0 .../StencilSwiftKit/StencilSwiftKit.modulemap | 0 .../StencilSwiftKit/StencilSwiftKit.xcconfig | 0 README.md | 2 +- Rakefile | 116 +++++- Scripts/compile-modules.sh | 30 -- Scripts/compile-output.sh | 21 - Scripts/install_swiftlint.sh | 25 -- Scripts/swiftlint-code.sh | 6 - Scripts/swiftlint-output.sh | 6 - .../project.pbxproj | 33 +- .../contents.xcworkspacedata | 0 .../xcshareddata/SwiftGenKit.xcscmblueprint | 0 .../xcshareddata/xcschemes/Tests.xcscheme | 0 .../contents.xcworkspacedata | 0 .../xcshareddata/WorkspaceSettings.xcsettings | 0 .../default-context-all-ignore-module.swift | 2 + .../lowercase-context-all-ignore-module.swift | 2 + .../swift3-context-all-ignore-module.swift | 2 + .../uppercase-context-all-ignore-module.swift | 2 + Tests/Podfile.lock | 33 -- Tests/Pods/Manifest.lock | 33 -- .../ColorsTests.swift | 0 .../FontsTests.swift | 0 .../ImagesTests.swift | 0 .../StoryboardsMacOSTests.swift | 0 .../StoryboardsiOSTests.swift | 0 .../StringsTests.swift | 0 Tests/{ => TemplatesTests}/TestsHelper.swift | 61 ++- circle.yml | 14 + rakelib/changelog.rake | 35 ++ rakelib/lint.rake | 39 ++ rakelib/pod.rake | 12 + rakelib/spm.rake | 18 + rakelib/utils.rake | 123 ++++++ rakelib/xcode.rake | 18 + 108 files changed, 1007 insertions(+), 447 deletions(-) delete mode 100644 .travis.yml create mode 100644 Gemfile create mode 100644 Gemfile.lock rename Tests/Podfile => Podfile (67%) create mode 100644 Podfile.lock rename {Tests/Pods => Pods}/Local Podspecs/Stencil.podspec.json (100%) rename {Tests/Pods => Pods}/Local Podspecs/StencilSwiftKit.podspec.json (93%) create mode 100644 Pods/Manifest.lock rename {Tests/Pods => Pods}/PathKit/LICENSE (100%) rename {Tests/Pods => Pods}/PathKit/README.md (100%) rename {Tests/Pods => Pods}/PathKit/Sources/PathKit.swift (81%) rename {Tests/Pods => Pods}/Pods.xcodeproj/project.pbxproj (78%) rename {Tests/Pods => Pods}/Stencil/LICENSE (100%) rename {Tests/Pods => Pods}/Stencil/README.md (100%) rename {Tests/Pods => Pods}/Stencil/Sources/Context.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/Environment.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/Errors.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/Expression.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/Extension.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/FilterTag.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/Filters.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/ForTag.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/IfTag.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/Include.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/Inheritence.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/Lexer.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/Loader.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/Node.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/NowTag.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/Parser.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/Template.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/Tokenizer.swift (100%) rename {Tests/Pods => Pods}/Stencil/Sources/Variable.swift (100%) rename {Tests/Pods => Pods}/StencilSwiftKit/LICENSE (100%) rename {Tests/Pods => Pods}/StencilSwiftKit/README.md (87%) rename {Tests/Pods => Pods}/StencilSwiftKit/Sources/CallNode.swift (100%) rename {Tests/Pods => Pods}/StencilSwiftKit/Sources/Context.swift (77%) rename {Tests/Pods => Pods}/StencilSwiftKit/Sources/Environment.swift (96%) rename {Tests/Pods => Pods}/StencilSwiftKit/Sources/Filters.swift (93%) create mode 100644 Pods/StencilSwiftKit/Sources/MapNode.swift rename {Tests/Pods => Pods}/StencilSwiftKit/Sources/Parameters.swift (98%) rename {Tests/Pods => Pods}/StencilSwiftKit/Sources/SetNode.swift (100%) rename {Tests/Pods => Pods}/StencilSwiftKit/Sources/StencilSwiftTemplate.swift (100%) rename {Tests/Pods => Pods}/StencilSwiftKit/Sources/SwiftIdentifier.swift (100%) rename {Tests/Pods => Pods}/Target Support Files/PathKit/Info.plist (96%) rename {Tests/Pods => Pods}/Target Support Files/PathKit/PathKit-dummy.m (100%) rename {Tests/Pods => Pods}/Target Support Files/PathKit/PathKit-prefix.pch (100%) rename {Tests/Pods => Pods}/Target Support Files/PathKit/PathKit-umbrella.h (100%) rename {Tests/Pods => Pods}/Target Support Files/PathKit/PathKit.modulemap (100%) rename {Tests/Pods => Pods}/Target Support Files/PathKit/PathKit.xcconfig (100%) rename {Tests/Pods => Pods}/Target Support Files/Pods-Tests/Info.plist (100%) rename {Tests/Pods => Pods}/Target Support Files/Pods-Tests/Pods-Tests-acknowledgements.markdown (100%) rename {Tests/Pods => Pods}/Target Support Files/Pods-Tests/Pods-Tests-acknowledgements.plist (100%) rename {Tests/Pods => Pods}/Target Support Files/Pods-Tests/Pods-Tests-dummy.m (100%) rename {Tests/Pods => Pods}/Target Support Files/Pods-Tests/Pods-Tests-frameworks.sh (100%) rename {Tests/Pods => Pods}/Target Support Files/Pods-Tests/Pods-Tests-resources.sh (100%) rename {Tests/Pods => Pods}/Target Support Files/Pods-Tests/Pods-Tests-umbrella.h (100%) rename {Tests/Pods => Pods}/Target Support Files/Pods-Tests/Pods-Tests.debug.xcconfig (100%) rename {Tests/Pods => Pods}/Target Support Files/Pods-Tests/Pods-Tests.modulemap (100%) rename {Tests/Pods => Pods}/Target Support Files/Pods-Tests/Pods-Tests.release.xcconfig (100%) rename {Tests/Pods => Pods}/Target Support Files/Stencil/Info.plist (96%) rename {Tests/Pods => Pods}/Target Support Files/Stencil/Stencil-dummy.m (100%) rename {Tests/Pods => Pods}/Target Support Files/Stencil/Stencil-prefix.pch (100%) rename {Tests/Pods => Pods}/Target Support Files/Stencil/Stencil-umbrella.h (100%) rename {Tests/Pods => Pods}/Target Support Files/Stencil/Stencil.modulemap (100%) rename {Tests/Pods => Pods}/Target Support Files/Stencil/Stencil.xcconfig (100%) rename {Tests/Pods => Pods}/Target Support Files/StencilSwiftKit/Info.plist (96%) rename {Tests/Pods => Pods}/Target Support Files/StencilSwiftKit/StencilSwiftKit-dummy.m (100%) rename {Tests/Pods => Pods}/Target Support Files/StencilSwiftKit/StencilSwiftKit-prefix.pch (100%) rename {Tests/Pods => Pods}/Target Support Files/StencilSwiftKit/StencilSwiftKit-umbrella.h (100%) rename {Tests/Pods => Pods}/Target Support Files/StencilSwiftKit/StencilSwiftKit.modulemap (100%) rename {Tests/Pods => Pods}/Target Support Files/StencilSwiftKit/StencilSwiftKit.xcconfig (100%) delete mode 100755 Scripts/compile-modules.sh delete mode 100755 Scripts/compile-output.sh delete mode 100755 Scripts/install_swiftlint.sh delete mode 100755 Scripts/swiftlint-code.sh delete mode 100755 Scripts/swiftlint-output.sh rename {Tests/Templates.xcodeproj => Templates.xcodeproj}/project.pbxproj (95%) rename {Tests/Templates.xcodeproj => Templates.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (100%) rename {Tests/Templates.xcodeproj => Templates.xcodeproj}/project.xcworkspace/xcshareddata/SwiftGenKit.xcscmblueprint (100%) rename {Tests/Templates.xcodeproj => Templates.xcodeproj}/xcshareddata/xcschemes/Tests.xcscheme (100%) rename {Tests/Templates.xcworkspace => Templates.xcworkspace}/contents.xcworkspacedata (100%) rename {Tests/Templates.xcworkspace => Templates.xcworkspace}/xcshareddata/WorkspaceSettings.xcsettings (100%) delete mode 100644 Tests/Podfile.lock delete mode 100644 Tests/Pods/Manifest.lock rename Tests/{TestSuites => TemplatesTests}/ColorsTests.swift (100%) rename Tests/{TestSuites => TemplatesTests}/FontsTests.swift (100%) rename Tests/{TestSuites => TemplatesTests}/ImagesTests.swift (100%) rename Tests/{TestSuites => TemplatesTests}/StoryboardsMacOSTests.swift (100%) rename Tests/{TestSuites => TemplatesTests}/StoryboardsiOSTests.swift (100%) rename Tests/{TestSuites => TemplatesTests}/StringsTests.swift (100%) rename Tests/{ => TemplatesTests}/TestsHelper.swift (82%) create mode 100644 circle.yml create mode 100644 rakelib/changelog.rake create mode 100644 rakelib/lint.rake create mode 100644 rakelib/pod.rake create mode 100644 rakelib/spm.rake create mode 100644 rakelib/utils.rake create mode 100644 rakelib/xcode.rake diff --git a/.gitignore b/.gitignore index e1b4bbc..89b874c 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ xcuserdata/ ## Other *.moved-aside *.xcuserstate +*.xcscmblueprint ## Obj-C/Swift specific *.hmap @@ -35,7 +36,7 @@ playground.xcworkspace # Swift Package Manager # # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. -# Packages/ +Packages/ .build/ # CocoaPods @@ -49,8 +50,7 @@ playground.xcworkspace # Carthage # # Add this line if you want to avoid checking in source code from Carthage dependencies. -# Carthage/Checkouts - +Carthage/Checkouts Carthage/Build # fastlane @@ -64,3 +64,11 @@ fastlane/report.xml fastlane/Preview.html fastlane/screenshots fastlane/test_output + +# Other stuff +.apitoken +.DS_Store +.idea/ +bin/ +Frameworks/ +Rome/ diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 0d2eb17..0000000 --- a/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -language: objective-c -os: osx -osx_image: xcode8.2 - -install: - - gem install xcpretty --no-rdoc --no-ri --no-document --quiet - -env: - - RAKETASK=test - -script: - - Scripts/install_swiftlint.sh - - PROJECT_DIR=Tests Scripts/swiftlint-code.sh - - rake "$RAKETASK" - - Scripts/swiftlint-output.sh - - Scripts/compile-modules.sh - - Scripts/compile-output.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c9d339..edf2fd5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,9 @@ _None_ ### Internal Changes -_None_ +* Switch from Travis CI to Circle CI, clean up the Rakefile in the process. + [David Jennes](https://github.com/djbe) + [#24](https://github.com/SwiftGen/SwiftGenKit/issues/24) ## 1.0.0 diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..8c13227 --- /dev/null +++ b/Gemfile @@ -0,0 +1,5 @@ +# frozen_string_literal: true +source 'https://rubygems.org' + +gem 'cocoapods', '1.2.0' +gem 'xcpretty' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..d40e2b7 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,77 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (2.3.5) + activesupport (4.2.8) + i18n (~> 0.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + claide (1.0.1) + cocoapods (1.2.0) + activesupport (>= 4.0.2, < 5) + claide (>= 1.0.1, < 2.0) + cocoapods-core (= 1.2.0) + cocoapods-deintegrate (>= 1.0.1, < 2.0) + cocoapods-downloader (>= 1.1.3, < 2.0) + cocoapods-plugins (>= 1.0.0, < 2.0) + cocoapods-search (>= 1.0.0, < 2.0) + cocoapods-stats (>= 1.0.0, < 2.0) + cocoapods-trunk (>= 1.1.2, < 2.0) + cocoapods-try (>= 1.1.0, < 2.0) + colored (~> 1.2) + escape (~> 0.0.4) + fourflusher (~> 2.0.1) + gh_inspector (~> 1.0) + molinillo (~> 0.5.5) + nap (~> 1.0) + ruby-macho (~> 0.2.5) + xcodeproj (>= 1.4.1, < 2.0) + cocoapods-core (1.2.0) + activesupport (>= 4.0.2, < 5) + fuzzy_match (~> 2.0.4) + nap (~> 1.0) + cocoapods-deintegrate (1.0.1) + cocoapods-downloader (1.1.3) + cocoapods-plugins (1.0.0) + nap + cocoapods-search (1.0.0) + cocoapods-stats (1.0.0) + cocoapods-trunk (1.1.2) + nap (>= 0.8, < 2.0) + netrc (= 0.7.8) + cocoapods-try (1.1.0) + colored (1.2) + escape (0.0.4) + fourflusher (2.0.1) + fuzzy_match (2.0.4) + gh_inspector (1.0.3) + i18n (0.8.1) + minitest (5.10.1) + molinillo (0.5.6) + nanaimo (0.2.3) + nap (1.1.0) + netrc (0.7.8) + rouge (1.11.1) + ruby-macho (0.2.6) + thread_safe (0.3.6) + tzinfo (1.2.2) + thread_safe (~> 0.1) + xcodeproj (1.4.2) + CFPropertyList (~> 2.3.3) + activesupport (>= 3) + claide (>= 1.0.1, < 2.0) + colored (~> 1.2) + nanaimo (~> 0.2.3) + xcpretty (0.2.4) + rouge (~> 1.8) + +PLATFORMS + ruby + +DEPENDENCIES + cocoapods (= 1.2.0) + xcpretty + +BUNDLED WITH + 1.13.7 diff --git a/LICENSE b/LICENSE index 66f3100..e1524b1 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2017 AliSoftware +Copyright (c) 2017 SwiftGen Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Tests/Podfile b/Podfile similarity index 67% rename from Tests/Podfile rename to Podfile index d4e9d12..bae9d61 100644 --- a/Tests/Podfile +++ b/Podfile @@ -2,7 +2,7 @@ platform :osx, '10.9' use_frameworks! def common_pods - pod 'Stencil', :git => 'https://github.com/kylef/Stencil', :inhibit_warnings => true + pod 'Stencil', :inhibit_warnings => true pod 'StencilSwiftKit', :git => 'https://github.com/SwiftGen/StencilSwiftKit' end diff --git a/Podfile.lock b/Podfile.lock new file mode 100644 index 0000000..cc86685 --- /dev/null +++ b/Podfile.lock @@ -0,0 +1,28 @@ +PODS: + - PathKit (0.8.0) + - Stencil (0.8.0): + - PathKit (~> 0.8.0) + - StencilSwiftKit (1.0.1): + - Stencil (~> 0.8.0) + +DEPENDENCIES: + - Stencil + - StencilSwiftKit (from `https://github.com/SwiftGen/StencilSwiftKit`) + +EXTERNAL SOURCES: + StencilSwiftKit: + :git: https://github.com/SwiftGen/StencilSwiftKit + +CHECKOUT OPTIONS: + StencilSwiftKit: + :commit: 486c0c9e479654cfb2bff61b5f5d17822357923f + :git: https://github.com/SwiftGen/StencilSwiftKit + +SPEC CHECKSUMS: + PathKit: dcab05d701474011aae0e40cf892298a831f63d6 + Stencil: 6669684db0262e6eb316ce233e7e02d6df0a6cd9 + StencilSwiftKit: fc4a0e446f0f45264d4029b9ca3b4798a6a35ebd + +PODFILE CHECKSUM: 910aa7b4b6bcbe527b3b6800c8fe6bc374027140 + +COCOAPODS: 1.2.0 diff --git a/Tests/Pods/Local Podspecs/Stencil.podspec.json b/Pods/Local Podspecs/Stencil.podspec.json similarity index 100% rename from Tests/Pods/Local Podspecs/Stencil.podspec.json rename to Pods/Local Podspecs/Stencil.podspec.json diff --git a/Tests/Pods/Local Podspecs/StencilSwiftKit.podspec.json b/Pods/Local Podspecs/StencilSwiftKit.podspec.json similarity index 93% rename from Tests/Pods/Local Podspecs/StencilSwiftKit.podspec.json rename to Pods/Local Podspecs/StencilSwiftKit.podspec.json index f975110..d443b47 100644 --- a/Tests/Pods/Local Podspecs/StencilSwiftKit.podspec.json +++ b/Pods/Local Podspecs/StencilSwiftKit.podspec.json @@ -1,6 +1,6 @@ { "name": "StencilSwiftKit", - "version": "0.0.1", + "version": "1.0.1", "summary": "Stencil additions dedicated for Swift code generation", "description": "This pod contains some additional nodes and filters for\n[Stencil](https://github.com/kylef/Stencil).\nThese additional nodes & filters are mainly dedicated\nfor writing Stencil templates generating *Swift* code.", "homepage": "https://github.com/SwiftGen/StencilSwiftKit", @@ -14,12 +14,12 @@ }, "source": { "git": "https://github.com/SwiftGen/StencilSwiftKit.git", - "tag": "0.0.1" + "tag": "1.0.1" }, "source_files": "Sources/**/*.swift", "dependencies": { "Stencil": [ - "~> 0.7.0" + "~> 0.8.0" ] }, "frameworks": "Foundation" diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock new file mode 100644 index 0000000..cc86685 --- /dev/null +++ b/Pods/Manifest.lock @@ -0,0 +1,28 @@ +PODS: + - PathKit (0.8.0) + - Stencil (0.8.0): + - PathKit (~> 0.8.0) + - StencilSwiftKit (1.0.1): + - Stencil (~> 0.8.0) + +DEPENDENCIES: + - Stencil + - StencilSwiftKit (from `https://github.com/SwiftGen/StencilSwiftKit`) + +EXTERNAL SOURCES: + StencilSwiftKit: + :git: https://github.com/SwiftGen/StencilSwiftKit + +CHECKOUT OPTIONS: + StencilSwiftKit: + :commit: 486c0c9e479654cfb2bff61b5f5d17822357923f + :git: https://github.com/SwiftGen/StencilSwiftKit + +SPEC CHECKSUMS: + PathKit: dcab05d701474011aae0e40cf892298a831f63d6 + Stencil: 6669684db0262e6eb316ce233e7e02d6df0a6cd9 + StencilSwiftKit: fc4a0e446f0f45264d4029b9ca3b4798a6a35ebd + +PODFILE CHECKSUM: 910aa7b4b6bcbe527b3b6800c8fe6bc374027140 + +COCOAPODS: 1.2.0 diff --git a/Tests/Pods/PathKit/LICENSE b/Pods/PathKit/LICENSE similarity index 100% rename from Tests/Pods/PathKit/LICENSE rename to Pods/PathKit/LICENSE diff --git a/Tests/Pods/PathKit/README.md b/Pods/PathKit/README.md similarity index 100% rename from Tests/Pods/PathKit/README.md rename to Pods/PathKit/README.md diff --git a/Tests/Pods/PathKit/Sources/PathKit.swift b/Pods/PathKit/Sources/PathKit.swift similarity index 81% rename from Tests/Pods/PathKit/Sources/PathKit.swift rename to Pods/PathKit/Sources/PathKit.swift index c9cf3e9..9f08ca5 100644 --- a/Tests/Pods/PathKit/Sources/PathKit.swift +++ b/Pods/PathKit/Sources/PathKit.swift @@ -22,6 +22,8 @@ public struct Path { internal var path: String internal static var fileManager = FileManager.default + + internal var fileSystemInfo: FileSystemInfo = DefaultFileSystemInfo() // MARK: Init @@ -77,6 +79,19 @@ extension Path : CustomStringConvertible { } +// MARK: Conversion + +extension Path { + public var string: String { + return self.path + } + + public var url: URL { + return URL(fileURLWithPath: path) + } +} + + // MARK: Hashable extension Path : Hashable { @@ -114,6 +129,11 @@ extension Path { return normalize() } + let expandedPath = Path(NSString(string: self.path).expandingTildeInPath) + if expandedPath.isAbsolute { + return expandedPath.normalize() + } + return (Path.current + self).normalize() } @@ -133,12 +153,19 @@ extension Path { /// representation. /// public func abbreviate() -> Path { -#if os(Linux) - // TODO: actually de-normalize the path - return self -#else - return Path(NSString(string: self.path).abbreviatingWithTildeInPath) -#endif + let rangeOptions: String.CompareOptions = fileSystemInfo.isFSCaseSensitiveAt(path: self) ? + [.anchored] : [.anchored, .caseInsensitive] + let home = Path.home.string + guard let homeRange = self.path.range(of: home, options: rangeOptions) else { return self } + let withoutHome = Path(self.path.replacingCharacters(in: homeRange, with: "")) + + if withoutHome.path.isEmpty || withoutHome.path == Path.separator { + return Path("~") + } else if withoutHome.isAbsolute { + return Path("~" + withoutHome.path) + } else { + return Path("~") + withoutHome.path + } } /// Returns the path of the item pointed to by a symbolic link. @@ -156,6 +183,30 @@ extension Path { } } +internal protocol FileSystemInfo { + func isFSCaseSensitiveAt(path: Path) -> Bool +} + +internal struct DefaultFileSystemInfo: FileSystemInfo { + func isFSCaseSensitiveAt(path: Path) -> Bool { + #if os(Linux) + // URL resourceValues(forKeys:) is not supported on non-darwin platforms... + // But we can (fairly?) safely assume for now that the Linux FS is case sensitive. + // TODO: refactor when/if resourceValues is available, or look into using something + // like stat or pathconf to determine if the mountpoint is case sensitive. + return true + #else + var isCaseSensitive = false + // Calling resourceValues will fail if the path does not exist on the filesystem, which + // makes sense, but means we can only guarantee the return value is correct if the + // path actually exists. + if let resourceValues = try? path.url.resourceValues(forKeys: [.volumeSupportsCaseSensitiveNamesKey]) { + isCaseSensitive = resourceValues.volumeSupportsCaseSensitiveNames ?? isCaseSensitive + } + return isCaseSensitive + #endif + } +} // MARK: Path Components @@ -452,7 +503,7 @@ extension Path { /// - Returns: the contents of the file at the specified path. /// public func read() throws -> Data { - return try Data(contentsOf: URL(fileURLWithPath: path), options: NSData.ReadingOptions(rawValue: 0)) + return try Data(contentsOf: self.url, options: NSData.ReadingOptions(rawValue: 0)) } /// Reads the file contents and encoded its bytes to string applying the given encoding. @@ -474,7 +525,7 @@ extension Path { /// - Parameter data: the contents to write to file. /// public func write(_ data: Data) throws { - try data.write(to: URL(fileURLWithPath: normalize().path), options: .atomic) + try data.write(to: normalize().url, options: .atomic) } /// Reads the file. @@ -569,29 +620,57 @@ extension Path { // MARK: SequenceType extension Path : Sequence { + public struct DirectoryEnumerationOptions : OptionSet { + public let rawValue: UInt + public init(rawValue: UInt) { + self.rawValue = rawValue + } + + public static var skipsSubdirectoryDescendants = DirectoryEnumerationOptions(rawValue: FileManager.DirectoryEnumerationOptions.skipsSubdirectoryDescendants.rawValue) + public static var skipsPackageDescendants = DirectoryEnumerationOptions(rawValue: FileManager.DirectoryEnumerationOptions.skipsPackageDescendants.rawValue) + public static var skipsHiddenFiles = DirectoryEnumerationOptions(rawValue: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles.rawValue) + } + + /// Represents a path sequence with specific enumeration options + public struct PathSequence : Sequence { + private var path: Path + private var options: DirectoryEnumerationOptions + init(path: Path, options: DirectoryEnumerationOptions) { + self.path = path + self.options = options + } + + public func makeIterator() -> DirectoryEnumerator { + return DirectoryEnumerator(path: path, options: options) + } + } + /// Enumerates the contents of a directory, returning the paths of all files and directories /// contained within that directory. These paths are relative to the directory. public struct DirectoryEnumerator : IteratorProtocol { public typealias Element = Path let path: Path - let directoryEnumerator: FileManager.DirectoryEnumerator + let directoryEnumerator: FileManager.DirectoryEnumerator? - init(path: Path) { + init(path: Path, options mask: DirectoryEnumerationOptions = []) { + let options = FileManager.DirectoryEnumerationOptions(rawValue: mask.rawValue) self.path = path - self.directoryEnumerator = Path.fileManager.enumerator(atPath: path.path)! + self.directoryEnumerator = Path.fileManager.enumerator(at: path.url, includingPropertiesForKeys: nil, options: options) } public func next() -> Path? { - if let next = directoryEnumerator.nextObject() as! String? { - return path + next + let next = directoryEnumerator?.nextObject() + + if let next = next as? URL { + return Path(next.path) } return nil } /// Skip recursion into the most recently obtained subdirectory. public func skipDescendants() { - directoryEnumerator.skipDescendants() + directoryEnumerator?.skipDescendants() } } @@ -603,6 +682,17 @@ extension Path : Sequence { public func makeIterator() -> DirectoryEnumerator { return DirectoryEnumerator(path: self) } + + /// Perform a deep enumeration of a directory. + /// + /// - Parameter options: FileManager directory enumerator options. + /// + /// - Returns: a path sequence that can be used to perform a deep enumeration of the + /// directory. + /// + public func iterateChildren(options: DirectoryEnumerationOptions = []) -> PathSequence { + return PathSequence(path: self, options: options) + } } diff --git a/Tests/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj similarity index 78% rename from Tests/Pods/Pods.xcodeproj/project.pbxproj rename to Pods/Pods.xcodeproj/project.pbxproj index b45a3d4..5546ad8 100644 --- a/Tests/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -7,50 +7,51 @@ objects = { /* Begin PBXBuildFile section */ - 01847138AFF06C90E0177A57D59FDACE /* Tokenizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A5426BCBC806A6AA5A780F481547038 /* Tokenizer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 021F29432B3F85185827E0DC0EE78A79 /* SetNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E05110303F4EF1BF79FA0724CF3E313 /* SetNode.swift */; }; - 02E67E3FB7991FA56E20E9E5C1B81DAF /* Context.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91BE2C76E74E5F180983F9BCC1A5B853 /* Context.swift */; }; - 040B29D0120B5B450B98FC67FEC958B8 /* PathKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D6847DF518406FCD4CEC725678C4597 /* PathKit-dummy.m */; }; + 01847138AFF06C90E0177A57D59FDACE /* Tokenizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66AE7116E4DE31C636E6990FA3CFE19A /* Tokenizer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 02DE7DEE25372BF54FC2B7771F9CA373 /* Parameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B16DE49A822149EFF66E696E5F2874B /* Parameters.swift */; }; + 040B29D0120B5B450B98FC67FEC958B8 /* PathKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF4B9612B4185EAE7A6C916A7C2326E /* PathKit-dummy.m */; }; 089D6407EB1EEFC90043E9E54AD49B20 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2497E0C37C035DB8276C0C7335E3FC93 /* Cocoa.framework */; }; 0E41E483B26C85AAE00EA78880A1C3E0 /* PathKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0436538F42B0A2EC1C972F8EE47937E0 /* PathKit.framework */; }; - 13E86D0ADB461206F01308E1EFD320AF /* Environment.swift in Sources */ = {isa = PBXBuildFile; fileRef = A694DB2B01D4A14951921483F1CB241C /* Environment.swift */; }; - 1B8805B5D9190640247C00EA9F0BF08C /* NowTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A7A4E42719B41FC4AEE5433DE3AEB11 /* NowTag.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1BA59F29AB7F02089F55CE5EBE581F8B /* Context.swift in Sources */ = {isa = PBXBuildFile; fileRef = 471B08603492AF191E6851BD2FF8B2E5 /* Context.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2367547A833F83B3F00364A5C221511D /* Filters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CF4A8520C1218AF67900E6530CD3697 /* Filters.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 250F7C700371BFFB425A64130DD9C5E3 /* StencilSwiftKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 98FDFB829DE6394E7130B68A57716A8E /* StencilSwiftKit-dummy.m */; }; + 13033E3741BA06F6A8FA8E189A294DF1 /* StencilSwiftTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8A9EFE7478E8EFDDA60E0CEB2AAE25 /* StencilSwiftTemplate.swift */; }; + 1B8805B5D9190640247C00EA9F0BF08C /* NowTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 026660AA5DA8D84D28A0E5AC6D9D851D /* NowTag.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1BA59F29AB7F02089F55CE5EBE581F8B /* Context.swift in Sources */ = {isa = PBXBuildFile; fileRef = E824FD46010718958ACE14A4D84CBDAA /* Context.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2367547A833F83B3F00364A5C221511D /* Filters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 905FE6EFD60F92F8EF3849FF1FABBDEC /* Filters.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 25471AA3AF650FC7737E7A30BDC07064 /* StencilSwiftKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C9A00EC137DC08C2A781D769CCE6D634 /* StencilSwiftKit-dummy.m */; }; 2636E7A890C8E29D410238FE1578E827 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11F7F2E3F010D24453E40821938EF8EC /* Foundation.framework */; }; - 3378EE87DA9FB9454669D5D5191B4E98 /* StencilSwiftKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 17DC3F7FE727780247B8744142177850 /* StencilSwiftKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 36AAACDBFB8ECDCEA1C35A1CC99C9F10 /* Template.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DB7555160DBE01F8C52C2892AD26758 /* Template.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 44EF07BD6018CDDF4D5A72BFA3AF9F55 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27A349896F439030FE75876323217C42 /* Expression.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4ACCD085F0FCBDF0A90C9ED77A61EDE9 /* Loader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B5A7D3492E3188BAA219C2BF03DB7B8 /* Loader.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5245ABB6A66FF1DEC56583EF468DD7AA /* PathKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 748DB2173F65D116A3202AB0A7476254 /* PathKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 534EE7637DF65587E0B80E5E51CBB611 /* Inheritence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12E55ED20B9E30F6749CA776677DCA9B /* Inheritence.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 543424E82FEF86C96E322ED8658FC188 /* Stencil-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 78186B4F98B6CEEF9AE97498910C521D /* Stencil-dummy.m */; }; - 5915DB3660AA759BDD4F2302B9A999DE /* FilterTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEED6A59ADC5619FC1240A666BC33443 /* FilterTag.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5D9AB8DFA4D1BD052E1AC638A0AE5D5C /* SwiftIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E17942CE2E3EE78D5CC65495C2CC185 /* SwiftIdentifier.swift */; }; - 5F609800FB1EE08F96356C6D83C0CA4A /* Parameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FCD0E5F85AD68FC2B5C5C2027C53A20 /* Parameters.swift */; }; - 6091F58F99C5B40FB02A521CEC1FA0DA /* Filters.swift in Sources */ = {isa = PBXBuildFile; fileRef = E85D395ECDAA60C839C5449D4A186461 /* Filters.swift */; }; - 6272EE69D3F5DE1DF030E2B979A19909 /* PathKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D886E4A562B553F03DE132BF1ED7B57 /* PathKit.swift */; }; + 3378EE87DA9FB9454669D5D5191B4E98 /* StencilSwiftKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 033E826A9F57400EBA8B2CFA970EC9C5 /* StencilSwiftKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 36AAACDBFB8ECDCEA1C35A1CC99C9F10 /* Template.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECAEDC97A7E47300B15515DC8AE3145D /* Template.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 44EF07BD6018CDDF4D5A72BFA3AF9F55 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9713B7B7AE7DBBC3E4B48AFA646F36DE /* Expression.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4ACCD085F0FCBDF0A90C9ED77A61EDE9 /* Loader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6574D20EE37AD0F6126FA58D833EEB6E /* Loader.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5245ABB6A66FF1DEC56583EF468DD7AA /* PathKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FBFFEEBF59CFB66247765E833D8D1B7 /* PathKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 534EE7637DF65587E0B80E5E51CBB611 /* Inheritence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65A774DE8F6E88E78D694E06FB5DFE5B /* Inheritence.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 543424E82FEF86C96E322ED8658FC188 /* Stencil-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BE1E2228A58180CE5171029F6434766A /* Stencil-dummy.m */; }; + 5915DB3660AA759BDD4F2302B9A999DE /* FilterTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD858859B6D8590285345BBC9AE5C2FB /* FilterTag.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6272EE69D3F5DE1DF030E2B979A19909 /* PathKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5EAF2FAC2767447BFA04098C14EBF0 /* PathKit.swift */; }; + 66D9CEFF2A65A42C7C133317EA395814 /* Environment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91B26577EA098D1527AD190CE779A843 /* Environment.swift */; }; + 6D076376081FB44C9F01B946D6BBF170 /* MapNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EBF6871AAC27960A4E7B325E914CEF6 /* MapNode.swift */; }; 77D8C016692C6E24EBEDF607455B0B0E /* PathKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0436538F42B0A2EC1C972F8EE47937E0 /* PathKit.framework */; }; 7C1C25A317F91E37571D91804306D261 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2497E0C37C035DB8276C0C7335E3FC93 /* Cocoa.framework */; }; - 7CB50BD154619CA63F52131C2BDBD2C5 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D611326DAC860803131BD5BB5E59B08 /* Errors.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 805399F5611AF8E49BB0AEE1D3517FD8 /* Environment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D4F053F5586CE716E54A30343AA0613 /* Environment.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7CB50BD154619CA63F52131C2BDBD2C5 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC183FB6D040CC625BE889092DFF2BBA /* Errors.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 805399F5611AF8E49BB0AEE1D3517FD8 /* Environment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ABAE6525CE3CF694AA389D4BBD07048 /* Environment.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 82671E88F0AC858A867928AB0088BBFC /* Stencil.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A68FA9661EC6B4BA5415DDD474F7F00 /* Stencil.framework */; }; 874B546A75EE513B966CCE41CBBA6AD7 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2497E0C37C035DB8276C0C7335E3FC93 /* Cocoa.framework */; }; - 885DE8DB15D3EA1BA82F5A13E807916E /* Stencil-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 19687C80B4D33105F8B0A50D7905E033 /* Stencil-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 89B6E9CA52E2FB8E6FAC9F25F19C85BA /* CallNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB343D6C2B388F60FB9FE3B4D88AF032 /* CallNode.swift */; }; - 8FA5114518281D3F199FBC0E7C026DAA /* Node.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17EFAD74A7DA63D24C13B9C608B8D586 /* Node.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 885DE8DB15D3EA1BA82F5A13E807916E /* Stencil-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BA0DC1F299D528671F810FE54BF5061 /* Stencil-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8FA5114518281D3F199FBC0E7C026DAA /* Node.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59906807390BB4FA50648FB6426487AA /* Node.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9013B4C0F80AEC64BED4ED3AA7AA9577 /* Context.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6FFF1583C5F0EA80331000F5145B94D /* Context.swift */; }; 9BC80B3F2EE018C2BB483457AA07ACFF /* Pods-Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 52E08CA96B2F20724148FF5361AD7206 /* Pods-Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9E557C62C7C6D8FAF19396B45EDDFD31 /* Variable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87B03929355C96691F74E139BF7F86F2 /* Variable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9D8FDC9EF43DDF6571ADE141166BF56D /* SwiftIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCABAB515087FA072CB8448C9D421921 /* SwiftIdentifier.swift */; }; + 9E557C62C7C6D8FAF19396B45EDDFD31 /* Variable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AA1107141B11A4D015BDF677D05ED8C /* Variable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A2B9882F7B61B783116C9FF9147D4C05 /* Pods-Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C0ABA9994C05CE2F400945671B7038BA /* Pods-Tests-dummy.m */; }; - B3EF2372264C396DB01451491670664E /* StencilSwiftTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E6E3AC6AD08BD41D2CC76F05CB2528E /* StencilSwiftTemplate.swift */; }; - B65CC4D6EE2210495A18E7695A3E6DC5 /* Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F48C3A7C467D2F0654C94D3695B3944 /* Extension.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C22E1920B40D3E75EE6C1B253A0B3E91 /* IfTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28870438F21287F21C5D7A0EF629D4BB /* IfTag.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B43871C0968F3F18A14BC33491ADB193 /* CallNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36482A1290D10C4646C0597925D74E8E /* CallNode.swift */; }; + B65CC4D6EE2210495A18E7695A3E6DC5 /* Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86B9AA38C5A4778B7B44D3D4A49C85A0 /* Extension.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C22E1920B40D3E75EE6C1B253A0B3E91 /* IfTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4670B5CD00FEC9C0E747500A92D31204 /* IfTag.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E436943415A371D33CD28BF20935A2F9 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2497E0C37C035DB8276C0C7335E3FC93 /* Cocoa.framework */; }; - F83DF009352A70B747BDA63DBF87103F /* ForTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB7FF43C7B915A2C2740EA66673BD96D /* ForTag.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F93EC375CD4D233014C44DBDE515C6D2 /* Lexer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDB35EDE9F6D2AD5BF0FC3654FDBC3A /* Lexer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FDC0D30B75818E095F0DDB76E1D685A6 /* Include.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B0A35EBE0489745D72D08828CACB4A1 /* Include.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FEA0E65F043F875CEFBF41D9B162D461 /* Parser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 229D222463340DD34988AD70528DCF2A /* Parser.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EE9F83A4210CAE269C6C8078D18A5CE4 /* SetNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0804BE63A1EE466E0506C529835FB895 /* SetNode.swift */; }; + F83DF009352A70B747BDA63DBF87103F /* ForTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40A8C81E0CF6EDE67E7606DCB35D69A9 /* ForTag.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F93EC375CD4D233014C44DBDE515C6D2 /* Lexer.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED7F0E353F0EF02C4255285DD9252141 /* Lexer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FDC0D30B75818E095F0DDB76E1D685A6 /* Include.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32240CE75D5B799328E247882A7A4239 /* Include.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FEA0E65F043F875CEFBF41D9B162D461 /* Parser.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3DCE28985F54661772A9B32DC28DFD8 /* Parser.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FEB0E8C8189C241D3B02B83126552EE1 /* Filters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 979A0A2B746B3B4E126104FA745EACE7 /* Filters.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -99,71 +100,72 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 00621ADDE34851C7698B51EE87FC01E2 /* Stencil.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Stencil.xcconfig; sourceTree = ""; }; + 026660AA5DA8D84D28A0E5AC6D9D851D /* NowTag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NowTag.swift; path = Sources/NowTag.swift; sourceTree = ""; }; + 033E826A9F57400EBA8B2CFA970EC9C5 /* StencilSwiftKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "StencilSwiftKit-umbrella.h"; sourceTree = ""; }; 0436538F42B0A2EC1C972F8EE47937E0 /* PathKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PathKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 06E5680F77898FA7B456DBF80297AB23 /* Pods-Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Tests-frameworks.sh"; sourceTree = ""; }; - 0A7A4E42719B41FC4AEE5433DE3AEB11 /* NowTag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NowTag.swift; path = Sources/NowTag.swift; sourceTree = ""; }; - 0B0A35EBE0489745D72D08828CACB4A1 /* Include.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Include.swift; path = Sources/Include.swift; sourceTree = ""; }; - 0CF4A8520C1218AF67900E6530CD3697 /* Filters.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filters.swift; path = Sources/Filters.swift; sourceTree = ""; }; + 0804BE63A1EE466E0506C529835FB895 /* SetNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SetNode.swift; path = Sources/SetNode.swift; sourceTree = ""; }; 1143DC189DEAEC4A1278249254968FB1 /* Pods-Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Tests.debug.xcconfig"; sourceTree = ""; }; 11F7F2E3F010D24453E40821938EF8EC /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 12E55ED20B9E30F6749CA776677DCA9B /* Inheritence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Inheritence.swift; path = Sources/Inheritence.swift; sourceTree = ""; }; - 143CA7F9E6B2C424ACBE00FA134770E5 /* PathKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PathKit.xcconfig; sourceTree = ""; }; - 15918E283A01235922CEAD28EF2D65AE /* Stencil.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Stencil.xcconfig; sourceTree = ""; }; - 17DC3F7FE727780247B8744142177850 /* StencilSwiftKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "StencilSwiftKit-umbrella.h"; sourceTree = ""; }; - 17EFAD74A7DA63D24C13B9C608B8D586 /* Node.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Node.swift; path = Sources/Node.swift; sourceTree = ""; }; - 19687C80B4D33105F8B0A50D7905E033 /* Stencil-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Stencil-umbrella.h"; sourceTree = ""; }; - 229D222463340DD34988AD70528DCF2A /* Parser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Parser.swift; path = Sources/Parser.swift; sourceTree = ""; }; - 23F45792515EA0BDA702EB7E0B2AF774 /* Stencil-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Stencil-prefix.pch"; sourceTree = ""; }; 2497E0C37C035DB8276C0C7335E3FC93 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; - 27A349896F439030FE75876323217C42 /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/Expression.swift; sourceTree = ""; }; - 28870438F21287F21C5D7A0EF629D4BB /* IfTag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IfTag.swift; path = Sources/IfTag.swift; sourceTree = ""; }; - 2A5426BCBC806A6AA5A780F481547038 /* Tokenizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Tokenizer.swift; path = Sources/Tokenizer.swift; sourceTree = ""; }; 2C8AAD97E22D7F6B08B73B0AE02BFA6D /* Pods-Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Tests-resources.sh"; sourceTree = ""; }; 2E6EDE0590FA1A030C93F83C2EEFC65C /* Pods-Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Tests.release.xcconfig"; sourceTree = ""; }; - 2FEEFE8EAE28DF27817FEE9A533F167D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 31233E84FA0825B257B4360DBF463BA5 /* StencilSwiftKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = StencilSwiftKit.modulemap; sourceTree = ""; }; + 32240CE75D5B799328E247882A7A4239 /* Include.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Include.swift; path = Sources/Include.swift; sourceTree = ""; }; 351D229C0FCFC7B3571671631111EE1C /* Pods_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Tests.framework; path = "Pods-Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 3B5A7D3492E3188BAA219C2BF03DB7B8 /* Loader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Loader.swift; path = Sources/Loader.swift; sourceTree = ""; }; - 3BDB35EDE9F6D2AD5BF0FC3654FDBC3A /* Lexer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Lexer.swift; path = Sources/Lexer.swift; sourceTree = ""; }; - 3D4F053F5586CE716E54A30343AA0613 /* Environment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Environment.swift; path = Sources/Environment.swift; sourceTree = ""; }; - 3D886E4A562B553F03DE132BF1ED7B57 /* PathKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PathKit.swift; path = Sources/PathKit.swift; sourceTree = ""; }; + 36482A1290D10C4646C0597925D74E8E /* CallNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CallNode.swift; path = Sources/CallNode.swift; sourceTree = ""; }; + 40A8C81E0CF6EDE67E7606DCB35D69A9 /* ForTag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ForTag.swift; path = Sources/ForTag.swift; sourceTree = ""; }; 4309AA7478DD6B254C478AE5335748BA /* Pods-Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Tests-acknowledgements.plist"; sourceTree = ""; }; - 471B08603492AF191E6851BD2FF8B2E5 /* Context.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Context.swift; path = Sources/Context.swift; sourceTree = ""; }; + 4670B5CD00FEC9C0E747500A92D31204 /* IfTag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IfTag.swift; path = Sources/IfTag.swift; sourceTree = ""; }; 49BCF2F8CB8DBEA0E51D00A9DE6AC7F5 /* Stencil.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Stencil.framework; path = Stencil.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4D6847DF518406FCD4CEC725678C4597 /* PathKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PathKit-dummy.m"; sourceTree = ""; }; - 4E17942CE2E3EE78D5CC65495C2CC185 /* SwiftIdentifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftIdentifier.swift; path = Sources/SwiftIdentifier.swift; sourceTree = ""; }; + 4CFAB1763456C782E400965D800A3B80 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 4F35C03EE539651D8168B79F18A1DF5B /* Pods-Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-Tests.modulemap"; sourceTree = ""; }; - 4FCD0E5F85AD68FC2B5C5C2027C53A20 /* Parameters.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Parameters.swift; path = Sources/Parameters.swift; sourceTree = ""; }; + 4FBFFEEBF59CFB66247765E833D8D1B7 /* PathKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PathKit-umbrella.h"; sourceTree = ""; }; 52E08CA96B2F20724148FF5361AD7206 /* Pods-Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Tests-umbrella.h"; sourceTree = ""; }; - 5BC614B3588A118B2CFC86850D3FB4DE /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5F48C3A7C467D2F0654C94D3695B3944 /* Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Extension.swift; path = Sources/Extension.swift; sourceTree = ""; }; - 6DB7555160DBE01F8C52C2892AD26758 /* Template.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Template.swift; path = Sources/Template.swift; sourceTree = ""; }; - 6E05110303F4EF1BF79FA0724CF3E313 /* SetNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SetNode.swift; path = Sources/SetNode.swift; sourceTree = ""; }; - 6E33D4166ADB93EA045C47E2BB792F7D /* StencilSwiftKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = StencilSwiftKit.modulemap; sourceTree = ""; }; + 564A0AF095244A6C71A4DAE7A2D9AE1C /* PathKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PathKit.xcconfig; sourceTree = ""; }; + 59906807390BB4FA50648FB6426487AA /* Node.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Node.swift; path = Sources/Node.swift; sourceTree = ""; }; + 5AA1107141B11A4D015BDF677D05ED8C /* Variable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Variable.swift; path = Sources/Variable.swift; sourceTree = ""; }; + 5ABAE6525CE3CF694AA389D4BBD07048 /* Environment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Environment.swift; path = Sources/Environment.swift; sourceTree = ""; }; + 6574D20EE37AD0F6126FA58D833EEB6E /* Loader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Loader.swift; path = Sources/Loader.swift; sourceTree = ""; }; + 65A774DE8F6E88E78D694E06FB5DFE5B /* Inheritence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Inheritence.swift; path = Sources/Inheritence.swift; sourceTree = ""; }; + 66AE7116E4DE31C636E6990FA3CFE19A /* Tokenizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Tokenizer.swift; path = Sources/Tokenizer.swift; sourceTree = ""; }; + 6B16DE49A822149EFF66E696E5F2874B /* Parameters.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Parameters.swift; path = Sources/Parameters.swift; sourceTree = ""; }; 6E3DE9DADD254D64C598089530A5932B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 748DB2173F65D116A3202AB0A7476254 /* PathKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PathKit-umbrella.h"; sourceTree = ""; }; - 78186B4F98B6CEEF9AE97498910C521D /* Stencil-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Stencil-dummy.m"; sourceTree = ""; }; + 6EBF6871AAC27960A4E7B325E914CEF6 /* MapNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MapNode.swift; path = Sources/MapNode.swift; sourceTree = ""; }; + 7BA0DC1F299D528671F810FE54BF5061 /* Stencil-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Stencil-umbrella.h"; sourceTree = ""; }; 7DB310C86ADAE310E9DF111FDD487FAF /* StencilSwiftKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = StencilSwiftKit.framework; path = StencilSwiftKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7E6E3AC6AD08BD41D2CC76F05CB2528E /* StencilSwiftTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StencilSwiftTemplate.swift; path = Sources/StencilSwiftTemplate.swift; sourceTree = ""; }; - 840C25AE18F6BFA5D9D4EADF2B209201 /* PathKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = PathKit.modulemap; sourceTree = ""; }; - 851F21E75DCC0A824DB1F4BE28D2812B /* StencilSwiftKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "StencilSwiftKit-prefix.pch"; sourceTree = ""; }; - 87B03929355C96691F74E139BF7F86F2 /* Variable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Variable.swift; path = Sources/Variable.swift; sourceTree = ""; }; - 91BE2C76E74E5F180983F9BCC1A5B853 /* Context.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Context.swift; path = Sources/Context.swift; sourceTree = ""; }; + 86B9AA38C5A4778B7B44D3D4A49C85A0 /* Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Extension.swift; path = Sources/Extension.swift; sourceTree = ""; }; + 905FE6EFD60F92F8EF3849FF1FABBDEC /* Filters.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filters.swift; path = Sources/Filters.swift; sourceTree = ""; }; + 91B26577EA098D1527AD190CE779A843 /* Environment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Environment.swift; path = Sources/Environment.swift; sourceTree = ""; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 98FDFB829DE6394E7130B68A57716A8E /* StencilSwiftKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "StencilSwiftKit-dummy.m"; sourceTree = ""; }; + 9713B7B7AE7DBBC3E4B48AFA646F36DE /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/Expression.swift; sourceTree = ""; }; + 979A0A2B746B3B4E126104FA745EACE7 /* Filters.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filters.swift; path = Sources/Filters.swift; sourceTree = ""; }; 9A68FA9661EC6B4BA5415DDD474F7F00 /* Stencil.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Stencil.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9D611326DAC860803131BD5BB5E59B08 /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = Sources/Errors.swift; sourceTree = ""; }; - 9DCE35B935642F72374C57F738C01E50 /* Stencil.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = Stencil.modulemap; sourceTree = ""; }; - A41185ACB4FC0D992358796D30171E98 /* StencilSwiftKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = StencilSwiftKit.xcconfig; sourceTree = ""; }; - A694DB2B01D4A14951921483F1CB241C /* Environment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Environment.swift; path = Sources/Environment.swift; sourceTree = ""; }; - AB343D6C2B388F60FB9FE3B4D88AF032 /* CallNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CallNode.swift; path = Sources/CallNode.swift; sourceTree = ""; }; - AB7FF43C7B915A2C2740EA66673BD96D /* ForTag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ForTag.swift; path = Sources/ForTag.swift; sourceTree = ""; }; - B6A3AE610B01800EEF2DA5F4D2ADF4A2 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A65E0F4A0FB0322B0129D814ABF59A2F /* PathKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PathKit-prefix.pch"; sourceTree = ""; }; + AE5EAF2FAC2767447BFA04098C14EBF0 /* PathKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PathKit.swift; path = Sources/PathKit.swift; sourceTree = ""; }; + B274EABC378FA62DD4AA27D47853D063 /* PathKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = PathKit.modulemap; sourceTree = ""; }; + B7CDC4E3413E285310C3727B783A4EC6 /* Stencil.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = Stencil.modulemap; sourceTree = ""; }; + BC183FB6D040CC625BE889092DFF2BBA /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = Sources/Errors.swift; sourceTree = ""; }; + BE1E2228A58180CE5171029F6434766A /* Stencil-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Stencil-dummy.m"; sourceTree = ""; }; + BF423C8AE61EDA6F16372B3D54AA9AEF /* StencilSwiftKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = StencilSwiftKit.xcconfig; sourceTree = ""; }; BFE531A4BA3F8D5F7B6C9BD6D217DA29 /* Pods-Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Tests-acknowledgements.markdown"; sourceTree = ""; }; C0ABA9994C05CE2F400945671B7038BA /* Pods-Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Tests-dummy.m"; sourceTree = ""; }; - C52696DD24AA53FD3F13D29D634BFDC5 /* PathKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PathKit-prefix.pch"; sourceTree = ""; }; + C3DCE28985F54661772A9B32DC28DFD8 /* Parser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Parser.swift; path = Sources/Parser.swift; sourceTree = ""; }; C68D522B00371B910EC16028EBD47384 /* PathKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = PathKit.framework; path = PathKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CEED6A59ADC5619FC1240A666BC33443 /* FilterTag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FilterTag.swift; path = Sources/FilterTag.swift; sourceTree = ""; }; - E85D395ECDAA60C839C5449D4A186461 /* Filters.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filters.swift; path = Sources/Filters.swift; sourceTree = ""; }; + C9A00EC137DC08C2A781D769CCE6D634 /* StencilSwiftKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "StencilSwiftKit-dummy.m"; sourceTree = ""; }; + D088EEC54D2F9CCAF22FEAF05D76D3B7 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D42C36A1E44D71C702BC2A2D6E949017 /* StencilSwiftKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "StencilSwiftKit-prefix.pch"; sourceTree = ""; }; + D6FFF1583C5F0EA80331000F5145B94D /* Context.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Context.swift; path = Sources/Context.swift; sourceTree = ""; }; + DD62156F125745919828D5B306FA90F3 /* Stencil-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Stencil-prefix.pch"; sourceTree = ""; }; + E824FD46010718958ACE14A4D84CBDAA /* Context.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Context.swift; path = Sources/Context.swift; sourceTree = ""; }; + EA9413A9F018320003897C6F7C7F188F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + ECAEDC97A7E47300B15515DC8AE3145D /* Template.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Template.swift; path = Sources/Template.swift; sourceTree = ""; }; + ED7F0E353F0EF02C4255285DD9252141 /* Lexer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Lexer.swift; path = Sources/Lexer.swift; sourceTree = ""; }; + FA8A9EFE7478E8EFDDA60E0CEB2AAE25 /* StencilSwiftTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StencilSwiftTemplate.swift; path = Sources/StencilSwiftTemplate.swift; sourceTree = ""; }; + FBF4B9612B4185EAE7A6C916A7C2326E /* PathKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PathKit-dummy.m"; sourceTree = ""; }; + FCABAB515087FA072CB8448C9D421921 /* SwiftIdentifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftIdentifier.swift; path = Sources/SwiftIdentifier.swift; sourceTree = ""; }; + FD858859B6D8590285345BBC9AE5C2FB /* FilterTag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FilterTag.swift; path = Sources/FilterTag.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -214,20 +216,6 @@ name = "Targets Support Files"; sourceTree = ""; }; - 0D7DEDC1E24706F320847BEC3F1128F1 /* Support Files */ = { - isa = PBXGroup; - children = ( - 2FEEFE8EAE28DF27817FEE9A533F167D /* Info.plist */, - 840C25AE18F6BFA5D9D4EADF2B209201 /* PathKit.modulemap */, - 143CA7F9E6B2C424ACBE00FA134770E5 /* PathKit.xcconfig */, - 4D6847DF518406FCD4CEC725678C4597 /* PathKit-dummy.m */, - C52696DD24AA53FD3F13D29D634BFDC5 /* PathKit-prefix.pch */, - 748DB2173F65D116A3202AB0A7476254 /* PathKit-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/PathKit"; - sourceTree = ""; - }; 1F5E5F8A51A1DB712AA69F86066566AE /* Frameworks */ = { isa = PBXGroup; children = ( @@ -238,33 +226,6 @@ name = Frameworks; sourceTree = ""; }; - 3C2262D8FC7D0DE806F9A172ABD96D96 /* PathKit */ = { - isa = PBXGroup; - children = ( - 3D886E4A562B553F03DE132BF1ED7B57 /* PathKit.swift */, - 0D7DEDC1E24706F320847BEC3F1128F1 /* Support Files */, - ); - name = PathKit; - path = PathKit; - sourceTree = ""; - }; - 3CD8826C64C7E23617A14FBF1E62129A /* StencilSwiftKit */ = { - isa = PBXGroup; - children = ( - AB343D6C2B388F60FB9FE3B4D88AF032 /* CallNode.swift */, - 91BE2C76E74E5F180983F9BCC1A5B853 /* Context.swift */, - A694DB2B01D4A14951921483F1CB241C /* Environment.swift */, - E85D395ECDAA60C839C5449D4A186461 /* Filters.swift */, - 4FCD0E5F85AD68FC2B5C5C2027C53A20 /* Parameters.swift */, - 6E05110303F4EF1BF79FA0724CF3E313 /* SetNode.swift */, - 7E6E3AC6AD08BD41D2CC76F05CB2528E /* StencilSwiftTemplate.swift */, - 4E17942CE2E3EE78D5CC65495C2CC185 /* SwiftIdentifier.swift */, - 5F63477E0DA27B028A56331CE06CE15F /* Support Files */, - ); - name = StencilSwiftKit; - path = StencilSwiftKit; - sourceTree = ""; - }; 47034B618C7AB6B73C31D4C6B5F235F8 /* Pods-Tests */ = { isa = PBXGroup; children = ( @@ -283,28 +244,28 @@ path = "Target Support Files/Pods-Tests"; sourceTree = ""; }; - 5A79C364D63423AC447CCF5AB7D7F123 /* Pods */ = { + 66843D1B67E6DD658537B4B3514DC4E0 /* Support Files */ = { isa = PBXGroup; children = ( - 3C2262D8FC7D0DE806F9A172ABD96D96 /* PathKit */, - 9CEB4D9E24EF85B6A9330EF1B5005F76 /* Stencil */, - 3CD8826C64C7E23617A14FBF1E62129A /* StencilSwiftKit */, + 4CFAB1763456C782E400965D800A3B80 /* Info.plist */, + B274EABC378FA62DD4AA27D47853D063 /* PathKit.modulemap */, + 564A0AF095244A6C71A4DAE7A2D9AE1C /* PathKit.xcconfig */, + FBF4B9612B4185EAE7A6C916A7C2326E /* PathKit-dummy.m */, + A65E0F4A0FB0322B0129D814ABF59A2F /* PathKit-prefix.pch */, + 4FBFFEEBF59CFB66247765E833D8D1B7 /* PathKit-umbrella.h */, ); - name = Pods; + name = "Support Files"; + path = "../Target Support Files/PathKit"; sourceTree = ""; }; - 5F63477E0DA27B028A56331CE06CE15F /* Support Files */ = { + 6E3DE0C5E5000CB72990521C7F6809CE /* PathKit */ = { isa = PBXGroup; children = ( - B6A3AE610B01800EEF2DA5F4D2ADF4A2 /* Info.plist */, - 6E33D4166ADB93EA045C47E2BB792F7D /* StencilSwiftKit.modulemap */, - A41185ACB4FC0D992358796D30171E98 /* StencilSwiftKit.xcconfig */, - 98FDFB829DE6394E7130B68A57716A8E /* StencilSwiftKit-dummy.m */, - 851F21E75DCC0A824DB1F4BE28D2812B /* StencilSwiftKit-prefix.pch */, - 17DC3F7FE727780247B8744142177850 /* StencilSwiftKit-umbrella.h */, + AE5EAF2FAC2767447BFA04098C14EBF0 /* PathKit.swift */, + 66843D1B67E6DD658537B4B3514DC4E0 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/StencilSwiftKit"; + name = PathKit; + path = PathKit; sourceTree = ""; }; 7DB346D0F39D3F0E887471402A8071AB = { @@ -312,54 +273,78 @@ children = ( 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 1F5E5F8A51A1DB712AA69F86066566AE /* Frameworks */, - 5A79C364D63423AC447CCF5AB7D7F123 /* Pods */, + 8E932A5C9EFB9074C1378138F9414929 /* Pods */, B499EA03E3E7FF8D31B3BE631B1240D0 /* Products */, 000722C3134BAC39CFC2600254B1E03E /* Targets Support Files */, ); sourceTree = ""; }; - 991331CF8A51CFBD8AC925C65ED31754 /* Support Files */ = { + 8E932A5C9EFB9074C1378138F9414929 /* Pods */ = { isa = PBXGroup; children = ( - 5BC614B3588A118B2CFC86850D3FB4DE /* Info.plist */, - 9DCE35B935642F72374C57F738C01E50 /* Stencil.modulemap */, - 15918E283A01235922CEAD28EF2D65AE /* Stencil.xcconfig */, - 78186B4F98B6CEEF9AE97498910C521D /* Stencil-dummy.m */, - 23F45792515EA0BDA702EB7E0B2AF774 /* Stencil-prefix.pch */, - 19687C80B4D33105F8B0A50D7905E033 /* Stencil-umbrella.h */, + 6E3DE0C5E5000CB72990521C7F6809CE /* PathKit */, + 952C06EA8E7E803838C31F591976D220 /* Stencil */, + C0B9D9939DA9A4EF651C0F3B630B05E6 /* StencilSwiftKit */, ); - name = "Support Files"; - path = "../Target Support Files/Stencil"; + name = Pods; sourceTree = ""; }; - 9CEB4D9E24EF85B6A9330EF1B5005F76 /* Stencil */ = { + 952C06EA8E7E803838C31F591976D220 /* Stencil */ = { isa = PBXGroup; children = ( - 471B08603492AF191E6851BD2FF8B2E5 /* Context.swift */, - 3D4F053F5586CE716E54A30343AA0613 /* Environment.swift */, - 9D611326DAC860803131BD5BB5E59B08 /* Errors.swift */, - 27A349896F439030FE75876323217C42 /* Expression.swift */, - 5F48C3A7C467D2F0654C94D3695B3944 /* Extension.swift */, - 0CF4A8520C1218AF67900E6530CD3697 /* Filters.swift */, - CEED6A59ADC5619FC1240A666BC33443 /* FilterTag.swift */, - AB7FF43C7B915A2C2740EA66673BD96D /* ForTag.swift */, - 28870438F21287F21C5D7A0EF629D4BB /* IfTag.swift */, - 0B0A35EBE0489745D72D08828CACB4A1 /* Include.swift */, - 12E55ED20B9E30F6749CA776677DCA9B /* Inheritence.swift */, - 3BDB35EDE9F6D2AD5BF0FC3654FDBC3A /* Lexer.swift */, - 3B5A7D3492E3188BAA219C2BF03DB7B8 /* Loader.swift */, - 17EFAD74A7DA63D24C13B9C608B8D586 /* Node.swift */, - 0A7A4E42719B41FC4AEE5433DE3AEB11 /* NowTag.swift */, - 229D222463340DD34988AD70528DCF2A /* Parser.swift */, - 6DB7555160DBE01F8C52C2892AD26758 /* Template.swift */, - 2A5426BCBC806A6AA5A780F481547038 /* Tokenizer.swift */, - 87B03929355C96691F74E139BF7F86F2 /* Variable.swift */, - 991331CF8A51CFBD8AC925C65ED31754 /* Support Files */, + E824FD46010718958ACE14A4D84CBDAA /* Context.swift */, + 5ABAE6525CE3CF694AA389D4BBD07048 /* Environment.swift */, + BC183FB6D040CC625BE889092DFF2BBA /* Errors.swift */, + 9713B7B7AE7DBBC3E4B48AFA646F36DE /* Expression.swift */, + 86B9AA38C5A4778B7B44D3D4A49C85A0 /* Extension.swift */, + 905FE6EFD60F92F8EF3849FF1FABBDEC /* Filters.swift */, + FD858859B6D8590285345BBC9AE5C2FB /* FilterTag.swift */, + 40A8C81E0CF6EDE67E7606DCB35D69A9 /* ForTag.swift */, + 4670B5CD00FEC9C0E747500A92D31204 /* IfTag.swift */, + 32240CE75D5B799328E247882A7A4239 /* Include.swift */, + 65A774DE8F6E88E78D694E06FB5DFE5B /* Inheritence.swift */, + ED7F0E353F0EF02C4255285DD9252141 /* Lexer.swift */, + 6574D20EE37AD0F6126FA58D833EEB6E /* Loader.swift */, + 59906807390BB4FA50648FB6426487AA /* Node.swift */, + 026660AA5DA8D84D28A0E5AC6D9D851D /* NowTag.swift */, + C3DCE28985F54661772A9B32DC28DFD8 /* Parser.swift */, + ECAEDC97A7E47300B15515DC8AE3145D /* Template.swift */, + 66AE7116E4DE31C636E6990FA3CFE19A /* Tokenizer.swift */, + 5AA1107141B11A4D015BDF677D05ED8C /* Variable.swift */, + A4A17FD59D45A790A6F0E5C54E33304C /* Support Files */, ); name = Stencil; path = Stencil; sourceTree = ""; }; + 988D057B420A74C5882C163E6F939920 /* Support Files */ = { + isa = PBXGroup; + children = ( + EA9413A9F018320003897C6F7C7F188F /* Info.plist */, + 31233E84FA0825B257B4360DBF463BA5 /* StencilSwiftKit.modulemap */, + BF423C8AE61EDA6F16372B3D54AA9AEF /* StencilSwiftKit.xcconfig */, + C9A00EC137DC08C2A781D769CCE6D634 /* StencilSwiftKit-dummy.m */, + D42C36A1E44D71C702BC2A2D6E949017 /* StencilSwiftKit-prefix.pch */, + 033E826A9F57400EBA8B2CFA970EC9C5 /* StencilSwiftKit-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/StencilSwiftKit"; + sourceTree = ""; + }; + A4A17FD59D45A790A6F0E5C54E33304C /* Support Files */ = { + isa = PBXGroup; + children = ( + D088EEC54D2F9CCAF22FEAF05D76D3B7 /* Info.plist */, + B7CDC4E3413E285310C3727B783A4EC6 /* Stencil.modulemap */, + 00621ADDE34851C7698B51EE87FC01E2 /* Stencil.xcconfig */, + BE1E2228A58180CE5171029F6434766A /* Stencil-dummy.m */, + DD62156F125745919828D5B306FA90F3 /* Stencil-prefix.pch */, + 7BA0DC1F299D528671F810FE54BF5061 /* Stencil-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/Stencil"; + sourceTree = ""; + }; B499EA03E3E7FF8D31B3BE631B1240D0 /* Products */ = { isa = PBXGroup; children = ( @@ -380,6 +365,24 @@ name = "OS X"; sourceTree = ""; }; + C0B9D9939DA9A4EF651C0F3B630B05E6 /* StencilSwiftKit */ = { + isa = PBXGroup; + children = ( + 36482A1290D10C4646C0597925D74E8E /* CallNode.swift */, + D6FFF1583C5F0EA80331000F5145B94D /* Context.swift */, + 91B26577EA098D1527AD190CE779A843 /* Environment.swift */, + 979A0A2B746B3B4E126104FA745EACE7 /* Filters.swift */, + 6EBF6871AAC27960A4E7B325E914CEF6 /* MapNode.swift */, + 6B16DE49A822149EFF66E696E5F2874B /* Parameters.swift */, + 0804BE63A1EE466E0506C529835FB895 /* SetNode.swift */, + FA8A9EFE7478E8EFDDA60E0CEB2AAE25 /* StencilSwiftTemplate.swift */, + FCABAB515087FA072CB8448C9D421921 /* SwiftIdentifier.swift */, + 988D057B420A74C5882C163E6F939920 /* Support Files */, + ); + name = StencilSwiftKit; + path = StencilSwiftKit; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -477,7 +480,7 @@ isa = PBXNativeTarget; buildConfigurationList = 129C5DBD1F855F49F876BF6123ACCEA1 /* Build configuration list for PBXNativeTarget "StencilSwiftKit" */; buildPhases = ( - 28917C4779F065D326C10CA246D87197 /* Sources */, + C1DFC74ED6B052384CA646E7122706D6 /* Sources */, 0F3EB15820713BB45F78D235C5EDFAB9 /* Frameworks */, D69B46456E4A5977AF2F2E41E1569930 /* Headers */, ); @@ -522,22 +525,6 @@ /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 28917C4779F065D326C10CA246D87197 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 89B6E9CA52E2FB8E6FAC9F25F19C85BA /* CallNode.swift in Sources */, - 02E67E3FB7991FA56E20E9E5C1B81DAF /* Context.swift in Sources */, - 13E86D0ADB461206F01308E1EFD320AF /* Environment.swift in Sources */, - 6091F58F99C5B40FB02A521CEC1FA0DA /* Filters.swift in Sources */, - 5F609800FB1EE08F96356C6D83C0CA4A /* Parameters.swift in Sources */, - 021F29432B3F85185827E0DC0EE78A79 /* SetNode.swift in Sources */, - 250F7C700371BFFB425A64130DD9C5E3 /* StencilSwiftKit-dummy.m in Sources */, - B3EF2372264C396DB01451491670664E /* StencilSwiftTemplate.swift in Sources */, - 5D9AB8DFA4D1BD052E1AC638A0AE5D5C /* SwiftIdentifier.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 3D59F8770039F9D6E69A0F74F304A02A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -574,6 +561,23 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + C1DFC74ED6B052384CA646E7122706D6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B43871C0968F3F18A14BC33491ADB193 /* CallNode.swift in Sources */, + 9013B4C0F80AEC64BED4ED3AA7AA9577 /* Context.swift in Sources */, + 66D9CEFF2A65A42C7C133317EA395814 /* Environment.swift in Sources */, + FEB0E8C8189C241D3B02B83126552EE1 /* Filters.swift in Sources */, + 6D076376081FB44C9F01B946D6BBF170 /* MapNode.swift in Sources */, + 02DE7DEE25372BF54FC2B7771F9CA373 /* Parameters.swift in Sources */, + EE9F83A4210CAE269C6C8078D18A5CE4 /* SetNode.swift in Sources */, + 25471AA3AF650FC7737E7A30BDC07064 /* StencilSwiftKit-dummy.m in Sources */, + 13033E3741BA06F6A8FA8E189A294DF1 /* StencilSwiftTemplate.swift in Sources */, + 9D8FDC9EF43DDF6571ADE141166BF56D /* SwiftIdentifier.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; ED7F721EA5274D6B4F54972B473CC719 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -626,7 +630,7 @@ /* Begin XCBuildConfiguration section */ 07D806167CD6B3291DDD8EABAE2E5033 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 143CA7F9E6B2C424ACBE00FA134770E5 /* PathKit.xcconfig */; + baseConfigurationReference = 564A0AF095244A6C71A4DAE7A2D9AE1C /* PathKit.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -698,7 +702,7 @@ }; 1A273A5EFCFA51823F711D526DBB89E6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A41185ACB4FC0D992358796D30171E98 /* StencilSwiftKit.xcconfig */; + baseConfigurationReference = BF423C8AE61EDA6F16372B3D54AA9AEF /* StencilSwiftKit.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -733,7 +737,7 @@ }; 3F0841B5E0D42ADBF691A02A979C914C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 15918E283A01235922CEAD28EF2D65AE /* Stencil.xcconfig */; + baseConfigurationReference = 00621ADDE34851C7698B51EE87FC01E2 /* Stencil.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -767,7 +771,7 @@ }; 3FE96C573F5D937AF5EF0B83C65B0A3F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 15918E283A01235922CEAD28EF2D65AE /* Stencil.xcconfig */; + baseConfigurationReference = 00621ADDE34851C7698B51EE87FC01E2 /* Stencil.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -842,7 +846,7 @@ }; 6DBE1542CAA56B2EBB1188C387EBA0FF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A41185ACB4FC0D992358796D30171E98 /* StencilSwiftKit.xcconfig */; + baseConfigurationReference = BF423C8AE61EDA6F16372B3D54AA9AEF /* StencilSwiftKit.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -914,7 +918,7 @@ }; C0615970E7397BC442586C7600152196 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 143CA7F9E6B2C424ACBE00FA134770E5 /* PathKit.xcconfig */; + baseConfigurationReference = 564A0AF095244A6C71A4DAE7A2D9AE1C /* PathKit.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; diff --git a/Tests/Pods/Stencil/LICENSE b/Pods/Stencil/LICENSE similarity index 100% rename from Tests/Pods/Stencil/LICENSE rename to Pods/Stencil/LICENSE diff --git a/Tests/Pods/Stencil/README.md b/Pods/Stencil/README.md similarity index 100% rename from Tests/Pods/Stencil/README.md rename to Pods/Stencil/README.md diff --git a/Tests/Pods/Stencil/Sources/Context.swift b/Pods/Stencil/Sources/Context.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/Context.swift rename to Pods/Stencil/Sources/Context.swift diff --git a/Tests/Pods/Stencil/Sources/Environment.swift b/Pods/Stencil/Sources/Environment.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/Environment.swift rename to Pods/Stencil/Sources/Environment.swift diff --git a/Tests/Pods/Stencil/Sources/Errors.swift b/Pods/Stencil/Sources/Errors.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/Errors.swift rename to Pods/Stencil/Sources/Errors.swift diff --git a/Tests/Pods/Stencil/Sources/Expression.swift b/Pods/Stencil/Sources/Expression.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/Expression.swift rename to Pods/Stencil/Sources/Expression.swift diff --git a/Tests/Pods/Stencil/Sources/Extension.swift b/Pods/Stencil/Sources/Extension.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/Extension.swift rename to Pods/Stencil/Sources/Extension.swift diff --git a/Tests/Pods/Stencil/Sources/FilterTag.swift b/Pods/Stencil/Sources/FilterTag.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/FilterTag.swift rename to Pods/Stencil/Sources/FilterTag.swift diff --git a/Tests/Pods/Stencil/Sources/Filters.swift b/Pods/Stencil/Sources/Filters.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/Filters.swift rename to Pods/Stencil/Sources/Filters.swift diff --git a/Tests/Pods/Stencil/Sources/ForTag.swift b/Pods/Stencil/Sources/ForTag.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/ForTag.swift rename to Pods/Stencil/Sources/ForTag.swift diff --git a/Tests/Pods/Stencil/Sources/IfTag.swift b/Pods/Stencil/Sources/IfTag.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/IfTag.swift rename to Pods/Stencil/Sources/IfTag.swift diff --git a/Tests/Pods/Stencil/Sources/Include.swift b/Pods/Stencil/Sources/Include.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/Include.swift rename to Pods/Stencil/Sources/Include.swift diff --git a/Tests/Pods/Stencil/Sources/Inheritence.swift b/Pods/Stencil/Sources/Inheritence.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/Inheritence.swift rename to Pods/Stencil/Sources/Inheritence.swift diff --git a/Tests/Pods/Stencil/Sources/Lexer.swift b/Pods/Stencil/Sources/Lexer.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/Lexer.swift rename to Pods/Stencil/Sources/Lexer.swift diff --git a/Tests/Pods/Stencil/Sources/Loader.swift b/Pods/Stencil/Sources/Loader.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/Loader.swift rename to Pods/Stencil/Sources/Loader.swift diff --git a/Tests/Pods/Stencil/Sources/Node.swift b/Pods/Stencil/Sources/Node.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/Node.swift rename to Pods/Stencil/Sources/Node.swift diff --git a/Tests/Pods/Stencil/Sources/NowTag.swift b/Pods/Stencil/Sources/NowTag.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/NowTag.swift rename to Pods/Stencil/Sources/NowTag.swift diff --git a/Tests/Pods/Stencil/Sources/Parser.swift b/Pods/Stencil/Sources/Parser.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/Parser.swift rename to Pods/Stencil/Sources/Parser.swift diff --git a/Tests/Pods/Stencil/Sources/Template.swift b/Pods/Stencil/Sources/Template.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/Template.swift rename to Pods/Stencil/Sources/Template.swift diff --git a/Tests/Pods/Stencil/Sources/Tokenizer.swift b/Pods/Stencil/Sources/Tokenizer.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/Tokenizer.swift rename to Pods/Stencil/Sources/Tokenizer.swift diff --git a/Tests/Pods/Stencil/Sources/Variable.swift b/Pods/Stencil/Sources/Variable.swift similarity index 100% rename from Tests/Pods/Stencil/Sources/Variable.swift rename to Pods/Stencil/Sources/Variable.swift diff --git a/Tests/Pods/StencilSwiftKit/LICENSE b/Pods/StencilSwiftKit/LICENSE similarity index 100% rename from Tests/Pods/StencilSwiftKit/LICENSE rename to Pods/StencilSwiftKit/LICENSE diff --git a/Tests/Pods/StencilSwiftKit/README.md b/Pods/StencilSwiftKit/README.md similarity index 87% rename from Tests/Pods/StencilSwiftKit/README.md rename to Pods/StencilSwiftKit/README.md index 9e7217d..6b775dd 100644 --- a/Tests/Pods/StencilSwiftKit/README.md +++ b/Pods/StencilSwiftKit/README.md @@ -1,6 +1,6 @@ # StencilSwiftKit -[![Build Status](https://travis-ci.org/SwiftGen/StencilSwiftKit.svg?branch=master)](https://travis-ci.org/SwiftGen/StencilSwiftKit) +[![CircleCI](https://circleci.com/gh/SwiftGen/StencilSwiftKit/tree/master.svg?style=svg)](https://circleci.com/gh/SwiftGen/StencilSwiftKit/tree/master) [![CocoaPods Compatible](https://img.shields.io/cocoapods/v/StencilSwiftKit.svg)](https://img.shields.io/cocoapods/v/StencilSwiftKit.svg) [![Platform](https://img.shields.io/cocoapods/p/StencilSwiftKit.svg?style=flat)](http://cocoadocs.org/docsets/StencilSwiftKit) ![Swift 3.0](https://img.shields.io/badge/Swift-3.0-orange.svg) @@ -19,6 +19,10 @@ _TODO: [Write more extension Documentation](https://github.com/SwiftGen/StencilS * `SetNode` * `{% set %}…{% endset %}` * Renders the nodes inside this block immediately, and stores the result in the ` variable of the current context. +* `MapNode` + * `{% map into using %}…{% endmap %}` + * Apply a `map` operator to an array, and store the result into a new array variable `` in the current context. + * Inside the map loop, a `maploop` special variable is available (akin to the `forloop` variable in `for` nodes). It exposes `maploop.count`, `maploop.first`, `maploop.last` and `maploop.item`. ## Filters diff --git a/Tests/Pods/StencilSwiftKit/Sources/CallNode.swift b/Pods/StencilSwiftKit/Sources/CallNode.swift similarity index 100% rename from Tests/Pods/StencilSwiftKit/Sources/CallNode.swift rename to Pods/StencilSwiftKit/Sources/CallNode.swift diff --git a/Tests/Pods/StencilSwiftKit/Sources/Context.swift b/Pods/StencilSwiftKit/Sources/Context.swift similarity index 77% rename from Tests/Pods/StencilSwiftKit/Sources/Context.swift rename to Pods/StencilSwiftKit/Sources/Context.swift index ca649f3..b26d34a 100644 --- a/Tests/Pods/StencilSwiftKit/Sources/Context.swift +++ b/Pods/StencilSwiftKit/Sources/Context.swift @@ -19,12 +19,14 @@ public enum StencilContext { - Parameter parameters: List of strings, will be parsed using the `Parameters.parse(items:)` method - Parameter environment: Environment variables, defaults to `ProcessInfo().environment` */ - public static func enrich(context: [String: Any], parameters: [String], environment: [String: String] = ProcessInfo().environment) throws -> [String: Any] { + public static func enrich(context: [String: Any], + parameters: [String], + environment: [String: String] = ProcessInfo().environment) throws -> [String: Any] { var context = context - + context[StencilContext.environment] = environment context[StencilContext.parameters] = try Parameters.parse(items: parameters) - + return context } } diff --git a/Tests/Pods/StencilSwiftKit/Sources/Environment.swift b/Pods/StencilSwiftKit/Sources/Environment.swift similarity index 96% rename from Tests/Pods/StencilSwiftKit/Sources/Environment.swift rename to Pods/StencilSwiftKit/Sources/Environment.swift index f7026ff..db6f73c 100644 --- a/Tests/Pods/StencilSwiftKit/Sources/Environment.swift +++ b/Pods/StencilSwiftKit/Sources/Environment.swift @@ -11,6 +11,7 @@ public extension Extension { registerTag("set", parser: SetNode.parse) registerTag("macro", parser: MacroNode.parse) registerTag("call", parser: CallNode.parse) + registerTag("map", parser: MapNode.parse) registerFilter("swiftIdentifier", filter: StringFilters.stringToSwiftIdentifier) registerFilter("join", filter: ArrayFilters.join) registerFilter("lowerFirstWord", filter: StringFilters.lowerFirstWord) @@ -27,6 +28,6 @@ public extension Extension { public func stencilSwiftEnvironment() -> Environment { let ext = Extension() ext.registerStencilSwiftExtensions() - + return Environment(extensions: [ext], templateClass: StencilSwiftTemplate.self) } diff --git a/Tests/Pods/StencilSwiftKit/Sources/Filters.swift b/Pods/StencilSwiftKit/Sources/Filters.swift similarity index 93% rename from Tests/Pods/StencilSwiftKit/Sources/Filters.swift rename to Pods/StencilSwiftKit/Sources/Filters.swift index 3a9f8d4..892a821 100644 --- a/Tests/Pods/StencilSwiftKit/Sources/Filters.swift +++ b/Pods/StencilSwiftKit/Sources/Filters.swift @@ -120,8 +120,14 @@ struct StringFilters { let camelCased = try NSRegularExpression(pattern: "([a-z\\d])([A-Z])", options: .dotMatchesLineSeparators) let fullRange = NSRange(location: 0, length: string.unicodeScalars.count) - var result = longUpper.stringByReplacingMatches(in: string, options: .reportCompletion, range: fullRange, withTemplate: "$1_$2") - result = camelCased.stringByReplacingMatches(in: result, options: .reportCompletion, range: fullRange, withTemplate: "$1_$2") + var result = longUpper.stringByReplacingMatches(in: string, + options: .reportCompletion, + range: fullRange, + withTemplate: "$1_$2") + result = camelCased.stringByReplacingMatches(in: result, + options: .reportCompletion, + range: fullRange, + withTemplate: "$1_$2") return result.replacingOccurrences(of: "-", with: "_") } } diff --git a/Pods/StencilSwiftKit/Sources/MapNode.swift b/Pods/StencilSwiftKit/Sources/MapNode.swift new file mode 100644 index 0000000..88c9658 --- /dev/null +++ b/Pods/StencilSwiftKit/Sources/MapNode.swift @@ -0,0 +1,87 @@ +// +// StencilSwiftKit +// Copyright (c) 2017 Olivier Halligon +// Created by Peter Livesey. +// MIT Licence +// + +import Stencil + +class MapNode: NodeType { + let variable: Variable + let resultName: String + let mapVariable: String? + let nodes: [NodeType] + + class func parse(parser: TokenParser, token: Token) throws -> NodeType { + let components = token.components() + + guard components.count == 4 && components[2] == "into" || + components.count == 6 && components[2] == "into" && components[4] == "using" else { + let error = "'map' statements should use the following " + + "'map {array} into {varname} [using {element}]' `\(token.contents)`." + throw TemplateSyntaxError(error) + } + + let variable = components[1] + let resultName = components[3] + var mapVariable: String? = nil + if components.count > 4 { + mapVariable = components[5] + } + + let mapNodes = try parser.parse(until(["endmap", "empty"])) + + guard let token = parser.nextToken() else { + throw TemplateSyntaxError("`endmap` was not found.") + } + + if token.contents == "empty" { + _ = parser.nextToken() + } + + return MapNode(variable: variable, resultName: resultName, mapVariable: mapVariable, nodes: mapNodes) + } + + init(variable: String, resultName: String, mapVariable: String?, nodes: [NodeType]) { + self.variable = Variable(variable) + self.resultName = resultName + self.mapVariable = mapVariable + self.nodes = nodes + } + + func render(_ context: Context) throws -> String { + let values = try variable.resolve(context) + + if let values = values as? [Any], values.count > 0 { + let mappedValues: [String] = try values.enumerated().map { (index, item) in + let mapContext = self.context(values: values, index: index, item: item) + + return try context.push(dictionary: mapContext) { + try renderNodes(nodes, context) + } + } + context[resultName] = mappedValues + } + + // Map should never render anything + return "" + } + + func context(values: [Any], index: Int, item: Any) -> [String: Any] { + var result: [String: Any] = [ + "maploop": [ + "counter": index, + "first": index == 0, + "last": index == (values.count - 1), + "item": item + ] + ] + + if let mapVariable = mapVariable { + result[mapVariable] = item + } + + return result + } +} diff --git a/Tests/Pods/StencilSwiftKit/Sources/Parameters.swift b/Pods/StencilSwiftKit/Sources/Parameters.swift similarity index 98% rename from Tests/Pods/StencilSwiftKit/Sources/Parameters.swift rename to Pods/StencilSwiftKit/Sources/Parameters.swift index 69a88b9..ac0d5e8 100644 --- a/Tests/Pods/StencilSwiftKit/Sources/Parameters.swift +++ b/Pods/StencilSwiftKit/Sources/Parameters.swift @@ -15,7 +15,7 @@ public enum ParametersError: Error { public enum Parameters { typealias Parameter = (key: String, value: Any) public typealias StringDict = [String: Any] - + public static func parse(items: [String]) throws -> StringDict { let parameters: [Parameter] = try items.map { item in let parts = item.components(separatedBy: "=") @@ -27,20 +27,20 @@ public enum Parameters { throw ParametersError.invalidSyntax(value: item) } } - + return try parameters.reduce(StringDict()) { try parse(parameter: $1, result: $0) } } - + private static func parse(parameter: Parameter, result: StringDict) throws -> StringDict { let parts = parameter.key.components(separatedBy: ".") let key = parts.first ?? "" var result = result - + // validate key guard validate(key: key) else { throw ParametersError.invalidKey(key: parameter.key, value: parameter.value) } - + // no sub keys, may need to convert to array if repeat key if possible if parts.count == 1 { if let current = result[key] as? [Any] { @@ -56,22 +56,22 @@ public enum Parameters { guard result[key] is StringDict || result[key] == nil else { throw ParametersError.invalidStructure(key: key, oldValue: result[key] ?? "", newValue: parameter.value) } - + // recurse into sub keys let current = result[key] as? StringDict ?? StringDict() let sub = (key: parts.suffix(from: 1).joined(separator: "."), value: parameter.value) result[key] = try parse(parameter: sub, result: current) } - + return result } - + // a valid key is not empty and only alphanumerical or dot private static func validate(key: String) -> Bool { return !key.isEmpty && key.rangeOfCharacter(from: notAlphanumericsAndDot) == nil } - + private static let notAlphanumericsAndDot: CharacterSet = { var result = CharacterSet.alphanumerics result.insert(".") diff --git a/Tests/Pods/StencilSwiftKit/Sources/SetNode.swift b/Pods/StencilSwiftKit/Sources/SetNode.swift similarity index 100% rename from Tests/Pods/StencilSwiftKit/Sources/SetNode.swift rename to Pods/StencilSwiftKit/Sources/SetNode.swift diff --git a/Tests/Pods/StencilSwiftKit/Sources/StencilSwiftTemplate.swift b/Pods/StencilSwiftKit/Sources/StencilSwiftTemplate.swift similarity index 100% rename from Tests/Pods/StencilSwiftKit/Sources/StencilSwiftTemplate.swift rename to Pods/StencilSwiftKit/Sources/StencilSwiftTemplate.swift diff --git a/Tests/Pods/StencilSwiftKit/Sources/SwiftIdentifier.swift b/Pods/StencilSwiftKit/Sources/SwiftIdentifier.swift similarity index 100% rename from Tests/Pods/StencilSwiftKit/Sources/SwiftIdentifier.swift rename to Pods/StencilSwiftKit/Sources/SwiftIdentifier.swift diff --git a/Tests/Pods/Target Support Files/PathKit/Info.plist b/Pods/Target Support Files/PathKit/Info.plist similarity index 96% rename from Tests/Pods/Target Support Files/PathKit/Info.plist rename to Pods/Target Support Files/PathKit/Info.plist index 75ba4d0..2cf03a7 100644 --- a/Tests/Pods/Target Support Files/PathKit/Info.plist +++ b/Pods/Target Support Files/PathKit/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.7.0 + 0.8.0 CFBundleSignature ???? CFBundleVersion diff --git a/Tests/Pods/Target Support Files/PathKit/PathKit-dummy.m b/Pods/Target Support Files/PathKit/PathKit-dummy.m similarity index 100% rename from Tests/Pods/Target Support Files/PathKit/PathKit-dummy.m rename to Pods/Target Support Files/PathKit/PathKit-dummy.m diff --git a/Tests/Pods/Target Support Files/PathKit/PathKit-prefix.pch b/Pods/Target Support Files/PathKit/PathKit-prefix.pch similarity index 100% rename from Tests/Pods/Target Support Files/PathKit/PathKit-prefix.pch rename to Pods/Target Support Files/PathKit/PathKit-prefix.pch diff --git a/Tests/Pods/Target Support Files/PathKit/PathKit-umbrella.h b/Pods/Target Support Files/PathKit/PathKit-umbrella.h similarity index 100% rename from Tests/Pods/Target Support Files/PathKit/PathKit-umbrella.h rename to Pods/Target Support Files/PathKit/PathKit-umbrella.h diff --git a/Tests/Pods/Target Support Files/PathKit/PathKit.modulemap b/Pods/Target Support Files/PathKit/PathKit.modulemap similarity index 100% rename from Tests/Pods/Target Support Files/PathKit/PathKit.modulemap rename to Pods/Target Support Files/PathKit/PathKit.modulemap diff --git a/Tests/Pods/Target Support Files/PathKit/PathKit.xcconfig b/Pods/Target Support Files/PathKit/PathKit.xcconfig similarity index 100% rename from Tests/Pods/Target Support Files/PathKit/PathKit.xcconfig rename to Pods/Target Support Files/PathKit/PathKit.xcconfig diff --git a/Tests/Pods/Target Support Files/Pods-Tests/Info.plist b/Pods/Target Support Files/Pods-Tests/Info.plist similarity index 100% rename from Tests/Pods/Target Support Files/Pods-Tests/Info.plist rename to Pods/Target Support Files/Pods-Tests/Info.plist diff --git a/Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests-acknowledgements.markdown b/Pods/Target Support Files/Pods-Tests/Pods-Tests-acknowledgements.markdown similarity index 100% rename from Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests-acknowledgements.markdown rename to Pods/Target Support Files/Pods-Tests/Pods-Tests-acknowledgements.markdown diff --git a/Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests-acknowledgements.plist b/Pods/Target Support Files/Pods-Tests/Pods-Tests-acknowledgements.plist similarity index 100% rename from Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests-acknowledgements.plist rename to Pods/Target Support Files/Pods-Tests/Pods-Tests-acknowledgements.plist diff --git a/Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests-dummy.m b/Pods/Target Support Files/Pods-Tests/Pods-Tests-dummy.m similarity index 100% rename from Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests-dummy.m rename to Pods/Target Support Files/Pods-Tests/Pods-Tests-dummy.m diff --git a/Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests-frameworks.sh b/Pods/Target Support Files/Pods-Tests/Pods-Tests-frameworks.sh similarity index 100% rename from Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests-frameworks.sh rename to Pods/Target Support Files/Pods-Tests/Pods-Tests-frameworks.sh diff --git a/Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests-resources.sh b/Pods/Target Support Files/Pods-Tests/Pods-Tests-resources.sh similarity index 100% rename from Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests-resources.sh rename to Pods/Target Support Files/Pods-Tests/Pods-Tests-resources.sh diff --git a/Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests-umbrella.h b/Pods/Target Support Files/Pods-Tests/Pods-Tests-umbrella.h similarity index 100% rename from Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests-umbrella.h rename to Pods/Target Support Files/Pods-Tests/Pods-Tests-umbrella.h diff --git a/Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests.debug.xcconfig b/Pods/Target Support Files/Pods-Tests/Pods-Tests.debug.xcconfig similarity index 100% rename from Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests.debug.xcconfig rename to Pods/Target Support Files/Pods-Tests/Pods-Tests.debug.xcconfig diff --git a/Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests.modulemap b/Pods/Target Support Files/Pods-Tests/Pods-Tests.modulemap similarity index 100% rename from Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests.modulemap rename to Pods/Target Support Files/Pods-Tests/Pods-Tests.modulemap diff --git a/Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests.release.xcconfig b/Pods/Target Support Files/Pods-Tests/Pods-Tests.release.xcconfig similarity index 100% rename from Tests/Pods/Target Support Files/Pods-Tests/Pods-Tests.release.xcconfig rename to Pods/Target Support Files/Pods-Tests/Pods-Tests.release.xcconfig diff --git a/Tests/Pods/Target Support Files/Stencil/Info.plist b/Pods/Target Support Files/Stencil/Info.plist similarity index 96% rename from Tests/Pods/Target Support Files/Stencil/Info.plist rename to Pods/Target Support Files/Stencil/Info.plist index cc1a0c6..2cf03a7 100644 --- a/Tests/Pods/Target Support Files/Stencil/Info.plist +++ b/Pods/Target Support Files/Stencil/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.7.1 + 0.8.0 CFBundleSignature ???? CFBundleVersion diff --git a/Tests/Pods/Target Support Files/Stencil/Stencil-dummy.m b/Pods/Target Support Files/Stencil/Stencil-dummy.m similarity index 100% rename from Tests/Pods/Target Support Files/Stencil/Stencil-dummy.m rename to Pods/Target Support Files/Stencil/Stencil-dummy.m diff --git a/Tests/Pods/Target Support Files/Stencil/Stencil-prefix.pch b/Pods/Target Support Files/Stencil/Stencil-prefix.pch similarity index 100% rename from Tests/Pods/Target Support Files/Stencil/Stencil-prefix.pch rename to Pods/Target Support Files/Stencil/Stencil-prefix.pch diff --git a/Tests/Pods/Target Support Files/Stencil/Stencil-umbrella.h b/Pods/Target Support Files/Stencil/Stencil-umbrella.h similarity index 100% rename from Tests/Pods/Target Support Files/Stencil/Stencil-umbrella.h rename to Pods/Target Support Files/Stencil/Stencil-umbrella.h diff --git a/Tests/Pods/Target Support Files/Stencil/Stencil.modulemap b/Pods/Target Support Files/Stencil/Stencil.modulemap similarity index 100% rename from Tests/Pods/Target Support Files/Stencil/Stencil.modulemap rename to Pods/Target Support Files/Stencil/Stencil.modulemap diff --git a/Tests/Pods/Target Support Files/Stencil/Stencil.xcconfig b/Pods/Target Support Files/Stencil/Stencil.xcconfig similarity index 100% rename from Tests/Pods/Target Support Files/Stencil/Stencil.xcconfig rename to Pods/Target Support Files/Stencil/Stencil.xcconfig diff --git a/Tests/Pods/Target Support Files/StencilSwiftKit/Info.plist b/Pods/Target Support Files/StencilSwiftKit/Info.plist similarity index 96% rename from Tests/Pods/Target Support Files/StencilSwiftKit/Info.plist rename to Pods/Target Support Files/StencilSwiftKit/Info.plist index cba2585..3c175b6 100644 --- a/Tests/Pods/Target Support Files/StencilSwiftKit/Info.plist +++ b/Pods/Target Support Files/StencilSwiftKit/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.0.1 + 1.0.1 CFBundleSignature ???? CFBundleVersion diff --git a/Tests/Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit-dummy.m b/Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit-dummy.m similarity index 100% rename from Tests/Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit-dummy.m rename to Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit-dummy.m diff --git a/Tests/Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit-prefix.pch b/Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit-prefix.pch similarity index 100% rename from Tests/Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit-prefix.pch rename to Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit-prefix.pch diff --git a/Tests/Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit-umbrella.h b/Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit-umbrella.h similarity index 100% rename from Tests/Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit-umbrella.h rename to Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit-umbrella.h diff --git a/Tests/Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit.modulemap b/Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit.modulemap similarity index 100% rename from Tests/Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit.modulemap rename to Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit.modulemap diff --git a/Tests/Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit.xcconfig b/Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit.xcconfig similarity index 100% rename from Tests/Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit.xcconfig rename to Pods/Target Support Files/StencilSwiftKit/StencilSwiftKit.xcconfig diff --git a/README.md b/README.md index 29e7c35..d3ca5af 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # SwiftGen Templates -[![Build Status](https://travis-ci.org/SwiftGen/templates.svg?branch=master)](https://travis-ci.org/SwiftGen/templates) +[![CircleCI](https://circleci.com/gh/SwiftGen/templates/tree/master.svg?style=svg)](https://circleci.com/gh/SwiftGen/templates/tree/master) ![Swift 3.0](https://img.shields.io/badge/Swift-3.0-orange.svg) This repository contains [Stencil](https://github.com/kylef/Stencil) templates that are dedicated for being used with [SwiftGen](https://github.com/SwiftGen/swiftgen). diff --git a/Rakefile b/Rakefile index 40bbef2..f1fdf31 100644 --- a/Rakefile +++ b/Rakefile @@ -1,18 +1,106 @@ -def xcpretty(cmd) - if `which xcpretty` && $?.success? - sh "set -o pipefail && #{cmd} | xcpretty -c" - else - sh cmd +#!/usr/bin/rake + +## [ Constants ] ############################################################## + +WORKSPACE = 'Templates' +SCHEME_NAME = 'Tests' +CONFIGURATION = 'Debug' + + +task :default => "xcode:test" + +## [ Output compilation ] ##################################################### + +MODULE_INPUT_PATH = 'Fixtures/stub-env/Modules' +MODULE_OUTPUT_PATH = 'Fixtures/stub-env' +SDKS = { + :macosx => 'x86_64-apple-macosx10.12', + :iphoneos => 'armv7s-apple-ios10.0' +} +TOOLCHAINS = { + :swift2 => { + :module_path => "#{MODULE_OUTPUT_PATH}/swift2.3", + :toolchain => 'com.apple.dt.toolchain.Swift_2_3' + }, + :swift3 => { + :module_path => "#{MODULE_OUTPUT_PATH}/swift3", + :toolchain => 'com.apple.dt.toolchain.XcodeDefault' + } +} + +namespace :output do + desc 'Compile modules' + task :modules do |task| + Utils.print_header 'Compile output modules' + + # macOS + modules = ['PrefsWindowController'] + modules.each do |m| + Utils.print_info "Compiling module #{m}… (macos)" + compile_module(m, :macosx, task) + end + + # iOS + modules = ['CustomSegue', 'LocationPicker', 'SlackTextViewController'] + modules.each do |m| + Utils.print_info "Compiling module #{m}… (ios)" + compile_module(m, :iphoneos, task) + end + + # delete swiftdoc + Dir.glob("#{MODULE_OUTPUT_PATH}/*.swiftdoc").each do |f| + FileUtils.rm_rf(f) + end end -end -task :build_for_testing do - xcpretty "xcodebuild -workspace Tests/Templates.xcworkspace -scheme Tests build-for-testing" -end + desc 'Compile output' + task :compile => :modules do |task| + Utils.print_header 'Compiling template output files' -desc 'Run Unit Tests' -task :test => :build_for_testing do - xcpretty "xcodebuild -workspace Tests/Templates.xcworkspace -scheme Tests test-without-building" -end + exit Dir.glob('Tests/Expected/**/*.swift').map { |f| + Utils.print_info "Compiling #{f}…\n" + compile_file(f, task) + }.reduce(true) { |result, status| + result && status + } + end + + def compile_module(m, sdk, task) + target = SDKS[sdk] + subtask = File.basename(m, '.*') + commands = TOOLCHAINS.map do |key, toolchain| + %Q(--toolchain #{toolchain[:toolchain]} -sdk #{sdk} swiftc -emit-module "#{MODULE_INPUT_PATH}/#{m}.swift" -module-name "#{m}" -emit-module-path "#{toolchain[:module_path]}" -target "#{target}") + end + + Utils.run(commands, task, subtask, xcrun: true) + end -task :default => :test + def compile_file(f, task) + if f.match('swift3') + toolchain = TOOLCHAINS[:swift3] + else + toolchain = TOOLCHAINS[:swift2] + end + + if f.match('iOS') + sdks = [:iphoneos] + elsif f.match('macOS') + sdks = [:macosx] + else + sdks = [:iphoneos, :macosx] + end + + commands = sdks.map do |sdk| + %Q(--toolchain #{toolchain[:toolchain]} -sdk #{sdk} swiftc -parse -target #{SDKS[sdk]} -I #{toolchain[:module_path]} "#{MODULE_OUTPUT_PATH}/Definitions.swift" #{f}) + end + subtask = File.basename(f, '.*') + + begin + Utils.run(commands, task, subtask, xcrun: true) + return true + rescue + Utils.print_error "Failed to compile #{f}!" + return false + end + end +end diff --git a/Scripts/compile-modules.sh b/Scripts/compile-modules.sh deleted file mode 100755 index 89ca2a4..0000000 --- a/Scripts/compile-modules.sh +++ /dev/null @@ -1,30 +0,0 @@ -INPUT_PATH="Fixtures/stub-env/Modules" -OUTPUT_PATH="Fixtures/stub-env" - -SWIFT2_TOOLCHAIN="--toolchain com.apple.dt.toolchain.Swift_2_3" -SWIFT3_TOOLCHAIN="" - -# compile macos modules -SDK=$(xcrun --show-sdk-path --sdk macosx) -TARGET="x86_64-apple-macosx10.12" -MODULES=( "PrefsWindowController" ) - -for m in ${MODULES[@]}; do - echo "Compiling module ${m}… (macos)" - xcrun $SWIFT3_TOOLCHAIN swiftc -emit-module "$INPUT_PATH/$m.swift" -sdk $SDK -module-name "$m" -emit-module-path "$OUTPUT_PATH/swift3" -target $TARGET - xcrun $SWIFT2_TOOLCHAIN swiftc -emit-module "$INPUT_PATH/$m.swift" -sdk $SDK -module-name "$m" -emit-module-path "$OUTPUT_PATH/swift2.3" -target $TARGET -done - -#compile ios modules -SDK=$(xcrun --show-sdk-path --sdk iphoneos) -TARGET="armv7s-apple-ios10.0" -MODULES=( "CustomSegue" "LocationPicker" "SlackTextViewController" ) - -for m in ${MODULES[@]}; do - echo "Compiling module ${m}… (ios)" - xcrun $SWIFT3_TOOLCHAIN swiftc -emit-module "$INPUT_PATH/$m.swift" -sdk $SDK -module-name "$m" -emit-module-path "$OUTPUT_PATH/swift3" -target $TARGET - xcrun $SWIFT2_TOOLCHAIN swiftc -emit-module "$INPUT_PATH/$m.swift" -sdk $SDK -module-name "$m" -emit-module-path "$OUTPUT_PATH/swift2.3" -target $TARGET -done - -# don't need this -rm $OUTPUT_PATH/*.swiftdoc diff --git a/Scripts/compile-output.sh b/Scripts/compile-output.sh deleted file mode 100755 index 758f3a6..0000000 --- a/Scripts/compile-output.sh +++ /dev/null @@ -1,21 +0,0 @@ -for f in `find "Tests/Expected" -name '*.swift'` -do - if [[ $f == *"swift3"* ]]; then - TOOLCHAIN="" - MODULES="Fixtures/stub-env/swift3" - else - TOOLCHAIN="--toolchain com.apple.dt.toolchain.Swift_2_3" - MODULES="Fixtures/stub-env/swift2.3" - fi - - if [[ $f == *"macOS"* ]]; then - SDK="macosx" - TARGET="x86_64-apple-macosx10.12" - else - SDK="iphoneos" - TARGET="armv7s-apple-ios10.0" - fi - - echo "Checking $f template-generated fixture for build errors…" - xcrun $TOOLCHAIN -sdk $SDK swiftc -parse -target $TARGET -I $MODULES "Fixtures/stub-env/Definitions.swift" "$f" -done diff --git a/Scripts/install_swiftlint.sh b/Scripts/install_swiftlint.sh deleted file mode 100755 index 641f85f..0000000 --- a/Scripts/install_swiftlint.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -# Installs the SwiftLint package. -# Tries to get the precompiled .pkg file from Github, but if that -# fails just recompiles from source. -# -# Original script: https://alexplescan.com/posts/2016/03/03/setting-up-swiftlint-on-travis-ci/ - -set -e - -SWIFTLINT_PKG_PATH="/tmp/SwiftLint.pkg" -SWIFTLINT_PKG_URL="https://github.com/realm/SwiftLint/releases/download/0.16.1/SwiftLint.pkg" - -wget --output-document=$SWIFTLINT_PKG_PATH $SWIFTLINT_PKG_URL - -if [ -f $SWIFTLINT_PKG_PATH ]; then - echo "SwiftLint package exists! Installing it..." - sudo installer -pkg $SWIFTLINT_PKG_PATH -target / -else - echo "SwiftLint package doesn't exist. Compiling from source..." && - git clone https://github.com/realm/SwiftLint.git /tmp/SwiftLint && - cd /tmp/SwiftLint && - git submodule update --init --recursive && - sudo make install -fi diff --git a/Scripts/swiftlint-code.sh b/Scripts/swiftlint-code.sh deleted file mode 100755 index d8e8a68..0000000 --- a/Scripts/swiftlint-code.sh +++ /dev/null @@ -1,6 +0,0 @@ -if which swiftlint >/dev/null; then - # Lint SwiftGen's source itself - swiftlint lint --path "${PROJECT_DIR}/TestSuites" -else - echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint" -fi diff --git a/Scripts/swiftlint-output.sh b/Scripts/swiftlint-output.sh deleted file mode 100755 index a8d279a..0000000 --- a/Scripts/swiftlint-output.sh +++ /dev/null @@ -1,6 +0,0 @@ -if which swiftlint >/dev/null; then - # Lint generated code in Tests/Expected - swiftlint lint --path "Tests/Expected" -else - echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint" -fi diff --git a/Tests/Templates.xcodeproj/project.pbxproj b/Templates.xcodeproj/project.pbxproj similarity index 95% rename from Tests/Templates.xcodeproj/project.pbxproj rename to Templates.xcodeproj/project.pbxproj index 68ef318..d0ebb5d 100644 --- a/Tests/Templates.xcodeproj/project.pbxproj +++ b/Templates.xcodeproj/project.pbxproj @@ -29,8 +29,8 @@ DD1F70E51E29AA940058A059 /* Expected */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Expected; sourceTree = ""; }; DD1F70EC1E2A976A0058A059 /* StoryboardsiOSTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoryboardsiOSTests.swift; sourceTree = ""; }; DD1F70ED1E2A976A0058A059 /* StoryboardsMacOSTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoryboardsMacOSTests.swift; sourceTree = ""; }; - DD5F34E61E231E6B00AEB5DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; }; - DD5F34E71E231E6B00AEB5DA /* TestsHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestsHelper.swift; sourceTree = SOURCE_ROOT; }; + DD5F34E61E231E6B00AEB5DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + DD5F34E71E231E6B00AEB5DA /* TestsHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TestsHelper.swift; path = Tests/TemplatesTests/TestsHelper.swift; sourceTree = SOURCE_ROOT; }; DD5F34EB1E231E8B00AEB5DA /* ColorsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ColorsTests.swift; sourceTree = ""; }; DD5F34EC1E231E8B00AEB5DA /* FontsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FontsTests.swift; sourceTree = ""; }; DD5F34ED1E231E8B00AEB5DA /* ImagesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImagesTests.swift; sourceTree = ""; }; @@ -91,17 +91,16 @@ DD5F34111E21657700AEB5DA /* Tests */ = { isa = PBXGroup; children = ( - DD5F34E71E231E6B00AEB5DA /* TestsHelper.swift */, - DD5F34EA1E231E8B00AEB5DA /* TestSuites */, + DD5F34EA1E231E8B00AEB5DA /* TemplatesTests */, DD5F34F91E231F0400AEB5DA /* Contexts */, DD1F70E51E29AA940058A059 /* Expected */, DD1F70E21E29A6E20058A059 /* templates */, DD5F34E61E231E6B00AEB5DA /* Info.plist */, ); - name = Tests; + path = Tests; sourceTree = SOURCE_ROOT; }; - DD5F34EA1E231E8B00AEB5DA /* TestSuites */ = { + DD5F34EA1E231E8B00AEB5DA /* TemplatesTests */ = { isa = PBXGroup; children = ( DD5F34EB1E231E8B00AEB5DA /* ColorsTests.swift */, @@ -110,8 +109,9 @@ DD1F70EC1E2A976A0058A059 /* StoryboardsiOSTests.swift */, DD1F70ED1E2A976A0058A059 /* StoryboardsMacOSTests.swift */, DD5F34EF1E231E8B00AEB5DA /* StringsTests.swift */, + DD5F34E71E231E6B00AEB5DA /* TestsHelper.swift */, ); - path = TestSuites; + path = TemplatesTests; sourceTree = ""; }; /* End PBXGroup section */ @@ -122,6 +122,7 @@ buildConfigurationList = 09A87B551BCCA2C600D9B9F5 /* Build configuration list for PBXNativeTarget "Tests" */; buildPhases = ( C3989F9D7584D08720E81BDA /* [CP] Check Pods Manifest.lock */, + DD3EE1BB1E65E43E00EA1599 /* ⚠️ SwiftLint */, 09A87B4C1BCCA2C600D9B9F5 /* Sources */, 09A87B4D1BCCA2C600D9B9F5 /* Frameworks */, 09A87B4E1BCCA2C600D9B9F5 /* Resources */, @@ -200,6 +201,20 @@ shellScript = "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"; showEnvVarsInLog = 0; }; + DD3EE1BB1E65E43E00EA1599 /* ⚠️ SwiftLint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "⚠️ SwiftLint"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [[ ! $CI ]]; then\n rake lint:tests\n rake lint:output\nfi"; + }; DE127EA8748200EF28090721 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -341,7 +356,7 @@ buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Info.plist; + INFOPLIST_FILE = Tests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_BUNDLE_IDENTIFIER = com.alisoftware.SwiftGenKitTests; @@ -357,7 +372,7 @@ buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Info.plist; + INFOPLIST_FILE = Tests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_BUNDLE_IDENTIFIER = com.alisoftware.SwiftGenKitTests; diff --git a/Tests/Templates.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Templates.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from Tests/Templates.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Templates.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/Tests/Templates.xcodeproj/project.xcworkspace/xcshareddata/SwiftGenKit.xcscmblueprint b/Templates.xcodeproj/project.xcworkspace/xcshareddata/SwiftGenKit.xcscmblueprint similarity index 100% rename from Tests/Templates.xcodeproj/project.xcworkspace/xcshareddata/SwiftGenKit.xcscmblueprint rename to Templates.xcodeproj/project.xcworkspace/xcshareddata/SwiftGenKit.xcscmblueprint diff --git a/Tests/Templates.xcodeproj/xcshareddata/xcschemes/Tests.xcscheme b/Templates.xcodeproj/xcshareddata/xcschemes/Tests.xcscheme similarity index 100% rename from Tests/Templates.xcodeproj/xcshareddata/xcschemes/Tests.xcscheme rename to Templates.xcodeproj/xcshareddata/xcschemes/Tests.xcscheme diff --git a/Tests/Templates.xcworkspace/contents.xcworkspacedata b/Templates.xcworkspace/contents.xcworkspacedata similarity index 100% rename from Tests/Templates.xcworkspace/contents.xcworkspacedata rename to Templates.xcworkspace/contents.xcworkspacedata diff --git a/Tests/Templates.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Templates.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from Tests/Templates.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to Templates.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/Tests/Expected/Storyboards-iOS/default-context-all-ignore-module.swift b/Tests/Expected/Storyboards-iOS/default-context-all-ignore-module.swift index b90256c..2e8fd53 100644 --- a/Tests/Expected/Storyboards-iOS/default-context-all-ignore-module.swift +++ b/Tests/Expected/Storyboards-iOS/default-context-all-ignore-module.swift @@ -182,3 +182,5 @@ enum StoryboardSegue { case ShowPassword } } + +private final class BundleToken {} diff --git a/Tests/Expected/Storyboards-iOS/lowercase-context-all-ignore-module.swift b/Tests/Expected/Storyboards-iOS/lowercase-context-all-ignore-module.swift index 07f7d0b..7e2a9f7 100644 --- a/Tests/Expected/Storyboards-iOS/lowercase-context-all-ignore-module.swift +++ b/Tests/Expected/Storyboards-iOS/lowercase-context-all-ignore-module.swift @@ -182,3 +182,5 @@ enum StoryboardSegue { case ShowPassword } } + +private final class BundleToken {} diff --git a/Tests/Expected/Storyboards-iOS/swift3-context-all-ignore-module.swift b/Tests/Expected/Storyboards-iOS/swift3-context-all-ignore-module.swift index bf5a91d..9f92509 100644 --- a/Tests/Expected/Storyboards-iOS/swift3-context-all-ignore-module.swift +++ b/Tests/Expected/Storyboards-iOS/swift3-context-all-ignore-module.swift @@ -182,3 +182,5 @@ enum StoryboardSegue { case showPassword = "ShowPassword" } } + +private final class BundleToken {} diff --git a/Tests/Expected/Storyboards-iOS/uppercase-context-all-ignore-module.swift b/Tests/Expected/Storyboards-iOS/uppercase-context-all-ignore-module.swift index cb6dcd6..d8fb756 100644 --- a/Tests/Expected/Storyboards-iOS/uppercase-context-all-ignore-module.swift +++ b/Tests/Expected/Storyboards-iOS/uppercase-context-all-ignore-module.swift @@ -182,3 +182,5 @@ enum StoryboardSegue { case ShowPassword } } + +private final class BundleToken {} diff --git a/Tests/Podfile.lock b/Tests/Podfile.lock deleted file mode 100644 index 63a690a..0000000 --- a/Tests/Podfile.lock +++ /dev/null @@ -1,33 +0,0 @@ -PODS: - - PathKit (0.7.0) - - Stencil (0.7.1): - - PathKit (~> 0.7.0) - - StencilSwiftKit (0.0.1): - - Stencil (~> 0.7.0) - -DEPENDENCIES: - - Stencil (from `https://github.com/kylef/Stencil`) - - StencilSwiftKit (from `https://github.com/SwiftGen/StencilSwiftKit`) - -EXTERNAL SOURCES: - Stencil: - :git: https://github.com/kylef/Stencil - StencilSwiftKit: - :git: https://github.com/SwiftGen/StencilSwiftKit - -CHECKOUT OPTIONS: - Stencil: - :commit: 99efba56e942270780a452e5dcdfa1a839839cf4 - :git: https://github.com/kylef/Stencil - StencilSwiftKit: - :commit: cc3c4d9aed593c7026e8d18c7d7d75628039a330 - :git: https://github.com/SwiftGen/StencilSwiftKit - -SPEC CHECKSUMS: - PathKit: f8260c3e41bf4d552f3603853e32a5b325a176d4 - Stencil: 4177c0cabcdc40dd9be9b7f701d710d0a121023a - StencilSwiftKit: e2caece14b65d144da6bbe513a73b01be4833e7b - -PODFILE CHECKSUM: af694ce70d27109bd28ecfb95a4370560e111f3a - -COCOAPODS: 1.2.0 diff --git a/Tests/Pods/Manifest.lock b/Tests/Pods/Manifest.lock deleted file mode 100644 index 63a690a..0000000 --- a/Tests/Pods/Manifest.lock +++ /dev/null @@ -1,33 +0,0 @@ -PODS: - - PathKit (0.7.0) - - Stencil (0.7.1): - - PathKit (~> 0.7.0) - - StencilSwiftKit (0.0.1): - - Stencil (~> 0.7.0) - -DEPENDENCIES: - - Stencil (from `https://github.com/kylef/Stencil`) - - StencilSwiftKit (from `https://github.com/SwiftGen/StencilSwiftKit`) - -EXTERNAL SOURCES: - Stencil: - :git: https://github.com/kylef/Stencil - StencilSwiftKit: - :git: https://github.com/SwiftGen/StencilSwiftKit - -CHECKOUT OPTIONS: - Stencil: - :commit: 99efba56e942270780a452e5dcdfa1a839839cf4 - :git: https://github.com/kylef/Stencil - StencilSwiftKit: - :commit: cc3c4d9aed593c7026e8d18c7d7d75628039a330 - :git: https://github.com/SwiftGen/StencilSwiftKit - -SPEC CHECKSUMS: - PathKit: f8260c3e41bf4d552f3603853e32a5b325a176d4 - Stencil: 4177c0cabcdc40dd9be9b7f701d710d0a121023a - StencilSwiftKit: e2caece14b65d144da6bbe513a73b01be4833e7b - -PODFILE CHECKSUM: af694ce70d27109bd28ecfb95a4370560e111f3a - -COCOAPODS: 1.2.0 diff --git a/Tests/TestSuites/ColorsTests.swift b/Tests/TemplatesTests/ColorsTests.swift similarity index 100% rename from Tests/TestSuites/ColorsTests.swift rename to Tests/TemplatesTests/ColorsTests.swift diff --git a/Tests/TestSuites/FontsTests.swift b/Tests/TemplatesTests/FontsTests.swift similarity index 100% rename from Tests/TestSuites/FontsTests.swift rename to Tests/TemplatesTests/FontsTests.swift diff --git a/Tests/TestSuites/ImagesTests.swift b/Tests/TemplatesTests/ImagesTests.swift similarity index 100% rename from Tests/TestSuites/ImagesTests.swift rename to Tests/TemplatesTests/ImagesTests.swift diff --git a/Tests/TestSuites/StoryboardsMacOSTests.swift b/Tests/TemplatesTests/StoryboardsMacOSTests.swift similarity index 100% rename from Tests/TestSuites/StoryboardsMacOSTests.swift rename to Tests/TemplatesTests/StoryboardsMacOSTests.swift diff --git a/Tests/TestSuites/StoryboardsiOSTests.swift b/Tests/TemplatesTests/StoryboardsiOSTests.swift similarity index 100% rename from Tests/TestSuites/StoryboardsiOSTests.swift rename to Tests/TemplatesTests/StoryboardsiOSTests.swift diff --git a/Tests/TestSuites/StringsTests.swift b/Tests/TemplatesTests/StringsTests.swift similarity index 100% rename from Tests/TestSuites/StringsTests.swift rename to Tests/TemplatesTests/StringsTests.swift diff --git a/Tests/TestsHelper.swift b/Tests/TemplatesTests/TestsHelper.swift similarity index 82% rename from Tests/TestsHelper.swift rename to Tests/TemplatesTests/TestsHelper.swift index 16274dd..aa8565f 100644 --- a/Tests/TestsHelper.swift +++ b/Tests/TemplatesTests/TestsHelper.swift @@ -9,10 +9,13 @@ import XCTest import PathKit import StencilSwiftKit -private let colorCode: (String) -> String = ProcessInfo().environment["XcodeColors"] == "YES" ? { "\u{001b}[\($0);" } : { _ in "" } +private let colorCode: (String) -> String = + ProcessInfo().environment["XcodeColors"] == "YES" ? { "\u{001b}[\($0);" } : { _ in "" } private let (msgColor, reset) = (colorCode("fg250,0,0"), colorCode("")) -private let okCode = (num: colorCode("fg127,127,127"), code: colorCode("")) -private let koCode = (num: colorCode("fg127,127,127") + colorCode("bg127,0,0"), code: colorCode("fg250,250,250") + colorCode("bg127,0,0")) +private let okCode = (num: colorCode("fg127,127,127"), + code: colorCode("")) +private let koCode = (num: colorCode("fg127,127,127") + colorCode("bg127,0,0"), + code: colorCode("fg250,250,250") + colorCode("bg127,0,0")) func diff(_ result: String, _ expected: String) -> String? { guard result != expected else { return nil } @@ -27,6 +30,9 @@ func diff(_ result: String, _ expected: String) -> String? { break } } + if firstDiff == nil && lhsLines.count != rhsLines.count { + firstDiff = min(lhsLines.count, rhsLines.count) + } if let badLineIdx = firstDiff { let slice = { (lines: [String], context: Int) -> ArraySlice in let start = max(0, badLineIdx-context) @@ -43,7 +49,14 @@ func diff(_ result: String, _ expected: String) -> String? { } let lhsNum = addLineNumbers(slice(lhsLines, 4)).joined(separator: "\n") let rhsNum = addLineNumbers(slice(rhsLines, 4)).joined(separator: "\n") - return "\(msgColor)Mismatch at line \(badLineIdx)\(reset)\n>>>>>> result\n\(lhsNum)\n======\n\(rhsNum)\n<<<<<< expected" + return [ + "\(msgColor)Mismatch at line \(badLineIdx)\(reset)", + ">>>>>> result", + "\(lhsNum)", + "======", + "\(rhsNum)", + "<<<<<< expected" + ].joined(separator: "\n") } return nil } @@ -62,7 +75,7 @@ class Fixtures { case storyboardsMacOS = "Storyboards-macOS" case strings = "Strings" } - + private static let testBundle = Bundle(for: Fixtures.self) private init() {} @@ -71,40 +84,40 @@ class Fixtures { fatalError("Unable to find resource directory URL") } let rsrc = Path(rsrcURL.path) + "Fixtures" - + guard let dir = sub else { return rsrc } return rsrc + dir.rawValue } - + static func path(for name: String, sub: Directory) -> Path { return path(for: name, subDirectory: "Fixtures/\(sub.rawValue)") } - + private static func path(for name: String, subDirectory: String? = nil) -> Path { guard let path = testBundle.path(forResource: name, ofType: "", inDirectory: subDirectory) else { fatalError("Unable to find fixture \"\(name)\"") } return Path(path) } - + static func context(for name: String, sub: Directory) -> [String: Any] { let path = self.path(for: name, subDirectory: "Contexts/\(sub.rawValue)") - - guard let data = NSDictionary(contentsOfFile: path.description) as? [String: Any] else { + + guard let data = NSDictionary(contentsOf: path.url) as? [String: Any] else { fatalError("Unable to load fixture content") } - + return data } - + static func template(for name: String) -> String { return string(for: name, subDirectory: "templates") } - + static func output(for name: String, sub: Directory) -> String { return string(for: name, subDirectory: "Expected/\(sub.rawValue)") } - + private static func string(for name: String, subDirectory: String) -> String { do { return try path(for: name, subDirectory: subDirectory).read() @@ -117,13 +130,13 @@ class Fixtures { extension XCTestCase { /** Generate variations of a context. - + - Parameter name: The name of the context - Parameter context: The context itself - Return: a tuple with a list of generated contexts, and a suffix to find the correct output file */ typealias VariationGenerator = ((String, [String: Any]) -> [(context: [String: Any], suffix: String)]) - + /** Test the given template against a list of contexts, comparing the output with files in the expected folder. @@ -133,17 +146,23 @@ extension XCTestCase { - Parameter directory: The directory to look for files in (correspons to de command) - Parameter contextVariations: Optional closure to generate context variations. */ - func test(template templateName: String, contextNames: [String], outputPrefix: String, directory: Fixtures.Directory, contextVariations: VariationGenerator? = nil) { + func test(template templateName: String, + contextNames: [String], + outputPrefix: String, + directory: Fixtures.Directory, + contextVariations: VariationGenerator? = nil) { let template = StencilSwiftTemplate(templateString: Fixtures.template(for: "\(templateName).stencil"), environment: stencilSwiftEnvironment()) let contextVariations = contextVariations ?? { [(context: $1, suffix: "")] } - + for contextName in contextNames { print("Testing context '\(contextName)'...") let context = Fixtures.context(for: "\(contextName).plist", sub: directory) - + for (context, suffix) in contextVariations(contextName, context) { - let result = try! template.render(context) + guard let result = try? template.render(context) else { + fatalError("Unable to render template") + } let expected = Fixtures.output(for: "\(outputPrefix)-context-\(contextName)\(suffix).swift", sub: directory) XCTDiffStrings(result, expected) } diff --git a/circle.yml b/circle.yml new file mode 100644 index 0000000..859fab7 --- /dev/null +++ b/circle.yml @@ -0,0 +1,14 @@ +machine: + xcode: + version: 8.2 + +dependencies: + post: + - rake lint:install + +test: + override: + - rake lint:tests + - rake xcode:test + - rake output:compile + - rake lint:output diff --git a/rakelib/changelog.rake b/rakelib/changelog.rake new file mode 100644 index 0000000..ddc630b --- /dev/null +++ b/rakelib/changelog.rake @@ -0,0 +1,35 @@ +# Used constants: +# none + +namespace :changelog do + desc 'Add the empty CHANGELOG entries after a new release' + task :reset do |task| + changelog = File.read('CHANGELOG.md') + abort('A Master entry already exists') if changelog =~ /^##\s*Master$/ + changelog.sub!(/^##[^#]/, "#{header}\\0") + File.write('CHANGELOG.md', changelog) + end + + def header + return <<-HEADER.gsub(/^\s*\|/,'') + |## Master + | + |### Bug Fixes + | + |_None_ + | + |### Breaking Changes + | + |_None_ + | + |### New Features + | + |_None_ + | + |### Internal Changes + | + |_None_ + | + HEADER + end +end diff --git a/rakelib/lint.rake b/rakelib/lint.rake new file mode 100644 index 0000000..c5aa2c0 --- /dev/null +++ b/rakelib/lint.rake @@ -0,0 +1,39 @@ +# Used constants: +# - WORKSPACE + +namespace :lint do + desc 'Install swiftlint' + task :install do |task| + next if system('which swiftlint > /dev/null') + + url = 'https://github.com/realm/SwiftLint/releases/download/0.16.1/SwiftLint.pkg' + tmppath = '/tmp/SwiftLint.pkg' + + Utils.run([ + "curl -Lo #{tmppath} #{url}", + "sudo installer -pkg #{tmppath} -target /" + ], task) + end + + if File.directory?('Sources') + desc 'Lint the code' + task :code => :install do |task| + Utils.print_header 'Linting the code' + Utils.run(%Q(swiftlint lint --no-cache --strict --path Sources), task) + end + end + + desc 'Lint the tests' + task :tests => :install do |task| + Utils.print_header 'Linting the unit test code' + Utils.run(%Q(swiftlint lint --no-cache --strict --path "Tests/#{WORKSPACE}Tests"), task) + end + + if File.directory?('Tests/Expected') + desc 'Lint the output' + task :output => :install do |task| + Utils.print_header 'Linting the template output code' + Utils.run(%Q(swiftlint lint --no-cache --strict --path Tests/Expected), task) + end + end +end diff --git a/rakelib/pod.rake b/rakelib/pod.rake new file mode 100644 index 0000000..9a9ecac --- /dev/null +++ b/rakelib/pod.rake @@ -0,0 +1,12 @@ +# Used constants: +# - POD_NAME + +if defined?(POD_NAME) && File.file?("#{POD_NAME}.podspec") + namespace :pod do + desc 'Lint the Pod' + task :lint do |task| + Utils.print_header 'Linting the pod spec' + Utils.run(%Q(bundle exec pod lib lint "#{POD_NAME}.podspec" --quick), task) + end + end +end diff --git a/rakelib/spm.rake b/rakelib/spm.rake new file mode 100644 index 0000000..1282cea --- /dev/null +++ b/rakelib/spm.rake @@ -0,0 +1,18 @@ +# Used constants: +# none + +if File.file?('Package.swift') + namespace :spm do + desc 'Build using SPM' + task :build do |task| + Utils.print_header 'Compile using SPM' + Utils.run('swift build', task, xcrun: true) + end + + desc 'Run SPM Unit Tests' + task :test => :build do |task| + Utils.print_header 'Run the unit tests using SPM' + Utils.run('swift test', task, xcrun: true) + end + end +end diff --git a/rakelib/utils.rake b/rakelib/utils.rake new file mode 100644 index 0000000..a87ce32 --- /dev/null +++ b/rakelib/utils.rake @@ -0,0 +1,123 @@ +# Used constants: +# none + +class Utils + # formatter types + :xcpretty # pass through xcpretty and store in artifacts + :raw # store in artifacts + :to_string # run using backticks and return output + + # run a command using xcrun and xcpretty if applicable + def self.run(cmd, task, subtask = '', xcrun: false, formatter: :raw) + commands = xcrun ? [*cmd].map { |cmd| + "#{version_select} xcrun #{cmd}" + } : [*cmd] + + case formatter + when :xcpretty then xcpretty(commands, task, subtask) + when :raw then plain(commands, task, subtask) + when :to_string then `#{commands.join(' && ')}` + else raise "Unknown formatter '#{formatter}'" + end + end + + # print an info header + def self.print_header(str) + puts "== #{str.chomp} ==".format(:yellow, :bold) + end + + # print an info message + def self.print_info(str) + puts str.chomp.format(:green) + end + + # print an error message + def self.print_error(str) + puts str.chomp.format(:red) + end + + ## [ Private helper functions ] ################################################## + + # run a command, pipe output through 'xcpretty' and store the output in CI artifacts + def self.xcpretty(cmd, task, subtask) + name = (task.name + (subtask.empty? ? '' : "_#{subtask}")).gsub(/[:-]/, "_") + command = [*cmd].join(' && ') + + if ENV['CI'] + Rake.sh "set -o pipefail && (#{command}) | tee \"#{ENV['CIRCLE_ARTIFACTS']}/#{name}_raw.log\" | bundle exec xcpretty --color --report junit --output \"#{ENV['CIRCLE_TEST_REPORTS']}/xcode/#{name}.xml\"" + elsif system('which xcpretty > /dev/null') + Rake.sh "set -o pipefail && (#{command}) | bundle exec xcpretty -c" + else + Rake.sh command + end + end + private_class_method :xcpretty + + # run a command and store the output in CI artifacts + def self.plain(cmd, task, subtask) + name = (task.name + (subtask.empty? ? '' : "_#{subtask}")).gsub(/[:-]/, "_") + command = [*cmd].join(' && ') + + if ENV['CI'] + Rake.sh "set -o pipefail && (#{command}) | tee \"#{ENV['CIRCLE_ARTIFACTS']}/#{name}_raw.log\"" + else + Rake.sh command + end + end + private_class_method :plain + + # select the xcode version we want/support + def self.version_select + xcodes = `mdfind "kMDItemCFBundleIdentifier = 'com.apple.dt.Xcode' && kMDItemVersion = '8.*'"`.chomp.split("\n") + if xcodes.empty? + raise "\n[!!!] You need to have Xcode 8.x to compile SwiftGen.\n\n" + end + + # Order by version and get the latest one + vers = lambda { |path| `mdls -name kMDItemVersion -raw "#{path}"` } + latest_xcode_version = xcodes.sort { |p1, p2| vers.call(p1) <=> vers.call(p2) }.last + %Q(DEVELOPER_DIR="#{latest_xcode_version}/Contents/Developer") + end + private_class_method :version_select +end + + +class String + # colorization + FORMATTING = { + # text styling + :bold => 1, + :faint => 2, + :italic => 3, + :underline => 4, + # foreground colors + :black => 30, + :red => 31, + :green => 32, + :yellow => 33, + :blue => 34, + :magenta => 35, + :cyan => 36, + :white => 37, + # background colors + :bg_black => 40, + :bg_red => 41, + :bg_green => 42, + :bg_yellow => 43, + :bg_blue => 44, + :bg_magenta => 45, + :bg_cyan => 46, + :bg_white => 47 + } + + # only enable formatting if terminal supports it + if `tput colors`.chomp.to_i >= 8 + def format(*styles) + styles.reduce("") { |r, s| r << "\e[#{FORMATTING[s]}m" } << "#{self}\e[0m" + end + else + def format(*styles) + self + end + end +end diff --git a/rakelib/xcode.rake b/rakelib/xcode.rake new file mode 100644 index 0000000..c66f4c1 --- /dev/null +++ b/rakelib/xcode.rake @@ -0,0 +1,18 @@ +# Used constants: +# - CONFIGURATION +# - SCHEME_NAME +# - WORKSPACE + +namespace :xcode do + desc 'Build using Xcode' + task :build do |task| + Utils.print_header 'Compile using Xcode' + Utils.run(%Q(xcodebuild -workspace "#{WORKSPACE}.xcworkspace" -scheme "#{SCHEME_NAME}" -configuration "#{CONFIGURATION}" build-for-testing), task, xcrun: true, formatter: :xcpretty) + end + + desc 'Run Xcode Unit Tests' + task :test => :build do |task| + Utils.print_header 'Run the unit tests using Xcode' + Utils.run(%Q(xcodebuild -workspace "#{WORKSPACE}.xcworkspace" -scheme "#{SCHEME_NAME}" -configuration "#{CONFIGURATION}" test-without-building), task, xcrun: true, formatter: :xcpretty) + end +end