diff --git a/CleanClosureSyntax.xcodeproj/project.pbxproj b/CleanClosureSyntax.xcodeproj/project.pbxproj index 8989692..19b1754 100644 --- a/CleanClosureSyntax.xcodeproj/project.pbxproj +++ b/CleanClosureSyntax.xcodeproj/project.pbxproj @@ -179,18 +179,18 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0800; - LastUpgradeCheck = 0800; + LastUpgradeCheck = 0920; ORGANIZATIONNAME = "Patrick Balestra"; TargetAttributes = { AE2862D11D25568D00219753 = { CreatedOnToolsVersion = 8.0; - DevelopmentTeam = 2EZDW5DVTJ; + DevelopmentTeam = ENLH686A45; DevelopmentTeamName = "Patrick Balestra"; ProvisioningStyle = Automatic; }; AE2862E71D2556DE00219753 = { CreatedOnToolsVersion = 8.0; - DevelopmentTeam = 2EZDW5DVTJ; + DevelopmentTeam = ENLH686A45; DevelopmentTeamName = "Patrick Balestra"; ProvisioningStyle = Automatic; }; @@ -284,14 +284,22 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; @@ -331,14 +339,22 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; @@ -368,11 +384,12 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "Mac Developer"; COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = ENLH686A45; INFOPLIST_FILE = CleanClosureSyntax/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.patrickbalestra.CleanClosureSyntax; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -383,11 +400,12 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "Mac Developer"; COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = ENLH686A45; INFOPLIST_FILE = CleanClosureSyntax/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.patrickbalestra.CleanClosureSyntax; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 4.0; }; name = Release; }; @@ -397,13 +415,14 @@ CODE_SIGN_ENTITLEMENTS = Cleaner/Cleaner.entitlements; CODE_SIGN_IDENTITY = "Mac Developer"; COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = ENLH686A45; INFOPLIST_FILE = Cleaner/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @executable_path/../../../../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_BUNDLE_IDENTIFIER = com.patrickbalestra.CleanClosureSyntax.Cleaner; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -413,13 +432,14 @@ CODE_SIGN_ENTITLEMENTS = Cleaner/Cleaner.entitlements; CODE_SIGN_IDENTITY = "Mac Developer"; COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = ENLH686A45; INFOPLIST_FILE = Cleaner/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @executable_path/../../../../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_BUNDLE_IDENTIFIER = com.patrickbalestra.CleanClosureSyntax.Cleaner; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 4.0; }; name = Release; }; diff --git a/Cleaner/SourceEditorCommand.swift b/Cleaner/SourceEditorCommand.swift index 1451699..4907e1b 100644 --- a/Cleaner/SourceEditorCommand.swift +++ b/Cleaner/SourceEditorCommand.swift @@ -9,12 +9,12 @@ import Foundation import XcodeKit -extension NSString { +extension String { // Remove the given characters in the range - func remove(characters: [Character], in range: NSRange) -> NSString { + func remove(characters: [Character], in range: NSRange) -> String { var cleanString = self for char in characters { - cleanString = cleanString.replacingOccurrences(of: String(char), with: "", options: [.caseInsensitive], range: range) as NSString + cleanString = cleanString.replacingOccurrences(of: String(char), with: "", options: [.caseInsensitive], range: range as? Range) as String } return cleanString } @@ -27,10 +27,10 @@ class SourceEditorCommand: NSObject, XCSourceEditorCommand { // Find lines that contain a closure syntax for lineIndex in 0 ..< invocation.buffer.lines.count { - let line = invocation.buffer.lines[lineIndex] as! NSString + let line = invocation.buffer.lines[lineIndex] as! String do { let regex = try NSRegularExpression(pattern: "\\{.*\\(.+\\).+in", options: .caseInsensitive) - let range = NSRange(0 ..< line.length) + let range = NSRange(0 ..< line.count) let results = regex.matches(in: line as String, options: .reportProgress, range: range) // When a closure is found, clean up its syntax _ = results.map { result in @@ -39,7 +39,7 @@ class SourceEditorCommand: NSObject, XCSourceEditorCommand { invocation.buffer.lines[lineIndex] = cleanLine } } catch { - completionHandler(error as NSError) + completionHandler(error as Error) } }