Repository Analysis

RSSNext/Folo

🧡 Folo is the AI RSS Reader

0.6 Likely human-written View on GitHub
0.6
Adjusted Score
0.6
Raw Score
100%
Time Factor
2026-05-29
Last Push
38,382
Stars
TypeScript
Language
296,832
Lines of Code
2975
Files
144
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 1MEDIUM 7LOW 136

Pattern Findings

144 matches across 10 categories. Click a row to expand file-level details.

Hyper-Verbose Identifiers113 hits · 118 pts
SeverityFileLineSnippet
LOWdocs/superpowers/plans/2026-04-10-ota.md449export function selectLatestCompatibleRelease(
LOW…uperpowers/plans/2026-04-11-desktop-ota-unification.md225function validateDesktopReleasePlan(plan: DesktopReleasePlan) {
LOW…uperpowers/plans/2026-04-11-desktop-ota-unification.md266export function resolveDesktopReleaseConfig(input) {
LOW…uperpowers/plans/2026-04-11-desktop-ota-unification.md458async function buildDesktopReleaseAssets({ projectDir, owner, repo }) {
LOW…uperpowers/plans/2026-04-11-desktop-ota-unification.md787function hasCompleteMirroredPayload(
LOWpackages/internal/utils/src/utils.ts288export function isKeyForMultiSelectPressed(e: MouseEvent) {
LOWpackages/internal/utils/src/utils.ts483export function duplicateIfLengthLessThan(text: string, length: number) {
LOWpackages/internal/utils/src/attribution.ts84export function captureAttributionFromURL(): AttributionData | null {
LOWpackages/internal/utils/src/attribution.ts103export function captureAttributionFromURLString(urlString: string): AttributionData | null {
LOWpackages/internal/utils/src/attribution.ts124export function getAttributionForAnalytics(): Record<string, unknown> {
LOWpackages/internal/utils/src/resize.ts17export function computeAdjustedTopLeftPosition(
LOWpackages/internal/components/src/ui/kbd/Kbd.tsx409function MaterialSymbolsKeyboardCommandKey(props: React.SVGProps<SVGSVGElement>) {
LOWpackages/internal/components/src/ui/kbd/Kbd.tsx420function MaterialSymbolsKeyboardOptionKey(props: React.SVGProps<SVGSVGElement>) {
LOWpackages/internal/components/src/ui/kbd/Kbd.tsx428function MaterialSymbolsKeyboardControlKey(props: React.SVGProps<SVGSVGElement>) {
LOWpackages/internal/components/src/ui/kbd/Kbd.tsx436function MaterialSymbolsShiftOutlineRounded(props: React.SVGProps<SVGSVGElement>) {
LOWpackages/internal/components/src/ui/kbd/Kbd.tsx447function MaterialSymbolsKeyboardTabRounded(props: React.SVGProps<SVGSVGElement>) {
LOWpackages/internal/components/src/ui/kbd/Kbd.tsx458function MaterialSymbolsSpaceBarRounded(props: React.SVGProps<SVGSVGElement>) {
LOWpackages/internal/components/src/ui/kbd/Kbd.tsx480function MaterialSymbolsWindowOutlineSharp(props: React.SVGProps<SVGSVGElement>) {
LOW…l-rich-editor/plugins/triple-backtick-toggle/index.tsx26export function TripleBacktickTogglePlugin() {
LOWpackages/internal/components/src/icons/Progress.tsx3export function MaterialSymbolsProgressActivity(props: SVGProps<SVGSVGElement>) {
LOWpackages/internal/components/src/icons/Database.tsx3export function MaterialSymbolsDatabaseOutline(props: SVGProps<SVGSVGElement>) {
LOWpackages/internal/components/src/icons/resize.tsx3export function LetsIconsResizeDownRightLight(props: SVGProps<SVGSVGElement>) {
LOWpackages/internal/store/src/modules/entry/getter.ts11function sortEntryIdsByPublishDate(a: string, b: string) {
LOWpackages/internal/store/src/modules/summary/utils.ts3export function getGenerateSummaryStatusId(
LOWpackages/configs/tailwindcss/ratio-mixing-plugin.js49function generateDynamicRatioUtilities(addUtilities, config) {
LOWpackages/configs/tailwindcss/ratio-mixing-plugin.js128function generatePercentageBasedUtilities(utilities, config) {
LOW.github/scripts/build-ota-release.test.ts574async function createDesktopProjectFixture(input: {
LOWapps/desktop/plugins/vite/compress.ts23function compressAndFingerprintPlugin(outDir: string): Plugin {
LOWapps/desktop/plugins/vite/cleanup.ts6export function cleanupUnnecessaryFilesPlugin(files: string[]): Plugin {
LOWapps/desktop/plugins/vite/specific-import.ts4export function createPlatformSpecificImportPlugin(platform: Platform): Plugin {
LOWapps/desktop/plugins/vite/deps.ts3export function createDependencyChunksPlugin(dependencies: string[][]): Plugin {
LOWapps/desktop/plugins/vite/hmr.ts5function isNodeWithinCircularImports(
LOWapps/desktop/layer/renderer/src/push-notification.ts12export async function registerWebPushNotifications() {
LOWapps/desktop/layer/renderer/src/atoms/context-menu.ts94function transformMenuItemsForNative(nextItems: FollowMenuItem[]): ElectronMenuItem[] {
LOW…s/desktop/layer/renderer/src/atoms/settings/general.ts76export function useHideAllReadSubscriptions() {
LOW…top/layer/renderer/src/components/common/ShadowDOM.tsx147function getLinkedStaticStyleSheets() {
LOW…op/layer/renderer/src/lib/__tests__/parse-html.test.ts340 function generateNormalDistribution(
LOW…sktop/layer/renderer/src/modules/renderer/markdown.tsx22export function EntryContentMarkdownRenderer({
LOW…/entry-header/internal/EntryHeaderActionsContainer.tsx10function EntryHeaderActionsContainerImpl({ isSmallWidth }: { isSmallWidth?: boolean }) {
LOW…onents/entry-header/internal/EntryHeaderBreadcrumb.tsx39function ViewSubscriptionsDropdown({
LOW…nents/entry-header/internal/EntryHeaderReadHistory.tsx12function EntryHeaderReadHistoryImpl({ className }: { className?: string }) {
LOW…/renderer/src/modules/ai-chat/utils/file-validation.ts94export function getFileCategoryFromMimeType(mimeType: string): FileCategory {
LOW…/renderer/src/modules/ai-chat/utils/file-processing.ts244export async function processAndUploadFile(
LOW…les/ai-chat/components/message/UserRichTextMessage.tsx20function replaceShortcutTagsWithMarkdown(state: string): string {
LOW…hat/components/message/useContextBlockPresentation.tsx28export function useContextBlockPresentation(block: AIChatContextBlock): ContextBlockPresentation {
LOW…er/renderer/src/modules/ai-chat/hooks/useFileUpload.ts217export function useFileUploadWithDefaults(): FileUploadHandlers {
LOW…hat/editor/plugins/shortcut/utils/shortcutTextValue.ts14export function getShortcutDisplayTextValue(shortcutData: ShortcutData): string {
LOW…chat/editor/plugins/file-upload/FileAttachmentNode.tsx26function convertFileAttachmentElement(domNode: Node): null | DOMConversionOutput {
LOW…-chat/editor/plugins/mention/utils/mentionTextValue.ts32export function getMentionDisplayTextValue(
LOW…editor/plugins/selection/SelectedTextNodeComponent.tsx9export function SelectedTextNodeComponent({ text }: SelectedTextNodeComponentProps) {
LOW…ai-chat/editor/plugins/selection/selectedTextBridge.ts8export function queueSelectedTextInsertion(payload: SelectedTextNodePayload) {
LOW…ai-chat/editor/plugins/selection/selectedTextBridge.ts18export function subscribeSelectedTextInsertion(listener: Listener) {
LOW…es/subscription-column/CategoryRemoveDialogContent.tsx12export function CategoryRemoveDialogContent({
LOW…derer/src/modules/subscription-column/FeedCategory.tsx400export const FeedCategoryAutoHideUnread = memo(function FeedCategoryAutoHideUnread(
LOW…bscription-column/CategoryUnsubscribeDialogContent.tsx14export function CategoryUnsubscribeDialogContent({
LOW…rer/src/modules/entry-column/hooks/useEntriesByView.ts113function getEntryIdsFromMultiplePlace(...entryIds: Array<string[] | undefined | null>) {
LOW…erer/src/modules/entry-column/hooks/useLocalEntries.ts28function getEntryIdsFromMultiplePlace(...entryIds: Array<string[] | undefined | null>) {
LOW…r/src/modules/entry-column/Items/notification-item.tsx17export function NotificationItemStateLess({ entry, feed }: EntryItemStatelessProps) {
LOW…er/src/modules/new-user-guide/feeds-selection-list.tsx59function FeedSelectionOperationScreen() {
LOW…rer/src/modules/ai-onboarding/feeds-selection-list.tsx50function FeedSelectionOperationScreen() {
53 more matches not shown…
Over-Commented Block10 hits · 10 pts
SeverityFileLineSnippet
LOWapps/landing/src/components/widgets/landing/Header.tsx141
LOWapps/landing/src/components/widgets/landing/Header.tsx161// <div className="flex flex-col gap-3">
LOWapps/landing/src/components/widgets/landing/Header.tsx181// <Link
LOW…r/renderer/src/modules/app-layout/MainDestopLayout.tsx141 const user = useWhoami()
LOWapps/ssr/src/lib/og/fonts.ts81
LOWapps/ssr/src/lib/og/fonts.ts101// weight: weights.find((weight) => weight.name === fontName.split("-")[1])?.weight,
LOWapps/mobile/ios/Folo/Folo-Bridging-Header.h1//
LOWapps/mobile/src/components/ui/modal/BottomModal.tsx81
LOW…/src/modules/entry-list/templates/EntryPictureItem.tsx141// }
LOW…/src/modules/entry-list/templates/EntryPictureItem.tsx161// </ScrollView>
Verbosity Indicators4 hits · 8 pts
SeverityFileLineSnippet
LOWpackages/readability/src/index.ts31 // Step 1: Get charset from Content-Type header
LOWpackages/readability/src/index.ts34 // Step 2: Use charset from Content-Type header or fall back to chardet
LOWpackages/readability/src/index.ts36 // Step 3: Decode the response body using the detected charset
LOW…i-chat/components/message/parse-incomplete-markdown.ts310 // If we found a closing bracket, we need to check if it's the matching one
Excessive Try-Catch Wrapping4 hits · 7 pts
SeverityFileLineSnippet
MEDIUM…ative/ios/Packages/ImageViewer_swift/ImageLoader.swift31 print("Error: \(error.localizedDescription)")
MEDIUM…ative/ios/Packages/ImageViewer_swift/ImageLoader.swift33 print("Error Code: \(nsError.code), Domain: \(nsError.domain)")
MEDIUM…obile/native/ios/Modules/SharedWebView/FOWebView.swift196 print("Error reading JS file:", error)
MEDIUM…ps/mobile/native/ios/Modules/Helper/Helper+Image.swift135 print("Error saving image: \(error.localizedDescription)")
Cross-Language Confusion (JS/TS)1 hit · 5 pts
SeverityFileLineSnippet
HIGHapps/desktop/layer/renderer/src/lib/export.ts90 print()
AI Slop Vocabulary2 hits · 5 pts
SeverityFileLineSnippet
MEDIUM…op/layer/renderer/src/lib/__tests__/parse-html.test.ts170<span class="token comment"># Automatically leverage output traces to reduce image size</span>
MEDIUM…op/layer/renderer/src/lib/__tests__/parse-html.test.ts204 # Automatically leverage output traces to reduce image size
Fake / Example Data5 hits · 5 pts
SeverityFileLineSnippet
LOW…/src/modules/integration/custom-integration-manager.ts87 { key: "[author]", description: "Entry author", example: "John Doe" },
LOW…/src/modules/integration/custom-integration-manager.ts439 author: sampleEntry?.author || "John Doe",
LOW…/src/modules/integration/custom-integration-manager.ts461 author: sampleEntry?.author || "John Doe",
LOWapps/mobile/src/screens/(headless)/(debug)/markdown.tsx10 '---\n__Advertisement :)__\n\n- __[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image\n
LOWapps/mobile/src/screens/(headless)/(debug)/markdown.tsx10 '---\n__Advertisement :)__\n\n- __[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image\n
Redundant / Tautological Comments3 hits · 4 pts
SeverityFileLineSnippet
LOWscripts/increment-build-id.sh28 # Check if it is a release branch
LOWscripts/increment-build-id.sh33 # Check if there are staged changes in apps/mobile/src
LOW.github/actions/setup-xcode/action.yml76 # Check if iOS SDK is available
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippet
MEDIUMapps/ssr/scripts/skip-ssr-app-vercel-build.sh9# Define an array of paths and files to check
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippet
LOW…op/layer/renderer/src/lib/__tests__/parse-html.test.ts268 // Usage example