mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Fix lint issues.
This commit is contained in:
@@ -8,14 +8,21 @@ line_length:
|
||||
ignores_comments: true
|
||||
ignores_urls: true
|
||||
|
||||
large_tuple:
|
||||
warning: 3
|
||||
error: 4
|
||||
|
||||
disabled_rules:
|
||||
- todo
|
||||
- for_where
|
||||
- file_length
|
||||
- force_cast
|
||||
- force_try
|
||||
|
||||
excluded:
|
||||
- Modules/Secrets/Sources/Secrets/SecretKey.swift
|
||||
- Modules/Account/Tests/AccountTests/Feedly/
|
||||
- Widget/Resources/Localized.swift
|
||||
- Shared/Extensions/NSAttributedString+NetNewsWire.swift
|
||||
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ public enum ArticleExtractorState {
|
||||
case cancelled
|
||||
}
|
||||
|
||||
protocol ArticleExtractorDelegate {
|
||||
protocol ArticleExtractorDelegate: AnyObject {
|
||||
func articleExtractionDidFail(with: Error)
|
||||
func articleExtractionDidComplete(extractedArticle: ExtractedArticle)
|
||||
}
|
||||
@@ -29,7 +29,7 @@ class ArticleExtractor {
|
||||
|
||||
var state: ArticleExtractorState!
|
||||
var article: ExtractedArticle?
|
||||
var delegate: ArticleExtractorDelegate?
|
||||
weak var delegate: ArticleExtractorDelegate?
|
||||
var articleLink: String?
|
||||
|
||||
private var url: URL!
|
||||
|
||||
@@ -16,7 +16,12 @@ import Account
|
||||
|
||||
struct ArticleRenderer {
|
||||
|
||||
typealias Rendering = (style: String, html: String, title: String, baseURL: String)
|
||||
struct Rendering {
|
||||
let style: String
|
||||
let html: String
|
||||
let title: String
|
||||
let baseURL: String
|
||||
}
|
||||
|
||||
struct Page {
|
||||
let url: URL
|
||||
@@ -123,27 +128,27 @@ struct ArticleRenderer {
|
||||
|
||||
static func articleHTML(article: Article, extractedArticle: ExtractedArticle? = nil, theme: ArticleTheme) -> Rendering {
|
||||
let renderer = ArticleRenderer(article: article, extractedArticle: extractedArticle, theme: theme)
|
||||
return (renderer.articleCSS, renderer.articleHTML, renderer.title, renderer.baseURL ?? "")
|
||||
return Rendering(style: renderer.articleCSS, html: renderer.articleHTML, title: renderer.title, baseURL: renderer.baseURL ?? "")
|
||||
}
|
||||
|
||||
static func multipleSelectionHTML(theme: ArticleTheme) -> Rendering {
|
||||
let renderer = ArticleRenderer(article: nil, extractedArticle: nil, theme: theme)
|
||||
return (renderer.articleCSS, renderer.multipleSelectionHTML, renderer.title, renderer.baseURL ?? "")
|
||||
return Rendering(style: renderer.articleCSS, html: renderer.multipleSelectionHTML, title: renderer.title, baseURL: renderer.baseURL ?? "")
|
||||
}
|
||||
|
||||
static func loadingHTML(theme: ArticleTheme) -> Rendering {
|
||||
let renderer = ArticleRenderer(article: nil, extractedArticle: nil, theme: theme)
|
||||
return (renderer.articleCSS, renderer.loadingHTML, renderer.title, renderer.baseURL ?? "")
|
||||
return Rendering(style: renderer.articleCSS, html: renderer.loadingHTML, title: renderer.title, baseURL: renderer.baseURL ?? "")
|
||||
}
|
||||
|
||||
static func noSelectionHTML(theme: ArticleTheme) -> Rendering {
|
||||
let renderer = ArticleRenderer(article: nil, extractedArticle: nil, theme: theme)
|
||||
return (renderer.articleCSS, renderer.noSelectionHTML, renderer.title, renderer.baseURL ?? "")
|
||||
return Rendering(style: renderer.articleCSS, html: renderer.noSelectionHTML, title: renderer.title, baseURL: renderer.baseURL ?? "")
|
||||
}
|
||||
|
||||
static func noContentHTML(theme: ArticleTheme) -> Rendering {
|
||||
let renderer = ArticleRenderer(article: nil, extractedArticle: nil, theme: theme)
|
||||
return (renderer.articleCSS, renderer.noContentHTML, renderer.title, renderer.baseURL ?? "")
|
||||
return Rendering(style: renderer.articleCSS, html: renderer.noContentHTML, title: renderer.title, baseURL: renderer.baseURL ?? "")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,6 +264,7 @@ private extension ArticleRenderer {
|
||||
return d
|
||||
}
|
||||
|
||||
// swiftlint:disable:next cyclomatic_complexity
|
||||
func byline() -> String {
|
||||
guard let authors = article?.authors ?? article?.feed?.authors, !authors.isEmpty else {
|
||||
return ""
|
||||
|
||||
@@ -78,10 +78,7 @@ final class DeleteCommand: UndoableCommand {
|
||||
}
|
||||
|
||||
for node in nodes {
|
||||
if let _ = node.representedObject as? Feed {
|
||||
continue
|
||||
}
|
||||
if let _ = node.representedObject as? Folder {
|
||||
if node.representedObject is Feed || node.representedObject is Folder {
|
||||
continue
|
||||
}
|
||||
return false
|
||||
@@ -171,9 +168,9 @@ private struct SidebarItemSpecifier {
|
||||
|
||||
func restore() {
|
||||
|
||||
if let _ = feed {
|
||||
if feed != nil {
|
||||
restoreFeed()
|
||||
} else if let _ = folder {
|
||||
} else if folder != nil {
|
||||
restoreFolder()
|
||||
}
|
||||
}
|
||||
@@ -268,9 +265,9 @@ private struct DeleteActionName {
|
||||
var numberOfFolders = 0
|
||||
|
||||
for node in nodes {
|
||||
if let _ = node.representedObject as? Feed {
|
||||
if node.representedObject is Feed {
|
||||
numberOfFeeds += 1
|
||||
} else if let _ = node.representedObject as? Folder {
|
||||
} else if node.representedObject is Folder {
|
||||
numberOfFolders += 1
|
||||
} else {
|
||||
return nil // Delete only Feeds and Folders.
|
||||
|
||||
@@ -56,7 +56,20 @@ private extension SendToMarsEditCommand {
|
||||
let body = article.contentHTML ?? article.contentText ?? article.summary
|
||||
let authorName = article.authors?.first?.name
|
||||
|
||||
let sender = SendToBlogEditorApp(targetDescriptor: targetDescriptor, title: article.title, body: body, summary: article.summary, link: article.externalLink, permalink: article.link, subject: nil, creator: authorName, commentsURL: nil, guid: article.uniqueID, sourceName: article.feed?.nameForDisplay, sourceHomeURL: article.feed?.homePageURL, sourceFeedURL: article.feed?.url)
|
||||
let sender = SendToBlogEditorApp(
|
||||
targetDescriptor: targetDescriptor,
|
||||
title: article.title,
|
||||
body: body,
|
||||
summary: article.summary,
|
||||
link: article.externalLink,
|
||||
permalink: article.link,
|
||||
subject: nil,
|
||||
creator: authorName, commentsURL: nil,
|
||||
guid: article.uniqueID,
|
||||
sourceName: article.feed?.nameForDisplay,
|
||||
sourceHomeURL: article.feed?.homePageURL,
|
||||
sourceFeedURL: article.feed?.url
|
||||
)
|
||||
sender.send()
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ final class SendToMicroBlogCommand: SendToCommand {
|
||||
func canSendObject(_ object: Any?, selectedText: String?) -> Bool {
|
||||
|
||||
microBlogApp.updateStatus()
|
||||
guard microBlogApp.existsOnDisk, let article = (object as? ArticlePasteboardWriter)?.article, let _ = article.preferredLink else {
|
||||
guard microBlogApp.existsOnDisk, let article = (object as? ArticlePasteboardWriter)?.article, article.preferredLink != nil else {
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
@@ -138,6 +138,7 @@ extension Article {
|
||||
}
|
||||
}
|
||||
|
||||
// swiftlint:disable:next cyclomatic_complexity
|
||||
func byline() -> String {
|
||||
guard let authors = authors ?? feed?.authors, !authors.isEmpty else {
|
||||
return ""
|
||||
|
||||
@@ -41,7 +41,7 @@ public class ColorHash {
|
||||
for char in "\(str)x" {
|
||||
if let scl = String(char).unicodeScalars.first?.value {
|
||||
if hash > maxSafeInteger {
|
||||
hash = hash / seed2
|
||||
hash /= seed2
|
||||
}
|
||||
hash = hash * seed + CGFloat(scl)
|
||||
}
|
||||
|
||||
@@ -18,9 +18,7 @@ protocol SortableArticle {
|
||||
|
||||
struct ArticleSorter {
|
||||
|
||||
static func sortedByDate<T: SortableArticle>(articles: [T],
|
||||
sortDirection: ComparisonResult,
|
||||
groupByFeed: Bool) -> [T] {
|
||||
static func sortedByDate<T: SortableArticle>(articles: [T], sortDirection: ComparisonResult, groupByFeed: Bool) -> [T] {
|
||||
if groupByFeed {
|
||||
return sortedByFeedName(articles: articles, sortByDateDirection: sortDirection)
|
||||
} else {
|
||||
@@ -30,8 +28,7 @@ struct ArticleSorter {
|
||||
|
||||
// MARK: -
|
||||
|
||||
private static func sortedByFeedName<T: SortableArticle>(articles: [T],
|
||||
sortByDateDirection: ComparisonResult) -> [T] {
|
||||
private static func sortedByFeedName<T: SortableArticle>(articles: [T], sortByDateDirection: ComparisonResult) -> [T] {
|
||||
// Group articles by "feed-feedID" - feed ID is used to differentiate between
|
||||
// two feeds that have the same name
|
||||
let groupedArticles = Dictionary(grouping: articles) { "\($0.sortableName.lowercased())-\($0.sortableFeedID)" }
|
||||
@@ -44,8 +41,7 @@ struct ArticleSorter {
|
||||
}
|
||||
}
|
||||
|
||||
private static func sortedByDate<T: SortableArticle>(articles: [T],
|
||||
sortDirection: ComparisonResult) -> [T] {
|
||||
private static func sortedByDate<T: SortableArticle>(articles: [T], sortDirection: ComparisonResult) -> [T] {
|
||||
return articles.sorted { (article1, article2) -> Bool in
|
||||
if article1.sortableDate == article2.sortableDate {
|
||||
return article1.sortableArticleID < article2.sortableArticleID
|
||||
|
||||
@@ -64,6 +64,7 @@ public final class WidgetDataEncoder {
|
||||
}
|
||||
}
|
||||
|
||||
// swiftlint:disable:next function_body_length
|
||||
private func encodeWidgetData(completion: @escaping (WidgetData?) -> Void) {
|
||||
let dispatchGroup = DispatchGroup()
|
||||
var groupError: Error?
|
||||
|
||||
Reference in New Issue
Block a user