From 305dc31abdfe682e0bb3881621af496a38fe77fa Mon Sep 17 00:00:00 2001 From: kawoou Date: Tue, 29 Jan 2019 15:17:26 +0900 Subject: [PATCH 1/6] Support swift 5.0 --- Package@swift-5.swift | 23 +++++++++++++++++++++++ Sources/Node.swift | 12 +++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 Package@swift-5.swift diff --git a/Package@swift-5.swift b/Package@swift-5.swift new file mode 100644 index 0000000..9784a37 --- /dev/null +++ b/Package@swift-5.swift @@ -0,0 +1,23 @@ +// swift-tools-version:5.0 +import PackageDescription + +let package = Package( + name: "Stencil", + products: [ + .library(name: "Stencil", targets: ["Stencil"]) + ], + dependencies: [ + .package(url: "https://github.com/kylef/PathKit.git", from: "0.9.0"), + .package(url: "https://github.com/kylef/Spectre.git", from: "0.9.0") + ], + targets: [ + .target(name: "Stencil", dependencies: [ + "PathKit" + ], path: "Sources"), + .testTarget(name: "StencilTests", dependencies: [ + "Stencil", + "Spectre" + ]) + ], + swiftLanguageVersions: [.v4, .v4_2, .v5] +) diff --git a/Sources/Node.swift b/Sources/Node.swift index d06d3ca..df27fb4 100644 --- a/Sources/Node.swift +++ b/Sources/Node.swift @@ -71,9 +71,15 @@ public class VariableNode: NodeType { if hasToken("if", at: 1) { let components = components.suffix(from: 2) - if let elseIndex = components.index(of: "else") { - condition = try parser.compileExpression(components: Array(components.prefix(upTo: elseIndex)), token: token) - let elseToken = components.suffix(from: elseIndex.advanced(by: 1)).joined(separator: " ") + #if swift(<5.0) + let elseIndex = components.index(of: "else") + #else + let elseIndex = components.firstIndex(of: "else") + #endif + + if let safeElseIndex = elseIndex { + condition = try parser.compileExpression(components: Array(components.prefix(upTo: safeElseIndex)), token: token) + let elseToken = components.suffix(from: safeElseIndex.advanced(by: 1)).joined(separator: " ") elseExpression = try parser.compileResolvable(elseToken, containedIn: token) } else { condition = try parser.compileExpression(components: Array(components), token: token) From ebb7ece51131366f3533d9a31aac5d89852046a3 Mon Sep 17 00:00:00 2001 From: kawoou Date: Tue, 29 Jan 2019 19:55:42 +0900 Subject: [PATCH 2/6] Update podspec swift version --- Stencil.podspec.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Stencil.podspec.json b/Stencil.podspec.json index e667dc4..fbac048 100644 --- a/Stencil.podspec.json +++ b/Stencil.podspec.json @@ -24,7 +24,7 @@ "tvos": "9.0" }, "cocoapods_version": ">= 1.4.0", - "swift_version": "4.2", + "swift_version": "5.0", "requires_arc": true, "dependencies": { "PathKit": [ From 782ffdd4c7886d8d9d182e8db694ff82c0319548 Mon Sep 17 00:00:00 2001 From: kawoou Date: Wed, 30 Jan 2019 15:25:11 +0900 Subject: [PATCH 3/6] Code review by @djbe --- Sources/Node.swift | 12 +++--------- Sources/_SwiftSupport.swift | 8 ++++++++ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Sources/Node.swift b/Sources/Node.swift index df27fb4..3386211 100644 --- a/Sources/Node.swift +++ b/Sources/Node.swift @@ -71,15 +71,9 @@ public class VariableNode: NodeType { if hasToken("if", at: 1) { let components = components.suffix(from: 2) - #if swift(<5.0) - let elseIndex = components.index(of: "else") - #else - let elseIndex = components.firstIndex(of: "else") - #endif - - if let safeElseIndex = elseIndex { - condition = try parser.compileExpression(components: Array(components.prefix(upTo: safeElseIndex)), token: token) - let elseToken = components.suffix(from: safeElseIndex.advanced(by: 1)).joined(separator: " ") + if let elseIndex = components.firstIndex(of: "else") { + condition = try parser.compileExpression(components: Array(components.prefix(upTo: elseIndex)), token: token) + let elseToken = components.suffix(from: elseIndex.advanced(by: 1)).joined(separator: " ") elseExpression = try parser.compileResolvable(elseToken, containedIn: token) } else { condition = try parser.compileExpression(components: Array(components), token: token) diff --git a/Sources/_SwiftSupport.swift b/Sources/_SwiftSupport.swift index 2441350..4519fbd 100644 --- a/Sources/_SwiftSupport.swift +++ b/Sources/_SwiftSupport.swift @@ -36,3 +36,11 @@ public extension Variable { } } #endif + +#if !swift(>=4.2) +extension ArraySlice where Element: Equatable { + func firstIndex(of element: Element) -> Int? { + return index(of: element) + } +} +#endif From c2f18790e329f6db47106358dc2ff089fb61456a Mon Sep 17 00:00:00 2001 From: kawoou Date: Wed, 20 Mar 2019 15:09:37 +0900 Subject: [PATCH 4/6] Update travis CI. --- .travis.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 04f7055..415935d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,17 +9,24 @@ matrix: - os: osx osx_image: xcode10 env: SWIFT_VERSION=4.2 + - os: osx + osx_image: xcode10.2 + env: SWIFT_VERSION=5.0 - os: linux env: SWIFT_VERSION=4.0.3 - os: linux env: SWIFT_VERSION=4.1 - os: linux env: SWIFT_VERSION=4.2 + - os: linux + env: SWIFT_VERSION=4.2.3 + - os: linux + env: SWIFT_VERSION=5.0-DEVELOPMENT-SNAPSHOT-2019-03-10-a language: generic sudo: required dist: trusty install: - - eval "$(curl -sL https://swiftenv.fuller.li/install.sh)" + - if [ "$TRAVIS_OS_NAME" == "linux" ]; then eval "$(curl -sL https://swiftenv.fuller.li/install.sh)"; fi - if [ "$TRAVIS_OS_NAME" == "osx" ]; then wget --output-document /tmp/SwiftLint.pkg https://github.com/realm/SwiftLint/releases/download/0.27.0/SwiftLint.pkg && sudo installer -pkg /tmp/SwiftLint.pkg -target /; fi script: From 3c973689a474993d7275a1548ed36305e5521fca Mon Sep 17 00:00:00 2001 From: kawoou Date: Fri, 5 Apr 2019 13:36:03 +0900 Subject: [PATCH 5/6] Fix swift SIL exception --- .travis.yml | 2 +- Package.resolved | 4 ++-- Package@swift-5.swift | 2 +- Tests/StencilTests/EnvironmentSpec.swift | 6 ++++-- Tests/StencilTests/IncludeSpec.swift | 5 ++++- Tests/StencilTests/InheritanceSpec.swift | 5 ++++- Tests/StencilTests/LexerSpec.swift | 3 ++- Tests/StencilTests/LoaderSpec.swift | 3 ++- 8 files changed, 20 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 415935d..cbfc5fd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,7 +21,7 @@ matrix: - os: linux env: SWIFT_VERSION=4.2.3 - os: linux - env: SWIFT_VERSION=5.0-DEVELOPMENT-SNAPSHOT-2019-03-10-a + env: SWIFT_VERSION=5.0 language: generic sudo: required dist: trusty diff --git a/Package.resolved b/Package.resolved index ff6830b..21b168b 100644 --- a/Package.resolved +++ b/Package.resolved @@ -6,8 +6,8 @@ "repositoryURL": "https://github.com/kylef/PathKit.git", "state": { "branch": null, - "revision": "e2f5be30e4c8f531c9c1e8765aa7b71c0a45d7a0", - "version": "0.9.2" + "revision": "73f8e9dca9b7a3078cb79128217dc8f2e585a511", + "version": "1.0.0" } }, { diff --git a/Package@swift-5.swift b/Package@swift-5.swift index 9784a37..43b97ee 100644 --- a/Package@swift-5.swift +++ b/Package@swift-5.swift @@ -7,7 +7,7 @@ let package = Package( .library(name: "Stencil", targets: ["Stencil"]) ], dependencies: [ - .package(url: "https://github.com/kylef/PathKit.git", from: "0.9.0"), + .package(url: "https://github.com/kylef/PathKit.git", from: "1.0.0"), .package(url: "https://github.com/kylef/Spectre.git", from: "0.9.0") ], targets: [ diff --git a/Tests/StencilTests/EnvironmentSpec.swift b/Tests/StencilTests/EnvironmentSpec.swift index f1bf469..6d8affe 100644 --- a/Tests/StencilTests/EnvironmentSpec.swift +++ b/Tests/StencilTests/EnvironmentSpec.swift @@ -215,7 +215,8 @@ final class EnvironmentIncludeTemplateTests: XCTestCase { override func setUp() { super.setUp() - let path = Path(#file) + ".." + "fixtures" + let basePath: String = #file + let path = Path(basePath) + ".." + "fixtures" let loader = FileSystemLoader(paths: [path]) environment = Environment(loader: loader) template = "" @@ -291,7 +292,8 @@ final class EnvironmentBaseAndChildTemplateTests: XCTestCase { override func setUp() { super.setUp() - let path = Path(#file) + ".." + "fixtures" + let basePath: String = #file + let path = Path(basePath) + ".." + "fixtures" let loader = FileSystemLoader(paths: [path]) environment = Environment(loader: loader) childTemplate = "" diff --git a/Tests/StencilTests/IncludeSpec.swift b/Tests/StencilTests/IncludeSpec.swift index d7d1ddf..1b1493f 100644 --- a/Tests/StencilTests/IncludeSpec.swift +++ b/Tests/StencilTests/IncludeSpec.swift @@ -4,7 +4,10 @@ import Spectre import XCTest final class IncludeTests: XCTestCase { - let path = Path(#file) + ".." + "fixtures" + let path: Path = { + let basePath: String = #file + return Path(basePath) + ".." + "fixtures" + }() lazy var loader = FileSystemLoader(paths: [path]) lazy var environment = Environment(loader: loader) diff --git a/Tests/StencilTests/InheritanceSpec.swift b/Tests/StencilTests/InheritanceSpec.swift index c71736a..da716c3 100644 --- a/Tests/StencilTests/InheritanceSpec.swift +++ b/Tests/StencilTests/InheritanceSpec.swift @@ -4,7 +4,10 @@ import Stencil import XCTest final class InheritanceTests: XCTestCase { - let path = Path(#file) + ".." + "fixtures" + let path: Path = { + let basePath: String = #file + return Path(basePath) + ".." + "fixtures" + }() lazy var loader = FileSystemLoader(paths: [path]) lazy var environment = Environment(loader: loader) diff --git a/Tests/StencilTests/LexerSpec.swift b/Tests/StencilTests/LexerSpec.swift index 9a5e880..483be51 100644 --- a/Tests/StencilTests/LexerSpec.swift +++ b/Tests/StencilTests/LexerSpec.swift @@ -117,7 +117,8 @@ final class LexerTests: XCTestCase { } func testPerformance() throws { - let path = Path(#file) + ".." + "fixtures" + "huge.html" + let basePath: String = #file + let path = Path(basePath) + ".." + "fixtures" + "huge.html" let content: String = try path.read() measure { diff --git a/Tests/StencilTests/LoaderSpec.swift b/Tests/StencilTests/LoaderSpec.swift index 00a1f43..b3dc79a 100644 --- a/Tests/StencilTests/LoaderSpec.swift +++ b/Tests/StencilTests/LoaderSpec.swift @@ -5,7 +5,8 @@ import XCTest final class TemplateLoaderTests: XCTestCase { func testFileSystemLoader() { - let path = Path(#file) + ".." + "fixtures" + let basePath: String = #file + let path = Path(basePath) + ".." + "fixtures" let loader = FileSystemLoader(paths: [path]) let environment = Environment(loader: loader) From 4020a9851a572d4780db13c4ff2047933106d0da Mon Sep 17 00:00:00 2001 From: kawoou Date: Mon, 15 Apr 2019 13:35:33 +0900 Subject: [PATCH 6/6] Test: SIL issues, #file as String --- Tests/StencilTests/EnvironmentSpec.swift | 6 ++---- Tests/StencilTests/IncludeSpec.swift | 5 +---- Tests/StencilTests/InheritanceSpec.swift | 5 +---- Tests/StencilTests/LexerSpec.swift | 3 +-- Tests/StencilTests/LoaderSpec.swift | 3 +-- 5 files changed, 6 insertions(+), 16 deletions(-) diff --git a/Tests/StencilTests/EnvironmentSpec.swift b/Tests/StencilTests/EnvironmentSpec.swift index 6d8affe..f5b829f 100644 --- a/Tests/StencilTests/EnvironmentSpec.swift +++ b/Tests/StencilTests/EnvironmentSpec.swift @@ -215,8 +215,7 @@ final class EnvironmentIncludeTemplateTests: XCTestCase { override func setUp() { super.setUp() - let basePath: String = #file - let path = Path(basePath) + ".." + "fixtures" + let path = Path(#file as String) + ".." + "fixtures" let loader = FileSystemLoader(paths: [path]) environment = Environment(loader: loader) template = "" @@ -292,8 +291,7 @@ final class EnvironmentBaseAndChildTemplateTests: XCTestCase { override func setUp() { super.setUp() - let basePath: String = #file - let path = Path(basePath) + ".." + "fixtures" + let path = Path(#file as String) + ".." + "fixtures" let loader = FileSystemLoader(paths: [path]) environment = Environment(loader: loader) childTemplate = "" diff --git a/Tests/StencilTests/IncludeSpec.swift b/Tests/StencilTests/IncludeSpec.swift index 1b1493f..4743a94 100644 --- a/Tests/StencilTests/IncludeSpec.swift +++ b/Tests/StencilTests/IncludeSpec.swift @@ -4,10 +4,7 @@ import Spectre import XCTest final class IncludeTests: XCTestCase { - let path: Path = { - let basePath: String = #file - return Path(basePath) + ".." + "fixtures" - }() + let path = Path(#file as String) + ".." + "fixtures" lazy var loader = FileSystemLoader(paths: [path]) lazy var environment = Environment(loader: loader) diff --git a/Tests/StencilTests/InheritanceSpec.swift b/Tests/StencilTests/InheritanceSpec.swift index da716c3..4f91aff 100644 --- a/Tests/StencilTests/InheritanceSpec.swift +++ b/Tests/StencilTests/InheritanceSpec.swift @@ -4,10 +4,7 @@ import Stencil import XCTest final class InheritanceTests: XCTestCase { - let path: Path = { - let basePath: String = #file - return Path(basePath) + ".." + "fixtures" - }() + let path = Path(#file as String) + ".." + "fixtures" lazy var loader = FileSystemLoader(paths: [path]) lazy var environment = Environment(loader: loader) diff --git a/Tests/StencilTests/LexerSpec.swift b/Tests/StencilTests/LexerSpec.swift index 483be51..adf6a92 100644 --- a/Tests/StencilTests/LexerSpec.swift +++ b/Tests/StencilTests/LexerSpec.swift @@ -117,8 +117,7 @@ final class LexerTests: XCTestCase { } func testPerformance() throws { - let basePath: String = #file - let path = Path(basePath) + ".." + "fixtures" + "huge.html" + let path = Path(#file as String) + ".." + "fixtures" + "huge.html" let content: String = try path.read() measure { diff --git a/Tests/StencilTests/LoaderSpec.swift b/Tests/StencilTests/LoaderSpec.swift index b3dc79a..3cd189b 100644 --- a/Tests/StencilTests/LoaderSpec.swift +++ b/Tests/StencilTests/LoaderSpec.swift @@ -5,8 +5,7 @@ import XCTest final class TemplateLoaderTests: XCTestCase { func testFileSystemLoader() { - let basePath: String = #file - let path = Path(basePath) + ".." + "fixtures" + let path = Path(#file as String) + ".." + "fixtures" let loader = FileSystemLoader(paths: [path]) let environment = Environment(loader: loader)