Fixed a minor layout issue and string linter tweaks

pull/731/head
Morgan Pretty 9 months ago
parent b20e533929
commit d1d2531ced

@ -29,38 +29,50 @@ extension ProjectState {
] ]
static let excludedPhrases: Set<String> = [ "", " ", ",", ", ", "null" ] static let excludedPhrases: Set<String> = [ "", " ", ",", ", ", "null" ]
static let excludedUnlocalisedStringLineMatching: Set<MatchType> = [ static let excludedUnlocalisedStringLineMatching: Set<MatchType> = [
.contains(ProjectState.lintSuppression), .contains(ProjectState.lintSuppression, caseSensitive: false),
.prefix("#import"), .prefix("#import", caseSensitive: false),
.prefix("@available("), .prefix("@available(", caseSensitive: false),
.contains("fatalError("), .contains("fatalError(", caseSensitive: false),
.contains("precondition("), .contains("precondition(", caseSensitive: false),
.contains("preconditionFailure("), .contains("preconditionFailure(", caseSensitive: false),
.contains("print("), .contains("print(", caseSensitive: false),
.contains("NSLog("), .contains("NSLog(", caseSensitive: false),
.contains("SNLog("), .contains("SNLog(", caseSensitive: false),
.contains("SNLogNotTests("), .contains("SNLogNotTests(", caseSensitive: false),
.contains("owsFailDebug("), .contains("owsFailDebug(", caseSensitive: false),
.contains("#imageLiteral(resourceName:"), .contains("#imageLiteral(resourceName:", caseSensitive: false),
.contains("UIImage(named:"), .contains("UIImage(named:", caseSensitive: false),
.contains("UIImage(systemName:"), .contains("UIImage(systemName:", caseSensitive: false),
.contains("[UIImage imageNamed:"), .contains("[UIImage imageNamed:", caseSensitive: false),
.contains("UIFont(name:"), .contains("UIFont(name:", caseSensitive: false),
.contains(".dateFormat ="), .contains(".dateFormat =", caseSensitive: false),
.contains(".accessibilityLabel ="), .contains(".accessibilityLabel =", caseSensitive: false),
.contains(".accessibilityValue ="), .contains(".accessibilityValue =", caseSensitive: false),
.contains(".accessibilityIdentifier ="), .contains(".accessibilityIdentifier =", caseSensitive: false),
.contains("accessibilityIdentifier:"), .contains("accessibilityIdentifier:", caseSensitive: false),
.contains("accessibilityLabel:"), .contains("accessibilityLabel:", caseSensitive: false),
.contains("Accessibility(identifier:"), .contains("Accessibility(identifier:", caseSensitive: false),
.contains("Accessibility(label:"), .contains("Accessibility(label:", caseSensitive: false),
.contains("NSAttributedString.Key("), .contains("NSAttributedString.Key(", caseSensitive: false),
.contains("Notification.Name("), .contains("Notification.Name(", caseSensitive: false),
.contains("Notification.Key("), .contains("Notification.Key(", caseSensitive: false),
.contains("DispatchQueue("), .contains("DispatchQueue(", caseSensitive: false),
.containsAnd("identifier:", .previousLine(numEarlier: 1, .contains("Accessibility("))), .containsAnd(
.containsAnd("label:", .previousLine(numEarlier: 1, .contains("Accessibility("))), "identifier:",
.containsAnd("label:", .previousLine(numEarlier: 2, .contains("Accessibility("))), caseSensitive: false,
.contains("SQL("), .previousLine(numEarlier: 1, .contains("Accessibility(", caseSensitive: false))
),
.containsAnd(
"label:",
caseSensitive: false,
.previousLine(numEarlier: 1, .contains("Accessibility(", caseSensitive: false))
),
.containsAnd(
"label:",
caseSensitive: false,
.previousLine(numEarlier: 2, .contains("Accessibility(", caseSensitive: false))
),
.contains("SQL(", caseSensitive: false),
.regex(".*static var databaseTableName: String"), .regex(".*static var databaseTableName: String"),
.regex("Logger\\..*\\("), .regex("Logger\\..*\\("),
.regex("OWSLogger\\..*\\("), .regex("OWSLogger\\..*\\("),
@ -528,21 +540,33 @@ extension ProjectState {
} }
indirect enum MatchType: Hashable { indirect enum MatchType: Hashable {
case prefix(String) case prefix(String, caseSensitive: Bool)
case contains(String) case contains(String, caseSensitive: Bool)
case containsAnd(String, MatchType) case containsAnd(String, caseSensitive: Bool, MatchType)
case regex(String) case regex(String)
case previousLine(numEarlier: Int, MatchType) case previousLine(numEarlier: Int, MatchType)
func matches(_ value: String, _ index: Int, _ lines: [String]) -> Bool { func matches(_ value: String, _ index: Int, _ lines: [String]) -> Bool {
switch self { switch self {
case .prefix(let prefix): case .prefix(let prefix, false):
return value
.lowercased()
.trimmingCharacters(in: .whitespacesAndNewlines)
.hasPrefix(prefix.lowercased())
case .prefix(let prefix, true):
return value return value
.trimmingCharacters(in: .whitespacesAndNewlines) .trimmingCharacters(in: .whitespacesAndNewlines)
.hasPrefix(prefix) .hasPrefix(prefix)
case .contains(let other): return value.contains(other) case .contains(let other, false): return value.lowercased().contains(other.lowercased())
case .containsAnd(let other, let otherMatch): case .contains(let other, true): return value.contains(other)
case .containsAnd(let other, false, let otherMatch):
guard value.lowercased().contains(other.lowercased()) else { return false }
return otherMatch.matches(value, index, lines)
case .containsAnd(let other, true, let otherMatch):
guard value.contains(other) else { return false } guard value.contains(other) else { return false }
return otherMatch.matches(value, index, lines) return otherMatch.matches(value, index, lines)

@ -47,8 +47,14 @@ final class InfoBanner: UIView {
init(info: Info) { init(info: Info) {
super.init(frame: CGRect.zero) super.init(frame: CGRect.zero)
addSubview(label) addSubview(label)
label.pin(to: self)
label.pin(.top, to: .top, of: self)
label.pin(.bottom, to: .bottom, of: self)
label.pin(.leading, to: .leading, of: self, withInset: Values.mediumSpacing)
label.pin(.trailing, to: .trailing, of: self, withInset: -Values.mediumSpacing)
self.set(.height, to: info.height) self.set(.height, to: info.height)
self.update(info) self.update(info)
} }

Loading…
Cancel
Save