Skip to content

Commit

Permalink
Updated the regex for boundary matching
Browse files Browse the repository at this point in the history
  • Loading branch information
cragod authored and swiftyfinch committed Nov 20, 2023
1 parent d40e094 commit 3a0ca3b
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 18 deletions.
27 changes: 18 additions & 9 deletions Sources/RugbyFoundation/Core/Use/SupportFilesPatcher.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ struct FileReplacement {
}
}

enum ReplacementBoundary {
static let prefix = #"(?<=(\"|'|\s))"#
static let suffix = #"(?=(\"|'|\s))"#
}

protocol ISupportFilesPatcher {
func prepareReplacements(forTarget target: IInternalTarget) throws -> [FileReplacement]
}
Expand All @@ -21,7 +26,8 @@ final class SupportFilesPatcher {
private typealias Replacement = (lookup: String, replacement: String)

// swiftlint:disable identifier_name
private let MATCHING_BOUNDARY = "\\b"
private let PREFIX_BOUNDARY = ReplacementBoundary.prefix
private let SUFFIX_BOUNDARY = ReplacementBoundary.suffix
private let BUILT_PRODUCTS_DIR = "${BUILT_PRODUCTS_DIR}/"
private let PODS_CONFIGURATION_BUILD_DIR = "${PODS_CONFIGURATION_BUILD_DIR}/"
private let PODS_XCFRAMEWORKS_BUILD_DIR = "${PODS_XCFRAMEWORKS_BUILD_DIR}/"
Expand Down Expand Up @@ -58,7 +64,8 @@ final class SupportFilesPatcher {
let replacements = buildMap(from: replacementsPairs)

let regex = try buildRegexPattern(from: replacementsPairs,
suffix: MATCHING_BOUNDARY).regex()
prefix: PREFIX_BOUNDARY,
suffix: SUFFIX_BOUNDARY).regex()

return target.xcconfigPaths.compactMap {
FileReplacement(replacements: replacements, filePath: $0, regex: regex)
Expand All @@ -78,8 +85,8 @@ final class SupportFilesPatcher {
modifyKey: { "\(BUILT_PRODUCTS_DIR)\($0)" })

let regex = try buildRegexPattern(from: replacementsPairs,
prefix: "\(BUILT_PRODUCTS_DIR)",
suffix: MATCHING_BOUNDARY).regex()
prefix: "\(PREFIX_BOUNDARY)\(BUILT_PRODUCTS_DIR.escapedPattern)",
suffix: SUFFIX_BOUNDARY).regex()

return FileReplacement(replacements: replacements, filePath: filePath, regex: regex)
}
Expand All @@ -103,11 +110,14 @@ final class SupportFilesPatcher {
initial: replacements,
modifyKey: { "\(BUILT_PRODUCTS_DIR)\($0)" })

let bundlesRegexPattern = buildRegexPattern(from: bundlesReplacementsPairs,
prefix: "\(PODS_CONFIGURATION_BUILD_DIR)",
suffix: MATCHING_BOUNDARY)
let bundlesRegexPattern = buildRegexPattern(
from: bundlesReplacementsPairs,
prefix: "\(PREFIX_BOUNDARY)\(PODS_CONFIGURATION_BUILD_DIR.escapedPattern)",
suffix: SUFFIX_BOUNDARY
)

let frameworksRegexPattern = buildRegexPattern(from: frameworksReplacementsPairs,
prefix: BUILT_PRODUCTS_DIR)
prefix: BUILT_PRODUCTS_DIR.escapedPattern)
let regex = try "(\(bundlesRegexPattern)|\(frameworksRegexPattern))".regex()

return FileReplacement(replacements: replacements, filePath: filePath, regex: regex)
Expand All @@ -128,7 +138,6 @@ final class SupportFilesPatcher {
private func buildRegexPattern(from replacements: [Replacement],
prefix: String = "",
suffix: String = "") -> String {
let prefix = NSRegularExpression.escapedPattern(for: prefix)
let replacements = replacements.lazy.map(\.lookup).map(NSRegularExpression.escapedPattern(for:))
let replacementsJoined = replacements.joined(separator: "|")
return "\(prefix)(\(replacementsJoined))\(suffix)"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ enum RegexError: Error {
}

extension String {
var escapedPattern: String {
NSRegularExpression.escapedPattern(for: self)
}

func regex() throws -> NSRegularExpression {
try NSRegularExpression(pattern: self, options: .anchorsMatchLines)
}
Expand Down
4 changes: 3 additions & 1 deletion Tests/FoundationTests/Core/Use/FileContentEditorTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ extension FileContentEditorTests {
"${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers":
"${HOME}/.rugby/bin/Moya/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/badaa58/Moya.framework/Headers"
]
let regexPattern = try #"(\$\{PODS_CONFIGURATION_BUILD_DIR\}/Realm-library|\$\{PODS_CONFIGURATION_BUILD_DIR\}/Realm-library/libRealm-library\.a/Headers|\$\{PODS_CONFIGURATION_BUILD_DIR\}/Moya/Moya\.framework/Headers)\b"#.regex()
let joinedReplacementStr = #"(\$\{PODS_CONFIGURATION_BUILD_DIR\}/Realm-library|\$\{PODS_CONFIGURATION_BUILD_DIR\}/Realm-library/libRealm-library\.a/Headers|\$\{PODS_CONFIGURATION_BUILD_DIR\}/Moya/Moya\.framework/Headers)"#
// Ensured that the validation method here matches the matching approach in SupportFilesPatcher.
let regexPattern = try "\(ReplacementBoundary.prefix)\(joinedReplacementStr)\(ReplacementBoundary.suffix)".regex()
let expectedNewContent = """
FRAMEWORK_SEARCH_PATH = $(Inherited) "${HOME}/.rugby/bin/Realm-library/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/d2d48c5"
HEADER_SEARCH_PATH = $(Inherited) ${HOME}/.rugby/bin/Realm-library/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/d2d48c5/libRealm-library.a/Headers '${HOME}/.rugby/bin/Moya/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/badaa58/Moya.framework/Headers'
Expand Down
28 changes: 20 additions & 8 deletions Tests/FoundationTests/Core/Use/SupportFilesPatcherTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import XCTest

final class SupportFilesPatcherTests: XCTestCase {
private var sut: ISupportFilesPatcher!
private var expectedPrefixBoundary = #"(?<=(\"|'|\s))"#
private var expectedSuffixBoundary = #"(?=(\"|'|\s))"#

override func setUp() {
super.setUp()
Expand Down Expand Up @@ -62,11 +64,14 @@ extension SupportFilesPatcherTests {
let target = Target.podsExample
// swiftlint:disable line_length
let xcconfigReplacements = ["${PODS_CONFIGURATION_BUILD_DIR}/Realm-library": "${HOME}/.rugby/bin/Realm-library/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/d2d48c5", "${PODS_CONFIGURATION_BUILD_DIR}/Realm-library/Realm_library.modulemap": "${HOME}/.rugby/bin/Realm-library/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/d2d48c5/Realm_library.modulemap", "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire": "${HOME}/.rugby/bin/Alamofire/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/36ff0bc", "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.modulemap": "${HOME}/.rugby/bin/Moya/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/badaa58/Moya.modulemap", "${PODS_CONFIGURATION_BUILD_DIR}/Moya": "${HOME}/.rugby/bin/Moya/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/badaa58", "${PODS_CONFIGURATION_BUILD_DIR}/Realm-library/libRealm-library.a/Headers": "${HOME}/.rugby/bin/Realm-library/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/d2d48c5/libRealm-library.a/Headers", "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap": "${HOME}/.rugby/bin/Alamofire/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/36ff0bc/Alamofire.modulemap", "${PODS_XCFRAMEWORKS_BUILD_DIR}/Realm-library": "${HOME}/.rugby/bin/Realm-library/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/d2d48c5/Realm-library", "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers": "${HOME}/.rugby/bin/Moya/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/badaa58/Moya.framework/Headers", "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers": "${HOME}/.rugby/bin/Alamofire/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/36ff0bc/Alamofire.framework/Headers", "${PODS_XCFRAMEWORKS_BUILD_DIR}/Realm-library/Headers": "${HOME}/.rugby/bin/Realm-library/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/d2d48c5/Realm-library/Headers"]
let xcconfigRegexPattern = #"(\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Moya\/Moya\.framework\/Headers|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Moya|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Moya\/Moya\.modulemap|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Alamofire\/Alamofire\.framework\/Headers|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Alamofire|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Alamofire\/Alamofire\.modulemap|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Realm-library\/libRealm-library\.a\/Headers|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Realm-library|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Realm-library\/Realm_library\.modulemap|\$\{PODS_XCFRAMEWORKS_BUILD_DIR\}\/Realm-library\/Headers|\$\{PODS_XCFRAMEWORKS_BUILD_DIR\}\/Realm-library)\b"#
let xcconfigRegexPattern = expectedPrefixBoundary + #"(\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Moya\/Moya\.framework\/Headers|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Moya|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Moya\/Moya\.modulemap|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Alamofire\/Alamofire\.framework\/Headers|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Alamofire|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Alamofire\/Alamofire\.modulemap|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Realm-library\/libRealm-library\.a\/Headers|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Realm-library|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Realm-library\/Realm_library\.modulemap|\$\{PODS_XCFRAMEWORKS_BUILD_DIR\}\/Realm-library\/Headers|\$\{PODS_XCFRAMEWORKS_BUILD_DIR\}\/Realm-library)"# + expectedSuffixBoundary
let frameworkReplacements = ["${BUILT_PRODUCTS_DIR}/Moya/Moya.framework": "${HOME}/.rugby/bin/Moya/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/badaa58/Moya.framework", "${BUILT_PRODUCTS_DIR}/Realm-library/libRealm-library.a": "${HOME}/.rugby/bin/Realm-library/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/d2d48c5/libRealm-library.a", "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework": "${HOME}/.rugby/bin/Alamofire/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/36ff0bc/Alamofire.framework"]
let frameworksRegexPattern = #"\$\{BUILT_PRODUCTS_DIR\}\/(Moya\/Moya\.framework|Alamofire\/Alamofire\.framework|Realm-library\/libRealm-library\.a)\b"#
let frameworksRegexPattern = expectedPrefixBoundary + #"\$\{BUILT_PRODUCTS_DIR\}\/(Moya\/Moya\.framework|Alamofire\/Alamofire\.framework|Realm-library\/libRealm-library\.a)"# + expectedSuffixBoundary
let resourcesReplacements = ["${BUILT_PRODUCTS_DIR}/Realm-library/libRealm-library.a/": "${HOME}/.rugby/bin/Realm-library/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/d2d48c5/libRealm-library.a/", "${BUILT_PRODUCTS_DIR}/Moya/Moya.framework/": "${HOME}/.rugby/bin/Moya/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/badaa58/Moya.framework/", "${PODS_CONFIGURATION_BUILD_DIR}/LocalPod/LocalPodResources.bundle": "${HOME}/.rugby/bin/LocalPodResources/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/17da84b/LocalPodResources.bundle", "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework/": "${HOME}/.rugby/bin/Alamofire/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${ARCHS}/36ff0bc/Alamofire.framework/"]
let resourcesRegexPattern = #"(\$\{PODS_CONFIGURATION_BUILD_DIR\}\/(LocalPod\/LocalPodResources\.bundle)\b|\$\{BUILT_PRODUCTS_DIR\}\/(Moya\/Moya\.framework\/|Alamofire\/Alamofire\.framework\/|Realm-library\/libRealm-library\.a\/))"#
let resourcesRegexPattern = "(" + expectedPrefixBoundary
+ #"\$\{PODS_CONFIGURATION_BUILD_DIR\}\/(LocalPod\/LocalPodResources\.bundle)"#
+ expectedSuffixBoundary
+ #"|\$\{BUILT_PRODUCTS_DIR\}\/(Moya\/Moya\.framework\/|Alamofire\/Alamofire\.framework\/|Realm-library\/libRealm-library\.a\/))"#
// swiftlint:enable line_length

// Act
Expand Down Expand Up @@ -111,8 +116,10 @@ private extension SupportFilesPatcherTests {
}

private var localPodXCConfigRegexPattern: String {
// swiftlint:disable:next line_length
#"(\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Moya\/Moya\.framework\/Headers|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Moya|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Moya\/Moya\.modulemap|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Alamofire\/Alamofire\.framework\/Headers|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Alamofire|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Alamofire\/Alamofire\.modulemap)\b"#
expectedPrefixBoundary
// swiftlint:disable:next line_length
+ #"(\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Moya\/Moya\.framework\/Headers|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Moya|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Moya\/Moya\.modulemap|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Alamofire\/Alamofire\.framework\/Headers|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Alamofire|\$\{PODS_CONFIGURATION_BUILD_DIR\}\/Alamofire\/Alamofire\.modulemap)"#
+ expectedSuffixBoundary
}

private var frameworkReplacements: [String: String] {
Expand All @@ -128,7 +135,9 @@ private extension SupportFilesPatcherTests {
}

private var frameworksRegexPattern: String {
#"\$\{BUILT_PRODUCTS_DIR\}\/(Moya\/Moya\.framework|Alamofire\/Alamofire\.framework)\b"#
expectedPrefixBoundary
+ #"\$\{BUILT_PRODUCTS_DIR\}\/(Moya\/Moya\.framework|Alamofire\/Alamofire\.framework)"#
+ expectedSuffixBoundary
}

private var resourcesReplacements: [String: String] {
Expand All @@ -145,8 +154,11 @@ private extension SupportFilesPatcherTests {
}

private var resourcesRegexPattern: String {
// swiftlint:disable:next line_length
#"(\$\{PODS_CONFIGURATION_BUILD_DIR\}\/(LocalPod\/LocalPodResources\.bundle)\b|\$\{BUILT_PRODUCTS_DIR\}\/(Moya\/Moya\.framework\/|Alamofire\/Alamofire\.framework\/))"#
"("
+ expectedPrefixBoundary
+ #"\$\{PODS_CONFIGURATION_BUILD_DIR\}\/(LocalPod\/LocalPodResources\.bundle)"#
+ expectedSuffixBoundary
+ #"|\$\{BUILT_PRODUCTS_DIR\}\/(Moya\/Moya\.framework\/|Alamofire\/Alamofire\.framework\/))"#
}
}

Expand Down

0 comments on commit 3a0ca3b

Please sign in to comment.