From 77f033ec5146a27c430009a6f0fb3183b974f2c7 Mon Sep 17 00:00:00 2001 From: David Jennes Date: Fri, 27 Jan 2017 15:44:12 +0100 Subject: [PATCH] Refactor stencil swift extensions registration for easier use with an existing `Extension`. --- CHANGELOG.md | 3 +++ Pods/Pods.xcodeproj/project.pbxproj | 4 ++++ Sources/Environment.swift | 32 +++++++++++++++++++++++++++++ Sources/StencilSwiftTemplate.swift | 23 --------------------- 4 files changed, 39 insertions(+), 23 deletions(-) create mode 100644 Sources/Environment.swift diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b5cc653..c6d715a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,9 @@ * Renamed `SwiftTemplate` to `StencilSwiftTemplate`. [David Jennes](https://github.com/djbe) [#14](https://github.com/SwiftGen/StencilSwiftKit/issues/14) +* Refactor stencil swift extensions registration for easier use with an existing `Extension`. + [David Jennes](https://github.com/djbe) + [#16](https://github.com/SwiftGen/StencilSwiftKit/issues/16) ## Before 5.0.0 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index c88ab60a..b5299d1b 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -43,6 +43,7 @@ A2B9882F7B61B783116C9FF9147D4C05 /* Pods-Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C0ABA9994C05CE2F400945671B7038BA /* Pods-Tests-dummy.m */; }; B65CC4D6EE2210495A18E7695A3E6DC5 /* Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AB13C581DBF4D4B41876C69872B183 /* Extension.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C22E1920B40D3E75EE6C1B253A0B3E91 /* IfTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D887BD539929925B9535E5136F861F20 /* IfTag.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DD426D511E3B8E9B007D843B /* Environment.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD426D4F1E3B8E90007D843B /* Environment.swift */; }; E436943415A371D33CD28BF20935A2F9 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2497E0C37C035DB8276C0C7335E3FC93 /* Cocoa.framework */; }; F83DF009352A70B747BDA63DBF87103F /* ForTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CCB7B571DD30214319D05B2A2D01268 /* ForTag.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; F93EC375CD4D233014C44DBDE515C6D2 /* Lexer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31A007C042C580A003C9B6DB5AD1B534 /* Lexer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -158,6 +159,7 @@ D6C2D28B3980163C3F38852C8437E5C2 /* Stencil.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Stencil.modulemap; sourceTree = ""; }; D887BD539929925B9535E5136F861F20 /* IfTag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IfTag.swift; path = Sources/IfTag.swift; sourceTree = ""; }; E09480DB5774EB9FBBAE030F88F5BCC3 /* StencilSwiftTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StencilSwiftTemplate.swift; sourceTree = ""; }; + DD426D4F1E3B8E90007D843B /* Environment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Environment.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -212,6 +214,7 @@ isa = PBXGroup; children = ( 95F48C2804B8C05C9EE9EB78ACC7C2E5 /* CallNode.swift */, + DD426D4F1E3B8E90007D843B /* Environment.swift */, B9C2D0FB00398A5111567EEFD1CCB01B /* Filters.swift */, A03EA653264F980DD920923E3D631E27 /* SetNode.swift */, E09480DB5774EB9FBBAE030F88F5BCC3 /* StencilSwiftTemplate.swift */, @@ -569,6 +572,7 @@ files = ( 3BFB5571230E11FC87F99FE4926A252E /* CallNode.swift in Sources */, 15F029613D94C5AAA46B6928D42D4349 /* Filters.swift in Sources */, + DD426D511E3B8E9B007D843B /* Environment.swift in Sources */, A082AAC03E6892EC107B7421BC93838D /* SetNode.swift in Sources */, 59F231D22411C3AA93D3D9B9D9E555F5 /* StencilSwiftKit-dummy.m in Sources */, 02A898432BFB56500E31943EA2E63D91 /* SwiftIdentifier.swift in Sources */, diff --git a/Sources/Environment.swift b/Sources/Environment.swift new file mode 100644 index 00000000..f7026ff0 --- /dev/null +++ b/Sources/Environment.swift @@ -0,0 +1,32 @@ +// +// StencilSwiftKit +// Copyright (c) 2017 SwiftGen +// MIT Licence +// + +import Stencil + +public extension Extension { + public func registerStencilSwiftExtensions() { + registerTag("set", parser: SetNode.parse) + registerTag("macro", parser: MacroNode.parse) + registerTag("call", parser: CallNode.parse) + registerFilter("swiftIdentifier", filter: StringFilters.stringToSwiftIdentifier) + registerFilter("join", filter: ArrayFilters.join) + registerFilter("lowerFirstWord", filter: StringFilters.lowerFirstWord) + registerFilter("snakeToCamelCase", filter: StringFilters.snakeToCamelCase) + registerFilter("snakeToCamelCaseNoPrefix", filter: StringFilters.snakeToCamelCaseNoPrefix) + registerFilter("titlecase", filter: StringFilters.titlecase) + registerFilter("hexToInt", filter: NumFilters.hexToInt) + registerFilter("int255toFloat", filter: NumFilters.int255toFloat) + registerFilter("percent", filter: NumFilters.percent) + registerFilter("escapeReservedKeywords", filter: StringFilters.escapeReservedKeywords) + } +} + +public func stencilSwiftEnvironment() -> Environment { + let ext = Extension() + ext.registerStencilSwiftExtensions() + + return Environment(extensions: [ext], templateClass: StencilSwiftTemplate.self) +} diff --git a/Sources/StencilSwiftTemplate.swift b/Sources/StencilSwiftTemplate.swift index af644e99..738b8b1f 100644 --- a/Sources/StencilSwiftTemplate.swift +++ b/Sources/StencilSwiftTemplate.swift @@ -40,26 +40,3 @@ open class StencilSwiftTemplate: Template { return unmarkedNewlines } } - -// Create StencilSwiftKit-specific namespace including custom tags & filters -func stencilSwiftExtension() -> Extension { - let namespace = Extension() - namespace.registerTag("set", parser: SetNode.parse) - namespace.registerTag("macro", parser: MacroNode.parse) - namespace.registerTag("call", parser: CallNode.parse) - namespace.registerFilter("swiftIdentifier", filter: StringFilters.stringToSwiftIdentifier) - namespace.registerFilter("join", filter: ArrayFilters.join) - namespace.registerFilter("lowerFirstWord", filter: StringFilters.lowerFirstWord) - namespace.registerFilter("snakeToCamelCase", filter: StringFilters.snakeToCamelCase) - namespace.registerFilter("snakeToCamelCaseNoPrefix", filter: StringFilters.snakeToCamelCaseNoPrefix) - namespace.registerFilter("titlecase", filter: StringFilters.titlecase) - namespace.registerFilter("hexToInt", filter: NumFilters.hexToInt) - namespace.registerFilter("int255toFloat", filter: NumFilters.int255toFloat) - namespace.registerFilter("percent", filter: NumFilters.percent) - namespace.registerFilter("escapeReservedKeywords", filter: StringFilters.escapeReservedKeywords) - return namespace -} - -public func stencilSwiftEnvironment() -> Environment { - return Environment(extensions: [stencilSwiftExtension()], templateClass: StencilSwiftTemplate.self) -}