// // String+SwiftLint.swift // SwiftLint // // Created by JP Simard on 2015-05-16. // Copyright (c) 2015 Realm. All rights reserved. // import Foundation import SourceKittenFramework extension String { func lines() -> [Line] { var lines = [Line]() var lineIndex = 1 enumerateLines { line, stop in lines.append((lineIndex++, line)) } return lines } func isUppercase() -> Bool { return self == uppercaseString } func countOfTailingCharactersInSet(characterSet: NSCharacterSet) -> Int { return String(characters.reverse()).countOfLeadingCharactersInSet(characterSet) } public var chomped: String { return stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet()) } } extension NSString { public func lineAndCharacterForByteOffset(offset: Int) -> (line: Int, character: Int)? { return byteRangeToNSRange(start: offset, length: 0).flatMap { range in var numberOfLines = 0, index = 0, lineRangeStart = 0, previousIndex = 0 while index < length { numberOfLines++ if index > range.location { break } lineRangeStart = numberOfLines previousIndex = index index = NSMaxRange(lineRangeForRange(NSRange(location: index, length: 1))) } return (lineRangeStart, range.location - previousIndex + 1) } } }