From d1d2531ceddc31343474a50d502eb26c19bf21ec Mon Sep 17 00:00:00 2001 From: Morgan Pretty Date: Mon, 9 Oct 2023 09:12:38 +1100 Subject: [PATCH] Fixed a minor layout issue and string linter tweaks --- Scripts/LintLocalizableStrings.swift | 100 +++++++++++------- .../Views & Modals/InfoBanner.swift | 8 +- 2 files changed, 69 insertions(+), 39 deletions(-) diff --git a/Scripts/LintLocalizableStrings.swift b/Scripts/LintLocalizableStrings.swift index 56bfe186a..9860c275f 100755 --- a/Scripts/LintLocalizableStrings.swift +++ b/Scripts/LintLocalizableStrings.swift @@ -29,38 +29,50 @@ extension ProjectState { ] static let excludedPhrases: Set = [ "", " ", ",", ", ", "null" ] static let excludedUnlocalisedStringLineMatching: Set = [ - .contains(ProjectState.lintSuppression), - .prefix("#import"), - .prefix("@available("), - .contains("fatalError("), - .contains("precondition("), - .contains("preconditionFailure("), - .contains("print("), - .contains("NSLog("), - .contains("SNLog("), - .contains("SNLogNotTests("), - .contains("owsFailDebug("), - .contains("#imageLiteral(resourceName:"), - .contains("UIImage(named:"), - .contains("UIImage(systemName:"), - .contains("[UIImage imageNamed:"), - .contains("UIFont(name:"), - .contains(".dateFormat ="), - .contains(".accessibilityLabel ="), - .contains(".accessibilityValue ="), - .contains(".accessibilityIdentifier ="), - .contains("accessibilityIdentifier:"), - .contains("accessibilityLabel:"), - .contains("Accessibility(identifier:"), - .contains("Accessibility(label:"), - .contains("NSAttributedString.Key("), - .contains("Notification.Name("), - .contains("Notification.Key("), - .contains("DispatchQueue("), - .containsAnd("identifier:", .previousLine(numEarlier: 1, .contains("Accessibility("))), - .containsAnd("label:", .previousLine(numEarlier: 1, .contains("Accessibility("))), - .containsAnd("label:", .previousLine(numEarlier: 2, .contains("Accessibility("))), - .contains("SQL("), + .contains(ProjectState.lintSuppression, caseSensitive: false), + .prefix("#import", caseSensitive: false), + .prefix("@available(", caseSensitive: false), + .contains("fatalError(", caseSensitive: false), + .contains("precondition(", caseSensitive: false), + .contains("preconditionFailure(", caseSensitive: false), + .contains("print(", caseSensitive: false), + .contains("NSLog(", caseSensitive: false), + .contains("SNLog(", caseSensitive: false), + .contains("SNLogNotTests(", caseSensitive: false), + .contains("owsFailDebug(", caseSensitive: false), + .contains("#imageLiteral(resourceName:", caseSensitive: false), + .contains("UIImage(named:", caseSensitive: false), + .contains("UIImage(systemName:", caseSensitive: false), + .contains("[UIImage imageNamed:", caseSensitive: false), + .contains("UIFont(name:", caseSensitive: false), + .contains(".dateFormat =", caseSensitive: false), + .contains(".accessibilityLabel =", caseSensitive: false), + .contains(".accessibilityValue =", caseSensitive: false), + .contains(".accessibilityIdentifier =", caseSensitive: false), + .contains("accessibilityIdentifier:", caseSensitive: false), + .contains("accessibilityLabel:", caseSensitive: false), + .contains("Accessibility(identifier:", caseSensitive: false), + .contains("Accessibility(label:", caseSensitive: false), + .contains("NSAttributedString.Key(", caseSensitive: false), + .contains("Notification.Name(", caseSensitive: false), + .contains("Notification.Key(", caseSensitive: false), + .contains("DispatchQueue(", caseSensitive: false), + .containsAnd( + "identifier:", + caseSensitive: false, + .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("Logger\\..*\\("), .regex("OWSLogger\\..*\\("), @@ -528,21 +540,33 @@ extension ProjectState { } indirect enum MatchType: Hashable { - case prefix(String) - case contains(String) - case containsAnd(String, MatchType) + case prefix(String, caseSensitive: Bool) + case contains(String, caseSensitive: Bool) + case containsAnd(String, caseSensitive: Bool, MatchType) case regex(String) case previousLine(numEarlier: Int, MatchType) func matches(_ value: String, _ index: Int, _ lines: [String]) -> Bool { 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 .trimmingCharacters(in: .whitespacesAndNewlines) .hasPrefix(prefix) - case .contains(let other): return value.contains(other) - case .containsAnd(let other, let otherMatch): + case .contains(let other, false): return value.lowercased().contains(other.lowercased()) + 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 } return otherMatch.matches(value, index, lines) diff --git a/Session/Conversations/Views & Modals/InfoBanner.swift b/Session/Conversations/Views & Modals/InfoBanner.swift index 581210062..e8edc0429 100644 --- a/Session/Conversations/Views & Modals/InfoBanner.swift +++ b/Session/Conversations/Views & Modals/InfoBanner.swift @@ -47,8 +47,14 @@ final class InfoBanner: UIView { init(info: Info) { super.init(frame: CGRect.zero) + 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.update(info) }